summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:53:52 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:53:52 +0000
commitefe47381c599b07e4c7bbdb2e91e8090a541c887 (patch)
tree05cf57183f5a23394eca11b00f97a74a5dfdf79d
parentInitial commit. (diff)
downloaddevscripts-upstream.tar.xz
devscripts-upstream.zip
Adding upstream version 2.23.4+deb12u1.upstream/2.23.4+deb12u1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--.gitlab-ci.yml28
-rw-r--r--.perltidyrc18
-rw-r--r--COPYING340
-rw-r--r--Makefile77
-rw-r--r--Makefile.common16
-rw-r--r--README392
-rw-r--r--README.newscripts17
-rw-r--r--conf.default.in632
-rw-r--r--cowpoke.conf133
-rw-r--r--doc/Makefile26
-rw-r--r--doc/devscripts.1.in30
-rw-r--r--doc/devscripts.conf.560
-rw-r--r--doc/edit-patch.143
-rwxr-xr-xdoc/genmanpage.pl30
-rw-r--r--doc/suspicious-source.155
-rw-r--r--doc/what-patch.142
-rw-r--r--doc/wrap-and-sort.1102
-rwxr-xr-xexamples/debbisect_buildsrc.sh17
-rw-r--r--examples/forward.exim6
-rw-r--r--lib/Devscripts/Compression.pm104
-rw-r--r--lib/Devscripts/Config.pm418
-rw-r--r--lib/Devscripts/DB_File_Lock.pm364
-rw-r--r--lib/Devscripts/Debbugs.pm481
-rw-r--r--lib/Devscripts/JSONCache.pm97
-rw-r--r--lib/Devscripts/MkOrigtargz.pm631
-rw-r--r--lib/Devscripts/MkOrigtargz/Config.pm247
-rw-r--r--lib/Devscripts/Output.pm83
-rw-r--r--lib/Devscripts/PackageDeps.pm307
-rw-r--r--lib/Devscripts/Packages.pm313
-rwxr-xr-xlib/Devscripts/Salsa.pm410
-rwxr-xr-xlib/Devscripts/Salsa/Config.pm460
-rw-r--r--lib/Devscripts/Salsa/Hooks.pm303
-rwxr-xr-xlib/Devscripts/Salsa/Repo.pm73
-rw-r--r--lib/Devscripts/Salsa/add_user.pm40
-rwxr-xr-xlib/Devscripts/Salsa/check_repo.pm205
-rw-r--r--lib/Devscripts/Salsa/checkout.pm79
-rw-r--r--lib/Devscripts/Salsa/create_repo.pm47
-rw-r--r--lib/Devscripts/Salsa/del_repo.pm26
-rw-r--r--lib/Devscripts/Salsa/del_user.pm32
-rw-r--r--lib/Devscripts/Salsa/fork.pm36
-rw-r--r--lib/Devscripts/Salsa/forks.pm45
-rw-r--r--lib/Devscripts/Salsa/group.pm35
-rw-r--r--lib/Devscripts/Salsa/join.pm20
-rw-r--r--lib/Devscripts/Salsa/last_ci_status.pm74
-rw-r--r--lib/Devscripts/Salsa/list_groups.pm40
-rw-r--r--lib/Devscripts/Salsa/list_repos.pm42
-rw-r--r--lib/Devscripts/Salsa/merge_request.pm174
-rw-r--r--lib/Devscripts/Salsa/merge_requests.pm49
-rwxr-xr-xlib/Devscripts/Salsa/pipeline_schedule.pm124
-rwxr-xr-xlib/Devscripts/Salsa/pipeline_schedules.pm70
-rw-r--r--lib/Devscripts/Salsa/protect_branch.pm43
-rw-r--r--lib/Devscripts/Salsa/protected_branches.pm27
-rw-r--r--lib/Devscripts/Salsa/purge_cache.pm15
-rw-r--r--lib/Devscripts/Salsa/push.pm106
-rw-r--r--lib/Devscripts/Salsa/push_repo.pm71
-rw-r--r--lib/Devscripts/Salsa/rename_branch.pm45
-rw-r--r--lib/Devscripts/Salsa/search_group.pm37
-rw-r--r--lib/Devscripts/Salsa/search_project.pm57
-rw-r--r--lib/Devscripts/Salsa/search_user.pm36
-rw-r--r--lib/Devscripts/Salsa/update_repo.pm140
-rw-r--r--lib/Devscripts/Salsa/update_safe.pm22
-rw-r--r--lib/Devscripts/Salsa/update_user.pm38
-rw-r--r--lib/Devscripts/Salsa/whoami.pm24
-rw-r--r--lib/Devscripts/Set.pm126
-rw-r--r--lib/Devscripts/Uscan/CatchRedirections.pm27
-rw-r--r--lib/Devscripts/Uscan/Config.pm392
-rw-r--r--lib/Devscripts/Uscan/Ctype/nodejs.pm36
-rw-r--r--lib/Devscripts/Uscan/Ctype/perl.pm36
-rw-r--r--lib/Devscripts/Uscan/Downloader.pm303
-rw-r--r--lib/Devscripts/Uscan/FindFiles.pm257
-rw-r--r--lib/Devscripts/Uscan/Keyring.pm168
-rw-r--r--lib/Devscripts/Uscan/Output.pm129
-rw-r--r--lib/Devscripts/Uscan/Utils.pm475
-rw-r--r--lib/Devscripts/Uscan/WatchFile.pm517
-rw-r--r--lib/Devscripts/Uscan/WatchLine.pm1850
-rw-r--r--lib/Devscripts/Uscan/_vcs.pm93
-rw-r--r--lib/Devscripts/Uscan/_xtp.pm90
-rw-r--r--lib/Devscripts/Uscan/ftp.pm280
-rw-r--r--lib/Devscripts/Uscan/git.pm172
-rw-r--r--lib/Devscripts/Uscan/http.pm510
-rw-r--r--lib/Devscripts/Uscan/svn.pm67
-rw-r--r--lib/Devscripts/Utils.pm31
-rw-r--r--lib/Devscripts/Versort.pm60
-rw-r--r--po4a/Makefile42
-rw-r--r--po4a/add_de/translator_man.add16
-rw-r--r--po4a/add_fr/translator_dbk.add27
-rw-r--r--po4a/add_fr/translator_man.add19
-rw-r--r--po4a/add_fr/translator_pod.add10
-rw-r--r--po4a/add_pt/translator_man.add6
-rw-r--r--po4a/devscripts-po4a.conf152
-rw-r--r--po4a/po/de.po30629
-rw-r--r--po4a/po/devscripts.pot24568
-rw-r--r--po4a/po/fr.po30665
-rw-r--r--po4a/po/pt.po30325
-rw-r--r--scripts/Makefile172
-rw-r--r--scripts/annotate-output.159
-rwxr-xr-xscripts/annotate-output.sh102
-rw-r--r--scripts/archpath.163
-rwxr-xr-xscripts/archpath.sh46
-rw-r--r--scripts/bts.bash_completion319
-rwxr-xr-xscripts/bts.pl4337
-rwxr-xr-xscripts/build-rdeps.pl551
-rw-r--r--scripts/chdist.bash_completion60
-rwxr-xr-xscripts/chdist.pl778
-rw-r--r--scripts/checkbashisms.177
-rw-r--r--scripts/checkbashisms.bash_completion28
-rwxr-xr-xscripts/checkbashisms.pl822
-rw-r--r--scripts/cowpoke.1388
-rwxr-xr-xscripts/cowpoke.sh542
-rw-r--r--scripts/cvs-debc.167
-rw-r--r--scripts/cvs-debi.171
-rwxr-xr-xscripts/cvs-debi.sh370
-rw-r--r--scripts/cvs-debrelease.172
-rwxr-xr-xscripts/cvs-debrelease.sh385
-rw-r--r--scripts/cvs-debuild.159
-rwxr-xr-xscripts/cvs-debuild.pl216
-rw-r--r--scripts/dcmd.1112
-rwxr-xr-xscripts/dcmd.sh326
-rw-r--r--scripts/dd-list.1110
-rwxr-xr-xscripts/dd-list.pl322
-rwxr-xr-xscripts/deb-janitor320
-rw-r--r--scripts/deb-janitor.194
-rw-r--r--scripts/deb-reversion.dbk320
-rwxr-xr-xscripts/deb-reversion.sh231
-rwxr-xr-xscripts/deb-why-removed.pl251
-rwxr-xr-xscripts/debbisect1229
-rw-r--r--scripts/debc.1131
l---------scripts/debc.pl1
-rw-r--r--scripts/debchange.1491
-rw-r--r--scripts/debchange.bash_completion90
-rwxr-xr-xscripts/debchange.pl1882
-rwxr-xr-xscripts/debcheckout.pl1260
-rw-r--r--scripts/debclean.1115
-rwxr-xr-xscripts/debclean.sh218
-rwxr-xr-xscripts/debcommit.pl958
-rwxr-xr-xscripts/debdiff-apply382
-rw-r--r--scripts/debdiff-apply.1112
-rw-r--r--scripts/debdiff.1264
-rw-r--r--scripts/debdiff.bash_completion154
-rwxr-xr-xscripts/debdiff.pl1239
-rw-r--r--scripts/debi.1140
-rw-r--r--scripts/debi.bash_completion23
-rwxr-xr-xscripts/debi.pl477
-rwxr-xr-xscripts/debootsnap694
l---------scripts/debootsnap.py1
-rw-r--r--scripts/debpkg-wrapper.c17
-rw-r--r--scripts/debpkg.125
-rwxr-xr-xscripts/debpkg.pl95
-rwxr-xr-xscripts/debrebuild.pl715
-rw-r--r--scripts/debrelease.1138
-rwxr-xr-xscripts/debrelease.sh341
-rw-r--r--scripts/debrepro.pod177
-rwxr-xr-xscripts/debrepro.sh293
-rw-r--r--scripts/debrsign.172
-rwxr-xr-xscripts/debrsign.sh273
-rw-r--r--scripts/debsign.1146
-rw-r--r--scripts/debsign.bash_completion99
-rwxr-xr-xscripts/debsign.sh869
-rw-r--r--scripts/debsnap.1160
-rwxr-xr-xscripts/debsnap.pl423
-rw-r--r--scripts/debuild.1462
-rw-r--r--scripts/debuild.bash_completion103
-rwxr-xr-xscripts/debuild.pl1227
-rw-r--r--scripts/dep3changelog.129
-rwxr-xr-xscripts/dep3changelog.pl187
-rwxr-xr-xscripts/desktop2menu.pl317
-rw-r--r--scripts/devscripts/control.py292
-rw-r--r--scripts/devscripts/logger.py75
-rw-r--r--scripts/devscripts/test/__init__.py67
-rw-r--r--scripts/devscripts/test/pylint.conf67
-rw-r--r--scripts/devscripts/test/test_black.py50
-rw-r--r--scripts/devscripts/test/test_control.py280
-rw-r--r--scripts/devscripts/test/test_debootsnap.py56
-rw-r--r--scripts/devscripts/test/test_flake8.py59
-rw-r--r--scripts/devscripts/test/test_help.py84
-rw-r--r--scripts/devscripts/test/test_isort.py42
-rw-r--r--scripts/devscripts/test/test_logger.py57
-rw-r--r--scripts/devscripts/test/test_pylint.py82
-rw-r--r--scripts/devscripts/test/test_suspicious_source.py41
-rwxr-xr-xscripts/dget.pl745
-rw-r--r--scripts/diff2patches.150
-rwxr-xr-xscripts/diff2patches.sh93
-rw-r--r--scripts/dpkg-depcheck.1130
-rwxr-xr-xscripts/dpkg-depcheck.pl534
-rw-r--r--scripts/dpkg-genbuilddeps.140
-rwxr-xr-xscripts/dpkg-genbuilddeps.sh41
-rw-r--r--scripts/dscextract.133
-rw-r--r--scripts/dscextract.bash_completion34
-rwxr-xr-xscripts/dscextract.sh121
-rw-r--r--scripts/dscverify.186
-rw-r--r--scripts/dscverify.bash_completion32
-rwxr-xr-xscripts/dscverify.pl457
-rwxr-xr-xscripts/edit-patch.sh313
-rw-r--r--scripts/getbuildlog.142
-rwxr-xr-xscripts/getbuildlog.sh151
-rwxr-xr-xscripts/git-deborig.pl284
-rw-r--r--scripts/grep-excuses.165
-rwxr-xr-xscripts/grep-excuses.pl420
-rwxr-xr-xscripts/hardening-check.pl684
-rw-r--r--scripts/list-unreleased.123
-rw-r--r--scripts/list-unreleased.bash_completion13
-rwxr-xr-xscripts/list-unreleased.sh92
-rw-r--r--scripts/ltnu.pod108
-rwxr-xr-xscripts/ltnu.sh86
-rw-r--r--scripts/manpage-alert.135
-rwxr-xr-xscripts/manpage-alert.sh147
-rwxr-xr-xscripts/mass-bug.pl570
-rw-r--r--scripts/mergechanges.133
-rwxr-xr-xscripts/mergechanges.sh402
-rwxr-xr-xscripts/mk-build-deps.pl615
-rw-r--r--scripts/mk-origtargz.bash_completion49
-rwxr-xr-xscripts/mk-origtargz.pl223
-rwxr-xr-xscripts/namecheck.pl231
-rw-r--r--scripts/nmudiff.1129
-rwxr-xr-xscripts/nmudiff.sh464
-rwxr-xr-xscripts/origtargz.pl438
-rw-r--r--scripts/pkgnames.bash_completion24
-rw-r--r--scripts/plotchangelog.1127
-rw-r--r--scripts/plotchangelog.bash_completion33
-rwxr-xr-xscripts/plotchangelog.pl429
-rw-r--r--scripts/pts-subscribe.159
-rwxr-xr-xscripts/pts-subscribe.sh176
-rw-r--r--scripts/pyproject.toml6
-rw-r--r--scripts/rc-alert.1129
-rwxr-xr-xscripts/rc-alert.pl501
-rwxr-xr-xscripts/reproducible-check266
-rwxr-xr-xscripts/rmadison.pl414
-rwxr-xr-xscripts/run_bisect.sh114
-rwxr-xr-xscripts/run_bisect_qemu.sh365
-rwxr-xr-xscripts/sadt647
-rw-r--r--scripts/sadt.pod76
-rw-r--r--scripts/salsa.bash_completion57
-rwxr-xr-xscripts/salsa.pl1062
-rwxr-xr-xscripts/setup.py52
-rwxr-xr-xscripts/suspicious-source177
-rwxr-xr-xscripts/svnpath.pl100
-rwxr-xr-xscripts/tagpending.pl437
-rwxr-xr-xscripts/transition-check.pl241
-rw-r--r--scripts/uscan.bash_completion59
-rwxr-xr-xscripts/uscan.pl2203
-rw-r--r--scripts/uupdate.1199
-rw-r--r--scripts/uupdate.bash_completion47
-rwxr-xr-xscripts/uupdate.sh1142
-rw-r--r--scripts/what-patch.bash_completion13
-rwxr-xr-xscripts/what-patch.sh121
-rwxr-xr-xscripts/who-permits-upload.pl353
-rw-r--r--scripts/who-uploads.176
-rwxr-xr-xscripts/who-uploads.sh278
-rw-r--r--scripts/whodepends.120
-rwxr-xr-xscripts/whodepends.sh56
-rw-r--r--scripts/wnpp-alert.134
-rwxr-xr-xscripts/wnpp-alert.sh142
-rw-r--r--scripts/wnpp-check.142
-rwxr-xr-xscripts/wnpp-check.sh104
-rwxr-xr-xscripts/wrap-and-sort496
-rw-r--r--templates/README.mk-build-deps15
-rw-r--r--test/Makefile49
-rw-r--r--test/bashisms/531327.sh6
-rw-r--r--test/bashisms/535368.mk6
-rw-r--r--test/bashisms/808271.sh9
-rw-r--r--test/bashisms/808271.sh.out4
-rw-r--r--test/bashisms/arith.sh21
-rw-r--r--test/bashisms/arith.sh.out16
-rw-r--r--test/bashisms/array-expansion.sh60
-rw-r--r--test/bashisms/array-expansion.sh.out80
-rw-r--r--test/bashisms/ash-setvar.sh4
-rw-r--r--test/bashisms/ash-setvar.sh.out2
-rw-r--r--test/bashisms/basic-bash-override.mk6
-rw-r--r--test/bashisms/basic-bash.mk6
-rw-r--r--test/bashisms/basic.mk21
-rw-r--r--test/bashisms/basic.mk.out10
-rw-r--r--test/bashisms/brace-expansion.sh9
-rw-r--r--test/bashisms/brace-expansion.sh.out10
-rw-r--r--test/bashisms/case-modification.sh19
-rw-r--r--test/bashisms/case-modification.sh.out24
-rw-r--r--test/bashisms/command.sh16
-rw-r--r--test/bashisms/command.sh.out12
-rw-r--r--test/bashisms/comments-in-quoted-strings1.sh7
-rw-r--r--test/bashisms/comments-in-quoted-strings2.sh4
-rw-r--r--test/bashisms/comments-parsing-fns.sh3
-rw-r--r--test/bashisms/comments-parsing-fns.sh.out2
-rw-r--r--test/bashisms/coproc.sh3
-rw-r--r--test/bashisms/coproc.sh.out2
-rw-r--r--test/bashisms/dynamic-length.sh9
-rw-r--r--test/bashisms/dynamic-length.sh.out8
-rw-r--r--test/bashisms/exit-code.sh7
-rw-r--r--test/bashisms/exit-code.sh.out6
-rw-r--r--test/bashisms/fail2ban.sh3
-rw-r--r--test/bashisms/fps.sh9
-rw-r--r--test/bashisms/fps.sh.out3
-rw-r--r--test/bashisms/functions.sh66
-rw-r--r--test/bashisms/functions.sh.out32
-rw-r--r--test/bashisms/gettext.sh5
-rw-r--r--test/bashisms/gettext.sh.out2
-rw-r--r--test/bashisms/glob-ignore.sh4
-rw-r--r--test/bashisms/glob-ignore.sh.out2
-rw-r--r--test/bashisms/hash.sh5
-rw-r--r--test/bashisms/hash.sh.out6
-rw-r--r--test/bashisms/heredoc-with-dash.sh35
-rw-r--r--test/bashisms/heredoc-with-others.sh77
-rw-r--r--test/bashisms/heredocs.sh52
-rw-r--r--test/bashisms/heredocs.sh.out10
-rw-r--r--test/bashisms/jobs.sh15
-rw-r--r--test/bashisms/jobs.sh.out16
-rw-r--r--test/bashisms/line-continuation.sh19
-rw-r--r--test/bashisms/line-continuation.sh.out6
-rw-r--r--test/bashisms/negations.sh11
-rw-r--r--test/bashisms/negations.sh.out2
-rw-r--r--test/bashisms/other-vars.sh15
-rw-r--r--test/bashisms/other-vars.sh.out14
-rw-r--r--test/bashisms/printf.sh7
-rw-r--r--test/bashisms/printf.sh.out6
-rw-r--r--test/bashisms/quoted-strings.sh37
-rw-r--r--test/bashisms/quoted-strings.sh.out18
-rw-r--r--test/bashisms/return.sh13
-rw-r--r--test/bashisms/return.sh.out6
-rw-r--r--test/bashisms/shell-vars.mk5
-rw-r--r--test/bashisms/source2
-rw-r--r--test/bashisms/source.out2
-rw-r--r--test/bashisms/special-case.sh13
-rw-r--r--test/bashisms/special-case.sh.out4
-rw-r--r--test/bashisms/special-expansions.sh26
-rw-r--r--test/bashisms/special-expansions.sh.out36
-rw-r--r--test/bashisms/subshell-no-arith.sh3
-rw-r--r--test/bashisms/tilde-expansion.sh41
-rw-r--r--test/bashisms/tilde-expansion.sh.out28
-rw-r--r--test/bashisms/traps.sh17
-rw-r--r--test/bashisms/traps.sh.out18
-rw-r--r--test/bashisms/underscore-var.sh3
-rw-r--r--test/bashisms/underscore-var.sh.out2
-rw-r--r--test/bashisms/unknown-fns.sh297
-rw-r--r--test/bashisms/unknown-fns.sh.out10
-rw-r--r--test/bashisms/unterminated-string.sh5
-rw-r--r--test/bashisms/unterminated-string2.sh5
-rw-r--r--test/dd-list/sources185
-rw-r--r--test/debdiff/devscripts_2.13.0_any.debbin0 -> 850 bytes
-rw-r--r--test/debdiff/devscripts_2.13.1_any.debbin0 -> 848 bytes
-rw-r--r--test/debrepro/reproducible/debian/changelog5
-rw-r--r--test/debrepro/reproducible/debian/compat1
-rw-r--r--test/debrepro/reproducible/debian/control15
-rwxr-xr-xtest/debrepro/reproducible/debian/rules4
-rw-r--r--test/debrepro/reproducible/debian/source/format1
-rw-r--r--test/debrepro/unreproducible/debian/changelog5
-rw-r--r--test/debrepro/unreproducible/debian/compat1
-rw-r--r--test/debrepro/unreproducible/debian/control15
-rwxr-xr-xtest/debrepro/unreproducible/debian/rules9
-rw-r--r--test/debrepro/unreproducible/debian/source/format1
-rw-r--r--test/debsign/private_key.asc106
-rw-r--r--test/debsign/public_key.asc52
-rw-r--r--test/debsign/sphinx_1.7.2-1.dsc30
-rw-r--r--test/debsign/sphinx_1.7.2-1_amd64.buildinfo472
-rw-r--r--test/debsign/sphinx_1.7.2-1_amd64.changes54
-rw-r--r--test/lib_test_uscan130
-rw-r--r--test/mass-bug/one-package1
-rw-r--r--test/mass-bug/packages4
-rw-r--r--test/mass-bug/template20
-rw-r--r--test/mergechanges/different-description.changes41
-rw-r--r--test/mergechanges/different-source.changes41
-rw-r--r--test/mergechanges/different-version.changes41
-rw-r--r--test/mergechanges/format-1.7.changes41
-rw-r--r--test/mergechanges/linux_4.9.161-1_amd64.changes2016
-rw-r--r--test/mergechanges/unsupported-checksum.changes44
-rw-r--r--test/mergechanges/unsupported-format.changes41
-rw-r--r--test/mergechanges/xdg-desktop-portal_1.2.0-1_all.changes41
-rw-r--r--test/mergechanges/xdg-desktop-portal_1.2.0-1_amd64.changes51
-rw-r--r--test/mergechanges/xdg-desktop-portal_1.2.0-1_source.changes64
-rw-r--r--test/sadt/README5
-rw-r--r--test/sadt/comma-separated-restrictions/debian/control0
-rw-r--r--test/sadt/comma-separated-restrictions/debian/tests/control2
-rwxr-xr-xtest/sadt/comma-separated-restrictions/debian/tests/test1
-rw-r--r--test/sadt/comma-separated-tests/debian/control0
-rw-r--r--test/sadt/comma-separated-tests/debian/tests/control1
-rwxr-xr-xtest/sadt/comma-separated-tests/debian/tests/test11
-rwxr-xr-xtest/sadt/comma-separated-tests/debian/tests/test22
-rw-r--r--test/sadt/fails/debian/control0
-rw-r--r--test/sadt/fails/debian/tests/control1
-rwxr-xr-xtest/sadt/fails/debian/tests/fails1
-rw-r--r--test/sadt/flaky/debian/control0
-rw-r--r--test/sadt/flaky/debian/tests/control2
-rwxr-xr-xtest/sadt/flaky/debian/tests/flaky-fails1
-rwxr-xr-xtest/sadt/flaky/debian/tests/flaky-succeeds1
-rw-r--r--test/sadt/ignore-udebs/debian/control0
-rw-r--r--test/sadt/ignore-udebs/debian/tests/control1
-rwxr-xr-xtest/sadt/new9
-rw-r--r--test/sadt/passes/debian/control0
-rw-r--r--test/sadt/passes/debian/tests/control1
-rwxr-xr-xtest/sadt/passes/debian/tests/test1
-rw-r--r--test/sadt/skippable/debian/control0
-rw-r--r--test/sadt/skippable/debian/tests/control2
-rwxr-xr-xtest/sadt/skippable/debian/tests/skipped2
-rw-r--r--test/sadt/space-separated-restrictions/debian/control0
-rw-r--r--test/sadt/space-separated-restrictions/debian/tests/control2
-rwxr-xr-xtest/sadt/space-separated-restrictions/debian/tests/test1
-rw-r--r--test/sadt/space-separated-tests/debian/control0
-rw-r--r--test/sadt/space-separated-tests/debian/tests/control1
-rwxr-xr-xtest/sadt/space-separated-tests/debian/tests/test11
-rwxr-xr-xtest/sadt/space-separated-tests/debian/tests/test22
-rw-r--r--test/sadt/superficial-fails/debian/control0
-rw-r--r--test/sadt/superficial-fails/debian/tests/control2
-rwxr-xr-xtest/sadt/superficial-fails/debian/tests/test1
-rw-r--r--test/sadt/superficial/debian/control0
-rw-r--r--test/sadt/superficial/debian/tests/control2
-rwxr-xr-xtest/sadt/superficial/debian/tests/test1
-rw-r--r--test/sadt/test-command/debian/control0
-rw-r--r--test/sadt/test-command/debian/tests/control1
-rw-r--r--test/sadt/tests-directory/debian/control0
-rw-r--r--test/sadt/tests-directory/debian/tests/control2
-rwxr-xr-xtest/sadt/tests-directory/foo/test1
-rw-r--r--test/sadt/unskippable/debian/control0
-rw-r--r--test/sadt/unskippable/debian/tests/control1
-rwxr-xr-xtest/sadt/unskippable/debian/tests/unskippable2
-rw-r--r--test/sadt/unskipped/debian/control0
-rw-r--r--test/sadt/unskipped/debian/tests/control2
-rwxr-xr-xtest/sadt/unskipped/debian/tests/fails1
-rw-r--r--test/shunit2-helper-functions.sh27
-rwxr-xr-xtest/t/common.t106
-rw-r--r--test/t/config112
-rw-r--r--test/t/config21
-rw-r--r--test/t/json-cache.t25
-rw-r--r--test/t/salsa-config.t18
-rw-r--r--test/t/salsa.conf4
-rw-r--r--test/t/salsa.pm226
-rw-r--r--test/t/salsa.t108
-rw-r--r--test/t/uscan-config.t20
-rwxr-xr-xtest/test_annotate-output47
-rwxr-xr-xtest/test_checkbashisms221
-rwxr-xr-xtest/test_dd-list47
-rwxr-xr-xtest/test_debchange251
-rwxr-xr-xtest/test_debdiff35
-rwxr-xr-xtest/test_debi285
-rwxr-xr-xtest/test_debrepro46
-rwxr-xr-xtest/test_debsign114
-rw-r--r--test/test_helper.sh26
-rwxr-xr-xtest/test_mass_bug161
-rwxr-xr-xtest/test_mergechanges551
-rwxr-xr-xtest/test_mk-origtargz750
-rwxr-xr-xtest/test_package_lifecycle386
-rwxr-xr-xtest/test_perl12
-rwxr-xr-xtest/test_perltidy39
-rwxr-xr-xtest/test_sadt100
-rwxr-xr-xtest/test_salsa106
-rwxr-xr-xtest/test_uscan548
-rwxr-xr-xtest/test_uscan_ftp489
-rwxr-xr-xtest/test_uscan_git207
-rwxr-xr-xtest/test_uscan_group210
-rwxr-xr-xtest/test_uscan_mangle1543
-rwxr-xr-xtest/test_uscan_online50
-rwxr-xr-xtest/test_uscan_svn201
-rwxr-xr-xtest/test_wrap-and-sort50
-rw-r--r--test/uscan/PRIVATE_KEY.asc106
-rw-r--r--test/uscan/PUBLIC_KEY.asc52
-rw-r--r--test/uscan/ftpserver.py29
-rw-r--r--test/uscan/httpserver.py25
-rw-r--r--test/uscan/manual-test/Makefile35
-rw-r--r--test/uscan/manual-test/_dh-make-golang/debian/changelog5
-rwxr-xr-xtest/uscan/manual-test/_dh-make-golang/debian/rules0
-rw-r--r--test/uscan/manual-test/_dh-make-golang/debian/source/format1
-rw-r--r--test/uscan/manual-test/_dh-make-golang/debian/watch5
-rw-r--r--test/uscan/manual-test/_dl-poly-classic/debian/changelog5
-rwxr-xr-xtest/uscan/manual-test/_dl-poly-classic/debian/rules0
-rw-r--r--test/uscan/manual-test/_dl-poly-classic/debian/source/format1
-rw-r--r--test/uscan/manual-test/_dl-poly-classic/debian/watch7
-rw-r--r--test/uscan/manual-test/_osamu-utils/debian/changelog5
-rwxr-xr-xtest/uscan/manual-test/_osamu-utils/debian/rules0
-rw-r--r--test/uscan/manual-test/_osamu-utils/debian/source/format1
-rw-r--r--test/uscan/manual-test/_osamu-utils/debian/watch5
-rw-r--r--test/uscan/manual-test/_tweeper/debian/changelog5
-rwxr-xr-xtest/uscan/manual-test/_tweeper/debian/rules0
-rw-r--r--test/uscan/manual-test/_tweeper/debian/source/format1
-rw-r--r--test/uscan/manual-test/_tweeper/debian/watch5
-rw-r--r--test/uscan/manual-test/_upspin/debian/changelog5
-rwxr-xr-xtest/uscan/manual-test/_upspin/debian/rules0
-rw-r--r--test/uscan/manual-test/_upspin/debian/source/format1
-rw-r--r--test/uscan/manual-test/_upspin/debian/watch5
-rw-r--r--test/uscan/s3bucket3
-rw-r--r--test/wrap-and-sort/install-comments/in/install12
-rw-r--r--test/wrap-and-sort/install-comments/out/install11
477 files changed, 190483 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..b2b5c2d
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,28 @@
+before_script:
+ - apt-get -q update
+ - echo "man-db man-db/auto-update boolean false" | debconf-set-selections
+ - apt-get -q -y dist-upgrade
+ - env DEBIAN_FRONTEND=noninteractive apt-get -q -y install --no-install-recommends aspcud apt-cudf
+ - env DEBIAN_FRONTEND=noninteractive apt-get -q -y --solver aspcud -o APT::Solver::Strict-Pinning=0 -o Debug::pkgProblemResolver=yes build-dep .
+ - make
+
+.test_template: &test
+ script:
+ - make test
+ - make destructive-test
+
+unstable:
+ <<: *test
+ image: debian:unstable
+
+testing:
+ <<: *test
+ image: debian:testing
+
+stable-bpo:
+ <<: *test
+ image: debian:stable-backports
+
+ubuntu-devel:
+ <<: *test
+ image: ubuntu:devel
diff --git a/.perltidyrc b/.perltidyrc
new file mode 100644
index 0000000..3bd39f1
--- /dev/null
+++ b/.perltidyrc
@@ -0,0 +1,18 @@
+# -*- conf -*-
+#
+# Default options for perltidy for proper Perl code reformatting.
+#
+# This file is based on the one from the rra-c-util package,
+# which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
+
+-bbao # put line breaks before any operator
+-nbbc # don't force blank lines before comments (bad for else blocks)
+-ce # cuddle braces around else
+-l=79 # usually use 78, but don't want 79-long lines reformatted
+-pt=2 # don't add extra whitespace around parentheses
+-sbt=2 # ...or square brackets
+-sfs # no space before semicolon in for (not that I use this form)
+-bar # opening-brace-always-on-right
+-sot # avoid lines with isolated opening tokens
+-sct # ... same for closing tokens
+-fs # allow "perltidy, please don't touch this" sections
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..c74d291
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..1be41db
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,77 @@
+# Simplified Makefile for devscripts
+
+include Makefile.common
+
+DESTDIR =
+
+all: version doc make_scripts conf.default translated_manpages
+
+version:
+ rm -f version
+ dpkg-parsechangelog -SVersion > version
+
+conf.default: conf.default.in version
+ rm -f $@ $@.tmp
+ VERSION=`cat version` && sed -e "s/###VERSION###/$$VERSION/" $< \
+ > $@.tmp && mv $@.tmp $@
+
+translated_manpages:
+ $(MAKE) -C po4a/
+ touch translated_manpages
+
+clean_translated_manpages:
+ # Update the POT/POs and remove the translated man pages
+ $(MAKE) -C po4a/ clean
+ rm -f translated_manpages
+
+clean: clean_scripts clean_doc clean_translated_manpages
+ rm -f version conf.default make_scripts
+
+doc:
+ $(MAKE) -C doc
+
+online-test:
+ $(MAKE) -C test/ online-test
+
+destructive-test:
+ $(MAKE) -C test/ $@
+
+destructive-test-installed:
+ $(MAKE) -C test/ $@
+
+test:
+ $(MAKE) test_scripts
+ $(MAKE) test_test
+
+test-installed:
+ $(MAKE) -C test/ $@
+
+install: all install_scripts install_doc
+ install -d "$(DESTDIR)$(PERLMOD_DIR)" \
+ "$(DESTDIR)$(DATA_DIR)" "$(DESTDIR)$(TEMPLATES_DIR)" \
+ "$(DESTDIR)$(DOCDIR)"
+ for f in lib/*; do cp -a "$$f" "$(DESTDIR)$(PERLMOD_DIR)"; done
+ install -m0644 conf.default "$(DESTDIR)$(DATA_DIR)"
+ install -m0644 templates/README.mk-build-deps "$(DESTDIR)$(TEMPLATES_DIR)"
+ install -m0644 README "$(DESTDIR)$(DOCDIR)"
+ ln -sf edit-patch.1 "$(DESTDIR)$(MAN1DIR)/add-patch.1"
+
+test_test:
+ $(MAKE) -C test/ test
+
+make_scripts: version
+ $(MAKE) -C scripts/
+ touch $@
+clean_scripts: clean_translated_manpages
+ $(MAKE) -C scripts/ clean
+test_scripts:
+ $(MAKE) -C scripts/ test
+install_scripts:
+ $(MAKE) -C scripts/ install DESTDIR=$(DESTDIR)
+
+clean_doc: clean_translated_manpages
+ $(MAKE) -C doc clean
+install_doc:
+ $(MAKE) -C doc install DESTDIR=$(DESTDIR)
+
+.PHONY: online-test test test-installed
diff --git a/Makefile.common b/Makefile.common
new file mode 100644
index 0000000..1be08f1
--- /dev/null
+++ b/Makefile.common
@@ -0,0 +1,16 @@
+GEN_MAN1S := bts.1 build-rdeps.1 chdist.1 debcheckout.1 debcommit.1 \
+ deb-reversion.1 desktop2menu.1 dget.1 mass-bug.1 \
+ mk-build-deps.1 mk-origtargz.1 namecheck.1 rmadison.1 sadt.1 svnpath.1 \
+ uscan.1 salsa.1 \
+ tagpending.1 origtargz.1 transition-check.1 who-permits-upload.1 \
+ git-deborig.1 hardening-check.1
+
+PREFIX = /usr
+BINDIR = $(PREFIX)/bin
+DOCDIR = $(PREFIX)/share/doc/devscripts
+MAN1DIR = $(PREFIX)/share/man/man1
+MAN5DIR = $(PREFIX)/share/man/man5
+PERLMOD_DIR = $(shell perl -MConfig -e 'print $$Config{vendorlib}')
+DATA_DIR = $(PREFIX)/share/devscripts
+TEMPLATES_DIR = $(DATA_DIR)/templates
+SYSCONFDIR = /etc
diff --git a/README b/README
new file mode 100644
index 0000000..c30e7f6
--- /dev/null
+++ b/README
@@ -0,0 +1,392 @@
+README for Debian devscripts package
+====================================
+
+Devscripts provides several scripts which may be of use to Debian
+developers. The following gives a summary of the available scripts --
+please read the manpages for full details about the use of these
+scripts. They are contributed by multiple developers; for details of
+the authors, please see the code or manpages.
+
+Also, many of these scripts have dependencies on other packages, but
+rather than burden the package with a large number of dependencies,
+most of which will not be needed by most people, the individual
+dependencies are listed as "Recommends" in the control file; lastly,
+scripts that are unlikely to be used by many people have their dependencies
+categorized as "Suggests" in the control file. This
+ensures that the packages will be installed by default but allows
+users to remove them if desired. The dependencies and recommendations
+are listed in square brackets in the description below, as well as in
+the Description field in the control file.
+The scripts marked with an asterisk ('*') are considered "core", and as
+such have their dependencies all listed as hard "Depends".
+
+And now, in alphabetical order, the scripts:
+
+- annotate-output: run a command and prepend time and stream (O for stdout,
+ E for stderr) for every line of output.
+
+- archpath: Prints arch (tla/Bazaar 1.x) package names. Also supports
+ calculating the package names for other branches. [tla]
+
+- bts: A command-line tool for accessing the Debian Bug Tracking System, both
+ to send mails to control@bts.debian.org and to access the web pages and
+ SOAP interface of the BTS. [www-browser, libauthen-sasl-perl,
+ libsoap-lite-perl, liburi-perl, libwww-perl, bsd-mailx | mailx]
+
+- build-rdeps: Searches for all packages that build-depend on a given package.
+ [dctrl-tools, dose-extra, libdpkg-perl]
+
+- chdist: tool to easily play with several distributions. [dctrl-tools]
+
+- checkbashisms: check whether a /bin/sh script contains any common
+ bash-specific constructs.
+
+- cowpoke: upload a Debian source package to a cowbuilder host and build it,
+ optionally also signing and uploading the result to an incoming queue.
+ [ssh-client]
+
+- cvs-debi, cvs-debc: wrappers around debi and debc respectively (see below)
+ which allow them to be called from the CVS working directory.
+ [cvs-buildpackage]
+
+- cvs-debrelease: wrapper around debrelease which allows it to be called
+ from the CVS working directory. [cvs-buildpackage, dupload | dput,
+ ssh-client]
+
+- cvs-debuild: A wrapper for cvs-buildpackage to use debuild as its package
+ building program. [cvs-buildpackage, fakeroot, lintian, gnupg |gnupg2]
+
+- dcmd: run a given command replacing the name of a .changes or .dsc file
+ with each of the files referenced therein. *
+
+- dd-list: given a list of packages, pretty-print it ordered by maintainer. *
+
+- debbisect: bisect snapshot.debian.org to find which change in the archive
+ introduced a certain problem. [mmdebstrap, python3-debian]
+
+- debc: List contents of current package. Do this after a successful
+ "debuild" to see if the package looks all right.
+
+- debchange (abbreviation dch): Modifies debian/changelog and manages version
+ numbers for you. It will either increment the version number or add an
+ entry for the current version, depending upon the options given to it.
+ [libdistro-info-perl, libsoap-lite-perl]*
+
+- debcheckout: checkout the development repository of a Debian package. *
+
+- debclean: Clean a Debian source tree. Debclean will clean all Debian
+ source trees below the current directory, and if requested, also remove
+ all files that were generated from these source trees (that is .deb, .dsc
+ and .changes files). It will keep the .diffs and original files, though,
+ so that the binaries and other files can be rebuilt if necessary.
+ [fakeroot]*
+
+- debcommit: Commits changes to cvs, darcs, svn, svk, tla, bzr, git, or hg,
+ using new entries in debian/changelog as the commit message. Also supports
+ tagging Debian package releases. [cvs | darcs | subversion | svk | tla |
+ bzr | git-core | mercurial, libtimedate-perl]
+
+- debdiff: A program which examines two .deb files or two .changes files and
+ reports on any difference found in their file lists. Useful for ensuring
+ that no files were inadvertently lost between versions. Can also examine
+ two .dsc files and report on the changes between source versions.
+ For a deeper comparison one can use the diffoscope package.
+ [wdiff, patchutils]*
+
+- debdiff-apply: Apply unified diffs of two Debian source packages, such as
+ those generated by debdiff, to a target Debian source package. Any changes
+ to debian/changelog are dealt with specially, to avoid the conflicts that
+ changelog diffs typically produce when applied naively. May be used to check
+ that old patches still apply to newer versions of those packages.
+ [python3-debian, python3-unidiff, quilt]
+
+- debi: Installs the current package by using the setuid root debpkg
+ script described below. It assumes that the current package has
+ just been built (for example by debuild), and the .deb lives in the
+ parent directory, and will effectively run dpkg -i on the .deb. The
+ ability to install the package with a very short command is very
+ useful when troubleshooting packages.
+
+- debootsnap: Combines debootstrap and snapshot.debian.org to create a chroot
+ containing exactly the requested selection of packages. This can be used
+ to re-create a chroot from the past, for example to reproduce a bug. The
+ tool is also used by debrebuild to build a package in a chroot with build
+ dependencies in the same version as recorded in the buildinfo file.
+ [apt-utils, dpkg-dev, equivs, mmdebstrap, python3-pycurl]
+
+- debpkg: A wrapper for dpkg used by debi to allow convenient testing
+ of packages. For debpkg to work, it needs to be made setuid root,
+ and this needs to be performed by the sysadmin -- it is not
+ installed as setuid root by default. (Note that being able to run a
+ setuid root debpkg is effectively the same as having root access to
+ the system, so this should be done with caution.) Having debpkg as
+ a wrapper for dpkg can be a Good Thing (TM), as it decreases the
+ potential for damage by accidental wrong use of commands in
+ superuser mode (e.g., an inadvertent rm -rf * in the wrong directory
+ is disastrous as many can attest to).
+
+- debrelease: A wrapper around dupload or dput which figures out which
+ version to upload, and then calls dupload or dput to actually perform
+ the upload. [dupload | dput, ssh-client]
+
+- debrebuild: A script that provided a .buildinfo file reports the
+ instructions on how to try to reproduce the reported build.
+ [sbuild | mmdebstrap, python3-pycurl, libdpkg-perl]
+
+- debrepro: A script that tests reproducibility of Debian packages. It will
+ build a given source directory twice, with a set of variation between the
+ first and second build, and compare the binary packages produced. If
+ diffoscope is installed, it is used to compare non-matching binaries. If
+ disorderfs is installed, it is used during the build to inject
+ non-determinism in filesystem listing operations.
+ [faketime, diffoscope, disorderfs]
+
+- debrsign: This transfers a .changes/.dsc pair to a remote machine for
+ signing, and runs debsign on the remote machine over an SSH connection.
+ [gnupg | gnupg2, debian-keyring, ssh-client]
+
+- debsign: Use GNU Privacy Guard to sign the changes (and possibly dsc)
+ files created by running dpkg-buildpackage with no-sign options. Useful
+ if you are building a package on a remote machine and wish to sign it on
+ a local one. This script is capable of automatically downloading the
+ .changes and .dsc files from a remote machine. [gnupg |gnupg2,
+ debian-keyring, ssh-client]*
+
+- debsnap: grab packages from https://snapshot.debian.org [libwww-perl,
+ libjson-perl]
+
+- debuild: A wrapper for building a package (i.e., dpkg-buildpackage) to
+ avoid problems with insufficient permissions and wrong paths etc.
+ Debuild will set up the proper environment for building a package.
+ Debuild will use the fakeroot program to build the package by default, but
+ can be instructed to use any other gain-root command, or can even be
+ installed setuid root. Debuild can also be used to run various of
+ the debian/rules operations with the same root-gaining procedure.
+ Debuild will also run lintian to check that the package does not
+ have any major policy violations. [fakeroot, lintian, gnupg | gnupg2]*
+
+- deb-janitor: command-line client for interacting with the Debian Janitor.
+
+- deb-reversion: increases a binary package version number and repacks the
+ package, useful for porters and the like.
+
+- deb-why-removed: shows the reason a package was removed from the archive.
+ [libdpkg-perl]
+
+- dep3changelog: generate a changelog entry from a DEP3-style patch header.
+
+- desktop2menu: given a freedesktop.org desktop file, generate a skeleton
+ for a menu file. [libfile-desktopentry-perl]
+
+- dget: Downloads Debian source and binary packages. Point at a .changes or
+ .dsc to download all references files. Specify a package name to download
+ it from the configured apt repository. [wget | curl]
+
+- diff2patches: extracts patches from a .diff.gz file placing them under
+ debian/ or, if present, debian/patches. [patchutils]
+
+- dpkg-depcheck, dpkg-genbuilddeps: Runs a specified command (such as
+ debian/rules build) or dpkg-buildpackage, respectively, to determine the
+ packages used during the build process. This information can be helpful
+ when trying to determine the packages needed in the Build-Depends etc.
+ lines in the debian/control file. [build-essential, strace]
+
+- dscextract: extract a single file from a Debian source package. [patchutils]
+
+- dscverify: check the signature and MD5 sums of a dsc file against the most
+ current Debian keyring on your system. [gnupg | gnupg2, debian-keyring]
+
+- edit-patch: add/edit a patch for a source package and commit the changes.
+ [quilt | dpatch | cdbs]
+
+- getbuildlog: download package build logs from Debian auto-builders. [wget]
+
+- git-deborig: try to produce Debian orig.tar using git-archive(1).
+ [libdpkg-perl, libgit-wrapper-perl, liblist-compare-perl,
+ libstring-shellquote-perl, libtry-tiny-perl]
+
+- grep-excuses: grep britney's excuses to find out what is happening to your
+ packages. [libdbd-pg-perl, libterm-size-perl, libyaml-syck-perl, wget, w3m]
+
+- hardening-check: report the hardening characteristics of a set of binaries.
+
+- list-unreleased: searches for packages marked UNRELEASED in their
+ changelog.
+
+- ltnu (Long Time No Upload): List all uploads of packages by the
+ given uploader or maintainer and display them ordered by the last
+ upload of that package, oldest uploads first.
+
+- manpage-alert: locate binaries without corresponding manpages. [man-db]
+
+- mass-bug: mass-file bug reports. [bsd-mailx | mailx]
+
+- mergechanges: merge .changes files from the same release but built
+ on different architectures.
+
+- mk-build-deps: Given a package name and/or control file, generate a binary
+ package which may be installed to satisfy the build-dependencies of the
+ given package. [equivs]
+
+- mk-origtargz: Rename upstream tarball, optionally changing the compression
+ and removing unwanted files.
+ [libfile-which-perl, unzip, xz-utils, file]
+
+- namecheck: Check project names are not already taken.
+
+- nmudiff: prepare a diff of this version (presumably an NMU against the
+ previously released version (as per the changelog) and submit the diff
+ to the BTS. [patchutils, mutt]
+
+- origtargz: fetch the orig tarball of a Debian package from various sources,
+ and unpack it. [pristine-tar, pristine-lfs]
+
+- plotchangelog: display information from a changelog graphically using
+ gnuplot. [libtimedate-perl, gnuplot]
+
+- pts-subscribe: subscribe to the PTS (Package Tracking System) for a
+ limited period of time. [bsd-mailx | mailx, at]
+
+- rc-alert: list installed packages which have release-critical bugs.
+ [wget | curl]
+
+- reproducible-check: reports on the reproducible status of installed
+ packages. For more details please see <https://reproducible-builds.org>.
+
+- rmadison: remotely query the Debian archive database about packages.
+ [liburi-perl, wget | curl]
+
+- sadt: run DEP-8 tests. [python3-debian, autodep8]
+
+- salsa: manipulates salsa.debian.org repositories and users
+ [libgitlab-api-v4-perl]
+
+- suspicious-source: output a list of files which are not common source
+ files. [python3-magic]
+
+- svnpath: Prints the path to the Subversion repository of a Subversion
+ checkout. Also supports calculating the paths for branches and
+ tags in a repository independent fashion. Used by debcommit to generate
+ svn tags. [subversion]
+
+- tagpending: runs from a Debian source tree and tags bugs that are to be
+ closed in the latest changelog as pending. [libsoap-lite-perl]
+
+- transition-check: Check a list of source packages for involvement in
+ transitions for which uploads to unstable are currently blocked.
+ [libwww-perl, libyaml-syck-perl]
+
+- uscan: Automatically scan for and download upstream updates. Uscan can
+ also call a program such as uupdate to attempt to update the Debianised
+ version based on the new update. Whilst uscan could be used to release
+ the updated version automatically, it is probably better not to without
+ testing it first. Uscan can also verify detached OpenPGP signatures if
+ upstream's signing key is known. [file, gpgv | gpgv2, gnupg | gnupg2,
+ libfile-dirlist-perl, libfile-touch-perl, libfile-which-perl,
+ liblwp-protocol-https-perl, libmoo-perl, libwww-perl, unzip, xz-utils]*
+
+- uupdate: Update the package with an archive or patches from
+ an upstream author. This will be of help if you have to update your
+ package. It will try to apply the latest diffs to your package and
+ tell you how successful it was. [patch]
+
+- what-patch: determine what patch system, if any, a source package is using.
+ [patchutils]
+
+- whodepends: check which maintainers' packages depend on a package.
+
+- who-permits-upload: Retrieve information about Debian Maintainer access
+ control lists. [gnupg | gnupg2, libencode-locale-perl, libwww-perl,
+ debian-keyring]
+
+- who-uploads: determine the most recent uploaders of a package to the Debian
+ archive. [gnupg | gnupg2, debian-keyring, debian-maintainers, wget]
+
+- wnpp-alert: list installed packages which are orphaned or up for adoption.
+ [wget | curl]
+
+- wnpp-check: check whether there is an open request for packaging or
+ intention to package bug for a package. [wget | curl]
+
+- wrap-and-sort: wrap long lines and sort items in packaging files.
+ [python3-debian]
+
+- /usr/share/doc/devscripts/examples: This directory contains an example
+ exim script for sorting mail arriving to Debian mailing lists.
+
+Typical Maintenance cycle with devscripts
+-----------------------------------------
+
+1. cd <source directory of package>
+
+2. Editing of files
+
+3. Log the changes with: dch -i "I changed this"
+ If desired, use debcommit to commit changes to cvs, svn, arch or git.
+
+4. Run debuild to compile it. If it fails, return to 2. (You could
+ also just test the compilation by running the appropriate part of
+ debian/rules.)
+
+5. Check if package contents appear to be ok with "debc"
+
+6. Install the package with "debi" and test the functionality it
+ should provide. (Note that this step requires debpkg to be setuid
+ root, or you to be logged in as root or similar.)
+
+7. If all is ok release it by running debrelease.
+
+8. Optionally, use debcommit --release to commit and tag the release
+ in revision control.
+
+
+Wrapper scripts
+---------------
+
+Devscripts includes two wrappers (the above mentioned "debuild" and
+"debpkg") that are intended to make life easier for Debian developers.
+These wrappers unset most environment variables for security reasons,
+set a secure PATH and then run the appropriate program (such as dpkg).
+Processing Makefiles is inherently dangerous though, since any UNIX
+command can be executed. The fakeroot command makes it possible to
+build a package in a secure way: it does not require any genuine root
+access, but rather pretends that it has it. It is strongly
+recommended that you install the "fakeroot" package! Installation of
+a package with dpkg always requires superuser mode and is therefore
+inherently dangerous. Debi aims to reduce the possibility of typos
+by only performing a dpkg -i as root. This does not, however, do
+anything for security, as there is no problem creating a package with
+a setuid-root shell using fakeroot and then installing it with debpkg.
+So only allow trusted users access to a setuid root debpkg, if at all!
+
+The wrappers have to be manually equipped to gain the necessary
+privileges to do their jobs because of security concerns. You have to
+equip "debpkg" with superuser privileges. "debuild" needs superuser
+privileges only if fakeroot or another gain-root command is not
+available.
+
+You can either:
+
+(a) invoke these wrappers from "sudo" or "super" or any other way you
+ have to control superuser access, or
+
+(b) you can set them up to be accessible only to a group of users.
+ (Some people suggest that this is highly dangerous since it
+ creates another executable that runs with the setuid root bit set
+ and which won't ever ask you for a password!) If you choose this
+ method, it can be done by issuing the following command:
+
+ dpkg-statoverride --update --add root root_group 4754 /usr/bin/debpkg
+
+ once (and similarly for debuild if you really need it). This will
+ enable access to debpkg for all users who are members of the group
+ "root_group". Remember that you are in effect giving those users
+ superuser access to your system! This information will be stored
+ in the dpkg database and remembered across upgrades.
+
+ Because of the security implications, only do this on your home
+ Linux box, NOT on a busy internet server (and possibly not even
+ there).
+
+Originally by Christoph Lameter <clameter@waterf.org>
+Modified extensively by Julian Gilbey <jdg@debian.org>
diff --git a/README.newscripts b/README.newscripts
new file mode 100644
index 0000000..383a89f
--- /dev/null
+++ b/README.newscripts
@@ -0,0 +1,17 @@
+List of things to do when adding a new script to devscripts package:
+
+1. Add the script under scripts/
+ - the script should have .sh or .pl extension, otherwise have a look at
+ scripts/Makefile and patch it
+ - if the script is perl and uses embedded POD for documentation, add an
+ entry to the GEN_MAN1S variable in Makefile
+2. Add an entry in README
+3. Add an entry in debian/control
+4. Add an entry in po4a/devscripts-po4a.conf
+5. Add any necessary entries to the Suggests: and Recommends: lines in
+ debian/control
+6. Modify conf.default.in and debian/postinst if necessary
+7. Modify debian/copyright if necessary
+8. Add entries in .gitignore
+9. Add a changelog entry
+10. Add an entry in https://wiki.debian.org/Devscripts/bugs (and send to the BTS)
diff --git a/conf.default.in b/conf.default.in
new file mode 100644
index 0000000..259cf7d
--- /dev/null
+++ b/conf.default.in
@@ -0,0 +1,632 @@
+# This configuration file gives defaults for the scripts in
+# the devscripts package, as documented in the individual manpages.
+# Variables defined here may be overridden by a per-user ~/.devscripts
+# configuration file, which has exactly the same syntax as this file.
+#
+# This file is sourced by /bin/bash, and should only contain
+# comment lines (beginning with a '#'), and lines of the form
+# VARIABLE=value
+# The value must be quoted if there are spaces in it.
+# Variables corresponding to switches (on/off; yes/no) must take
+# one of the values 'yes' or 'no'.
+# The variable names are all of the form PROGNAME_VARNAME,
+# or DEVSCRIPTS_VARNAME if they are more generally applicable.
+#
+# As new variables are introduced into the devscripts program, their
+# descriptions and default values will be appended as comments
+# to this file.
+
+# Variables recognised as of devscripts version ###VERSION###:
+
+##### Package-wide variables
+#
+# Lists of which scripts are affected by these package-wide variables
+# can be found in the devscripts.conf(5) manpage.
+#
+#
+# Directory Name Checking
+#
+# Several programs check the directory name and refuse to function if
+# it does not match the name of the package being worked on. (The
+# details are described in the individual manpages.)
+# These two variables control this behaviour, corresponding to the
+# --check-dirname-level and --check-dirname-regex command line options.
+# The possible values of DEVSCRIPTS_CHECK_DIRNAME_LEVEL are:
+# 0 never check the directory name
+# 1 check the directory name only if the program has changed directory
+# 2 always check the directory name
+# The variable DEVSCRIPTS_DIRNAME_REGEXP is a Perl regex which
+# defines what is considered a valid directory name for the source
+# package PACKAGE; if it includes a '/', then it must match the full
+# directory path, otherwise it must match the full directory name.
+#
+# The default settings are:
+# DEVSCRIPTS_CHECK_DIRNAME_LEVEL=1
+# DEVSCRIPTS_CHECK_DIRNAME_REGEX='PACKAGE(-.+)?'
+
+##### annotate-output
+#
+# No variables currently
+
+##### archpath
+#
+# No variables currently
+
+##### bts
+#
+# Default bts show/bugs to run in offline mode?
+# BTS_OFFLINE=no
+#
+# Cache all visited bug reports once a cache has been established
+# for the first time?
+# BTS_CACHE=yes
+#
+# How much to mirror when caching? The minimal amount (min), the mbox
+# version as well (mbox) or the whole works (full)?
+# BTS_CACHE_MODE=min
+#
+# Always refresh the cache, even if nothing's changed?
+# BTS_FORCE_REFRESH=no
+#
+# How do we read an mbox? This will be split on whitespace, then
+# %s is replaced by the mbox name and %% by a single %.
+# BTS_MAIL_READER='mutt -f %s'
+#
+# What sendmail command do we use? This will be split on whitespace.
+# BTS_SENDMAIL_COMMAND='/usr/sbin/sendmail'
+#
+# Download only new bugs when caching? If set to yes, don't check for
+# updates in bugs we already have.
+# BTS_ONLY_NEW=no
+#
+# Which SMTP host should be used? Note that if both an SMTP host and
+# sendmail command are specified in the configuration file(s), the SMTP
+# host will be used unless overridden by --sendmail on the command line
+# BTS_SMTP_HOST=reportbug.debian.org
+#
+# If the SMTP host specified above requires authentication, the following
+# options may be used to specify the username and password to use.
+# If only a username is provided then the password will be prompted for
+# before sending the e-mail
+# BTS_SMTP_AUTH_USERNAME=user
+# BTS_SMTP_AUTH_PASSWORD=pass
+#
+# Specify a HELO to use when connecting to the SMTP host. If not supplied
+# and the file /etc/mailname exists, its contents will be used as the HELO
+# BTS_SMTP_HELO=foo.example.com
+#
+# Include resolved bugs when caching?
+# BTS_INCLUDE_RESOLVED=yes
+#
+# Suppress BTS acknowledgment e-mails (ignored by the control bot)
+# BTS_SUPPRESS_ACKS=no
+#
+# Allow the generated message to be edited and, if necessary, abandoned
+# before sending it to the control bot?
+#
+# If set to yes, prompt for confirmation / edit / abandonment.
+# If set to force, spawn an editor and then proceed as if set to yes
+# BTS_INTERACTIVE=no
+#
+# Specify a list of e-mail addresses to which a carbon copy of the
+# generated e-mail to the control bot should automatically be sent.
+# BTS_DEFAULT_CC=example@example.com
+#
+# Which debbugs server should be used?
+# BTS_SERVER=https://bugs.debian.org
+
+##### chdist
+#
+# No variables currently
+
+##### checkbashisms
+#
+# No variables currently
+
+##### cowpoke
+#
+# No variables currently; see cowpoke.conf and cowpoke(1)
+
+##### cvs-debc
+#
+# No variables currently
+
+##### cvs-debi
+#
+# No variables currently
+
+##### cvs-debrelease
+#
+# No variables currently
+
+##### cvs-debuild
+#
+# No variables currently
+
+##### dd-list
+#
+# No variables currently
+
+##### dcmd
+#
+# No variables currently
+
+##### debc
+#
+# debc recognises the DEBRELEASE_DEBS_DIR variable; see debrelease
+# below for more information.
+
+##### deb-reversion
+#
+# No variables currently
+
+##### debchange/dch
+#
+# Preserve the source tree dirname if the upstream version changes?
+# DEBCHANGE_PRESERVE=no
+#
+# Query the BTS when --closes is being used?
+# DEBCHANGE_QUERY_BTS=yes
+#
+# Select a heuristic to use to determine whether the package has released.
+# See the debchange man page for details.
+# DEBCHANGE_RELEASE_HEURISTIC=log
+# DEBCHANGE_RELEASE_HEURISTIC=changelog
+#
+# Introduce multiple-maintainer markers in changelog sections?
+# DEBCHANGE_MULTIMAINT=yes
+#
+# When appending to a multiple-maintainer changelog, if there are
+# existing changes made by the current maintainer, should new
+# changelog entries be appended to the existing entries?
+# DEBCHANGE_MULTIMAINT_MERGE=no
+#
+# When appending entries to the changelog, should the trailer line
+# be maintained as-is?
+# DEBCHANGE_MAINTTRAILER=yes
+#
+# Use a fixed timezone in changelog entries?
+# DEBCHANGE_TZ=UTC
+#
+# Allow a new version to be lower than the current package version
+# if the new version matches the specified regular expression
+# DEBCHANGE_LOWER_VERSION_PATTERN=bpo
+#
+# Attempt to automatically determine whether the current changelog
+# stanza represents an NMU?
+# DEBCHANGE_AUTO_NMU=yes
+#
+# When --release was used and an editor presented, force the changelog
+# to be explicitly saved in the editor? If this is set to "no" then
+# the changes made by --release will be automatically saved.
+# DEBCHANGE_FORCE_SAVE_ON_RELEASE=yes
+
+##### debcheckout
+#
+# List of space-separated pairs REGEXP/REPLACEMENT_TEXT to define
+# custom rules to enable authenticated mode.
+# DEBCHECKOUT_AUTH_URLS=''
+#
+# For debian-dir-only repositories, also retrieve the source
+# package, unpack it, and move the missing files over.
+# DEBCHECKOUT_SOURCE=auto
+#
+# Username for authenticated mode, can be overridden with -u|--user.
+# DEBCHECKOUT_USER=''
+#
+# See debcheckout(1) for a more precise description of syntax and
+# semantics of these settings.
+
+##### debclean
+#
+# Remove .deb, .changes, .dsc and .upload files?
+# DEBCLEAN_CLEANDEBS=no
+
+##### debcommit
+#
+# Strip a leading "* " from commit messages taken from changelogs?
+# DEBCOMMIT_STRIP_MESSAGE=yes
+#
+# Sign created tags using gnupg?
+# DEBCOMMIT_SIGN_TAGS=no
+#
+# Take any uncommitted changes in the changelog in
+# to account when determining the commit message
+# for a release?
+# DEBCOMMIT_RELEASE_USE_CHANGELOG=no
+#
+# Sign commits using gnupg?
+# DEBCOMMIT_SIGN_COMMITS=no
+
+##### debdiff
+#
+# Show directory names which appear in the filelist?
+# DEBDIFF_DIRS=no
+#
+# Compare control files?
+# DEBDIFF_CONTROL=yes
+#
+# Which control files to compare? A comma-separated list, with
+# possibilities such as postinst, config and so on; ALL means compare
+# all control files.
+# DEBDIFF_CONTROLFILES=control
+#
+# Show files which have moved between .debs?
+# DEBDIFF_SHOW_MOVED=no
+#
+# Option to pass to wdiff
+# DEBDIFF_WDIFF_OPT=
+#
+# Include the output of diffstat?
+# DEBDIFF_SHOW_DIFFSTAT=no
+#
+# Compare control files in source packages using wdiff?
+# DEBDIFF_WDIFF_SOURCE_CONTROL=no
+#
+# Always compare package in version order, rather than the order specified
+# on the command line?
+# DEBDIFF_AUTO_VER_SORT=no
+#
+# Unpack tarballs found in the top level source directory.
+# DEBDIFF_UNPACK_TARBALLS=yes
+#
+# Apply patches when comparing 3.0 (quilt)-format packages
+# DEBDIFF_APPLY_PATCHES=no
+
+##### debdiff-apply
+#
+# No variables currently
+
+##### debi
+#
+# debc recognises the DEBRELEASE_DEBS_DIR variable; see debrelease
+# below for more information.
+
+##### debpkg
+#
+# No variables currently
+
+##### debrelease
+#
+# This specifies which uploader program to use. As of devscripts ###VERSION###
+# the recognised values are "dupload" (default) and "dput". Check the
+# debrelease(1) manpage for any recent changes to this variable
+# DEBRELEASE_UPLOADER=dupload
+#
+# This specifies the directory, relative to the top of the source
+# tree, in which the .changes and .debs files are to be found. Note
+# that this also affects debc and debi.
+# DEBRELEASE_DEBS_DIR=..
+
+##### debrsign
+#
+# No variables currently
+
+##### debsign
+#
+# debsign recognises the DEBRELEASE_DEBS_DIR variable; see debrelease
+# above for more information.
+#
+# Always re-sign files even if they are already signed, without prompting.
+# DEBSIGN_ALWAYS_RESIGN=yes
+#
+# Which signing program to use? gpg and pgp are the usual values; the
+# default is determined as described in the manpage.
+# Corresponds to -p option
+# DEBSIGN_PROGRAM=
+#
+# How the signing program works; must be either gpg or pgp as of
+# devscripts version ###VERSION###. The default is described in the
+# manpage. Corresponds to -sgpg and -spgp.
+# DEBSIGN_SIGNLIKE=
+#
+# Maintainer name (only used to determine GPG keyid; -m option)
+# DEBSIGN_MAINT=
+#
+# GPG keyid to use (-k option)
+# DEBSIGN_KEYID=
+
+##### debsnap
+#
+# Where to put the directory named <prefix>-<package>/
+# default: source-$package_name if unset
+# DEBSNAP_DESTDIR=
+#
+# Verbosely show messages (yes/no)
+# default: no
+# DEBSNAP_VERBOSE=no
+#
+# The base URL of the archive to download from
+# DEBSNAP_BASE_URL=https://snapshot.debian.org
+#
+# A sed regexp to transform pool/<component>/f/foo into the desired layout
+# default: make the directory from pool/<component>/f/foo to pool/f/foo
+# DEBSNAP_CLEAN_REGEX="s@\([^/]*\)/[^/]*/\(.*\)@\1/\2@"
+#
+# Where the Sources.gz lives, subdirectory of DEBSNAP_BASE_URL/<clean dir>/
+# default: DEBSNAP_BASE_URL/<clean dir>/source/Sources.gz
+# DEBSNAP_SOURCES_GZ_PATH=source/Sources.gz
+
+##### debuild
+#
+# Do we preserve the whole environment except for PATH?
+# DEBUILD_PRESERVE_ENV=no
+#
+# Are there any environment variables we should preserve? This should
+# be a comma-separated list.
+# DEBUILD_PRESERVE_ENVVARS=""
+#
+# How to set a preserved environment variable, in this case to set
+# FOO=bar.
+# DEBUILD_SET_ENVVAR_FOO=bar
+#
+# Do we check for the existence of the .orig.tar.gz before calling
+# dpkg-buildpackage?
+# DEBUILD_TGZ_CHECK=yes
+#
+# Corresponds to the dpkg-buildpackage -r option.
+# DEBUILD_ROOTCMD=fakeroot
+#
+# Extra options given to dpkg-buildpackage before any command-line
+# options specified. Single options containing spaces should be
+# quoted, for example "-m'Julian Gilbey <jdg@debian.org>' -us -uc"
+# If this contains a -r, -d or -D option, this will also be recognised
+# when running debuild binary|binary-arch|...
+# DEBUILD_DPKG_BUILDPACKAGE_OPTS=""
+#
+# Do we run lintian at the end of a full run?
+# DEBUILD_LINTIAN=yes
+#
+# Extra options given to lintian before any command-line options
+# specified.
+# DEBUILD_LINTIAN_OPTS=""
+#
+# Colon-separated list of options to be added to the beginning
+# of PATH once it has been sanitised
+# DEBUILD_PREPEND_PATH="/usr/lib/ccache"
+#
+# Credentials to pass to debrsign when signing dsc / changes files
+# Setting this option to a non-blank string implies using debrsign
+# DEBUILD_SIGNING_USERNAME="user@host"
+#
+# Hooks; see the manpage for details of these
+# DEBUILD_DPKG_BUILDPACKAGE_HOOK=""
+# DEBUILD_CLEAN_HOOK=""
+# DEBUILD_DPKG_SOURCE_HOOK=""
+# DEBUILD_BUILD_HOOK=""
+# DEBUILD_BINARY_HOOK=""
+# DEBUILD_FINAL_CLEAN_HOOK=""
+# DEBUILD_LINTIAN_HOOK=""
+# DEBUILD_SIGNING_HOOK=""
+# DEBUILD_POST_DPKG_BUILDPACKAGE_HOOK=""
+
+##### dget
+#
+# Extra directories to search for files in addition to
+# /var/cache/apt/archives. This is a colon-separated list of directories.
+# DGET_PATH=""
+#
+# Unpack downloaded source packages
+# DGET_UNPACK=yes
+#
+# Verify source package signatures using dscverify
+# DGET_VERIFY=yes
+
+##### diff2patches
+#
+# No variables currently
+
+##### dpkg-depcheck
+#
+# Extra options given to dpkg-depcheck before any command-line
+# options specified. For example: "-b --features=-catch-alternatives"
+# DPKG_DEPCHECK_OPTIONS=""
+
+##### dpkg-genbuilddeps
+#
+# No variables currently
+
+##### dpkg-sig
+#
+# dpkg-sig is not a part of devscripts, but shares this configuration file.
+# It pays attention to the values of DEBSIGN_MAINT and DEBSIGN_KEY in
+# addition to the following.
+#
+# This key ID takes precedence over the rest
+# DPKGSIG_KEYID=
+#
+# Do we sign the .changes and .dsc files? See the manpage for more
+# info. Valid options are no, auto, yes, full and force_full.
+# DPKGSIG_SIGN_CHANGES=auto
+#
+# Do we cache the gpg passphrase by default? This can be dangerous!
+# DPKGSIG_CACHE_PASS=no
+
+##### dscverify
+#
+# A colon separated list of extra keyrings to read.
+# DSCVERIFY_KEYRINGS=""
+
+##### getbuildlog
+#
+# No variables currently
+
+##### grep-excuses
+#
+# This specifies a default maintainer name or email to hunt for
+# GREP_EXCUSES_MAINTAINER=""
+#
+# Is this running on ftp-master.debian.org? If so, we use the local
+# excuses file
+# GREP_EXCUSES_FTP_MASTER=no
+
+##### list-unreleased
+#
+# No variables currently
+
+##### mergechanges
+#
+# No variables currently
+
+##### manpage-alert
+#
+# No variables currently
+
+##### mass-bug
+#
+# No variables currently
+
+#### mk-build-deps
+#
+# Which tool to use for installing build depends?
+# MKBUILDDEPS_TOOL="/usr/bin/apt-get --no-install-recommends"
+#
+# Remove package files after install?
+# MKBUILDDEPS_REMOVE_AFTER_INSTALL=yes
+#
+# Tool used to gain root privileges to install the deb
+# MKBUILDDEPS_ROOTCMD=''
+
+##### namecheck
+#
+# No variables currently; see .namecheckrc
+
+##### nmudiff
+#
+# Number of days to indicate that an NMU upload has been delayed by
+# using the DELAYED upload queue. 0 indicates no delay.
+# Defaults to "XX" which adds a placeholder to the e-mail.
+# NMUDIFF_DELAY=3
+#
+# Should we use mutt to edit and send the message or just a plain old
+# editor?
+# NMUDIFF_MUTT=yes
+#
+# Should we always submit a new report (yes), always send to the bugs
+# which are being closed (no), or send to the bug being closed if
+# there is only one of them, otherwise send a new report (maybe)?
+# NMUDIFF_NEWREPORT=maybe
+#
+# nmudiff also uses the value of BTS_SENDMAIL_COMMAND if NMUDIFF_MUTT=no
+
+##### plotchangelog
+#
+# Command line options to use (space separated). None of the options
+# should contain spaces. Use the PLOTCHANGELOG_GNUPLOT variable for
+# the --gnuplot command line option.
+# PLOTCHANGELOG_OPTIONS=""
+#
+# Here we can give gnuplot options. Any command line --gnuplot
+# commands will be appended to these.
+# PLOTCHANGELOG_GNUPLOT=""
+
+##### pts-subscribe
+#
+# How long will we subscribe for by default? The default is 30 days.
+# Setting this to 'forever' means that no unsubscription request will
+# be scheduled.
+# PTS_UNTIL='now + 30 days'
+
+##### rc-alert
+#
+# No variables currently
+
+##### rmadison
+#
+# Add a custom URL to the default list of shorthands so one
+# can use it with -u without having to specify the full URL
+#
+# RMADISON_URL_MAP_EXAMPLE=http://example.com/madison.cgi
+#
+# Default URL to use if none is specified on the command line.
+# RMADISON_DEFAULT_URL=debian
+#
+# Default architecture to use if none is specified on the command line.
+# use --architecture='*' to run an unrestricted query when
+# RMADISON_ARCHITECTURE is set.
+# RMADISON_ARCHITECTURE=source,i386,amd64,all
+
+##### svnpath
+#
+# No variables currently
+
+##### tagpending
+#
+# No variables currently
+
+##### transition-check
+#
+# No variables currently
+
+##### uscan
+#
+# Should we download newer upstream files we come across?
+# USCAN_DOWNLOAD=yes
+#
+# Should we use FTP PASV mode for ftp:// links? 'default' means let
+# Net::FTP(3) make the choice (primarily based on the FTP_PASSIVE
+# environment variable); 'yes' and 'no' override the default
+# USCAN_PASV=default
+#
+# Should we create a symlink from the downloaded tar.gz file to
+# pkg_version.orig.tar.gz, rename it like this or do nothing?
+# Options are 'symlink'/'yes', 'rename' or 'no'
+# USCAN_SYMLINK=yes
+#
+# Should we use DEHS style output (XML format)?
+# USCAN_DEHS_OUTPUT=no
+#
+# Should we give verbose output?
+# USCAN_VERBOSE=no
+#
+# What user agent string should we send with requests?
+# (Default is 'Debian uscan X.Y.Z')
+# USCAN_USER_AGENT=''
+#
+# Where should downloaded files be placed?
+# USCAN_DESTDIR=..
+#
+# Automatically repack bzipped tar or zip archives to gzipped tars?
+# USCAN_REPACK=no
+#
+# Use the Files-Excluded field in debian/copyright to determine whether
+# the orig tarball needs to be repacked to remove non-DFSG content?
+# USCAN_EXCLUSION=yes
+
+##### uupdate
+#
+# Should we retain the pristine upstream source wherever possible?
+# UUPDATE_PRISTINE=yes
+#
+# Should we symlink the .orig.tar.gz file to its new name or
+# copy it instead? yes=symlink, no=copy
+# UUPDATE_SYMLINK_ORIG=yes
+#
+# Corresponds to the dpkg-buildpackage -r option and debuild
+# DEBUILD_ROOTCMD option. Normally, this can be left empty, as then
+# the debuild setting will be used.
+# UUPDATE_ROOTCMD=''
+
+##### whodepends
+#
+# No variables currently
+
+##### who-uploads
+#
+# Display the date of the upload?
+# WHOUPLOADS_DATE=no
+#
+# Maximum number of uploads to display per package
+# WHOUPLOADS_MAXUPLOADS=3
+#
+# Colon-separated list of keyrings to examine by default
+# WHOUPLOADS_KEYRINGS=/usr/share/keyrings/debian-keyring.gpg:/usr/share/keyrings/debian-keyring.pgp:/usr/share/keyrings/debian-maintainers.gpg:/usr/share/keyrings/debian-nonupload.gpg
+
+##### wnpp-alert
+#
+# No variables currently
+
+##### wnpp-check
+#
+# No variables currently
+
diff --git a/cowpoke.conf b/cowpoke.conf
new file mode 100644
index 0000000..85ae0a6
--- /dev/null
+++ b/cowpoke.conf
@@ -0,0 +1,133 @@
+# System configuration file for cowpoke
+# This file is sourced as a bash shell script, see cowpoke(1) for more details.
+
+# Global defaults
+# These apply to every arch and dist in a single cowpoke invocation.
+# ------------------------------------------------------------------
+
+# The hostname of the machine where cowbuilder is installed
+# eg. BUILDD_HOST="buildd.your.org"
+BUILDD_HOST=
+
+# The username for unprivileged operations on BUILDD_HOST
+# If unset the user that invoked cowpoke will be assumed, or the user that
+# is configured for the BUILDD_HOST in your ssh config will be used.
+#BUILDD_USER=
+
+# The Debian architecture(s) to build for. A space separated list of
+# architectures may be used here to build for all of them in a single pass.
+#BUILDD_ARCH="$(dpkg-architecture -qDEB_BUILD_ARCH 2>/dev/null)"
+
+# The Debian distro to build for. A space separated list of distros may be
+# used here to build for all of them in a single pass.
+#BUILDD_DIST="unstable"
+
+# The directory (under BUILDD_USER's home if relative) to upload packages
+# for building and where build logs and the result of post-build checks will
+# be placed
+#INCOMING_DIR="cowbuilder-incoming"
+
+# The filesystem root for all pbuilder COW and result files. Arch and dist
+# specific subdirectories normally will be created under this. The apt cache
+# and temporary build directory will also be located under this path.
+#PBUILDER_BASE="/var/cache/pbuilder"
+
+# The gpg key id to pass to debsign's -k option. eg. SIGN_KEYID="0x12345678"
+# Leave this unset if you do not wish to sign packages built in this way.
+#SIGN_KEYID=
+
+# The 'host' alias to pass to dput. eg. UPLOAD_QUEUE="ftp-master"
+# Leave this unset if you do not wish to upload packages built this way.
+# This option will be ignored if SIGN_KEYID is unset.
+#UPLOAD_QUEUE=
+
+# The command to use to gain root privileges on the remote build machine.
+# This is only required to invoke cowbuilder and allow it to enter its chroot,
+# so you may restrict this user to only being able to run that command with
+# escalated privileges. Something like this in sudoers will enable invoking
+# cowbuilder without an additional password entry required:
+# youruser ALL = NOPASSWD: /usr/sbin/cowbuilder
+# Alternatively you could use ssh with a forwarded key, or whatever other
+# mechanism suits your local access policy. su -c isn't really suitable
+# here due to its quoting requirements being different from all the rest.
+#BUILDD_ROOTCMD="sudo"
+
+# The utility to use when creating a new build root. Alternatives are
+# debootstrap or cdebootstrap.
+#DEBOOTSTRAP="cdebootstrap"
+
+# If set, package files resulting from the build will be copied to the path
+# (local or remote) that this is set to, after the build completes. It is
+# unset by default and can be overridden with --return or --no-return.
+# The given path must exist, it will not be created.
+#RETURN_DIR="."
+
+# =============================================================================
+#
+# Arch and dist specific options
+# These are variables of the form: $arch_$dist_VAR, which apply only for a
+# particular target arch/dist build. The following variables are supported:
+#
+# $arch_$dist_RESULT_DIR - The directory where pbuilder/cowbuilder will place
+# the built package, and where any previously built
+# packages may be found for comparison using debdiff
+# after building.
+#
+# $arch_$dist_BASE_PATH - The directory where the COW master files are found.
+#
+# $arch_$dist_BASE_DIST - The code name to pass as the --distribution option
+# for cowbuilder instead of $dist. This is necessary
+# when $dist is a locally significant name assigned
+# to some specially configured build chroot, such as
+# 'wheezy_backports', and not the formal suite name
+# of a distro release known to debootstrap.
+#
+# $arch_$dist_CREATE_OPTS - A bash array containing additional options to pass
+# verbatim to cowbuilder when this chroot is created
+# for the first time (using the --create option).
+# This is useful when options like --othermirror are
+# wanted to create specialised chroot configurations
+# such as 'wheezy_backports'.
+#
+# $arch_$dist_UPDATE_OPTS - A bash array containing additional options to pass
+# verbatim to cowbuilder each time the base of this
+# chroot is updated.
+#
+# $arch_$dist_BUILD_OPTS - A bash array containing additional options to pass
+# verbatim to cowbuilder each time a package build is
+# performed in this chroot. This is useful when you
+# want to use some option like --twice which cowpoke
+# does not directly need to care about.
+#
+# Each element in these arrays corresponds to a single argument (in the ARGV
+# sense) that will be passed to cowbuilder. This ensures that arguments which
+# may contain whitespace or have strange quoting requirements or other special
+# characters will not be mangled before they get to cowbuilder.
+#
+# Bash arrays are initialised using the following form:
+# VARIABLE=( "arg1" "arg 2" "--option" "value" "--opt=val" "etc. etc." )
+#
+#
+# $arch_$dist_SIGN_KEYID - An optional arch and dist specific override for
+# the global SIGN_KEYID option.
+#
+# $arch_$dist_UPLOAD_QUEUE - An optional arch and dist specific override for
+# the global UPLOAD_QUEUE option.
+#
+# -----------------------------------------------------------------------------
+
+#amd64_unstable_RESULT_DIR="$PBUILDER_BASE/amd64/unstable/result"
+#amd64_unstable_BASE_PATH="$PBUILDER_BASE/amd64/unstable/base.cow"
+
+#amd64_experimental_RESULT_DIR="$PBUILDER_BASE/amd64/experimental/result"
+#amd64_experimental_BASE_PATH="$PBUILDER_BASE/amd64/experimental/base.cow"
+
+#i386_unstable_RESULT_DIR="$PBUILDER_BASE/i386/unstable/result"
+#i386_unstable_BASE_PATH="$PBUILDER_BASE/i386/unstable/base.cow"
+
+#i386_experimental_RESULT_DIR="$PBUILDER_BASE/i386/experimental/result"
+#i386_experimental_BASE_PATH="$PBUILDER_BASE/i386/experimental/base.cow"
+
+#amd64_wheezy_bpo_BASE_DIST="wheezy"
+#amd64_wheezy_bpo_CREATE_OPTS=(--othermirror "deb http://deb.debian.org/debian wheezy-backports main")
+
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 0000000..59d1ae1
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,26 @@
+include ../Makefile.common
+
+all: devscripts.1
+
+clean:
+ rm -f devscripts.1 devscripts.1.tmp.*
+
+# There is a slight chance this gets called twice, once here from here and once
+# from ../po4a/Makefile. Treat files with care.
+PID := $(shell echo $$$$-$$PPID)
+devscripts.1: devscripts.1.in ../README genmanpage.pl
+ cat $< > $@.tmp.$(PID)
+ cat ../README | \
+ awk '/^- annotate-output/,/^ mailing lists./'|sed -e '/^[[:space:]]*$$/d' -e 's/^/ /g' | \
+ perl genmanpage.pl \
+ >> $@.tmp.$(PID)
+ mv $@.tmp.$(PID) $@
+
+install: install_man1 install_man5
+
+install_man1: *.1 devscripts.1
+ install -d "$(DESTDIR)$(MAN1DIR)"
+ install -m0644 -t "$(DESTDIR)$(MAN1DIR)" $^
+install_man5: *.5
+ install -d "$(DESTDIR)$(MAN5DIR)"
+ install -m0644 -t "$(DESTDIR)$(MAN5DIR)" $^
diff --git a/doc/devscripts.1.in b/doc/devscripts.1.in
new file mode 100644
index 0000000..871dc68
--- /dev/null
+++ b/doc/devscripts.1.in
@@ -0,0 +1,30 @@
+.TH DEVSCRIPTS 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+devscripts \- scripts to ease the lives of Debian developers
+.SH DESCRIPTION
+The \fBdevscripts\fR package provides a collection of scripts which
+may be of use to Debian developers and others wishing to build Debian
+packages. For a summary of the available scripts, please see the file
+\fI/usr/share/doc/devscripts/README.gz\fR, and for full details, please
+see the individual manpages. They are contributed by multiple
+developers; for details of the authors, please see the code or
+manpages.
+
+Also, the directory \fI/usr/share/doc/devscripts/examples\fR contains an
+example \fBexim\fR script for sorting mail arriving to Debian mailing
+lists.
+.SH ENVIRONMENT
+Several scripts of the devscripts suite use the following environment
+variables. Check the man pages of individual scripts for more details on how the
+variables are used.
+.IX Header "ENVIRONMENT"
+.IP "\s-1DEBEMAIL\s0" 4
+.IX Item "DEBEMAIL"
+Email of the person acting on a given Debian package via devscripts.
+.IP "\s-1DEBFULLNAME\s0" 4
+.IX Item "DEBFULLNAME"
+Full name (first + family) of the person acting on a given Debian package via
+devscripts.
+.SH SCRIPTS
+Here is the complete list of available devscripts. See their man pages
+for additional documentation.
diff --git a/doc/devscripts.conf.5 b/doc/devscripts.conf.5
new file mode 100644
index 0000000..a605d66
--- /dev/null
+++ b/doc/devscripts.conf.5
@@ -0,0 +1,60 @@
+.TH DEVSCRIPTS.CONF 5 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+devscripts.conf \- configuration file for the devscripts package
+.SH DESCRIPTION
+The \fBdevscripts\fR package provides a collection of scripts which
+may be of use to Debian developers and others wishing to build Debian
+packages. Many of these have options which can be configured on a
+system-wide and per-user basis.
+.PP
+Every script in the \fBdevscripts\fR package which makes use of values
+from these configuration files describes the specific settings
+recognised in its own manpage. (For a list of the scripts, either see
+\fI/usr/share/doc/devscripts/README.gz\fR or look at the output of
+\fIdpkg \-L devscripts | grep /usr/bin\fR.)
+.PP
+The two configuration files are \fI/etc/devscripts.conf\fR for
+system-wide defaults and \fI~/.devscripts\fR for per-user settings.
+They are written with \fBbash\fR(1) syntax, but should only have
+comments and simple variable assignments in them; they are both
+sourced (if present) by many of the \fBdevscripts\fR scripts.
+Variables corresponding to simple switches should have one of the
+values \fIyes\fR and \fIno\fR; any other setting is regarded as
+equivalent to the default setting.
+.PP
+All variable names are written in uppercase, and begin with the script
+name. Package-wide variables begin with "DEVSCRIPTS", and are listed
+below, as well as in the relevant manpages.
+.PP
+For a list of all of the available options variables, along with their
+default settings, see the example configuration file
+\fI/usr/share/doc/devscripts/devscripts.conf.ex\fR. This is copied to
+\fI/etc/devscripts.conf\fR when the \fBdevscripts\fR package is first
+installed. Information about configuration options introduced in
+newer versions of the package will be appended to
+\fI/etc/devscripts.conf\fR when the package is upgraded.
+.PP
+Every script which reads the configuration files can be forced to
+ignore them by using \fB\-\-no-conf\fR as the \fIfirst\fR command-line
+option.
+.SH "PACKAGE-WIDE VARIABLES"
+The currently recognised package-wide variables are:
+.TP
+.BR DEVSCRIPTS_CHECK_DIRNAME_LEVEL ", " DEVSCRIPTS_CHECK_DIRNAME_REGEX
+These variables control scripts which change directory to find a
+\fIdebian/changelog\fR file or suchlike, and some other miscellaneous
+cases. In order to prevent unwanted, even possibly dangerous,
+behaviour, these variables control when actions will be performed.
+The scripts which currently make use of these variables are:
+\fBdebc\fR, \fBdebchange\fR/\fBdch\fR, \fBdebclean\fR, \fBdebi\fR,
+\fBdebrelease\fR, \fBdebuild\fR and \fBuscan\fR, but this list may
+change with time (and I may not remember to update this manpage).
+Please see the manpages of individual scripts for details of the
+specific behaviour for each script.
+.SH "SEE ALSO"
+.BR devscripts (1)
+and
+.IR /usr/share/doc/devscripts/README.gz.
+.SH AUTHOR
+This manpage was written for the \fBdevscripts\fR package by the
+package maintainer Julian Gilbey <jdg@debian.org>.
diff --git a/doc/edit-patch.1 b/doc/edit-patch.1
new file mode 100644
index 0000000..70b0ac9
--- /dev/null
+++ b/doc/edit-patch.1
@@ -0,0 +1,43 @@
+.TH EDIT-PATCH "1" "Debian Utilities" "DEBIAN"
+.SH NAME
+\fBedit-patch\fR, \fBadd-patch\fR \- tool for preparing patches for Debian
+source packages
+
+.SH SYNOPSIS
+\fBedit-patch\fR \fIpath/to/patch\fR
+
+\fBadd-patch\fR \fIpath/to/patch\fR
+
+.SH DESCRIPTION
+\fBedit-patch\fR is a wrapper script around the Quilt, CDBS, and dpatch patch
+systems. It simplifies the process of preparing and editing patches to Debian
+source packages and allows the user to not have to be concerned with which patch
+system is in use.
+Run from inside the root directory of the source package, \fBedit-patch\fR can
+be used to edit existing patches located in \fIdebian/patches\fR.
+
+It can also be used to incorporate new patches.
+If pointed at a patch not already present, it will copy the patch to
+\fIdebian/patches\fR in the correct format for the patch system in use.
+Next, the patch is applied and a subshell is opened in order to edit the patch.
+Typing \fBexit\fR or pressing Ctrl-d will close the subshell and launch an editor
+to record the \fIdebian/changelog\fR entry.
+
+\fBedit-patch\fR is integrated with the Bazaar and Git version control systems.
+The patch will be automatically added to the tree, and the \fIdebian/changelog\fR
+entry will be used as the commit message.
+
+If no patch system is present, the patch is applied inline,
+and a copy is stored in \fIdebian/patches-applied\fR.
+
+\fBadd-patch\fR is the non-interactive version of \fBedit-patch\fR.
+The patch will be incorporated but no editor or subshell will be
+spawned.
+
+.SH AUTHORS
+\fBedit-patch\fR was written by Daniel Holbach <daniel.holbach@canonical.com>,
+Michael Vogt <michael.vogt@canonical.com>, and David Futcher <bobbo@ubuntu.com>.
+
+This manual page was written by Andrew Starr-Bochicchio <a.starr.b@gmail.com>.
+.PP
+Both are released under the terms of the GNU General Public License, version 3.
diff --git a/doc/genmanpage.pl b/doc/genmanpage.pl
new file mode 100755
index 0000000..9d33c15
--- /dev/null
+++ b/doc/genmanpage.pl
@@ -0,0 +1,30 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+# Define item leadin/leadout for man output
+my $ITEM_LEADIN = '.IP "\fI';
+my $ITEM_LEADOUT = '\fR(1)"';
+
+my $package;
+my $description;
+
+
+# Parse the shortened README file
+while (<>) {
+ chomp;
+ # A line starting with ' -' indicates a script
+ if (/^ - ([^:]*): (.*)/) {
+ if ($package and $description) {
+ # If we get here, then we need to output the man code
+ print $ITEM_LEADIN . $package . $ITEM_LEADOUT . "\n";
+ print $description . "\n";
+ }
+ $package = $1;
+ $description = $2;
+ } else {
+ s/^ //;
+ $description .= $_;
+ }
+}
diff --git a/doc/suspicious-source.1 b/doc/suspicious-source.1
new file mode 100644
index 0000000..045a0c6
--- /dev/null
+++ b/doc/suspicious-source.1
@@ -0,0 +1,55 @@
+.\" Copyright (c) 2010, Benjamin Drung <bdrung@debian.org>
+.\"
+.\" Permission to use, copy, modify, and/or distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.TH SUSPICIOUS\-SOURCE 1 "Debian Utilities" "DEBIAN"
+
+.SH NAME
+suspicious\-source \- search for files that do not meet the GPL's
+definition of "source" for a work
+
+.SH SYNOPSIS
+\fBsuspicious\-source\fP [\fIoptions\fR]
+
+.SH DESCRIPTION
+\fBsuspicious\-source\fP outputs a list of files which are probably not
+the source form of a work.
+This should be run in the root of a source tree to find files which
+might not be, in the definition from the GNU GPL, the "preferred form
+of the work for making modifications to it".
+.PP
+The files inside version control system directories (like
+\fI.bzr/\fR or \fICVS/\fR) are not considered.
+
+.SH OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Show this help message and exit.
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Print more information.
+.TP
+\fB\-d \fIdirectory\fR, \fB\-\-directory=\fIdirectory\fR
+Check the files in the specified \fIdirectory\fR instead of the current directory.
+.TP
+\fB\-m \fImimetype\fR, \fB\-\-mimetype=\fImimetype\fR
+Add \fImimetype\fR to list of white-listed MIME types.
+.TP
+\fB\-e \fIextension\fR, \fB\-\-extension=\fIextension\fR
+Add \fIextension\fR to list of white-listed extensions.
+
+.SH AUTHORS
+\fBsuspicious\-source\fP and this manpage have been written by
+Benjamin Drung <bdrung@debian.org>.
+.PP
+Both are released under the ISC license.
diff --git a/doc/what-patch.1 b/doc/what-patch.1
new file mode 100644
index 0000000..4e127d0
--- /dev/null
+++ b/doc/what-patch.1
@@ -0,0 +1,42 @@
+.TH WHAT\-PATCH "1" "Debian Utilities" "DEBIAN"
+.SH NAME
+what\-patch \- detect which patch system a Debian package uses
+
+.SH SYNOPSIS
+.B what\-patch\fR [\fIoptions\fR]
+
+.SH DESCRIPTION
+\fBwhat\-patch\fR examines the \fIdebian/rules\fR file to determine which patch
+system the Debian package is using.
+.PP
+\fBwhat\-patch\fR should be run from the root directory of the Debian source
+package.
+
+.SH OPTIONS
+Listed below are the command line options for \fBwhat\-patch\fR:
+.TP
+.BR \-h ", " \-\-help
+Display a help message and exit.
+.TP
+.B \-v
+Enable verbose mode.
+This will include the listing of any files modified outside or the \fIdebian/\fR
+directory and report any additional details about the patch system if
+available.
+
+.SH AUTHORS
+\fBwhat\-patch\fR was written by Kees Cook <kees@ubuntu.com>,
+Siegfried-A. Gevatter <rainct@ubuntu.com>, and Daniel Hahler
+<ubuntu@thequod.de>, among others.
+This manual page was written by Jonathan Patrick Davies <jpds@ubuntu.com>.
+.PP
+Both are released under the GNU General Public License, version 3 or later.
+
+.SH SEE ALSO
+The Ubuntu MOTU team has some documentation about patch systems at the Ubuntu
+wiki: \fIhttps://wiki.ubuntu.com/PackagingGuide/PatchSystems\fR
+
+.PP
+.BR cdbs\-edit\-patch (1),
+.BR dbs\-edit\-patch (1),
+.BR dpatch\-edit\-patch (1)
diff --git a/doc/wrap-and-sort.1 b/doc/wrap-and-sort.1
new file mode 100644
index 0000000..fe60902
--- /dev/null
+++ b/doc/wrap-and-sort.1
@@ -0,0 +1,102 @@
+.\" Copyright (c) 2010, Benjamin Drung <bdrung@debian.org>
+.\"
+.\" Permission to use, copy, modify, and/or distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.TH WRAP\-AND\-SORT 1 "Debian Utilities" "DEBIAN"
+.SH NAME
+wrap-and-sort \- wrap long lines and sort items in Debian packaging files
+.SH SYNOPSIS
+.B wrap-and-sort
+[\fIoptions\fR]
+
+.SH DESCRIPTION
+\fBwrap\-and\-sort\fP wraps the package lists in Debian control files. By
+default the lists will only split into multiple lines if the entries are longer
+than the maximum line length limit of 79 characters. \fBwrap\-and\-sort\fP sorts
+the package lists in Debian control files and all \fI.dirs\fR, \fI.docs\fR,
+\fI.examples\fR, \fI.info\fR, \fI.install\fR, \fI.links\fR, \fI.maintscript\fR,
+and \fI.manpages\fR files. Beside that \fBwrap\-and\-sort\fP removes trailing
+spaces in these files.
+.PP
+This script should be run in the root of a Debian package tree. It searches for
+\fIcontrol\fR, \fIcontrol*.in\fR, \fIcopyright\fR, \fIcopyright.in\fR,
+\fIinstall\fR, and \fI*.install\fR in the \fIdebian\fR directory.
+
+.SH OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Show this help message and exit.
+.TP
+\fB\-a\fR, \fB\-\-wrap\-always\fR
+Wrap all package lists in the Debian \fIcontrol\fR file
+even if they do not exceed the line length limit and could fit in one line.
+.TP
+\fB\-s\fR, \fB\-\-short\-indent\fR
+Only indent wrapped lines by one space (default is in\-line with the
+field name).
+.TP
+\fB\-b\fR, \fB\-\-sort\-binary\-packages\fR
+Sort binary package paragraphs by name.
+.TP
+\fB\-k\fR, \fB\-\-keep\-first\fR
+When sorting binary package paragraphs, leave the first one at the top.
+
+Unqualified
+.BR debhelper (7)
+configuration files are applied to the first package.
+.TP
+\fB\-n\fR, \fB\-\-no\-cleanup\fR
+Do not remove trailing whitespaces.
+.TP
+\fB\-t\fR, \fB\-\-trailing-comma\fR
+Add a trailing comma at the end of the sorted fields.
+This minimizes future differences in the VCS commits when additional
+dependencies are appended or removed.
+.TP
+\fB\-d \fIpath\fR, \fB\-\-debian\-directory=\fIpath\fR
+Location of the \fIdebian\fR directory (default: \fI./debian\fR).
+.TP
+\fB\-f \fIfile\fR, \fB\-\-file=\fIfile\fR
+Wrap and sort only the specified \fIfile\fR.
+You can specify this parameter multiple times.
+All supported files will be processed if no files are specified.
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Print all files that are touched.
+.TP
+\fB\-\-max\-line\-length=\fImax_line_length\fR
+Set the maximum allowed line length. Package lists in the Debian \fIcontrol\fR
+file that exceed this length limit will be wrapped.
+
+The default maximum line length is 79 characters.
+.TP
+\fB\-N\fR, \fB\-\-dry\-run\fR
+Do not modify any file, instead only print the files that would be modified.
+
+.TP
+\fB\-\-experimental\-rts\-parser\fR
+Enable the experimental round\-trip safe parser. When enabled, most comments
+in deb822 control will be preserved.
+
+The option is a temporary means to enable users to opt-in to this new experimental
+feature. The option will be removed once the new parser is mature enough and is
+ready to unconditionally replace the previous parser.
+
+This option requires python\-debian version 0.1.43 or later to work. However, some
+features will require 0.1.44 or later.
+
+.SH AUTHORS
+\fBwrap\-and\-sort\fP and this manpage have been written by
+Benjamin Drung <bdrung@debian.org>.
+.PP
+Both are released under the ISC license.
diff --git a/examples/debbisect_buildsrc.sh b/examples/debbisect_buildsrc.sh
new file mode 100755
index 0000000..df27538
--- /dev/null
+++ b/examples/debbisect_buildsrc.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# use this script to build a source package with debbisect like this:
+#
+# $ DEBIAN_BISECT_SRCPKG=mysrc ./debbisect --cache=./cache "two years ago" yesterday /usr/share/doc/devscripts/examples/debbisect_buildsrc.sh
+#
+# copy this script and edit it if you want to customize it
+
+set -eu
+
+mmdebstrap --variant=apt unstable \
+--aptopt='Apt::Key::gpgvcommand "/usr/share/debuerreotype/scripts/.gpgv-ignore-expiration.sh"' \
+--aptopt='Acquire::Check-Valid-Until "false"' \
+--customize-hook='chroot "$1" apt-get --yes build-dep '"$DEBIAN_BISECT_SRCPKG" \
+--customize-hook="chroot \"\$1\" dpkg-query --showformat '\${binary:Package}=\${Version}\n' --show" \
+--customize-hook='chroot "$1" apt-get source --build '"$DEBIAN_BISECT_SRCPKG" \
+/dev/null $DEBIAN_BISECT_MIRROR "deb-src $DEBIAN_BISECT_MIRROR unstable main"
diff --git a/examples/forward.exim b/examples/forward.exim
new file mode 100644
index 0000000..8c42c76
--- /dev/null
+++ b/examples/forward.exim
@@ -0,0 +1,6 @@
+# Exim Filter <<== do not edit or remove this line!
+# Assortment of debian lists
+if $header_resent-sender: matches "debian-(.*)-request@"
+then
+ save $home/mail/debian-$1
+endif
diff --git a/lib/Devscripts/Compression.pm b/lib/Devscripts/Compression.pm
new file mode 100644
index 0000000..c138948
--- /dev/null
+++ b/lib/Devscripts/Compression.pm
@@ -0,0 +1,104 @@
+# Copyright James McCoy <jamessan@debian.org> 2013.
+# Modifications copyright 2002 Julian Gilbey <jdg@debian.org>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Devscripts::Compression;
+
+use Dpkg::Compression qw(!compression_get_property);
+use Dpkg::IPC;
+use Exporter qw(import);
+
+our @EXPORT = (
+ @Dpkg::Compression::EXPORT,
+ qw(compression_get_file_extension_regex compression_guess_from_file),
+);
+
+eval {
+ Dpkg::Compression->VERSION(1.02);
+ 1;
+} or do {
+ # Ensure we have compression_get_file_extension_regex, regardless of the
+ # version of Dpkg::Compression to ease backporting.
+ *{'Devscripts::Compression::compression_get_file_extension_regex'} = sub {
+ return $compression_re_file_ext;
+ };
+};
+
+# This can potentially be moved to Dpkg::Compression
+
+my %mime2comp = (
+ "application/x-gzip" => "gzip",
+ "application/gzip" => "gzip",
+ "application/x-bzip2" => "bzip2",
+ "application/bzip2 " => "bzip2",
+ "application/x-xz" => "xz",
+ "application/xz" => "xz",
+ "application/zip" => "zip",
+ "application/x-compress" => "compress",
+ "application/java-archive" => "zip",
+ "application/x-tar" => "tar",
+ "application/zstd" => "zst",
+ "application/x-zstd" => "zst",
+);
+
+sub compression_guess_from_file {
+ my $filename = shift;
+ my $mimetype;
+ spawn(
+ exec => ['file', '--dereference', '--brief', '--mime-type', $filename],
+ to_string => \$mimetype,
+ wait_child => 1
+ );
+ chomp($mimetype);
+ if (exists $mime2comp{$mimetype}) {
+ return $mime2comp{$mimetype};
+ } else {
+ return;
+ }
+}
+
+# comp_prog and default_level aren't provided because a) they aren't needed in
+# devscripts and b) the Dpkg::Compression API isn't rich enough to support
+# these as compressors
+my %comp_properties = (
+ compress => {
+ file_ext => 'Z',
+ decomp_prog => ['uncompress'],
+ },
+ zip => {
+ file_ext => 'zip',
+ decomp_prog => ['unzip'],
+ },
+ zst => {
+ file_ext => 'zst',
+ #comp_prog => ['zstd'],
+ decomp_prog => ['unzstd'],
+ default_level => 3,
+ });
+
+sub compression_get_property {
+ my ($compression, $property) = @_;
+ if (!exists $comp_properties{$compression}) {
+ return Dpkg::Compression::compression_get_property($compression,
+ $property);
+ }
+
+ if (exists $comp_properties{$compression}{$property}) {
+ return $comp_properties{$compression}{$property};
+ }
+ return;
+}
+
+1;
diff --git a/lib/Devscripts/Config.pm b/lib/Devscripts/Config.pm
new file mode 100644
index 0000000..e13a5a1
--- /dev/null
+++ b/lib/Devscripts/Config.pm
@@ -0,0 +1,418 @@
+
+=head1 NAME
+
+Devscripts::Config - devscripts Perl scripts configuration object
+
+=head1 SYNOPSIS
+
+ # Configuration module
+ package Devscripts::My::Config;
+ use Moo;
+ extends 'Devscripts::Config';
+
+ use constant keys => [
+ [ 'text1=s', 'MY_TEXT', qr/^\S/, 'Default_text' ],
+ # ...
+ ];
+
+ has text1 => ( is => 'rw' );
+
+ # Main package or script
+ package Devscripts::My;
+
+ use Moo;
+ my $config = Devscripts::My::Config->new->parse;
+ 1;
+
+=head1 DESCRIPTION
+
+Devscripts Perl scripts configuration object. It can scan configuration files
+(B</etc/devscripts.conf> and B<~/.devscripts>) and command line arguments.
+
+A devscripts configuration package has just to declare:
+
+=over
+
+=item B<keys> constant: array ref I<(see below)>
+
+=item B<rules> constant: hash ref I<(see below)>
+
+=back
+
+=head1 KEYS
+
+Each element of B<keys> constant is an array containing four elements which can
+be undefined:
+
+=over
+
+=item the string to give to L<Getopt::Long>
+
+=item the name of the B<devscripts.conf> key
+
+=item the rule to check value. It can be:
+
+=over
+
+=item B<regexp> ref: will be applied to the value. If it fails against the
+devscripts.conf value, Devscripts::Config will warn. If it fails against the
+command line argument, Devscripts::Config will die.
+
+=item B<sub> ref: function will be called with 2 arguments: current config
+object and proposed value. Function must return a true value to continue or
+0 to stop. This is not simply a "check" function: Devscripts::Config will not
+do anything else than read the result to continue with next argument or stop.
+
+=item B<"bool"> string: means that value is a boolean. devscripts.conf value
+can be either "yes", 1, "no", 0.
+
+=back
+
+=item the default value
+
+=back
+
+=head2 RULES
+
+It is possible to declare some additional rules to check the logic between
+options:
+
+ use constant rules => [
+ sub {
+ my($self)=@_;
+ # OK
+ return 1 if( $self->a < $self->b );
+ # OK with warning
+ return ( 1, 'a should be lower than b ) if( $self->a > $self->b );
+ # NOK with an error
+ return ( 0, 'a must not be equal to b !' );
+ },
+ sub {
+ my($self)=@_;
+ # ...
+ return 1;
+ },
+ ];
+
+=head1 METHODS
+
+=head2 new()
+
+Constructor
+
+=cut
+
+package Devscripts::Config;
+
+use strict;
+use Devscripts::Output;
+use Dpkg::IPC;
+use File::HomeDir;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use Moo;
+
+# Common options
+has common_opts => (
+ is => 'ro',
+ default => sub {
+ [[
+ 'help', undef,
+ sub {
+ if ($_[1]) { $_[0]->usage; exit 0 }
+ }
+ ]]
+ });
+
+# Internal attributes
+
+has modified_conf_msg => (is => 'rw', default => sub { '' });
+
+$ENV{HOME} = File::HomeDir->my_home;
+
+our @config_files
+ = ('/etc/devscripts.conf', ($ENV{HOME} ? "$ENV{HOME}/.devscripts" : ()));
+
+sub keys {
+ die "conffile_keys() must be defined in sub classes";
+}
+
+=head2 parse()
+
+Launches B<parse_conf_files()>, B<parse_command_line()> and B<check_rules>
+
+=cut
+
+sub BUILD {
+ my ($self) = @_;
+ $self->set_default;
+}
+
+sub parse {
+ my ($self) = @_;
+
+ # 1 - Parse /etc/devscripts.conf and ~/.devscripts
+ $self->parse_conf_files;
+
+ # 2 - Parse command line
+ $self->parse_command_line;
+
+ # 3 - Check rules
+ $self->check_rules;
+ return $self;
+}
+
+# I - Parse /etc/devscripts.conf and ~/.devscripts
+
+=head2 parse_conf_files()
+
+Reads values in B</etc/devscripts.conf> and B<~/.devscripts>
+
+=cut
+
+sub set_default {
+ my ($self) = @_;
+ my $keys = $self->keys;
+ foreach my $key (@$keys) {
+ my ($kname, $name, $check, $default) = @$key;
+ next unless (defined $default);
+ $kname =~ s/^\-\-//;
+ $kname =~ s/-/_/g;
+ $kname =~ s/[!\|=].*$//;
+ if (ref $default) {
+ unless (ref $default eq 'CODE') {
+ die "Default value must be a sub ($kname)";
+ }
+ $self->{$kname} = $default->();
+ } else {
+ $self->{$kname} = $default;
+ }
+ }
+}
+
+sub parse_conf_files {
+ my ($self) = @_;
+
+ my @cfg_files = @config_files;
+ if (@ARGV) {
+ if ($ARGV[0] =~ /^--no-?conf$/) {
+ $self->modified_conf_msg(" (no configuration files read)");
+ shift @ARGV;
+ return $self;
+ }
+ my @tmp;
+ while ($ARGV[0] and $ARGV[0] =~ s/^--conf-?file(?:=(.+))?//) {
+ shift @ARGV;
+ my $file = $1 || shift(@ARGV);
+ if ($file) {
+ unless ($file =~ s/^\+//) {
+ @cfg_files = ();
+ }
+ push @tmp, $file;
+ } else {
+ return ds_die
+ "Unable to parse --conf-file option, aborting parsing";
+ }
+ }
+ push @cfg_files, @tmp;
+ }
+
+ @cfg_files = grep { -r $_ } @cfg_files;
+ my $keys = $self->keys;
+ if (@cfg_files) {
+ my @key_names = map { $_->[1] ? $_->[1] : () } @$keys;
+ my %config_vars;
+
+ my $shell_cmd = q{for file ; do . "$file"; done ;};
+
+ # Read back values
+ $shell_cmd .= q{ printf '%s\0' };
+ my @shell_key_names = map { qq{"\$$_"} } @key_names;
+ $shell_cmd .= join(' ', @shell_key_names);
+ my $shell_out;
+ spawn(
+ exec => [
+ '/bin/bash', '-c',
+ $shell_cmd, 'devscripts-config-loader',
+ @cfg_files
+ ],
+ wait_child => 1,
+ to_string => \$shell_out
+ );
+ @config_vars{@key_names} = map { s/^\s*(.*?)\s*/$1/ ? $_ : undef }
+ split(/\0/, $shell_out, -1);
+
+ # Check validity and set value
+ foreach my $key (@$keys) {
+ my ($kname, $name, $check, $default) = @$key;
+ next unless ($name);
+ $kname //= '';
+ $kname =~ s/^\-\-//;
+ $kname =~ s/-/_/g;
+ $kname =~ s/[!|=+].*$//;
+ # Case 1: nothing in conf files, set default
+ next unless (length $config_vars{$name});
+ if (defined $check) {
+ if (not(ref $check)) {
+ $check
+ = $self->_subs_check($check, $kname, $name, $default);
+ }
+ if (ref $check eq 'CODE') {
+ my ($res, $msg)
+ = $check->($self, $config_vars{$name}, $kname);
+ ds_warn $msg unless ($res);
+ next;
+ } elsif (ref $check eq 'Regexp') {
+ unless ($config_vars{$name} =~ $check) {
+ ds_warn("Bad $name value $config_vars{$name}");
+ next;
+ }
+ } else {
+ ds_die("Unknown check type for $name");
+ return undef;
+ }
+ }
+ $self->{$kname} = $config_vars{$name};
+ $self->{modified_conf_msg} .= " $name=$config_vars{$name}\n";
+ if (ref $default) {
+ my $ref = ref $default->();
+ my @tmp = ($config_vars{$name} =~ /\s+"([^"]*)"(?>\s+)/g);
+ $config_vars{$name} =~ s/\s+"([^"]*)"\s+/ /g;
+ push @tmp, split(/\s+/, $config_vars{$name});
+ if ($ref eq 'ARRAY') {
+ $self->{$kname} = \@tmp;
+ } elsif ($ref eq 'HASH') {
+ $self->{$kname}
+ = { map { /^(.*?)=(.*)$/ ? ($1 => $2) : ($_ => 1) }
+ @tmp };
+ }
+ }
+ }
+ }
+ return $self;
+}
+
+# II - Parse command line
+
+=head2 parse_command_line()
+
+Parse command line arguments
+
+=cut
+
+sub parse_command_line {
+ my ($self, @arrays) = @_;
+ my $opts = {};
+ my $keys = [@{ $self->common_opts }, @{ $self->keys }];
+ # If default value is set to [], we must prepare hash ref to be able to
+ # receive more than one value
+ foreach (@$keys) {
+ if ($_->[3] and ref($_->[3])) {
+ my $kname = $_->[0];
+ $kname =~ s/[!\|=].*$//;
+ $opts->{$kname} = $_->[3]->();
+ }
+ }
+ unless (GetOptions($opts, map { $_->[0] ? ($_->[0]) : () } @$keys)) {
+ $_[0]->usage;
+ exit 1;
+ }
+ foreach my $key (@$keys) {
+ my ($kname, $tmp, $check, $default) = @$key;
+ next unless ($kname);
+ $kname =~ s/[!|=+].*$//;
+ my $name = $kname;
+ $kname =~ s/-/_/g;
+ if (defined $opts->{$name}) {
+ next if (ref $opts->{$name} eq 'ARRAY' and !@{ $opts->{$name} });
+ next if (ref $opts->{$name} eq 'HASH' and !%{ $opts->{$name} });
+ if (defined $check) {
+ if (not(ref $check)) {
+ $check
+ = $self->_subs_check($check, $kname, $name, $default);
+ }
+ if (ref $check eq 'CODE') {
+ my ($res, $msg) = $check->($self, $opts->{$name}, $kname);
+ ds_die "Bad value for $name: $msg" unless ($res);
+ } elsif (ref $check eq 'Regexp') {
+ if ($opts->{$name} =~ $check) {
+ $self->{$kname} = $opts->{$name};
+ } else {
+ ds_die("Bad $name value in command line");
+ }
+ } else {
+ ds_die("Unknown check type for $name");
+ }
+ } else {
+ $self->{$kname} = $opts->{$name};
+ }
+ }
+ }
+ return $self;
+}
+
+sub check_rules {
+ my ($self) = @_;
+ if ($self->can('rules')) {
+ if (my $rules = $self->rules) {
+ my $i = 0;
+ foreach my $sub (@$rules) {
+ $i++;
+ my ($res, $msg) = $sub->($self);
+ if ($res) {
+ ds_warn($msg) if ($msg);
+ } else {
+ ds_error($msg || "config rule $i");
+ # ds_error may not die if $Devscripts::Output::die_on_error
+ # is set to 0
+ next;
+ }
+ }
+ }
+ }
+ return $self;
+}
+
+sub _subs_check {
+ my ($self, $check, $kname, $name, $default) = @_;
+ if ($check eq 'bool') {
+ $check = sub {
+ $_[0]->{$kname} = (
+ $_[1] =~ /^(?:1|yes)$/i ? 1
+ : $_[1] =~ /^(?:0|no)$/i ? 0
+ : $default ? $default
+ : undef
+ );
+ return 1;
+ };
+ } else {
+ $self->die("Unknown check type for $name");
+ }
+ return $check;
+}
+
+# Default usage: switch to manpage
+sub usage {
+ $progname =~ s/\.pl//;
+ exec("man", '-P', '/bin/cat', $progname);
+}
+
+1;
+__END__
+=head1 SEE ALSO
+
+L<devscripts>
+
+=head1 AUTHOR
+
+Xavier Guimard E<lt>yadd@debian.orgE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2018 by Xavier Guimard <yadd@debian.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+=cut
diff --git a/lib/Devscripts/DB_File_Lock.pm b/lib/Devscripts/DB_File_Lock.pm
new file mode 100644
index 0000000..12a4680
--- /dev/null
+++ b/lib/Devscripts/DB_File_Lock.pm
@@ -0,0 +1,364 @@
+#
+# DB_File::Lock
+#
+# by David Harris <dharris@drh.net>
+#
+# Copyright (c) 1999-2000 David R. Harris. All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+
+# We rename the package so that we don't have to package it separately.
+# package DB_File::Lock;
+package Devscripts::DB_File_Lock;
+
+require 5.004;
+
+use strict;
+use vars qw($VERSION @ISA $locks);
+
+@ISA = qw(DB_File);
+$VERSION = '0.05';
+
+use DB_File ();
+use Fcntl qw(:flock O_RDWR O_RDONLY O_WRONLY O_CREAT);
+use Carp qw(croak carp);
+use Symbol ();
+
+# import function can't be inherited, so this magic required
+sub import {
+ my $ourname = shift;
+ my @imports
+ = @_; # dynamic scoped var, still in scope after package call in eval
+ my $module = caller;
+ my $calling = $ISA[0];
+ eval " package $module; import $calling, \@imports; ";
+}
+
+sub _lock_and_tie {
+ my $package = shift;
+
+ ## Grab the type of tie
+
+ my $tie_type = pop @_;
+
+ ## There are two ways of passing data defined by DB_File
+
+ my $lock_data;
+ my @dbfile_data;
+
+ if (@_ == 5) {
+ $lock_data = pop @_;
+ @dbfile_data = @_;
+ } elsif (@_ == 2) {
+ $lock_data = pop @_;
+ @dbfile_data = @{ $_[0] };
+ } else {
+ croak "invalid number of arguments";
+ }
+
+ ## Decipher the lock_data
+
+ my $mode;
+ my $nonblocking = 0;
+ my $lockfile_name = $dbfile_data[0] . ".lock";
+ my $lockfile_mode;
+
+ if (lc($lock_data) eq "read") {
+ $mode = "read";
+ } elsif (lc($lock_data) eq "write") {
+ $mode = "write";
+ } elsif (ref($lock_data) eq "HASH") {
+ $mode = lc $lock_data->{mode};
+ croak "invalid mode ($mode)" if ($mode ne "read" and $mode ne "write");
+ $nonblocking = $lock_data->{nonblocking};
+ $lockfile_name = $lock_data->{lockfile_name}
+ if (defined $lock_data->{lockfile_name});
+ $lockfile_mode = $lock_data->{lockfile_mode};
+ } else {
+ croak "invalid lock_data ($lock_data)";
+ }
+
+ ## Warn about opening a lockfile for writing when only locking for reading
+
+ # NOTE: This warning disabled for RECNO because RECNO seems to require O_RDWR
+ # even when opening only for reading.
+
+ carp
+"opening with write access when locking only for reading (use O_RDONLY to fix)"
+ if ((
+ $dbfile_data[1] && O_RDWR
+ or $dbfile_data[1] && O_WRONLY
+ ) # any kind of write access
+ and $mode eq "read" # and opening for reading
+ and $tie_type ne "TIEARRAY" # and not RECNO
+ );
+
+ ## Determine the mode of the lockfile, if not given
+
+ # THEORY: if someone can read or write the database file, we must allow
+ # them to read and write the lockfile.
+
+ if (not defined $lockfile_mode) {
+ $lockfile_mode = 0600; # we must be allowed to read/write lockfile
+ $lockfile_mode |= 0060 if ($dbfile_data[2] & 0060);
+ $lockfile_mode |= 0006 if ($dbfile_data[2] & 0006);
+ }
+
+ ## Open the lockfile, lock it, and open the database
+
+ my $lockfile_fh = Symbol::gensym();
+ my $saved_umask = umask(0000) if (umask() & $lockfile_mode);
+ my $open_ok = sysopen($lockfile_fh, $lockfile_name, O_RDWR | O_CREAT,
+ $lockfile_mode);
+ umask($saved_umask) if (defined $saved_umask);
+ $open_ok or croak "could not open lockfile ($lockfile_name)";
+
+ my $flock_flags
+ = ($mode eq "write" ? LOCK_EX : LOCK_SH) | ($nonblocking ? LOCK_NB : 0);
+ if (not flock $lockfile_fh, $flock_flags) {
+ close $lockfile_fh;
+ return undef if ($nonblocking);
+ croak "could not flock lockfile";
+ }
+
+ my $self
+ = $tie_type eq "TIEHASH"
+ ? $package->SUPER::TIEHASH(@_)
+ : $package->SUPER::TIEARRAY(@_);
+ if (not $self) {
+ close $lockfile_fh;
+ return $self;
+ }
+
+ ## Store the info for the DESTROY function
+
+ my $id = "" . $self;
+ $id =~ s/^[^=]+=//; # remove the package name in case re-blessing occurs
+ $locks->{$id} = $lockfile_fh;
+
+ ## Return the object
+
+ return $self;
+}
+
+sub TIEHASH {
+ return _lock_and_tie(@_, 'TIEHASH');
+}
+
+sub TIEARRAY {
+ return _lock_and_tie(@_, 'TIEARRAY');
+}
+
+sub DESTROY {
+ my $self = shift;
+
+ my $id = "" . $self;
+ $id =~ s/^[^=]+=//;
+ my $lockfile_fh = $locks->{$id};
+ delete $locks->{$id};
+
+ $self->SUPER::DESTROY(@_);
+
+ # un-flock not needed, as we close here
+ close $lockfile_fh;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+DB_File::Lock - Locking with flock wrapper for DB_File
+
+=head1 SYNOPSIS
+
+ use DB_File::Lock;
+ use Fcntl qw(:flock O_RDWR O_CREAT);
+
+ $locking = "read";
+ $locking = "write";
+ $locking = {
+ mode => "read",
+ nonblocking => 0,
+ lockfile_name => "/path/to/shared.lock",
+ lockfile_mode => 0600,
+ };
+
+ [$X =] tie %hash, 'DB_File::Lock', $filename, $flags, $mode, $DB_HASH, $locking;
+ [$X =] tie %hash, 'DB_File::Lock', $filename, $flags, $mode, $DB_BTREE, $locking;
+ [$X =] tie @array, 'DB_File::Lock', $filename, $flags, $mode, $DB_RECNO, $locking;
+
+ # or place the DB_File arguments inside a list reference:
+ [$X =] tie %hash, 'DB_File::Lock', [$filename, $flags, $mode, $DB_HASH], $locking;
+
+ ...use the same way as DB_File for the rest of the interface...
+
+=head1 DESCRIPTION
+
+This module provides a wrapper for the DB_File module, adding locking.
+
+When you need locking, simply use this module in place of DB_File and
+add an extra argument onto the tie command specifying if the file should
+be locked for reading or writing.
+
+The alternative is to write code like:
+
+ open(LOCK, "<$db_filename.lock") or die;
+ flock(LOCK, LOCK_SH) or die;
+ tie(%db_hash, 'DB_File', $db_filename, O_RDONLY, 0600, $DB_HASH) or die;
+ ... then read the database ...
+ untie(%db_hash);
+ close(LOCK);
+
+This module lets you write
+
+ tie(%db_hash, 'DB_File::Lock', $db_filename, O_RDONLY, 0600, $DB_HASH, 'read') or die;
+ ... then read the database ...
+ untie(%db_hash);
+
+This is better for two reasons:
+
+(1) Less cumbersome to write.
+
+(2) A fatal exception in the code working on the database which does
+not lead to process termination will probably not close the lockfile
+and therefore cause a dropped lock.
+
+=head1 USAGE DETAILS
+
+Tie to the database file by adding an additional locking argument
+to the list of arguments to be passed through to DB_File, such as:
+
+ tie(%db_hash, 'DB_File::Lock', $db_filename, O_RDONLY, 0600, $DB_HASH, 'read');
+
+or enclose the arguments for DB_File in a list reference:
+
+ tie(%db_hash, 'DB_File::Lock', [$db_filename, O_RDONLY, 0600, $DB_HASH], 'read');
+
+The filename used for the lockfile defaults to "$filename.lock"
+(the filename of the DB_File with ".lock" appended). Using a lockfile
+separate from the database file is recommended because it prevents weird
+interactions with the underlying database file library
+
+The additional locking argument added to the tie call can be:
+
+(1) "read" -- acquires a shared lock for reading
+
+(2) "write" -- acquires an exclusive lock for writing
+
+(3) A hash with the following keys (all optional except for the "mode"):
+
+=over 4
+
+=item mode
+
+the locking mode, "read" or "write".
+
+=item lockfile_name
+
+specifies the name of the lockfile to use. Default
+is "$filename.lock". This is useful for locking multiple resources with
+the same lockfiles.
+
+=item nonblocking
+
+determines if the flock call on the lockfile should
+block waiting for a lock, or if it should return failure if a lock can
+not be immediately attained. If "nonblocking" is set and a lock can not
+be attained, the tie command will fail. Currently, I'm not sure how to
+differentiate this between a failure form the DB_File layer.
+
+=item lockfile_mode
+
+determines the mode for the sysopen call in opening
+the lockfile. The default mode will be formulated to allow anyone that
+can read or write the DB_File permission to read and write the lockfile.
+(This is because some systems may require that one have write access to
+a file to lock it for reading, I understand.) The umask will be prevented
+from applying to this mode.
+
+=back
+
+Note: One may import the same values from DB_File::Lock as one may import
+from DB_File.
+
+=head1 GOOD LOCKING ETIQUETTE
+
+To avoid locking problems, realize that it is B<critical> that you release
+the lock as soon as possible. See the lock as a "hot potato", something
+that you must work with and get rid of as quickly as possible. See the
+sections of code where you have a lock as "critical" sections. Make sure
+that you call "untie" as soon as possible.
+
+It is often better to write:
+
+ # open database file with lock
+ # work with database
+ # lots of processing not related to database
+ # work with database
+ # close database and release lock
+
+as:
+
+ # open database file with lock
+ # work with database
+ # close database and release lock
+
+ # lots of processing not related to database
+
+ # open database file with lock
+ # work with database
+ # close database and release lock
+
+Also realize that when acquiring two locks at the same time, a deadlock
+situation can be caused.
+
+You can enter a deadlock situation if two processes simultaneously try to
+acquire locks on two separate databases. Each has locked only one of
+the databases, and cannot continue without locking the second. Yet this
+will never be freed because it is locked by the other process. If your
+processes all ask for their DB files in the same order, this situation
+cannot occur.
+
+=head1 OTHER LOCKING MODULES
+
+There are three locking wrappers for DB_File in CPAN right now. Each one
+implements locking differently and has different goals in mind. It is
+therefore worth knowing the difference, so that you can pick the right
+one for your application.
+
+Here are the three locking wrappers:
+
+Tie::DB_Lock -- DB_File wrapper which creates copies of the database file
+for read access, so that you have kind of a multiversioning concurrent
+read system. However, updates are still serial. Use for databases where
+reads may be lengthy and consistency problems may occur.
+
+Tie::DB_LockFile -- DB_File wrapper that has the ability to lock and
+unlock the database while it is being used. Avoids the tie-before-flock
+problem by simply re-tie-ing the database when you get or drop a
+lock. Because of the flexibility in dropping and re-acquiring the lock
+in the middle of a session, this can be massaged into a system that will
+work with long updates and/or reads if the application follows the hints
+in the POD documentation.
+
+DB_File::Lock (this module) -- extremely lightweight DB_File wrapper
+that simply flocks a lockfile before tie-ing the database and drops the
+lock after the untie. Allows one to use the same lockfile for multiple
+databases to avoid deadlock problems, if desired. Use for databases where
+updates are reads are quick and simple flock locking semantics are enough.
+
+(This text duplicated in the POD documentation, by the way.)
+
+=head1 AUTHOR
+
+David Harris <dharris@drh.net>
+
+Helpful insight from Stas Bekman <stas@stason.org>
+
+=head1 SEE ALSO
+
+DB_File(3).
+
+=cut
diff --git a/lib/Devscripts/Debbugs.pm b/lib/Devscripts/Debbugs.pm
new file mode 100644
index 0000000..355adc3
--- /dev/null
+++ b/lib/Devscripts/Debbugs.pm
@@ -0,0 +1,481 @@
+# This is Debbugs.pm from the Debian devscripts package
+#
+# Copyright (C) 2008 Adam D. Barratt
+# select() is Copyright (C) 2007 Don Armstrong
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+package Devscripts::Debbugs;
+
+=head1 OPTIONS
+
+=over
+
+=item select [key:value ...]
+
+Uses the SOAP interface to output a list of bugs which match the given
+selection requirements.
+
+The following keys are allowed, and may be given multiple times.
+
+=over 8
+
+=item package
+
+Binary package name.
+
+=item source
+
+Source package name.
+
+=item maintainer
+
+E-mail address of the maintainer.
+
+=item submitter
+
+E-mail address of the submitter.
+
+=item severity
+
+Bug severity.
+
+=item status
+
+Status of the bug.
+
+=item tag
+
+Tags applied to the bug. If I<users> is specified, may include
+usertags in addition to the standard tags.
+
+=item owner
+
+Bug's owner.
+
+=item correspondent
+
+Address of someone who sent mail to the log.
+
+=item affects
+
+Bugs which affect this package.
+
+=item bugs
+
+List of bugs to search within.
+
+=item users
+
+Users to use when looking up usertags.
+
+=item archive
+
+Whether to search archived bugs or normal bugs; defaults to 0
+(i.e. only search normal bugs). As a special case, if archive is
+'both', both archived and unarchived bugs are returned.
+
+=back
+
+For example, to select the set of bugs submitted by
+jrandomdeveloper@example.com and tagged wontfix, one would use
+
+select("submitter:jrandomdeveloper@example.com", "tag:wontfix")
+
+=back
+
+=cut
+
+use strict;
+use warnings;
+
+my $soapurl = 'Debbugs/SOAP/1';
+our $btsurl = 'http://bugs.debian.org/';
+my @errors;
+
+our $soap_timeout;
+
+sub soap_timeout {
+ my $timeout_arg = shift;
+ if (defined $timeout_arg and $timeout_arg =~ m{^[1-9]\d*$}) {
+ $soap_timeout = $timeout_arg;
+ }
+}
+
+sub init_soap {
+ my $soapproxyurl;
+ if ($btsurl =~ m%^https?://(.*)/?$%) {
+ $soapproxyurl = $btsurl . '/';
+ } else {
+ $soapproxyurl = 'http://' . $btsurl . '/';
+ }
+ $soapproxyurl =~ s%//$%/%;
+ $soapproxyurl .= 'cgi-bin/soap.cgi';
+ my %options;
+ if ($soap_timeout) {
+ $options{timeout} = $soap_timeout;
+ }
+ my $soap = SOAP::Lite->uri($soapurl)->proxy($soapproxyurl, %options);
+
+ $soap->transport->env_proxy();
+ $soap->on_fault(\&getSOAPError);
+
+ return $soap;
+}
+
+my $soap_broken;
+
+sub have_soap {
+ return ($soap_broken ? 0 : 1) if defined $soap_broken;
+ eval { require SOAP::Lite; };
+
+ if ($@) {
+ if ($@ =~ m%^Can't locate SOAP/%) {
+ $soap_broken = "the libsoap-lite-perl package is not installed";
+ } else {
+ $soap_broken = "couldn't load SOAP::Lite: $@";
+ }
+ } else {
+ $soap_broken = 0;
+ }
+ return ($soap_broken ? 0 : 1);
+}
+
+sub getSOAPError {
+ my ($soap, $result) = @_;
+ my $err;
+ if (ref($result)) {
+ $err = $result->faultstring;
+ } else {
+ $err = $soap->transport->status;
+ }
+ chomp $err;
+ push @errors, $err;
+
+ return new SOAP::SOM;
+}
+
+sub usertags {
+ die "Couldn't run usertags: $soap_broken\n" unless have_soap();
+
+ my @args = @_;
+
+ my $soap = init_soap();
+ my $usertags = $soap->get_usertag(@_);
+
+ if (@errors or not defined $usertags) {
+ my $error = join("\n", @errors);
+ die "Error retrieving usertags from SOAP server: $error\n";
+ }
+
+ my $result = $usertags->result();
+
+ if (@errors or not defined $result) {
+ my $error = join("\n", @errors);
+ die "Error retrieving usertags from SOAP server: $error\n";
+ }
+
+ return $result;
+}
+
+sub select {
+ die "Couldn't run select: $soap_broken\n" unless have_soap();
+ my @args = @_;
+ my %valid_keys = (
+ package => 'package',
+ pkg => 'package',
+ src => 'src',
+ source => 'src',
+ maint => 'maint',
+ maintainer => 'maint',
+ submitter => 'submitter',
+ from => 'submitter',
+ status => 'status',
+ tag => 'tag',
+ tags => 'tag',
+ usertag => 'tag',
+ usertags => 'tag',
+ owner => 'owner',
+ dist => 'dist',
+ distribution => 'dist',
+ bugs => 'bugs',
+ archive => 'archive',
+ severity => 'severity',
+ correspondent => 'correspondent',
+ affects => 'affects',
+ );
+ my %users;
+ my %search_parameters;
+ my $soap = init_soap();
+ for my $arg (@args) {
+ my ($key, $value) = split /:/, $arg, 2;
+ next unless $key;
+ if (exists $valid_keys{$key}) {
+ if ($valid_keys{$key} eq 'archive') {
+ $search_parameters{ $valid_keys{$key} } = $value
+ if $value;
+ } else {
+ push @{ $search_parameters{ $valid_keys{$key} } }, $value
+ if $value;
+ }
+ } elsif ($key =~ /users?$/) {
+ $users{$value} = 1 if $value;
+ } else {
+ warn "select(): Unrecognised key: $key\n";
+ }
+ }
+ my %usertags;
+ for my $user (keys %users) {
+ my $ut = usertags($user);
+ next unless defined $ut and $ut ne "";
+ for my $tag (keys %{$ut}) {
+ push @{ $usertags{$tag} }, @{ $ut->{$tag} };
+ }
+ }
+ my $bugs = $soap->get_bugs(%search_parameters,
+ (keys %usertags) ? (usertags => \%usertags) : ());
+
+ if (@errors or not defined $bugs) {
+ my $error = join("\n", @errors);
+ die "Error while retrieving bugs from SOAP server: $error\n";
+ }
+
+ my $result = $bugs->result();
+ if (@errors or not defined $result) {
+ my $error = join("\n", @errors);
+ die "Error while retrieving bugs from SOAP server: $error\n";
+ }
+
+ return $result;
+}
+
+sub status {
+ die "Couldn't run status: $soap_broken\n" unless have_soap();
+ my @args = @_;
+
+ my $soap = init_soap();
+
+ my $result = {};
+ while (my @slice = splice(@args, 0, 500)) {
+ my $bugs = $soap->get_status(@slice);
+
+ if (@errors or not defined $bugs) {
+ my $error = join("\n", @errors);
+ die
+ "Error while retrieving bug statuses from SOAP server: $error\n";
+ }
+
+ my $tmp = $bugs->result();
+
+ if (@errors or not defined $tmp) {
+ my $error = join("\n", @errors);
+ die
+ "Error while retrieving bug statuses from SOAP server: $error\n";
+ }
+
+ %$result = (%$result, %$tmp);
+ }
+
+ return $result;
+}
+
+sub versions {
+ die "Couldn't run versions: $soap_broken\n" unless have_soap();
+
+ my @args = @_;
+ my %valid_keys = (
+ package => 'package',
+ pkg => 'package',
+ src => 'source',
+ source => 'source',
+ time => 'time',
+ binary => 'no_source_arch',
+ notsource => 'no_source_arch',
+ archs => 'return_archs',
+ displayarch => 'return_archs',
+ );
+
+ my %search_parameters;
+ my @archs = ();
+ my @dists = ();
+
+ for my $arg (@args) {
+ my ($key, $value) = split /:/, $arg, 2;
+ $value ||= "1";
+ if ($key =~ /^arch(itecture)?$/) {
+ push @archs, $value;
+ } elsif ($key =~ /^dist(ribution)?$/) {
+ push @dists, $value;
+ } elsif (exists $valid_keys{$key}) {
+ $search_parameters{ $valid_keys{$key} } = $value;
+ }
+ }
+
+ $search_parameters{arch} = \@archs if @archs;
+ $search_parameters{dist} = \@dists if @dists;
+
+ my $soap = init_soap();
+
+ my $versions = $soap->get_versions(%search_parameters);
+
+ if (@errors or not defined $versions) {
+ my $error = join("\n", @errors);
+ die
+ "Error while retrieving package versions from SOAP server: $error\n";
+ }
+
+ my $result = $versions->result();
+
+ if (@errors or not defined $result) {
+ my $error = join("\n", @errors);
+ die "Error while retrieivng package versions from SOAP server: $error";
+ }
+
+ return $result;
+}
+
+sub versions_with_arch {
+ die "Couldn't run versions_with_arch: $soap_broken\n" unless have_soap();
+ my @args = @_;
+
+ my $versions = versions(@args, 'displayarch:1');
+
+ if (not defined $versions) {
+ die "Error while retrieivng package versions from SOAP server: $@";
+ }
+
+ return $versions;
+}
+
+sub newest_bugs {
+ die "Couldn't run newest_bugs: $soap_broken\n" unless have_soap();
+ my $count = shift || '';
+
+ return if $count !~ /^\d+$/;
+
+ my $soap = init_soap();
+
+ my $bugs = $soap->newest_bugs($count);
+
+ if (@errors or not defined $bugs) {
+ my $error = join("\n", @errors);
+ die "Error while retrieving newest bug list from SOAP server: $error";
+ }
+
+ my $result = $bugs->result();
+
+ if (@errors or not defined $result) {
+ my $error = join("\n", @errors);
+ die "Error while retrieving newest bug list from SOAP server: $error";
+ }
+
+ return $result;
+}
+
+# debbugs currently ignores the $msg_num parameter
+# but eventually it might not, so we support passing it
+
+sub bug_log {
+ die "Couldn't run bug_log: $soap_broken\n" unless have_soap();
+
+ my $bug = shift || '';
+ my $message = shift;
+
+ return if $bug !~ /^\d+$/;
+
+ my $soap = init_soap();
+
+ my $log = $soap->get_bug_log($bug, $message);
+
+ if (@errors or not defined $log) {
+ my $error = join("\n", @errors);
+ die "Error while retrieving bug log from SOAP server: $error\n";
+ }
+
+ my $result = $log->result();
+
+ if (@errors or not defined $result) {
+ my $error = join("\n", @errors);
+ die "Error while retrieving bug log from SOAP server: $error\n";
+ }
+
+ return $result;
+}
+
+sub binary_to_source {
+ die "Couldn't run binary_to_source: $soap_broken\n"
+ unless have_soap();
+
+ my $soap = init_soap();
+
+ my $binpkg = shift;
+ my $binver = shift;
+ my $arch = shift;
+
+ return if not defined $binpkg or not defined $binver;
+
+ my $mapping = $soap->binary_to_source($binpkg, $binver, $arch);
+
+ if (@errors or not defined $mapping) {
+ my $error = join("\n", @errors);
+ die
+"Error while retrieving binary to source mapping from SOAP server: $error\n";
+ }
+
+ my $result = $mapping->result();
+
+ if (@errors or not defined $result) {
+ my $error = join("\n", @errors);
+ die
+"Error while retrieving binary to source mapping from SOAP server: $error\n";
+ }
+
+ return $result;
+}
+
+sub source_to_binary {
+ die "Couldn't run source_to_binary: $soap_broken\n"
+ unless have_soap();
+
+ my $soap = init_soap();
+
+ my $srcpkg = shift;
+ my $srcver = shift;
+
+ return if not defined $srcpkg or not defined $srcver;
+
+ my $mapping = $soap->source_to_binary($srcpkg, $srcver);
+
+ if (@errors or not defined $mapping) {
+ my $error = join("\n", @errors);
+ die
+"Error while retrieving source to binary mapping from SOAP server: $error\n";
+ }
+
+ my $result = $mapping->result();
+
+ if (@errors or not defined $result) {
+ my $error = join("\n", @errors);
+ die
+"Error while retrieving source to binary mapping from SOAP server: $error\n";
+ }
+
+ return $result;
+}
+
+1;
+
+__END__
+
diff --git a/lib/Devscripts/JSONCache.pm b/lib/Devscripts/JSONCache.pm
new file mode 100644
index 0000000..b2e8761
--- /dev/null
+++ b/lib/Devscripts/JSONCache.pm
@@ -0,0 +1,97 @@
+package Devscripts::JSONCache;
+
+use strict;
+use JSON;
+use Moo;
+
+has file => (is => 'rw', required => 1);
+
+has saved => (is => 'rw');
+
+has _data => (is => 'rw');
+
+sub save_sec {
+ my ($self, $obj) = @_;
+ my $tmp = umask;
+ umask 0177;
+ open(my $fh, '>', $self->file) or ($self->saved(1) and die $!);
+ print $fh JSON::to_json($obj);
+ close $fh;
+ umask $tmp;
+}
+
+sub data {
+ my ($self) = @_;
+ return $self->_data if $self->_data;
+ my $res;
+ if (-r $self->file) {
+ open(F, $self->file) or ($self->saved(1) and die $!);
+ $res = JSON::from_json(join('', <F>) || "{}");
+ close F;
+ } else {
+ $self->save_sec({});
+ $self->saved(0);
+ }
+ return $self->_data($res);
+}
+
+sub TIEHASH {
+ my $r = shift->new({
+ file => shift,
+ @_,
+ });
+ # build data
+ $r->data;
+ return $r;
+}
+
+sub FETCH {
+ return $_[0]->data->{ $_[1] };
+}
+
+sub STORE {
+ $_[0]->data->{ $_[1] } = $_[2];
+}
+
+sub DELETE {
+ delete $_[0]->data->{ $_[1] };
+}
+
+sub CLEAR {
+ $_[0]->save({});
+}
+
+sub EXISTS {
+ return exists $_[0]->data->{ $_[1] };
+}
+
+sub FIRSTKEY {
+ my ($k) = sort { $a cmp $b } keys %{ $_[0]->data };
+ return $k;
+}
+
+sub NEXTKEY {
+ my ($self, $last) = @_;
+ my $i = 0;
+ my @keys = map {
+ return $_ if ($i);
+ $i++ if ($_ eq $last);
+ return ()
+ }
+ sort { $a cmp $b } keys %{ $_[0]->data };
+ return @keys ? $keys[0] : ();
+}
+
+sub SCALAR {
+ return scalar %{ $_[0]->data };
+}
+
+sub save {
+ return if ($_[0]->saved);
+ eval { $_[0]->save_sec($_[0]->data); };
+ $_[0]->saved(1);
+}
+
+*DESTROY = *UNTIE = *save;
+
+1;
diff --git a/lib/Devscripts/MkOrigtargz.pm b/lib/Devscripts/MkOrigtargz.pm
new file mode 100644
index 0000000..f4fa5fb
--- /dev/null
+++ b/lib/Devscripts/MkOrigtargz.pm
@@ -0,0 +1,631 @@
+package Devscripts::MkOrigtargz;
+
+use strict;
+use Cwd 'abs_path';
+use Devscripts::Compression
+ qw/compression_guess_from_file compression_get_property/;
+use Devscripts::MkOrigtargz::Config;
+use Devscripts::Output;
+use Devscripts::Uscan::Output;
+use Devscripts::Utils;
+use Dpkg::Changelog::Debian;
+use Dpkg::Control::Hash;
+use Dpkg::IPC;
+use Dpkg::Version;
+use File::Copy;
+use File::Spec;
+use File::Temp qw/tempdir/;
+use Moo;
+
+has config => (
+ is => 'rw',
+ default => sub {
+ Devscripts::MkOrigtargz::Config->new->parse;
+ },
+);
+
+has exclude_globs => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { $_[0]->config->exclude_file },
+);
+
+has include_globs => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { $_[0]->config->include_file },
+);
+
+has status => (is => 'rw', default => sub { 0 });
+has destfile_nice => (is => 'rw');
+
+our $found_comp;
+
+sub do {
+ my ($self) = @_;
+ $self->parse_copyrights or $self->make_orig_targz;
+ return $self->status;
+}
+
+sub make_orig_targz {
+ my ($self) = @_;
+
+ # Now we know what the final filename will be
+ my $destfilebase = sprintf "%s_%s.%s.tar", $self->config->package,
+ $self->config->version, $self->config->orig;
+ my $destfiletar = sprintf "%s/%s", $self->config->directory, $destfilebase;
+ my $destext
+ = $self->config->compression eq 'default'
+ ? 'default'
+ : compression_get_property($self->config->compression, "file_ext");
+ my $destfile;
+
+ # $upstream_tar is $upstream, unless the latter was a zip file.
+ my $upstream_tar = $self->config->upstream;
+
+ # Remember this for the final report
+ my $zipfile_deleted = 0;
+
+ # If the file is a zipfile, we need to create a tarfile from it.
+ if ($self->config->upstream_type eq 'zip') {
+ $destfile = $self->fix_dest_file($destfiletar);
+ if ($self->config->signature) {
+ $self->config->signature(4); # repack upstream file
+ }
+
+ my $tempdir = tempdir("uscanXXXX", TMPDIR => 1, CLEANUP => 1);
+ # Parent of the target directory should be under our control
+ $tempdir .= '/repack';
+ my @cmd;
+ if ($self->config->upstream_comp eq 'xpi') {
+ @cmd = ('xpi-unpack', $upstream_tar, $tempdir);
+ unless (ds_exec_no_fail(@cmd) >> 8 == 0) {
+ ds_die("Repacking from xpi failed (could not xpi-unpack)\n");
+ return $self->status(1);
+ }
+ } else {
+ unless (mkdir $tempdir) {
+ ds_die("Unable to mkdir($tempdir): $!\n");
+ return $self->status(1);
+ }
+ @cmd = ('unzip', '-q');
+ push @cmd, split ' ', $self->config->unzipopt
+ if defined $self->config->unzipopt;
+ push @cmd, ('-d', $tempdir, $upstream_tar);
+ unless (ds_exec_no_fail(@cmd) >> 8 == 0) {
+ ds_die("Repacking from zip or jar failed (could not unzip)\n");
+ return $self->status(1);
+ }
+ }
+
+ # Figure out the top-level contents of the tarball.
+ # If we'd pass "." to tar we'd get the same contents, but the filenames
+ # would start with ./, which is confusing later.
+ # This should also be more reliable than, say, changing directories and
+ # globbing.
+ unless (opendir(TMPDIR, $tempdir)) {
+ ds_die("Can't open $tempdir $!\n");
+ return $self->status(1);
+ }
+ my @files = grep { $_ ne "." && $_ ne ".." } readdir(TMPDIR);
+ close TMPDIR;
+
+ # tar it all up
+ spawn(
+ exec => [
+ 'tar', '--owner=root',
+ '--group=root', '--mode=a+rX',
+ '--create', '--file',
+ "$destfiletar", '--directory',
+ $tempdir, @files
+ ],
+ wait_child => 1
+ );
+ unless (-e "$destfiletar") {
+ ds_die(
+"Repacking from zip or jar to tar.$destext failed (could not create tarball)\n"
+ );
+ return $self->status(1);
+ }
+ eval {
+ compress_archive($destfiletar, $destfile,
+ $self->config->compression);
+ };
+ if ($@) {
+ ds_die($@);
+ return $self->status(1);
+ }
+
+ # rename means the user did not want this file to exist afterwards
+ if ($self->config->mode eq "rename") {
+ unlink $upstream_tar;
+ $zipfile_deleted++;
+ }
+
+ $self->config->mode('repack');
+ $upstream_tar = $destfile;
+ } elsif (compression_guess_from_file($upstream_tar) =~ /^zstd?$/) {
+ $self->config->force_repack(1);
+ }
+
+ # From now on, $upstream_tar is guaranteed to be a compressed tarball. It
+ # is always a full (possibly relative) path, and distinct from $destfile.
+
+ # Find out if we have to repack
+ my $do_repack = 0;
+ if ($self->config->repack) {
+ my $comp = compression_guess_from_file($upstream_tar);
+ unless ($comp) {
+ ds_die("Cannot determine compression method of $upstream_tar");
+ return $self->status(1);
+ }
+ $do_repack = (
+ $comp eq 'tar'
+ or ( $self->config->compression ne 'default'
+ and $comp ne $self->config->compression)
+ or ( $self->config->compression eq 'default'
+ and $comp ne
+ &Devscripts::MkOrigtargz::Config::default_compression));
+ }
+
+ # Removing files
+ my $deletecount = 0;
+ my @to_delete;
+
+ if (@{ $self->exclude_globs }) {
+ my @files;
+ my $files;
+ spawn(
+ exec => ['tar', '-t', '-a', '-f', $upstream_tar],
+ to_string => \$files,
+ wait_child => 1
+ );
+ @files = split /^/, $files;
+ chomp @files;
+
+ my %delete;
+ # find out what to delete
+ my @exclude_info;
+ eval {
+ @exclude_info
+ = map { { glob => $_, used => 0, regex => glob_to_regex($_) } }
+ @{ $self->exclude_globs };
+ };
+ if ($@) {
+ ds_die($@);
+ return $self->status(1);
+ }
+ for my $filename (sort @files) {
+ my $last_match;
+ for my $info (@exclude_info) {
+ if (
+ $filename
+ =~ m@^(?:[^/]*/)? # Possible leading directory, ignore it
+ (?:$info->{regex}) # User pattern
+ (?:/.*)?$ # Possible trailing / for a directory
+ @x
+ ) {
+ if (!$last_match) {
+ # if the current entry is a directory, check if it
+ # matches any exclude-ignored glob
+ my $ignore_this_exclude = 0;
+ for my $ignore_exclude (@{ $self->include_globs }) {
+ my $ignore_exclude_regex
+ = glob_to_regex($ignore_exclude);
+
+ if ($filename =~ $ignore_exclude_regex) {
+ $ignore_this_exclude = 1;
+ last;
+ }
+ if ( $filename =~ m,/$,
+ && $ignore_exclude =~ $info->{regex}) {
+ $ignore_this_exclude = 1;
+ last;
+ }
+ }
+ next if $ignore_this_exclude;
+ $delete{$filename} = 1;
+ }
+ $last_match = $info;
+ }
+ }
+ if (defined $last_match) {
+ $last_match->{used} = 1;
+ }
+ }
+
+ for my $info (@exclude_info) {
+ if (!$info->{used}) {
+ ds_warn
+"No files matched excluded pattern as the last matching glob: $info->{glob}\n";
+ }
+ }
+
+ # ensure files are mentioned before the directory they live in
+ # (otherwise tar complains)
+ @to_delete = sort { $b cmp $a } keys %delete;
+
+ $deletecount = scalar(@to_delete);
+ }
+
+ if ($deletecount or $self->config->force_repack) {
+ $destfilebase = sprintf "%s_%s%s.%s.tar", $self->config->package,
+ $self->config->version, $self->config->repack_suffix,
+ $self->config->orig;
+ $destfiletar = sprintf "%s/%s", $self->config->directory,
+ $destfilebase;
+ $destfile = $self->fix_dest_file($destfiletar);
+
+ # Zip -> tar process already created $destfile, so need to rename it
+ if ($self->config->upstream_type eq 'zip') {
+ move($upstream_tar, $destfile);
+ $upstream_tar = $destfile;
+ }
+ }
+
+ # Actually do the unpack, remove, pack cycle
+ if ($do_repack || $deletecount || $self->config->force_repack) {
+ $destfile ||= $self->fix_dest_file($destfiletar);
+ if ($self->config->signature) {
+ $self->config->signature(4); # repack upstream file
+ }
+ if ($self->config->upstream_comp) {
+ eval { decompress_archive($upstream_tar, $destfiletar) };
+ if ($@) {
+ ds_die($@);
+ return $self->status(1);
+ }
+ } else {
+ copy $upstream_tar, $destfiletar;
+ }
+ unlink $upstream_tar if $self->config->mode eq "rename";
+ # We have to use piping because --delete is broken otherwise, as
+ # documented at
+ # https://www.gnu.org/software/tar/manual/html_node/delete.html
+ if (@to_delete) {
+ # ARG_MAX: max number of bytes exec() can handle
+ my $arg_max;
+ spawn(
+ exec => ['getconf', 'ARG_MAX'],
+ to_string => \$arg_max,
+ wait_child => 1
+ );
+ # Under Hurd `getconf` above returns "undefined".
+ # It's apparently unlimited (?), so we just use a arbitrary number.
+ if ($arg_max =~ /\D/) { $arg_max = 131072; }
+ # Usually NAME_MAX=255, but here we use 128 to be on the safe side.
+ $arg_max = int($arg_max / 128);
+ # We use this lame splice on a totally arbitrary $arg_max because
+ # counting how many bytes there are in @to_delete is too
+ # inefficient.
+ while (my @next_n = splice @to_delete, 0, $arg_max) {
+ spawn(
+ exec => ['tar', '--delete', @next_n],
+ from_file => $destfiletar,
+ to_file => $destfiletar . ".tmp",
+ wait_child => 1
+ ) if scalar(@next_n) > 0;
+ move($destfiletar . ".tmp", $destfiletar);
+ }
+ }
+ eval {
+ compress_archive($destfiletar, $destfile,
+ $self->config->compression);
+ };
+ if ($@) {
+ ds_die $@;
+ return $self->status(1);
+ }
+
+ # Symlink no longer makes sense
+ $self->config->mode('repack');
+ $upstream_tar = $destfile;
+ } else {
+ $destfile = $self->fix_dest_file($destfiletar,
+ compression_guess_from_file($upstream_tar), 1);
+ }
+
+ # Final step: symlink, copy or rename for tarball.
+
+ my $same_name = abs_path($destfile) eq abs_path($self->config->upstream);
+ unless ($same_name) {
+ if ( $self->config->mode ne "repack"
+ and $upstream_tar ne $self->config->upstream) {
+ ds_die "Assertion failed";
+ return $self->status(1);
+ }
+
+ if ($self->config->mode eq "symlink") {
+ my $rel
+ = File::Spec->abs2rel($upstream_tar, $self->config->directory);
+ symlink $rel, $destfile;
+ } elsif ($self->config->mode eq "copy") {
+ copy($upstream_tar, $destfile);
+ } elsif ($self->config->mode eq "rename") {
+ move($upstream_tar, $destfile);
+ }
+ }
+
+ # Final step: symlink, copy or rename for signature file.
+
+ my $destsigfile;
+ if ($self->config->signature == 1) {
+ $destsigfile = sprintf "%s.asc", $destfile;
+ } elsif ($self->config->signature == 2) {
+ $destsigfile = sprintf "%s.asc", $destfiletar;
+ } elsif ($self->config->signature == 3) {
+ # XXX FIXME XXX place holder
+ $destsigfile = sprintf "%s.asc", $destfile;
+ } else {
+ # $self->config->signature == 0 or 4
+ $destsigfile = "";
+ }
+
+ if ($self->config->signature == 1 or $self->config->signature == 2) {
+ my $is_openpgp_ascii_armor = 0;
+ my $fh_sig;
+ unless (open($fh_sig, '<', $self->config->signature_file)) {
+ ds_die "Cannot open $self->{config}->{signature_file}\n";
+ return $self->status(1);
+ }
+ while (<$fh_sig>) {
+ if (m/^-----BEGIN PGP /) {
+ $is_openpgp_ascii_armor = 1;
+ last;
+ }
+ }
+ close($fh_sig);
+
+ if (not $is_openpgp_ascii_armor) {
+ my @enarmor
+ = `gpg --no-options --output - --enarmor $self->{config}->{signature_file} 2>&1`;
+ unless ($? == 0) {
+ ds_die
+"Failed to convert $self->{config}->{signature_file} to *.asc\n";
+ return $self->status(1);
+ }
+ unless (open(DESTSIG, '>', $destsigfile)) {
+ ds_die "Failed to open $destsigfile for write $!\n";
+ return $self->status(1);
+ }
+ foreach my $line (@enarmor) {
+ next if $line =~ m/^Version:/;
+ next if $line =~ m/^Comment:/;
+ $line =~ s/ARMORED FILE/SIGNATURE/;
+ print DESTSIG $line;
+ }
+ unless (close(DESTSIG)) {
+ ds_die
+"Cannot write signature file $self->{config}->{signature_file}\n";
+ return $self->status(1);
+ }
+ } else {
+ if (abs_path($self->config->signature_file) ne
+ abs_path($destsigfile)) {
+ if ($self->config->mode eq "symlink") {
+ my $rel = File::Spec->abs2rel(
+ $self->config->signature_file,
+ $self->config->directory
+ );
+ symlink $rel, $destsigfile;
+ } elsif ($self->config->mode eq "copy") {
+ copy($self->config->signature_file, $destsigfile);
+ } elsif ($self->config->mode eq "rename") {
+ move($self->config->signature_file, $destsigfile);
+ } else {
+ ds_die 'Strange mode="' . $self->config->mode . "\"\n";
+ return $self->status(1);
+ }
+ }
+ }
+ } elsif ($self->config->signature == 3) {
+ uscan_msg_raw
+"Skip adding upstream signature since upstream file has non-detached signature file.";
+ } elsif ($self->config->signature == 4) {
+ uscan_msg_raw
+ "Skip adding upstream signature since upstream file is repacked.";
+ }
+
+ # Final check: Is the tarball usable
+
+ # We are lazy and rely on Dpkg::IPC to report an error message
+ # (spawn does not report back the error code).
+ # We don't expect this to occur often anyways.
+ my $ret = spawn(
+ exec => ['tar', '--list', '--auto-compress', '--file', $destfile],
+ wait_child => 1,
+ to_file => '/dev/null'
+ );
+
+ # Tell the user what we did
+
+ my $upstream_nice = File::Spec->canonpath($self->config->upstream);
+ my $destfile_nice = File::Spec->canonpath($destfile);
+ $self->destfile_nice($destfile_nice);
+
+ if ($same_name) {
+ uscan_msg_raw "Leaving $destfile_nice where it is";
+ } else {
+ if ( $self->config->upstream_type eq 'zip'
+ or $do_repack
+ or $deletecount
+ or $self->config->force_repack) {
+ uscan_msg_raw
+ "Successfully repacked $upstream_nice as $destfile_nice";
+ } elsif ($self->config->mode eq "symlink") {
+ uscan_msg_raw
+ "Successfully symlinked $upstream_nice to $destfile_nice";
+ } elsif ($self->config->mode eq "copy") {
+ uscan_msg_raw
+ "Successfully copied $upstream_nice to $destfile_nice";
+ } elsif ($self->config->mode eq "rename") {
+ uscan_msg_raw
+ "Successfully renamed $upstream_nice to $destfile_nice";
+ } else {
+ ds_die 'Unknown mode ' . $self->config->mode;
+ return $self->status(1);
+ }
+ }
+
+ if ($deletecount) {
+ uscan_msg_raw ", deleting ${deletecount} files from it";
+ }
+ if ($zipfile_deleted) {
+ uscan_msg_raw ", and removed the original file";
+ }
+ print ".\n";
+ return 0;
+}
+
+sub decompress_archive {
+ my ($from_file, $to_file) = @_;
+ my $comp = compression_guess_from_file($from_file);
+ unless ($comp) {
+ die("Cannot determine compression method of $from_file");
+ }
+
+ my $cmd = compression_get_property($comp, 'decomp_prog');
+ spawn(
+ exec => $cmd,
+ from_file => $from_file,
+ to_file => $to_file,
+ wait_child => 1
+ );
+}
+
+sub compress_archive {
+ my ($from_file, $to_file, $comp) = @_;
+
+ my $cmd = compression_get_property($comp, 'comp_prog');
+ push(@{$cmd}, '-' . compression_get_property($comp, 'default_level'));
+ spawn(
+ exec => $cmd,
+ from_file => $from_file,
+ to_file => $to_file,
+ wait_child => 1
+ );
+ unlink $from_file;
+}
+
+# Adapted from Text::Glob::glob_to_regex_string
+sub glob_to_regex {
+ my ($glob) = @_;
+
+ if ($glob =~ m@/$@) {
+ ds_warn
+ "Files-Excluded pattern ($glob) should not have a trailing /\n";
+ chop($glob);
+ }
+ if ($glob =~ m/(?<!\\)(?:\\{2})*\\(?![\\*?])/) {
+ die
+"Invalid Files-Excluded pattern ($glob), \\ can only escape \\, *, or ? characters\n";
+ }
+
+ my ($regex, $escaping);
+ for my $c ($glob =~ m/(.)/gs) {
+ if (
+ $c eq '.'
+ || $c eq '('
+ || $c eq ')'
+ || $c eq '|'
+ || $c eq '+'
+ || $c eq '^'
+ || $c eq '$'
+ || $c eq '@'
+ || $c eq '%'
+ || $c eq '{'
+ || $c eq '}'
+ || $c eq '['
+ || $c eq ']'
+ ||
+
+ # Escape '#' since we're using /x in the pattern match
+ $c eq '#'
+ ) {
+ $regex .= "\\$c";
+ } elsif ($c eq '*') {
+ $regex .= $escaping ? "\\*" : ".*";
+ } elsif ($c eq '?') {
+ $regex .= $escaping ? "\\?" : ".";
+ } elsif ($c eq "\\") {
+ if ($escaping) {
+ $regex .= "\\\\";
+ $escaping = 0;
+ } else {
+ $escaping = 1;
+ }
+ next;
+ } else {
+ $regex .= $c;
+ $escaping = 0;
+ }
+ $escaping = 0;
+ }
+
+ return $regex;
+}
+
+sub parse_copyrights {
+ my ($self) = @_;
+ for my $copyright_file (@{ $self->config->copyright_file }) {
+ my $data = Dpkg::Control::Hash->new();
+ my $okformat
+ = qr'https?://www.debian.org/doc/packaging-manuals/copyright-format/[.\d]+';
+ eval {
+ $data->load($copyright_file);
+ 1;
+ } or do {
+ undef $data;
+ };
+ if (not -e $copyright_file) {
+ ds_die "File $copyright_file not found.";
+ return $self->status(1);
+ } elsif ($data
+ && defined $data->{format}
+ && $data->{format} =~ m@^$okformat/?$@) {
+ if ($data->{ $self->config->excludestanza }) {
+ push(
+ @{ $self->exclude_globs },
+ grep { $_ }
+ split(/\s+/, $data->{ $self->config->excludestanza }));
+ }
+ if ($data->{ $self->config->includestanza }) {
+ push(
+ @{ $self->include_globs },
+ grep { $_ }
+ split(/\s+/, $data->{ $self->config->includestanza }));
+ }
+ } else {
+ if (open my $file, '<', $copyright_file) {
+ while (my $line = <$file>) {
+ if ($line =~ m/\b$self->{config}->{excludestanza}.*:/i) {
+ ds_warn "The file $copyright_file mentions "
+ . $self->config->excludestanza
+ . ", but its "
+ . "format is not recognized. Specify Format: "
+ . "https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ "
+ . "in order to remove files from the tarball with mk-origtargz.\n";
+ last;
+ }
+ }
+ close $file;
+ } else {
+ ds_die "Unable to read $copyright_file: $!\n";
+ return $self->status(1);
+ }
+ }
+ }
+}
+
+sub fix_dest_file {
+ my ($self, $destfiletar, $comp, $force) = @_;
+ if ($self->config->compression eq 'default' or $force) {
+ $self->config->compression($comp
+ || &Devscripts::MkOrigtargz::Config::default_compression);
+ }
+ $comp = compression_get_property($self->config->compression, "file_ext");
+ $found_comp ||= $self->config->compression;
+ return sprintf "%s.%s", $destfiletar, $comp;
+}
+
+1;
diff --git a/lib/Devscripts/MkOrigtargz/Config.pm b/lib/Devscripts/MkOrigtargz/Config.pm
new file mode 100644
index 0000000..a4612be
--- /dev/null
+++ b/lib/Devscripts/MkOrigtargz/Config.pm
@@ -0,0 +1,247 @@
+package Devscripts::MkOrigtargz::Config;
+
+use strict;
+
+use Devscripts::Compression qw'compression_is_supported
+ compression_guess_from_file
+ compression_get_property';
+use Devscripts::Uscan::Output;
+use Exporter 'import';
+use File::Which;
+use Moo;
+
+use constant default_compression => 'xz';
+
+# regexp-assemble << END
+# tar\.gz
+# tgz
+# tar\.bz2
+# tbz2?
+# tar\.lzma
+# tlz(?:ma?)?
+# tar\.xz
+# txz
+# tar\.Z
+# tar
+# tar.zst
+# tar.zstd
+# END
+use constant tar_regex =>
+ qr/t(?:ar(?:\.(?:[gx]z|lzma|bz2|Z)|.zstd?)?|lz(?:ma?)?|[gx]z|bz2?)$/;
+
+extends 'Devscripts::Config';
+
+# Command-line parameters
+has component => (is => 'rw');
+has compression => (is => 'rw');
+has copyright_file => (is => 'rw');
+has directory => (is => 'rw');
+has exclude_file => (is => 'rw');
+has include_file => (is => 'rw');
+has force_repack => (is => 'rw');
+has package => (is => 'rw');
+has signature => (is => 'rw');
+has signature_file => (is => 'rw');
+has repack => (is => 'rw');
+has repack_suffix => (is => 'rw');
+has unzipopt => (is => 'rw');
+has version => (is => 'rw');
+
+# Internal accessors
+has mode => (is => 'rw');
+has orig => (is => 'rw', default => sub { 'orig' });
+has excludestanza => (is => 'rw', default => sub { 'Files-Excluded' });
+has includestanza => (is => 'rw', default => sub { 'Files-Included' });
+has upstream => (is => 'rw');
+has upstream_type => (is => 'rw');
+has upstream_comp => (is => 'rw');
+
+use constant keys => [
+ ['package=s'],
+ ['version|v=s'],
+ [
+ 'component|c=s',
+ undef,
+ sub {
+ if ($_[1]) {
+ $_[0]->orig("orig-$_[1]");
+ $_[0]->excludestanza("Files-Excluded-$_[1]");
+ $_[0]->includestanza("Files-Included-$_[1]");
+ }
+ 1;
+
+ }
+ ],
+ ['directory|C=s'],
+ ['exclude-file=s', undef, undef, sub { [] }],
+ ['include-file=s', undef, undef, sub { [] }],
+ ['force-repack'],
+ ['copyright-file=s', undef, undef, sub { [] }],
+ ['signature=i', undef, undef, 0],
+ ['signature-file=s', undef, undef, ''],
+ [
+ 'compression=s',
+ undef,
+ sub {
+ return (0, "Unknown compression scheme $_[1]")
+ unless ($_[1] eq 'default' or compression_is_supported($_[1]));
+ $_[0]->compression($_[1]);
+ },
+ ],
+ ['symlink', undef, \&setmode],
+ ['rename', undef, \&setmode],
+ ['copy', undef, \&setmode],
+ ['repack'],
+ ['repack-suffix|S=s', undef, undef, ''],
+ ['unzipopt=s'],
+];
+
+use constant rules => [
+ # Check --package if --version is used
+ sub {
+ return (
+ (defined $_[0]->{package} and not defined $_[0]->{version})
+ ? (0, 'If you use --package, you also have to specify --version')
+ : (1));
+ },
+ # Check that a tarball has been given and store it in $self->upstream
+ sub {
+ return (0, 'Please specify original tarball') unless (@ARGV == 1);
+ $_[0]->upstream($ARGV[0]);
+ return (
+ -r $_[0]->upstream
+ ? (1)
+ : (0, "Could not read $_[0]->{upstream}: $!"));
+ },
+ # Get Debian package name an version unless given
+ sub {
+ my ($self) = @_;
+ unless (defined $self->package) {
+
+ # get package name
+ my $c = Dpkg::Changelog::Debian->new(range => { count => 1 });
+ $c->load('debian/changelog');
+ if (my $msg = $c->get_parse_errors()) {
+ return (0, "could not parse debian/changelog:\n$msg");
+ }
+ my ($entry) = @{$c};
+ $self->package($entry->get_source());
+
+ # get version number
+ unless (defined $self->version) {
+ my $debversion = Dpkg::Version->new($entry->get_version());
+ if ($debversion->is_native()) {
+ return (0,
+ "Package with native version number $debversion; "
+ . "mk-origtargz makes no sense for native packages."
+ );
+ }
+ $self->version($debversion->version());
+ }
+
+ unshift @{ $self->copyright_file }, "debian/copyright"
+ if -r "debian/copyright";
+
+ # set destination directory
+ unless (defined $self->directory) {
+ $self->directory('..');
+ }
+ } else {
+ unless (defined $self->directory) {
+ $self->directory('.');
+ }
+ }
+ return 1;
+ },
+ # Get upstream type and compression
+ sub {
+ my ($self) = @_;
+ my $mime = compression_guess_from_file($self->upstream);
+
+ if (defined $mime and $mime eq 'zip') {
+ $self->upstream_type('zip');
+ my ($prog, $pkg);
+ if ($self->upstream =~ /\.xpi$/i) {
+ $self->upstream_comp('xpi');
+ $prog = 'xpi-unpack';
+ $pkg = 'mozilla-devscripts';
+ } else {
+ $self->upstream_comp('zip');
+ $prog = $pkg = 'unzip';
+ }
+ return (0,
+ "$prog binary not found."
+ . " You need to install the package $pkg"
+ . " to be able to repack "
+ . $self->upstream_type
+ . " upstream archives.\n")
+ unless (which $prog);
+ } elsif ($self->upstream =~ tar_regex) {
+ $self->upstream_type('tar');
+ if ($self->upstream =~ /\.tar$/) {
+ $self->upstream_comp('');
+ } else {
+ unless (
+ $self->upstream_comp(
+ compression_guess_from_file($self->upstream))
+ ) {
+ return (0,
+ "Unknown compression used in $self->{upstream}");
+ }
+ }
+ } else {
+ # TODO: Should we ignore the name and only look at what file knows?
+ return (0,
+ 'Parameter '
+ . $self->upstream
+ . ' does not look like a tar archive or a zip file.');
+ }
+ return 1;
+ },
+ # Default compression
+ sub {
+ my ($self) = @_;
+
+ # Case 1: format is 1.0
+ if (-r 'debian/source/format') {
+ open F, 'debian/source/format';
+ my $str = <F>;
+ unless ($str =~ /^([\d\.]+)/ and $1 >= 2.0) {
+ ds_warn
+"Source format is earlier than 2.0, switch compression to gzip";
+ $self->compression('gzip');
+ $self->repack(1) unless ($self->upstream_comp eq 'gzip');
+ }
+ close F;
+ } elsif (-d 'debian') {
+ ds_warn "Missing debian/source/format, switch compression to gzip";
+ $self->compression('gzip');
+ $self->repack(1) unless ($self->upstream_comp eq 'gzip');
+ } elsif ($self->upstream_type eq 'tar') {
+
+ # Uncompressed tar
+ if (!$self->upstream_comp) {
+ $self->repack(1);
+ }
+ }
+ # Set to default. Will be changed after setting do_repack
+ $self->compression('default')
+ unless ($self->compression);
+ return 1;
+ },
+ sub {
+ my ($self) = @_;
+ $self->{mode} ||= 'symlink';
+ },
+];
+
+sub setmode {
+ my ($self, $nv, $kname) = @_;
+ return unless ($nv);
+ if (defined $self->mode and $self->mode ne $kname) {
+ return (0, "--$self->{mode} and --$kname are mutually exclusive");
+ }
+ $self->mode($kname);
+}
+
+1;
diff --git a/lib/Devscripts/Output.pm b/lib/Devscripts/Output.pm
new file mode 100644
index 0000000..6ef2947
--- /dev/null
+++ b/lib/Devscripts/Output.pm
@@ -0,0 +1,83 @@
+package Devscripts::Output;
+
+use strict;
+use Exporter 'import';
+use File::Basename;
+use constant accept => qr/^y(?:es)?\s*$/i;
+use constant refuse => qr/^n(?:o)?\s*$/i;
+
+our @EXPORT = (
+ qw(ds_debug ds_extra_debug ds_verbose ds_warn ds_error
+ ds_die ds_msg who_called $progname $verbose
+ ds_prompt accept refuse $ds_yes)
+);
+
+# ACCESSORS
+our ($verbose, $die_on_error, $ds_yes) = (0, 1, 0);
+
+our $progname = basename($0);
+
+sub printwarn {
+ my ($msg, $w) = @_;
+ chomp $msg;
+ if ($w) {
+ print STDERR "$msg\n";
+ } else {
+ print "$msg\n";
+ }
+}
+
+sub ds_msg {
+ my $msg = $_[0];
+ printwarn("$progname: $msg", $_[1]);
+}
+
+sub ds_verbose {
+ my $msg = $_[0];
+ if ($verbose > 0) {
+ printwarn("$progname info: $msg", $_[1]);
+ }
+}
+
+sub who_called {
+ return '' unless ($verbose > 1);
+ my @out = caller(1);
+ return " [$out[0]: $out[2]]";
+}
+
+sub ds_warn {
+ my $msg = $_[0];
+ printwarn("$progname warn: $msg" . who_called, 1);
+}
+
+sub ds_debug {
+ my $msg = $_[0];
+ printwarn("$progname debug: $msg", $_[1]) if $verbose > 1;
+}
+
+sub ds_extra_debug {
+ my $msg = $_[0];
+ printwarn("$progname debug: $msg", $_[1]) if $verbose > 2;
+}
+
+*ds_die = \&ds_error;
+
+sub ds_error {
+ my $msg = $_[0];
+ $msg = "$progname error: $msg" . who_called;
+ if ($die_on_error) {
+ print STDERR "$msg\n";
+ exit 1;
+ }
+ printwarn($msg, 1);
+}
+
+sub ds_prompt {
+ return 'yes' if ($ds_yes > 0);
+ print STDERR shift;
+ my $s = <STDIN>;
+ chomp $s;
+ return $s;
+}
+
+1;
diff --git a/lib/Devscripts/PackageDeps.pm b/lib/Devscripts/PackageDeps.pm
new file mode 100644
index 0000000..8bad0d7
--- /dev/null
+++ b/lib/Devscripts/PackageDeps.pm
@@ -0,0 +1,307 @@
+# Based vaguely on the deprecated dpkg-perl package modules
+# Dpkg::Package::List and Dpkg::Package::Package.
+# This module creates an object which holds package names and dependencies
+# (just Depends and Pre-Depends).
+# It can also calculate the total set of subdependencies using the
+# fulldepends method.
+#
+# Copyright 2002 Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Devscripts::PackageDeps;
+use strict;
+use Carp;
+use Dpkg::Control;
+use Dpkg::IPC;
+use FileHandle;
+require 5.006_000;
+
+# This reads in a package file list, such as /var/lib/dpkg/status,
+# and parses it. Using /var/lib/dpkg/status is deprecated in favor of
+# fromStatus().
+
+# Syntax: Devscripts::PackageDeps->new($filename)
+
+sub new ($$) {
+ my $this = shift;
+ my $class = ref($this) || $this;
+ my $filename = shift;
+
+ my $self = {};
+
+ if (!defined $filename) {
+ croak("requires filename as parameter");
+ }
+
+ bless($self, $class);
+
+ my $fh = FileHandle->new($filename, 'r');
+ unless (defined $fh) {
+ croak("Unable to load $filename: $!");
+ }
+ $self->parse($fh, $filename);
+ $fh->close or croak("Problems encountered reading $filename: $!");
+
+ return $self;
+}
+
+# This reads in dpkg's status information and parses it.
+
+# Syntax: Devscripts::PackageDeps->fromStatus()
+
+sub fromStatus ($) {
+ my $this = shift;
+ my $class = ref($this) || $this;
+
+ my $self = {};
+
+ bless($self, $class);
+
+ my $fh = FileHandle->new;
+ my $pid = spawn(
+ exec => ['dpkg', '--status'],
+ to_pipe => $fh
+ );
+ unless (defined $pid) {
+ croak("Unable to run 'dpkg --status': $!");
+ }
+
+ $self->parse($fh, 'dpkg --status');
+
+ wait_child($pid, cmdline => 'dpkg --status', nocheck => 1);
+
+ return $self;
+}
+
+# Internal functions
+
+my $multiarch;
+
+sub multiarch () {
+ if (!defined $multiarch) {
+ $multiarch
+ = (system('dpkg --assert-multi-arch >/dev/null 2>&1') >> 8) == 0;
+ }
+ return $multiarch;
+}
+
+sub parse ($$$) {
+ my $self = shift;
+ my $fh = shift;
+ my $filename = shift;
+
+ my $ctrl;
+ PACKAGE_ENTRY:
+ while (defined($ctrl = Dpkg::Control->new(type => CTRL_FILE_STATUS))
+ && $ctrl->parse($fh, $filename)) {
+
+ # So we've got a package
+ my $pkg = $ctrl->{Package};
+ my @deps = ();
+
+ if ($ctrl->{Status} =~ /^\S+\s+\S+\s+(\S+)$/) {
+ my $status = $1;
+ unless ($status eq 'installed' or $status eq 'unpacked') {
+ undef $ctrl;
+ next PACKAGE_ENTRY;
+ }
+ }
+
+ for my $dep (qw(Depends Pre-Depends)) {
+ if (exists $ctrl->{$dep}) {
+ my $value = $ctrl->{$dep};
+ $value =~ s/\([^)]+\)//g; # ignore versioning information
+ $value =~ tr/ \t//d; # remove spaces
+ my @dep_pkgs = split /,/, $value;
+ foreach my $dep_pkg (@dep_pkgs) {
+ my @dep_pkg_alts = split /\|/, $dep_pkg;
+ if (@dep_pkg_alts == 1) { push @deps, $dep_pkg_alts[0]; }
+ else { push @deps, \@dep_pkg_alts; }
+ }
+ }
+ }
+
+ $self->{$pkg} = \@deps;
+ if ($ctrl->{Architecture} ne 'all' && multiarch) {
+ my $arch = $ctrl->{Architecture};
+ @deps = map { "$_:$arch" } @deps;
+ $self->{"$pkg:$arch"} = \@deps;
+ }
+ undef $ctrl;
+ }
+}
+
+# Get direct dependency information for a specified package
+# Returns an array or array ref depending on context
+
+# Syntax: $obj->dependencies($package)
+
+sub dependencies ($$) {
+ my $self = shift;
+ my $pkg = shift;
+
+ if (!defined $pkg) {
+ croak("requires package as parameter");
+ }
+
+ if (!exists $self->{$pkg}) {
+ return undef;
+ }
+
+ return wantarray ? @{ $self->{$pkg} } : $self->{$pkg};
+}
+
+# Get full dependency information for a specified package or packages,
+# including the packages themselves.
+#
+# This only follows the first of sets of alternatives, and ignores
+# dependencies on packages which do not appear to exist.
+# Returns an array or array ref
+
+# Syntax: $obj->full_dependencies(@packages)
+
+sub full_dependencies ($@) {
+ my $self = shift;
+ my @toprocess = @_;
+ my %deps;
+
+ return wantarray ? () : [] unless @toprocess;
+
+ while (@toprocess) {
+ my $next = shift @toprocess;
+ $next = $$next[0] if ref $next;
+ # Already seen?
+ next if exists $deps{$next};
+ # Known package?
+ next unless exists $self->{$next};
+ # Mark it as a dependency
+ $deps{$next} = 1;
+ push @toprocess, @{ $self->{$next} };
+ }
+
+ return wantarray ? keys %deps : [keys %deps];
+}
+
+# Given a set of packages, find a minimal set with respect to the
+# pre-partial order of dependency.
+#
+# This is vaguely based on the dpkg-mindep script by
+# Bill Allombert <ballombe@debian.org>. It only follows direct
+# dependencies, and does not attempt to follow indirect dependencies.
+#
+# This respects the all packages in sets of alternatives.
+# Returns: (\@minimal_set, \%dependencies)
+# where the %dependencies hash is of the form
+# non-minimal package => depending package
+
+# Syntax: $obj->min_dependencies(@packages)
+
+sub min_dependencies ($@) {
+ my $self = shift;
+ my @pkgs = @_;
+ my @min_pkgs = ();
+ my %dep_pkgs = ();
+
+ return (\@min_pkgs, \%dep_pkgs) unless @pkgs;
+
+ # We create a directed graph: the %forward_deps hash records arrows
+ # pkg A depends on pkg B; the %reverse_deps hash records the
+ # reverse arrows
+ my %forward_deps;
+ my %reverse_deps;
+
+ # Initialise
+ foreach my $pkg (@pkgs) {
+ $forward_deps{$pkg} = {};
+ $reverse_deps{$pkg} = {};
+ }
+
+ foreach my $pkg (@pkgs) {
+ next unless exists $self->{$pkg};
+ my @pkg_deps = @{ $self->{$pkg} };
+ while (@pkg_deps) {
+ my $dep = shift @pkg_deps;
+ if (ref $dep) {
+ unshift @pkg_deps, @$dep;
+ next;
+ }
+ if (exists $forward_deps{$dep}) {
+ $forward_deps{$pkg}{$dep} = 1;
+ $reverse_deps{$dep}{$pkg} = 1;
+ }
+ }
+ }
+
+ # We start removing packages from the tree if they have no dependencies.
+ # Once we have no such packages left, we must have mutual or cyclic
+ # dependencies, so we pick a random one to remove and then start again.
+ # We continue this until there are no packages left in the graph.
+ PACKAGE:
+ while (scalar keys %forward_deps) {
+ foreach my $pkg (keys %forward_deps) {
+ if (scalar keys %{ $forward_deps{$pkg} } == 0) {
+ # Great, no dependencies!
+ if (scalar keys %{ $reverse_deps{$pkg} }) {
+ # This package is depended upon, so we can remove it
+ # with care
+ foreach my $dep_pkg (keys %{ $reverse_deps{$pkg} }) {
+ # take the first mentioned package for the
+ # recorded list of depended-upon packages
+ $dep_pkgs{$pkg} ||= $dep_pkg;
+ delete $forward_deps{$dep_pkg}{$pkg};
+ }
+ } else {
+ # This package is not depended upon, so it must
+ # go into our mindep list
+ push @min_pkgs, $pkg;
+ }
+ # Now remove this node
+ delete $forward_deps{$pkg};
+ delete $reverse_deps{$pkg};
+ next PACKAGE;
+ }
+ }
+
+ # Oh, we didn't find any package which didn't depend on any other.
+ # We'll pick a random one, then. At least *some* package must
+ # be depended upon in this situation; let's pick one of these.
+ foreach my $pkg (keys %forward_deps) {
+ next unless scalar keys %{ $reverse_deps{$pkg} } > 0;
+
+ foreach my $dep_pkg (keys %{ $forward_deps{$pkg} }) {
+ delete $reverse_deps{$dep_pkg}{$pkg};
+ }
+ foreach my $dep_pkg (keys %{ $reverse_deps{$pkg} }) {
+ # take the first mentioned package for the
+ # recorded list of depended-upon packages
+ $dep_pkgs{$pkg} ||= $dep_pkg;
+ delete $forward_deps{$dep_pkg}{$pkg};
+ }
+
+ # Now remove this node
+ delete $forward_deps{$pkg};
+ delete $reverse_deps{$pkg};
+ # And onto the next package
+ goto PACKAGE;
+ }
+
+ # Ouch! We shouldn't ever get here
+ croak("Couldn't determine mindeps; this can't happen!");
+ }
+
+ return (\@min_pkgs, \%dep_pkgs);
+}
+
+1;
diff --git a/lib/Devscripts/Packages.pm b/lib/Devscripts/Packages.pm
new file mode 100644
index 0000000..75acb45
--- /dev/null
+++ b/lib/Devscripts/Packages.pm
@@ -0,0 +1,313 @@
+#! /usr/bin/perl
+
+# Copyright Bill Allombert <ballombe@debian.org> 2001.
+# Modifications copyright 2002 Julian Gilbey <jdg@debian.org>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Devscripts::Packages;
+
+use strict;
+use warnings;
+use Carp;
+use Dpkg::Control;
+use Dpkg::IPC;
+use FileHandle;
+
+BEGIN {
+ use Exporter ();
+ use vars qw(@EXPORT @ISA %EXPORT_TAGS);
+ @EXPORT
+ = qw(PackagesToFiles FilesToPackages PackagesMatch InstalledPackages);
+ @ISA = qw(Exporter);
+ %EXPORT_TAGS = ();
+}
+
+=head1 NAME
+
+Devscript::Packages - Interface to the dpkg package database
+
+=head1 SYNOPSIS
+
+use Devscript::Packages;
+
+@files=PackagesToFiles(@packages);
+
+@packages=FilesToPackages(@files);
+
+@packages=PackagesMatch($regexp);
+
+$packages_hashref=InstalledPackages($sources);
+
+=head1 DESCRIPTION
+
+
+PackagesToFiles: Return a list of files contained in a list of packages.
+
+FilesToPackages: Return a list of packages containing at least
+one file in a list of files, taking care to handle diversions correctly.
+
+PackagesMatch: list of packages whose status match regexp.
+
+InstalledPackages: ref to hash with keys being installed packages
+(status = install ok installed). If $sources is true, then include
+the corresponding source packages as well in the list.
+
+=cut
+
+my $multiarch;
+
+sub multiarch () {
+ if (!defined $multiarch) {
+ $multiarch
+ = (system('dpkg --assert-multi-arch >/dev/null 2>&1') >> 8) == 0;
+ }
+ return $multiarch;
+}
+
+# input: a list of packages names.
+# output: list of files they contain.
+
+sub PackagesToFiles (@) {
+ return () if @_ == 0;
+
+ my %files = ();
+
+ # We fork and use an exec, so that we don't have to worry how long an
+ # input string the shell can handle.
+
+ my $pid;
+ my $sleep_count = 0;
+ do {
+ $pid = open(DPKG, "-|");
+ unless (defined $pid) {
+ carp("cannot fork: $!");
+ croak("bailing out") if $sleep_count++ > 6;
+ sleep 10;
+ }
+ } until defined $pid;
+
+ if ($pid) { # parent
+ while (<DPKG>) {
+ chomp;
+ next if /^package diverts others to: / or -d $_;
+ $files{$_} = 1;
+ }
+ close DPKG or croak("dpkg -L failed: $!");
+ } else { # child
+ # We must use C locale, else diversion messages may be translated.
+ $ENV{'LC_ALL'} = 'C';
+ exec('dpkg', '-L', @_)
+ or croak("can't exec dpkg -L: $!");
+ }
+
+ return keys %files;
+}
+
+# This basically runs a dpkg -S with a few bells and whistles
+#
+# input: a list of files.
+# output: list of packages they belong to.
+
+sub FilesToPackages (@) {
+ return () if @_ == 0;
+
+ # We fork and use an exec, so that we don't have to worry how long an
+ # input string the shell can handle.
+
+ my @dpkg_out;
+ my $pid;
+ my $sleep_count = 0;
+ do {
+ $pid = open(DPKG, "-|");
+ unless (defined $pid) {
+ carp("cannot fork: $!");
+ croak("bailing out") if $sleep_count++ > 6;
+ sleep 10;
+ }
+ } until defined $pid;
+
+ if ($pid) { # parent
+ while (<DPKG>) {
+ # We'll process it later
+ chomp;
+ push @dpkg_out, $_;
+ }
+ if (!close DPKG) {
+ # exit status of 1 just indicates unrecognised files
+ if ($? & 0xff || $? >> 8 != 1) {
+ carp( "warning: dpkg -S exited with signal "
+ . ($? & 0xff)
+ . " and status "
+ . ($? >> 8));
+ }
+ }
+ } else { # child
+ # We must use C locale, else diversion messages may be translated.
+ $ENV{'LC_ALL'} = 'C';
+ open STDERR, '>& STDOUT'; # Capture STDERR as well
+ exec('dpkg', '-S', @_)
+ or croak("can't exec dpkg -S: $!");
+ }
+
+ my %packages = ();
+ foreach my $curfile (@_) {
+ my $pkgfrom;
+ foreach my $line (@dpkg_out) {
+ # We want to handle diversions nicely.
+ # Ignore local diversions
+ if ($line =~ /^local diversion from: /) {
+ # Do nothing
+ } elsif ($line =~ /^local diversion to: (.+)$/) {
+ if ($curfile eq $1) {
+ last;
+ }
+ } elsif ($line =~ /^diversion by (\S+) from: (.+)$/) {
+ if ($curfile eq $2) {
+ # So the file we're looking has been diverted
+ $pkgfrom = $1;
+ }
+ } elsif ($line =~ /^diversion by (\S+) to: (.+)$/) {
+ if ($curfile eq $2) {
+ # So the file we're looking is a diverted file
+ # We shouldn't see it again
+ $packages{$1} = 1;
+ last;
+ }
+ } elsif ($line =~ /^dpkg: \Q$curfile\E not found\.$/) {
+ last;
+ } elsif ($line
+ =~ /^dpkg-query: no path found matching pattern \Q$curfile\E\.$/
+ ) {
+ last;
+ } elsif ($line =~ /^(.*): \Q$curfile\E$/) {
+ my @pkgs = split /,\s+/, $1;
+ if (@pkgs == 1 || !grep /:/, @pkgs) {
+ # Only one package, or all Multi-Arch packages
+ map { $packages{$_} = 1 } @pkgs;
+ } else {
+ # We've got a file which has been diverted by some package
+ # or is Multi-Arch and so is listed in two packages. If it
+ # was diverted, the *diverting* package is the one with the
+ # file that was actually used.
+ my $found = 0;
+ foreach my $pkg (@pkgs) {
+ if ($pkg eq $pkgfrom) {
+ $packages{$pkgfrom} = 1;
+ $found = 1;
+ last;
+ }
+ }
+ if (!$found) {
+ carp(
+"Something wicked happened to the output of dpkg -S $curfile"
+ );
+ }
+ }
+ # Prepare for the next round
+ last;
+ }
+ }
+ }
+
+ return keys %packages;
+}
+
+# Return a list of packages whose status entries match a given pattern
+
+sub PackagesMatch ($) {
+ my $match = $_[0];
+ my @matches = ();
+
+ my $fout = FileHandle->new;
+ my $pid = spawn(
+ exec => ['dpkg', '--status'],
+ to_pipe => $fout
+ );
+ unless (defined $pid) {
+ croak("Unable to run \"dpkg --status\": $!");
+ }
+
+ my $ctrl;
+ while (defined($ctrl = Dpkg::Control->new())
+ && $ctrl->parse($fout, 'dpkg --status')) {
+ if ("$ctrl" =~ m/$match/m) {
+ my $package = $ctrl->{Package};
+ if ($ctrl->{Architecture} ne 'all' && multiarch) {
+ $package .= ":$ctrl->{Architecture}";
+ }
+ push @matches, $package;
+ }
+ undef $ctrl;
+ }
+
+ wait_child($pid, cmdline => 'dpkg --status', nocheck => 1);
+ return @matches;
+}
+
+# Which packages are installed (Package and Source)?
+
+sub InstalledPackages ($) {
+ my $source = $_[0];
+
+ my $fout = FileHandle->new;
+ my $pid = spawn(
+ exec => ['dpkg', '--status'],
+ to_pipe => $fout
+ );
+ unless (defined $pid) {
+ croak("Unable to run \"dpkg --status\": $!");
+ }
+
+ my $ctrl;
+ my %matches;
+ while (defined($ctrl = Dpkg::Control->new(type => CTRL_FILE_STATUS))
+ && $ctrl->parse($fout, 'dpkg --status')) {
+ if ($ctrl->{Status} !~ /^install\s+ok\s+installed$/) {
+ next;
+ }
+ if ($source) {
+ if (exists $ctrl->{Source}) {
+ $matches{ $ctrl->{Source} } = 1;
+ }
+ }
+ if (exists $ctrl->{Package}) {
+ $matches{ $ctrl->{Package} } = 1;
+ if ($ctrl->{Architecture} ne 'all' && multiarch) {
+ $matches{"$ctrl->{Package}:$ctrl->{Architecture}"} = 1;
+ }
+ }
+ undef $ctrl;
+ }
+
+ wait_child($pid, cmdline => 'dpkg --status', nocheck => 1);
+
+ return \%matches;
+}
+
+1;
+
+=head1 AUTHOR
+
+Bill Allombert <ballombe@debian.org>
+
+=head1 COPYING
+
+Copyright 2001 Bill Allombert <ballombe@debian.org>
+Modifications copyright 2002 Julian Gilbey <jdg@debian.org>
+dpkg-depcheck is free software, covered by the GNU General Public License, and
+you are welcome to change it and/or distribute copies of it under
+certain conditions. There is absolutely no warranty for dpkg-depcheck.
+
+=cut
diff --git a/lib/Devscripts/Salsa.pm b/lib/Devscripts/Salsa.pm
new file mode 100755
index 0000000..5c02b16
--- /dev/null
+++ b/lib/Devscripts/Salsa.pm
@@ -0,0 +1,410 @@
+package Devscripts::Salsa;
+
+=head1 NAME
+
+Devscripts::Salsa - salsa(1) base object
+
+=head1 SYNOPSIS
+
+ use Devscripts::Salsa;
+ exit Devscripts::Salsa->new->run
+
+=head1 DESCRIPTION
+
+Devscripts::Salsa provides salsa(1) command launcher and some common utilities
+methods.
+
+=cut
+
+use strict;
+
+use Devscripts::Output;
+use Devscripts::Salsa::Config;
+
+BEGIN {
+ eval "use GitLab::API::v4;use GitLab::API::v4::Constants qw(:all)";
+ if ($@) {
+ print STDERR "You must install GitLab::API::v4\n";
+ exit 1;
+ }
+}
+use Moo;
+use File::Basename;
+use File::Path qw(make_path);
+
+# Command aliases
+use constant cmd_aliases => {
+ ci => 'last_ci_status',
+ co => 'checkout',
+ ls => 'list_repos',
+ search => 'search_project',
+ search_repo => 'search_project',
+ mr => 'merge_request',
+ mrs => 'merge_requests',
+ pipe => 'pipeline_schedule',
+ pipeline => 'pipeline_schedule', # preferred name
+ schedule => 'pipeline_schedule',
+ pipes => 'pipeline_schedules',
+ pipelines => 'pipeline_schedules', # preferred name
+ schedules => 'pipeline_schedules',
+};
+
+=head1 ACCESSORS
+
+=over
+
+=item B<config> : Devscripts::Salsa::Config object (parsed)
+
+=cut
+
+has config => (
+ is => 'rw',
+ default => sub { Devscripts::Salsa::Config->new->parse },
+);
+
+=item B<cache> : Devscripts::JSONCache object
+
+=cut
+
+# File cache to avoid polling Gitlab too much
+# (used to store ids, paths and names)
+has _cache => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ return {} unless ($_[0]->config->cache_file);
+ my %h;
+ eval {
+ my ($cache_file, $cache_dir) = fileparse $_[0]->config->cache_file;
+ if (!-d $cache_dir) {
+ make_path $cache_dir;
+ }
+ require Devscripts::JSONCache;
+ tie %h, 'Devscripts::JSONCache', $_[0]->config->cache_file;
+ ds_debug "Cache opened";
+ };
+ if ($@) {
+ ds_verbose "Unable to create cache object: $@";
+ return {};
+ }
+ return \%h;
+ },
+);
+has cache => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ $_[0]->_cache->{ $_[0]->config->api_url } //= {};
+ return $_[0]->_cache->{ $_[0]->config->api_url };
+ },
+);
+
+# In memory cache (used to avoid querying the project id twice when using
+# update_safe
+has projectCache => (
+ is => 'rw',
+ default => sub { {} },
+);
+
+=item B<api>: GitLab::API::v4 object
+
+=cut
+
+has api => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my $r = GitLab::API::v4->new(
+ url => $_[0]->config->api_url,
+ (
+ $_[0]->config->private_token
+ ? (private_token => $_[0]->config->private_token)
+ : ()
+ ),
+ );
+ $r or ds_die "Unable to create GitLab::API::v4 object";
+ return $r;
+ },
+);
+
+=item User or group in use
+
+=over
+
+=item B<username>
+
+=item B<user_id>
+
+=item B<group_id>
+
+=item B<group_path>
+
+=back
+
+=cut
+
+# Accessors that resolve names, ids or paths
+has username => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { $_[0]->id2username });
+
+has user_id => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ $_[0]->config->user_id || $_[0]->username2id;
+ },
+);
+
+has group_id => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { $_[0]->config->group_id || $_[0]->group2id },
+);
+
+has group_path => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+ return undef unless ($self->group_id);
+ return $self->cache->{group_path}->{ $self->{group_id} }
+ if $self->cache->{group_path}->{ $self->{group_id} };
+ return $self->{group_path} if ($self->{group_path}); # Set if --group
+ eval {
+ $self->{group_path}
+ = $self->api->group_without_projects($self->group_id)
+ ->{full_path};
+ $self->cache->{group_path}->{ $self->{group_id} }
+ = $self->{group_path};
+ };
+ if ($@) {
+ ds_verbose $@;
+ ds_warn "Unexistent group " . $self->group_id;
+ return undef;
+ }
+ return $self->{group_path};
+ },
+);
+
+=back
+
+=head1 METHODS
+
+=over
+
+=item B<run>: main method, load and run command and return Unix result code.
+
+=cut
+
+sub run {
+ my ($self, $args) = @_;
+ binmode STDOUT, ':utf8';
+
+ # Check group or user id
+ my $command = $self->config->command;
+ if (my $tmp = cmd_aliases->{$command}) {
+ $command = $tmp;
+ }
+ eval { with "Devscripts::Salsa::$command" };
+ if ($@) {
+ ds_verbose $@;
+ ds_die "Unknown command $command";
+ return 1;
+ }
+ return $self->$command(@ARGV);
+}
+
+=back
+
+=head2 Utilities
+
+=over
+
+=item B<levels_name>, B<levels_code>: convert strings to GitLab level codes
+(owner, maintainer, developer, reporter and guest)
+
+=cut
+
+sub levels_name {
+ my $res = {
+
+ # needs GitLab::API::v4::Constants 0.11
+ # no_access => $GITLAB_ACCESS_LEVEL_NO_ACCESS,
+ guest => $GITLAB_ACCESS_LEVEL_GUEST,
+ reporter => $GITLAB_ACCESS_LEVEL_REPORTER,
+ developer => $GITLAB_ACCESS_LEVEL_DEVELOPER,
+ maintainer => $GITLAB_ACCESS_LEVEL_MASTER,
+ owner => $GITLAB_ACCESS_LEVEL_OWNER,
+ }->{ $_[1] };
+ ds_die "Unknown access level '$_[1]'" unless ($res);
+ return $res;
+}
+
+sub levels_code {
+ return {
+ $GITLAB_ACCESS_LEVEL_GUEST => 'guest',
+ $GITLAB_ACCESS_LEVEL_REPORTER => 'reporter',
+ $GITLAB_ACCESS_LEVEL_DEVELOPER => 'developer',
+ $GITLAB_ACCESS_LEVEL_MASTER => 'maintainer',
+ $GITLAB_ACCESS_LEVEL_OWNER => 'owner',
+ }->{ $_[1] };
+}
+
+=item B<username2id>, B<id2username>: convert username to an id an reverse
+
+=cut
+
+sub username2id {
+ my ($self, $user) = @_;
+ $user ||= $self->config->user || $self->api->current_user->{id};
+ unless ($user) {
+ return ds_warn "Token seems invalid";
+ return 1;
+ }
+ unless ($user =~ /^\d+$/) {
+ return $self->cache->{user_id}->{$user}
+ if $self->cache->{user_id}->{$user};
+ my $users = $self->api->users({ username => $user });
+ return ds_die "Username '$user' not found"
+ unless ($users and @$users);
+ ds_verbose "$user id is $users->[0]->{id}";
+ $self->cache->{user_id}->{$user} = $users->[0]->{id};
+ return $users->[0]->{id};
+ }
+ return $user;
+}
+
+sub id2username {
+ my ($self, $id) = @_;
+ $id ||= $self->config->user_id || $self->api->current_user->{id};
+ return $self->cache->{user}->{$id} if $self->cache->{user}->{$id};
+ my $res = eval { $self->api->user($id)->{username} };
+ if ($@) {
+ ds_verbose $@;
+ return ds_die "$id not found";
+ }
+ ds_verbose "$id is $res";
+ $self->cache->{user}->{$id} = $res;
+ return $res;
+}
+
+=item B<group2id>: convert group name to id
+
+=cut
+
+sub group2id {
+ my ($self, $name) = @_;
+ $name ||= $self->config->group;
+ return unless $name;
+ if ($self->cache->{group_id}->{$name}) {
+ $self->group_path($self->cache->{group_id}->{$name}->{path});
+ return $self->group_id($self->cache->{group_id}->{$name}->{id});
+ }
+ my $groups = $self->api->group_without_projects($name);
+ if ($groups) {
+ $groups = [$groups];
+ } else {
+ $self->api->groups({ search => $name });
+ }
+ return ds_die "No group found" unless ($groups and @$groups);
+ if (scalar @$groups > 1) {
+ ds_warn "More than one group found:";
+ foreach (@$groups) {
+ print <<END;
+Id : $_->{id}
+Name : $_->{name}
+Full name: $_->{full_name}
+Full path: $_->{full_path}
+
+END
+ }
+ return ds_die "Set the chosen group id using --group-id.";
+ }
+ ds_verbose "$name id is $groups->[0]->{id}";
+ $self->cache->{group_id}->{$name}->{path}
+ = $self->group_path($groups->[0]->{full_path});
+ $self->cache->{group_id}->{$name}->{id} = $groups->[0]->{id};
+ return $self->group_id($groups->[0]->{id});
+}
+
+=item B<project2id>: get id of a project.
+
+=cut
+
+sub project2id {
+ my ($self, $project) = @_;
+ return $project if ($project =~ /^\d+$/);
+ my $res;
+ $project = $self->project2path($project);
+ if ($self->projectCache->{$project}) {
+ ds_debug "use cached id for $project";
+ return $self->projectCache->{$project};
+ }
+ unless ($project =~ /^\d+$/) {
+ eval { $res = $self->api->project($project)->{id}; };
+ if ($@) {
+ ds_debug $@;
+ ds_warn "Project $project not found:";
+ return undef;
+ }
+ }
+ ds_verbose "$project id is $res";
+ $self->projectCache->{$project} = $res;
+ return $res;
+}
+
+=item B<project2path>: get full path of a project
+
+=cut
+
+sub project2path {
+ my ($self, $project) = @_;
+ return $project if ($project =~ m#/#);
+ my $path = $self->main_path;
+ return undef unless ($path);
+ ds_verbose "Project $project => $path/$project";
+ return "$path/$project";
+}
+
+=item B<main_path>: build path using given group or user
+
+=cut
+
+sub main_path {
+ my ($self) = @_;
+ my $path;
+ if ($self->config->path) {
+ $path = $self->config->path;
+ } elsif (my $tmp = $self->group_path) {
+ $path = $tmp;
+ } elsif ($self->user_id) {
+ $path = $self->username;
+ } else {
+ ds_warn "Unable to determine project path";
+ return undef;
+ }
+ return $path;
+}
+
+# GitLab::API::v4 does not permit to call /groups/:id with parameters.
+# It takes too much time for the "debian" group, since it returns the list of
+# all projects together with all the details of the projects
+sub GitLab::API::v4::group_without_projects {
+ my $self = shift;
+ return $self->_call_rest_client('GET', 'groups/:group_id', [@_],
+ { query => { with_custom_attributes => 0, with_projects => 0 } });
+}
+
+1;
+
+=back
+
+=head1 AUTHOR
+
+Xavier Guimard E<lt>yadd@debian.orgE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2018, Xavier Guimard E<lt>yadd@debian.orgE<gt>
diff --git a/lib/Devscripts/Salsa/Config.pm b/lib/Devscripts/Salsa/Config.pm
new file mode 100755
index 0000000..8c9ccbd
--- /dev/null
+++ b/lib/Devscripts/Salsa/Config.pm
@@ -0,0 +1,460 @@
+# Salsa configuration (inherits from Devscripts::Config)
+package Devscripts::Salsa::Config;
+
+use strict;
+use Devscripts::Output;
+use Moo;
+
+extends 'Devscripts::Config';
+
+# Declare accessors for each option
+foreach (qw(
+ all api_url cache_file command desc desc_pattern dest_branch rename_head
+ disable_irker disable_kgb disable_tagpending irc_channel irker wiki
+ snippets pages releases auto_devops request_acc issues mr repo forks
+ lfs packages jobs container analytics requirements irker_server_url
+ irker_host irker_port kgb kgb_server_url kgb_options mr_allow_squash
+ mr_desc mr_dst_branch mr_dst_project mr_remove_source_branch mr_src_branch
+ mr_src_project mr_title no_fail path private_token skip source_branch
+ group group_id user user_id tagpending tagpending_server_url email
+ email_recipient disable_email ci_config_path archived build_timeout
+ enable_remove_branch disable_remove_branch all_archived git_server_url
+ schedule_desc schedule_ref schedule_cron schedule_tz
+ schedule_enable schedule_disable schedule_run schedule_delete
+ avatar_path request_access
+ )
+) {
+ has $_ => (is => 'rw');
+}
+
+my $cacheDir;
+
+our @kgbOpt = qw(push_events issues_events confidential_issues_events
+ confidential_comments_events merge_requests_events tag_push_events
+ note_events job_events pipeline_events wiki_page_events
+ confidential_note_events enable_ssl_verification);
+
+BEGIN {
+ $cacheDir = $ENV{XDG_CACHE_HOME} || $ENV{HOME} . '/.cache';
+}
+
+# Options
+use constant keys => [
+
+ # General options
+ [
+ 'C|chdir=s', undef,
+ sub { return (chdir($_[1]) ? 1 : (0, "$_[1] doesn't exist")) }
+ ],
+ [
+ 'cache-file',
+ 'SALSA_CACHE_FILE',
+ sub {
+ $_[0]->cache_file($_[1] ? $_[1] : undef);
+ },
+ "$cacheDir/salsa.json"
+ ],
+ [
+ 'no-cache',
+ 'SALSA_NO_CACHE',
+ sub {
+ $_[0]->cache_file(undef)
+ if ($_[1] !~ /^(?:no|0+)$/i);
+ return 1;
+ }
+ ],
+ ['debug', undef, sub { $verbose = 2 }],
+ ['info|i', 'SALSA_INFO', sub { info(-1, 'SALSA_INFO', @_) }],
+ [
+ 'path=s',
+ 'SALSA_REPO_PATH',
+ sub {
+ $_ = $_[1];
+ s#/*(.*)/*#$1#;
+ $_[0]->path($_);
+ return /^[\w\d\-]+$/ ? 1 : (0, "Bad path $_");
+ }
+ ],
+ ['group=s', 'SALSA_GROUP', qr/^[\/\-\w]+$/],
+ ['group-id=s', 'SALSA_GROUP_ID', qr/^\d+$/],
+ ['token', 'SALSA_TOKEN', sub { $_[0]->private_token($_[1]) }],
+ [
+ 'token-file',
+ 'SALSA_TOKEN_FILE',
+ sub {
+ my ($self, $v) = @_;
+ return (0, "Unable to open token file") unless (-r $v);
+ open F, $v;
+ my $s = join '', <F>;
+ close F;
+ if ($s
+ =~ m/^[^#]*(?:SALSA_(?:PRIVATE_)?TOKEN)\s*=\s*(["'])?([-\w]+)\1?$/m
+ ) {
+ $self->private_token($2);
+ return 1;
+ } else {
+ return (0, "No token found in file $v");
+ }
+ }
+ ],
+ ['user=s', 'SALSA_USER', qr/^[\-\w]+$/],
+ ['user-id=s', 'SALSA_USER_ID', qr/^\d+$/],
+ ['verbose', 'SALSA_VERBOSE', sub { $verbose = 1 }],
+ ['yes!', 'SALSA_YES', sub { info(1, "SALSA_YES", @_) },],
+
+ # Update/create repo options
+ ['all'],
+ ['all-archived'],
+ ['skip=s', 'SALSA_SKIP', undef, sub { [] }],
+ [
+ 'skip-file=s',
+ 'SALSA_SKIP_FILE',
+ sub {
+ return 1 unless $_[1];
+ return (0, "Unable to read $_[1]") unless (-r $_[1]);
+ open my $fh, $_[1];
+ push @{ $_[0]->skip }, (map { chomp $_; ($_ ? $_ : ()) } <$fh>);
+ return 1;
+ }
+ ],
+ ['no-skip', undef, sub { $_[0]->skip([]); $_[0]->skip_file(undef); }],
+ ['build-timeout=s', 'SALSA_BUILD_TIMEOUT', qr/^\d+$/, '3600'],
+ ['ci-config-path=s', 'SALSA_CI_CONFIG_PATH', qr/\./],
+ ['desc!', 'SALSA_DESC', 'bool'],
+ ['desc-pattern=s', 'SALSA_DESC_PATTERN', qr/\w/, 'Debian package %p'],
+ [
+ 'enable-remove-source-branch!',
+ undef,
+ sub {
+ !$_[1]
+ or $_[0]
+ ->enable('yes', 'enable_remove_branch', 'disable_remove_branch');
+ }
+ ],
+ [
+ 'disable-remove-source-branch!',
+ undef,
+ sub {
+ !$_[1]
+ or $_[0]
+ ->enable('no', 'enable_remove_branch', 'disable_remove_branch');
+ }
+ ],
+ [
+ undef,
+ 'SALSA_REMOVE_SOURCE_BRANCH',
+ sub {
+ $_[0]
+ ->enable($_[1], 'enable_remove_branch', 'disable_remove_branch');
+ }
+ ],
+ [
+ 'issues=s', 'SALSA_ENABLE_ISSUES',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'repo=s', 'SALSA_ENABLE_REPO',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'mr=s', 'SALSA_ENABLE_MR',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'forks=s', 'SALSA_ENABLE_FORKS',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'lfs=s', 'SALSA_ENABLE_LFS',
+ qr/y(es)?|true|enabled?|no?|false|disabled?/
+ ],
+ [
+ 'packages=s',
+ 'SALSA_ENABLE_PACKAGES',
+ qr/y(es)?|true|enabled?|no?|false|disabled?/
+ ],
+ [
+ 'jobs=s', 'SALSA_ENABLE_JOBS',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'container=s', 'SALSA_ENABLE_CONTAINER',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'analytics=s', 'SALSA_ENABLE_ANALYTICS',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'requirements=s',
+ 'SALSA_ENABLE_REQUIREMENTS',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'wiki=s', 'SALSA_ENABLE_WIKI',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'snippets=s', 'SALSA_ENABLE_SNIPPETS',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'pages=s', 'SALSA_ENABLE_PAGES',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'releases=s', 'SALSA_ENABLE_RELEASES',
+ qr/y(es)?|true|enabled?|private|no?|false|disabled?/
+ ],
+ [
+ 'auto-devops=s',
+ 'SALSA_ENABLE_AUTO_DEVOPS',
+ qr/y(es)?|true|enabled?|no?|false|disabled?/
+ ],
+ [
+ 'request-acc=s',
+ 'SALSA_ENABLE_REQUEST_ACC',
+ qr/y(es)?|true|enabled?|no?|false|disabled?/
+ ],
+ [
+ 'email!', undef,
+ sub { !$_[1] or $_[0]->enable('yes', 'email', 'disable_email'); }
+ ],
+ [
+ 'disable-email!', undef,
+ sub { !$_[1] or $_[0]->enable('no', 'email', 'disable_email'); }
+ ],
+ [
+ undef, 'SALSA_EMAIL',
+ sub { $_[0]->enable($_[1], 'email', 'disable_email'); }
+ ],
+ ['email-recipient=s', 'SALSA_EMAIL_RECIPIENTS', undef, sub { [] },],
+ ['irc-channel|irc=s', 'SALSA_IRC_CHANNEL', undef, sub { [] }],
+ [
+ 'irker!', undef,
+ sub { !$_[1] or $_[0]->enable('yes', 'irker', 'disable_irker'); }
+ ],
+ [
+ 'disable-irker!', undef,
+ sub { !$_[1] or $_[0]->enable('no', 'irker', 'disable_irker'); }
+ ],
+ [
+ undef, 'SALSA_IRKER',
+ sub { $_[0]->enable($_[1], 'irker', 'disable_irker'); }
+ ],
+ ['irker-host=s', 'SALSA_IRKER_HOST', undef, 'ruprecht.snow-crash.org'],
+ ['irker-port=s', 'SALSA_IRKER_PORT', qr/^\d*$/],
+ [
+ 'kgb!', undef,
+ sub { !$_[1] or $_[0]->enable('yes', 'kgb', 'disable_kgb'); }
+ ],
+ [
+ 'disable-kgb!', undef,
+ sub { !$_[1] or $_[0]->enable('no', 'kgb', 'disable_kgb'); }
+ ],
+ [undef, 'SALSA_KGB', sub { $_[0]->enable($_[1], 'kgb', 'disable_kgb'); }],
+ [
+ 'kgb-options=s',
+ 'SALSA_KGB_OPTIONS',
+ qr/\w/,
+ 'push_events,issues_events,merge_requests_events,tag_push_events,'
+ . 'note_events,pipeline_events,wiki_page_events,'
+ . 'enable_ssl_verification'
+ ],
+
+ ['no-fail', 'SALSA_NO_FAIL', 'bool'],
+ ['rename-head!', 'SALSA_RENAME_HEAD', 'bool'],
+ ['avatar-path=s', 'SALSA_AVATAR_PATH', undef],
+ ['source-branch=s', 'SALSA_SOURCE_BRANCH', undef, 'master'],
+ ['dest-branch=s', 'SALSA_DEST_BRANCH', undef, 'debian/master'],
+ [
+ 'tagpending!',
+ undef,
+ sub {
+ !$_[1]
+ or $_[0]->enable('yes', 'tagpending', 'disable_tagpending');
+ }
+ ],
+ [
+ 'disable-tagpending!',
+ undef,
+ sub {
+ !$_[1] or $_[0]->enable('no', 'tagpending', 'disable_tagpending');
+ }
+ ],
+ [
+ undef, 'SALSA_TAGPENDING',
+ sub { $_[0]->enable($_[1], 'tagpending', 'disable_tagpending'); }
+ ],
+
+ # Pipeline schedules options
+ ['schedule-desc=s', 'SALSA_SCHEDULE_DESC', qr/\w/],
+ ['schedule-ref=s', 'SALSA_SCHEDULE_REF'],
+ ['schedule-cron=s', 'SALSA_SCHEDULE_CRON'],
+ ['schedule-tz=s', 'SALSA_SCHEDULE_TZ'],
+ ['schedule-enable!', 'SALSA_SCHEDULE_ENABLE', 'bool'],
+ ['schedule-disable!', 'SALSA_SCHEDULE_DISABLE', 'bool'],
+ ['schedule-run!', 'SALSA_SCHEDULE_RUN', 'bool'],
+ ['schedule-delete!', 'SALSA_SCHEDULE_DELETE', 'bool'],
+
+ # Merge requests options
+ ['mr-allow-squash!', 'SALSA_MR_ALLOW_SQUASH', 'bool', 1],
+ ['mr-desc=s'],
+ ['mr-dst-branch=s', undef, undef, 'master'],
+ ['mr-dst-project=s'],
+ ['mr-remove-source-branch!', 'SALSA_MR_REMOVE_SOURCE_BRANCH', 'bool', 0],
+ ['mr-src-branch=s'],
+ ['mr-src-project=s'],
+ ['mr-title=s'],
+
+ # Options to manage other Gitlab instances
+ [
+ 'api-url=s', 'SALSA_API_URL',
+ qr#^https?://#, 'https://salsa.debian.org/api/v4'
+ ],
+ [
+ 'git-server-url=s', 'SALSA_GIT_SERVER_URL',
+ qr/^\S+\@\S+/, 'git@salsa.debian.org:'
+ ],
+ [
+ 'irker-server-url=s', 'SALSA_IRKER_SERVER_URL',
+ qr'^ircs?://', 'ircs://irc.oftc.net:6697/'
+ ],
+ [
+ 'kgb-server-url=s', 'SALSA_KGB_SERVER_URL',
+ qr'^https?://', 'http://kgb.debian.net:9418/webhook/?channel='
+ ],
+ [
+ 'tagpending-server-url=s',
+ 'SALSA_TAGPENDING_SERVER_URL',
+ qr'^https?://',
+ 'https://webhook.salsa.debian.org/tagpending/'
+ ],
+
+ [
+ 'request-access=s',
+ 'SALSA_REQUEST_ACCESS',
+ qr/y(es)?|true|enabled?|1|no?|false|disabled?|0/
+ ],
+
+ # List/search options
+ ['archived!', 'SALSA_ARCHIVED', 'bool', 0],
+];
+
+# Consistency rules
+use constant rules => [
+ # Reject unless token exists
+ sub {
+ return (1,
+"SALSA_TOKEN not set in configuration files. Some commands may fail"
+ ) unless ($_[0]->private_token);
+ },
+ # Get command
+ sub {
+ return (0, "No command given, aborting") unless (@ARGV);
+ $_[0]->command(shift @ARGV);
+ return (0, "Malformed command: " . $_[0]->command)
+ unless ($_[0]->command =~ /^[a-z_]+$/);
+ return 1;
+ },
+ sub {
+ if ( ($_[0]->group or $_[0]->group_id)
+ and ($_[0]->user_id or $_[0]->user)) {
+ ds_warn(
+ "Both --user-id and --group-id are set, ignore --group-id");
+ $_[0]->group(undef);
+ $_[0]->group_id(undef);
+ }
+ return 1;
+ },
+ sub {
+ if ($_[0]->group and $_[0]->group_id) {
+ ds_warn("Both --group-id and --group are set, ignore --group");
+ $_[0]->group(undef);
+ }
+ return 1;
+ },
+ sub {
+ if ($_[0]->user and $_[0]->user_id) {
+ ds_warn("Both --user-id and --user are set, ignore --user");
+ $_[0]->user(undef);
+ }
+ return 1;
+ },
+ sub {
+ if ($_[0]->email and not @{ $_[0]->email_recipient }) {
+ return (0, '--email-recipient needed with --email');
+ }
+ return 1;
+ },
+ sub {
+ if (@{ $_[0]->irc_channel }) {
+ foreach (@{ $_[0]->irc_channel }) {
+ if (/^#/) {
+ return (1,
+"# found in --irc-channel, assuming double hash is wanted"
+ );
+ }
+ }
+ if ($_[0]->irc_channel->[1] and $_[0]->kgb) {
+ return (0, "Only one IRC channel is accepted with --kgb");
+ }
+ }
+ return 1;
+ },
+ sub {
+ $_[0]->kgb_options([sort split ',\s*', $_[0]->kgb_options]);
+ my @err;
+ foreach my $o (@{ $_[0]->kgb_options }) {
+ unless (grep { $_ eq $o } @kgbOpt) {
+ push @err, $o;
+ }
+ }
+ return (0, 'Unknown KGB options: ' . join(', ', @err))
+ if @err;
+ return 1;
+ },
+];
+
+sub usage {
+ print <<END;
+usage: salsa <command> <parameters> <options>
+
+Most used commands:
+ - checkout, co: clone repo in current dir
+ - fork : fork a project
+ - mr : create a merge request
+ - push_repo : push local git repo to upstream repository
+ - whoami : gives information on the token owner
+
+See salsa(1) manpage for more.
+END
+}
+
+sub info {
+ my ($num, $key, undef, $nv) = @_;
+ $nv = (
+ $nv =~ /^yes|1$/ ? $num
+ : $nv =~ /^no|0$/i ? 0
+ : return (0, "Bad $key value"));
+ $ds_yes = $nv;
+}
+
+sub enable {
+ my ($self, $v, $en, $dis) = @_;
+ $v = lc($v);
+ if ($v eq 'ignore') {
+ $self->{$en} = $self->{$dis} = 0;
+ } elsif ($v eq 'yes') {
+ $self->{$en} = 1;
+ $self->{$dis} = 0;
+ } elsif ($v eq 'no') {
+ $self->{$en} = 0;
+ $self->{$dis} = 1;
+ } else {
+ return (0, "Bad value for SALSA_" . uc($en));
+ }
+ return 1;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/Hooks.pm b/lib/Devscripts/Salsa/Hooks.pm
new file mode 100644
index 0000000..95a2f47
--- /dev/null
+++ b/lib/Devscripts/Salsa/Hooks.pm
@@ -0,0 +1,303 @@
+# Common hooks library
+package Devscripts::Salsa::Hooks;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub add_hooks {
+ my ($self, $repo_id, $repo) = @_;
+ if ( $self->config->kgb
+ or $self->config->disable_kgb
+ or $self->config->tagpending
+ or $self->config->disable_tagpending
+ or $self->config->irker
+ or $self->config->disable_irker
+ or $self->config->email
+ or $self->config->disable_email) {
+ my $hooks = $self->enabled_hooks($repo_id);
+ return 1 unless (defined $hooks);
+ # KGB hook (IRC)
+ if ($self->config->kgb or $self->config->disable_kgb) {
+ unless ($self->config->irc_channel->[0]
+ or $self->config->disable_kgb) {
+ ds_warn "--kgb needs --irc-channel";
+ return 1;
+ }
+ if ($self->config->irc_channel->[1]) {
+ ds_warn "KGB accepts only one --irc-channel value,";
+ }
+ if ($hooks->{kgb}) {
+ ds_warn "Deleting old kgb (was $hooks->{kgb}->{url})";
+ $self->api->delete_project_hook($repo_id, $hooks->{kgb}->{id});
+ }
+ if ($self->config->irc_channel->[0]
+ and not $self->config->disable_kgb) {
+ # TODO: if useful, add parameters for this options
+ eval {
+ $self->api->create_project_hook(
+ $repo_id,
+ {
+ url => $self->config->kgb_server_url
+ . $self->config->irc_channel->[0],
+ map { ($_ => 1) } @{ $self->config->kgb_options },
+ });
+ ds_verbose "KGB hook added to project $repo_id (channel: "
+ . $self->config->irc_channel->[0] . ')';
+ };
+ if ($@) {
+ ds_warn "Fail to add KGB hook: $@";
+ if (!$self->config->no_fail) {
+ return 1;
+ }
+ }
+ }
+ }
+ # Irker hook (IRC)
+ if ($self->config->irker or $self->config->disable_irker) {
+ unless ($self->config->irc_channel->[0]
+ or $self->config->disable_irker) {
+ ds_warn "--irker needs --irc-channel";
+ return 1;
+ }
+ if ($hooks->{irker}) {
+ no warnings;
+ ds_warn
+"Deleting old irker (redirected to $hooks->{irker}->{recipients})";
+ $self->api->delete_project_service($repo_id, 'irker');
+ }
+ if ($self->config->irc_channel->[0]
+ and not $self->config->disable_irker) {
+ # TODO: if useful, add parameters for this options
+ my $ch = join(' ',
+ map { '#' . $_ } @{ $self->config->irc_channel });
+ $self->api->edit_project_service(
+ $repo_id, 'irker',
+ {
+ active => 1,
+ server_host => $self->config->irker_host,
+ (
+ $self->config->irker_port
+ ? (server_port => $self->config->irker_port)
+ : ()
+ ),
+ default_irc_uri => $self->config->irker_server_url,
+ recipients => $ch,
+ colorize_messages => 1,
+ });
+ ds_verbose
+ "Irker hook added to project $repo_id (channel: $ch)";
+ }
+ }
+ # email on push
+ if ($self->config->email or $self->config->disable_email) {
+ if ($hooks->{email}) {
+ no warnings;
+ ds_warn
+"Deleting old email-on-push (redirected to $hooks->{email}->{recipients})";
+ $self->api->delete_project_service($repo_id, 'emails-on-push');
+ }
+ if (@{ $self->config->email_recipient }
+ and not $self->config->disable_email) {
+ # TODO: if useful, add parameters for this options
+ $self->api->edit_project_service(
+ $repo_id,
+ 'emails-on-push',
+ {
+ recipients => join(' ',
+ map { my $a = $_; $a =~ s/%p/$repo/; $a }
+ @{ $self->config->email_recipient }),
+ });
+ no warnings;
+ ds_verbose
+ "Email-on-push hook added to project $repo_id (recipients: "
+ . join(' ', @{ $self->config->email_recipient }) . ')';
+ }
+ }
+ # Tagpending hook
+ if ($self->config->tagpending or $self->config->disable_tagpending) {
+ if ($hooks->{tagpending}) {
+ ds_warn
+ "Deleting old tagpending (was $hooks->{tagpending}->{url})";
+ $self->api->delete_project_hook($repo_id,
+ $hooks->{tagpending}->{id});
+ }
+ my $repo_name = $self->api->project($repo_id)->{name};
+ unless ($self->config->disable_tagpending) {
+ eval {
+ $self->api->create_project_hook(
+ $repo_id,
+ {
+ url => $self->config->tagpending_server_url
+ . $repo_name,
+ push_events => 1,
+ });
+ ds_verbose "Tagpending hook added to project $repo_id";
+ };
+ if ($@) {
+ ds_warn "Fail to add Tagpending hook: $@";
+ if (!$self->config->no_fail) {
+ return 1;
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+sub enabled_hooks {
+ my ($self, $repo_id) = @_;
+ my $hooks;
+ my $res = {};
+ if ( $self->config->kgb
+ or $self->config->disable_kgb
+ or $self->config->tagpending
+ or $self->config->disable_tagpending) {
+ $hooks = eval { $self->api->project_hooks($repo_id) };
+ if ($@) {
+ ds_warn "Unable to check hooks for project $repo_id";
+ return undef;
+ }
+ foreach my $h (@{$hooks}) {
+ $res->{kgb} = {
+ id => $h->{id},
+ url => $h->{url},
+ options => [grep { $h->{$_} and $h->{$_} eq 1 } keys %$h],
+ }
+ if $h->{url} =~ /\Q$self->{config}->{kgb_server_url}\E/;
+ $res->{tagpending} = {
+ id => $h->{id},
+ url => $h->{url},
+ }
+ if $h->{url} =~ /\Q$self->{config}->{tagpending_server_url}\E/;
+ }
+ }
+ if ( ($self->config->email or $self->config->disable_email)
+ and $_ = $self->api->project_service($repo_id, 'emails-on-push')
+ and $_->{active}) {
+ $res->{email} = $_->{properties};
+ }
+ if ( ($self->config->irker or $self->config->disable_irker)
+ and $_ = $self->api->project_service($repo_id, 'irker')
+ and $_->{active}) {
+ $res->{irker} = $_->{properties};
+ }
+ return $res;
+}
+
+sub _check_config {
+ my ($config, $key_name, $config_name, $can_be_private, $res_ref) = @_;
+ if (!$config) { return undef; }
+ for ($config) {
+ if ($can_be_private) {
+ if ($_ eq "private") {
+ push @$res_ref, $key_name => "private";
+ } elsif (qr/y(es)?|true|enabled?/) {
+ push @$res_ref, $key_name => "enabled";
+ } elsif (qr/no?|false|disabled?/) {
+ push @$res_ref, $key_name => "disabled";
+ } else {
+ print "error with SALSA_$config_name";
+ }
+ } else {
+ if (qr/y(es)?|true|enabled?/) {
+ push @$res_ref, $key_name => 1;
+ } elsif (qr/no?|false|disabled?/) {
+ push @$res_ref, $key_name => 0;
+ } else {
+ print "error with SALSA_$config_name";
+ }
+ }
+ }
+}
+
+sub desc {
+ my ($self, $repo) = @_;
+ my @res = ();
+ if ($self->config->desc) {
+ my $str = $self->config->desc_pattern;
+ $str =~ s/%P/$repo/g;
+ $repo =~ s#.*/##;
+ $str =~ s/%p/$repo/g;
+ push @res, description => $str;
+ }
+ if ($self->config->build_timeout) {
+ push @res, build_timeout => $self->config->build_timeout;
+ }
+
+ # Parameter: config value, key name, config name, has private
+ _check_config($self->config->issues, "issues_access_level",
+ "ENABLE_ISSUES", 1, \@res);
+ _check_config($self->config->repo, "repository_access_level",
+ "ENABLE_REPO", 1, \@res);
+ _check_config($self->config->mr, "merge_requests_access_level",
+ "ENABLE_MR", 1, \@res);
+ _check_config($self->config->forks, "forking_access_level",
+ "ENABLE_FORKS", 1, \@res);
+ _check_config($self->config->lfs, "lfs_enabled", "ENABLE_LFS", 0, \@res);
+ _check_config($self->config->packages,
+ "packages_enabled", "ENABLE_PACKAGES", 0, \@res);
+ _check_config($self->config->jobs, "builds_access_level", "ENABLE_JOBS",
+ 1, \@res);
+ _check_config(
+ $self->config->container,
+ "container_registry_access_level",
+ "ENABLE_CONTAINER", 1, \@res
+ );
+ _check_config($self->config->analytics,
+ "analytics_access_level", "ENABLE_ANALYTICS", 1, \@res);
+ _check_config($self->config->requirements,
+ "requirements_access_level", "ENABLE_REQUIREMENTS", 1, \@res);
+ _check_config($self->config->wiki, "wiki_access_level", "ENABLE_WIKI", 1,
+ \@res);
+ _check_config($self->config->snippets,
+ "snippets_access_level", "ENABLE_SNIPPETS", 1, \@res);
+ _check_config($self->config->pages, "pages_access_level", "ENABLE_PAGES",
+ 1, \@res);
+ _check_config($self->config->releases,
+ "releases_access_level", "ENABLE_RELEASES", 1, \@res);
+ _check_config($self->config->auto_devops,
+ "auto_devops_enabled", "ENABLE_AUTO_DEVOPS", 0, \@res);
+ _check_config($self->config->request_acc,
+ "request_access_enabled", "ENABLE_REQUEST_ACC", 0, \@res);
+
+ if ($self->config->disable_remove_branch) {
+ push @res, remove_source_branch_after_merge => 0;
+ } elsif ($self->config->enable_remove_branch) {
+ push @res, remove_source_branch_after_merge => 1;
+ }
+ if ($self->config->ci_config_path) {
+ push @res, ci_config_path => $self->config->ci_config_path;
+ }
+ if ($self->config->request_access) {
+ if ($self->config->request_access =~ qr/y(es)?|true|enabled?|1/) {
+ push @res, request_access_enabled => 1;
+ } else {
+ push @res, request_access_enabled => 0;
+ }
+ }
+ return @res;
+}
+
+sub desc_multipart {
+ my ($self, $repo) = @_;
+ my @res = ();
+ if ($self->config->avatar_path) {
+ my $str = $self->config->avatar_path;
+ $str =~ s/%p/$repo/g;
+ unless (-r $str) {
+ if (!$self->config->no_fail) {
+ ds_error("Unable to find: $str");
+ exit 1;
+ }
+ ds_warn "Unable to find: $str";
+ } else {
+ # avatar_path (salsa) -> avatar (GitLab API)
+ push @res, avatar => $str;
+ }
+ }
+ return @res;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/Repo.pm b/lib/Devscripts/Salsa/Repo.pm
new file mode 100755
index 0000000..0370810
--- /dev/null
+++ b/lib/Devscripts/Salsa/Repo.pm
@@ -0,0 +1,73 @@
+# Common method to get projects
+package Devscripts::Salsa::Repo;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+with "Devscripts::Salsa::Hooks";
+
+sub get_repo {
+ my ($self, $prompt, @reponames) = @_;
+ my @repos;
+ if (($self->config->all or $self->config->all_archived)
+ and @reponames == 0) {
+ ds_debug "--all is set";
+ my $options = {};
+ $options->{order_by} = 'name';
+ $options->{sort} = 'asc';
+ $options->{archived} = 'false' if not $self->config->all_archived;
+ my $projects;
+ # This rule disallow trying to configure all "Debian" projects:
+ # - Debian id is 2
+ # - next is 1987
+ if ($self->group_id) {
+ $projects
+ = $self->api->paginator('group_projects', $self->group_id,
+ $options)->all;
+ } elsif ($self->user_id) {
+ $projects
+ = $self->api->paginator('user_projects', $self->user_id,
+ $options)->all;
+ } else {
+ ds_warn "Missing or invalid token";
+ return 1;
+ }
+ unless ($projects) {
+ ds_warn "No projects found";
+ return 1;
+ }
+ @repos = map {
+ $self->projectCache->{ $_->{path_with_namespace} } = $_->{id};
+ [$_->{id}, $_->{path}]
+ } @$projects;
+ if (@{ $self->config->skip }) {
+ @repos = map {
+ my $res = 1;
+ foreach my $k (@{ $self->config->skip }) {
+ $res = 0 if ($_->[1] =~ m#(?:.*/)?\Q$k\E#);
+ }
+ $res ? $_ : ();
+ } @repos;
+ }
+ if ($ds_yes > 0 or !$prompt) {
+ ds_verbose "Found " . @repos . " projects";
+ } else {
+ unless (
+ ds_prompt(
+ "You're going to configure "
+ . @repos
+ . " projects. Continue (N/y) "
+ ) =~ accept
+ ) {
+ ds_warn "Aborting";
+ return 1;
+ }
+ }
+ } else {
+ @repos = map { [$self->project2id($_), $_] } @reponames;
+ }
+ return @repos;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/add_user.pm b/lib/Devscripts/Salsa/add_user.pm
new file mode 100644
index 0000000..3968fb3
--- /dev/null
+++ b/lib/Devscripts/Salsa/add_user.pm
@@ -0,0 +1,40 @@
+# Adds a user in a group with a role
+package Devscripts::Salsa::add_user;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub add_user {
+ my ($self, $level, $user) = @_;
+ unless ($level and $user) {
+ ds_warn "Usage $0 --group-id 1234 add_user <level> <userid>";
+ return 1;
+ }
+ unless ($self->group_id) {
+ ds_warn "Unable to add user without --group or --group-id";
+ return 1;
+ }
+
+ my $id = $self->username2id($user) or return 1;
+ my $al = $self->levels_name($level) or return 1;
+ return 1
+ if (
+ $ds_yes < 0
+ and ds_prompt(
+"You're going to accept $user as $level in group $self->{group_id}. Continue (Y/n) "
+ ) =~ refuse
+ );
+ $self->api->add_group_member(
+ $self->group_id,
+ {
+ user_id => $id,
+ access_level => $al,
+ });
+ ds_warn "User $user added to group "
+ . $self->group_id
+ . " with role $level";
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/check_repo.pm b/lib/Devscripts/Salsa/check_repo.pm
new file mode 100755
index 0000000..d22095b
--- /dev/null
+++ b/lib/Devscripts/Salsa/check_repo.pm
@@ -0,0 +1,205 @@
+# Parses repo to check if parameters are well set
+package Devscripts::Salsa::check_repo;
+
+use strict;
+use Devscripts::Output;
+use Digest::MD5 qw(md5_hex);
+use Digest::file qw(digest_file_hex);
+use LWP::UserAgent;
+use Moo::Role;
+
+with "Devscripts::Salsa::Repo";
+
+sub check_repo {
+ my $self = shift;
+ my ($res) = $self->_check_repo(@_);
+ return $res;
+}
+
+sub _url_md5_hex {
+ my $res = LWP::UserAgent->new->get(shift());
+ if (!$res->is_success) {
+ return undef;
+ }
+ return Digest::MD5::md5_hex($res->content);
+}
+
+sub _check_repo {
+ my ($self, @reponames) = @_;
+ my $res = 0;
+ my @fail;
+ unless (@reponames or $self->config->all or $self->config->all_archived) {
+ ds_warn "Usage $0 check_repo <--all|--all-archived|names>";
+ return 1;
+ }
+ if (@reponames and $self->config->all) {
+ ds_warn "--all with a reponame makes no sense";
+ return 1;
+ }
+ if (@reponames and $self->config->all_archived) {
+ ds_warn "--all-archived with a reponame makes no sense";
+ return 1;
+ }
+ # Get repo list from Devscripts::Salsa::Repo
+ my @repos = $self->get_repo(0, @reponames);
+ return @repos unless (ref $repos[0]);
+ foreach my $repo (@repos) {
+ my ($id, $name) = @$repo;
+ ds_debug "Checking $name ($id)";
+ my @err;
+ my $project = eval { $self->api->project($id) };
+ unless ($project) {
+ ds_debug $@;
+ ds_warn "Project $name not found";
+ next;
+ }
+ # check description
+ my %prms = $self->desc($name);
+ my %prms_multipart = $self->desc_multipart($name);
+ if ($self->config->desc) {
+ $project->{description} //= '';
+ push @err, "bad description: $project->{description}"
+ if ($prms{description} ne $project->{description});
+ }
+ # check build timeout
+ if ($self->config->desc) {
+ $project->{build_timeout} //= '';
+ push @err, "bad build_timeout: $project->{build_timeout}"
+ if ($prms{build_timeout} ne $project->{build_timeout});
+ }
+ # check features (w/permission) & ci config
+ foreach (
+ qw(analytics_access_level
+ auto_devops_enabled
+ builds_access_level
+ container_registry_access_level
+ forking_access_level
+ issues_access_level
+ lfs_enabled
+ merge_requests_access_level
+ packages_enabled
+ pages_access_level
+ releases_access_level
+ repository_access_level
+ request_access_enabled
+ requirements_access_level
+ snippets_access_level
+ wiki_access_level
+ remove_source_branch_after_merge
+ ci_config_path
+ request_access_enabled)
+ ) {
+ push @err, "$_ should be $prms{$_}"
+ if (defined $prms{$_}
+ and (!defined($project->{$_}) or $project->{$_} ne $prms{$_}));
+ }
+ # only public projects are accepted
+ push @err, "private" unless ($project->{visibility} eq "public");
+ # Default branch
+ if ($self->config->rename_head) {
+ push @err, "Default branch is $project->{default_branch}"
+ if ($project->{default_branch} ne $self->config->dest_branch);
+ }
+ # Webhooks (from Devscripts::Salsa::Hooks)
+ my $hooks = $self->enabled_hooks($id);
+ unless (defined $hooks) {
+ ds_warn "Unable to get $name hooks";
+ next;
+ }
+ # check avatar's path
+ if ($self->config->avatar_path) {
+ my ($md5_file, $md5_url) = "";
+ if ($prms_multipart{avatar}) {
+ ds_verbose "Calculating local checksum";
+ $md5_file = digest_file_hex($prms_multipart{avatar}, "MD5")
+ or die "$prms_multipart{avatar} failed md5: $!";
+ if ($project->{avatar_url}) {
+ ds_verbose "Calculating remote checksum";
+ $md5_url = _url_md5_hex($project->{avatar_url})
+ or die "$project->{avatar_url} failed md5: $!";
+ }
+ push @err, "Will set the avatar to be: $prms_multipart{avatar}"
+ if ($md5_file ne $md5_url);
+ }
+ }
+ # KGB
+ if ($self->config->kgb and not $hooks->{kgb}) {
+ push @err, "kgb missing";
+ } elsif ($self->config->disable_kgb and $hooks->{kgb}) {
+ push @err, "kgb enabled";
+ } elsif ($self->config->kgb) {
+ push @err,
+ "bad irc channel: "
+ . substr($hooks->{kgb}->{url},
+ length($self->config->kgb_server_url))
+ if $hooks->{kgb}->{url} ne $self->config->kgb_server_url
+ . $self->config->irc_channel->[0];
+ my @wopts = @{ $self->config->kgb_options };
+ my @gopts = sort @{ $hooks->{kgb}->{options} };
+ my $i = 0;
+ while (@gopts and @wopts) {
+ my $a;
+ $a = ($wopts[0] cmp $gopts[0]);
+ if ($a == -1) {
+ push @err, "Missing KGB option " . shift(@wopts);
+ } elsif ($a == 1) {
+ push @err, 'Unwanted KGB option ' . shift(@gopts);
+ } else {
+ shift @wopts;
+ shift @gopts;
+ }
+ }
+ push @err, map { "Missing KGB option $_" } @wopts;
+ push @err, map { "Unwanted KGB option $_" } @gopts;
+ }
+ # Email-on-push
+ if ($self->config->email
+ and not($hooks->{email} and %{ $hooks->{email} })) {
+ push @err, "email-on-push missing";
+ } elsif (
+ $self->config->email
+ and $hooks->{email}->{recipients} ne join(
+ ' ',
+ map {
+ my $a = $_;
+ my $b = $name;
+ $b =~ s#.*/##;
+ $a =~ s/%p/$b/;
+ $a
+ } @{ $self->config->email_recipient })
+ ) {
+ push @err, "bad email recipients " . $hooks->{email}->{recipients};
+ } elsif ($self->config->disable_email and $hooks->{kgb}) {
+ push @err, "email-on-push enabled";
+ }
+ # Irker
+ if ($self->config->irker and not $hooks->{irker}) {
+ push @err, "irker missing";
+ } elsif ($self->config->irker
+ and $hooks->{irker}->{recipients} ne
+ join(' ', map { "#$_" } @{ $self->config->irc_channel })) {
+ push @err, "bad irc channel: " . $hooks->{irker}->{recipients};
+ } elsif ($self->config->disable_irker and $hooks->{irker}) {
+ push @err, "irker enabled";
+ }
+ # Tagpending
+ if ($self->config->tagpending and not $hooks->{tagpending}) {
+ push @err, "tagpending missing";
+ } elsif ($self->config->disable_tagpending
+ and $hooks->{tagpending}) {
+ push @err, "tagpending enabled";
+ }
+ # report errors
+ if (@err) {
+ $res++;
+ push @fail, $name;
+ print "$name:\n";
+ print "\t$_\n" foreach (@err);
+ } else {
+ ds_verbose "$name: OK";
+ }
+ }
+ return ($res, \@fail);
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/checkout.pm b/lib/Devscripts/Salsa/checkout.pm
new file mode 100644
index 0000000..c3b5fe5
--- /dev/null
+++ b/lib/Devscripts/Salsa/checkout.pm
@@ -0,0 +1,79 @@
+# Clones or updates a repository using gbp
+# TODO: git-dpm ?
+package Devscripts::Salsa::checkout;
+
+use strict;
+use Devscripts::Output;
+use Devscripts::Utils;
+use Dpkg::IPC;
+use Moo::Role;
+
+with "Devscripts::Salsa::Repo";
+
+sub checkout {
+ my ($self, @repos) = @_;
+ unless (@repos or $self->config->all or $self->config->all_archived) {
+ ds_warn "Usage $0 checkout <--all|--all-archived|names>";
+ return 1;
+ }
+ if (@repos and $self->config->all) {
+ ds_warn "--all with a reponame makes no sense";
+ return 1;
+ }
+ if (@repos and $self->config->all_archived) {
+ ds_warn "--all-archived with a reponame makes no sense";
+ return 1;
+ }
+ # If --all is asked, launch all projects
+ @repos = map { $_->[1] } $self->get_repo(0, @repos) unless (@repos);
+ my $cdir = `pwd`;
+ chomp $cdir;
+ my $res = 0;
+ foreach (@repos) {
+ my $path = $self->project2path($_);
+ s#.*/##;
+ if (-d $_) {
+ chdir $_;
+ ds_verbose "Updating existing checkout in $_";
+ spawn(
+ exec => ['gbp', 'pull', '--pristine-tar'],
+ wait_child => 1,
+ nocheck => 1,
+ );
+ if ($?) {
+ if ($self->config->no_fail) {
+ print STDERR "gbp pull fails in $_, "
+ . "continuing since --no-fail is set\n";
+ $res++;
+ } else {
+ ds_warn "gbp pull failed in $_\n";
+ return 1;
+ }
+ }
+ chdir $cdir;
+ } else {
+ spawn(
+ exec => [
+ 'gbp', 'clone',
+ '--all', $self->config->git_server_url . $path . ".git"
+ ],
+ wait_child => 1,
+ nocheck => 1,
+ );
+ if ($?) {
+ if ($self->config->no_fail) {
+ print STDERR "gbp clone fails in $_, "
+ . "continuing since --no-fail is set\n";
+ $res++;
+ } else {
+ ds_warn "gbp clone failed for $_\n";
+ return 1;
+ }
+ }
+ ds_warn "$_ ready in $_/";
+ }
+ }
+ return $res;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/create_repo.pm b/lib/Devscripts/Salsa/create_repo.pm
new file mode 100644
index 0000000..4640ae2
--- /dev/null
+++ b/lib/Devscripts/Salsa/create_repo.pm
@@ -0,0 +1,47 @@
+# Creates repo using name or path
+package Devscripts::Salsa::create_repo;
+
+use strict;
+use Devscripts::Output;
+use Dpkg::IPC;
+use Moo::Role;
+
+with "Devscripts::Salsa::Hooks";
+
+sub create_repo {
+ my ($self, $reponame) = @_;
+ unless ($reponame) {
+ ds_warn "Repository name is missing";
+ return 1;
+ }
+ # Get parameters from Devscripts::Salsa::Repo
+ my $opts = {
+ name => $reponame,
+ path => $reponame,
+ visibility => 'public',
+ $self->desc($reponame),
+ };
+ if ($self->group_id) {
+ $opts->{namespace_id} = $self->group_id;
+ }
+ return 1
+ if (
+ $ds_yes < 0
+ and ds_prompt(
+ "You're going to create $reponame in "
+ . ($self->group_id ? $self->group_path : 'your namespace')
+ . ". Continue (Y/n) "
+ ) =~ refuse
+ );
+ my $repo = eval { $self->api->create_project($opts) };
+ if ($@ or !$repo) {
+ ds_warn "Project not created: $@";
+ return 1;
+ }
+ ds_warn "Project $repo->{web_url} created";
+ $reponame =~ s#^.*/##;
+ $self->add_hooks($repo->{id}, $reponame);
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/del_repo.pm b/lib/Devscripts/Salsa/del_repo.pm
new file mode 100644
index 0000000..74700e0
--- /dev/null
+++ b/lib/Devscripts/Salsa/del_repo.pm
@@ -0,0 +1,26 @@
+# Deletes a repository
+package Devscripts::Salsa::del_repo;
+
+use strict;
+use Devscripts::Output;
+use Dpkg::IPC;
+use Moo::Role;
+
+sub del_repo {
+ my ($self, $reponame) = @_;
+ unless ($reponame) {
+ ds_warn "Repository name or path is missing";
+ return 1;
+ }
+ my $id = $self->project2id($reponame) or return 1;
+ my $path = $self->project2path($reponame);
+ return 1
+ if ($ds_yes < 0
+ and ds_prompt("You're going to delete $path. Continue (Y/n) ")
+ =~ refuse);
+ $self->api->delete_project($id);
+ ds_warn "Project $path deleted";
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/del_user.pm b/lib/Devscripts/Salsa/del_user.pm
new file mode 100644
index 0000000..a29dbbe
--- /dev/null
+++ b/lib/Devscripts/Salsa/del_user.pm
@@ -0,0 +1,32 @@
+# Removes a user from a group
+package Devscripts::Salsa::del_user;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub del_user {
+ my ($self, $user) = @_;
+ unless ($user) {
+ ds_warn "Usage $0 del_user <user>";
+ return 1;
+ }
+ unless ($self->group_id) {
+ ds_warn "Unable to del user without --group-id";
+ return 1;
+ }
+
+ my $id = $self->username2id($user) or return 1;
+ return 1
+ if (
+ $ds_yes < 0
+ and ds_prompt(
+"You're going to remove $user from group $self->{group_id}. Continue (Y/n) "
+ ) =~ refuse
+ );
+ $self->api->remove_group_member($self->group_id, $id);
+ ds_warn "User $user removed from group " . $self->group_id;
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/fork.pm b/lib/Devscripts/Salsa/fork.pm
new file mode 100644
index 0000000..ca5559e
--- /dev/null
+++ b/lib/Devscripts/Salsa/fork.pm
@@ -0,0 +1,36 @@
+# Forks a project given by full path into group/user namespace
+package Devscripts::Salsa::fork;
+
+use strict;
+use Devscripts::Output;
+use Dpkg::IPC;
+use Moo::Role;
+
+with 'Devscripts::Salsa::checkout';
+
+sub fork {
+ my ($self, $project) = @_;
+ unless ($project) {
+ ds_warn "Project to fork is missing";
+ return 1;
+ }
+ my $path = $self->main_path or return 1;
+ $self->api->fork_project($project, { namespace => $path });
+ my $p = $project;
+ $p =~ s#.*/##;
+ if ($self->checkout($p)) {
+ ds_warn "Failed to checkout $project";
+ return 1;
+ }
+ chdir $p;
+ spawn(
+ exec => [
+ qw(git remote add upstream),
+ $self->config->git_server_url . $project
+ ],
+ wait_child => 1
+ );
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/forks.pm b/lib/Devscripts/Salsa/forks.pm
new file mode 100644
index 0000000..18b1d0c
--- /dev/null
+++ b/lib/Devscripts/Salsa/forks.pm
@@ -0,0 +1,45 @@
+# Lists forks of a project
+package Devscripts::Salsa::forks;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub forks {
+ my ($self, @reponames) = @_;
+ my $res = 0;
+ unless (@reponames) {
+ ds_warn "Repository name is missing";
+ return 1;
+ }
+ foreach my $p (@reponames) {
+ my $id = $self->project2id($p);
+ unless ($id) {
+ ds_warn "Project $_ not found";
+ $res++;
+ next;
+ }
+ print "$p\n";
+ my $forks = $self->api->paginator(
+ 'project_forks',
+ $id,
+ {
+ state => 'opened',
+ });
+ unless ($forks) {
+ print "\n";
+ next;
+ }
+ while ($_ = $forks->next) {
+ print <<END;
+\tId : $_->{id}
+\tName: $_->{path_with_namespace}
+\tURL : $_->{web_url}
+
+END
+ }
+ }
+ return $res;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/group.pm b/lib/Devscripts/Salsa/group.pm
new file mode 100644
index 0000000..cb14741
--- /dev/null
+++ b/lib/Devscripts/Salsa/group.pm
@@ -0,0 +1,35 @@
+# Lists members of a group
+package Devscripts::Salsa::group;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub group {
+ my ($self) = @_;
+ my $count = 0;
+ unless ($self->group_id) {
+ ds_warn "Usage $0 --group-id 1234 group";
+ return 1;
+ }
+ my $users = $self->api->paginator('group_members', $self->group_id);
+ while ($_ = $users->next) {
+ $count++;
+ my $access_level = $self->levels_code($_->{access_level});
+ print <<END;
+Id : $_->{id}
+Username : $_->{username}
+Name : $_->{name}
+Access level: $access_level
+State : $_->{state}
+
+END
+ }
+ unless ($count) {
+ ds_warn "No users found";
+ return 1;
+ }
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/join.pm b/lib/Devscripts/Salsa/join.pm
new file mode 100644
index 0000000..319e107
--- /dev/null
+++ b/lib/Devscripts/Salsa/join.pm
@@ -0,0 +1,20 @@
+# Launch request to join a group
+package Devscripts::Salsa::join;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub join {
+ my ($self, $group) = @_;
+ unless ($group ||= $self->config->group || $self->config->group_id) {
+ ds_warn "Group is missing";
+ return 1;
+ }
+ my $gid = $self->group2id($group);
+ $self->api->group_access_requests($gid);
+ ds_warn "Request launched to group $group ($gid)";
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/last_ci_status.pm b/lib/Devscripts/Salsa/last_ci_status.pm
new file mode 100644
index 0000000..c275efb
--- /dev/null
+++ b/lib/Devscripts/Salsa/last_ci_status.pm
@@ -0,0 +1,74 @@
+package Devscripts::Salsa::last_ci_status;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+with "Devscripts::Salsa::Repo";
+
+use constant OK => 'success';
+use constant SKIPPED => 'skipped';
+use constant FAILED => 'failed';
+
+sub last_ci_status {
+ my ($self, @repos) = @_;
+ unless (@repos or $self->config->all or $self->config->all_archived) {
+ ds_warn "Usage $0 ci_status <--all|--all-archived|names>";
+ return 1;
+ }
+ if (@repos and $self->config->all) {
+ ds_warn "--all with a reponame makes no sense";
+ return 1;
+ }
+ if (@repos and $self->config->all_archived) {
+ ds_warn "--all-archived with a reponame makes no sense";
+ return 1;
+ }
+ # If --all is asked, launch all projects
+ @repos = map { $_->[1] } $self->get_repo(0, @repos) unless (@repos);
+ my $ret = 0;
+ foreach my $repo (@repos) {
+ my $id = $self->project2id($repo) or return 1;
+ my $pipelines = $self->api->pipelines($id);
+ unless ($pipelines and @$pipelines) {
+ ds_warn "No pipelines for $repo";
+ $ret++;
+ return 1 unless $self->config->no_fail;
+ } else {
+ my $status = $pipelines->[0]->{status};
+ if ($status eq OK) {
+ print "Last result for $repo: $status\n";
+ } else {
+ print STDERR "Last result for $repo: $status\n";
+ my $jobs
+ = $self->api->pipeline_jobs($id, $pipelines->[0]->{id});
+ my %jres;
+ foreach my $job (sort { $a->{id} <=> $b->{id} } @$jobs) {
+ next if $job->{status} eq SKIPPED;
+ push @{ $jres{ $job->{status} } }, $job->{name};
+ }
+ if ($jres{ OK() }) {
+ print STDERR ' success: '
+ . join(', ', @{ $jres{ OK() } }) . "\n";
+ delete $jres{ OK() };
+ }
+ foreach my $k (sort keys %jres) {
+ print STDERR ' '
+ . uc($k) . ': '
+ . join(', ', @{ $jres{$k} }) . "\n";
+ }
+ print STDERR "\n See: " . $pipelines->[0]->{web_url} . "\n\n";
+ if ($status eq FAILED) {
+ $ret++;
+ unless ($self->config->no_fail) {
+ ds_verbose "Use --no-fail to continue";
+ return 1;
+ }
+ }
+ }
+ }
+ }
+ return $ret;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/list_groups.pm b/lib/Devscripts/Salsa/list_groups.pm
new file mode 100644
index 0000000..903cd1e
--- /dev/null
+++ b/lib/Devscripts/Salsa/list_groups.pm
@@ -0,0 +1,40 @@
+# Lists subgroups of a group or groups of a user
+package Devscripts::Salsa::list_groups;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub list_groups {
+ my ($self, $match) = @_;
+ my $groups;
+ my $count = 0;
+ my $opts = {
+ order_by => 'name',
+ sort => 'asc',
+ ($match ? (search => $match) : ()),
+ };
+ if ($self->group_id) {
+ $groups
+ = $self->api->paginator('group_subgroups', $self->group_id, $opts);
+ } else {
+ $groups = $self->api->paginator('groups', $opts);
+ }
+ while ($_ = $groups->next) {
+ $count++;
+ my $parent = $_->{parent_id} ? "Parent id: $_->{parent_id}\n" : '';
+ print <<END;
+Id : $_->{id}
+Name : $_->{name}
+Full path: $_->{full_path}
+$parent
+END
+ }
+ unless ($count) {
+ ds_warn "No groups found";
+ return 1;
+ }
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/list_repos.pm b/lib/Devscripts/Salsa/list_repos.pm
new file mode 100644
index 0000000..34ae05a
--- /dev/null
+++ b/lib/Devscripts/Salsa/list_repos.pm
@@ -0,0 +1,42 @@
+# Lists repositories of group/user
+package Devscripts::Salsa::list_repos;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub list_repos {
+ my ($self, $match) = @_;
+ my $projects;
+ my $count = 0;
+ my $opts = {
+ order_by => 'name',
+ sort => 'asc',
+ simple => 1,
+ archived => $self->config->archived,
+ ($match ? (search => $match) : ()),
+ };
+ if ($self->group_id) {
+ $projects
+ = $self->api->paginator('group_projects', $self->group_id, $opts);
+ } else {
+ $projects
+ = $self->api->paginator('user_projects', $self->user_id, $opts);
+ }
+ while ($_ = $projects->next) {
+ $count++;
+ print <<END;
+Id : $_->{id}
+Name: $_->{name}
+URL : $_->{web_url}
+
+END
+ }
+ unless ($count) {
+ ds_warn "No projects found";
+ return 1;
+ }
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/merge_request.pm b/lib/Devscripts/Salsa/merge_request.pm
new file mode 100644
index 0000000..b76c6e8
--- /dev/null
+++ b/lib/Devscripts/Salsa/merge_request.pm
@@ -0,0 +1,174 @@
+# Creates a merge request from current directory (or using parameters)
+package Devscripts::Salsa::merge_request;
+
+use strict;
+use Devscripts::Output;
+use Dpkg::IPC;
+use Moo::Role;
+
+with 'Devscripts::Salsa::search_project';
+
+sub merge_request {
+ my ($self, $dst_project, $dst_branch) = @_;
+ my $src_branch = $self->config->mr_src_branch;
+ my $src_project = $self->config->mr_src_project;
+ $dst_project ||= $self->config->mr_dst_project;
+ $dst_branch ||= $self->config->mr_dst_branch;
+ my $title = $self->config->mr_title;
+ my $desc = $self->config->mr_desc;
+
+ if ($src_branch) {
+ unless ($src_project and $dst_project) {
+ ds_warn "--mr-src-project and --mr-src-project "
+ . "are required when --mr-src-branch is set";
+ return 1;
+ }
+ unless ($src_project =~ m#/#) {
+ $src_project = $self->project2path($src_project);
+ }
+ } else { # Use current repository to find elements
+ ds_verbose "using current branch as source";
+ my $out;
+ unless ($src_project) {
+ # 1. Verify that repo is ready
+ spawn(
+ exec => [qw(git status -s -b -uno)],
+ wait_child => 1,
+ to_string => \$out
+ );
+ chomp $out;
+ # Case "rebased"
+ if ($out =~ /\[/) {
+ ds_warn "Current branch isn't pushed, aborting:\n";
+ return 1;
+ }
+ # Case else: nothing after src...dst
+ unless ($out =~ /\s(\S+)\.\.\.(\S+)/s) {
+ ds_warn
+ "Current branch as no origin or isn't pushed, aborting";
+ return 1;
+ }
+ # 2. Set source branch to current branch
+ $src_branch ||= $1;
+ ds_verbose "Found current branch: $src_branch";
+ }
+ unless ($src_project and $dst_project) {
+ # Check remote links
+ spawn(
+ exec => [qw(git remote --verbose show)],
+ wait_child => 1,
+ to_string => \$out,
+ );
+ my $origin = $self->config->api_url;
+ $origin =~ s#api/v4$##;
+ # 3. Set source project using "origin" target
+ unless ($src_project) {
+ if ($out
+ =~ /origin\s+(?:\Q$self->{config}->{git_server_url}\E|\Q$origin\E)(\S*)/m
+ ) {
+ $src_project = $1;
+ $src_project =~ s/\.git$//;
+ } else {
+ ds_warn
+"Unable to find project origin, set it using --mr-src-project";
+ return 1;
+ }
+ }
+ # 4. Steps to find destination project:
+ # - command-line
+ # - GitLab API (search for "forked_from_project"
+ # - "upstream" in git remote
+ # - use source project as destination project
+
+ # 4.1. Stop if dest project has been given in command line
+ unless ($dst_project) {
+ my $project = $self->api->project($src_project);
+
+ # 4.2. Search original project from GitLab API
+ if ($project->{forked_from_project}) {
+ $dst_project
+ = $project->{forked_from_project}->{path_with_namespace};
+ }
+ if ($dst_project) {
+ ds_verbose "Project was forked from $dst_project";
+
+ # 4.3. Search for an "upstream" target in `git remote`
+ } elsif ($out
+ =~ /upstream\s+(?:\Q$self->{config}->{git_server_url}\E|\Q$origin\E)(\S*)/m
+ ) {
+ $dst_project = $1;
+ $dst_project =~ s/\.git$//;
+ ds_verbose 'Use "upstream" target as dst project';
+ # 4.4. Use source project as destination
+ } else {
+ ds_warn
+"No upstream target found, using current project as target";
+ $dst_project = $src_project;
+ }
+ ds_verbose "Use $dst_project as dest project";
+ }
+ }
+ # 5. Search for MR title and desc
+ unless ($title) {
+ ds_warn "Title not set, using last commit";
+ spawn(
+ exec => ['git', 'show', '--format=format:%s###%b'],
+ wait_child => 1,
+ to_string => \$out,
+ );
+ $out =~ s/\ndiff.*$//s;
+ my ($t, $d) = split /###/, $out;
+ chomp $d;
+ $title = $t;
+ ds_verbose "Title set to $title";
+ $desc ||= $d;
+ # Replace all bug links by markdown links
+ if ($desc) {
+ $desc =~ s@#(\d{6,})\b@[#$1](https://bugs.debian.org/$1)@mg;
+ ds_verbose "Desc set to $desc";
+ }
+ }
+ }
+ if ($dst_project eq 'same') {
+ $dst_project = $src_project;
+ }
+ my $src = $self->api->project($src_project);
+ unless ($title) {
+ ds_warn "Title is required";
+ return 1;
+ }
+ unless ($src and $src->{id}) {
+ ds_warn "Target project not found $src_project";
+ return 1;
+ }
+ my $dst;
+ if ($dst_project) {
+ $dst = $self->api->project($dst_project);
+ unless ($dst and $dst->{id}) {
+ ds_warn "Target project not found";
+ return 1;
+ }
+ }
+ return 1
+ if (
+ ds_prompt(
+"You're going to push an MR to $dst_project:$dst_branch. Continue (Y/n)"
+ ) =~ refuse
+ );
+ my $res = $self->api->create_merge_request(
+ $src->{id},
+ {
+ source_branch => $src_branch,
+ target_branch => $dst_branch,
+ title => $title,
+ remove_source_branch => $self->config->mr_remove_source_branch,
+ squash => $self->config->mr_allow_squash,
+ ($dst ? (target_project_id => $dst->{id}) : ()),
+ ($desc ? (description => $desc) : ()),
+ });
+ ds_warn "MR '$title' posted:";
+ ds_warn $res->{web_url};
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/merge_requests.pm b/lib/Devscripts/Salsa/merge_requests.pm
new file mode 100644
index 0000000..e722390
--- /dev/null
+++ b/lib/Devscripts/Salsa/merge_requests.pm
@@ -0,0 +1,49 @@
+# Lists merge requests proposed to a project
+package Devscripts::Salsa::merge_requests;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub merge_requests {
+ my ($self, @reponames) = @_;
+ my $res = 1;
+ unless (@reponames) {
+ ds_warn "Repository name is missing";
+ return 1;
+ }
+ foreach my $p (@reponames) {
+ my $id = $self->project2id($p);
+ my $count = 0;
+ unless ($id) {
+ ds_warn "Project $_ not found";
+ return 1;
+ }
+ print "$p\n";
+ my $mrs = $self->api->paginator(
+ 'merge_requests',
+ $id,
+ {
+ state => 'opened',
+ });
+ while ($_ = $mrs->next) {
+ $res = 0;
+ my $status = $_->{work_in_progress} ? 'WIP' : $_->{merge_status};
+ print <<END;
+\tId : $_->{id}
+\tTitle : $_->{title}
+\tAuthor: $_->{author}->{username}
+\tStatus: $status
+\tUrl : $_->{web_url}
+
+END
+ }
+ unless ($count) {
+ print "\n";
+ next;
+ }
+ }
+ return $res;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/pipeline_schedule.pm b/lib/Devscripts/Salsa/pipeline_schedule.pm
new file mode 100755
index 0000000..51c1e09
--- /dev/null
+++ b/lib/Devscripts/Salsa/pipeline_schedule.pm
@@ -0,0 +1,124 @@
+# Create a pipeline schedule using parameters
+package Devscripts::Salsa::pipeline_schedule;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+# For --all
+with "Devscripts::Salsa::Repo";
+
+sub pipeline_schedule {
+ my ($self, @repos) = @_;
+ my $ret = 0;
+ my $desc = $self->config->schedule_desc;
+ my $ref = $self->config->schedule_ref;
+ my $cron = $self->config->schedule_cron;
+ my $tz = $self->config->schedule_tz;
+ my $active = $self->config->schedule_enable;
+ $active
+ = ($self->config->schedule_disable)
+ ? "0"
+ : $active;
+ my $run = $self->config->schedule_run;
+ my $delete = $self->config->schedule_delete;
+
+ unless (@repos or $self->config->all) {
+ ds_warn "Usage $0 pipeline <project|--all>";
+ return 1;
+ }
+ if (@repos and $self->config->all) {
+ ds_warn "--all with a project (@repos) makes no sense";
+ return 1;
+ }
+
+ unless ($desc) {
+ ds_warn "--schedule-desc / SALSA_SCHEDULE_DESC is missing";
+ ds_warn "Are you looking for: $0 pipelines <project|--all>";
+ return 1;
+ }
+
+ # If --all is asked, launch all projects
+ @repos = map { $_->[1] } $self->get_repo(0, @repos) unless (@repos);
+
+ foreach my $repo (sort @repos) {
+ my $id = $self->project2id($repo);
+ unless ($id) {
+#ds_warn "Project $repo not found"; # $self->project2id($repo) shows this error
+ $ret++;
+ return 1 unless $self->config->no_fail;
+ } else {
+ my @pipe_id = ();
+ $desc =~ s/%p/$repo/g;
+ my $options = {};
+ $options->{ref} = $ref if defined $ref;
+ $options->{cron} = $cron if defined $cron;
+ $options->{cron_timezone} = $tz if defined $tz;
+ $options->{active} = $active if defined $active;
+
+# REF: https://docs.gitlab.com/ee/api/pipeline_schedules.html#get-all-pipeline-schedules
+# $self->api->pipeline_schedules($id)
+ my $pipelines
+ = $self->api->paginator('pipeline_schedules', $id)->all();
+ ds_verbose "No pipelines scheduled for $repo" unless @$pipelines;
+
+ foreach (@$pipelines) {
+ push @pipe_id, $_->{id}
+ if ($_->{description} eq $desc);
+ }
+
+ ds_warn "More than 1 scheduled pipeline matches: $desc ("
+ . ++$#pipe_id . ")"
+ if ($pipe_id[1]);
+
+ if (!@pipe_id) {
+ ds_warn "--schedule-ref / SALSA_SCHEDULE_REF is required"
+ unless ($ref);
+ ds_warn "--schedule-cron / SALSA_SCHEDULE_CRON is required"
+ unless ($cron);
+ return 1
+ unless ($ref && $cron);
+
+ $options->{description} = $desc if defined $desc;
+
+ ds_verbose "No scheduled pipelines matching: $desc. Creating!";
+ my $schedule
+ = $self->api->create_pipeline_schedule($id, $options);
+
+ @pipe_id = $schedule->{id};
+ } elsif (keys %$options) {
+ ds_verbose "Editing scheduled pipelines matching: $desc";
+ foreach (@pipe_id) {
+ next if !$_;
+
+ my $schedule
+ = $self->api->edit_pipeline_schedule($id, $_, $options);
+ }
+ }
+
+ if ($run) {
+ ds_verbose "Running scheduled pipelines matching: $desc";
+
+ foreach (@pipe_id) {
+ next if !$_;
+
+ my $schedule = $self->api->run_pipeline_schedule($id, $_);
+ }
+ }
+
+ if ($delete) {
+ ds_verbose "Deleting scheduled pipelines matching: $desc";
+
+ foreach (@pipe_id) {
+ next if !$_;
+
+ my $schedule
+ = $self->api->delete_pipeline_schedule($id, $_);
+ }
+ }
+ }
+ }
+ return $ret;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/pipeline_schedules.pm b/lib/Devscripts/Salsa/pipeline_schedules.pm
new file mode 100755
index 0000000..47c7904
--- /dev/null
+++ b/lib/Devscripts/Salsa/pipeline_schedules.pm
@@ -0,0 +1,70 @@
+# Lists pipeline schedules of a project
+package Devscripts::Salsa::pipeline_schedules;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+# For --all
+with "Devscripts::Salsa::Repo";
+
+sub pipeline_schedules {
+ my ($self, @repo) = @_;
+ my $ret = 0;
+
+ unless (@repo or $self->config->all) {
+ ds_warn "Usage $0 pipelines <project|--all>";
+ return 1;
+ }
+ if (@repo and $self->config->all) {
+ ds_warn "--all with a project (@repo) makes no sense";
+ return 1;
+ }
+
+ # If --all is asked, launch all projects
+ @repo = map { $_->[1] } $self->get_repo(0, @repo) unless (@repo);
+
+ foreach my $p (sort @repo) {
+ my $id = $self->project2id($p);
+ my $count = 0;
+ unless ($id) {
+ #ds_warn "Project $p not found"; # $self->project2id($p) shows this error
+ $ret++;
+ return 1 unless $self->config->no_fail;
+ } else {
+ my $projects = $self->api->project($id);
+ if ($projects->{jobs_enabled} == 0) {
+ print "$p has disabled CI/CD\n";
+ next;
+ }
+
+ my $pipelines
+ = $self->api->paginator('pipeline_schedules', $id)->all();
+
+ print "$p\n" if @$pipelines;
+
+ foreach (@$pipelines) {
+ my $status = $_->{active} ? 'Enabled' : 'Disabled';
+ print <<END;
+\tID : $_->{id}
+\tDescription: $_->{description}
+\tStatus : $status
+\tRef : $_->{ref}
+\tCron : $_->{cron}
+\tTimezone : $_->{cron_timezone}
+\tCreated : $_->{created_at}
+\tUpdated : $_->{updated_at}
+\tNext run : $_->{next_run_at}
+\tOwner : $_->{owner}->{username}
+
+END
+ }
+ }
+ unless ($count) {
+ next;
+ }
+ }
+ return $ret;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/protect_branch.pm b/lib/Devscripts/Salsa/protect_branch.pm
new file mode 100644
index 0000000..5451818
--- /dev/null
+++ b/lib/Devscripts/Salsa/protect_branch.pm
@@ -0,0 +1,43 @@
+# Protects a branch
+package Devscripts::Salsa::protect_branch;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+use constant levels => {
+ o => 50,
+ owner => 50,
+ m => 40,
+ maintainer => 40,
+ d => 30,
+ developer => 30,
+ r => 20,
+ reporter => 20,
+ g => 10,
+ guest => 10,
+};
+
+sub protect_branch {
+ my ($self, $reponame, $branch, $merge, $push) = @_;
+ unless ($reponame and $branch) {
+ ds_warn "usage: $0 protect_branch repo branch merge push";
+ return 1;
+ }
+ if (defined $merge and $merge =~ /^(?:no|0)$/i) {
+ $self->api->unprotect_branch($self->project2id($reponame), $branch);
+ return 0;
+ }
+ unless (levels->{$merge} and levels->{$push}) {
+ ds_warn
+ "usage: $0 protect_branch repo branch <merge level> <push level>";
+ return 1;
+ }
+ my $opts = { name => $branch };
+ $opts->{push_access_level} = (levels->{$push});
+ $opts->{merge_access_level} = (levels->{$merge});
+ $self->api->protect_branch($self->project2id($reponame), $opts);
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/protected_branches.pm b/lib/Devscripts/Salsa/protected_branches.pm
new file mode 100644
index 0000000..cd0cd0e
--- /dev/null
+++ b/lib/Devscripts/Salsa/protected_branches.pm
@@ -0,0 +1,27 @@
+# Displays protected branches of a project
+package Devscripts::Salsa::protected_branches;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub protected_branches {
+ my ($self, $reponame) = @_;
+ unless ($reponame) {
+ ds_warn "Repository name is missing";
+ return 1;
+ }
+ my $branches
+ = $self->api->protected_branches($self->project2id($reponame));
+ if ($branches and @$branches) {
+ printf " %-20s | %-25s | %-25s\n", 'Branch', 'Merge', 'Push';
+ foreach (@$branches) {
+ printf " %-20s | %-25s | %-25s\n", $_->{name},
+ $_->{merge_access_levels}->[0]->{access_level_description},
+ $_->{push_access_levels}->[0]->{access_level_description};
+ }
+ }
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/purge_cache.pm b/lib/Devscripts/Salsa/purge_cache.pm
new file mode 100644
index 0000000..187f698
--- /dev/null
+++ b/lib/Devscripts/Salsa/purge_cache.pm
@@ -0,0 +1,15 @@
+# Empties the Devscripts::JSONCache
+package Devscripts::Salsa::purge_cache;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub purge_cache {
+ my @keys = keys %{ $_[0]->_cache };
+ delete $_[0]->_cache->{$_} foreach (@keys);
+ ds_verbose "Cache empty";
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/push.pm b/lib/Devscripts/Salsa/push.pm
new file mode 100644
index 0000000..fa3b6cc
--- /dev/null
+++ b/lib/Devscripts/Salsa/push.pm
@@ -0,0 +1,106 @@
+# Push local work. Like gbp push but able to push incomplete work
+package Devscripts::Salsa::push;
+use strict;
+use Devscripts::Output;
+use Devscripts::Utils;
+use Dpkg::Source::Format;
+use Moo::Role;
+use Dpkg::IPC;
+
+sub readGbpConf {
+ my ($self) = @_;
+ my $res = '';
+ foreach my $gbpconf (qw(.gbp.conf debian/gbp.conf .git/gbp.conf)) {
+ if (-e $gbpconf) {
+ open(my $f, $gbpconf);
+ while (<$f>) {
+ $res .= $_;
+ if (/^\s*(debian|upstream)\-(branch|tag)\s*=\s*(.*\S)/) {
+ $self->{"$1_$2"} = $3;
+ }
+ }
+ close $f;
+ last;
+ }
+ }
+ if ($self->{debian_tag}) {
+ $self->{debian_tag} =~ s/%\(version\)s/.*/g;
+ $self->{debian_tag} =~ s/^/^/;
+ $self->{debian_tag} =~ s/$/\$/;
+ } else {
+ my @tmp
+ = Dpkg::Source::Format->new(filename => 'debian/source/format')->get;
+ $self->{debian_tag} = $tmp[2] eq 'native' ? '.*' : '^debian/.*$';
+ }
+ if ($self->{upstream_tag}) {
+ $self->{upstream_tag} =~ s/%\(version\)s/.*/g;
+ $self->{upstream_tag} =~ s/^/^/;
+ $self->{upstream_tag} =~ s/$/\$/;
+ } else {
+ $self->{upstream_tag} = '^upstream/.*$';
+ }
+ $self->{debian_branch} ||= 'master';
+ $self->{upstream_branch} ||= 'upstream';
+ return $res;
+}
+
+sub push {
+ my ($self) = @_;
+ $self->readGbpConf;
+ my @refs;
+ foreach (
+ $self->{debian_branch}, $self->{upstream_branch},
+ 'pristine-tar', 'refs/notes/commits'
+ ) {
+ if (ds_exec_no_fail(qw(git rev-parse --verify --quiet), $_) == 0) {
+ push @refs, $_;
+ }
+ }
+ my $out;
+ spawn(exec => ['git', 'tag'], wait_child => 1, to_string => \$out);
+ my @tags = grep /(?:$self->{debian_tag}|$self->{upstream_tag})/,
+ split(/\r?\n/, $out);
+ unless (
+ $ds_yes < 0
+ and ds_prompt(
+ "You're going to push :\n - "
+ . join(', ', @refs)
+ . "\nand check tags that match:\n - "
+ . join(', ', $self->{debian_tag}, $self->{upstream_tag})
+ . "\nContinue (Y/n) "
+ ) =~ refuse
+ ) {
+ my $origin;
+ eval {
+ spawn(
+ exec => ['git', 'rev-parse', '--abbrev-ref', 'HEAD'],
+ wait_child => 1,
+ to_string => \$out,
+ );
+ chomp $out;
+ spawn(
+ exec =>
+ ['git', 'config', '--local', '--get', "branch.$out.remote"],
+ wait_child => 1,
+ to_string => \$origin,
+ );
+ chomp $origin;
+ };
+ if ($origin) {
+ ds_verbose 'Origin is ' . $origin;
+ } else {
+ ds_warn 'Unable to detect remote name, trying "origin"';
+ ds_verbose "Error: $@" if ($@);
+ $origin = 'origin';
+ }
+ ds_verbose "Execute 'git push $origin " . join(' ', @refs, '<tags>');
+ ds_debug "Tags are: " . join(' ', @tags);
+ spawn(
+ exec => ['git', 'push', $origin, @refs, @tags],
+ wait_child => 1
+ );
+ }
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/push_repo.pm b/lib/Devscripts/Salsa/push_repo.pm
new file mode 100644
index 0000000..94e8ff3
--- /dev/null
+++ b/lib/Devscripts/Salsa/push_repo.pm
@@ -0,0 +1,71 @@
+# Creates GitLab repo from local path
+package Devscripts::Salsa::push_repo;
+
+use strict;
+use Devscripts::Output;
+use Dpkg::IPC;
+use Moo::Role;
+
+with "Devscripts::Salsa::create_repo";
+
+sub push_repo {
+ my ($self, $reponame) = @_;
+ unless ($reponame) {
+ ds_warn "Repository path is missing";
+ return 1;
+ }
+ unless (-d $reponame) {
+ ds_warn "$reponame isn't a directory";
+ return 1;
+ }
+ chdir $reponame;
+ eval {
+ spawn(
+ exec => ['dpkg-parsechangelog', '--show-field', 'Source'],
+ to_string => \$reponame,
+ wait_child => 1,
+ );
+ };
+ if ($@) {
+ ds_warn $@;
+ return 1;
+ }
+ chomp $reponame;
+ my $out;
+ spawn(
+ exec => ['git', 'remote', 'show'],
+ to_string => \$out,
+ wait_child => 1,
+ );
+ if ($out =~ /^origin$/m) {
+ ds_warn "git origin is already configured:\n$out";
+ return 1;
+ }
+ my $path = $self->project2path('') or return 1;
+ my $url = $self->config->git_server_url . "$path$reponame";
+ spawn(
+ exec => ['git', 'remote', 'add', 'origin', $url],
+ wait_child => 1,
+ );
+ my $res = $self->create_repo($reponame);
+ if ($res) {
+ return 1
+ unless (
+ ds_prompt(
+"Project already exists, do you want to try to push local repo? (y/N) "
+ ) =~ accept
+ );
+ }
+ spawn(
+ exec =>
+ ['git', 'push', '--all', '--verbose', '--set-upstream', 'origin'],
+ wait_child => 1,
+ );
+ spawn(
+ exec => ['git', 'push', '--tags', '--verbose', 'origin'],
+ wait_child => 1,
+ );
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/rename_branch.pm b/lib/Devscripts/Salsa/rename_branch.pm
new file mode 100644
index 0000000..d908080
--- /dev/null
+++ b/lib/Devscripts/Salsa/rename_branch.pm
@@ -0,0 +1,45 @@
+package Devscripts::Salsa::rename_branch;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+with "Devscripts::Salsa::Repo";
+
+our $prompt = 1;
+
+sub rename_branch {
+ my ($self, @reponames) = @_;
+ my $res = 0;
+ my @repos = $self->get_repo($prompt, @reponames);
+ return @repos unless (ref $repos[0]); # get_repo returns 1 when fails
+ foreach (@repos) {
+ my $id = $_->[0];
+ ds_verbose "Configuring $_->[1]";
+ my $project = $self->api->project($_->[0]);
+ eval {
+ $self->api->create_branch(
+ $id,
+ {
+ ref => $self->config->source_branch,
+ branch => $self->config->dest_branch,
+ });
+ $self->api->delete_branch($id, $self->config->source_branch);
+ };
+ if ($@) {
+ $res++;
+ if ($self->config->no_fail) {
+ ds_verbose $@;
+ ds_warn
+"Branch rename has failed for $_->[1]. Use --verbose to see errors\n";
+ next;
+ } else {
+ ds_warn $@;
+ return 1;
+ }
+ }
+ }
+ return $res;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/search_group.pm b/lib/Devscripts/Salsa/search_group.pm
new file mode 100644
index 0000000..2fd047b
--- /dev/null
+++ b/lib/Devscripts/Salsa/search_group.pm
@@ -0,0 +1,37 @@
+# Searches groups using given string
+package Devscripts::Salsa::search_group;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub search_group {
+ my ($self, $group) = @_;
+ unless ($group) {
+ ds_warn "Searched string is missing";
+ return 1;
+ }
+ my $groups = $self->api->group_without_projects($group);
+ if ($groups) {
+ $groups = [$groups];
+ } else {
+ $groups = $self->api->paginator('groups',
+ { search => $group, order_by => 'name' })->all;
+ }
+ unless ($groups and @$groups) {
+ ds_warn "No group found";
+ return 1;
+ }
+ foreach (@$groups) {
+ print <<END;
+Id : $_->{id}
+Name : $_->{name}
+Full name: $_->{full_name}
+Full path: $_->{full_path}
+
+END
+ }
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/search_project.pm b/lib/Devscripts/Salsa/search_project.pm
new file mode 100644
index 0000000..34584bf
--- /dev/null
+++ b/lib/Devscripts/Salsa/search_project.pm
@@ -0,0 +1,57 @@
+# Searches projects using given string
+package Devscripts::Salsa::search_project;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub search_project {
+ my ($self, $project) = @_;
+ unless ($project) {
+ ds_warn "Searched string is missing";
+ return 1;
+ }
+ my $projects = $self->api->project($project);
+ if ($projects) {
+ $projects = [$projects];
+ } else {
+ $projects = $self->api->paginator(
+ 'projects',
+ {
+ search => $project,
+ order_by => 'name',
+ archived => $self->config->archived
+ })->all();
+ }
+ unless ($projects and @$projects) {
+ ds_warn "No projects found";
+ return 1;
+ }
+ foreach (@$projects) {
+ print <<END;
+Id : $_->{id}
+Name : $_->{name}
+Full path: $_->{path_with_namespace}
+END
+ print(
+ $_->{namespace}->{kind} eq 'group'
+ ? "Group id : "
+ : "User id : "
+ );
+ print "$_->{namespace}->{id}\n";
+ print(
+ $_->{namespace}->{kind} eq 'group'
+ ? "Group : "
+ : "User : "
+ );
+ print "$_->{namespace}->{name}\n";
+ if ($_->{forked_from_project} and $_->{forked_from_project}->{id}) {
+ print
+ "Fork of : $_->{forked_from_project}->{name_with_namespace}\n";
+ }
+ print "\n";
+ }
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/search_user.pm b/lib/Devscripts/Salsa/search_user.pm
new file mode 100644
index 0000000..2a14580
--- /dev/null
+++ b/lib/Devscripts/Salsa/search_user.pm
@@ -0,0 +1,36 @@
+# Searches users using given string
+package Devscripts::Salsa::search_user;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub search_user {
+ my ($self, $user) = @_;
+ unless ($user) {
+ ds_warn "User name is missing";
+ return 1;
+ }
+ my $users = $self->api->user($user);
+ if ($users) {
+ $users = [$users];
+ } else {
+ $users = $self->api->paginator('users', { search => $user })->all();
+ }
+ unless ($users and @$users) {
+ ds_warn "No user found";
+ return 1;
+ }
+ foreach (@$users) {
+ print <<END;
+Id : $_->{id}
+Username : $_->{username}
+Name : $_->{name}
+State : $_->{state}
+
+END
+ }
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/update_repo.pm b/lib/Devscripts/Salsa/update_repo.pm
new file mode 100644
index 0000000..7902313
--- /dev/null
+++ b/lib/Devscripts/Salsa/update_repo.pm
@@ -0,0 +1,140 @@
+# Updates repositories
+package Devscripts::Salsa::update_repo;
+
+use strict;
+use Devscripts::Output;
+use GitLab::API::v4::Constants qw(:all);
+use Moo::Role;
+
+with "Devscripts::Salsa::Repo";
+
+our $prompt = 1;
+
+sub update_repo {
+ my ($self, @reponames) = @_;
+ if ($ds_yes < 0 and $self->config->command eq 'update_repo') {
+ ds_warn
+ "update_repo can't be launched when -i is set, use update_safe";
+ return 1;
+ }
+ unless (@reponames or $self->config->all or $self->config->all_archived) {
+ ds_warn "Usage $0 update_repo <--all|--all-archived|names>";
+ return 1;
+ }
+ if (@reponames and $self->config->all) {
+ ds_warn "--all with a reponame makes no sense";
+ return 1;
+ }
+ if (@reponames and $self->config->all_archived) {
+ ds_warn "--all-archived with a reponame makes no sense";
+ return 1;
+ }
+ return $self->_update_repo(@reponames);
+}
+
+sub _update_repo {
+ my ($self, @reponames) = @_;
+ my $res = 0;
+ # Common options
+ my $configparams = {};
+ # visibility can be modified only by group owners
+ $configparams->{visibility} = 'public'
+ if $self->access_level >= $GITLAB_ACCESS_LEVEL_OWNER;
+ # get repo list using Devscripts::Salsa::Repo
+ my @repos = $self->get_repo($prompt, @reponames);
+ return @repos unless (ref $repos[0]); # get_repo returns 1 when fails
+ foreach my $repo (@repos) {
+ ds_verbose "Configuring $repo->[1]";
+ my $id = $repo->[0];
+ my $str = $repo->[1];
+ eval {
+ # apply new parameters
+ $self->api->edit_project(
+ $id,
+ {
+ %$configparams,
+ $self->desc($repo->[1]),
+ $self->desc_multipart($repo->[1]) });
+ # add hooks if needed
+ $str =~ s#^.*/##;
+ $self->add_hooks($id, $str);
+ };
+ if ($@) {
+ $res++;
+ if ($self->config->no_fail) {
+ ds_verbose $@;
+ ds_warn
+"update_repo has failed for $repo->[1]. Use --verbose to see errors\n";
+ next;
+ } else {
+ ds_warn $@;
+ return 1;
+ }
+ } elsif ($self->config->rename_head) {
+ # 1 - creates new branch if --rename-head
+ my $project = $self->api->project($id);
+ if ($project->{default_branch} ne $self->config->dest_branch) {
+ eval {
+ $self->api->create_branch(
+ $id,
+ {
+ ref => $self->config->source_branch,
+ branch => $self->config->dest_branch,
+ });
+ };
+ if ($@) {
+ ds_debug $@ if ($@);
+ $project = undef;
+ }
+
+ eval {
+ $self->api->edit_project($id,
+ { default_branch => $self->config->dest_branch });
+ # delete old branch only if "create_branch" succeed
+ if ($project) {
+ $self->api->delete_branch($id,
+ $self->config->source_branch);
+ }
+ };
+ if ($@) {
+ $res++;
+ if ($self->config->no_fail) {
+ ds_verbose $@;
+ ds_warn
+"Branch rename has failed for $repo->[1]. Use --verbose to see errors\n";
+ next;
+ } else {
+ ds_warn $@;
+ return 1;
+ }
+ }
+ } else {
+ ds_verbose "Head already renamed for $str";
+ }
+ }
+ ds_verbose "Project $str updated";
+ }
+ return $res;
+}
+
+sub access_level {
+ my ($self) = @_;
+ my $user_id = $self->api->current_user()->{id};
+ if ($self->group_id) {
+ my $tmp = $self->api->group_member($self->group_id, $user_id);
+ unless ($tmp) {
+ my $members
+ = $self->api->paginator('all_group_members', $self->group_id,
+ { query => $user_id });
+ while ($_ = $members->next) {
+ return $_->{access_level} if ($_->{id} eq $user_id);
+ }
+ ds_warn "You're not member of this group";
+ return 0;
+ }
+ return $tmp->{access_level};
+ }
+ return $GITLAB_ACCESS_LEVEL_OWNER;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/update_safe.pm b/lib/Devscripts/Salsa/update_safe.pm
new file mode 100644
index 0000000..6d32e88
--- /dev/null
+++ b/lib/Devscripts/Salsa/update_safe.pm
@@ -0,0 +1,22 @@
+# launches check_repo and launch uscan_repo if user agrees with this changes
+package Devscripts::Salsa::update_safe;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+with 'Devscripts::Salsa::check_repo';
+with 'Devscripts::Salsa::update_repo';
+
+sub update_safe {
+ my $self = shift;
+ my ($res, $fails) = $self->_check_repo(@_);
+ return 0 unless ($res);
+ return $res
+ if (ds_prompt("$res packages misconfigured, update them ? (Y/n) ")
+ =~ refuse);
+ $Devscripts::Salsa::update_repo::prompt = 0;
+ return $self->_update_repo(@$fails);
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/update_user.pm b/lib/Devscripts/Salsa/update_user.pm
new file mode 100644
index 0000000..f7dfeba
--- /dev/null
+++ b/lib/Devscripts/Salsa/update_user.pm
@@ -0,0 +1,38 @@
+# Updates user role in a group
+package Devscripts::Salsa::update_user;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub update_user {
+ my ($self, $level, $user) = @_;
+ unless ($level and $user) {
+ ds_warn "Usage $0 update_user <level> <userid>";
+ return 1;
+ }
+ unless ($self->group_id) {
+ ds_warn "Unable to update user without --group-id";
+ return 1;
+ }
+
+ my $id = $self->username2id($user);
+ my $al = $self->levels_name($level);
+ return 1
+ if (
+ $ds_yes < 0
+ and ds_prompt(
+"You're going to accept $user as $level in group $self->{group_id}. Continue (Y/n) "
+ ) =~ refuse
+ );
+ $self->api->update_group_member(
+ $self->group_id,
+ $id,
+ {
+ access_level => $al,
+ });
+ ds_warn "User $user removed from group " . $self->group_id;
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Salsa/whoami.pm b/lib/Devscripts/Salsa/whoami.pm
new file mode 100644
index 0000000..176e591
--- /dev/null
+++ b/lib/Devscripts/Salsa/whoami.pm
@@ -0,0 +1,24 @@
+# Gives information on token owner
+package Devscripts::Salsa::whoami;
+
+use strict;
+use Devscripts::Output;
+use Moo::Role;
+
+sub whoami {
+ my ($self) = @_;
+ my $current_user = $self->api->current_user;
+ print <<END;
+Id : $current_user->{id}
+Username: $current_user->{username}
+Name : $current_user->{name}
+Email : $current_user->{email}
+State : $current_user->{state}
+END
+ $self->cache->{user}->{ $current_user->{id} } = $current_user->{username};
+ $self->cache->{user_id}->{ $current_user->{username} }
+ = $current_user->{id};
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Set.pm b/lib/Devscripts/Set.pm
new file mode 100644
index 0000000..9ad4e1f
--- /dev/null
+++ b/lib/Devscripts/Set.pm
@@ -0,0 +1,126 @@
+# Copyright Bill Allombert <ballombe@debian.org> 2001.
+# Modifications copyright 2002 Julian Gilbey <jdg@debian.org>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+package Devscripts::Set;
+
+use strict;
+
+BEGIN {
+ use Exporter ();
+ use vars qw(@EXPORT @ISA %EXPORT_TAGS);
+ @EXPORT = qw(SetMinus SetInter SetUnion);
+ @ISA = qw(Exporter);
+ %EXPORT_TAGS = ();
+}
+
+# Several routines to work with arrays whose elements are unique
+# (here called sets)
+
+=head1 NAME
+
+Devscripts::Set - Functions for handling sets.
+
+=head1 SYNOPSIS
+
+use Devscripts::Set;
+
+@set=ListToSet(@list);
+
+@setdiff=SetMinus(\@set1,\@set2);
+
+@setinter=SetInter(\@set1,\@set2);
+
+@setunion=SetUnion(\@set1,\@set2);
+
+=head1 DESCRIPTION
+
+ListToSet: Make a set (array with duplicates removed) from a list of
+items given by an array.
+
+SetMinus, SetInter, SetUnion: Compute the set theoretic difference,
+intersection, union of two sets given as arrays.
+
+=cut
+
+# Transforms a list to a set, removing duplicates
+# input: list
+# output: set
+
+sub ListToSet (@) {
+ my %items;
+
+ grep $items{$_}++, @_;
+
+ return keys %items;
+}
+
+# Compute the set-theoretic difference of two sets.
+# input: ref to Set 1, ref to Set 2
+# output: set
+
+sub SetMinus ($$) {
+ my ($set1, $set2) = @_;
+ my %items;
+
+ grep $items{$_}++, @$set1;
+ grep $items{$_}--, @$set2;
+
+ return grep $items{$_} > 0, keys %items;
+}
+
+# Compute the set-theoretic intersection of two sets.
+# input: ref to Set 1, ref to Set 2
+# output: set
+
+sub SetInter ($$) {
+ my ($set1, $set2) = @_;
+ my %items;
+
+ grep $items{$_}++, @$set1;
+ grep $items{$_}++, @$set2;
+
+ return grep $items{$_} == 2, keys %items;
+}
+
+#Compute the set-theoretic union of two sets.
+#input: ref to Set 1, ref to Set 2
+#output: set
+
+sub SetUnion ($$) {
+ my ($set1, $set2) = @_;
+ my %items;
+
+ grep $items{$_}++, @$set1;
+ grep $items{$_}++, @$set2;
+
+ return grep $items{$_} > 0, keys %items;
+}
+
+1;
+
+=head1 AUTHOR
+
+Bill Allombert <ballombe@debian.org>
+
+=head1 COPYING
+
+Copyright 2001 Bill Allombert <ballombe@debian.org>
+Modifications Copyright 2002 Julian Gilbey <jdg@debian.org>
+dpkg-depcheck is free software, covered by the GNU General Public License, and
+you are welcome to change it and/or distribute copies of it under
+certain conditions. There is absolutely no warranty for dpkg-depcheck.
+
+=cut
diff --git a/lib/Devscripts/Uscan/CatchRedirections.pm b/lib/Devscripts/Uscan/CatchRedirections.pm
new file mode 100644
index 0000000..28f99ca
--- /dev/null
+++ b/lib/Devscripts/Uscan/CatchRedirections.pm
@@ -0,0 +1,27 @@
+# dummy subclass used to store all the redirections for later use
+package Devscripts::Uscan::CatchRedirections;
+
+use base 'LWP::UserAgent';
+
+my @uscan_redirections;
+
+sub redirect_ok {
+ my $self = shift;
+ my ($request) = @_;
+ if ($self->SUPER::redirect_ok(@_)) {
+ push @uscan_redirections, $request->uri;
+ return 1;
+ }
+ return 0;
+}
+
+sub get_redirections {
+ return \@uscan_redirections;
+}
+
+sub clear_redirections {
+ undef @uscan_redirections;
+ return;
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/Config.pm b/lib/Devscripts/Uscan/Config.pm
new file mode 100644
index 0000000..5ea97e1
--- /dev/null
+++ b/lib/Devscripts/Uscan/Config.pm
@@ -0,0 +1,392 @@
+
+=head1 NAME
+
+Devscripts::Uscan::Config - uscan configuration object
+
+=head1 SYNOPSIS
+
+ use Devscripts::Uscan::Config;
+ my $config = Devscripts::Uscan::Config->new->parse;
+
+=head1 DESCRIPTION
+
+Uscan configuration object. It can scan configuration files
+(B</etc/devscripts.conf> and B<~/.devscripts>) and command line arguments.
+
+=cut
+
+package Devscripts::Uscan::Config;
+
+use strict;
+
+use Devscripts::Uscan::Output;
+use Exporter 'import';
+use Moo;
+
+extends 'Devscripts::Config';
+
+our $CURRENT_WATCHFILE_VERSION = 4;
+
+use constant default_user_agent => "Debian uscan"
+ . ($main::uscan_version ? " $main::uscan_version" : '');
+
+our @EXPORT = (qw($CURRENT_WATCHFILE_VERSION));
+
+# I - ACCESSORS
+
+# Options + default values
+
+has bare => (is => 'rw');
+has check_dirname_level => (is => 'rw');
+has check_dirname_regex => (is => 'rw');
+has compression => (is => 'rw');
+has copyright_file => (is => 'rw');
+has destdir => (is => 'rw');
+has download => (is => 'rw');
+has download_current_version => (is => 'rw');
+has download_debversion => (is => 'rw');
+has download_version => (is => 'rw');
+has exclusion => (is => 'rw');
+has log => (is => 'rw');
+has orig => (is => 'rw');
+has package => (is => 'rw');
+has pasv => (is => 'rw');
+has http_header => (is => 'rw', default => sub { {} });
+
+# repack to .tar.$zsuffix if 1
+has repack => (is => 'rw');
+has safe => (is => 'rw');
+has signature => (is => 'rw');
+has symlink => (is => 'rw');
+has timeout => (is => 'rw');
+has user_agent => (is => 'rw');
+has uversion => (is => 'rw');
+has watchfile => (is => 'rw');
+
+# II - Options
+
+use constant keys => [
+ # 2.1 - Simple parameters that can be set in ~/.devscripts and command line
+ [
+ 'check-dirname-level=s', 'DEVSCRIPTS_CHECK_DIRNAME_LEVEL',
+ qr/^[012]$/, 1
+ ],
+ [
+ 'check-dirname-regex=s', 'DEVSCRIPTS_CHECK_DIRNAME_REGEX',
+ undef, 'PACKAGE(-.+)?'
+ ],
+ ['dehs!', 'USCAN_DEHS_OUTPUT', sub { $dehs = $_[1]; 1 }],
+ [
+ 'destdir=s',
+ 'USCAN_DESTDIR',
+ sub {
+ if (-d $_[1]) {
+ $_[0]->destdir($_[1]) if (-d $_[1]);
+ return 1;
+ }
+ return (0,
+ "The directory to store downloaded files(\$destdir): $_[1]");
+ },
+ '..'
+ ],
+ ['exclusion!', 'USCAN_EXCLUSION', 'bool', 1],
+ ['timeout=i', 'USCAN_TIMEOUT', qr/^\d+$/, 20],
+ [
+ 'user-agent|useragent=s',
+ 'USCAN_USER_AGENT',
+ qr/\w/,
+ sub {
+ default_user_agent;
+ }
+ ],
+ ['repack', 'USCAN_REPACK', 'bool'],
+ # 2.2 - Simple command line args
+ ['bare', undef, 'bool', 0],
+ ['compression=s'],
+ ['copyright-file=s'],
+ ['download-current-version', undef, 'bool'],
+ ['download-version=s'],
+ ['download-debversion|dversion=s'],
+ ['log', undef, 'bool'],
+ ['package=s'],
+ ['uversion|upstream-version=s'],
+ ['watchfile=s'],
+ # 2.3 - More complex options
+ # http headers (#955268)
+ ['http-header=s', 'USCAN_HTTP_HEADER', undef, sub { {} }],
+
+ # "download" and its aliases
+ [
+ undef,
+ 'USCAN_DOWNLOAD',
+ sub {
+ return (1, 'Bad USCAN_DOWNLOAD value, skipping')
+ unless ($_[1] =~ /^(?:yes|(no))$/i);
+ $_[0]->download(0) if $1;
+ return 1;
+ }
+ ],
+ [
+ 'download|d+',
+ undef,
+ sub {
+ $_[1] =~ s/^yes$/1/i;
+ $_[1] =~ s/^no$/0/i;
+ return (0, "Wrong number of -d")
+ unless ($_[1] =~ /^[0123]$/);
+ $_[0]->download($_[1]);
+ return 1;
+ },
+ 1
+ ],
+ [
+ 'force-download',
+ undef,
+ sub {
+ $_[0]->download(2);
+ }
+ ],
+ ['no-download', undef, sub { $_[0]->download(0); return 1; }],
+ ['overwrite-download', undef, sub { $_[0]->download(3) }],
+
+ # "pasv"
+ [
+ 'pasv|passive',
+ 'USCAN_PASV',
+ sub {
+ return $_[0]->pasv('default')
+ unless ($_[1] =~ /^(yes|0|1|no)$/);
+ $_[0]->pasv({
+ yes => 1,
+ 1 => 1,
+ no => 0,
+ 0 => 0,
+ }->{$1});
+ return 1;
+ },
+ 0
+ ],
+
+ # "safe" and "symlink" and their aliases
+ ['safe|report', 'USCAN_SAFE', 'bool', 0],
+ [
+ 'report-status',
+ undef,
+ sub {
+ $_[0]->safe(1);
+ $verbose ||= 1;
+ }
+ ],
+ ['copy', undef, sub { $_[0]->symlink('copy') }],
+ ['rename', undef, sub { $_[0]->symlink('rename') if ($_[1]); 1; }],
+ [
+ 'symlink!',
+ 'USCAN_SYMLINK',
+ sub {
+ $_[0]->symlink(
+ $_[1] =~ /^(no|0|rename)$/ ? $1
+ : $_[1] =~ /^(yes|1|symlink)$/ ? 'symlink'
+ : 'no'
+ );
+ return 1;
+ },
+ 'symlink'
+ ],
+ # "signature" and its aliases
+ ['signature!', undef, 'bool', 1],
+ ['skipsignature|skip-signature', undef, sub { $_[0]->signature(-1) }],
+ # "verbose" and its aliases
+ ['debug', undef, sub { $verbose = 2 }],
+ ['extra-debug', undef, sub { $verbose = 3 }],
+ ['no-verbose', undef, sub { $verbose = 0; return 1; }],
+ [
+ 'verbose|v+',
+ 'USCAN_VERBOSE',
+ sub {
+ $verbose = ($_[1] =~ /^yes$/i ? 1 : $_[1] =~ /^(\d)$/ ? $1 : 0);
+ return 1;
+ }
+ ],
+ # Display version
+ [
+ 'version',
+ undef,
+ sub {
+ if ($_[1]) { $_[0]->version; exit 0 }
+ }
+ ]];
+
+use constant rules => [
+ sub {
+ my $self = shift;
+ if ($self->package) {
+ $self->download(0)
+ unless ($self->download > 1); # compatibility
+ return (0,
+"The --package option requires to set the --watchfile option, too."
+ ) unless defined $self->watchfile;
+ }
+ $self->download(0) if ($self->safe == 1 and $self->download == 1);
+ return 1;
+ },
+ # $signature: -1 = no downloading signature and no verifying signature,
+ # 0 = no downloading signature but verifying signature,
+ # 1 = downloading signature and verifying signature
+ sub {
+ my $self = shift;
+ $self->signature(-1)
+ if $self->download == 0; # Change default 1 -> -1
+ return 1;
+ },
+ sub {
+ if (defined $_[0]->watchfile and @ARGV) {
+ return (0, "Can't have directory arguments if using --watchfile");
+ }
+ return 1;
+ },
+];
+
+# help methods
+sub usage {
+ my ($self) = @_;
+ print <<"EOF";
+Usage: $progname [options] [dir ...]
+ Process watch files in all .../debian/ subdirs of those listed (or the
+ current directory if none listed) to check for upstream releases.
+Options:
+ --no-conf, --noconf
+ Don\'t read devscripts config files;
+ must be the first option given
+ --no-verbose Don\'t report verbose information.
+ --verbose, -v Report verbose information.
+ --debug, -vv Report verbose information including the downloaded
+ web pages as processed to STDERR for debugging.
+ --extra-debug, -vvv Report also remote content during "search" step
+ --dehs Send DEHS style output (XML-type) to STDOUT, while
+ send all other uscan output to STDERR.
+ --no-dehs Use only traditional uscan output format (default)
+ --download, -d
+ Download the new upstream release (default)
+ --force-download, -dd
+ Download the new upstream release, even if up-to-date
+ (may not overwrite the local file)
+ --overwrite-download, -ddd
+ Download the new upstream release, even if up-to-date
+ (may overwrite the local file)
+ --no-download, --nodownload
+ Don\'t download and report information.
+ Previously downloaded tarballs may be used.
+ Change default to --skip-signature.
+ --signature Download signature and verify (default)
+ --no-signature Don\'t download signature but verify if already downloaded.
+ --skip-signature
+ Don\'t bother download signature nor verify it.
+ --safe, --report
+ avoid running unsafe scripts by skipping both the repacking
+ of the downloaded package and the updating of the new
+ source tree. Change default to --no-download and
+ --skip-signature.
+ --report-status (= --safe --verbose)
+ --download-version VERSION
+ Specify the version which the upstream release must
+ match in order to be considered, rather than using the
+ release with the highest version
+ --download-debversion VERSION
+ Specify the Debian package version to download the
+ corresponding upstream release version. The
+ dversionmangle and uversionmangle rules are
+ considered.
+ --download-current-version
+ Download the currently packaged version
+ --check-dirname-level N
+ Check parent directory name?
+ N=0 never check parent directory name
+ N=1 only when $progname changes directory (default)
+ N=2 always check parent directory name
+ --check-dirname-regex REGEX
+ What constitutes a matching directory name; REGEX is
+ a Perl regular expression; the string \`PACKAGE\' will
+ be replaced by the package name; see manpage for details
+ (default: 'PACKAGE(-.+)?')
+ --destdir Path of directory to which to download.
+ --package PACKAGE
+ Specify the package name rather than examining
+ debian/changelog; must use --upstream-version and
+ --watchfile with this option, no directory traversing
+ will be performed, no actions (even downloading) will be
+ carried out
+ --upstream-version VERSION
+ Specify the current upstream version in use rather than
+ parsing debian/changelog to determine this
+ --watchfile FILE
+ Specify the watch file rather than using debian/watch;
+ no directory traversing will be done in this case
+ --bare Disable all site specific special case codes to perform URL
+ redirections and page content alterations.
+ --no-exclusion Disable automatic exclusion of files mentioned in
+ debian/copyright field Files-Excluded and Files-Excluded-*
+ --pasv Use PASV mode for FTP connections
+ --no-pasv Don\'t use PASV mode for FTP connections (default)
+ --no-symlink Don\'t rename nor repack upstream tarball
+ --timeout N Specifies how much time, in seconds, we give remote
+ servers to respond (default 20 seconds)
+ --user-agent, --useragent
+ Override the default user agent string
+ --log Record md5sum changes of repackaging
+ --help Show this message
+ --version Show version information
+
+Options passed on to mk-origtargz:
+ --symlink Create a correctly named symlink to downloaded file (default)
+ --rename Rename instead of symlinking
+ --copy Copy instead of symlinking
+ --repack Repack downloaded archives to change compression
+ --compression [ gzip | bzip2 | lzma | xz ]
+ When the upstream sources are repacked, use compression COMP
+ for the resulting tarball (default: gzip)
+ --copyright-file FILE
+ Remove files matching the patterns found in FILE
+
+Default settings modified by devscripts configuration files:
+$self->{modified_conf_msg}
+EOF
+}
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version $main::uscan_version
+This code is copyright 1999-2006 by Julian Gilbey and 2018 by Xavier Guimard,
+all rights reserved.
+Original code by Christoph Lameter.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+1;
+__END__
+=head1 SEE ALSO
+
+L<uscan>, L<Devscripts::Config>
+
+=head1 AUTHOR
+
+B<uscan> was originally written by Christoph Lameter
+E<lt>clameter@debian.orgE<gt> (I believe), modified by Julian Gilbey
+E<lt>jdg@debian.orgE<gt>. HTTP support was added by Piotr Roszatycki
+E<lt>dexter@debian.orgE<gt>. B<uscan> was rewritten in Perl by Julian Gilbey.
+Xavier Guimard E<lt>yadd@debian.orgE<gt> rewrote uscan in object
+oriented Perl.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2002-2006 by Julian Gilbey <jdg@debian.org>,
+2018 by Xavier Guimard <yadd@debian.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+=cut
diff --git a/lib/Devscripts/Uscan/Ctype/nodejs.pm b/lib/Devscripts/Uscan/Ctype/nodejs.pm
new file mode 100644
index 0000000..6a89063
--- /dev/null
+++ b/lib/Devscripts/Uscan/Ctype/nodejs.pm
@@ -0,0 +1,36 @@
+package Devscripts::Uscan::Ctype::nodejs;
+
+use strict;
+
+use Moo;
+use JSON;
+use Devscripts::Uscan::Output;
+
+has dir => (is => 'ro');
+has pkg => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ $_[0]->{dir} . '/package.json';
+ });
+
+sub version {
+ my ($self) = @_;
+ return unless $self->dir and -d $self->dir;
+ unless (-r $self->pkg) {
+ uscan_warn "Unable to read $self->{pkg}, skipping current version";
+ return;
+ }
+ my ($version, $content);
+ {
+ local $/ = undef;
+ open my $f, $self->pkg;
+ $content = <$f>;
+ close $f;
+ }
+ eval { $version = decode_json($content)->{version}; };
+ uscan_warn $@ if $@;
+ return $version;
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/Ctype/perl.pm b/lib/Devscripts/Uscan/Ctype/perl.pm
new file mode 100644
index 0000000..ea06cfb
--- /dev/null
+++ b/lib/Devscripts/Uscan/Ctype/perl.pm
@@ -0,0 +1,36 @@
+package Devscripts::Uscan::Ctype::perl;
+
+use strict;
+
+use Moo;
+use JSON;
+use Devscripts::Uscan::Output;
+
+has dir => (is => 'ro');
+has pkg => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ $_[0]->{dir} . '/META.json';
+ });
+
+sub version {
+ my ($self) = @_;
+ return unless $self->dir and -d $self->dir;
+ unless (-r $self->pkg) {
+ uscan_warn "Unable to read $self->{pkg}, skipping current version";
+ return;
+ }
+ my ($version, $content);
+ {
+ local $/ = undef;
+ open my $f, $self->pkg;
+ $content = <$f>;
+ close $f;
+ }
+ eval { $version = decode_json($content)->{version}; };
+ uscan_warn $@ if $@;
+ return $version;
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/Downloader.pm b/lib/Devscripts/Uscan/Downloader.pm
new file mode 100644
index 0000000..292884f
--- /dev/null
+++ b/lib/Devscripts/Uscan/Downloader.pm
@@ -0,0 +1,303 @@
+package Devscripts::Uscan::Downloader;
+
+use strict;
+use Cwd qw/cwd abs_path/;
+use Devscripts::Uscan::CatchRedirections;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::Utils;
+use Dpkg::IPC;
+use File::DirList;
+use File::Find;
+use File::Temp qw/tempdir/;
+use File::Touch;
+use Moo;
+use URI;
+
+our $haveSSL;
+
+has git_upstream => (is => 'rw');
+
+BEGIN {
+ eval { require LWP::UserAgent; };
+ if ($@) {
+ my $progname = basename($0);
+ if ($@ =~ /^Can\'t locate LWP\/UserAgent\.pm/) {
+ die "$progname: you must have the libwww-perl package installed\n"
+ . "to use this script";
+ } else {
+ die "$progname: problem loading the LWP::UserAgent module:\n $@\n"
+ . "Have you installed the libwww-perl package?";
+ }
+ }
+ eval { require LWP::Protocol::https; };
+ $haveSSL = $@ ? 0 : 1;
+}
+
+has agent =>
+ (is => 'rw', default => sub { "Debian uscan $main::uscan_version" });
+has timeout => (is => 'rw');
+has pasv => (
+ is => 'rw',
+ default => 'default',
+ trigger => sub {
+ my ($self, $nv) = @_;
+ if ($nv) {
+ uscan_verbose "Set passive mode: $self->{pasv}";
+ $ENV{'FTP_PASSIVE'} = $self->pasv;
+ } elsif ($ENV{'FTP_PASSIVE'}) {
+ uscan_verbose "Unset passive mode";
+ delete $ENV{'FTP_PASSIVE'};
+ }
+ });
+has destdir => (is => 'rw');
+
+# 0: no repo, 1: shallow clone, 2: full clone
+has gitrepo_state => (
+ is => 'rw',
+ default => sub { 0 });
+has git_export_all => (
+ is => 'rw',
+ default => sub { 0 });
+has user_agent => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ my ($self) = @_;
+ my $user_agent
+ = Devscripts::Uscan::CatchRedirections->new(env_proxy => 1);
+ $user_agent->timeout($self->timeout);
+ $user_agent->agent($self->agent);
+
+ # Strip Referer header for Sourceforge to avoid SF sending back a
+ # "200 OK" with a <meta refresh=...> redirect
+ $user_agent->add_handler(
+ 'request_prepare' => sub {
+ my ($request, $ua, $h) = @_;
+ $request->remove_header('Referer');
+ },
+ m_hostname => 'sourceforge.net',
+ );
+ $self->{user_agent} = $user_agent;
+ });
+
+has ssl => (is => 'rw', default => sub { $haveSSL });
+
+has headers => (
+ is => 'ro',
+ default => sub { {} });
+
+sub download ($$$$$$$$) {
+ my (
+ $self, $url, $fname, $optref, $base,
+ $pkg_dir, $pkg, $mode, $gitrepo_dir
+ ) = @_;
+ my ($request, $response);
+ $mode ||= $optref->mode;
+ if ($mode eq 'http') {
+ if ($url =~ /^https/ and !$self->ssl) {
+ uscan_die "$progname: you must have the "
+ . "liblwp-protocol-https-perl package installed\n"
+ . "to use https URLs";
+ }
+
+ # substitute HTML entities
+ # Is anything else than "&amp;" required? I doubt it.
+ uscan_verbose "Requesting URL:\n $url";
+ my $headers = HTTP::Headers->new;
+ $headers->header('Accept' => '*/*');
+ $headers->header('Referer' => $base);
+ my $uri_o = URI->new($url);
+ foreach my $k (keys %{ $self->headers }) {
+ if ($k =~ /^(.*?)@(.*)$/) {
+ my $baseUrl = $1;
+ my $hdr = $2;
+ if ($url =~ m#^\Q$baseUrl\E(?:/.*)?$#) {
+ $headers->header($hdr => $self->headers->{$k});
+ uscan_verbose "Set per-host custom header $hdr for $url";
+ } else {
+ uscan_debug "$url does not start with $1";
+ }
+ } else {
+ uscan_warn "Malformed http-header: $k";
+ }
+ }
+ $request = HTTP::Request->new('GET', $url, $headers);
+ $response = $self->user_agent->request($request, $fname);
+ if (!$response->is_success) {
+ uscan_warn((defined $pkg_dir ? "In directory $pkg_dir, d" : "D")
+ . "ownloading\n $url failed: "
+ . $response->status_line);
+ return 0;
+ }
+ } elsif ($mode eq 'ftp') {
+ uscan_verbose "Requesting URL:\n $url";
+ $request = HTTP::Request->new('GET', "$url");
+ $response = $self->user_agent->request($request, $fname);
+ if (!$response->is_success) {
+ uscan_warn(
+ (defined $pkg_dir ? "In directory $pkg_dir, d" : "D")
+ . "ownloading\n $url failed: "
+ . $response->status_line);
+ return 0;
+ }
+ } else { # elsif ($$optref{'mode'} eq 'git')
+ my $destdir = $self->destdir;
+ my $curdir = cwd();
+ $fname =~ m%(.*)/$pkg-([^_/]*)\.tar\.(gz|xz|bz2|lzma|zstd?)%;
+ my $dst = $1;
+ my $abs_dst = abs_path($dst);
+ my $ver = $2;
+ my $suffix = $3;
+ my ($gitrepo, $gitref) = split /[[:space:]]+/, $url, 2;
+ my $clean = sub {
+ uscan_exec_no_fail('rm', '-fr', $gitrepo_dir);
+ };
+ my $clean_and_die = sub {
+ $clean->();
+ uscan_die @_;
+ };
+
+ if ($mode eq 'svn') {
+ my $tempdir = tempdir(CLEANUP => 1);
+ my $old_umask = umask(oct('022'));
+ uscan_exec('svn', 'export', $url, "$tempdir/$pkg-$ver");
+ umask($old_umask);
+ find({
+ wanted => sub {
+ return if !-d $File::Find::name;
+ my ($newest) = grep { $_ ne '.' && $_ ne '..' }
+ map { $_->[13] } @{ File::DirList::list($_, 'M') };
+ return if !$newest;
+ my $touch
+ = File::Touch->new(reference => $_ . '/' . $newest);
+ $touch->touch($_);
+ },
+ bydepth => 1,
+ no_chdir => 1,
+ },
+ "$tempdir/$pkg-$ver"
+ );
+ uscan_exec(
+ 'tar', '-C',
+ $tempdir, '--sort=name',
+ '--owner=root', '--group=root',
+ '-cvf', "$abs_dst/$pkg-$ver.tar",
+ "$pkg-$ver"
+ );
+ } elsif ($self->git_upstream) {
+ my ($infodir, $attr_file, $attr_bkp);
+ if ($self->git_export_all) {
+ # override any export-subst and export-ignore attributes
+ spawn(
+ exec => [qw|git rev-parse --git-path info/|],
+ to_string => \$infodir,
+ );
+ chomp $infodir;
+ mkdir $infodir unless -e $infodir;
+ spawn(
+ exec => [qw|git rev-parse --git-path info/attributes|],
+ to_string => \$attr_file,
+ );
+ chomp $attr_file;
+ spawn(
+ exec =>
+ [qw|git rev-parse --git-path info/attributes-uscan|],
+ to_string => \$attr_bkp,
+ );
+ chomp $attr_bkp;
+ rename $attr_file, $attr_bkp if -e $attr_file;
+ my $attr_fh;
+
+ unless (open($attr_fh, '>', $attr_file)) {
+ rename $attr_bkp, $attr_file if -e $attr_bkp;
+ uscan_die("could not open $attr_file for writing");
+ }
+ print $attr_fh "* -export-subst\n* -export-ignore\n";
+ close $attr_fh;
+ }
+
+ uscan_exec_no_fail('git', 'archive', '--format=tar',
+ "--prefix=$pkg-$ver/", "--output=$abs_dst/$pkg-$ver.tar",
+ $gitref) == 0
+ or $clean_and_die->("git archive failed");
+
+ if ($self->git_export_all) {
+ # restore attributes
+ if (-e $attr_bkp) {
+ rename $attr_bkp, $attr_file;
+ } else {
+ unlink $attr_file;
+ }
+ }
+ } else {
+ if ($self->gitrepo_state == 0) {
+ if ($optref->gitmode eq 'shallow') {
+ my $tag = $gitref;
+ $tag =~ s#^refs/(?:tags|heads)/##;
+ uscan_exec('git', 'clone', '--bare', '--depth=1', '-b',
+ $tag, $base, "$destdir/$gitrepo_dir");
+ $self->gitrepo_state(1);
+ } else {
+ uscan_exec('git', 'clone', '--bare', $base,
+ "$destdir/$gitrepo_dir");
+ $self->gitrepo_state(2);
+ }
+ }
+ if ($self->git_export_all) {
+ # override any export-subst and export-ignore attributes
+ my ($infodir, $attr_file);
+ spawn(
+ exec => [
+ 'git', "--git-dir=$destdir/$gitrepo_dir",
+ 'rev-parse', '--git-path', 'info/'
+ ],
+ to_string => \$infodir,
+ );
+ chomp $infodir;
+ mkdir $infodir unless -e $infodir;
+ spawn(
+ exec => [
+ 'git', "--git-dir=$destdir/$gitrepo_dir",
+ 'rev-parse', '--git-path',
+ 'info/attributes'
+ ],
+ to_string => \$attr_file,
+ );
+ chomp $attr_file;
+ my $attr_fh;
+ $clean_and_die->("could not open $attr_file for writing")
+ unless open($attr_fh, '>', $attr_file);
+ print $attr_fh "* -export-subst\n* -export-ignore\n";
+ close $attr_fh;
+ }
+
+ uscan_exec_no_fail(
+ 'git', "--git-dir=$destdir/$gitrepo_dir",
+ 'archive', '--format=tar',
+ "--prefix=$pkg-$ver/", "--output=$abs_dst/$pkg-$ver.tar",
+ $gitref
+ ) == 0
+ or $clean_and_die->("git archive failed");
+ }
+
+ chdir "$abs_dst" or $clean_and_die->("Unable to chdir($abs_dst): $!");
+ if ($suffix eq 'gz') {
+ uscan_exec("gzip", "-n", "-9", "$pkg-$ver.tar");
+ } elsif ($suffix eq 'xz') {
+ uscan_exec("xz", "$pkg-$ver.tar");
+ } elsif ($suffix eq 'bz2') {
+ uscan_exec("bzip2", "$pkg-$ver.tar");
+ } elsif ($suffix eq 'lzma') {
+ uscan_exec("lzma", "$pkg-$ver.tar");
+ #} elsif ($suffix =~ /^zstd?$/) {
+ # uscan_exec("zstd", "$pkg-$ver.tar");
+ } else {
+ $clean_and_die->("Unknown suffix file to repack: $suffix");
+ }
+ chdir "$curdir" or $clean_and_die->("Unable to chdir($curdir): $!");
+ $clean->();
+ }
+ return 1;
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/FindFiles.pm b/lib/Devscripts/Uscan/FindFiles.pm
new file mode 100644
index 0000000..3f8f8b3
--- /dev/null
+++ b/lib/Devscripts/Uscan/FindFiles.pm
@@ -0,0 +1,257 @@
+
+=head1 NAME
+
+Devscripts::Uscan::FindFiles - watchfile finder
+
+=head1 SYNOPSIS
+
+ use Devscripts::Uscan::Config;
+ use Devscripts::Uscan::FindFiles;
+
+ # Get config
+ my $config = Devscripts::Uscan::Config->new->parse;
+
+ # Search watchfiles
+ my @wf = find_watch_files($config);
+
+=head1 DESCRIPTION
+
+This package exports B<find_watch_files()> function. This function search
+Debian watchfiles following configuration parameters.
+
+=head1 SEE ALSO
+
+L<uscan>, L<Devscripts::Uscan::WatchFile>, L<Devscripts::Uscan::Config>
+
+=head1 AUTHOR
+
+B<uscan> was originally written by Christoph Lameter
+E<lt>clameter@debian.orgE<gt> (I believe), modified by Julian Gilbey
+E<lt>jdg@debian.orgE<gt>. HTTP support was added by Piotr Roszatycki
+E<lt>dexter@debian.orgE<gt>. B<uscan> was rewritten in Perl by Julian Gilbey.
+Xavier Guimard E<lt>yadd@debian.orgE<gt> rewrote uscan in object
+oriented Perl.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2002-2006 by Julian Gilbey <jdg@debian.org>,
+2018 by Xavier Guimard <yadd@debian.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+=cut
+
+package Devscripts::Uscan::FindFiles;
+
+use strict;
+use filetest 'access';
+use Cwd qw/cwd/;
+use Exporter 'import';
+use Devscripts::Uscan::Output;
+use Devscripts::Versort;
+use Dpkg::Changelog::Parse qw(changelog_parse);
+use File::Basename;
+
+our @EXPORT = ('find_watch_files');
+
+sub find_watch_files {
+ my ($config) = @_;
+ my $opwd = cwd();
+
+ # when --watchfile is used
+ if (defined $config->watchfile) {
+ uscan_verbose "Option --watchfile=$config->{watchfile} used";
+ my ($config) = (@_);
+
+ # no directory traversing then, and things are very simple
+ if (defined $config->package) {
+
+ # no need to even look for a changelog!
+ return (
+ ['.', $config->package, $config->uversion, $config->watchfile]
+ );
+ } else {
+ # Check for debian/changelog file
+ until (-r 'debian/changelog') {
+ chdir '..' or uscan_die "can't chdir ..: $!";
+ if (cwd() eq '/') {
+ uscan_die "Are you in the source code tree?\n"
+ . " Cannot find readable debian/changelog anywhere!";
+ }
+ }
+
+ my ($package, $debversion, $uversion)
+ = scan_changelog($config, $opwd, 1);
+
+ return ([cwd(), $package, $uversion, $config->watchfile]);
+ }
+ }
+
+ # when --watchfile is not used, scan watch files
+ push @ARGV, '.' if !@ARGV;
+ {
+ local $, = ',';
+ uscan_verbose "Scan watch files in @ARGV";
+ }
+
+ # Run find to find the directories. We will handle filenames with spaces
+ # correctly, which makes this code a little messier than it would be
+ # otherwise.
+ my @dirs;
+ open FIND, '-|', 'find', @ARGV,
+ qw{-follow -type d ( -name .git -prune -o -name debian -print ) }
+ or uscan_die "Couldn't exec find: $!";
+
+ while (<FIND>) {
+ chomp;
+ push @dirs, $_;
+ uscan_debug "Found $_";
+ }
+ close FIND;
+
+ uscan_die "No debian directories found" unless @dirs;
+
+ my @debdirs = ();
+
+ my $origdir = cwd;
+ for my $dir (@dirs) {
+ $dir =~ s%/debian$%%;
+
+ unless (chdir $origdir) {
+ uscan_warn "Couldn't chdir back to $origdir, skipping: $!";
+ next;
+ }
+ unless (chdir $dir) {
+ uscan_warn "Couldn't chdir $dir, skipping: $!";
+ next;
+ }
+
+ uscan_verbose "Check debian/watch and debian/changelog in $dir";
+
+ # Check for debian/watch file
+ if (-r 'debian/watch') {
+ unless (-r 'debian/changelog') {
+ uscan_warn
+ "Problems reading debian/changelog in $dir, skipping";
+ next;
+ }
+ my ($package, $debversion, $uversion)
+ = scan_changelog($config, $opwd);
+ next unless ($package);
+
+ uscan_verbose
+ "package=\"$package\" version=\"$uversion\" (no epoch/revision)";
+ push @debdirs, [$debversion, $dir, $package, $uversion];
+ }
+ }
+
+ uscan_warn "No watch file found" unless @debdirs;
+
+ # Was there a --upstream-version option?
+ if (defined $config->uversion) {
+ if (@debdirs == 1) {
+ $debdirs[0][3] = $config->uversion;
+ } else {
+ uscan_warn
+"ignoring --upstream-version as more than one debian/watch file found";
+ }
+ }
+
+ # Now sort the list of directories, so that we process the most recent
+ # directories first, as determined by the package version numbers
+ @debdirs = Devscripts::Versort::deb_versort(@debdirs);
+
+ # Now process the watch files in order. If a directory d has
+ # subdirectories d/sd1/debian and d/sd2/debian, which each contain watch
+ # files corresponding to the same package, then we only process the watch
+ # file in the package with the latest version number.
+ my %donepkgs;
+ my @results;
+ for my $debdir (@debdirs) {
+ shift @$debdir; # don't need the Debian version number any longer
+ my $dir = $$debdir[0];
+ my $parentdir = dirname($dir);
+ my $package = $$debdir[1];
+ my $version = $$debdir[2];
+
+ if (exists $donepkgs{$parentdir}{$package}) {
+ uscan_warn
+"Skipping $dir/debian/watch\n as this package has already been found";
+ next;
+ }
+
+ unless (chdir $origdir) {
+ uscan_warn "Couldn't chdir back to $origdir, skipping: $!";
+ next;
+ }
+ unless (chdir $dir) {
+ uscan_warn "Couldn't chdir $dir, skipping: $!";
+ next;
+ }
+
+ uscan_verbose
+"$dir/debian/changelog sets package=\"$package\" version=\"$version\"";
+ push @results, [$dir, $package, $version, "debian/watch", cwd];
+ }
+ unless (chdir $origdir) {
+ uscan_die "Couldn't chdir back to $origdir! $!";
+ }
+ return @results;
+}
+
+sub scan_changelog {
+ my ($config, $opwd, $die) = @_;
+ my $out
+ = $die
+ ? sub { uscan_die(@_) }
+ : sub { uscan_warn($_[0] . ', skipping'); return undef; };
+
+ # Figure out package info we need
+ my $changelog = eval { changelog_parse(); };
+ if ($@) {
+ return $out->("Problems parsing debian/changelog");
+ }
+
+ my ($package, $debversion, $uversion);
+ $package = $changelog->{Source};
+ return $out->("Problem determining the package name from debian/changelog")
+ unless defined $package;
+ $debversion = $changelog->{Version};
+ return $out->("Problem determining the version from debian/changelog")
+ unless defined $debversion;
+ uscan_verbose
+"package=\"$package\" version=\"$debversion\" (as seen in debian/changelog)";
+
+ # Check the directory is properly named for safety
+ if ($config->check_dirname_level == 2
+ or ($config->check_dirname_level == 1 and cwd() ne $opwd)) {
+ my $good_dirname;
+ my $re = $config->check_dirname_regex;
+ $re =~ s/PACKAGE/\Q$package\E/g;
+ if ($re =~ m%/%) {
+ $good_dirname = (cwd() =~ m%^$re$%);
+ } else {
+ $good_dirname = (basename(cwd()) =~ m%^$re$%);
+ }
+ return $out->("The directory name "
+ . basename(cwd())
+ . " doesn't match the requirement of\n"
+ . " --check-dirname-level=$config->{check_dirname_level} --check-dirname-regex=$re .\n"
+ . " Set --check-dirname-level=0 to disable this sanity check feature."
+ ) unless $good_dirname;
+ }
+
+ # Get current upstream version number
+ if (defined $config->uversion) {
+ $uversion = $config->uversion;
+ } else {
+ $uversion = $debversion;
+ $uversion =~ s/-[^-]+$//; # revision
+ $uversion =~ s/^\d+://; # epoch
+ }
+ return ($package, $debversion, $uversion);
+}
+1;
diff --git a/lib/Devscripts/Uscan/Keyring.pm b/lib/Devscripts/Uscan/Keyring.pm
new file mode 100644
index 0000000..0af6088
--- /dev/null
+++ b/lib/Devscripts/Uscan/Keyring.pm
@@ -0,0 +1,168 @@
+package Devscripts::Uscan::Keyring;
+
+use strict;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::Utils;
+use Dpkg::IPC;
+use File::Copy qw/copy move/;
+use File::Which;
+use File::Path qw/make_path remove_tree/;
+use File::Temp qw/tempfile tempdir/;
+use List::Util qw/first/;
+
+sub new {
+ my ($class) = @_;
+ my $keyring;
+ my $havegpgv = first { which $_ } qw(gpgv2 gpgv);
+ my $havegpg = first { which $_ } qw(gpg2 gpg);
+ uscan_die("Please install gpgv or gpgv2.") unless defined $havegpgv;
+ uscan_die("Please install gnupg or gnupg2.") unless defined $havegpg;
+
+ # upstream/signing-key.pgp and upstream-signing-key.pgp are deprecated
+ # but supported
+ if (-r "debian/upstream/signing-key.asc") {
+ $keyring = "debian/upstream/signing-key.asc";
+ } else {
+ my $binkeyring = first { -r $_ } qw(
+ debian/upstream/signing-key.pgp
+ debian/upstream-signing-key.pgp
+ );
+ if (defined $binkeyring) {
+ make_path('debian/upstream', { mode => 0700, verbose => 'true' });
+
+ # convert to the policy complying armored key
+ uscan_verbose(
+ "Found upstream binary signing keyring: $binkeyring");
+
+ # Need to convert to an armored key
+ $keyring = "debian/upstream/signing-key.asc";
+ uscan_warn "Found deprecated binary keyring ($binkeyring). "
+ . "Please save it in armored format in $keyring. For example:\n"
+ . " gpg --output $keyring --enarmor $binkeyring";
+ spawn(
+ exec => [
+ $havegpg,
+ '--homedir' => "/dev/null",
+ '--no-options', '-q', '--batch', '--no-default-keyring',
+ '--output' => $keyring,
+ '--enarmor', $binkeyring
+ ],
+ wait_child => 1
+ );
+ uscan_warn("Generated upstream signing keyring: $keyring");
+ move $binkeyring, "$binkeyring.backup";
+ uscan_verbose(
+ "Renamed upstream binary signing keyring: $binkeyring.backup");
+ }
+ }
+
+ # Need to convert an armored key to binary for use by gpgv
+ my $gpghome;
+ if (defined $keyring) {
+ uscan_verbose("Found upstream signing keyring: $keyring");
+ if ($keyring =~ m/\.asc$/) { # always true
+ $gpghome = tempdir(CLEANUP => 1);
+ my $newkeyring = "$gpghome/trustedkeys.gpg";
+ spawn(
+ exec => [
+ $havegpg,
+ '--homedir' => $gpghome,
+ '--no-options', '-q', '--batch', '--no-default-keyring',
+ '--output' => $newkeyring,
+ '--dearmor', $keyring
+ ],
+ wait_child => 1
+ );
+ $keyring = $newkeyring;
+ }
+ }
+
+ # Return undef if not key found
+ else {
+ return undef;
+ }
+ my $self = bless {
+ keyring => $keyring,
+ gpghome => $gpghome,
+ gpgv => $havegpgv,
+ gpg => $havegpg,
+ }, $class;
+ return $self;
+}
+
+sub verify {
+ my ($self, $sigfile, $newfile) = @_;
+ uscan_verbose(
+ "Verifying OpenPGP self signature of $newfile and extract $sigfile");
+ unless (
+ uscan_exec_no_fail(
+ $self->{gpgv},
+ '--homedir' => $self->{gpghome},
+ '--keyring' => $self->{keyring},
+ '-o' => "$sigfile",
+ "$newfile"
+ ) >> 8 == 0
+ ) {
+ uscan_die("OpenPGP signature did not verify.");
+ }
+}
+
+sub verifyv {
+ my ($self, $sigfile, $base) = @_;
+ uscan_verbose("Verifying OpenPGP signature $sigfile for $base");
+ unless (
+ uscan_exec_no_fail(
+ $self->{gpgv},
+ '--homedir' => '/dev/null',
+ '--keyring' => $self->{keyring},
+ $sigfile, $base
+ ) >> 8 == 0
+ ) {
+ uscan_die("OpenPGP signature did not verify.");
+ }
+}
+
+sub verify_git {
+ my ($self, $gitdir, $tag, $git_upstream) = @_;
+ my $commit;
+ my @dir = $git_upstream ? () : ('--git-dir', $gitdir);
+ spawn(
+ exec => ['git', @dir, 'show-ref', $tag],
+ to_string => \$commit
+ );
+ uscan_die "git tag not found" unless ($commit);
+ $commit =~ s/\s.*$//;
+ chomp $commit;
+ my $file;
+ spawn(
+ exec => ['git', @dir, 'cat-file', '-p', $commit],
+ to_string => \$file
+ );
+ my $dir;
+ spawn(exec => ['mktemp', '-d'], to_string => \$dir);
+ chomp $dir;
+
+ unless ($file =~ /^(.*?\n)(\-+\s*BEGIN PGP SIGNATURE\s*\-+.*)$/s) {
+ uscan_die "Tag $tag is not signed";
+ }
+ open F, ">$dir/txt" or die $!;
+ open S, ">$dir/sig" or die $!;
+ print F $1;
+ print S $2;
+ close F;
+ close S;
+
+ unless (
+ uscan_exec_no_fail(
+ $self->{gpgv},
+ '--homedir' => $self->{gpghome},
+ '--keyring' => $self->{keyring},
+ "$dir/sig", "$dir/txt"
+ ) >> 8 == 0
+ ) {
+ uscan_die("OpenPGP signature did not verify.");
+ }
+ remove_tree($dir);
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/Output.pm b/lib/Devscripts/Uscan/Output.pm
new file mode 100644
index 0000000..77126cf
--- /dev/null
+++ b/lib/Devscripts/Uscan/Output.pm
@@ -0,0 +1,129 @@
+package Devscripts::Uscan::Output;
+
+use strict;
+use Devscripts::Output;
+use Exporter 'import';
+use File::Basename;
+
+our @EXPORT = (
+ @Devscripts::Output::EXPORT, qw(
+ uscan_msg uscan_verbose dehs_verbose uscan_warn uscan_debug uscan_msg_raw
+ uscan_extra_debug uscan_die dehs_output $dehs $verbose $dehs_tags
+ $dehs_start_output $dehs_end_output $found
+ ));
+
+# ACCESSORS
+our ($dehs, $dehs_tags, $dehs_start_output, $dehs_end_output, $found)
+ = (0, {}, 0, 0);
+
+our $progname = basename($0);
+
+sub printwarn_raw {
+ my ($msg, $w) = @_;
+ if ($w or $dehs) {
+ print STDERR "$msg";
+ } else {
+ print "$msg";
+ }
+}
+
+sub printwarn {
+ my ($msg, $w) = @_;
+ chomp $msg;
+ printwarn_raw("$msg\n", $w);
+}
+
+sub uscan_msg_raw {
+ printwarn_raw($_[0]);
+}
+
+sub uscan_msg {
+ printwarn($_[0]);
+}
+
+sub uscan_verbose {
+ ds_verbose($_[0], $dehs);
+}
+
+sub uscan_debug {
+ ds_debug($_[0], $dehs);
+}
+
+sub uscan_extra_debug {
+ ds_extra_debug($_[0], $dehs);
+}
+
+sub dehs_verbose ($) {
+ my $msg = $_[0];
+ push @{ $dehs_tags->{'messages'} }, "$msg\n";
+ uscan_verbose($msg);
+}
+
+sub uscan_warn ($) {
+ my $msg = $_[0];
+ push @{ $dehs_tags->{'warnings'} }, $msg if $dehs;
+ printwarn("$progname warn: $msg" . &Devscripts::Output::who_called, 1);
+}
+
+sub uscan_die ($) {
+ my $msg = $_[0];
+ if ($dehs) {
+ $dehs_tags = { 'errors' => "$msg" };
+ $dehs_end_output = 1;
+ dehs_output();
+ }
+ $msg = "$progname die: $msg" . &Devscripts::Output::who_called;
+ if ($Devscripts::Output::die_on_error) {
+ die $msg;
+ }
+ printwarn($msg, 1);
+}
+
+sub dehs_output () {
+ return unless $dehs;
+
+ if (!$dehs_start_output) {
+ print "<dehs>\n";
+ $dehs_start_output = 1;
+ }
+
+ for my $tag (
+ qw(package debian-uversion debian-mangled-uversion
+ upstream-version upstream-url decoded-checksum
+ status target target-path messages warnings errors)
+ ) {
+ if (exists $dehs_tags->{$tag}) {
+ if (ref $dehs_tags->{$tag} eq "ARRAY") {
+ foreach my $entry (@{ $dehs_tags->{$tag} }) {
+ $entry =~ s/</&lt;/g;
+ $entry =~ s/>/&gt;/g;
+ $entry =~ s/&/&amp;/g;
+ print "<$tag>$entry</$tag>\n";
+ }
+ } else {
+ $dehs_tags->{$tag} =~ s/</&lt;/g;
+ $dehs_tags->{$tag} =~ s/>/&gt;/g;
+ $dehs_tags->{$tag} =~ s/&/&amp;/g;
+ print "<$tag>$dehs_tags->{$tag}</$tag>\n";
+ }
+ }
+ }
+ foreach my $cmp (@{ $dehs_tags->{'component-name'} }) {
+ print qq'<component id="$cmp">\n';
+ foreach my $tag (
+ qw(debian-uversion debian-mangled-uversion
+ upstream-version upstream-url target target-path)
+ ) {
+ my $v = shift @{ $dehs_tags->{"component-$tag"} };
+ print " <component-$tag>$v</component-$tag>\n" if $v;
+ }
+ print "</component>\n";
+ }
+ if ($dehs_end_output) {
+ print "</dehs>\n";
+ }
+
+ # Don't repeat output
+ $dehs_tags = {};
+}
+1;
diff --git a/lib/Devscripts/Uscan/Utils.pm b/lib/Devscripts/Uscan/Utils.pm
new file mode 100644
index 0000000..e93f240
--- /dev/null
+++ b/lib/Devscripts/Uscan/Utils.pm
@@ -0,0 +1,475 @@
+package Devscripts::Uscan::Utils;
+
+use strict;
+use Devscripts::Uscan::Output;
+use Devscripts::Utils;
+use Exporter 'import';
+
+our @EXPORT = (
+ qw(fix_href recursive_regex_dir newest_dir get_compression
+ get_suffix get_priority quoted_regex_parse safe_replace mangle
+ uscan_exec uscan_exec_no_fail)
+);
+
+#######################################################################
+# {{{ code 5: utility functions (download)
+#######################################################################
+sub fix_href ($) {
+ my ($href) = @_;
+
+ # Remove newline (code moved from outside fix_href)
+ $href =~ s/\n//g;
+
+ # Remove whitespace from URLs:
+ # https://www.w3.org/TR/html5/links.html#links-created-by-a-and-area-elements
+ $href =~ s/^\s+//;
+ $href =~ s/\s+$//;
+
+ return $href;
+}
+
+sub recursive_regex_dir ($$$$$$) {
+
+ # If return '', parent code to cause return 1
+ my ($line, $base, $dirversionmangle, $watchfile, $lineptr,
+ $download_version)
+ = @_;
+
+ $base =~ m%^(\w+://[^/]+)/(.*)$%;
+ my $site = $1;
+ my @dirs = ();
+ if (defined $2) {
+ @dirs = split /(\/)/, $2;
+ }
+ my $dir = '/';
+
+ foreach my $dirpattern (@dirs) {
+ if ($dirpattern =~ /\(.*\)/) {
+ uscan_verbose "dir=>$dir dirpattern=>$dirpattern";
+ my $newest_dir = newest_dir($line, $site, $dir, $dirpattern,
+ $dirversionmangle, $watchfile, $lineptr, $download_version);
+ uscan_verbose "newest_dir => '$newest_dir'";
+ if ($newest_dir ne '') {
+ $dir .= "$newest_dir";
+ } else {
+ uscan_debug "No \$newest_dir";
+ return '';
+ }
+ } else {
+ $dir .= "$dirpattern";
+ }
+ }
+ return $site . $dir;
+}
+
+# very similar to code above
+sub newest_dir ($$$$$$$$) {
+
+ # return string $newdir as success
+ # return string '' if error, to cause grand parent code to return 1
+ my ($line, $site, $dir, $pattern, $dirversionmangle, $watchfile,
+ $lineptr, $download_version)
+ = @_;
+ my ($newdir);
+ uscan_verbose "Requesting URL:\n $site$dir";
+ if ($site =~ m%^http(s)?://%) {
+ require Devscripts::Uscan::http;
+ $newdir = Devscripts::Uscan::http::http_newdir($1, @_);
+ } elsif ($site =~ m%^ftp://%) {
+ require Devscripts::Uscan::ftp;
+ $newdir = Devscripts::Uscan::ftp::ftp_newdir(@_);
+ } else {
+ # Neither HTTP nor FTP site
+ uscan_warn "neither HTTP nor FTP site, impossible case for newdir().";
+ $newdir = '';
+ }
+ return $newdir;
+}
+#######################################################################
+# }}} code 5: utility functions (download)
+#######################################################################
+
+#######################################################################
+# {{{ code 6: utility functions (compression)
+#######################################################################
+# Get legal values for compression
+sub get_compression ($) {
+ my $compression = $_[0];
+ my $canonical_compression;
+
+ # be liberal in what you accept...
+ my %opt2comp = (
+ gz => 'gzip',
+ gzip => 'gzip',
+ bz2 => 'bzip2',
+ bzip2 => 'bzip2',
+ lzma => 'lzma',
+ xz => 'xz',
+ zip => 'zip',
+ zst => 'zst',
+ zstd => 'zst',
+ );
+
+ # Normalize compression methods to the names used by Dpkg::Compression
+ if (exists $opt2comp{$compression}) {
+ $canonical_compression = $opt2comp{$compression};
+ } else {
+ uscan_die "$progname: invalid compression, $compression given.";
+ }
+ return $canonical_compression;
+}
+
+# Get legal values for compression suffix
+sub get_suffix ($) {
+ my $compression = $_[0];
+ my $canonical_suffix;
+
+ # be liberal in what you accept...
+ my %opt2suffix = (
+ gz => 'gz',
+ gzip => 'gz',
+ bz2 => 'bz2',
+ bzip2 => 'bz2',
+ lzma => 'lzma',
+ xz => 'xz',
+ zip => 'zip',
+ zst => 'zst',
+ zstd => 'zst',
+ );
+
+ # Normalize compression methods to the names used by Dpkg::Compression
+ if (exists $opt2suffix{$compression}) {
+ $canonical_suffix = $opt2suffix{$compression};
+ } elsif ($compression eq 'default') {
+ require Devscripts::MkOrigtargz::Config;
+ return &Devscripts::MkOrigtargz::Config::default_compression;
+ } else {
+ uscan_die "$progname: invalid suffix, $compression given.";
+ }
+ return $canonical_suffix;
+}
+
+# Get compression priority
+sub get_priority ($) {
+ my $href = $_[0];
+ my $priority = 0;
+ if ($href =~ m/\.tar\.gz/i) {
+ $priority = 1;
+ }
+ if ($href =~ m/\.tar\.bz2/i) {
+ $priority = 2;
+ }
+ if ($href =~ m/\.tar\.lzma/i) {
+ $priority = 3;
+ }
+ #if ($href =~ m/\.tar\.zstd?/i) {
+ # $priority = 4;
+ #}
+ if ($href =~ m/\.tar\.xz/i) {
+ $priority = 4;
+ }
+ return $priority;
+}
+#######################################################################
+# }}} code 6: utility functions (compression)
+#######################################################################
+
+#######################################################################
+# {{{ code 7: utility functions (regex)
+#######################################################################
+sub quoted_regex_parse($) {
+ my $pattern = shift;
+ my %closers = ('{', '}', '[', ']', '(', ')', '<', '>');
+
+ $pattern =~ /^(s|tr|y)(.)(.*)$/;
+ my ($sep, $rest) = ($2, $3 || '');
+ my $closer = $closers{$sep};
+
+ my $parsed_ok = 1;
+ my $regexp = '';
+ my $replacement = '';
+ my $flags = '';
+ my $open = 1;
+ my $last_was_escape = 0;
+ my $in_replacement = 0;
+
+ for my $char (split //, $rest) {
+ if ($char eq $sep and !$last_was_escape) {
+ $open++;
+ if ($open == 1) {
+ if ($in_replacement) {
+
+ # Separator after end of replacement
+ uscan_warn "Extra \"$sep\" after end of replacement.";
+ $parsed_ok = 0;
+ last;
+ } else {
+ $in_replacement = 1;
+ }
+ } else {
+ if ($open > 1) {
+ if ($in_replacement) {
+ $replacement .= $char;
+ } else {
+ $regexp .= $char;
+ }
+ }
+ }
+ } elsif ($char eq $closer and !$last_was_escape) {
+ $open--;
+ if ($open > 0) {
+ if ($in_replacement) {
+ $replacement .= $char;
+ } else {
+ $regexp .= $char;
+ }
+ } elsif ($open < 0) {
+ uscan_warn "Extra \"$closer\" after end of replacement.";
+ $parsed_ok = 0;
+ last;
+ }
+ } else {
+ if ($in_replacement) {
+ if ($open) {
+ $replacement .= $char;
+ } else {
+ $flags .= $char;
+ }
+ } else {
+ if ($open) {
+ $regexp .= $char;
+ } elsif ($char !~ m/\s/) {
+ uscan_warn
+ "Non-whitespace between <...> and <...> (or similars).";
+ $parsed_ok = 0;
+ last;
+ }
+
+ # skip if blanks between <...> and <...> (or similars)
+ }
+ }
+
+ # Don't treat \\ as an escape
+ $last_was_escape = ($char eq '\\' and !$last_was_escape);
+ }
+
+ unless ($in_replacement and $open == 0) {
+ uscan_warn "Empty replacement string.";
+ $parsed_ok = 0;
+ }
+
+ return ($parsed_ok, $regexp, $replacement, $flags);
+}
+
+sub safe_replace($$) {
+ my ($in, $pat) = @_;
+ eval "uscan_debug \"safe_replace input=\\\"\$\$in\\\"\\n\"";
+ $pat =~ s/^\s*(.*?)\s*$/$1/;
+
+ $pat =~ /^(s|tr|y)(.)/;
+ my ($op, $sep) = ($1, $2 || '');
+ my $esc = "\Q$sep\E";
+ my ($parsed_ok, $regexp, $replacement, $flags);
+
+ if ($sep eq '{' or $sep eq '(' or $sep eq '[' or $sep eq '<') {
+ ($parsed_ok, $regexp, $replacement, $flags) = quoted_regex_parse($pat);
+
+ unless ($parsed_ok) {
+ uscan_warn "stop mangling: rule=\"$pat\"\n"
+ . " mangling rule with <...>, (...), {...} failed.";
+ return 0;
+ }
+ } elsif ($pat
+ !~ /^(?:s|tr|y)$esc((?:\\.|[^\\$esc])*)$esc((?:\\.|[^\\$esc])*)$esc([a-z]*)$/
+ ) {
+ $sep = "/" if $sep eq '';
+ uscan_warn "stop mangling: rule=\"$pat\"\n"
+ . " rule doesn't match \"(s|tr|y)$sep.*$sep.*$sep\[a-z\]*\" (or similar).";
+ return 0;
+ } else {
+ ($regexp, $replacement, $flags) = ($1, $2, $3);
+ }
+
+ uscan_debug
+"safe_replace with regexp=\"$regexp\", replacement=\"$replacement\", and flags=\"$flags\"";
+ my $safeflags = $flags;
+ if ($op eq 'tr' or $op eq 'y') {
+ $safeflags =~ tr/cds//cd;
+ if ($safeflags ne $flags) {
+ uscan_warn "stop mangling: rule=\"$pat\"\n"
+ . " flags must consist of \"cds\" only.";
+ return 0;
+ }
+
+ $regexp =~ s/\\(.)/$1/g;
+ $replacement =~ s/\\(.)/$1/g;
+
+ $regexp =~ s/([^-])/'\\x' . unpack 'H*', $1/ge;
+ $replacement =~ s/([^-])/'\\x' . unpack 'H*', $1/ge;
+
+ eval "\$\$in =~ tr<$regexp><$replacement>$flags;";
+
+ if ($@) {
+ uscan_warn "stop mangling: rule=\"$pat\"\n"
+ . " mangling \"tr\" or \"y\" rule execution failed.";
+ return 0;
+ } else {
+ return 1;
+ }
+ } else {
+ $safeflags =~ tr/gix//cd;
+ if ($safeflags ne $flags) {
+ uscan_warn "stop mangling: rule=\"$pat\"\n"
+ . " flags must consist of \"gix\" only.";
+ return 0;
+ }
+
+ my $global = ($flags =~ s/g//);
+ $flags = "(?$flags)" if length $flags;
+
+ my $slashg;
+ if ($regexp =~ /(?<!\\)(\\\\)*\\G/) {
+ $slashg = 1;
+
+ # if it's not initial, it is too dangerous
+ if ($regexp =~ /^.*[^\\](\\\\)*\\G/) {
+ uscan_warn "stop mangling: rule=\"$pat\"\n"
+ . " dangerous use of \\G with regexp=\"$regexp\".";
+ return 0;
+ }
+ }
+
+ # Behave like Perl and treat e.g. "\." in replacement as "."
+ # We allow the case escape characters to remain and
+ # process them later
+ $replacement =~ s/(^|[^\\])\\([^luLUE])/$1$2/g;
+
+ # Unescape escaped separator characters
+ $replacement =~ s/\\\Q$sep\E/$sep/g;
+
+ # If bracketing quotes were used, also unescape the
+ # closing version
+ ### {{ ### (FOOL EDITOR for non-quoted kets)
+ $replacement =~ s/\\\Q}\E/}/g if $sep eq '{';
+ $replacement =~ s/\\\Q]\E/]/g if $sep eq '[';
+ $replacement =~ s/\\\Q)\E/)/g if $sep eq '(';
+ $replacement =~ s/\\\Q>\E/>/g if $sep eq '<';
+
+ # The replacement below will modify $replacement so keep
+ # a copy. We'll need to restore it to the current value if
+ # the global flag was set on the input pattern.
+ my $orig_replacement = $replacement;
+
+ my ($first, $last, $pos, $zerowidth, $matched, @captures) = (0, -1, 0);
+ while (1) {
+ eval {
+ # handle errors due to unsafe constructs in $regexp
+ no re 'eval';
+
+ # restore position
+ pos($$in) = $pos if $pos;
+
+ if ($zerowidth) {
+
+ # previous match was a zero-width match, simulate it to set
+ # the internal flag that avoids the infinite loop
+ $$in =~ /()/g;
+ }
+
+ # Need to use /g to make it use and save pos()
+ $matched = ($$in =~ /$flags$regexp/g);
+
+ if ($matched) {
+
+ # save position and size of the match
+ my $oldpos = $pos;
+ $pos = pos($$in);
+ ($first, $last) = ($-[0], $+[0]);
+
+ if ($slashg) {
+
+ # \G in the match, weird things can happen
+ $zerowidth = ($pos == $oldpos);
+
+ # For example, matching without a match
+ $matched = 0
+ if ( not defined $first
+ or not defined $last);
+ } else {
+ $zerowidth = ($last - $first == 0);
+ }
+ for my $i (0 .. $#-) {
+ $captures[$i] = substr $$in, $-[$i], $+[$i] - $-[$i];
+ }
+ }
+ };
+ if ($@) {
+ uscan_warn "stop mangling: rule=\"$pat\"\n"
+ . " mangling \"s\" rule execution failed.";
+ return 0;
+ }
+
+ # No match; leave the original string untouched but return
+ # success as there was nothing wrong with the pattern
+ return 1 unless $matched;
+
+ # Replace $X
+ $replacement
+ =~ s/[\$\\](\d)/defined $captures[$1] ? $captures[$1] : ''/ge;
+ $replacement
+ =~ s/\$\{(\d)\}/defined $captures[$1] ? $captures[$1] : ''/ge;
+ $replacement =~ s/\$&/$captures[0]/g;
+
+ # Make \l etc escapes work
+ $replacement =~ s/\\l(.)/lc $1/e;
+ $replacement =~ s/\\L(.*?)(\\E|\z)/lc $1/e;
+ $replacement =~ s/\\u(.)/uc $1/e;
+ $replacement =~ s/\\U(.*?)(\\E|\z)/uc $1/e;
+
+ # Actually do the replacement
+ substr $$in, $first, $last - $first, $replacement;
+
+ # Update position
+ $pos += length($replacement) - ($last - $first);
+
+ if ($global) {
+ $replacement = $orig_replacement;
+ } else {
+ last;
+ }
+ }
+
+ return 1;
+ }
+}
+
+# call this as
+# if mangle($watchfile, \$line, 'uversionmangle:',
+# \@{$options{'uversionmangle'}}, \$version) {
+# return 1;
+# }
+sub mangle($$$$$) {
+ my ($watchfile, $lineptr, $name, $rulesptr, $verptr) = @_;
+ foreach my $pat (@{$rulesptr}) {
+ if (!safe_replace($verptr, $pat)) {
+ uscan_warn "In $watchfile, potentially"
+ . " unsafe or malformed $name"
+ . " pattern:\n '$pat'"
+ . " found. Skipping watchline\n"
+ . " $$lineptr";
+ return 1;
+ }
+ uscan_debug "After $name $$verptr";
+ }
+ return 0;
+}
+
+*uscan_exec_no_fail = \&ds_exec_no_fail;
+
+*uscan_exec = \&ds_exec;
+
+#######################################################################
+# }}} code 7: utility functions (regex)
+#######################################################################
+
+1;
diff --git a/lib/Devscripts/Uscan/WatchFile.pm b/lib/Devscripts/Uscan/WatchFile.pm
new file mode 100644
index 0000000..06ab61d
--- /dev/null
+++ b/lib/Devscripts/Uscan/WatchFile.pm
@@ -0,0 +1,517 @@
+
+=head1 NAME
+
+Devscripts::Uscan::WatchFile - watchfile object for L<uscan>
+
+=head1 SYNOPSIS
+
+ use Devscripts::Uscan::Config;
+ use Devscripts::Uscan::WatchFile;
+
+ my $config = Devscripts::Uscan::Config->new({
+ # Uscan config parameters. Example:
+ destdir => '..',
+ });
+
+ # You can use Devscripts::Uscan::FindFiles to find watchfiles
+
+ my $wf = Devscripts::Uscan::WatchFile->new({
+ config => $config,
+ package => $package,
+ pkg_dir => $pkg_dir,
+ pkg_version => $version,
+ watchfile => $watchfile,
+ });
+ return $wf->status if ( $wf->status );
+
+ # Do the job
+ return $wf->process_lines;
+
+=head1 DESCRIPTION
+
+Uscan class to parse watchfiles.
+
+=head1 METHODS
+
+=head2 new() I<(Constructor)>
+
+Parse watch file and creates L<Devscripts::Uscan::WatchLine> objects for
+each line.
+
+=head3 Required parameters
+
+=over
+
+=item config: L<Devscripts::Uscan::Config> object
+
+=item package: Debian package name
+
+=item pkg_dir: Working directory
+
+=item pkg_version: Current Debian package version
+
+=back
+
+=head2 Main accessors
+
+=over
+
+=item watchlines: ref to the array that contains watchlines objects
+
+=item watch_version: format version of the watchfile
+
+=back
+
+=head2 process_lines()
+
+Method that launches Devscripts::Uscan::WatchLine::process() on each watchline.
+
+=head1 SEE ALSO
+
+L<uscan>, L<Devscripts::Uscan::WatchLine>, L<Devscripts::Uscan::Config>,
+L<Devscripts::Uscan::FindFiles>
+
+=head1 AUTHOR
+
+B<uscan> was originally written by Christoph Lameter
+E<lt>clameter@debian.orgE<gt> (I believe), modified by Julian Gilbey
+E<lt>jdg@debian.orgE<gt>. HTTP support was added by Piotr Roszatycki
+E<lt>dexter@debian.orgE<gt>. B<uscan> was rewritten in Perl by Julian Gilbey.
+Xavier Guimard E<lt>yadd@debian.orgE<gt> rewrote uscan in object
+oriented Perl.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2002-2006 by Julian Gilbey <jdg@debian.org>,
+2018 by Xavier Guimard <yadd@debian.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+=cut
+
+package Devscripts::Uscan::WatchFile;
+
+use strict;
+use Devscripts::Uscan::Downloader;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::WatchLine;
+use Dpkg::Version;
+use File::Copy qw/copy move/;
+use List::Util qw/first/;
+use Moo;
+
+use constant {
+ ANY_VERSION => '(?:[-_]?v?(\d[\-+\.:\~\da-zA-Z]*))',
+ ARCHIVE_EXT =>
+ '(?i)(?:\.(?:tar\.xz|tar\.bz2|tar\.gz|tar\.zstd?|zip|tgz|tbz|txz))',
+ DEB_EXT => '(?:[\+~](debian|dfsg|ds|deb)(\.)?(\d+)?$)',
+};
+use constant SIGNATURE_EXT => ARCHIVE_EXT . '(?:\.(?:asc|pgp|gpg|sig|sign))';
+
+# Required new() parameters
+has config => (is => 'rw', required => 1);
+has package => (is => 'ro', required => 1); # Debian package
+has pkg_dir => (is => 'ro', required => 1);
+has pkg_version => (is => 'ro', required => 1);
+has bare => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { $_[0]->config->bare });
+has download => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { $_[0]->config->download });
+has downloader => (
+ is => 'ro',
+ lazy => 1,
+ default => sub {
+ Devscripts::Uscan::Downloader->new({
+ timeout => $_[0]->config->timeout,
+ agent => $_[0]->config->user_agent,
+ pasv => $_[0]->config->pasv,
+ destdir => $_[0]->config->destdir,
+ headers => $_[0]->config->http_header,
+ });
+ },
+);
+has signature => (
+ is => 'rw',
+ required => 1,
+ lazy => 1,
+ default => sub { $_[0]->config->signature });
+has watchfile => (is => 'ro', required => 1); # usually debian/watch
+
+# Internal attributes
+has group => (is => 'rw', default => sub { [] });
+has origcount => (is => 'rw');
+has origtars => (is => 'rw', default => sub { [] });
+has status => (is => 'rw', default => sub { 0 });
+has watch_version => (is => 'rw');
+has watchlines => (is => 'rw', default => sub { [] });
+
+# Values shared between lines
+has shared => (
+ is => 'rw',
+ lazy => 1,
+ default => \&new_shared,
+);
+
+sub new_shared {
+ return {
+ bare => $_[0]->bare,
+ components => [],
+ common_newversion => undef,
+ common_mangled_newversion => undef,
+ download => $_[0]->download,
+ download_version => undef,
+ origcount => undef,
+ origtars => [],
+ previous_download_available => undef,
+ previous_newversion => undef,
+ previous_newfile_base => undef,
+ previous_sigfile_base => undef,
+ signature => $_[0]->signature,
+ uscanlog => undef,
+ };
+}
+has keyring => (
+ is => 'ro',
+ default => sub { Devscripts::Uscan::Keyring->new });
+
+sub BUILD {
+ my ($self, $args) = @_;
+ my $watch_version = 0;
+ my $nextline;
+ $dehs_tags = {};
+
+ uscan_verbose "Process watch file at: $args->{watchfile}\n"
+ . " package = $args->{package}\n"
+ . " version = $args->{pkg_version}\n"
+ . " pkg_dir = $args->{pkg_dir}";
+
+ $self->origcount(0); # reset to 0 for each watch file
+ unless (open WATCH, $args->{watchfile}) {
+ uscan_warn "could not open $args->{watchfile}: $!";
+ return 1;
+ }
+
+ my $lineNumber = 0;
+ while (<WATCH>) {
+ next if /^\s*\#/;
+ next if /^\s*$/;
+ s/^\s*//;
+
+ CHOMP:
+
+ # Reassemble lines split using \
+ chomp;
+ if (s/(?<!\\)\\$//) {
+ if (eof(WATCH)) {
+ uscan_warn
+ "$args->{watchfile} ended with \\; skipping last line";
+ $self->status(1);
+ last;
+ }
+ if ($watch_version > 3) {
+
+ # drop leading \s only if version 4
+ $nextline = <WATCH>;
+ $nextline =~ s/^\s*//;
+ $_ .= $nextline;
+ } else {
+ $_ .= <WATCH>;
+ }
+ goto CHOMP;
+ }
+
+ # "version" must be the first field
+ if (!$watch_version) {
+
+ # Looking for "version" field.
+ if (/^version\s*=\s*(\d+)(\s|$)/) { # Found
+ $watch_version = $1;
+
+ # Note that version=1 watchfiles have no "version" field so
+ # authorizated values are >= 2 and <= CURRENT_WATCHFILE_VERSION
+ if ( $watch_version < 2
+ or $watch_version
+ > $Devscripts::Uscan::Config::CURRENT_WATCHFILE_VERSION) {
+ # "version" field found but has no authorizated value
+ uscan_warn
+"$args->{watchfile} version number is unrecognised; skipping watch file";
+ last;
+ }
+
+ # Next line
+ next;
+ }
+
+ # version=1 is deprecated
+ else {
+ $watch_version = 1;
+ }
+ }
+ if ($watch_version < 3) {
+ uscan_warn
+"$args->{watchfile} is an obsolete version $watch_version watch file;\n"
+ . " please upgrade to a higher version\n"
+ . " (see uscan(1) for details).";
+ }
+
+ # "version" is fixed, parsing lines now
+
+ # Are there any warnings from this part to give if we're using dehs?
+ dehs_output if ($dehs);
+
+ # Handle shell \\ -> \
+ s/\\\\/\\/g if $watch_version == 1;
+
+ # Handle @PACKAGE@ @ANY_VERSION@ @ARCHIVE_EXT@ substitutions
+ s/\@PACKAGE\@/$args->{package}/g;
+ s/\@ANY_VERSION\@/ANY_VERSION/ge;
+ s/\@ARCHIVE_EXT\@/ARCHIVE_EXT/ge;
+ s/\@SIGNATURE_EXT\@/SIGNATURE_EXT/ge;
+ s/\@DEB_EXT\@/DEB_EXT/ge;
+
+ my $line = Devscripts::Uscan::WatchLine->new({
+ # Shared between lines
+ config => $self->config,
+ downloader => $self->downloader,
+ shared => $self->shared,
+ keyring => $self->keyring,
+
+ # Other parameters
+ line => $_,
+ pkg => $self->package,
+ pkg_dir => $self->pkg_dir,
+ pkg_version => $self->pkg_version,
+ watch_version => $watch_version,
+ watchfile => $self->watchfile,
+ });
+ push @{ $self->group }, $lineNumber
+ if ($line->type and $line->type =~ /^(?:group|checksum)$/);
+ push @{ $self->watchlines }, $line;
+ $lineNumber++;
+ }
+
+ close WATCH
+ or $self->status(1),
+ uscan_warn "problems reading $$args->{watchfile}: $!";
+ $self->watch_version($watch_version);
+}
+
+sub process_lines {
+ my ($self) = shift;
+ return $self->process_group if (@{ $self->group });
+ foreach (@{ $self->watchlines }) {
+
+ # search newfile and newversion
+ my $res = $_->process;
+ $self->status($res) if ($res);
+ }
+ return $self->{status};
+}
+
+sub process_group {
+ my ($self) = @_;
+ my $saveDconfig = $self->config->download_version;
+ # Build version
+ my @cur_versions = split /\+~/, $self->pkg_version;
+ my $checksum = 0;
+ my $newChecksum = 0;
+ if ( $cur_versions[$#cur_versions]
+ and $cur_versions[$#cur_versions] =~ s/^cs//) {
+ $checksum = pop @cur_versions;
+ }
+ my (@new_versions, @last_debian_mangled_uversions, @last_versions);
+ my $download = 0;
+ my $last_shared = $self->shared;
+ my $last_comp_version;
+ my @dversion;
+ my @ck_versions;
+ # Isolate component and following lines
+ if (my $v = $self->config->download_version) {
+ @dversion = map { s/\+.*$//; /^cs/ ? () : $_ } split /\+~/, $v;
+ }
+ foreach my $line (@{ $self->watchlines }) {
+ if ( $line->type and $line->type eq 'group'
+ or $line->type eq 'checksum') {
+ $last_shared = $self->new_shared;
+ $last_comp_version = shift @cur_versions if $line->type eq 'group';
+ }
+ if ($line->type and $line->type eq 'group') {
+ $line->{groupDversion} = shift @dversion;
+ }
+ $line->shared($last_shared);
+ $line->pkg_version($last_comp_version || 0);
+ }
+ # Check if download is needed
+ foreach my $line (@{ $self->watchlines }) {
+ next unless ($line->type eq 'group' or $line->type eq 'checksum');
+ # Stop on error
+ $self->config->download_version($line->{groupDversion})
+ if $line->{groupDversion};
+ $self->config->download_version(undef) if $line->type eq 'checksum';
+ if ( $line->parse
+ or $line->search
+ or $line->get_upstream_url
+ or $line->get_newfile_base
+ or ($line->type eq 'group' and $line->cmp_versions)
+ or ($line->ctype and $line->cmp_versions)) {
+ $self->{status} += $line->status;
+ return $self->{status};
+ }
+ $download = $line->shared->{download}
+ if $line->shared->{download} > $download
+ and ($line->type eq 'group' or $line->ctype);
+ }
+ foreach my $line (@{ $self->watchlines }) {
+ next unless $line->type eq 'checksum';
+ $newChecksum
+ = $self->sum($newChecksum, $line->search_result->{newversion});
+ push @ck_versions, $line->search_result->{newversion};
+ }
+ foreach my $line (@{ $self->watchlines }) {
+ next unless ($line->type eq 'checksum');
+ $line->parse_result->{mangled_lastversion} = $checksum;
+ my $tmp = $line->search_result->{newversion};
+ $line->search_result->{newversion} = $newChecksum;
+ unless ($line->ctype) {
+ if ($line->cmp_versions) {
+ $self->{status} += $line->status;
+ return $self->{status};
+ }
+ $download = $line->shared->{download}
+ if $line->shared->{download} > $download;
+ }
+ $line->search_result->{newversion} = $tmp;
+ if ($line->component) {
+ pop @{ $dehs_tags->{'component-upstream-version'} };
+ push @{ $dehs_tags->{'component-upstream-version'} }, $tmp;
+ }
+ }
+ foreach my $line (@{ $self->watchlines }) {
+ # Set same $download for all
+ $line->shared->{download} = $download;
+ # Non "group" lines where not initialized
+ unless ($line->type eq 'group' or $line->type eq 'checksum') {
+ if ( $line->parse
+ or $line->search
+ or $line->get_upstream_url
+ or $line->get_newfile_base
+ or $line->cmp_versions) {
+ $self->{status} += $line->status;
+ return $self->{status};
+ }
+ }
+ if ($line->download_file_and_sig) {
+ $self->{status} += $line->status;
+ return $self->{status};
+ }
+ if ($line->mkorigtargz) {
+ $self->{status} += $line->status;
+ return $self->{status};
+ }
+ if ($line->type eq 'group') {
+ push @new_versions, $line->shared->{common_mangled_newversion}
+ || $line->shared->{common_newversion}
+ || ();
+ push @last_versions, $line->parse_result->{lastversion};
+ push @last_debian_mangled_uversions,
+ $line->parse_result->{mangled_lastversion};
+ }
+ }
+ my $new_version = join '+~', @new_versions;
+ if ($newChecksum) {
+ $new_version .= "+~cs$newChecksum";
+ }
+ if ($checksum) {
+ push @last_versions, "cs$newChecksum";
+ push @last_debian_mangled_uversions, "cs$checksum";
+ }
+ $dehs_tags->{'upstream-version'} = $new_version;
+ $dehs_tags->{'debian-uversion'} = join('+~', @last_versions)
+ if (grep { $_ } @last_versions);
+ $dehs_tags->{'debian-mangled-uversion'} = join '+~',
+ @last_debian_mangled_uversions
+ if (grep { $_ } @last_debian_mangled_uversions);
+ my $mangled_ver
+ = Dpkg::Version->new(
+ "1:" . $dehs_tags->{'debian-mangled-uversion'} . "-0",
+ check => 0);
+ my $upstream_ver = Dpkg::Version->new("1:$new_version-0", check => 0);
+ if ($mangled_ver == $upstream_ver) {
+ $dehs_tags->{'status'} = "up to date";
+ } elsif ($mangled_ver > $upstream_ver) {
+ $dehs_tags->{'status'} = "only older package available";
+ } else {
+ $dehs_tags->{'status'} = "newer package available";
+ }
+ foreach my $line (@{ $self->watchlines }) {
+ my $path = $line->destfile or next;
+ my $ver = $line->shared->{common_mangled_newversion};
+ $path =~ s/\Q$ver\E/$new_version/;
+ uscan_warn "rename $line->{destfile} to $path\n";
+ rename $line->{destfile}, $path;
+ if ($dehs_tags->{"target-path"} eq $line->{destfile}) {
+ $dehs_tags->{"target-path"} = $path;
+ $dehs_tags->{target} =~ s/\Q$ver\E/$new_version/;
+ } else {
+ for (
+ my $i = 0 ;
+ $i < @{ $dehs_tags->{"component-target-path"} } ;
+ $i++
+ ) {
+ if ($dehs_tags->{"component-target-path"}->[$i] eq
+ $line->{destfile}) {
+ $dehs_tags->{"component-target-path"}->[$i] = $path;
+ $dehs_tags->{"component-target"}->[$i]
+ =~ s/\Q$ver\E/$new_version/
+ or die $ver;
+ }
+ }
+ }
+ if ($line->signature_available) {
+ rename "$line->{destfile}.asc", "$path.asc";
+ rename "$line->{destfile}.sig", "$path.sig";
+ }
+ }
+ if (@ck_versions) {
+ my $v = join '+~', @ck_versions;
+ if ($dehs) {
+ $dehs_tags->{'decoded-checksum'} = $v;
+ } else {
+ uscan_verbose 'Checksum ref: ' . join('+~', @ck_versions) . "\n";
+ }
+ }
+ return 0;
+}
+
+sub sum {
+ my ($self, @versions) = @_;
+ my (@res, @str);
+ foreach my $v (@versions) {
+ my @tmp = grep { $_ ne '.' } version_split_digits($v);
+ for (my $i = 0 ; $i < @tmp ; $i++) {
+ $str[$i] //= '';
+ $res[$i] //= 0;
+ if ($tmp[$i] =~ /^\d+$/) {
+ $res[$i] += $tmp[$i];
+ } else {
+ uscan_die
+"Checksum supports only digits in versions, $tmp[$i] is not accepted";
+ }
+ }
+ }
+ for (my $i = 0 ; $i < @res ; $i++) {
+ my $tmp = shift @str;
+ $res[$i] .= $tmp if $tmp ne '';
+ }
+ push @res, @str;
+ return join '.', @res;
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/WatchLine.pm b/lib/Devscripts/Uscan/WatchLine.pm
new file mode 100644
index 0000000..b707be7
--- /dev/null
+++ b/lib/Devscripts/Uscan/WatchLine.pm
@@ -0,0 +1,1850 @@
+
+=pod
+
+=head1 NAME
+
+Devscripts::Uscan::WatchLine - watch line object for L<uscan>
+
+=head1 DESCRIPTION
+
+Uscan class to parse watchfiles.
+
+=head1 MAIN METHODS
+
+=cut
+
+package Devscripts::Uscan::WatchLine;
+
+use strict;
+use Cwd qw/abs_path/;
+use Devscripts::Uscan::Keyring;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::Utils;
+use Dpkg::IPC;
+use Dpkg::Version;
+use File::Basename;
+use File::Copy;
+use File::Spec::Functions qw/catfile/;
+use HTTP::Headers;
+use Moo;
+use Text::ParseWords;
+
+#################
+### ACCESSORS ###
+#################
+
+=head2 new() I<(Constructor)>
+
+=head3 Required parameters
+
+=over
+
+=item B<shared>: ref to hash containing line options shared between lines. See
+L<Devscripts::Uscan::WatchFile> code to see required keys.
+
+=item B<keyring>: L<Devscripts::Uscan::Keyring> object
+
+=item B<config>: L<Devscripts::Uscan::Config> object
+
+=item B<downloader>: L<Devscripts::Uscan::Downloader> object
+
+=item B<line>: search line (assembled in one line)
+
+=item B<pkg>: Debian package name
+
+=item B<pkg_dir>: Debian package source directory
+
+=item B<pkg_version>: Debian package version
+
+=item B<watchfile>: Current watchfile
+
+=item B<watch_version>: Version of current watchfile
+
+=back
+
+=cut
+
+foreach (
+
+ # Shared attributes stored in WatchFile object (ref to WatchFile value)
+ 'shared', 'keyring', 'config',
+
+ # Other
+ 'downloader', # Devscripts::Uscan::Downloader object
+ 'line', # watch line string (concatenated line over the tailing \ )
+ 'pkg', # source package name found in debian/changelog
+ 'pkg_dir', # usually .
+ 'pkg_version', # last source package version
+ # found in debian/changelog
+ 'watchfile', # usually debian/watch
+ 'watch_version', # usually 4 (or 3)
+) {
+ has $_ => (is => 'rw', required => 1);
+}
+
+has repack => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { $_[0]->config->{repack} },
+);
+
+has safe => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { $_[0]->config->{safe} },
+);
+
+has symlink => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { $_[0]->config->{symlink} },
+);
+
+has versionmode => (
+ is => 'rw',
+ lazy => 1,
+ default => sub { 'newer' },
+);
+
+has destfile => (is => 'rw');
+has sigfile => (is => 'rw');
+
+# 2 - Line options read/write attributes
+
+foreach (qw(
+ component ctype hrefdecode repacksuffix unzipopt searchmode
+ dirversionmangle downloadurlmangle dversionmangle filenamemangle pagemangle
+ oversionmangle oversionmanglepagemangle pgpsigurlmangle uversionmangle
+ versionmangle
+ )
+) {
+ has $_ => (
+ is => 'rw',
+ (/mangle/ ? (default => sub { [] }) : ()));
+}
+
+has compression => (
+ is => 'rw',
+ lazy => 1,
+ default => sub {
+ $_[0]->config->compression
+ ? get_compression($_[0]->config->compression)
+ : undef;
+ },
+);
+has versionless => (is => 'rw');
+
+# 4 - Internal attributes
+has style => (is => 'rw', default => sub { 'new' });
+has status => (is => 'rw', default => sub { 0 });
+foreach (
+ qw(badversion
+ signature_available must_download)
+) {
+ has $_ => (is => 'rw', default => sub { 0 });
+}
+foreach (qw(mangled_version)) {
+ has $_ => (is => 'rw');
+}
+foreach (qw(sites basedirs patterns)) {
+ has $_ => (is => 'rw', default => sub { [] });
+}
+
+# 5 - Results
+foreach (qw(parse_result search_result)) {
+ has $_ => (is => 'rw', default => sub { {} });
+}
+foreach (qw(force_repack type upstream_url newfile_base)) {
+ has $_ => (is => 'rw');
+}
+
+# 3.1 - Attributes initialized with default value, modified by line content
+has date => (
+ is => 'rw',
+ default => sub { '%Y%m%d' },
+);
+has decompress => (
+ is => 'rw',
+ default => sub { 0 },
+);
+has gitexport => (
+ is => 'rw',
+ default => sub { 'default' },
+);
+has gitmode => (
+ is => 'rw',
+ default => sub { 'shallow' },
+);
+has mode => (
+ is => 'rw',
+ default => sub { 'LWP' },
+);
+has pgpmode => (
+ is => 'rw',
+ default => sub { 'default' },
+);
+has pretty => (
+ is => 'rw',
+ default => sub { '0.0~git%cd.%h' },
+);
+
+# 3.2 - Self build attributes
+
+has gitrepo_dir => ( # Working repository used only within uscan.
+ is => 'ro',
+ lazy => 1,
+ builder => sub {
+ $_[0]->{component}
+ ? $_[0]->{pkg} . "-temporary.$$." . $_[0]->{component} . '.git'
+ : $_[0]->{pkg} . "-temporary.$$.git";
+ });
+has headers => (
+ is => 'ro',
+ default => sub {
+ my $h = HTTP::Headers->new;
+ $h->header(
+ 'X-uscan-features' => 'enhanced-matching',
+ 'Accept' => '*/*'
+ );
+ return $h;
+ },
+);
+
+my $minversion = '';
+
+###############
+# Main method #
+###############
+
+=head2 process()
+
+Launches all needed methods in this order: parse(), search(),
+get_upstream_url(), get_newfile_base(), cmp_versions(),
+download_file_and_sig(), mkorigtargz(), clean()
+
+If one method returns a non 0 value, it stops and return this error code.
+
+=cut
+
+sub process {
+ my ($self) = @_;
+
+ # - parse line
+ $self->parse
+
+ # - search newfile and newversion
+ or $self->search
+
+ # - determine upstream_url
+ or $self->get_upstream_url
+
+ # - determine newfile_base
+ or $self->get_newfile_base
+
+ # - compare versions
+ or $self->cmp_versions
+
+ # - download
+ or $self->download_file_and_sig
+
+ # - make orig.tar.gz
+ or $self->mkorigtargz
+
+ # - clean (used by git)
+ or $self->clean;
+ return $self->status;
+}
+
+#########
+# STEPS #
+#########
+
+=head2 Steps
+
+=cut
+
+# I - parse
+
+=head3 parse()
+
+Parse the line and return 0 if nothing bad happen. It populates
+C<$self-E<gt>parse_result> accessor with a hash that contains the
+following keys:
+
+=over
+
+=item base
+=item filepattern
+=item lastversion
+=item action
+=item site
+=item basedir
+=item mangled_lastversion
+=item pattern
+
+=back
+
+=cut
+
+# watch_version=1: Lines have up to 5 parameters which are:
+#
+# $1 = Remote site
+# $2 = Directory on site
+# $3 = Pattern to match, with (...) around version number part
+# $4 = Last version we have (or 'debian' for the current Debian version)
+# $5 = Actions to take on successful retrieval
+#
+# watch_version=2:
+#
+# For ftp sites:
+# ftp://site.name/dir/path/pattern-(.+)\.tar\.gz [version [action]]
+#
+# For http sites:
+# http://site.name/dir/path/pattern-(.+)\.tar\.gz [version [action]]
+#
+# watch_version=3 and 4: See details in POD.
+#
+# For ftp sites:
+# ftp://site.name/dir/path pattern-(.+)\.tar\.gz [version [action]]
+#
+# For http sites:
+# http://site.name/dir/path pattern-(.+)\.tar\.gz [version [action]]
+#
+# For git sites:
+# http://site.name/dir/path/project.git refs/tags/v([\d\.]+) [version [action]]
+# or
+# http://site.name/dir/path/project.git HEAD [version [action]]
+#
+# For svn sites:
+# http://site.name/dir/path/project/tags v([\d\.]+)\/ [version [action]]
+# or
+# http://site.name/dir/path/project/trunk HEAD [version [action]]
+#
+# watch_version=3 and 4: See POD for details.
+#
+# Lines can be prefixed with opts=<opts> but can be folded for readability.
+#
+# Then the patterns matched will be checked to find the one with the
+# greatest version number (as determined by the (...) group), using the
+# Debian version number comparison algorithm described below.
+
+sub BUILD {
+ my ($self, $args) = @_;
+ if ($self->watch_version > 3) {
+ my $line = $self->line;
+ if ($line =~ s/^opt(?:ion)?s\s*=\s*//) {
+ unless ($line =~ s/^".*?"(?:\s+|$)//) {
+ $line =~ s/^[^"\s]\S*(?:\s+|$)//;
+ }
+ }
+ my ($base, $filepattern, $lastversion, $action) = split /\s+/, $line,
+ 4;
+ $self->type($lastversion);
+ }
+ return $self;
+}
+
+sub parse {
+ my ($self) = @_;
+ uscan_debug "parse line $self->{line}";
+
+ # Need to clear remembered redirection URLs so we don't try to build URLs
+ # from previous watch files or watch lines
+ $self->downloader->user_agent->clear_redirections;
+
+ my $watchfile = $self->watchfile;
+ my ($action, $base, $basedir, $filepattern, $lastversion, $pattern, $site);
+ $dehs_tags->{package} = $self->pkg;
+
+ # Start parsing the watch line
+ if ($self->watch_version == 1) {
+ my ($dir);
+ ($site, $dir, $filepattern, $lastversion, $action) = split ' ',
+ $self->line, 5;
+ if ( !$lastversion
+ or $site =~ /\(.*\)/
+ or $dir =~ /\(.*\)/) {
+ uscan_warn <<EOF;
+there appears to be a version 2 format line in
+the version 1 watch file $watchfile;
+Have you forgotten a 'version=2' line at the start, perhaps?
+Skipping the line: $self->{line}
+EOF
+ return $self->status(1);
+ }
+ if ($site !~ m%\w+://%) {
+ $site = "ftp://$site";
+ if ($filepattern !~ /\(.*\)/) {
+
+ # watch_version=1 and old style watch file;
+ # pattern uses ? and * shell wildcards; everything from the
+ # first to last of these metachars is the pattern to match on
+ $filepattern =~ s/(\?|\*)/($1/;
+ $filepattern =~ s/(\?|\*)([^\?\*]*)$/$1)$2/;
+ $filepattern =~ s/\./\\./g;
+ $filepattern =~ s/\?/./g;
+ $filepattern =~ s/\*/.*/g;
+ $self->style('old');
+ uscan_warn
+ "Using very old style of filename pattern in $watchfile\n"
+ . " (this might lead to incorrect results): $3";
+ }
+ }
+
+ # Merge site and dir
+ $base = "$site/$dir/";
+ $base =~ s%(?<!:)//%/%g;
+ $base =~ m%^(\w+://[^/]+)%;
+ $site = $1;
+ $pattern = $filepattern;
+
+ # Check $filepattern is OK
+ if ($filepattern !~ /\(.*\)/) {
+ uscan_warn "Filename pattern missing version delimiters ()\n"
+ . " in $watchfile, skipping:\n $self->{line}";
+ return $self->status(1);
+ }
+ } else {
+ # version 2/3/4 watch file
+ if ($self->{line} =~ s/^opt(?:ion)?s\s*=\s*//) {
+ my $opts;
+ if ($self->{line} =~ s/^"(.*?)"(?:\s+|$)//) {
+ $opts = $1;
+ } elsif ($self->{line} =~ s/^([^"\s]\S*)(?:\s+|$)//) {
+ $opts = $1;
+ } else {
+ uscan_warn
+"malformed opts=... in watch file, skipping line:\n$self->{line}";
+ return $self->status(1);
+ }
+
+ # $opts string extracted from the argument of opts=
+ uscan_verbose "opts: $opts";
+
+ # $self->line watch line string without opts=... part
+ uscan_verbose "line: $self->{line}";
+
+ # user-agent strings has ,;: in it so special handling
+ if ( $opts =~ /^\s*user-agent\s*=\s*(.+?)\s*$/
+ or $opts =~ /^\s*useragent\s*=\s*(.+?)\s*$/) {
+ my $user_agent_string = $1;
+ $user_agent_string = $self->config->user_agent
+ if $self->config->user_agent ne
+ &Devscripts::Uscan::Config::default_user_agent;
+ $self->downloader->user_agent->agent($user_agent_string);
+ uscan_verbose "User-agent: $user_agent_string";
+ $opts = '';
+ }
+ my @opts = split /,/, $opts;
+ foreach my $opt (@opts) {
+ next unless ($opt =~ /\S/);
+ uscan_verbose "Parsing $opt";
+ if ($opt =~ /^\s*pasv\s*$/ or $opt =~ /^\s*passive\s*$/) {
+ $self->downloader->pasv(1);
+ } elsif ($opt =~ /^\s*active\s*$/
+ or $opt =~ /^\s*nopasv\s*$/
+ or $opt =~ /^s*nopassive\s*$/) {
+ $self->downloader->pasv(0);
+ }
+
+ # Line option "compression" is ignored if "--compression"
+ # was set in command-line
+ elsif ($opt =~ /^\s*compression\s*=\s*(.+?)\s*$/
+ and not $self->compression) {
+ $self->compression(get_compression($1));
+ } elsif ($opt =~ /^\s*bare\s*$/) {
+
+ # persistent $bare
+ ${ $self->shared->{bare} } = 1;
+ }
+
+ # Boolean line parameter
+ #
+ # $ regexp-assemble <<EOF
+ # decompress
+ # repack
+ # EOF
+ elsif ($opt =~ /^\s*(decompress|repack)\s*$/) {
+ $self->$1(1);
+ }
+
+ # Line parameter with a value
+ #
+ # $ regexp-assemble <<EOF
+ # component
+ # ctype
+ # date
+ # gitexport
+ # gitmode
+ # hrefdecode
+ # mode
+ # pgpmode
+ # pretty
+ # repacksuffix
+ # searchmode
+ # unzipopt
+ # EOF
+ elsif ($opt
+ =~ /^\s*((?:(?:(?:(?:search)?m|hrefdec)od|dat)e|c(?:omponent|type)|git(?:export|mode)|p(?:gpmode|retty)|repacksuffix|unzipopt))\s*=\s*(.+?)\s*$/
+ ) {
+ $self->$1($2);
+ } elsif ($opt =~ /^\s*versionmangle\s*=\s*(.+?)\s*$/) {
+ $self->uversionmangle([split /;/, $1]);
+ $self->dversionmangle([split /;/, $1]);
+ } elsif ($opt =~ /^\s*pgpsigurlmangle\s*=\s*(.+?)\s*$/) {
+ $self->pgpsigurlmangle([split /;/, $1]);
+ $self->pgpmode('mangle');
+ } elsif ($opt =~ /^\s*dversionmangle\s*=\s*(.+?)\s*$/) {
+
+ $self->dversionmangle([
+ map {
+
+ # If dversionmangle is "auto", replace it by
+ # DEB_EXT removal
+ $_ eq 'auto'
+ ? ('s/'
+ . &Devscripts::Uscan::WatchFile::DEB_EXT
+ . '//')
+ : ($_)
+ } split /;/,
+ $1
+ ]);
+ }
+
+ # Handle other *mangle:
+ #
+ # $ regexp-assemble <<EOF
+ # pagemangle
+ # dirversionmangle
+ # uversionmangle
+ # downloadurlmangle
+ # filenamemangle
+ # oversionmangle
+ # EOF
+ elsif ($opt
+ =~ /^\s*((?:d(?:ownloadurl|irversion)|(?:filenam|pag)e|[ou]version)mangle)\s*=\s*(.+?)\s*$/
+ ) {
+ $self->$1([split /;/, $2]);
+ } else {
+ uscan_warn "unrecognized option $opt";
+ }
+ }
+
+ # $self->line watch line string when no opts=...
+ uscan_verbose "line: $self->{line}";
+ }
+
+ if ($self->line eq '') {
+ uscan_verbose "watch line only with opts=\"...\" and no URL";
+ return $self->status(1);
+ }
+
+ # 4 parameter watch line
+ ($base, $filepattern, $lastversion, $action) = split /\s+/,
+ $self->line, 4;
+
+ # 3 parameter watch line (override)
+ if ($base =~ s%/([^/]*\([^/]*\)[^/]*)$%/%) {
+
+ # Last component of $base has a pair of parentheses, so no
+ # separate filepattern field; we remove the filepattern from the
+ # end of $base and rescan the rest of the line
+ $filepattern = $1;
+ (undef, $lastversion, $action) = split /\s+/, $self->line, 3;
+ }
+
+ # Always define "" if not defined
+ $lastversion //= '';
+ $action //= '';
+ if ($self->mode eq 'LWP') {
+ if ($base =~ m%^https?://%) {
+ $self->mode('http');
+ } elsif ($base =~ m%^ftp://%) {
+ $self->mode('ftp');
+ } else {
+ uscan_warn "unknown protocol for LWP: $base";
+ return $self->status(1);
+ }
+ }
+
+ # compression is persistent
+ $self->compression('default') unless ($self->compression);
+
+ # Set $lastversion to the numeric last version
+ # Update $self->versionmode (its default "newer")
+ if (!length($lastversion)
+ or $lastversion =~ /^(group|checksum|debian)$/) {
+ if (!defined $self->pkg_version) {
+ uscan_warn "Unable to determine the current version\n"
+ . " in $watchfile, skipping:\n $self->{line}";
+ return $self->status(1);
+ }
+ $lastversion = $self->pkg_version;
+ } elsif ($lastversion eq 'ignore') {
+ $self->versionmode('ignore');
+ $lastversion = $minversion;
+ } elsif ($lastversion eq 'same') {
+ $self->versionmode('same');
+ $lastversion = $minversion;
+ } elsif ($lastversion =~ m/^prev/) {
+ $self->versionmode('previous');
+
+ # set $lastversion = $previous_newversion later
+ }
+
+ # Check $filepattern has ( ...)
+ if ($filepattern !~ /\([^?].*\)/) {
+ if (($self->mode eq 'git' or $self->mode eq 'svn')
+ and $filepattern eq 'HEAD') {
+ $self->versionless(1);
+ } elsif ($self->mode eq 'git'
+ and $filepattern =~ m&^heads/&) {
+ $self->versionless(1);
+ } elsif ($self->mode eq 'http'
+ and @{ $self->filenamemangle }) {
+ $self->versionless(1);
+ } else {
+ uscan_warn
+ "Tag pattern missing version delimiters () in $watchfile"
+ . ", skipping:\n $self->{line}";
+ return $self->status(1);
+ }
+ }
+
+ # Check validity of options
+ if ($self->mode eq 'ftp'
+ and @{ $self->downloadurlmangle }) {
+ uscan_warn "downloadurlmangle option invalid for ftp sites,\n"
+ . " ignoring downloadurlmangle in $watchfile:\n"
+ . " $self->{line}";
+ return $self->status(1);
+ }
+ if ($self->mode ne 'git' and $self->gitexport ne 'default') {
+ uscan_warn "gitexport option is valid only in git mode,\n"
+ . " ignoring gitexport in $watchfile:\n"
+ . " $self->{line}";
+ return $self->status(1);
+ }
+
+ # Limit use of opts="repacksuffix" to the single upstream package
+ if ($self->repacksuffix and @{ $self->shared->{components} }) {
+ uscan_warn
+"repacksuffix is not compatible with the multiple upstream tarballs;\n"
+ . " use oversionmangle";
+ return $self->status(1);
+ }
+
+ # Allow 2 char shorthands for opts="pgpmode=..." and check
+ if ($self->pgpmode =~ m/^au/) {
+ $self->pgpmode('auto');
+ if (@{ $self->pgpsigurlmangle }) {
+ uscan_warn "Ignore pgpsigurlmangle because pgpmode=auto";
+ $self->pgpsigurlmangle([]);
+ }
+ } elsif ($self->pgpmode =~ m/^ma/) {
+ $self->pgpmode('mangle');
+ if (not @{ $self->pgpsigurlmangle }) {
+ uscan_warn "Missing pgpsigurlmangle. Setting pgpmode=default";
+ $self->pgpmode('default');
+ }
+ } elsif ($self->pgpmode =~ m/^no/) {
+ $self->pgpmode('none');
+ } elsif ($self->pgpmode =~ m/^ne/) {
+ $self->pgpmode('next');
+ } elsif ($self->pgpmode =~ m/^pr/) {
+ $self->pgpmode('previous');
+ $self->versionmode('previous'); # no other value allowed
+ # set $lastversion = $previous_newversion later
+ } elsif ($self->pgpmode =~ m/^se/) {
+ $self->pgpmode('self');
+ } elsif ($self->pgpmode =~ m/^git/) {
+ $self->pgpmode('gittag');
+ } else {
+ $self->pgpmode('default');
+ }
+
+ # For mode=svn, make pgpmode=none the default
+ if ($self->mode eq 'svn') {
+ if ($self->pgpmode eq 'default') {
+ $self->pgpmode('none');
+ } elsif ($self->pgpmode ne 'none') {
+ uscan_die "Only pgpmode=none can be used with mode=svn.\n";
+ }
+ }
+
+ # If PGP used, check required programs and generate files
+ if (@{ $self->pgpsigurlmangle }) {
+ my $pgpsigurlmanglestring = join(";", @{ $self->pgpsigurlmangle });
+ uscan_debug "\$self->{'pgpmode'}=$self->{'pgpmode'}, "
+ . "\$self->{'pgpsigurlmangle'}=$pgpsigurlmanglestring";
+ } else {
+ uscan_debug "\$self->{'pgpmode'}=$self->{'pgpmode'}, "
+ . "\$self->{'pgpsigurlmangle'}=undef";
+ }
+
+ # Check component for duplication and set $orig to the proper
+ # extension string
+ if ($self->pgpmode ne 'previous') {
+ if ($self->component) {
+ if (grep { $_ eq $self->component }
+ @{ $self->shared->{components} }) {
+ uscan_warn "duplicate component name: $self->{component}";
+ return $self->status(1);
+ }
+ push @{ $self->shared->{components} }, $self->component;
+ } else {
+ $self->shared->{origcount}++;
+ if ($self->shared->{origcount} > 1) {
+ uscan_warn "more than one main upstream tarballs listed.";
+
+ # reset variables
+ @{ $self->shared->{components} } = ();
+ $self->{shared}->{common_newversion} = undef;
+ $self->{shared}->{common_mangled_newversion} = undef;
+ $self->{shared}->{previous_newversion} = undef;
+ $self->{shared}->{previous_newfile_base} = undef;
+ $self->{shared}->{previous_sigfile_base} = undef;
+ $self->{shared}->{previous_download_available} = undef;
+ $self->{shared}->{uscanlog} = undef;
+ }
+ }
+ }
+
+ # Allow 2 char shorthands for opts="gitmode=..." and check
+ if ($self->gitmode =~ m/^sh/) {
+ $self->gitmode('shallow');
+ } elsif ($self->gitmode =~ m/^fu/) {
+ $self->gitmode('full');
+ } else {
+ uscan_warn
+ "Override strange manual gitmode '$self->gitmode --> 'shallow'";
+ $self->gitmode('shallow');
+ }
+
+ # Handle sf.net addresses specially
+ if (!$self->shared->{bare} and $base =~ m%^https?://sf\.net/%) {
+ uscan_verbose "sf.net redirection to qa.debian.org/watch/sf.php";
+ $base =~ s%^https?://sf\.net/%https://qa.debian.org/watch/sf.php/%;
+ $filepattern .= '(?:\?.*)?';
+ }
+
+ # Handle pypi.python.org addresses specially
+ if ( !$self->shared->{bare}
+ and $base =~ m%^https?://pypi\.python\.org/packages/source/%) {
+ uscan_verbose "pypi.python.org redirection to pypi.debian.net";
+ $base
+ =~ s%^https?://pypi\.python\.org/packages/source/./%https://pypi.debian.net/%;
+ }
+
+ # Handle pkg-ruby-extras gemwatch addresses specially
+ if ($base
+ =~ m%^https?://pkg-ruby-extras\.alioth\.debian\.org/cgi-bin/gemwatch%
+ ) {
+ uscan_warn
+"redirecting DEPRECATED pkg-ruby-extras.alioth.debian.org/cgi-bin/gemwatch"
+ . " to gemwatch.debian.net";
+ $base
+ =~ s%^https?://pkg-ruby-extras\.alioth\.debian\.org/cgi-bin/gemwatch%https://gemwatch.debian.net%;
+ }
+
+ }
+
+ if ($self->ctype) {
+ my $version;
+ my $mod = "Devscripts::Uscan::Ctype::$self->{ctype}";
+ eval "require $mod";
+ if ($@) {
+ uscan_warn "unknown ctype $self->{ctype}";
+ uscan_debug $@;
+ return $self->status(1);
+ }
+ my $dir = $self->component || '.';
+ my $ctypeTransform = $mod->new({ dir => $dir });
+ if ($version = $ctypeTransform->version) {
+ $lastversion = $version;
+ uscan_verbose "Found version $version for component $dir";
+ $self->versionmode('newer');
+ }
+ }
+
+ # End parsing the watch line for all version=1/2/3/4
+ # all options('...') variables have been set
+
+ # Override the last version with --download-debversion
+ if ($self->config->download_debversion) {
+ $lastversion = $self->config->download_debversion;
+ $lastversion =~ s/-[^-]+$//; # revision
+ $lastversion =~ s/^\d+://; # epoch
+ uscan_verbose
+"specified --download-debversion to set the last version: $lastversion";
+ } elsif ($self->versionmode eq 'previous') {
+ $lastversion = $self->shared->{previous_newversion};
+ # $lastversion is set only if something was downloaded before
+ if ($lastversion) {
+ uscan_verbose "Previous version downloaded: $lastversion";
+ } else {
+ uscan_verbose "Previous version not set, skipping";
+ }
+ } else {
+ uscan_verbose
+"Last orig.tar.* tarball version (from debian/changelog): $lastversion";
+ }
+
+ # And mangle it if requested
+ my $mangled_lastversion = $lastversion;
+ if (
+ mangle(
+ $watchfile, \$self->line,
+ 'dversionmangle:', \@{ $self->dversionmangle },
+ \$mangled_lastversion
+ )
+ ) {
+ return $self->status(1);
+ }
+
+ # Set $download_version etc. if already known
+ if ($self->versionmode eq 'ignore' and $self->config->download_version) {
+ uscan_verbose 'Ignore --download_version for component with "ignore"';
+ } elsif ($self->config->download_version) {
+ $self->shared->{download_version} = $self->config->download_version;
+ $self->shared->{download} = 2
+ if $self->shared->{download} == 1; # Change default 1 -> 2
+ $self->badversion(1);
+ uscan_verbose "Download the --download-version specified version: "
+ . "$self->{shared}->{download_version}";
+ } elsif ($self->config->download_debversion) {
+ $self->shared->{download_version} = $mangled_lastversion;
+ $self->shared->{download} = 2
+ if $self->shared->{download} == 1; # Change default 1 -> 2
+ $self->badversion(1);
+ uscan_verbose "Download the --download-debversion specified version "
+ . "(dversionmangled): $self->{shared}->{download_version}";
+ } elsif ($self->config->download_current_version) {
+ $self->shared->{download_version} = $mangled_lastversion;
+ $self->shared->{download} = 2
+ if $self->shared->{download} == 1; # Change default 1 -> 2
+ $self->badversion(1);
+ uscan_verbose
+ "Download the --download-current-version specified version: "
+ . "$self->{shared}->{download_version}";
+ } elsif ($self->versionmode eq 'same') {
+ unless (defined $self->shared->{common_newversion}) {
+ uscan_warn
+"Unable to set versionmode=prev for the line without opts=pgpmode=prev\n"
+ . " in $watchfile, skipping:\n"
+ . " $self->{line}";
+ return $self->status(1);
+ }
+ $self->shared->{download_version} = $self->shared->{common_newversion};
+ $self->shared->{download} = 2
+ if $self->shared->{download} == 1; # Change default 1 -> 2
+ $self->badversion(1);
+ uscan_verbose "Download secondary tarball with the matching version: "
+ . "$self->{shared}->{download_version}";
+ } elsif ($self->versionmode eq 'previous') {
+ unless ($self->pgpmode eq 'previous'
+ and defined $self->shared->{previous_newversion}) {
+ if ($self->shared->{download}) {
+ uscan_warn
+"Unable to set versionmode=prev for the line without opts=pgpmode=prev\n"
+ . " in $watchfile, skipping:\n $self->{line}";
+ } else {
+ uscan_verbose
+ "Nothing was downloaded before, skipping pgp check";
+ uscan_verbose " line " . $self->line;
+ }
+ return $self->status(1);
+ }
+ $self->shared->{download_version}
+ = $self->shared->{previous_newversion};
+ $self->shared->{download} = 2
+ if $self->shared->{download} == 1; # Change default 1 -> 2
+ $self->badversion(1);
+ uscan_verbose
+ "Download the signature file with the previous tarball's version:"
+ . " $self->{shared}->{download_version}";
+ } else {
+ # $options{'versionmode'} should be debian or ignore
+ if (defined $self->shared->{download_version}) {
+ uscan_die
+ "\$download_version defined after dversionmangle ... strange";
+ } else {
+ uscan_verbose "Last orig.tar.* tarball version (dversionmangled):"
+ . " $mangled_lastversion";
+ }
+ }
+
+ if ($self->watch_version != 1) {
+ if ($self->mode eq 'http' or $self->mode eq 'ftp') {
+ if ($base =~ m%^(\w+://[^/]+)%) {
+ $site = $1;
+ } else {
+ uscan_warn "Can't determine protocol and site in\n"
+ . " $watchfile, skipping:\n"
+ . " $self->{line}";
+ return $self->status(1);
+ }
+
+ # Find the path with the greatest version number matching the regex
+ $base
+ = recursive_regex_dir($self, $base,
+ $self->dirversionmangle, $watchfile, \$self->line,
+ $self->shared->{download_version});
+ if ($base eq '') {
+ return $self->status(1);
+ }
+
+ # We're going to make the pattern
+ # (?:(?:http://site.name)?/dir/path/)?base_pattern
+ # It's fine even for ftp sites
+ $basedir = $base;
+ $basedir =~ s%^\w+://[^/]+/%/%;
+ $basedir =~ s%/[^/]*(?:[#?].*)?$%/%;
+ $pattern
+ = "(?:(?:$site)?" . quotemeta($basedir) . ")?$filepattern";
+ } else {
+ # git tag match is simple
+ $site = $base; # dummy
+ $basedir = ''; # dummy
+ $pattern = $filepattern;
+ }
+ }
+
+ push @{ $self->sites }, $site;
+ push @{ $self->basedirs }, $basedir;
+ push @{ $self->patterns }, $pattern;
+
+ my $match = '';
+
+# Start Checking $site and look for $filepattern which is newer than $lastversion
+ uscan_debug "watch file has:\n"
+ . " \$base = $base\n"
+ . " \$filepattern = $filepattern\n"
+ . " \$lastversion = $lastversion\n"
+ . " \$action = $action\n"
+ . " mode = $self->{mode}\n"
+ . " pgpmode = $self->{pgpmode}\n"
+ . " versionmode = $self->{versionmode}\n"
+ . " \$site = $site\n"
+ . " \$basedir = $basedir";
+
+ $self->parse_result({
+ base => $base,
+ filepattern => $filepattern,
+ lastversion => $lastversion,
+ action => $action,
+ site => $site,
+ basedir => $basedir,
+ mangled_lastversion => $mangled_lastversion,
+ pattern => $pattern,
+ });
+
+# What is the most recent file, based on the filenames?
+# We first have to find the candidates, then we sort them using
+# Devscripts::Versort::upstream_versort (if it is real upstream version string) or
+# Devscripts::Versort::versort (if it is suffixed upstream version string)
+ return $self->status;
+}
+
+# II - search
+
+=head3 search()
+
+Search new file link and new version on the remote site using either:
+
+=over
+
+=item L<Devscripts::Uscan::http>::http_search()
+=item L<Devscripts::Uscan::ftp>::ftp_search()
+=item L<Devscripts::Uscan::git>::git_search()
+=item L<Devscripts::Uscan::svn>::svn_search()
+
+=back
+
+It populates B<$self-E<gt>search_result> hash ref with the following keys:
+
+=over
+
+=item B<newversion>: URL/tag pointing to the file to be downloaded
+=item B<newfile>: version number to be used for the downloaded file
+
+=back
+
+=cut
+
+sub search {
+ my ($self) = @_;
+ uscan_debug "line: search()";
+ my ($newversion, $newfile) = $self->_do('search');
+ unless ($newversion and $newfile) {
+ return $self->status(1);
+ }
+ $self->status and return $self->status;
+ uscan_verbose "Looking at \$base = $self->{parse_result}->{base} with\n"
+ . " \$filepattern = $self->{parse_result}->{filepattern} found\n"
+ . " \$newfile = $newfile\n"
+ . " \$newversion = $newversion\n"
+ . " \$lastversion = $self->{parse_result}->{mangled_lastversion}";
+ $self->search_result({
+ newversion => $newversion,
+ newfile => $newfile,
+ });
+
+ # The original version of the code didn't use (...) in the watch
+ # file to delimit the version number; thus if there is no (...)
+ # in the pattern, we will use the old heuristics, otherwise we
+ # use the new.
+
+ if ($self->style eq 'old') {
+
+ # Old-style heuristics
+ if ($newversion =~ /^\D*(\d+\.(?:\d+\.)*\d+)\D*$/) {
+ $self->search_result->{newversion} = $1;
+ } else {
+ uscan_warn <<"EOF";
+$progname warning: In $self->{watchfile}, couldn\'t determine a
+ pure numeric version number from the file name for watch line
+ $self->{line}
+ and file name $newfile
+ Please use a new style watch file instead!
+EOF
+ $self->status(1);
+ }
+ }
+ return $self->status;
+}
+
+# III - get_upstream_url
+
+=head3 get_upstream_url()
+
+Transform newfile/newversion into upstream url using either:
+
+=over
+
+=item L<Devscripts::Uscan::http>::http_upstream_url()
+=item L<Devscripts::Uscan::ftp>::ftp_upstream_url()
+=item L<Devscripts::Uscan::git>::git_upstream_url()
+=item L<Devscripts::Uscan::svn>::svn_upstream_url()
+
+=back
+
+Result is stored in B<$self-E<gt>upstream_url> accessor.
+
+=cut
+
+sub get_upstream_url {
+ my ($self) = @_;
+ uscan_debug "line: get_upstream_url()";
+ if ( $self->parse_result->{site} =~ m%^https?://%
+ and not $self->mode eq 'git'
+ and not $self->mode eq 'svn') {
+ $self->mode('http');
+ } elsif (not $self->mode) {
+ $self->mode('ftp');
+ }
+ $self->upstream_url($self->_do('upstream_url'));
+ $self->status and return $self->status;
+ uscan_verbose "Upstream URL(+tag) to download is identified as"
+ . " $self->{upstream_url}";
+ return $self->status;
+}
+
+# IV - get_newfile_base
+
+=head3 get_newfile_base()
+
+Calculates the filename (filenamemangled) for downloaded file using either:
+
+=over
+
+=item L<Devscripts::Uscan::http>::http_newfile_base()
+=item L<Devscripts::Uscan::ftp>::ftp_newfile_base()
+=item L<Devscripts::Uscan::git>::git_newfile_base()
+=item L<Devscripts::Uscan::svn>::svn_newfile_base()
+
+=back
+
+Result is stored in B<$self-E<gt>newfile_base> accessor.
+
+=cut
+
+sub get_newfile_base {
+ my ($self) = @_;
+ uscan_debug "line: get_newfile_base()";
+ $self->newfile_base($self->_do('newfile_base'));
+ return $self->status if ($self->status);
+ uscan_verbose
+ "Filename (filenamemangled) for downloaded file: $self->{newfile_base}";
+ return $self->status;
+}
+
+# V - cmp_versions
+
+=head3 cmp_versions()
+
+Compare available and local versions.
+
+=cut
+
+sub cmp_versions {
+ my ($self) = @_;
+ uscan_debug "line: cmp_versions()";
+ my $name = $self->component || $self->pkg;
+ my $mangled_lastversion = $self->parse_result->{mangled_lastversion};
+ unless (defined $self->shared->{common_newversion}) {
+ $self->shared->{common_newversion}
+ = $self->search_result->{newversion};
+ }
+
+ $dehs_tags->{'debian-uversion'} //= $self->parse_result->{lastversion};
+ $dehs_tags->{'debian-mangled-uversion'} //= $mangled_lastversion;
+ $dehs_tags->{'upstream-version'} //= $self->search_result->{newversion};
+ $dehs_tags->{'upstream-url'} //= $self->upstream_url;
+ $dehs_tags->{'component-name'} //= [];
+ $dehs_tags->{'component-upstream-version'} //= [];
+ if ($self->component) {
+ push @{ $dehs_tags->{'component-name'} }, $self->component;
+ push @{ $dehs_tags->{'component-debian-uversion'} },
+ $self->parse_result->{lastversion};
+ push @{ $dehs_tags->{'component-debian-mangled-uversion'} },
+ $mangled_lastversion;
+ push @{ $dehs_tags->{'component-upstream-version'} },
+ $self->search_result->{newversion};
+ push @{ $dehs_tags->{'component-upstream-url'} }, $self->upstream_url;
+ }
+
+ my $mangled_ver
+ = Dpkg::Version->new("1:${mangled_lastversion}-0", check => 0);
+ my $upstream_ver
+ = Dpkg::Version->new("1:$self->{search_result}->{newversion}-0",
+ check => 0);
+ my $compver;
+ if ($mangled_ver == $upstream_ver) {
+ $compver = 'same';
+ } elsif ($mangled_ver > $upstream_ver) {
+ $compver = 'older';
+ } else {
+ $compver = 'newer';
+ }
+
+ # Version dependent $download adjustment
+ if (defined $self->shared->{download_version}
+ and not $self->versionmode eq 'ignore') {
+
+ # Pretend to find a newer upstream version to exit without error
+ uscan_msg "Newest version of $name on remote site is "
+ . "$self->{search_result}->{newversion}, "
+ . "specified download version is $self->{shared}->{download_version}";
+ $found++ unless ($self->versionmode =~ /(?:same|ignore)/);
+ } elsif ($self->versionmode eq 'newer') {
+ if ($compver eq 'newer') {
+ uscan_msg "Newest version of $name on remote site is "
+ . "$self->{search_result}->{newversion}, "
+ . "local version is $self->{parse_result}->{mangled_lastversion}\n"
+ . (
+ $mangled_lastversion eq $self->parse_result->{lastversion}
+ ? ""
+ : " (mangled local version is $mangled_lastversion)\n"
+ );
+
+ # There's a newer upstream version available, which may already
+ # be on our system or may not be
+ uscan_msg " => Newer package available from:\n"
+ . " => $self->{upstream_url}";
+ $dehs_tags->{'status'} //= "newer package available";
+ $main::found++;
+ } elsif ($compver eq 'same') {
+ uscan_verbose "Newest version of $name on remote site is "
+ . $self->search_result->{newversion}
+ . ", local version is $self->{parse_result}->{mangled_lastversion}\n"
+ . (
+ $mangled_lastversion eq $self->parse_result->{lastversion}
+ ? ""
+ : " (mangled local version is $mangled_lastversion)\n"
+ );
+ uscan_verbose " => Package is up to date from:\n"
+ . " => $self->{upstream_url}";
+ $dehs_tags->{'status'} //= "up to date";
+ if ($self->shared->{download} > 1) {
+
+ # 2=force-download or 3=overwrite-download
+ uscan_verbose " => Forcing download as requested";
+ $main::found++;
+ } else {
+ # 0=no-download or 1=download
+ $self->shared->{download} = 0;
+ }
+ } else { # $compver eq 'old'
+ uscan_verbose "Newest version of $name on remote site is "
+ . $self->search_result->{newversion}
+ . ", local version is $self->{parse_result}->{mangled_lastversion}\n"
+ . (
+ $mangled_lastversion eq $self->parse_result->{lastversion}
+ ? ""
+ : " (mangled local version is $mangled_lastversion)\n"
+ );
+ uscan_verbose " => Only older package available from:\n"
+ . " => $self->{upstream_url}";
+ $dehs_tags->{'status'} //= "only older package available";
+ if ($self->shared->{download} > 1) {
+ uscan_verbose " => Forcing download as requested";
+ $main::found++;
+ } else {
+ $self->shared->{download} = 0;
+ }
+ }
+ } elsif ($self->versionmode eq 'ignore') {
+ uscan_msg "Newest version of $name on remote site is "
+ . $self->search_result->{newversion}
+ . ", ignore local version";
+ $dehs_tags->{'status'} //= "package available";
+ } else { # same/previous -- secondary-tarball or signature-file
+ uscan_die "strange ... <version> stanza = same/previous "
+ . "should have defined \$download_version";
+ }
+ return 0;
+}
+
+# VI - download_file_and_sig
+
+=head3 download_file_and_sig()
+
+Download file and, if available and needed, signature files.
+
+=cut
+
+my %already_downloaded;
+
+sub download_file_and_sig {
+ my ($self) = @_;
+ uscan_debug "line: download_file_and_sig()";
+ my $skip_git_vrfy;
+
+ # If we're not downloading or performing signature verification, we can
+ # stop here
+ if (!$self->shared->{download} || $self->shared->{signature} == -1) {
+ return 0;
+ }
+
+ # configure downloader
+ $self->downloader->git_export_all($self->gitexport eq 'all');
+
+ # 6.1 download tarball
+ my $download_available = 0;
+ my $upstream_base = basename($self->upstream_url);
+ $self->signature_available(0);
+ my $sigfile;
+ my $sigfile_base = $self->newfile_base;
+ uscan_die
+"Already downloaded a file named $self->{newfile_base}: use filenamemangle to avoid this"
+ if ($already_downloaded{ $self->{newfile_base} });
+ $already_downloaded{ $self->{newfile_base} } = 1;
+
+ if ($self->pgpmode ne 'previous') {
+
+ # try download package
+ if ($self->shared->{download} == 3
+ and -e "$self->{config}->{destdir}/$self->{newfile_base}") {
+ uscan_verbose
+"Downloading and overwriting existing file: $self->{newfile_base}";
+ $download_available = $self->downloader->download(
+ $self->upstream_url,
+ "$self->{config}->{destdir}/$self->{newfile_base}",
+ $self,
+ $self->parse_result->{base},
+ $self->pkg_dir,
+ $self->pkg,
+ $self->mode
+ );
+ if ($download_available) {
+ dehs_verbose
+ "Successfully downloaded package: $self->{newfile_base}\n";
+ } else {
+ dehs_verbose
+ "Failed to download upstream package: $upstream_base\n";
+ }
+ } elsif (-e "$self->{config}->{destdir}/$self->{newfile_base}") {
+ $download_available = 1;
+ dehs_verbose
+ "Not downloading, using existing file: $self->{newfile_base}\n";
+ $skip_git_vrfy = 1;
+ } elsif ($self->shared->{download} > 0) {
+ uscan_verbose "Downloading upstream package: $upstream_base";
+ $download_available = $self->downloader->download(
+ $self->upstream_url,
+ "$self->{config}->{destdir}/$self->{newfile_base}",
+ $self,
+ $self->parse_result->{base},
+ $self->pkg_dir,
+ $self->pkg,
+ $self->mode,
+ $self->gitrepo_dir,
+ );
+ if ($download_available) {
+ dehs_verbose
+ "Successfully downloaded upstream package: $upstream_base\n";
+ if (@{ $self->filenamemangle }) {
+ dehs_verbose
+ "Renamed upstream package to: $self->{newfile_base}\n";
+ }
+ } else {
+ dehs_verbose
+ "Failed to download upstream package: $upstream_base\n";
+ }
+ } else { # $download = 0,
+ $download_available = 0;
+ dehs_verbose "Not downloading upstream package: $upstream_base\n";
+ }
+ }
+ if ($self->pgpmode eq 'self') {
+ $sigfile_base =~ s/^(.*?)\.[^\.]+$/$1/; # drop .gpg, .asc, ...
+ if ($self->shared->{signature} == -1) {
+ uscan_warn("SKIP Checking OpenPGP signature (by request).\n");
+ $download_available
+ = -1; # can't proceed with self-signature archive
+ $self->signature_available(0);
+ } elsif (!$self->keyring) {
+ uscan_die("FAIL Checking OpenPGP signature (no keyring).\n");
+ } elsif ($download_available == 0) {
+ uscan_warn
+"FAIL Checking OpenPGP signature (no signed upstream tarball downloaded).";
+ return $self->status(1);
+ } else {
+ $self->keyring->verify(
+ "$self->{config}->{destdir}/$sigfile_base",
+ "$self->{config}->{destdir}/$self->{newfile_base}"
+ );
+
+# XXX FIXME XXX extract signature as detached signature to $self->{config}->{destdir}/$sigfile
+ $sigfile = $self->{newfile_base}; # XXX FIXME XXX place holder
+ $self->{newfile_base} = $sigfile_base;
+ $self->signature_available(3);
+ }
+ }
+ if ($self->pgpmode ne 'previous') {
+
+ # Decompress archive if requested and applicable
+ if ($download_available == 1 and $self->{'decompress'}) {
+ my $suffix_gz = $sigfile_base;
+ $suffix_gz =~ s/.*?(\.gz|\.xz|\.bz2|\.lzma|\.zstd?)?$/$1/;
+ if ($suffix_gz eq '.gz') {
+ if (-x '/bin/gunzip') {
+ uscan_exec('/bin/gunzip', "--keep",
+ "$self->{config}->{destdir}/$sigfile_base");
+ $sigfile_base =~ s/(.*?)\.gz/$1/;
+ } else {
+ uscan_warn("Please install gzip.\n");
+ return $self->status(1);
+ }
+ } elsif ($suffix_gz eq '.xz') {
+ if (-x '/usr/bin/unxz') {
+ uscan_exec('/usr/bin/unxz', "--keep",
+ "$self->{config}->{destdir}/$sigfile_base");
+ $sigfile_base =~ s/(.*?)\.xz/$1/;
+ } else {
+ uscan_warn("Please install xz-utils.\n");
+ return $self->status(1);
+ }
+ } elsif ($suffix_gz eq '.bz2') {
+ if (-x '/bin/bunzip2') {
+ uscan_exec('/bin/bunzip2', "--keep",
+ "$self->{config}->{destdir}/$sigfile_base");
+ $sigfile_base =~ s/(.*?)\.bz2/$1/;
+ } else {
+ uscan_warn("Please install bzip2.\n");
+ return $self->status(1);
+ }
+ } elsif ($suffix_gz eq '.lzma') {
+ if (-x '/usr/bin/unlzma') {
+ uscan_exec('/usr/bin/unlzma', "--keep",
+ "$self->{config}->{destdir}/$sigfile_base");
+ $sigfile_base =~ s/(.*?)\.lzma/$1/;
+ } else {
+ uscan_warn "Please install xz-utils or lzma.";
+ return $self->status(1);
+ }
+ } elsif ($suffix_gz =~ /^zstd?$/) {
+ if (-x '/usr/bin/unzstd') {
+ uscan_exec('/usr/bin/unzstd', "--keep",
+ "$self->{config}->{destdir}/$sigfile_base");
+ $sigfile_base =~ s/(.*?)\.zst/$1/;
+ } else {
+ uscan_warn("Please install zstd.\n");
+ return $self->status(1);
+ }
+ } else {
+ uscan_die "Unknown type file to decompress: $sigfile_base";
+ }
+ }
+ }
+
+ # 6.2 download signature
+ my $pgpsig_url;
+ my $suffix_sig;
+ if (($self->pgpmode eq 'default' or $self->pgpmode eq 'auto')
+ and $self->shared->{signature} == 1) {
+ uscan_verbose
+"Start checking for common possible upstream OpenPGP signature files";
+ foreach $suffix_sig (qw(asc gpg pgp sig sign)) {
+ my $sigrequest = HTTP::Request->new(
+ 'HEAD' => "$self->{upstream_url}.$suffix_sig");
+ my $sigresponse
+ = $self->downloader->user_agent->request($sigrequest);
+ if ($sigresponse->is_success()) {
+ if ($self->pgpmode eq 'default') {
+ uscan_warn "Possible OpenPGP signature found at:\n"
+ . " $self->{upstream_url}.$suffix_sig\n"
+ . " * Add opts=pgpsigurlmangle=s/\$/.$suffix_sig/ or "
+ . "opts=pgpmode=auto to debian/watch\n"
+ . " * Add debian/upstream/signing-key.asc.\n"
+ . " See uscan(1) for more details";
+ $self->pgpmode('none');
+ } else { # auto
+ $self->pgpmode('mangle');
+ $self->pgpsigurlmangle(['s/$/.' . $suffix_sig . '/',]);
+ }
+ last;
+ }
+ }
+ uscan_verbose
+ "End checking for common possible upstream OpenPGP signature files";
+ $self->signature_available(0);
+ }
+ if ($self->pgpmode eq 'mangle') {
+ $pgpsig_url = $self->upstream_url;
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'pgpsigurlmangle:', \@{ $self->pgpsigurlmangle },
+ \$pgpsig_url
+ )
+ ) {
+ return $self->status(1);
+ }
+ if (!$suffix_sig) {
+ $suffix_sig = $pgpsig_url;
+ $suffix_sig =~ s/^.*\.//;
+ if ($suffix_sig and $suffix_sig !~ m/^[a-zA-Z]+$/)
+ { # strange suffix
+ $suffix_sig = "pgp";
+ }
+ uscan_debug "Add $suffix_sig suffix based on $pgpsig_url.";
+ }
+ $sigfile = "$sigfile_base.$suffix_sig";
+ if ($self->shared->{signature} == 1) {
+ uscan_verbose "Downloading OpenPGP signature from:\n"
+ . " $pgpsig_url (pgpsigurlmangled)\n as $sigfile";
+ $self->signature_available(
+ $self->downloader->download(
+ $pgpsig_url, "$self->{config}->{destdir}/$sigfile",
+ $self, $self->parse_result->{base},
+ $self->pkg_dir, $self->pkg,
+ $self->mode
+ ));
+ } else { # -1, 0
+ uscan_verbose "Not downloading OpenPGP signature from:\n"
+ . " $pgpsig_url (pgpsigurlmangled)\n as $sigfile";
+ $self->signature_available(
+ (-e "$self->{config}->{destdir}/$sigfile") ? 1 : 0);
+ }
+ } elsif ($self->pgpmode eq 'previous') {
+ $pgpsig_url = $self->upstream_url;
+ $sigfile = $self->newfile_base;
+ if ($self->shared->{signature} == 1) {
+ uscan_verbose "Downloading OpenPGP signature from:\n"
+ . " $pgpsig_url (pgpmode=previous)\n as $sigfile";
+ $self->signature_available(
+ $self->downloader->download(
+ $pgpsig_url, "$self->{config}->{destdir}/$sigfile",
+ $self, $self->parse_result->{base},
+ $self->pkg_dir, $self->pkg,
+ $self->mode
+ ));
+ } else { # -1, 0
+ uscan_verbose "Not downloading OpenPGP signature from:\n"
+ . " $pgpsig_url (pgpmode=previous)\n as $sigfile";
+ $self->signature_available(
+ (-e "$self->{config}->{destdir}/$sigfile") ? 1 : 0);
+ }
+ $download_available = $self->shared->{previous_download_available};
+ $self->{newfile_base} = $self->shared->{previous_newfile_base};
+ $sigfile_base = $self->shared->{previous_sigfile_base};
+ uscan_verbose
+ "Use $self->{newfile_base} as upstream package (pgpmode=previous)";
+ }
+ $self->sigfile("$self->{config}->{destdir}/$sigfile") if ($sigfile);
+
+ # 6.3 verify signature
+ #
+ # 6.3.1 pgpmode
+ if ($self->pgpmode eq 'mangle' or $self->pgpmode eq 'previous') {
+ if ($self->shared->{signature} == -1) {
+ uscan_verbose("SKIP Checking OpenPGP signature (by request).\n");
+ } elsif (!$self->keyring) {
+ uscan_die("FAIL Checking OpenPGP signature (no keyring).\n");
+ } elsif ($download_available == 0) {
+ uscan_warn
+"FAIL Checking OpenPGP signature (no upstream tarball downloaded).";
+ return $self->status(1);
+ } elsif ($self->signature_available == 0) {
+ uscan_die(
+"FAIL Checking OpenPGP signature (no signature file downloaded).\n"
+ );
+ } else {
+ if ($self->shared->{signature} == 0) {
+ uscan_verbose "Use the existing file: $sigfile";
+ }
+ $self->keyring->verifyv(
+ "$self->{config}->{destdir}/$sigfile",
+ "$self->{config}->{destdir}/$sigfile_base"
+ );
+ }
+ $self->shared->{previous_newfile_base} = undef;
+ $self->shared->{previous_sigfile_base} = undef;
+ $self->shared->{previous_newversion} = undef;
+ $self->shared->{previous_download_available} = undef;
+ } elsif ($self->pgpmode eq 'none' or $self->pgpmode eq 'default') {
+ uscan_verbose "Missing OpenPGP signature.";
+ $self->shared->{previous_newfile_base} = undef;
+ $self->shared->{previous_sigfile_base} = undef;
+ $self->shared->{previous_newversion} = undef;
+ $self->shared->{previous_download_available} = undef;
+ } elsif ($self->pgpmode eq 'next') {
+ uscan_verbose
+ "Defer checking OpenPGP signature to the next watch line";
+ $self->shared->{previous_newfile_base} = $self->newfile_base;
+ $self->shared->{previous_sigfile_base} = $sigfile_base;
+ $self->shared->{previous_newversion}
+ = $self->search_result->{newversion};
+ $self->shared->{previous_download_available} = $download_available;
+ uscan_verbose "previous_newfile_base = $self->{newfile_base}";
+ uscan_verbose "previous_sigfile_base = $sigfile_base";
+ uscan_verbose
+ "previous_newversion = $self->{search_result}->{newversion}";
+ uscan_verbose "previous_download_available = $download_available";
+ } elsif ($self->pgpmode eq 'self') {
+ $self->shared->{previous_newfile_base} = undef;
+ $self->shared->{previous_sigfile_base} = undef;
+ $self->shared->{previous_newversion} = undef;
+ $self->shared->{previous_download_available} = undef;
+ } elsif ($self->pgpmode eq 'auto') {
+ uscan_verbose "Don't check OpenPGP signature";
+ } elsif ($self->pgpmode eq 'gittag') {
+ if ($skip_git_vrfy) {
+ uscan_warn "File already downloaded, skipping gpg verification";
+ } elsif (!$self->keyring) {
+ uscan_warn "No keyring file, skipping gpg verification";
+ return $self->status(1);
+ } else {
+ my ($gitrepo, $gitref) = split /[[:space:]]+/, $self->upstream_url;
+ $self->keyring->verify_git(
+ "$self->{downloader}->{destdir}/"
+ . $self->pkg
+ . "-temporary.$$.git",
+ $gitref, $self->downloader->git_upstream
+ );
+ }
+ } else {
+ uscan_warn "strange ... unknown pgpmode = $self->{pgpmode}";
+ return $self->status(1);
+ }
+ my $mangled_newversion = $self->search_result->{newversion};
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'oversionmangle:', \@{ $self->oversionmangle },
+ \$mangled_newversion
+ )
+ ) {
+ return $self->status(1);
+ }
+
+ if (!$self->shared->{common_mangled_newversion}) {
+
+ # $mangled_newversion = version used for the new orig.tar.gz (a.k.a oversion)
+ uscan_verbose
+"New orig.tar.* tarball version (oversionmangled): $mangled_newversion";
+
+ # MUT package always use the same $common_mangled_newversion
+ # MUT disables repacksuffix so it is safe to have this before mk-origtargz
+ $self->shared->{common_mangled_newversion} = $mangled_newversion;
+ }
+ if ($self->pgpmode eq 'next') {
+ uscan_verbose "Read the next watch line (pgpmode=next)";
+ return 0;
+ }
+ if ($self->safe) {
+ uscan_verbose "SKIP generation of orig.tar.* "
+ . "and running of script/uupdate (--safe)";
+ return 0;
+ }
+ if ($download_available == 0) {
+ uscan_warn "No upstream tarball downloaded."
+ . " No further processing with mk_origtargz ...";
+ return $self->status(1);
+ }
+ if ($download_available == -1) {
+ uscan_warn "No upstream tarball unpacked from self signature file."
+ . " No further processing with mk_origtargz ...";
+ return $self->status(1);
+ }
+ if ($self->signature_available == 1 and $self->decompress) {
+ $self->signature_available(2);
+ }
+ $self->search_result->{sigfile} = $sigfile;
+ $self->must_download(1);
+ return $self->status;
+}
+
+# VII - mkorigtargz
+
+=head3 mkorigtargz()
+
+Call L<mk_origtargz> to build source tarball.
+
+=cut
+
+sub mkorigtargz {
+ my ($self) = @_;
+ uscan_debug "line: mkorigtargz()";
+ return 0 unless ($self->must_download);
+ my $mk_origtargz_out;
+ my $path = "$self->{config}->{destdir}/$self->{newfile_base}";
+ my $target = $self->newfile_base;
+ unless ($self->symlink eq "no" or $self->symlink eq "0") {
+ require Devscripts::MkOrigtargz;
+ if ($Devscripts::MkOrigtargz::found_comp) {
+ uscan_verbose
+ "Forcing compression to $Devscripts::MkOrigtargz::found_comp";
+ $self->repack(1);
+ }
+ @ARGV = ();
+ push @ARGV, "--package", $self->pkg;
+ push @ARGV, "--version", $self->shared->{common_mangled_newversion};
+ push @ARGV, '--repack-suffix', $self->repacksuffix
+ if $self->repacksuffix;
+ push @ARGV, "--rename" if $self->symlink eq "rename";
+ push @ARGV, "--copy" if $self->symlink eq "copy";
+ push @ARGV, "--signature", $self->signature_available
+ if ($self->signature_available != 0);
+ push @ARGV, "--signature-file",
+ "$self->{config}->{destdir}/$self->{search_result}->{sigfile}"
+ if ($self->signature_available != 0);
+ push @ARGV, "--repack" if $self->repack;
+ push @ARGV, "--force-repack" if $self->force_repack;
+ push @ARGV, "--component", $self->component
+ if $self->component;
+ push @ARGV, "--compression",
+ $Devscripts::MkOrigtargz::found_comp || $self->compression;
+ push @ARGV, "--directory", $self->config->destdir;
+ push @ARGV, "--copyright-file", "debian/copyright"
+ if ($self->config->exclusion && -e "debian/copyright");
+ push @ARGV, "--copyright-file", $self->config->copyright_file
+ if ($self->config->exclusion && $self->config->copyright_file);
+ push @ARGV, "--unzipopt", $self->unzipopt
+ if $self->unzipopt;
+ push @ARGV, $path;
+ my $tmp = $Devscripts::Output::die_on_error;
+
+ uscan_verbose "Launch mk-origtargz with options:\n "
+ . join(" ", @ARGV);
+ my $mk = Devscripts::MkOrigtargz->new;
+ $mk->do;
+ uscan_die "mk-origtargz failed" if ($mk->status);
+
+ $path = $mk->destfile_nice;
+ $target = basename($path);
+ $self->shared->{common_mangled_newversion} = $1
+ if $target =~ m/[^_]+_(.+)\.orig(?:-.+)?\.tar\.(?:gz|bz2|lzma|xz)$/;
+ uscan_verbose "New orig.tar.* tarball version (after mk-origtargz): "
+ . "$self->{shared}->{common_mangled_newversion}";
+ }
+ push @{ $self->shared->{origtars} }, $target;
+
+ if ($self->config->log) {
+
+ # Check pkg-ver.tar.gz and pkg_ver.orig.tar.gz
+ if (!$self->shared->{uscanlog}) {
+ $self->shared->{uscanlog}
+ = "$self->{config}->{destdir}/$self->{pkg}_$self->{shared}->{common_mangled_newversion}.uscan.log";
+ if (-e "$self->{shared}->{uscanlog}.old") {
+ unlink "$self->{shared}->{uscanlog}.old"
+ or uscan_die "Can\'t remove old backup log "
+ . "$self->{shared}->{uscanlog}.old: $!";
+ uscan_warn "Old backup uscan log found. "
+ . "Remove: $self->{shared}->{uscanlog}.old";
+ }
+ if (-e $self->shared->uscanlog) {
+ move($self->shared->uscanlog,
+ "$self->{shared}->{uscanlog}.old");
+ uscan_warn "Old uscan log found. "
+ . "Moved to: $self->{shared}->{uscanlog}.old";
+ }
+ open(USCANLOG, ">> $self->{shared}->{uscanlog}")
+ or uscan_die "$progname: could not open "
+ . "$self->{shared}->{uscanlog} for append: $!";
+ print USCANLOG "# uscan log\n";
+ } else {
+ open(USCANLOG, ">> $self->{shared}->{uscanlog}")
+ or uscan_die "$progname: could not open "
+ . "$self->{shared}->{uscanlog} for append: $!";
+ }
+ if ($self->symlink ne "rename") {
+ my $umd5sum = Digest::MD5->new;
+ my $omd5sum = Digest::MD5->new;
+ open(my $ufh, '<',
+ "$self->{config}->{destdir}/$self->{newfile_base}")
+ or uscan_die "Can't open '"
+ . "$self->{config}->{destdir}/$self->{newfile_base}" . "': $!";
+ open(my $ofh, '<', "$self->{config}->{destdir}/${target}")
+ or uscan_die
+ "Can't open '$self->{config}->{destdir}/${target}': $!";
+ $umd5sum->addfile($ufh);
+ $omd5sum->addfile($ofh);
+ close($ufh);
+ close($ofh);
+ my $umd5hex = $umd5sum->hexdigest;
+ my $omd5hex = $omd5sum->hexdigest;
+
+ if ($umd5hex eq $omd5hex) {
+ print USCANLOG
+ "# == $self->{newfile_base}\t-->\t${target}\t(same)\n";
+ } else {
+ print USCANLOG
+ "# !! $self->{newfile_base}\t-->\t${target}\t(changed)\n";
+ }
+ print USCANLOG "$umd5hex $self->{newfile_base}\n";
+ print USCANLOG "$omd5hex ${target}\n";
+ }
+ close USCANLOG
+ or uscan_die
+ "$progname: could not close $self->{shared}->{uscanlog} $!";
+ }
+
+ dehs_verbose "$mk_origtargz_out\n" if $mk_origtargz_out;
+ if ($self->component) {
+ push @{ $dehs_tags->{"component-target"} }, $target;
+ push @{ $dehs_tags->{"component-target-path"} }, $path;
+ } else {
+ $dehs_tags->{target} = $target;
+ $dehs_tags->{'target-path'} = $path;
+ }
+
+#######################################################################
+ # code 3.10: call uupdate
+#######################################################################
+ # Do whatever the user wishes to do
+ if ($self->parse_result->{action}) {
+ my @cmd = shellwords($self->parse_result->{action});
+
+ # script invocation changed in $watch_version=4
+ if ($self->watch_version > 3) {
+ if ($cmd[0] eq "uupdate") {
+ push @cmd, "-f";
+ if ($verbose) {
+ push @cmd, "--verbose";
+ }
+ if ($self->badversion) {
+ push @cmd, "-b";
+ }
+ }
+ push @cmd, "--upstream-version",
+ $self->shared->{common_mangled_newversion};
+ if (abs_path($self->{config}->{destdir}) ne abs_path("..")) {
+ foreach my $origtar (@{ $self->shared->{origtars} }) {
+ copy(catfile($self->{config}->{destdir}, $origtar),
+ catfile("..", $origtar));
+ }
+ }
+ } elsif ($self->watch_version > 1) {
+
+ # Any symlink requests are already handled by uscan
+ if ($cmd[0] eq "uupdate") {
+ push @cmd, "--no-symlink";
+ if ($verbose) {
+ push @cmd, "--verbose";
+ }
+ if ($self->badversion) {
+ push @cmd, "-b";
+ }
+ }
+ push @cmd, "--upstream-version",
+ $self->shared->{common_mangled_newversion}, $path;
+ } else {
+ push @cmd, $path, $self->shared->{common_mangled_newversion};
+ }
+ my $actioncmd = join(" ", @cmd);
+ my $actioncmdmsg;
+ spawn(exec => \@cmd, wait_child => 1, to_string => \$actioncmdmsg);
+ local $, = ' ';
+ dehs_verbose "Executing user specified script:\n @cmd\n"
+ . $actioncmdmsg;
+ }
+ $self->destfile($path);
+
+ return 0;
+}
+
+# VIII - clean
+
+=head3 clean()
+
+Clean temporary files using either:
+
+=over
+
+=item L<Devscripts::Uscan::http>::http_clean()
+=item L<Devscripts::Uscan::ftp>::ftp_clean()
+=item L<Devscripts::Uscan::git>::git_clean()
+=item L<Devscripts::Uscan::svn>::svn_clean()
+
+=back
+
+=cut
+
+sub clean {
+ my ($self) = @_;
+ $self->_do('clean');
+}
+
+# Internal sub to call sub modules (git, http,...)
+sub _do {
+ my ($self, $sub) = @_;
+ my $mode = $self->mode;
+ $mode =~ s/git-dumb/git/;
+ $sub = $mode . "_$sub";
+ with("Devscripts::Uscan::$mode") unless ($self->can($sub));
+ if ($@) {
+ uscan_warn "Unknown '$mode' mode set in $self->{watchfile} ($@)";
+ $self->status(1);
+ }
+ return $self->$sub;
+}
+
+1;
+
+=head1 SEE ALSO
+
+L<uscan>, L<Devscripts::Uscan::WatchFile>, L<Devscripts::Uscan::Config>
+
+=head1 AUTHOR
+
+B<uscan> was originally written by Christoph Lameter
+E<lt>clameter@debian.orgE<gt> (I believe), modified by Julian Gilbey
+E<lt>jdg@debian.orgE<gt>. HTTP support was added by Piotr Roszatycki
+E<lt>dexter@debian.orgE<gt>. B<uscan> was rewritten in Perl by Julian Gilbey.
+Xavier Guimard E<lt>yadd@debian.orgE<gt> rewrote uscan in object
+oriented Perl.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2002-2006 by Julian Gilbey <jdg@debian.org>,
+2018 by Xavier Guimard <yadd@debian.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+=cut
diff --git a/lib/Devscripts/Uscan/_vcs.pm b/lib/Devscripts/Uscan/_vcs.pm
new file mode 100644
index 0000000..b66f560
--- /dev/null
+++ b/lib/Devscripts/Uscan/_vcs.pm
@@ -0,0 +1,93 @@
+# Common sub shared between git and svn
+package Devscripts::Uscan::_vcs;
+
+use strict;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::Utils;
+use Exporter 'import';
+use File::Basename;
+
+our @EXPORT = ('get_refs');
+
+our $progname = basename($0);
+
+sub _vcs_newfile_base {
+ my ($self) = @_;
+ my $zsuffix = get_suffix($self->compression);
+ my $newfile_base
+ = "$self->{pkg}-$self->{search_result}->{newversion}.tar.$zsuffix";
+ return $newfile_base;
+}
+
+sub get_refs {
+ my ($self, $command, $ref_pattern, $package) = @_;
+ my @command = @$command;
+ my ($newfile, $newversion);
+ {
+ local $, = ' ';
+ uscan_verbose "Execute: @command";
+ }
+ open(REFS, "-|", @command)
+ || uscan_die "$progname: you must have the $package package installed";
+ my @refs;
+ my $ref;
+ my $version;
+ while (<REFS>) {
+ chomp;
+ uscan_debug "$_";
+ if ($_ =~ $ref_pattern) {
+ $ref = $1;
+ foreach my $_pattern (@{ $self->patterns }) {
+ $version = join(".",
+ map { $_ if defined($_) } $ref =~ m&^$_pattern$&);
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'uversionmangle:', \@{ $self->uversionmangle },
+ \$version
+ )
+ ) {
+ return undef;
+ }
+ push @refs, [$version, $ref];
+ }
+ }
+ }
+ if (@refs) {
+ @refs = Devscripts::Versort::upstream_versort(@refs);
+ my $msg = "Found the following matching refs:\n";
+ foreach my $ref (@refs) {
+ $msg .= " $$ref[1] ($$ref[0])\n";
+ }
+ uscan_verbose "$msg";
+ if ($self->shared->{download_version}
+ and not $self->versionmode eq 'ignore') {
+
+# extract ones which has $version in the above loop matched with $download_version
+ my @vrefs
+ = grep { $$_[0] eq $self->shared->{download_version} } @refs;
+ if (@vrefs) {
+ ($newversion, $newfile) = @{ $vrefs[0] };
+ } else {
+ uscan_warn
+ "$progname warning: In $self->{watchfile} no matching"
+ . " refs for version "
+ . $self->shared->{download_version}
+ . " in watch line\n "
+ . $self->{line};
+ return undef;
+ }
+
+ } else {
+ ($newversion, $newfile) = @{ $refs[0] };
+ }
+ } else {
+ uscan_warn "$progname warning: In $self->{watchfile},\n"
+ . " no matching refs for watch line\n"
+ . " $self->{line}";
+ return undef;
+ }
+ return ($newversion, $newfile);
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/_xtp.pm b/lib/Devscripts/Uscan/_xtp.pm
new file mode 100644
index 0000000..092cb52
--- /dev/null
+++ b/lib/Devscripts/Uscan/_xtp.pm
@@ -0,0 +1,90 @@
+# Common sub shared between http and ftp
+package Devscripts::Uscan::_xtp;
+
+use strict;
+use File::Basename;
+use Exporter 'import';
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::Utils;
+
+our @EXPORT = ('partial_version');
+
+sub _xtp_newfile_base {
+ my ($self) = @_;
+ my $newfile_base;
+ if (@{ $self->filenamemangle }) {
+
+ # HTTP or FTP site (with filenamemangle)
+ if ($self->versionless) {
+ $newfile_base = $self->upstream_url;
+ } else {
+ $newfile_base = $self->search_result->{newfile};
+ }
+ my $cmp = $newfile_base;
+ uscan_verbose "Matching target for filenamemangle: $newfile_base";
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'filenamemangle:', \@{ $self->filenamemangle },
+ \$newfile_base
+ )
+ ) {
+ $self->status(1);
+ return undef;
+ }
+ if ($newfile_base =~ m/^(?:https?|ftp):/) {
+ $newfile_base = basename($newfile_base);
+ }
+ if ($cmp eq $newfile_base) {
+ uscan_die "filenamemangle failed for $cmp";
+ }
+ unless ($self->search_result->{newversion}) {
+
+ # uversionmanglesd version is '', make best effort to set it
+ $newfile_base
+ =~ m/^.+?[-_]?(\d[\-+\.:\~\da-zA-Z]*)(?:\.tar\.(gz|bz2|xz|zstd?)|\.zip)$/i;
+ $self->search_result->{newversion} = $1;
+ unless ($self->search_result->{newversion}) {
+ uscan_warn
+"Fix filenamemangle to produce a filename with the correct version";
+ $self->status(1);
+ return undef;
+ }
+ uscan_verbose
+"Newest upstream tarball version from the filenamemangled filename: $self->{search_result}->{newversion}";
+ }
+ } else {
+ # HTTP or FTP site (without filenamemangle)
+ $newfile_base = basename($self->search_result->{newfile});
+ if ($self->mode eq 'http') {
+
+ # Remove HTTP header trash
+ $newfile_base =~ s/[\?#].*$//; # PiPy
+ # just in case this leaves us with nothing
+ if ($newfile_base eq '') {
+ uscan_warn
+"No good upstream filename found after removing tailing ?... and #....\n Use filenamemangle to fix this.";
+ $self->status(1);
+ return undef;
+ }
+ }
+ }
+ return $newfile_base;
+}
+
+sub partial_version {
+ my ($download_version) = @_;
+ my ($d1, $d2, $d3);
+ if (defined $download_version) {
+ uscan_verbose "download version requested: $download_version";
+ if ($download_version
+ =~ m/^([-~\+\w]+)(\.[-~\+\w]+)?(\.[-~\+\w]+)?(\.[-~\+\w]+)?$/) {
+ $d1 = "$1" if defined $1;
+ $d2 = "$1$2" if defined $2;
+ $d3 = "$1$2$3" if defined $3;
+ }
+ }
+ return ($d1, $d2, $d3);
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/ftp.pm b/lib/Devscripts/Uscan/ftp.pm
new file mode 100644
index 0000000..5a24d8a
--- /dev/null
+++ b/lib/Devscripts/Uscan/ftp.pm
@@ -0,0 +1,280 @@
+package Devscripts::Uscan::ftp;
+
+use strict;
+use Cwd qw/abs_path/;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::Utils;
+use Devscripts::Uscan::_xtp;
+use Moo::Role;
+
+#######################################################################
+# search $newfile $newversion (ftp mode)
+#######################################################################
+sub ftp_search {
+ my ($self) = @_;
+
+ # FTP site
+ uscan_verbose "Requesting URL:\n $self->{parse_result}->{base}";
+ my $request = HTTP::Request->new('GET', $self->parse_result->{base});
+ my $response = $self->downloader->user_agent->request($request);
+ if (!$response->is_success) {
+ uscan_warn
+"In watch file $self->{watchfile}, reading FTP directory\n $self->{parse_result}->{base} failed: "
+ . $response->status_line . "";
+ return undef;
+ }
+
+ my $content = $response->content;
+ uscan_extra_debug
+ "received content:\n$content\n[End of received content] by FTP";
+
+ # FTP directory listings either look like:
+ # info info ... info filename [ -> linkname]
+ # or they're HTMLised (if they've been through an HTTP proxy)
+ # so we may have to look for <a href="filename"> type patterns
+ uscan_verbose "matching pattern $self->{parse_result}->{pattern}";
+ my (@files);
+
+ # We separate out HTMLised listings from standard listings, so
+ # that we can target our search correctly
+ if ($content =~ /<\s*a\s+[^>]*href/i) {
+ uscan_verbose "HTMLized FTP listing by the HTTP proxy";
+ while ($content
+ =~ m/(?:<\s*a\s+[^>]*href\s*=\s*\")((?-i)$self->{parse_result}->{pattern})\"/gi
+ ) {
+ my $file = fix_href($1);
+ my $mangled_version
+ = join(".", $file =~ m/^$self->{parse_result}->{pattern}$/);
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'uversionmangle:', \@{ $self->uversionmangle },
+ \$mangled_version
+ )
+ ) {
+ return undef;
+ }
+ my $match = '';
+ if (defined $self->shared->{download_version}
+ and not $self->versionmode eq 'ignore') {
+ if ($mangled_version eq $self->shared->{download_version}) {
+ $match = "matched with the download version";
+ }
+ }
+ my $priority = $mangled_version . '-' . get_priority($file);
+ push @files, [$priority, $mangled_version, $file, $match];
+ }
+ } else {
+ uscan_verbose "Standard FTP listing.";
+
+ # they all look like:
+ # info info ... info filename [ -> linkname]
+ for my $ln (split(/\n/, $content)) {
+ $ln =~ s/^d.*$//; # FTP listing of directory, '' skipped
+ $ln =~ s/\s+->\s+\S+$//; # FTP listing for link destination
+ $ln =~ s/^.*\s(\S+)$/$1/; # filename only
+ if ($ln and $ln =~ m/^($self->{parse_result}->{filepattern})$/) {
+ my $file = $1;
+ my $mangled_version = join(".",
+ $file =~ m/^$self->{parse_result}->{filepattern}$/);
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'uversionmangle:', \@{ $self->uversionmangle },
+ \$mangled_version
+ )
+ ) {
+ return undef;
+ }
+ my $match = '';
+ if (defined $self->shared->{download_version}) {
+ if ($mangled_version eq $self->shared->{download_version})
+ {
+ $match = "matched with the download version";
+ }
+ }
+ my $priority = $mangled_version . '-' . get_priority($file);
+ push @files, [$priority, $mangled_version, $file, $match];
+ }
+ }
+ }
+ if (@files) {
+ @files = Devscripts::Versort::versort(@files);
+ my $msg
+ = "Found the following matching files on the web page (newest first):\n";
+ foreach my $file (@files) {
+ $msg .= " $$file[2] ($$file[1]) index=$$file[0] $$file[3]\n";
+ }
+ uscan_verbose $msg;
+ }
+ my ($newversion, $newfile);
+ if (defined $self->shared->{download_version}) {
+
+ # extract ones which has $match in the above loop defined
+ my @vfiles = grep { $$_[3] } @files;
+ if (@vfiles) {
+ (undef, $newversion, $newfile, undef) = @{ $vfiles[0] };
+ } else {
+ uscan_warn
+"In $self->{watchfile} no matching files for version $self->{shared}->{download_version}"
+ . " in watch line\n $self->{line}";
+ return undef;
+ }
+ } else {
+ if (@files) {
+ (undef, $newversion, $newfile, undef) = @{ $files[0] };
+ } else {
+ uscan_warn
+"In $self->{watchfile} no matching files for watch line\n $self->{line}";
+ return undef;
+ }
+ }
+ return ($newversion, $newfile);
+}
+
+sub ftp_upstream_url {
+ my ($self) = @_;
+ return $self->parse_result->{base} . $self->search_result->{newfile};
+}
+
+*ftp_newfile_base = \&Devscripts::Uscan::_xtp::_xtp_newfile_base;
+
+sub ftp_newdir {
+ my ($line, $site, $dir, $pattern, $dirversionmangle, $watchfile,
+ $lineptr, $download_version)
+ = @_;
+ my $downloader = $line->downloader;
+
+ my ($request, $response, $newdir);
+ my ($download_version_short1, $download_version_short2,
+ $download_version_short3)
+ = partial_version($download_version);
+ my $base = $site . $dir;
+ $request = HTTP::Request->new('GET', $base);
+ $response = $downloader->user_agent->request($request);
+ if (!$response->is_success) {
+ uscan_warn
+ "In watch file $watchfile, reading webpage\n $base failed: "
+ . $response->status_line;
+ return '';
+ }
+
+ my $content = $response->content;
+ uscan_extra_debug
+ "received content:\n$content\n[End of received content] by FTP";
+
+ # FTP directory listings either look like:
+ # info info ... info filename [ -> linkname]
+ # or they're HTMLised (if they've been through an HTTP proxy)
+ # so we may have to look for <a href="filename"> type patterns
+ uscan_verbose "matching pattern $pattern";
+ my (@dirs);
+ my $match = '';
+
+ # We separate out HTMLised listings from standard listings, so
+ # that we can target our search correctly
+ if ($content =~ /<\s*a\s+[^>]*href/i) {
+ uscan_verbose "HTMLized FTP listing by the HTTP proxy";
+ while (
+ $content =~ m/(?:<\s*a\s+[^>]*href\s*=\s*\")((?-i)$pattern)\"/gi) {
+ my $dir = $1;
+ uscan_verbose "Matching target for dirversionmangle: $dir";
+ my $mangled_version = join(".", $dir =~ m/^$pattern$/);
+ if (
+ mangle(
+ $watchfile, $lineptr,
+ 'dirversionmangle:', \@{$dirversionmangle},
+ \$mangled_version
+ )
+ ) {
+ return 1;
+ }
+ $match = '';
+ if (defined $download_version
+ and $mangled_version eq $download_version) {
+ $match = "matched with the download version";
+ }
+ if (defined $download_version_short3
+ and $mangled_version eq $download_version_short3) {
+ $match = "matched with the download version (partial 3)";
+ }
+ if (defined $download_version_short2
+ and $mangled_version eq $download_version_short2) {
+ $match = "matched with the download version (partial 2)";
+ }
+ if (defined $download_version_short1
+ and $mangled_version eq $download_version_short1) {
+ $match = "matched with the download version (partial 1)";
+ }
+ push @dirs, [$mangled_version, $dir, $match];
+ }
+ } else {
+ # they all look like:
+ # info info ... info filename [ -> linkname]
+ uscan_verbose "Standard FTP listing.";
+ foreach my $ln (split(/\n/, $content)) {
+ $ln =~ s/^-.*$//; # FTP listing of file, '' skipped
+ $ln =~ s/\s+->\s+\S+$//; # FTP listing for link destination
+ $ln =~ s/^.*\s(\S+)$/$1/; # filename only
+ if ($ln =~ m/^($pattern)(\s+->\s+\S+)?$/) {
+ my $dir = $1;
+ uscan_verbose "Matching target for dirversionmangle: $dir";
+ my $mangled_version = join(".", $dir =~ m/^$pattern$/);
+ if (
+ mangle(
+ $watchfile, $lineptr,
+ 'dirversionmangle:', \@{$dirversionmangle},
+ \$mangled_version
+ )
+ ) {
+ return 1;
+ }
+ $match = '';
+ if (defined $download_version
+ and $mangled_version eq $download_version) {
+ $match = "matched with the download version";
+ }
+ if (defined $download_version_short3
+ and $mangled_version eq $download_version_short3) {
+ $match = "matched with the download version (partial 3)";
+ }
+ if (defined $download_version_short2
+ and $mangled_version eq $download_version_short2) {
+ $match = "matched with the download version (partial 2)";
+ }
+ if (defined $download_version_short1
+ and $mangled_version eq $download_version_short1) {
+ $match = "matched with the download version (partial 1)";
+ }
+ push @dirs, [$mangled_version, $dir, $match];
+ }
+ }
+ }
+
+ # extract ones which has $match in the above loop defined
+ my @vdirs = grep { $$_[2] } @dirs;
+ if (@vdirs) {
+ @vdirs = Devscripts::Versort::upstream_versort(@vdirs);
+ $newdir = $vdirs[0][1];
+ }
+ if (@dirs) {
+ @dirs = Devscripts::Versort::upstream_versort(@dirs);
+ my $msg
+ = "Found the following matching FTP directories (newest first):\n";
+ foreach my $dir (@dirs) {
+ $msg .= " $$dir[1] ($$dir[0]) $$dir[2]\n";
+ }
+ uscan_verbose $msg;
+ $newdir //= $dirs[0][1];
+ } else {
+ uscan_warn
+ "In $watchfile no matching dirs for pattern\n $base$pattern";
+ $newdir = '';
+ }
+ return $newdir;
+}
+
+# Nothing to clean here
+sub ftp_clean { 0 }
+
+1;
diff --git a/lib/Devscripts/Uscan/git.pm b/lib/Devscripts/Uscan/git.pm
new file mode 100644
index 0000000..843e7c0
--- /dev/null
+++ b/lib/Devscripts/Uscan/git.pm
@@ -0,0 +1,172 @@
+package Devscripts::Uscan::git;
+
+use strict;
+use Cwd qw/abs_path/;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::Utils;
+use Devscripts::Uscan::_vcs;
+use Dpkg::IPC;
+use File::Path 'remove_tree';
+use Moo::Role;
+
+######################################################
+# search $newfile $newversion (git mode/versionless)
+######################################################
+sub git_search {
+ my ($self) = @_;
+ my ($newfile, $newversion);
+ if ($self->versionless) {
+ $newfile = $self->parse_result->{filepattern}; # HEAD or heads/<branch>
+ if ($self->pretty eq 'describe') {
+ $self->gitmode('full');
+ }
+ if ( $self->gitmode eq 'shallow'
+ and $self->parse_result->{filepattern} eq 'HEAD') {
+ uscan_exec(
+ 'git',
+ 'clone',
+ '--quiet',
+ '--bare',
+ '--depth=1',
+ $self->parse_result->{base},
+ "$self->{downloader}->{destdir}/" . $self->gitrepo_dir
+ );
+ $self->downloader->gitrepo_state(1);
+ } elsif ($self->gitmode eq 'shallow'
+ and $self->parse_result->{filepattern} ne 'HEAD')
+ { # heads/<branch>
+ $newfile =~ s&^heads/&&; # Set to <branch>
+ uscan_exec(
+ 'git',
+ 'clone',
+ '--quiet',
+ '--bare',
+ '--depth=1',
+ '-b',
+ "$newfile",
+ $self->parse_result->{base},
+ "$self->{downloader}->{destdir}/" . $self->gitrepo_dir
+ );
+ $self->downloader->gitrepo_state(1);
+ } else {
+ uscan_exec(
+ 'git', 'clone', '--quiet', '--bare',
+ $self->parse_result->{base},
+ "$self->{downloader}->{destdir}/" . $self->gitrepo_dir
+ );
+ $self->downloader->gitrepo_state(2);
+ }
+ if ($self->pretty eq 'describe') {
+
+ # use unannotated tags to be on safe side
+ spawn(
+ exec => [
+ 'git',
+"--git-dir=$self->{downloader}->{destdir}/$self->{gitrepo_dir}",
+ 'describe',
+ '--tags'
+ ],
+ wait_child => 1,
+ to_string => \$newversion
+ );
+ $newversion =~ s/-/./g;
+ chomp($newversion);
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'uversionmangle:', \@{ $self->uversionmangle },
+ \$newversion
+ )
+ ) {
+ return undef;
+ }
+ } else {
+ my $tmp = $ENV{TZ};
+ $ENV{TZ} = 'UTC';
+ spawn(
+ exec => [
+ 'git',
+"--git-dir=$self->{downloader}->{destdir}/$self->{gitrepo_dir}",
+ 'log',
+ '-1',
+ "--date=format-local:$self->{date}",
+ "--pretty=$self->{pretty}"
+ ],
+ wait_child => 1,
+ to_string => \$newversion
+ );
+ $ENV{TZ} = $tmp;
+ chomp($newversion);
+ }
+ }
+ ################################################
+ # search $newfile $newversion (git mode w/tag)
+ ################################################
+ elsif ($self->mode eq 'git') {
+ my @args = ('ls-remote', $self->parse_result->{base});
+ # Try to use local upstream branch if available
+ if (-d '.git') {
+ my $out;
+ eval {
+ spawn(
+ exec => ['git', 'remote', '--verbose', 'show'],
+ wait_child => 1,
+ to_string => \$out
+ );
+ };
+ # Check if git repo found in debian/watch exists in
+ # `git remote show` output
+ if ($out and $out =~ /^(\S+)\s+\Q$self->{parse_result}->{base}\E/m)
+ {
+ $self->downloader->git_upstream($1);
+ uscan_warn
+ "Using $self->{downloader}->{git_upstream} remote origin";
+ # Found, launch a "fetch" to be up to date
+ spawn(
+ exec => ['git', 'fetch', $self->downloader->git_upstream],
+ wait_child => 1
+ );
+ @args = ('show-ref');
+ }
+ }
+ ($newversion, $newfile)
+ = get_refs($self, ['git', @args], qr/^\S+\s+([^\^\{\}]+)$/, 'git');
+ return undef if !defined $newversion;
+ }
+ return ($newversion, $newfile);
+}
+
+sub git_upstream_url {
+ my ($self) = @_;
+ my $upstream_url
+ = $self->parse_result->{base} . ' ' . $self->search_result->{newfile};
+ return $upstream_url;
+}
+
+*git_newfile_base = \&Devscripts::Uscan::_vcs::_vcs_newfile_base;
+
+sub git_clean {
+ my ($self) = @_;
+
+ # If git cloned repo exists and not --debug ($verbose=2) -> remove it
+ if ( $self->downloader->gitrepo_state > 0
+ and $verbose < 2
+ and !$self->downloader->git_upstream) {
+ my $err;
+ uscan_verbose "Removing git repo ($self->{downloader}->{destdir}/"
+ . $self->gitrepo_dir . ")";
+ remove_tree "$self->{downloader}->{destdir}/" . $self->gitrepo_dir,
+ { error => \$err };
+ if (@$err) {
+ local $, = "\n\t";
+ uscan_warn "Errors during git repo clean:\n\t@$err";
+ }
+ $self->downloader->gitrepo_state(0);
+ } else {
+ uscan_debug "Keep git repo ($self->{downloader}->{destdir}/"
+ . $self->gitrepo_dir . ")";
+ }
+ return 0;
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/http.pm b/lib/Devscripts/Uscan/http.pm
new file mode 100644
index 0000000..0da9798
--- /dev/null
+++ b/lib/Devscripts/Uscan/http.pm
@@ -0,0 +1,510 @@
+package Devscripts::Uscan::http;
+
+use strict;
+use Cwd qw/abs_path/;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::Utils;
+use Devscripts::Uscan::_xtp;
+use Moo::Role;
+
+*http_newfile_base = \&Devscripts::Uscan::_xtp::_xtp_newfile_base;
+
+##################################
+# search $newversion (http mode)
+##################################
+
+#returns (\@patterns, \@base_sites, \@base_dirs)
+sub handle_redirection {
+ my ($self, $pattern, @additional_bases) = @_;
+ my @redirections = @{ $self->downloader->user_agent->get_redirections };
+ my (@patterns, @base_sites, @base_dirs);
+
+ uscan_verbose "redirections: @redirections" if @redirections;
+
+ foreach my $_redir (@redirections, @additional_bases) {
+ my $base_dir = $_redir;
+
+ $base_dir =~ s%^\w+://[^/]+/%/%;
+ $base_dir =~ s%/[^/]*(?:[#?].*)?$%/%;
+ if ($_redir =~ m%^(\w+://[^/]+)%) {
+ my $base_site = $1;
+
+ push @patterns,
+ quotemeta($base_site) . quotemeta($base_dir) . "$pattern";
+ push @base_sites, $base_site;
+ push @base_dirs, $base_dir;
+
+ # remove the filename, if any
+ my $base_dir_orig = $base_dir;
+ $base_dir =~ s%/[^/]*$%/%;
+ if ($base_dir ne $base_dir_orig) {
+ push @patterns,
+ quotemeta($base_site) . quotemeta($base_dir) . "$pattern";
+ push @base_sites, $base_site;
+ push @base_dirs, $base_dir;
+ }
+ }
+ }
+ return (\@patterns, \@base_sites, \@base_dirs);
+}
+
+sub http_search {
+ my ($self) = @_;
+
+ # $content: web page to be scraped to find the URLs to be downloaded
+ if ($self->{parse_result}->{base} =~ /^https/ and !$self->downloader->ssl)
+ {
+ uscan_die
+"you must have the liblwp-protocol-https-perl package installed\nto use https URLs";
+ }
+ uscan_verbose "Requesting URL:\n $self->{parse_result}->{base}";
+ my $request = HTTP::Request->new('GET', $self->parse_result->{base});
+ foreach my $k (keys %{ $self->downloader->headers }) {
+ if ($k =~ /^(.*?)@(.*)$/) {
+ my $baseUrl = $1;
+ my $hdr = $2;
+ if ($self->parse_result->{base} =~ m#^\Q$baseUrl\E(?:/.*)?$#) {
+ $request->header($hdr => $self->headers->{$k});
+ uscan_verbose "Set per-host custom header $hdr for "
+ . $self->parse_result->{base};
+ } else {
+ uscan_debug
+ "$self->parse_result->{base} does not start with $1";
+ }
+ } else {
+ uscan_warn "Malformed http-header: $k";
+ }
+ }
+ $request->header('Accept-Encoding' => 'gzip');
+ $request->header('Accept' => '*/*');
+ my $response = $self->downloader->user_agent->request($request);
+ if (!$response->is_success) {
+ uscan_warn
+"In watchfile $self->{watchfile}, reading webpage\n $self->{parse_result}->{base} failed: "
+ . $response->status_line;
+ return undef;
+ }
+
+ my ($patterns, $base_sites, $base_dirs)
+ = handle_redirection($self, $self->{parse_result}->{filepattern});
+ push @{ $self->patterns }, @$patterns;
+ push @{ $self->sites }, @$base_sites;
+ push @{ $self->basedirs }, @$base_dirs;
+
+ my $content = $response->decoded_content;
+ uscan_extra_debug
+ "received content:\n$content\n[End of received content] by HTTP";
+
+ my @hrefs;
+ if (!$self->searchmode or $self->searchmode eq 'html') {
+ @hrefs = $self->html_search($content, $self->patterns);
+ } elsif ($self->searchmode eq 'plain') {
+ @hrefs = $self->plain_search($content);
+ } else {
+ uscan_warn 'Unknown searchmode "' . $self->searchmode . '", skipping';
+ return undef;
+ }
+
+ if (@hrefs) {
+ @hrefs = Devscripts::Versort::versort(@hrefs);
+ my $msg
+ = "Found the following matching hrefs on the web page (newest first):\n";
+ foreach my $href (@hrefs) {
+ $msg .= " $$href[2] ($$href[1]) index=$$href[0] $$href[3]\n";
+ }
+ uscan_verbose $msg;
+ }
+ my ($newversion, $newfile);
+ if (defined $self->shared->{download_version}
+ and not $self->versionmode eq 'ignore') {
+
+ # extract ones which has $match in the above loop defined
+ my @vhrefs = grep { $$_[3] } @hrefs;
+ if (@vhrefs) {
+ (undef, $newversion, $newfile, undef) = @{ $vhrefs[0] };
+ } else {
+ uscan_warn
+"In $self->{watchfile} no matching hrefs for version $self->{shared}->{download_version}"
+ . " in watch line\n $self->{line}";
+ return undef;
+ }
+ } else {
+ if (@hrefs) {
+ (undef, $newversion, $newfile, undef) = @{ $hrefs[0] };
+ } else {
+ uscan_warn
+"In $self->{watchfile} no matching files for watch line\n $self->{line}";
+ return undef;
+ }
+ }
+ return ($newversion, $newfile);
+}
+
+#######################################################################
+# determine $upstream_url (http mode)
+#######################################################################
+# http is complicated due to absolute/relative URL issue
+sub http_upstream_url {
+ my ($self) = @_;
+ my $upstream_url;
+ my $newfile = $self->search_result->{newfile};
+ if ($newfile =~ m%^\w+://%) {
+ $upstream_url = $newfile;
+ } elsif ($newfile =~ m%^//%) {
+ $upstream_url = $self->parse_result->{site};
+ $upstream_url =~ s/^(https?:).*/$1/;
+ $upstream_url .= $newfile;
+ } elsif ($newfile =~ m%^/%) {
+
+ # absolute filename
+ # Were there any redirections? If so try using those first
+ if ($#{ $self->patterns } > 0) {
+
+ # replace $site here with the one we were redirected to
+ foreach my $index (0 .. $#{ $self->patterns }) {
+ if ("$self->{sites}->[$index]$newfile"
+ =~ m&^$self->{patterns}->[$index]$&) {
+ $upstream_url = "$self->{sites}->[$index]$newfile";
+ last;
+ }
+ }
+ if (!defined($upstream_url)) {
+ uscan_verbose
+ "Unable to determine upstream url from redirections,\n"
+ . "defaulting to using site specified in watch file";
+ $upstream_url = "$self->{sites}->[0]$newfile";
+ }
+ } else {
+ $upstream_url = "$self->{sites}->[0]$newfile";
+ }
+ } else {
+ # relative filename, we hope
+ # Were there any redirections? If so try using those first
+ if ($#{ $self->patterns } > 0) {
+
+ # replace $site here with the one we were redirected to
+ foreach my $index (0 .. $#{ $self->patterns }) {
+
+ # skip unless the basedir looks like a directory
+ next unless $self->{basedirs}->[$index] =~ m%/$%;
+ my $nf = "$self->{basedirs}->[$index]$newfile";
+ if ("$self->{sites}->[$index]$nf"
+ =~ m&^$self->{patterns}->[$index]$&) {
+ $upstream_url = "$self->{sites}->[$index]$nf";
+ last;
+ }
+ }
+ if (!defined($upstream_url)) {
+ uscan_verbose
+ "Unable to determine upstream url from redirections,\n"
+ . "defaulting to using site specified in watch file";
+ $upstream_url = "$self->{parse_result}->{urlbase}$newfile";
+ }
+ } else {
+ $upstream_url = "$self->{parse_result}->{urlbase}$newfile";
+ }
+ }
+
+ # mangle if necessary
+ $upstream_url =~ s/&amp;/&/g;
+ uscan_verbose "Matching target for downloadurlmangle: $upstream_url";
+ if (@{ $self->downloadurlmangle }) {
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'downloadurlmangle:', \@{ $self->downloadurlmangle },
+ \$upstream_url
+ )
+ ) {
+ $self->status(1);
+ return undef;
+ }
+ }
+ return $upstream_url;
+}
+
+sub http_newdir {
+ my ($https, $line, $site, $dir, $pattern, $dirversionmangle,
+ $watchfile, $lineptr, $download_version)
+ = @_;
+
+ my $downloader = $line->downloader;
+ my ($request, $response, $newdir);
+ my ($download_version_short1, $download_version_short2,
+ $download_version_short3)
+ = partial_version($download_version);
+ my $base = $site . $dir;
+
+ $pattern .= "/?";
+
+ if (defined($https) and !$downloader->ssl) {
+ uscan_die
+"$progname: you must have the liblwp-protocol-https-perl package installed\n"
+ . "to use https URLs";
+ }
+ # At least for now, set base in the line object - other methods need it
+ local $line->parse_result->{base} = $base;
+ $request = HTTP::Request->new('GET', $base);
+ $response = $downloader->user_agent->request($request);
+ if (!$response->is_success) {
+ uscan_warn
+ "In watch file $watchfile, reading webpage\n $base failed: "
+ . $response->status_line;
+ return '';
+ }
+
+ my $content = $response->content;
+ if ( $response->header('Content-Encoding')
+ and $response->header('Content-Encoding') =~ /^gzip$/i) {
+ require IO::Uncompress::Gunzip;
+ require IO::String;
+ uscan_debug "content seems gzip encoded, let's decode it";
+ my $out;
+ if (IO::Uncompress::Gunzip::gunzip(IO::String->new($content), \$out)) {
+ $content = $out;
+ } else {
+ uscan_warn 'Unable to decode remote content: '
+ . $IO::Uncompress::GunzipError;
+ return '';
+ }
+ }
+ uscan_extra_debug
+ "received content:\n$content\n[End of received content] by HTTP";
+
+ clean_content(\$content);
+
+ my ($dirpatterns, $base_sites, $base_dirs)
+ = handle_redirection($line, $pattern, $base);
+ $downloader->user_agent->clear_redirections; # we won't be needing that
+
+ my @hrefs;
+ for my $parsed (
+ html_search($line, $content, $dirpatterns, 'dirversionmangle')) {
+ my ($priority, $mangled_version, $href, $match) = @$parsed;
+ $match = '';
+ if (defined $download_version
+ and $mangled_version eq $download_version) {
+ $match = "matched with the download version";
+ }
+ if (defined $download_version_short3
+ and $mangled_version eq $download_version_short3) {
+ $match = "matched with the download version (partial 3)";
+ }
+ if (defined $download_version_short2
+ and $mangled_version eq $download_version_short2) {
+ $match = "matched with the download version (partial 2)";
+ }
+ if (defined $download_version_short1
+ and $mangled_version eq $download_version_short1) {
+ $match = "matched with the download version (partial 1)";
+ }
+ push @hrefs, [$mangled_version, $href, $match];
+ }
+
+ # extract ones which has $match in the above loop defined
+ my @vhrefs = grep { $$_[2] } @hrefs;
+ if (@vhrefs) {
+ @vhrefs = Devscripts::Versort::upstream_versort(@vhrefs);
+ $newdir = $vhrefs[0][1];
+ }
+ if (@hrefs) {
+ @hrefs = Devscripts::Versort::upstream_versort(@hrefs);
+ my $msg = "Found the following matching directories (newest first):\n";
+ foreach my $href (@hrefs) {
+ $msg .= " $$href[1] ($$href[0]) $$href[2]\n";
+ }
+ uscan_verbose $msg;
+ $newdir //= $hrefs[0][1];
+ } else {
+ uscan_warn
+"In $watchfile,\n no matching hrefs for pattern\n $site$dir$pattern";
+ return '';
+ }
+
+ # just give the final directory component
+ $newdir =~ s%/$%%;
+ $newdir =~ s%^.*/%%;
+ return ($newdir);
+}
+
+# Nothing to clean here
+sub http_clean { 0 }
+
+sub clean_content {
+ my ($content) = @_;
+
+ # We need this horrid stuff to handle href=foo type
+ # links. OK, bad HTML, but we have to handle it nonetheless.
+ # It's bug #89749.
+ $$content =~ s/href\s*=\s*(?=[^\"\'])([^\s>]+)/href="$1"/ig;
+
+ # Strip comments
+ $$content =~ s/<!-- .*?-->//sg;
+ return $content;
+}
+
+sub url_canonicalize_dots {
+ my ($base, $url) = @_;
+
+ if ($url !~ m{^[^:#?/]+://}) {
+ if ($url =~ m{^//}) {
+ $base =~ m{^[^:#?/]+:}
+ and $url = $& . $url;
+ } elsif ($url =~ m{^/}) {
+ $base =~ m{^[^:#?/]+://[^/#?]*}
+ and $url = $& . $url;
+ } else {
+ uscan_debug "Resolving urls with query part unimplemented"
+ if ($url =~ m/^[#?]/);
+ $base =~ m{^[^:#?/]+://[^/#?]*(?:/(?:[^#?/]*/)*)?} and do {
+ my $base_to_path = $&;
+ $base_to_path .= '/' unless $base_to_path =~ m|/$|;
+ $url = $base_to_path . $url;
+ };
+ }
+ }
+ $url =~ s{^([^:#?/]+://[^/#?]*)(/[^#?]*)}{
+ my ($h, $p) = ($1, $2);
+ $p =~ s{/\.(?:/|$|(?=[#?]))}{/}g;
+ 1 while $p =~ s{/(?!\.\./)[^/]*/\.\.(?:/|(?=[#?])|$)}{/}g;
+ $h.$p;}e;
+ $url;
+}
+
+sub html_search {
+ my ($self, $content, $patterns, $mangle) = @_;
+
+ # pagenmangle: should not abuse this slow operation
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'pagemangle:\n', [@{ $self->pagemangle }],
+ \$content
+ )
+ ) {
+ return undef;
+ }
+ if ( !$self->shared->{bare}
+ and $content =~ m%^<[?]xml%i
+ and $content =~ m%xmlns="http://s3.amazonaws.com/doc/2006-03-01/"%
+ and $content !~ m%<Key><a\s+href%) {
+ # this is an S3 bucket listing. Insert an 'a href' tag
+ # into the content for each 'Key', so that it looks like html (LP: #798293)
+ uscan_warn
+"*** Amazon AWS special case code is deprecated***\nUse opts=pagemangle rule, instead";
+ $content =~ s%<Key>([^<]*)</Key>%<Key><a href="$1">$1</a></Key>%g;
+ uscan_extra_debug
+"processed content:\n$content\n[End of processed content] by Amazon AWS special case code";
+ }
+ clean_content(\$content);
+
+ # Is there a base URL given?
+ if ($content =~ /<\s*base\s+[^>]*href\s*=\s*([\"\'])(.*?)\1/i) {
+ $self->parse_result->{urlbase}
+ = url_canonicalize_dots($self->parse_result->{base}, $2);
+ } else {
+ $self->parse_result->{urlbase} = $self->parse_result->{base};
+ }
+ uscan_extra_debug
+"processed content:\n$content\n[End of processed content] by fix bad HTML code";
+
+# search hrefs in web page to obtain a list of uversionmangled version and matching download URL
+ {
+ local $, = ',';
+ uscan_verbose "Matching pattern:\n @{$self->{patterns}}";
+ }
+ my @hrefs;
+ while ($content =~ m/<\s*a\s+[^>]*(?<=\s)href\s*=\s*([\"\'])(.*?)\1/sgi) {
+ my $href = $2;
+ $href = fix_href($href);
+ my $href_canonical
+ = url_canonicalize_dots($self->parse_result->{urlbase}, $href);
+ if (defined $self->hrefdecode) {
+ if ($self->hrefdecode eq 'percent-encoding') {
+ uscan_debug "... Decoding from href: $href";
+ $href =~ s/%([A-Fa-f\d]{2})/chr hex $1/eg;
+ $href_canonical =~ s/%([A-Fa-f\d]{2})/chr hex $1/eg;
+ } else {
+ uscan_warn "Illegal value for hrefdecode: "
+ . "$self->{hrefdecode}";
+ return undef;
+ }
+ }
+ uscan_extra_debug "Checking href $href";
+ foreach my $_pattern (@$patterns) {
+ if (my @match = $href =~ /^$_pattern$/) {
+ push @hrefs,
+ parse_href($self, $href_canonical, $_pattern, \@match,
+ $mangle);
+ }
+ uscan_extra_debug "Checking href $href_canonical";
+ if (my @match = $href_canonical =~ /^$_pattern$/) {
+ push @hrefs,
+ parse_href($self, $href_canonical, $_pattern, \@match,
+ $mangle);
+ }
+ }
+ }
+ return @hrefs;
+}
+
+sub plain_search {
+ my ($self, $content) = @_;
+ my @hrefs;
+ foreach my $_pattern (@{ $self->patterns }) {
+ while ($content =~ s/.*?($_pattern)//) {
+ push @hrefs, $self->parse_href($1, $_pattern, $2);
+ }
+ }
+ $self->parse_result->{urlbase} = $self->parse_result->{base};
+ return @hrefs;
+}
+
+sub parse_href {
+ my ($self, $href, $_pattern, $match, $mangle) = @_;
+ $mangle //= 'uversionmangle';
+
+ my $mangled_version;
+ if ($self->watch_version == 2) {
+
+ # watch_version 2 only recognised one group; the code
+ # below will break version 2 watch files with a construction
+ # such as file-([\d\.]+(-\d+)?) (bug #327258)
+ $mangled_version
+ = ref $match eq 'ARRAY'
+ ? $match->[0]
+ : $match;
+ } else {
+ # need the map { ... } here to handle cases of (...)?
+ # which may match but then return undef values
+ if ($self->versionless) {
+
+ # exception, otherwise $mangled_version = 1
+ $mangled_version = '';
+ } else {
+ $mangled_version = join(".",
+ map { $_ if defined($_) }
+ ref $match eq 'ARRAY' ? @$match : $href =~ m&^$_pattern$&);
+ }
+
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ "$mangle:", \@{ $self->$mangle },
+ \$mangled_version
+ )
+ ) {
+ return ();
+ }
+ }
+ $match = '';
+ if (defined $self->shared->{download_version}) {
+ if ($mangled_version eq $self->shared->{download_version}) {
+ $match = "matched with the download version";
+ }
+ }
+ my $priority = $mangled_version . '-' . get_priority($href);
+ return [$priority, $mangled_version, $href, $match];
+}
+
+1;
diff --git a/lib/Devscripts/Uscan/svn.pm b/lib/Devscripts/Uscan/svn.pm
new file mode 100644
index 0000000..65dacae
--- /dev/null
+++ b/lib/Devscripts/Uscan/svn.pm
@@ -0,0 +1,67 @@
+package Devscripts::Uscan::svn;
+
+use strict;
+use Cwd qw/abs_path/;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::Utils;
+use Devscripts::Uscan::_vcs;
+use Dpkg::IPC;
+use File::Path 'remove_tree';
+use Moo::Role;
+
+######################################################
+# search $newfile $newversion (svn mode/versionless)
+######################################################
+sub svn_search {
+ my ($self) = @_;
+ my ($newfile, $newversion);
+ if ($self->versionless) {
+ $newfile = $self->parse_result->{base};
+ spawn(
+ exec => [
+ 'svn', 'info',
+ '--show-item', 'last-changed-revision',
+ '--no-newline', $self->parse_result->{base}
+ ],
+ wait_child => 1,
+ to_string => \$newversion
+ );
+ chomp($newversion);
+ $newversion = sprintf '0.0~svn%d', $newversion;
+ if (
+ mangle(
+ $self->watchfile, \$self->line,
+ 'uversionmangle:', \@{ $self->uversionmangle },
+ \$newversion
+ )
+ ) {
+ return undef;
+ }
+
+ }
+ ################################################
+ # search $newfile $newversion (svn mode w/tag)
+ ################################################
+ elsif ($self->mode eq 'svn') {
+ my @args = ('list', $self->parse_result->{base});
+ ($newversion, $newfile)
+ = get_refs($self, ['svn', @args], qr/(.+)/, 'subversion');
+ return undef if !defined $newversion;
+ }
+ return ($newversion, $newfile);
+}
+
+sub svn_upstream_url {
+ my ($self) = @_;
+ my $upstream_url = $self->parse_result->{base};
+ if (!$self->versionless) {
+ $upstream_url .= '/' . $self->search_result->{newfile};
+ }
+ return $upstream_url;
+}
+
+*svn_newfile_base = \&Devscripts::Uscan::_vcs::_vcs_newfile_base;
+
+sub svn_clean { }
+
+1;
diff --git a/lib/Devscripts/Utils.pm b/lib/Devscripts/Utils.pm
new file mode 100644
index 0000000..8495ce4
--- /dev/null
+++ b/lib/Devscripts/Utils.pm
@@ -0,0 +1,31 @@
+package Devscripts::Utils;
+
+use strict;
+use Devscripts::Output;
+use Exporter 'import';
+use IPC::Run qw(run);
+
+our @EXPORT = qw(ds_exec ds_exec_no_fail);
+
+sub ds_exec_no_fail {
+ {
+ local $, = ' ';
+ ds_debug "Execute: @_...";
+ }
+ run \@_, '>', '/dev/null';
+ return $?;
+}
+
+sub ds_exec {
+ {
+ local $, = ' ';
+ ds_debug "Execute: @_...";
+ }
+ run \@_;
+ if ($?) {
+ local $, = ' ';
+ ds_die "Command failed (@_)";
+ }
+}
+
+1;
diff --git a/lib/Devscripts/Versort.pm b/lib/Devscripts/Versort.pm
new file mode 100644
index 0000000..48368d0
--- /dev/null
+++ b/lib/Devscripts/Versort.pm
@@ -0,0 +1,60 @@
+# Copyright (C) 1998,2002 Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# The functions in this Perl module are versort, upstream_versort and
+# deb_versort. They each take as input an array of elements of the form
+# [version, data, ...] and sort them into decreasing order according to dpkg's
+# understanding of version sorting. The output is a sorted array. In
+# upstream_versort, "version" is assumed to be an upstream version number only,
+# whereas in deb_versort, "version" is assumed to be a Debian version number,
+# possibly including an epoch and/or a Debian revision. versort is available
+# for compatibility reasons. It compares versions as Debian versions
+# (i.e. 1-2-4 < 1-3) but disables checks for wellformed versions.
+#
+# The returned array has the greatest version as the 0th array element.
+
+package Devscripts::Versort;
+use Dpkg::Version;
+
+sub versort (@) {
+ return _versort(0, sub { return shift->[0] }, @_);
+}
+
+sub deb_versort (@) {
+ return _versort(1, sub { return shift->[0] }, @_);
+}
+
+sub upstream_versort (@) {
+ return _versort(0, sub { return "1:" . shift->[0] . "-0" }, @_);
+}
+
+sub _versort ($@) {
+ my ($check, $getversion, @namever_pairs) = @_;
+
+ foreach my $pair (@namever_pairs) {
+ unshift(@$pair,
+ Dpkg::Version->new(&$getversion($pair), check => $check));
+ }
+
+ my @sorted = sort { $b->[0] <=> $a->[0] } @namever_pairs;
+
+ foreach my $pair (@sorted) {
+ shift @$pair;
+ }
+
+ return @sorted;
+}
+
+1;
diff --git a/po4a/Makefile b/po4a/Makefile
new file mode 100644
index 0000000..d00ce01
--- /dev/null
+++ b/po4a/Makefile
@@ -0,0 +1,42 @@
+include ../Makefile.common
+
+LANGS = de fr pt
+
+DESC_de/ = Debian-Hilfswerkzeuge
+DESC_fr/ = Utilitaires Debian
+DESC_pt/ = Utilitários Debian
+
+GEN_TR_MAN1S := $(sort $(foreach lang,$(LANGS),$(patsubst %.1,$(lang)/%.$(lang).1,$(GEN_MAN1S))))
+
+all: translate
+# GEN_TR_MAN1S needs translate finished, serialize the calls
+ @$(MAKE) transform
+transform: $(GEN_TR_MAN1S)
+
+translate: ../doc/devscripts.1
+ po4a --previous --no-backups --keep=0 devscripts-po4a.conf
+ touch $@
+
+clean: ../doc/devscripts.1
+ po4a --previous --rm-translations --no-backups devscripts-po4a.conf
+ rm -f $(GEN_TR_MAN1S) translate
+ rm -rf $(LANGS)
+
+../doc/devscripts.1:
+ # po4a translate and clean need ../doc/devscripts.1, rebuild it
+ $(MAKE) -C ../doc devscripts.1
+
+%.1:: %.pl translate
+ -podchecker $<
+ pod2man --utf8 --center=" " --release="$(DESC_$(dir $@))" $< > $@
+%.1:: %.pod translate
+ -podchecker $<
+ pod2man --utf8 --center=" " --release="$(DESC_$(dir $@))" $< > $@
+%.1:: %.dbk translate
+ xsltproc --nonet \
+ /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl $<
+ # /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/other.xsl
+ # (which is imported by the above stylesheet) insists in writing the output
+ # to where it wants to. we can only move the file ourselves.
+ # ($* → de/deb-reversion.de)
+ mv $(notdir $(basename $*)).1 $@
diff --git a/po4a/add_de/translator_man.add b/po4a/add_de/translator_man.add
new file mode 100644
index 0000000..8b633b4
--- /dev/null
+++ b/po4a/add_de/translator_man.add
@@ -0,0 +1,16 @@
+PO4A-HEADER:mode=after;position=^\.SH BESCHREIBUNG;beginboundary=FakePo4aBoundary
+.SH ÜBERSETZUNG
+Diese Übersetzung wurde mit dem Werkzeug
+.B po4a
+<URL:https://po4a.org/>
+durch Chris Leick
+.I c.leick@vollbio.de
+im Juli 2012 erstellt und vom deutschen Debian-Übersetzer-Team korrekturgelesen.
+Bitte melden Sie alle Fehler in der Übersetzung an
+.I debian-l10n-german@lists.debian.org
+oder als Fehlerbericht an das Paket
+.IR devscripts .
+Sie können mit dem folgenden Befehl das englische
+Original anzeigen
+.RB "»" "man -L C"
+.IR "Abschnitt deutsche_Handbuchseite" "«."
diff --git a/po4a/add_fr/translator_dbk.add b/po4a/add_fr/translator_dbk.add
new file mode 100644
index 0000000..c69fd7c
--- /dev/null
+++ b/po4a/add_fr/translator_dbk.add
@@ -0,0 +1,27 @@
+PO4A-HEADER:mode=after;position=AUTEUR;endboundary=</refsect1>
+
+ <refsect1>
+ <title>TRADUCTION</title>
+
+ <para>
+ Cette page de manuel a été traduite par Cyril Brulebois,
+ Thomas Huriaux et David Prévot.
+ </para>
+
+ <para>
+ L'équipe de traduction a fait le maximum pour réaliser une adaptation
+ française de qualité.
+ </para>
+
+ <para>
+ La version anglaise la plus à jour de ce document est toujours
+ consultable en ajoutant l'option « -L C » à la
+ commande <command>man</command>.
+ </para>
+
+ <para>
+ N'hésitez pas à signaler à l'auteur ou à la liste de traduction
+ <email>debian-l10-french@lists.debian.org</email>
+ selon le cas, toute erreur dans cette page de manuel.
+ </para>
+ </refsect1>
diff --git a/po4a/add_fr/translator_man.add b/po4a/add_fr/translator_man.add
new file mode 100644
index 0000000..692b4c5
--- /dev/null
+++ b/po4a/add_fr/translator_man.add
@@ -0,0 +1,19 @@
+PO4A-HEADER:mode=after;position=^\.SH NOM;beginboundary=FakePo4aBoundary
+.SH TRADUCTION
+Ce document est une traduction, maintenue à l'aide de l'outil
+po4a <\fIhttps://po4a.org/\fR> par l'équipe de
+traduction francophone du projet Debian.
+
+Nicolas François, Guillaume Delacour, Cyril Brulebois, Thomas Huriaux
+et David Prévot ont réalisé cette traduction.
+
+L'équipe de traduction a fait le maximum pour réaliser une adaptation
+française de qualité.
+Veuillez signaler toute erreur de traduction en écrivant à
+.nh
+<\fIdebian\-l10n\-french@lists.debian.org\fR>
+.hy
+ou par un rapport de bogue sur le paquet devscripts.
+
+La version anglaise la plus à jour de ce document est toujours consultable
+en ajoutant l'option «\ \fB\-L\ C\fR\ » à la commande \fBman\fR.
diff --git a/po4a/add_fr/translator_pod.add b/po4a/add_fr/translator_pod.add
new file mode 100644
index 0000000..3f49f58
--- /dev/null
+++ b/po4a/add_fr/translator_pod.add
@@ -0,0 +1,10 @@
+PO4A-HEADER:mode=after;position=^=head1 NOM;beginboundary=FakePo4aBoundary
+=head1 TRADUCTION
+
+Cyril Brulebois <I<cyril.brulebois@enst-bretagne.fr>>, 2006
+
+Thomas Huriaux <I<thomas.huriaux@gmail.com>>, 2006
+
+David Prévot <I<david@tilapin.org>>, 2010-2013
+
+Xavier Guimard <I<yadd@debian.org>>, 2018-2021
diff --git a/po4a/add_pt/translator_man.add b/po4a/add_pt/translator_man.add
new file mode 100644
index 0000000..d2ca85d
--- /dev/null
+++ b/po4a/add_pt/translator_man.add
@@ -0,0 +1,6 @@
+PO4A-HEADER:mode=after;position=^\.SH NOM;beginboundary=FakePo4aBoundary
+.SH TRADUÇÃO
+Tradução para Português por Américo Monteiro
+
+Se encontrar algum defeito nesta tradução
+comunique-o para a_monteiro@gmx.com
diff --git a/po4a/devscripts-po4a.conf b/po4a/devscripts-po4a.conf
new file mode 100644
index 0000000..3322bc0
--- /dev/null
+++ b/po4a/devscripts-po4a.conf
@@ -0,0 +1,152 @@
+[po_directory] po/
+
+# List the documents to translate, their format, their translations
+# (as well as the addendums to apply to the translations)
+[type:man] ../scripts/annotate-output.1 \
+ $lang:$lang/annotate-output.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/archpath.1 \
+ $lang:$lang/archpath.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/bts.pl \
+ $lang:$lang/bts.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:pod] ../scripts/build-rdeps.pl \
+ $lang:$lang/build-rdeps.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:pod] ../scripts/chdist.pl \
+ $lang:$lang/chdist.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/checkbashisms.1 \
+ $lang:$lang/checkbashisms.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/cowpoke.1 \
+ $lang:$lang/cowpoke.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/cvs-debc.1 \
+ $lang:$lang/cvs-debc.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/cvs-debi.1 \
+ $lang:$lang/cvs-debi.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/cvs-debrelease.1 \
+ $lang:$lang/cvs-debrelease.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/cvs-debuild.1 \
+ $lang:$lang/cvs-debuild.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/dcmd.1 \
+ $lang:$lang/dcmd.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/dd-list.1 \
+ $lang:$lang/dd-list.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/debc.1 \
+ $lang:$lang/debc.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/debchange.1 \
+ $lang:$lang/debchange.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/debcheckout.pl \
+ $lang:$lang/debcheckout.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/debclean.1 \
+ $lang:$lang/debclean.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/debcommit.pl \
+ $lang:$lang/debcommit.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/debdiff.1 \
+ $lang:$lang/debdiff.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/debdiff-apply.1 \
+ $lang:$lang/debdiff-apply.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/debi.1 \
+ $lang:$lang/debi.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/debpkg.1 \
+ $lang:$lang/debpkg.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/debrepro.pod \
+ $lang:$lang/debrepro.$lang.pod add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/debrelease.1 \
+ $lang:$lang/debrelease.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:docbook] ../scripts/deb-reversion.dbk \
+ $lang:$lang/deb-reversion.$lang.dbk add_$lang:?add_$lang/translator_dbk.add
+[type:pod] ../scripts/deb-why-removed.pl \
+ $lang:$lang/deb-why-removed.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/debrsign.1 \
+ $lang:$lang/debrsign.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/debsign.1 \
+ $lang:$lang/debsign.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/debsnap.1 \
+ $lang:$lang/debsnap.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/debuild.1 \
+ $lang:$lang/debuild.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/desktop2menu.pl \
+ $lang:$lang/desktop2menu.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/dep3changelog.1 \
+ $lang:$lang/dep3changelog.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../doc/devscripts.1 \
+ $lang:$lang/devscripts.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/dget.pl \
+ $lang:$lang/dget.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/diff2patches.1 \
+ $lang:$lang/diff2patches.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/dpkg-depcheck.1 \
+ $lang:$lang/dpkg-depcheck.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/dpkg-genbuilddeps.1 \
+ $lang:$lang/dpkg-genbuilddeps.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../doc/edit-patch.1 \
+ $lang:$lang/edit-patch.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/dscextract.1 \
+ $lang:$lang/dscextract.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/dscverify.1 \
+ $lang:$lang/dscverify.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/getbuildlog.1 \
+ $lang:$lang/getbuildlog.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/git-deborig.pl \
+ $lang:$lang/git-deborig.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/grep-excuses.1 \
+ $lang:$lang/grep-excuses.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/hardening-check.pl \
+ $lang:$lang/hardening-check.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/list-unreleased.1 \
+ $lang:$lang/list-unreleased.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/ltnu.pod \
+ $lang:$lang/ltnu.$lang.pod add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/manpage-alert.1 \
+ $lang:$lang/manpage-alert.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/mass-bug.pl \
+ $lang:$lang/mass-bug.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/mergechanges.1 \
+ $lang:$lang/mergechanges.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/mk-build-deps.pl \
+ $lang:$lang/mk-build-deps.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:pod] ../scripts/mk-origtargz.pl \
+ $lang:$lang/mk-origtargz.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:pod] ../scripts/namecheck.pl \
+ $lang:$lang/namecheck.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/nmudiff.1 \
+ $lang:$lang/nmudiff.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/origtargz.pl \
+ $lang:$lang/origtargz.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/plotchangelog.1 \
+ $lang:$lang/plotchangelog.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/pts-subscribe.1 \
+ $lang:$lang/pts-subscribe.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/rc-alert.1 \
+ $lang:$lang/rc-alert.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/rmadison.pl \
+ $lang:$lang/rmadison.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:pod] ../scripts/sadt.pod \
+ $lang:$lang/sadt.$lang.pod add_$lang:?add_$lang/translator_pod.add
+[type:pod] ../scripts/salsa.pl \
+ $lang:$lang/salsa.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../doc/suspicious-source.1 \
+ $lang:$lang/suspicious-source.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/svnpath.pl \
+ $lang:$lang/svnpath.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:pod] ../scripts/tagpending.pl \
+ $lang:$lang/tagpending.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:pod] ../scripts/transition-check.pl \
+ $lang:$lang/transition-check.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:pod] ../scripts/uscan.pl \
+ $lang:$lang/uscan.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/uupdate.1 \
+ $lang:$lang/uupdate.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../doc/what-patch.1 \
+ $lang:$lang/what-patch.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/whodepends.1 \
+ $lang:$lang/whodepends.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/who-uploads.1 \
+ $lang:$lang/who-uploads.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:pod] ../scripts/who-permits-upload.pl \
+ $lang:$lang/who-permits-upload.$lang.pl add_$lang:?add_$lang/translator_pod.add
+[type:man] ../scripts/wnpp-alert.1 \
+ $lang:$lang/wnpp-alert.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../scripts/wnpp-check.1 \
+ $lang:$lang/wnpp-check.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../doc/wrap-and-sort.1 \
+ $lang:$lang/wrap-and-sort.$lang.1 add_$lang:?add_$lang/translator_man.add
+[type:man] ../doc/devscripts.conf.5 \
+ $lang:$lang/devscripts.conf.$lang.5 add_$lang:?add_$lang/translator_man.add
diff --git a/po4a/po/de.po b/po4a/po/de.po
new file mode 100644
index 0000000..ed0f6c2
--- /dev/null
+++ b/po4a/po/de.po
@@ -0,0 +1,30629 @@
+# Translation of the devscripts documentation to German.
+# This file is distributed under the same license as the devscripts package.
+# Copyright (C) Christoph Lameter, Julian Gilbey, Klee Dienes.
+# Copyright (C) of this file Chris Leick <c.leick@vollbio.de>, 2012-2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: devscripts 2.18.9\n"
+"Report-Msgid-Bugs-To: devscripts@packages.debian.org\n"
+"POT-Creation-Date: 2023-04-05 11:18+0200\n"
+"PO-Revision-Date: 2020-04-25 23:04+0200\n"
+"Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
+"Language-Team: de <debian-l10n-german@lists.debian.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1
+#, no-wrap
+msgid "ANNOTATE-OUTPUT"
+msgstr "ANNOTATE-OUTPUT"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1 ../scripts/archpath.1:1
+#: ../scripts/checkbashisms.1:1 ../scripts/cvs-debc.1:1 ../scripts/cvs-debi.1:1
+#: ../scripts/cvs-debrelease.1:1 ../scripts/cvs-debuild.1:1 ../scripts/dcmd.1:1
+#: ../scripts/debc.1:1 ../scripts/debchange.1:1 ../scripts/debclean.1:1
+#: ../scripts/debdiff.1:1 ../scripts/debdiff-apply.1:15 ../scripts/debi.1:1
+#: ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1
+#: ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/dep3changelog.1:1
+#: ../doc/devscripts.1:1 ../scripts/dpkg-genbuilddeps.1:1 ../doc/edit-patch.1:1
+#: ../scripts/dscextract.1:1 ../scripts/dscverify.1:1
+#: ../scripts/getbuildlog.1:1 ../scripts/grep-excuses.1:1
+#: ../scripts/list-unreleased.1:1 ../scripts/manpage-alert.1:1
+#: ../scripts/mergechanges.1:1 ../scripts/nmudiff.1:1
+#: ../scripts/plotchangelog.1:1 ../scripts/pts-subscribe.1:1
+#: ../scripts/rc-alert.1:1 ../doc/suspicious-source.1:15 ../scripts/uupdate.1:1
+#: ../doc/what-patch.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../doc/wrap-and-sort.1:15 ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "Debian Utilities"
+msgstr "Debian-Hilfswerkzeuge"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1 ../scripts/archpath.1:1
+#: ../scripts/checkbashisms.1:1 ../scripts/cvs-debc.1:1 ../scripts/cvs-debi.1:1
+#: ../scripts/cvs-debrelease.1:1 ../scripts/cvs-debuild.1:1 ../scripts/dcmd.1:1
+#: ../scripts/debc.1:1 ../scripts/debchange.1:1 ../scripts/debclean.1:1
+#: ../scripts/debdiff.1:1 ../scripts/debdiff-apply.1:15 ../scripts/debi.1:1
+#: ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1
+#: ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/dep3changelog.1:1
+#: ../doc/devscripts.1:1 ../scripts/dpkg-depcheck.1:1
+#: ../scripts/dpkg-genbuilddeps.1:1 ../doc/edit-patch.1:1
+#: ../scripts/dscextract.1:1 ../scripts/dscverify.1:1
+#: ../scripts/getbuildlog.1:1 ../scripts/grep-excuses.1:1
+#: ../scripts/list-unreleased.1:1 ../scripts/manpage-alert.1:1
+#: ../scripts/mergechanges.1:1 ../scripts/nmudiff.1:1
+#: ../scripts/plotchangelog.1:1 ../scripts/pts-subscribe.1:1
+#: ../scripts/rc-alert.1:1 ../doc/suspicious-source.1:15 ../scripts/uupdate.1:1
+#: ../doc/what-patch.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../doc/wrap-and-sort.1:15 ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "DEBIAN"
+msgstr "DEBIAN"
+
+#. type: SH
+#: ../scripts/annotate-output.1:2 ../scripts/archpath.1:2 ../scripts/bts.pl:39
+#: ../scripts/build-rdeps.pl:22 ../scripts/chdist.pl:18
+#: ../scripts/checkbashisms.1:2 ../scripts/cowpoke.1:18 ../scripts/cvs-debc.1:2
+#: ../scripts/cvs-debi.1:2 ../scripts/cvs-debrelease.1:2
+#: ../scripts/cvs-debuild.1:2 ../scripts/dcmd.1:2 ../scripts/dd-list.1:18
+#: ../scripts/debc.1:2 ../scripts/debchange.1:2 ../scripts/debcheckout.pl:24
+#: ../scripts/debclean.1:2 ../scripts/debcommit.pl:3 ../scripts/debdiff.1:2
+#: ../scripts/debdiff-apply.1:17 ../scripts/debi.1:2 ../scripts/debpkg.1:2
+#: ../scripts/debrepro.pod:1 ../scripts/debrelease.1:2
+#: ../scripts/deb-why-removed.pl:196 ../scripts/debrsign.1:2
+#: ../scripts/debsign.1:2 ../scripts/debsnap.1:3 ../scripts/debuild.1:2
+#: ../scripts/desktop2menu.pl:24 ../scripts/dep3changelog.1:2
+#: ../doc/devscripts.1:2 ../scripts/dget.pl:565 ../scripts/diff2patches.1:2
+#: ../scripts/dpkg-depcheck.1:2 ../scripts/dpkg-genbuilddeps.1:2
+#: ../doc/edit-patch.1:2 ../scripts/dscextract.1:2 ../scripts/dscverify.1:2
+#: ../scripts/getbuildlog.1:2 ../scripts/git-deborig.pl:20
+#: ../scripts/grep-excuses.1:2 ../scripts/hardening-check.pl:521
+#: ../scripts/list-unreleased.1:2 ../scripts/ltnu.pod:1
+#: ../scripts/manpage-alert.1:2 ../scripts/mass-bug.pl:21
+#: ../scripts/mergechanges.1:2 ../scripts/mk-build-deps.pl:24
+#: ../scripts/mk-origtargz.pl:25 ../scripts/namecheck.pl:3
+#: ../scripts/nmudiff.1:2 ../scripts/origtargz.pl:20
+#: ../scripts/plotchangelog.1:2 ../scripts/pts-subscribe.1:2
+#: ../scripts/rc-alert.1:2 ../scripts/rmadison.pl:260 ../scripts/sadt.pod:17
+#: ../scripts/salsa.pl:3 ../doc/suspicious-source.1:17 ../scripts/svnpath.pl:3
+#: ../scripts/tagpending.pl:80 ../scripts/transition-check.pl:23
+#: ../scripts/uscan.pl:34 ../scripts/uupdate.1:2 ../doc/what-patch.1:2
+#: ../scripts/whodepends.1:2 ../scripts/who-uploads.1:2
+#: ../scripts/who-permits-upload.pl:48 ../scripts/wnpp-alert.1:2
+#: ../scripts/wnpp-check.1:2 ../doc/wrap-and-sort.1:16
+#: ../doc/devscripts.conf.5:2
+#, no-wrap
+msgid "NAME"
+msgstr "BEZEICHNUNG"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:4
+msgid "annotate-output - annotate program output with time and stream"
+msgstr "annotate-output - versieht Programmausgaben mit Zeit und Datenstrom"
+
+#. type: SH
+#: ../scripts/annotate-output.1:4 ../scripts/archpath.1:4 ../scripts/bts.pl:191
+#: ../scripts/build-rdeps.pl:26 ../scripts/chdist.pl:22
+#: ../scripts/checkbashisms.1:4 ../scripts/cowpoke.1:20 ../scripts/cvs-debc.1:4
+#: ../scripts/cvs-debi.1:4 ../scripts/cvs-debrelease.1:4
+#: ../scripts/cvs-debuild.1:4 ../scripts/dcmd.1:4 ../scripts/dd-list.1:21
+#: ../scripts/debc.1:4 ../scripts/debchange.1:4 ../scripts/debcheckout.pl:28
+#: ../scripts/debclean.1:4 ../scripts/debcommit.pl:7 ../scripts/debdiff.1:4
+#: ../scripts/debdiff-apply.1:20 ../scripts/debi.1:4 ../scripts/debpkg.1:4
+#: ../scripts/debrepro.pod:5 ../scripts/debrelease.1:4
+#: ../scripts/deb-why-removed.pl:200 ../scripts/debrsign.1:4
+#: ../scripts/debsign.1:4 ../scripts/debsnap.1:6 ../scripts/debuild.1:4
+#: ../scripts/desktop2menu.pl:28 ../scripts/dep3changelog.1:4
+#: ../scripts/dget.pl:569 ../scripts/dpkg-depcheck.1:4
+#: ../scripts/dpkg-genbuilddeps.1:4 ../doc/edit-patch.1:6
+#: ../scripts/dscextract.1:4 ../scripts/dscverify.1:4
+#: ../scripts/getbuildlog.1:4 ../scripts/git-deborig.pl:24
+#: ../scripts/grep-excuses.1:4 ../scripts/hardening-check.pl:525
+#: ../scripts/list-unreleased.1:4 ../scripts/ltnu.pod:5
+#: ../scripts/manpage-alert.1:4 ../scripts/mass-bug.pl:25
+#: ../scripts/mergechanges.1:4 ../scripts/mk-build-deps.pl:28
+#: ../scripts/mk-origtargz.pl:29 ../scripts/nmudiff.1:4
+#: ../scripts/origtargz.pl:24 ../scripts/plotchangelog.1:4
+#: ../scripts/pts-subscribe.1:4 ../scripts/rc-alert.1:4
+#: ../scripts/rmadison.pl:264 ../scripts/sadt.pod:21 ../scripts/salsa.pl:7
+#: ../doc/suspicious-source.1:21 ../scripts/svnpath.pl:7
+#: ../scripts/tagpending.pl:84 ../scripts/transition-check.pl:27
+#: ../scripts/uscan.pl:38 ../scripts/uupdate.1:4 ../doc/what-patch.1:5
+#: ../scripts/whodepends.1:4 ../scripts/who-uploads.1:4
+#: ../scripts/who-permits-upload.pl:52 ../scripts/wnpp-alert.1:4
+#: ../scripts/wnpp-check.1:4 ../doc/wrap-and-sort.1:18
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "ÜBERSICHT"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:6
+msgid "B<annotate-output> [I<options>] I<program> [I<args> ...]"
+msgstr "B<annotate-output> [I<Optionen>] I<Programm> [I<Argumente> …]"
+
+#. type: SH
+#: ../scripts/annotate-output.1:6 ../scripts/archpath.1:12
+#: ../scripts/bts.pl:195 ../scripts/build-rdeps.pl:30 ../scripts/chdist.pl:26
+#: ../scripts/checkbashisms.1:8 ../scripts/cowpoke.1:24 ../scripts/cvs-debc.1:6
+#: ../scripts/cvs-debi.1:6 ../scripts/cvs-debrelease.1:7
+#: ../scripts/cvs-debuild.1:7 ../scripts/dcmd.1:6 ../scripts/dd-list.1:26
+#: ../scripts/debc.1:6 ../scripts/debchange.1:8 ../scripts/debcheckout.pl:40
+#: ../scripts/debclean.1:6 ../scripts/debcommit.pl:11 ../scripts/debdiff.1:15
+#: ../scripts/debdiff-apply.1:27 ../scripts/debi.1:6 ../scripts/debpkg.1:6
+#: ../scripts/debrepro.pod:9 ../scripts/debrelease.1:6
+#: ../scripts/deb-reversion.dbk:82 ../scripts/deb-why-removed.pl:204
+#: ../scripts/debrsign.1:7 ../scripts/debsign.1:6 ../scripts/debsnap.1:14
+#: ../scripts/debuild.1:10 ../scripts/desktop2menu.pl:34
+#: ../scripts/dep3changelog.1:6 ../doc/devscripts.1:4 ../scripts/dget.pl:579
+#: ../scripts/diff2patches.1:10 ../scripts/dpkg-depcheck.1:6
+#: ../scripts/dpkg-genbuilddeps.1:6 ../doc/edit-patch.1:11
+#: ../scripts/dscextract.1:6 ../scripts/dscverify.1:6
+#: ../scripts/getbuildlog.1:8 ../scripts/git-deborig.pl:28
+#: ../scripts/grep-excuses.1:6 ../scripts/hardening-check.pl:532
+#: ../scripts/list-unreleased.1:6 ../scripts/ltnu.pod:13
+#: ../scripts/manpage-alert.1:6 ../scripts/mass-bug.pl:29
+#: ../scripts/mergechanges.1:6 ../scripts/mk-build-deps.pl:34
+#: ../scripts/mk-origtargz.pl:39 ../scripts/nmudiff.1:6
+#: ../scripts/origtargz.pl:34 ../scripts/plotchangelog.1:7
+#: ../scripts/pts-subscribe.1:8 ../scripts/rc-alert.1:8
+#: ../scripts/rmadison.pl:272 ../scripts/sadt.pod:25 ../scripts/salsa.pl:30
+#: ../doc/suspicious-source.1:24 ../scripts/svnpath.pl:17
+#: ../scripts/tagpending.pl:88 ../scripts/transition-check.pl:33
+#: ../scripts/uscan.pl:42 ../scripts/uupdate.1:10 ../doc/what-patch.1:8
+#: ../scripts/whodepends.1:6 ../scripts/who-uploads.1:6
+#: ../scripts/who-permits-upload.pl:56 ../scripts/wnpp-alert.1:8
+#: ../scripts/wnpp-check.1:8 ../doc/wrap-and-sort.1:22
+#: ../doc/devscripts.conf.5:4
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "BESCHREIBUNG"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:10
+msgid ""
+"B<annotate-output> will execute the specified program, while prepending "
+"every line with the current time and O for stdout and E for stderr."
+msgstr ""
+"B<annotate-output> wird das angegebene Programm ausführen, wobei jeder Zeile "
+"die aktuelle Zeit und O für die Standardausgabe (Stdout) sowie E für die "
+"Standardfehlerausgabe (Stderr) vorangestellt wird."
+
+#. type: SH
+#: ../scripts/annotate-output.1:11 ../scripts/bts.pl:247
+#: ../scripts/build-rdeps.pl:46 ../scripts/chdist.pl:33
+#: ../scripts/checkbashisms.1:23 ../scripts/cowpoke.1:29
+#: ../scripts/cvs-debc.1:24 ../scripts/cvs-debi.1:28
+#: ../scripts/cvs-debrelease.1:21 ../scripts/cvs-debuild.1:32
+#: ../scripts/dcmd.1:15 ../scripts/dd-list.1:58 ../scripts/debc.1:64
+#: ../scripts/debchange.1:149 ../scripts/debcheckout.pl:68
+#: ../scripts/debclean.1:63 ../scripts/debcommit.pl:19 ../scripts/debdiff.1:52
+#: ../scripts/debdiff-apply.1:61 ../scripts/debi.1:65
+#: ../scripts/debrepro.pod:92 ../scripts/debrelease.1:56
+#: ../scripts/deb-reversion.dbk:128 ../scripts/deb-why-removed.pl:209
+#: ../scripts/debrsign.1:30 ../scripts/debsign.1:39 ../scripts/debsnap.1:26
+#: ../scripts/debuild.1:256 ../scripts/dep3changelog.1:15
+#: ../scripts/dget.pl:620 ../scripts/diff2patches.1:16
+#: ../scripts/dpkg-depcheck.1:15 ../scripts/dscextract.1:14
+#: ../scripts/dscverify.1:17 ../scripts/getbuildlog.1:24
+#: ../scripts/git-deborig.pl:47 ../scripts/grep-excuses.1:14
+#: ../scripts/hardening-check.pl:593 ../scripts/list-unreleased.1:12
+#: ../scripts/ltnu.pod:27 ../scripts/manpage-alert.1:12
+#: ../scripts/mass-bug.pl:59 ../scripts/mk-build-deps.pl:44
+#: ../scripts/mk-origtargz.pl:64 ../scripts/nmudiff.1:24
+#: ../scripts/origtargz.pl:100 ../scripts/plotchangelog.1:43
+#: ../scripts/pts-subscribe.1:18 ../scripts/rc-alert.1:17
+#: ../scripts/rmadison.pl:281 ../scripts/sadt.pod:42 ../scripts/salsa.pl:437
+#: ../doc/suspicious-source.1:34 ../scripts/tagpending.pl:94
+#: ../scripts/transition-check.pl:42 ../scripts/uupdate.1:54
+#: ../doc/what-patch.1:15 ../scripts/whodepends.1:10
+#: ../scripts/who-uploads.1:15 ../scripts/who-permits-upload.pl:62
+#: ../scripts/wnpp-alert.1:17 ../scripts/wnpp-check.1:16
+#: ../doc/wrap-and-sort.1:35
+#, no-wrap
+msgid "OPTIONS"
+msgstr "OPTIONEN"
+
+#. type: TP
+#: ../scripts/annotate-output.1:12
+#, no-wrap
+msgid "B<+FORMAT>"
+msgstr "B<+FORMAT>"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:16
+msgid ""
+"Controls the timestamp format, as per B<date>(1). Defaults to \"%H:%M:%S\"."
+msgstr ""
+"steuert das Zeitstempelformat, wie bei B<date>(1). Vorgabe ist »%H:%M:%S«."
+
+#. type: TP
+#: ../scripts/annotate-output.1:16 ../scripts/chdist.pl:37
+#: ../scripts/dd-list.1:59 ../scripts/debcheckout.pl:96
+#: ../scripts/debdiff-apply.1:62 ../scripts/debsnap.1:73 ../scripts/dget.pl:680
+#: ../scripts/dpkg-depcheck.1:96 ../scripts/getbuildlog.1:25
+#: ../scripts/mk-build-deps.pl:111 ../scripts/rmadison.pl:305
+#: ../scripts/sadt.pod:64 ../doc/suspicious-source.1:35 ../doc/what-patch.1:17
+#: ../doc/wrap-and-sort.1:36
+#, no-wrap
+msgid "B<-h>, B<--help>"
+msgstr "B<-h>, B<--help>"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:19 ../scripts/debchange.1:402
+#: ../scripts/debclean.1:90 ../scripts/debrelease.1:102
+#: ../scripts/debsign.1:102 ../scripts/dep3changelog.1:19
+#: ../scripts/dscverify.1:40 ../scripts/nmudiff.1:89
+#: ../scripts/pts-subscribe.1:31 ../scripts/uupdate.1:104
+#: ../scripts/who-uploads.1:48
+msgid "Display a help message and exit successfully."
+msgstr "zeigt eine Hilfenachricht an und endet erfolgreich"
+
+#. type: =head1
+#: ../scripts/annotate-output.1:20 ../scripts/dscextract.1:30
+#: ../scripts/ltnu.pod:84
+#, no-wrap
+msgid "EXAMPLE"
+msgstr "BEISPIEL"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:30
+#, no-wrap
+msgid ""
+"$ annotate-output make\n"
+"21:41:21 I: Started make\n"
+"21:41:21 O: gcc -Wall program.c\n"
+"21:43:18 E: program.c: Couldn't compile, and took me ages to find out\n"
+"21:43:19 E: collect2: ld returned 1 exit status\n"
+"21:43:19 E: make: *** [all] Error 1\n"
+"21:43:19 I: Finished with exitcode 2\n"
+msgstr ""
+"$ annotate-output make\n"
+"21:41:21 I: Started make\n"
+"21:41:21 O: gcc -Wall program.c\n"
+"21:43:18 E: program.c: Couldn't compile, and took me ages to find out\n"
+"21:43:19 E: collect2: ld returned 1 exit status\n"
+"21:43:19 E: make: *** [all] Error 1\n"
+"21:43:19 I: Finished with exitcode 2\n"
+
+#. type: SH
+#: ../scripts/annotate-output.1:32 ../scripts/debsnap.1:156
+#: ../scripts/rc-alert.1:119 ../scripts/whodepends.1:17
+#, no-wrap
+msgid "BUGS"
+msgstr "FEHLER"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:36
+msgid ""
+"Since stdout and stderr are processed in parallel, it can happen that some "
+"lines received on stdout will show up before later-printed stderr lines (and "
+"vice-versa)."
+msgstr ""
+"Da die Standardausgabe (Stdout) und die Standardfehlerausgabe (Stderr) "
+"parallel verarbeitet werden, kann es vorkommen, dass einige Zeilen, die auf "
+"der Standardausgabe empfangen werden, vor später ausgegebenen Zeilen auf der "
+"Standardfehlerausgabe erscheinen (und umgekehrt)."
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:41
+msgid ""
+"This is unfortunately very hard to fix with the current annotation "
+"strategy. A fix would involve switching to PTRACE'ing the process. Giving "
+"nice a (much) higher priority over the executed program could however cause "
+"this behaviour to show up less frequently."
+msgstr ""
+"Dies ist leider sehr schwer mit der derzeitigen Kommentierungsstrategie zu "
+"beheben. Eine Fehlerbehebung würde ein PTRACE des Prozesses einbeziehen, "
+"»nice« eine (viel) höhere Priorität über das ausgeführte Programm zu geben, "
+"könnte jedoch dazu führen, dass sich dieses Verhalten seltener zeigt."
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:46
+msgid ""
+"The program does not work as well when the output is not linewise. In "
+"particular, when an interactive program asks for input, the question might "
+"not be shown until after you have answered it. This will give the "
+"impression that the annotated program has hung, while it has not."
+msgstr ""
+"Das Programm funktioniert auch dann nicht, wenn die Ausgabe nicht "
+"zeilenweise erfolgt. Insbesondere, wenn ein interaktives Programm auf eine "
+"Eingabe wartet, könnte es sein, dass die Frage erst angezeigt wird, nachdem "
+"Sie sie beantwortet haben. Dies wird den Eindruck vermitteln, dass das "
+"Programm sich aufgehängt hat, was aber nicht der Fall ist."
+
+#. type: SH
+#: ../scripts/annotate-output.1:47 ../scripts/bts.pl:4316
+#: ../scripts/checkbashisms.1:72 ../scripts/cowpoke.1:379
+#: ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62
+#: ../scripts/cvs-debrelease.1:64 ../scripts/cvs-debuild.1:53
+#: ../scripts/dcmd.1:107 ../scripts/debc.1:125 ../scripts/debchange.1:482
+#: ../scripts/debcheckout.pl:231 ../scripts/debclean.1:110
+#: ../scripts/debcommit.pl:954 ../scripts/debdiff.1:251
+#: ../scripts/debdiff-apply.1:111 ../scripts/debi.1:132
+#: ../scripts/debrepro.pod:171 ../scripts/debrelease.1:132
+#: ../scripts/deb-reversion.dbk:247 ../scripts/deb-why-removed.pl:247
+#: ../scripts/debrsign.1:66 ../scripts/debsign.1:132 ../scripts/debsnap.1:138
+#: ../scripts/debuild.1:447 ../scripts/dep3changelog.1:28
+#: ../scripts/dget.pl:742 ../scripts/diff2patches.1:45
+#: ../scripts/dpkg-depcheck.1:118 ../scripts/dpkg-genbuilddeps.1:30
+#: ../scripts/dscverify.1:78 ../scripts/git-deborig.pl:79
+#: ../scripts/grep-excuses.1:61 ../scripts/hardening-check.pl:680
+#: ../scripts/list-unreleased.1:19 ../scripts/ltnu.pod:105
+#: ../scripts/mk-origtargz.pl:210 ../scripts/nmudiff.1:121
+#: ../scripts/origtargz.pl:162 ../scripts/plotchangelog.1:124
+#: ../scripts/pts-subscribe.1:51 ../scripts/rc-alert.1:121
+#: ../scripts/rmadison.pl:404 ../scripts/sadt.pod:74 ../scripts/salsa.pl:1029
+#: ../scripts/tagpending.pl:149 ../scripts/uscan.pl:2094
+#: ../scripts/uupdate.1:189 ../doc/what-patch.1:35
+#: ../scripts/who-permits-upload.pl:167 ../scripts/wnpp-alert.1:29
+#: ../scripts/wnpp-check.1:26 ../doc/devscripts.conf.5:54
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "SIEHE AUCH"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:49
+msgid "B<date>(1)"
+msgstr "B<date>(1)"
+
+#. type: SH
+#: ../scripts/annotate-output.1:50
+#, no-wrap
+msgid "SUPPORT"
+msgstr "UNTERSTÜTZUNG"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:54
+msgid ""
+"This program is community-supported (meaning: you'll need to fix it "
+"yourself). Patches are however appreciated, as is any feedback (positive or "
+"negative)."
+msgstr ""
+"Dieses Programm wird von der Gemeinschaft unterstützt (heißt: Sie müssen "
+"selbst Fehler beheben). Patches werden jedoch gewürdigt, wie auch andere "
+"(positive oder negative) Rückmeldung."
+
+#. type: SH
+#: ../scripts/annotate-output.1:55 ../scripts/archpath.1:54
+#: ../scripts/build-rdeps.pl:547 ../scripts/checkbashisms.1:74
+#: ../scripts/cowpoke.1:385 ../scripts/cvs-debc.1:63 ../scripts/cvs-debi.1:67
+#: ../scripts/cvs-debrelease.1:68 ../scripts/cvs-debuild.1:58
+#: ../scripts/dcmd.1:110 ../scripts/dd-list.1:107 ../scripts/debc.1:129
+#: ../scripts/debchange.1:488 ../scripts/debcheckout.pl:236
+#: ../scripts/debclean.1:113 ../scripts/debcommit.pl:950
+#: ../scripts/debdiff.1:259 ../scripts/debi.1:135 ../scripts/debpkg.1:23
+#: ../scripts/debrepro.pod:175 ../scripts/debrelease.1:136
+#: ../scripts/deb-reversion.dbk:292 ../scripts/debrsign.1:70
+#: ../scripts/debsign.1:144 ../scripts/debuild.1:459
+#: ../scripts/desktop2menu.pl:52 ../scripts/dep3changelog.1:26
+#: ../scripts/dget.pl:734 ../scripts/diff2patches.1:48
+#: ../scripts/dpkg-genbuilddeps.1:36 ../scripts/dscextract.1:32
+#: ../scripts/dscverify.1:83 ../scripts/getbuildlog.1:41
+#: ../scripts/git-deborig.pl:83 ../scripts/grep-excuses.1:63
+#: ../scripts/hardening-check.pl:668 ../scripts/list-unreleased.1:21
+#: ../scripts/manpage-alert.1:28 ../scripts/mass-bug.pl:566
+#: ../scripts/mergechanges.1:28 ../scripts/mk-build-deps.pl:141
+#: ../scripts/mk-origtargz.pl:214 ../scripts/namecheck.pl:24
+#: ../scripts/nmudiff.1:125 ../scripts/origtargz.pl:166
+#: ../scripts/plotchangelog.1:126 ../scripts/pts-subscribe.1:56
+#: ../scripts/rc-alert.1:125 ../scripts/rmadison.pl:408
+#: ../scripts/salsa.pl:1033 ../scripts/svnpath.pl:96
+#: ../scripts/transition-check.pl:81 ../scripts/uscan.pl:2098
+#: ../scripts/uupdate.1:196 ../scripts/whodepends.1:19
+#: ../scripts/who-uploads.1:73 ../scripts/who-permits-upload.pl:162
+#: ../scripts/wnpp-alert.1:31 ../scripts/wnpp-check.1:36
+#: ../doc/devscripts.conf.5:58
+#, no-wrap
+msgid "AUTHOR"
+msgstr "AUTOR"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:59
+msgid ""
+"B<annotate-output> was written by Jeroen van Wolffelaar "
+"E<lt>jeroen@wolffelaar.nlE<gt>. This manpage comes under the same copyright "
+"as annotate-output itself, read /usr/bin/annotate-output (or wherever you "
+"install it) for the details."
+msgstr ""
+"B<annotate-output> wurde von Jeroen van Wolffelaar E<lt>jeroen@wolffelaar."
+"nlE<gt> geschrieben. Diese Handbuchseite erscheint mit dem gleichen "
+"Copyright wie Annotate-Output selbst. Lesen Sie /usr/bin/annotate-output "
+"(oder wo auch immer Sie es installiert haben), um weitere Einzelheiten zu "
+"erhalten."
+
+#. type: TH
+#: ../scripts/archpath.1:1
+#, no-wrap
+msgid "ARCHPATH"
+msgstr "ARCHPATH"
+
+#. type: Plain text
+#: ../scripts/archpath.1:4
+msgid ""
+"archpath - output arch (tla/Bazaar) archive names, with support for branches"
+msgstr ""
+"archpath - gibt Architekturarchivnamen (tla/Bazaar) mit Unterstützung für "
+"Zweige aus"
+
+#. type: Plain text
+#: ../scripts/archpath.1:6
+msgid "B<archpath>"
+msgstr "B<archpath>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:9
+msgid "B<archpath> I<branch>"
+msgstr "B<archpath> I<Zweig>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:12
+msgid "B<archpath> I<branch>B<-->I<version>"
+msgstr "B<archpath> I<Zweig>B<-->I<Version>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:15
+msgid ""
+"B<archpath> is intended to be run in an arch (tla or Bazaar) working copy."
+msgstr ""
+"B<archpath> ist dazu gedacht, in einer Arbeitskopie einer Architektur (Tla "
+"oder Bazaar) ausgeführt zu werden."
+
+#. type: Plain text
+#: ../scripts/archpath.1:20
+msgid ""
+"In its simplest usage, B<archpath> with no parameters outputs the package "
+"name (archive/category--branch--version) associated with the working copy."
+msgstr ""
+"In seinem einfachsten Aufruf gibt B<archpath> ohne Parameter den Paketnamen "
+"(Archive/Kategorie--Zweig--Version) aus, der mit der Arbeitskopie verbunden "
+"ist."
+
+#. type: Plain text
+#: ../scripts/archpath.1:28
+msgid ""
+"If a parameter is given, it may either be a branch--version, in which case "
+"B<archpath> will output a corresponding package name in the current archive "
+"and category, or a plain branch name (without \\(oq--\"), in which case "
+"B<archpath> will output a corresponding package name in the current archive "
+"and category and with the same version as the current working copy."
+msgstr ""
+"Falls ein Parameter angegeben wurde, könnte es entweder eine Zweig--Version "
+"sein, in diesem Fall wird B<archpath> einen zugehörigen Paketnamen im "
+"aktuellen Archiv und in der aktuellen Kategorie ausgeben, oder ein einfacher "
+"Zweigname (ohne »--«). In diesem Fall wird B<archpath> einen zugehörigen "
+"Paketnamen im aktuellen Archiv in der aktuellen Kategorie und mit der selben "
+"Version wie die aktuelle Arbeitskopie ausgeben."
+
+#. type: Plain text
+#: ../scripts/archpath.1:32
+msgid ""
+"This is useful for branching. For example, if you're using Bazaar and you "
+"want to create a branch for a new feature, you might use a command like this:"
+msgstr ""
+"Dies ist nützlich beim Anlegen von Entwicklerzweigen. Falls Sie "
+"beispielsweise Bazaar benutzen und einen Zweig für eine neue Funktionalität "
+"erzeugen möchten, könnten Sie eine Befehlszeile wie die folgende verwenden:"
+
+#. type: Plain text
+#: ../scripts/archpath.1:37
+#, no-wrap
+msgid "CW<baz branch $(archpath) $(archpath new-feature)>\n"
+msgstr "CW<baz branch $(archpath) $(archpath neue_funktionalität)>\n"
+
+#. type: Plain text
+#: ../scripts/archpath.1:43
+msgid ""
+"Or if you want to tag your current code onto a \\(oqreleases\\(cq branch as "
+"version 1.0, you might use a command like this:"
+msgstr ""
+"Oder, falls Sie Ihren aktuellen Code auf einen »releases«-Zweig wie Version "
+"1.0 markieren wollen, können Sie einen Befehl wie diesen verwenden:"
+
+#. type: Plain text
+#: ../scripts/archpath.1:48
+#, no-wrap
+msgid "CW<baz branch $(archpath) $(archpath releases--1.0)>\n"
+msgstr "CW<baz branch $(archpath) $(archpath releases--1.0)>\n"
+
+#. type: Plain text
+#: ../scripts/archpath.1:54
+msgid ""
+"That's much easier than using \\(oqbaz tree-version\\(cq to look up the "
+"package name and manually modifying the result."
+msgstr ""
+"Das ist wesentlich einfacher, als »baz tree-version« zu benutzen, um den "
+"Paketnamen nachzuschlagen und das Ergebnis manuell zu verändern."
+
+#. type: Plain text
+#: ../scripts/archpath.1:57
+msgid "B<archpath> was written by"
+msgstr "B<archpath> wurde geschrieben von"
+
+#. type: Plain text
+#: ../scripts/archpath.1:59
+msgid "Colin Watson E<lt>cjwatson@debian.orgE<gt>."
+msgstr "Colin Watson E<lt>cjwatson@debian.orgE<gt>."
+
+#. type: Plain text
+#: ../scripts/archpath.1:63
+msgid ""
+"Like B<archpath>, this manual page is released under the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+"Diese Handbuchseite wird wie B<archpath> unter der GNU General Public "
+"License, Version 2 oder später, veröffentlicht."
+
+#. type: textblock
+#: ../scripts/bts.pl:41
+msgid ""
+"bts - developers' command line interface to the Debian Bug Tracking System"
+msgstr ""
+"bts - Befehlszeilenschnittstelle der Entwickler zum Debian Bug Tracking "
+"System"
+
+#. type: textblock
+#: ../scripts/bts.pl:193
+msgid ""
+"B<bts> [I<options>] I<command> [I<args>] [B<#>I<comment>] [B<.>|B<,> "
+"I<command> [I<args>] [B<#>I<comment>]] ..."
+msgstr ""
+"B<bts> [I<Optionen>] I<Befehl> [I<Argumente>] [B<#>I<Kommentar>] [B<.>|B<,> "
+"I<Befehl> [I<Argumente>] [B<#>I<Kommentar>]] …"
+
+#. type: textblock
+#: ../scripts/bts.pl:197
+msgid ""
+"This is a command line interface to the Debian Bug Tracking System (BTS), "
+"intended mainly for use by developers. It lets the BTS be manipulated using "
+"simple commands that can be run at the prompt or in a script, does various "
+"sanity checks on the input, and constructs and sends a mail to the BTS "
+"control address for you. A local cache of web pages and e-mails from the BTS "
+"may also be created and updated."
+msgstr ""
+"Dies ist eine Befehlszeilenschnittstelle zur Debian-Fehlerdatenbank (BTS), "
+"die hauptsächlich für den Gebrauch durch Entwickler gedacht ist. Sie "
+"ermöglicht die Manipulation des BTS durch einfache Befehle, die an der "
+"Eingabeaufforderung oder in einem Skript ausgeführt werden können, führt "
+"verschiedene Plausibilitätsprüfungen der Eingabe durch und konstruiert und "
+"sendet E-Mails für Sie an die BTS-Steueradresse. Außerdem kann ein lokaler "
+"Zwischenspeicher von Webseiten und E-Mails vom BTS erzeugt und aktualisiert "
+"werden."
+
+#. type: textblock
+#: ../scripts/bts.pl:205
+msgid ""
+"In general, the command line interface is the same as what you would write "
+"in a mail to control@bugs.debian.org, just prefixed with \"bts\". For "
+"example:"
+msgstr ""
+"Im Allgemeinen ist die Befehlszeilenschnittstelle das, was Sie in einer Mail "
+"an control@bugs.debian.org schreiben würden, nur mit vorangestelltem »bts«. "
+"Zum Beispiel:"
+
+#. type: verbatim
+#: ../scripts/bts.pl:209
+#, no-wrap
+msgid ""
+" % bts severity 69042 normal\n"
+" % bts merge 69042 43233\n"
+" % bts retitle 69042 blah blah\n"
+"\n"
+msgstr ""
+" % bts severity 69042 normal\n"
+" % bts merge 69042 43233\n"
+" % bts retitle 69042 blah blah\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:213
+msgid ""
+"A few additional commands have been added for your convenience, and this "
+"program is less strict about what constitutes a valid bug number. For "
+"example, \"severity Bug#85942 normal\" is understood, as is \"severity "
+"#85942 normal\". (Of course, your shell may regard \"#\" as a comment "
+"character though, so you may need to quote it!)"
+msgstr ""
+"Für Ihren Komfort wurden ein paar zusätzliche Befehle hinzugefügt und dieses "
+"Programm ist ist weniger strikt in dem, was eine gültige Fehlernummer "
+"darstellt. Beispielsweise wird »severity Bug#85942 normal« wie auch "
+"»severity #85942 normal« verstanden. (Allerdings könnte Ihre Shell »#« als "
+"Kommentarzeichen ansehen, weswegen Sie es maskieren müssen!)"
+
+#. type: textblock
+#: ../scripts/bts.pl:219
+msgid ""
+"Also, for your convenience, this program allows you to abbreviate commands "
+"to the shortest unique substring (similar to how cvs lets you abbreviate "
+"commands). So it understands things like \"bts cl 85942\"."
+msgstr ""
+"Außerdem ermöglicht Ihnen dieses Programm zu Ihrer Annehmlichkeit Befehle "
+"auf die kleinste eindeutige Teilzeichenkette abzukürzen (ähnlich wie Sie CVS "
+"Befehle abkürzen lässt). So versteht es Dinge wie »bts cl 85942«."
+
+#. type: textblock
+#: ../scripts/bts.pl:223
+msgid ""
+"It is also possible to include a comment in the mail sent to the BTS. If "
+"your shell does not strip out the comment in a command like \"bts severity "
+"30321 normal #inflated severity\", then this program is smart enough to "
+"figure out where the comment is, and include it in the email. Note that "
+"most shells do strip out such comments before they get to the program, "
+"unless the comment is quoted. (Something like \"bts severity #85942 "
+"normal\" will not be treated as a comment!)"
+msgstr ""
+"Es ist ebenfalls möglich, der E-Mail an das BTS einen Kommentar beizufügen. "
+"Falls Ihre Shell nicht den Kommentar in einem Befehl wie »bts severity 30321 "
+"normal #inflated severity« streicht, dann ist dieses Programm schlau genug "
+"herauszufinden, wo der Kommentar ist und ihn in die E-Mail einzufügen. "
+"Beachten Sie, dass die meisten Shells solche Kommentare streichen, bevor sie "
+"beim Programm ankommen, es sei denn, der Kommentar ist maskiert. (Etwas wie "
+"»bts severity #85942 normal« wird nicht als Kommentar angesehen!)"
+
+#. type: textblock
+#: ../scripts/bts.pl:231
+msgid ""
+"You can specify multiple commands by separating them with a single dot, "
+"rather like B<update-rc.d>; a single comma may also be used; all the "
+"commands will then be sent in a single mail. It is important the dot/comma "
+"is surrounded by whitespace so it is not mistaken for part of a command. "
+"For example (quoting where necessary so that B<bts> sees the comment):"
+msgstr ""
+"Sie können mehrere Befehle angeben, indem Sie sie durch einen einzelnen "
+"Punkt trennen, ungefähr wie B<update-rc.d>; ein einzelnes Komma könnte auch "
+"benutzt werden; alle die Befehle werden in einer einzigen E-Mail gesandt. Es "
+"ist wichtig, dass der Punkt/das Komma von Leerzeichen umgeben ist, damit es "
+"nicht als Teil des Befehls missverstanden wird. Zum Beispiel (wo nötig "
+"maskieren, so dass B<bts> den Kommentar sieht):"
+
+#. type: verbatim
+#: ../scripts/bts.pl:237
+#, no-wrap
+msgid ""
+" % bts severity 95672 normal , merge 95672 95673 \\#they are the same!\n"
+"\n"
+msgstr ""
+" % bts severity 95672 normal , merge 95672 95673 \\#sie sind identisch!\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:239
+msgid ""
+"The abbreviation \"it\" may be used to refer to the last mentioned bug "
+"number, so you could write:"
+msgstr ""
+"Die Abkürzung »it« könnte benutzt werden, um auf die zuletzt erwähnte "
+"Fehlernummer Bezug zu nehmen, daher können Sie schreiben:"
+
+#. type: verbatim
+#: ../scripts/bts.pl:242
+#, no-wrap
+msgid ""
+" % bts severity 95672 wishlist , retitle it \"bts: please add a --foo option\"\n"
+"\n"
+msgstr ""
+" % bts severity 95672 wishlist , retitle it \"bts: please add a --foo option\"\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:244
+msgid ""
+"Please use this program responsibly, and do take our users into "
+"consideration."
+msgstr ""
+"Bitte benutzen Sie dieses Programm verantwortungsvoll und berücksichtigen "
+"Sie unsere Benutzer."
+
+#. type: textblock
+#: ../scripts/bts.pl:249
+msgid ""
+"B<bts> examines the B<devscripts> configuration files as described below. "
+"Command line options override the configuration file settings, though."
+msgstr ""
+"B<bts> durchsucht die B<devscripts>-Konfigurationsdateien wie oben "
+"beschrieben. Befehlszeilenoptionen setzen jedoch die Einstellungen der "
+"Konfigurationsdatei außer Kr."
+
+#. type: =item
+#: ../scripts/bts.pl:255
+msgid "B<-o>, B<--offline>"
+msgstr "B<-o>, B<--offline>"
+
+#. type: textblock
+#: ../scripts/bts.pl:257
+msgid ""
+"Make B<bts> use cached bugs for the B<show> and B<bugs> commands, if a cache "
+"is available for the requested data. See the B<cache> command, below for "
+"information on setting up a cache."
+msgstr ""
+"sorgt dafür, dass B<bts> zwischengespeicherte Fehler für die Befehle B<show> "
+"und B<bugs> benutzt, falls für die angeforderten Daten ein Zwischenspeicher "
+"verfügbar ist. Im Nachstehenden finden Sie Informationen zum Befehl "
+"B<cache>, wie Sie einen Zwischenspeicher einrichten."
+
+#. type: =item
+#: ../scripts/bts.pl:261
+msgid "B<--online>, B<--no-offline>"
+msgstr "B<--online>, B<--no-offline>"
+
+#. type: textblock
+#: ../scripts/bts.pl:263
+msgid ""
+"Opposite of B<--offline>; overrides any configuration file directive to work "
+"offline."
+msgstr ""
+"Gegenteil von B<--offline>; setzt alle Konfigurationsdatei-Direktiven außer "
+"Kraft, um offline zu arbeiten"
+
+#. type: =item
+#: ../scripts/bts.pl:266
+msgid "B<-n>, B<--no-action>"
+msgstr "B<-n>, B<--no-action>"
+
+#. type: textblock
+#: ../scripts/bts.pl:268
+msgid "Do not send emails but print them to standard output."
+msgstr "sendet keine E-Mails, gibt sie aber auf der Standardausgabe aus."
+
+#. type: =item
+#: ../scripts/bts.pl:270
+msgid "B<--cache>, B<--no-cache>"
+msgstr "B<--cache>, B<--no-cache>"
+
+#. type: textblock
+#: ../scripts/bts.pl:272
+msgid ""
+"Should we attempt to cache new versions of BTS pages when performing B<show>/"
+"B<bugs> commands? Default is to cache."
+msgstr ""
+"Soll versucht werden, neue Versionen der BTS-Seiten bei der Ausführung der "
+"Befehle B<show>/B<bugs> zwischenzuspeichern? Vorgabe ist Zwischenspeicherung."
+
+#. type: =item
+#: ../scripts/bts.pl:275
+msgid "B<--cache-mode=>{B<min>|B<mbox>|B<full>}"
+msgstr "B<--cache-mode=>{B<min>|B<mbox>|B<full>}"
+
+#. type: textblock
+#: ../scripts/bts.pl:277
+msgid ""
+"When running a B<bts cache> command, should we only mirror the basic bug "
+"(B<min>), or should we also mirror the mbox version (B<mbox>), or should we "
+"mirror the whole thing, including the mbox and the boring attachments to the "
+"BTS bug pages and the acknowledgement emails (B<full>)? Default is B<min>."
+msgstr ""
+"Soll nur der reine Fehler (B<min>) oder auch die Mbox-Version (B<mbox>) "
+"wiedergegeben werden oder soll das ganze Ding, einschließlich der Mbox, den "
+"langweiligen Anhängen an die BTS-Fehlerseiten und die Bestätigungs-E-Mails "
+"(B<full>) wiedergegeben werden, wenn ein B<bts cache>-Befehl ausgeführt "
+"wird? Vorgabe ist B<min>."
+
+#. type: =item
+#: ../scripts/bts.pl:283
+msgid "B<--cache-delay=>I<seconds>"
+msgstr "B<--cache-delay=>I<Sekunden>"
+
+#. type: textblock
+#: ../scripts/bts.pl:285
+msgid ""
+"Time in seconds to delay between each download, to avoid hammering the BTS "
+"web server. Default is 5 seconds."
+msgstr ""
+"Zeit in Sekunden, die zwischen jedem Herunterladen gewartet wird, um zu "
+"verhindern, dass auf den BTS-Webserver eingehämmert wird. Vorgabe ist fünf "
+"Sekunden."
+
+#. type: =item
+#: ../scripts/bts.pl:288
+msgid "B<--mbox>"
+msgstr "B<--mbox>"
+
+#. type: textblock
+#: ../scripts/bts.pl:290
+msgid ""
+"Open a mail reader to read the mbox corresponding to a given bug number for "
+"B<show> and B<bugs> commands."
+msgstr ""
+"öffnet ein E-Mail-Programm, um die Mbox zu lesen, die zu einer gegebenen "
+"Fehlernummer für B<show>- und B<bugs>-Befehle gehört."
+
+#. type: =item
+#: ../scripts/bts.pl:293
+msgid "B<--mailreader=>I<READER>"
+msgstr "B<--mailreader=>I<E-MAIL-PROGRAMM>"
+
+#. type: textblock
+#: ../scripts/bts.pl:295
+msgid ""
+"Specify the command to read the mbox. Must contain a \"B<%s>\" string "
+"(unquoted!), which will be replaced by the name of the mbox file. The "
+"command will be split on white space and will not be passed to a shell. "
+"Default is 'B<mutt -f %s>'. (Also, B<%%> will be substituted by a single "
+"B<%> if this is needed.)"
+msgstr ""
+"gibt den Befehl zum Lesen der Mbox an; muss eine »B<%s>«-Zeichenkette (ohne "
+"Anführungszeichen) enthalten, die durch den Namen der Mbox-Datei ersetzt "
+"wird. Der Befehl wird bei Leerzeichen getrennt und nicht an eine Shell "
+"übergeben. Vorgabe ist »B<mutt -f %s>«. (Außerdem wird B<%%> durch ein "
+"einzelnes B<%> ersetzt, falls dies nötig ist.)"
+
+#. type: =item
+#: ../scripts/bts.pl:301
+msgid "B<--cc-addr=>I<CC_EMAIL_ADDRESS>"
+msgstr "B<--cc-addr=>I<CC_E-MAIL_ADRESSE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:303
+#, fuzzy
+#| msgid ""
+#| "Send carbon copies to a list of users. I<CC_EMAIL_ADDRESS> should be a "
+#| "comma-separated list of email addresses."
+msgid ""
+"Send carbon copies to a list of users. I<CC_EMAIL_ADDRESS> should be a comma-"
+"separated list of email addresses. Multiple options add more CCs."
+msgstr ""
+"sendet Kopien an eine Liste von Benutzern. I<CC_E-MAIL_ADRESSE> sollte eine "
+"durch Kommas getrennte Liste von E-Mail-Adressen sein."
+
+#. type: =item
+#: ../scripts/bts.pl:306
+msgid "B<--use-default-cc>"
+msgstr "B<--use-default-cc>"
+
+#. type: textblock
+#: ../scripts/bts.pl:308
+msgid ""
+"Add the addresses specified in the configuration file option "
+"B<BTS_DEFAULT_CC> to the list specified using B<--cc-addr>. This is the "
+"default."
+msgstr ""
+"fügt die in der Konfigurationsdateioption B<BTS_DEFAULT_CC> angegebenen "
+"Adressen der Liste hinzu, die mittels B<--cc-addr> angegeben wurde. Dies ist "
+"die Vorgabe."
+
+#. type: =item
+#: ../scripts/bts.pl:312
+msgid "B<--no-use-default-cc>"
+msgstr "B<--no-use-default-cc>"
+
+#. type: textblock
+#: ../scripts/bts.pl:314
+msgid ""
+"Do not add addresses specified in B<BTS_DEFAULT_CC> to the carbon copy list."
+msgstr ""
+"fügt der Liste der Kopien keine in B<BTS_DEFAULT_CC> angegebenen Adressen "
+"hinzu."
+
+#. type: =item
+#: ../scripts/bts.pl:317 ../scripts/mass-bug.pl:112
+msgid "B<--sendmail=>I<SENDMAILCMD>"
+msgstr "B<--sendmail=>I<SENDMAIL-BEFEHL>"
+
+#. type: textblock
+#: ../scripts/bts.pl:319
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will not be passed to a shell. Default is F</usr/sbin/sendmail>. The "
+"B<-t> option will be automatically added if the command is F</usr/sbin/"
+"sendmail> or F</usr/sbin/exim*>. For other mailers, if they require a B<-t> "
+"option, this must be included in the I<SENDMAILCMD>, for example: B<--"
+"sendmail=\"/usr/sbin/mymailer -t\">."
+msgstr ""
+"gibt den B<sendmail>-Befehl an. Der Befehl wird bei Leerzeichen getrennt und "
+"nicht an eine Shell übergeben. Vorgabe ist F</usr/sbin/sendmail>. Die Option "
+"B<-t> wird automatisch hinzugefügt, falls der Befehl F</usr/sbin/sendmail> "
+"oder F</usr/sbin/exim*> lautet. Für andere E-Mail-Programme muss dies, falls "
+"sie eine B<-t>-Option benötigen, in den I<SENDMAIL-BEFEHL> eingefügt werden, "
+"zum Beispiel: B<--sendmail=\"/usr/sbin/mymailer -t\">."
+
+#. type: TP
+#: ../scripts/bts.pl:326 ../scripts/nmudiff.1:34
+#, no-wrap
+msgid "B<--mutt>"
+msgstr "B<--mutt>"
+
+#. type: textblock
+#: ../scripts/bts.pl:328
+msgid ""
+"Use B<mutt> for sending of mails. Default is not to use B<mutt>, except for "
+"some commands."
+msgstr ""
+"benutzt B<mutt> für den Versand von E-Mails. Standardmäßig wird B<mutt> "
+"nicht benutzt, außer für einige Befehle."
+
+#. type: textblock
+#: ../scripts/bts.pl:331
+msgid ""
+"Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in "
+"order to use B<mutt> to send emails."
+msgstr ""
+"Beachten Sie, dass B<$DEBEMAIL> oder B<$EMAIL> in der Umgebung gesetzt sein "
+"müssen, um B<mutt> zum Senden von E-Mails zu verwenden."
+
+#. type: TP
+#: ../scripts/bts.pl:334 ../scripts/nmudiff.1:39
+#, no-wrap
+msgid "B<--no-mutt>"
+msgstr "B<--no-mutt>"
+
+#. type: textblock
+#: ../scripts/bts.pl:336
+msgid "Don't use B<mutt> for sending of mails."
+msgstr "benutzt B<mutt> nicht für den Versand von E-Mails."
+
+#. type: =item
+#: ../scripts/bts.pl:338
+msgid "B<--soap-timeout=>I<SECONDS>"
+msgstr "B<--soap-timeout=>I<SEKUNDEN>"
+
+#. type: textblock
+#: ../scripts/bts.pl:340
+msgid ""
+"Specify a timeout for SOAP calls as used by the B<select> and B<status> "
+"commands."
+msgstr ""
+"gibt eine Zeitüberschreitung für SOAP-Aufrufe an, wie sie durch die Befehle "
+"B<select> und B<status> benutzt wird."
+
+#. type: =item
+#: ../scripts/bts.pl:342
+msgid "B<--smtp-host=>I<SMTPHOST>"
+msgstr "B<--smtp-host=>I<SMTPHOST>"
+
+#. type: textblock
+#: ../scripts/bts.pl:344
+msgid ""
+"Specify an SMTP host. If given, B<bts> will send mail by talking directly "
+"to this SMTP host rather than by invoking a B<sendmail> command."
+msgstr ""
+"gibt einen SMTP-Rechner an. Falls angegeben wird B<bts> E-Mails versenden, "
+"indem es direkt mit diesem Rechner kommuniziert, statt den B<sendmail>-"
+"Befehl aufzurufen."
+
+#. type: textblock
+#: ../scripts/bts.pl:347
+msgid ""
+"The host name may be followed by a colon (\":\") and a port number in order "
+"to use a port other than the default. It may also begin with \"ssmtp://\" "
+"or \"smtps://\" to indicate that SMTPS should be used."
+msgstr ""
+"Dem Rechnername könnte ein Doppelpunkt (»:«) und eine Port-Nummer folgen, um "
+"einen anderen Port als den vorgegebenen zu benutzen, Er könnte außerdem mit "
+"»ssmtp://« oder »ssmtps://« beginnen, um anzuzeigen, dass SMTPS benutzt "
+"werden soll."
+
+#. type: textblock
+#: ../scripts/bts.pl:351
+msgid ""
+"If SMTPS not specified, B<bts> will still try to use STARTTLS if it's "
+"advertised by the SMTP host."
+msgstr ""
+"Falls SMTPS nicht angegeben wurde, wird B<bts> weiterhin versuchen, STARTTLS "
+"zu verwenden, falls es vom SMTP-Server angezeigt wird."
+
+#. type: textblock
+#: ../scripts/bts.pl:354
+msgid ""
+"Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in "
+"order to use direct SMTP connections to send emails."
+msgstr ""
+"Beachten Sie, dass B<$DEBEMAIL> oder B<$EMAIL> in der Umgebung gesetzt sein "
+"müssen, um direkte SMTP-Verbindungen zum Senden von E-Mails zu verwenden."
+
+#. type: textblock
+#: ../scripts/bts.pl:357
+msgid ""
+"Note that when sending directly via an SMTP host, specifying addresses in "
+"B<--cc-addr> or B<BTS_DEFAULT_CC> that the SMTP host will not relay will "
+"cause the SMTP host to reject the entire mail."
+msgstr ""
+"Beachten Sie, wenn Sie direkt über einen SMTP-Rechner senden, dass die "
+"Angabe von Adressen in B<--cc-addr> oder B<BTS_DEFAULT_CC>, für die der SMTP-"
+"Rechner keine Weiterleitung durchführt, dazu führt, dass der SMTP-Rechner "
+"die ganze E-Mail abweist."
+
+#. type: textblock
+#: ../scripts/bts.pl:361
+#, fuzzy
+#| msgid ""
+#| "Note also that the use of the B<reassign> command may, when either B<--"
+#| "interactive> or B<--force-interactive> mode is enabled, lead to the "
+#| "automatic addition of a Cc to I<$newpackage>@packages.debian.org. In "
+#| "these cases, the note above regarding relaying applies. The submission "
+#| "interface (port 587) on reportbug.debian.org does not support relaying "
+#| "and, as such, should not be used as an SMTP server for B<bts> under the "
+#| "circumstances described in this paragraph."
+msgid ""
+"Note also that the use of the B<reassign> command may, when either B<--mutt> "
+"or B<--force-interactive> mode is enabled, lead to the automatic addition of "
+"a Cc to I<$newpackage>@packages.debian.org. In these cases, the note above "
+"regarding relaying applies. The submission interface (port 587) on "
+"reportbug.debian.org does not support relaying and, as such, should not be "
+"used as an SMTP server for B<bts> under the circumstances described in this "
+"paragraph."
+msgstr ""
+"Beachten Sie außerdem, dass die Benutzung des Befehls B<reassign>, wenn "
+"entweder der Modus B<--interactive> oder B<--force-interactive> aktiviert "
+"ist, dazu führen kann, dass ein Cc an I<$newpackage>@packages.debian.org "
+"hinzugefügt wird. In diesen Fällen findet der Hinweis oben bezüglich "
+"Weiterleitung Anwendung. Die Übertragungsschnittstelle (Port 587) auf "
+"reportbug.debian.org unterstützt keine Weiterleitung und sollte als solche "
+"nicht als SMTP-Server für B<bts> unter den in diesem Absatz beschriebenen "
+"Umständen genutzt werden."
+
+#. type: =item
+#: ../scripts/bts.pl:368
+msgid "B<--smtp-username=>I<USERNAME>, B<--smtp-password=>I<PASSWORD>"
+msgstr "B<--smtp-username=>I<BENUTZERNAME>, B<--smtp-password=>I<PASSWORT>"
+
+#. type: textblock
+#: ../scripts/bts.pl:370
+msgid ""
+"Specify the credentials to use when connecting to the SMTP server specified "
+"by B<--smtp-host>. If the server does not require authentication then these "
+"options should not be used."
+msgstr ""
+"gibt die Anmeldedaten an, die benutzt werden, wenn eine Verbindung zu dem "
+"durch B<--smtp-host> angegebenen SMTP-Server hergestellt wird. Falls der "
+"Server keine Authentifizierung verlangt, dann sollten diese Optionen nicht "
+"verwendet werden."
+
+#. type: textblock
+#: ../scripts/bts.pl:374
+msgid ""
+"If a username is specified but not a password, B<bts> will prompt for the "
+"password before sending the mail."
+msgstr ""
+"Falls ein Benutzername aber kein Passwort angegeben wurde, wird B<bts> vor "
+"dem Senden der E-Mail nach dem Passwort fragen."
+
+#. type: =item
+#: ../scripts/bts.pl:377
+msgid "B<--smtp-helo=>I<HELO>"
+msgstr "B<--smtp-helo=>I<HELO>"
+
+#. type: textblock
+#: ../scripts/bts.pl:379
+msgid ""
+"Specify the name to use in the I<HELO> command when connecting to the SMTP "
+"server; defaults to the contents of the file F</etc/mailname>, if it exists."
+msgstr ""
+"gibt den Namen an, der im Befehl I<HELO> benutzt wird, wenn eine Verbindung "
+"zu dem SMTP-Server hergestellt wird; Vorgabe ist der Inhalt der Datei F</etc/"
+"mailname>, falls sie existiert."
+
+#. type: textblock
+#: ../scripts/bts.pl:383
+msgid ""
+"Note that some SMTP servers may reject the use of a I<HELO> which either "
+"does not resolve or does not appear to belong to the host using it."
+msgstr ""
+"Beachten Sie, dass einige STMP-Server die Benutzung eines I<HELO> "
+"möglicherweise abweisen, die sie entweder nicht auflösen oder die nicht zum "
+"benutzenden Rechner gehören."
+
+#. type: =item
+#: ../scripts/bts.pl:386
+msgid "B<--bts-server>"
+msgstr "B<--bts-server>"
+
+#. type: textblock
+#: ../scripts/bts.pl:388
+msgid "Use a debbugs server other than https://bugs.debian.org."
+msgstr "benutzt einen anderen Debbugs-Server als https://bugs.debian.org."
+
+#. type: =item
+#: ../scripts/bts.pl:390
+msgid "B<-f>, B<--force-refresh>"
+msgstr "B<-f>, B<--force-refresh>"
+
+#. type: textblock
+#: ../scripts/bts.pl:392
+msgid ""
+"Download a bug report again, even if it does not appear to have changed "
+"since the last B<cache> command. Useful if a B<--cache-mode=full> is "
+"requested for the first time (otherwise unchanged bug reports will not be "
+"downloaded again, even if the boring bits have not been downloaded)."
+msgstr ""
+"lädt einen Fehlerbericht erneut herunter, sogar dann, wenn er sich seit dem "
+"letzten B<cache>-Befehl nicht geändert zu haben scheint; nützlich, falls ein "
+"B<--cache-mode=full> zum ersten Mal angefragt wurde (andernfalls werden "
+"unveränderte Fehlerberichte nicht erneut heruntergeladen, nicht einmal, wenn "
+"die langweiligen Teile nicht heruntergeladen wurden."
+
+#. type: =item
+#: ../scripts/bts.pl:398
+msgid "B<--no-force-refresh>"
+msgstr "B<--no-force-refresh>"
+
+#. type: textblock
+#: ../scripts/bts.pl:400
+msgid "Suppress any configuration file B<--force-refresh> option."
+msgstr "unterdrückt jegliche B<--force-refresh>-Konfigurationsdateioptionen."
+
+#. type: =item
+#: ../scripts/bts.pl:402
+msgid "B<--only-new>"
+msgstr "B<--only-new>"
+
+#. type: textblock
+#: ../scripts/bts.pl:404
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have."
+msgstr ""
+"lädt nur neue Fehler beim Zwischenspeichern herunter; prüft nicht, ob es in "
+"bereits vorhandenen Fehlern Aktualisierungen gibt."
+
+#. type: =item
+#: ../scripts/bts.pl:407
+msgid "B<--include-resolved>"
+msgstr "B<--include-resolved>"
+
+#. type: textblock
+#: ../scripts/bts.pl:409
+msgid ""
+"When caching bug reports, include those that are marked as resolved. This "
+"is the default behaviour."
+msgstr ""
+"wenn Fehlerberichte zwischengespeichert werden, die einbeziehen, die als "
+"gelöst markiert sind. Dies ist das Standardverhalten."
+
+#. type: =item
+#: ../scripts/bts.pl:412
+msgid "B<--no-include-resolved>"
+msgstr "B<--no-include-resolved>"
+
+#. type: textblock
+#: ../scripts/bts.pl:414
+msgid ""
+"Reverse the behaviour of the previous option. That is, do not cache bugs "
+"that are marked as resolved."
+msgstr ""
+"kehrt das Verhalten der vorherigen Option um. Sprich, Fehler, die als gelöst "
+"markiert sind, werden nicht zwischengespeichert."
+
+#. type: =item
+#: ../scripts/bts.pl:417
+msgid "B<--no-ack>"
+msgstr "B<--no-ack>"
+
+#. type: textblock
+#: ../scripts/bts.pl:419
+msgid ""
+"Suppress acknowledgment mails from the BTS. Note that this will only affect "
+"the copies of messages CCed to bugs, not those sent to the control bot."
+msgstr ""
+"unterdrückt Bestätigungs-E-Mails vom BTS. Beachten Sie, dass dies nur die CC-"
+"Kopien der Nachrichten beeinflusst, die Kopien für Fehler sind, die nicht an "
+"das Steuerungsprogramm gesandt wurden."
+
+#. type: =item
+#: ../scripts/bts.pl:423
+msgid "B<--ack>"
+msgstr "B<--ack>"
+
+#. type: textblock
+#: ../scripts/bts.pl:425
+msgid "Do not suppress acknowledgement mails. This is the default behaviour."
+msgstr ""
+"unterdrückt keine Bestätigungs-E-Mails. Dies ist das Standardverhalten."
+
+#. type: =item
+#: ../scripts/bts.pl:427 ../scripts/tagpending.pl:136
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:429
+msgid ""
+"Before sending an e-mail to the control bot, display the content and allow "
+"it to be edited, or the sending cancelled."
+msgstr ""
+"zeigt vor dem Senden einer E-Mail an das Steuerungsprogramm den Inhalt an "
+"und ermöglicht, ihn zu bearbeiten oder das Versenden abzubrechen."
+
+#. type: =item
+#: ../scripts/bts.pl:432
+msgid "B<--force-interactive>"
+msgstr "B<--force-interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:434
+msgid ""
+"Similar to B<--interactive>, with the exception that an editor is spawned "
+"before prompting for confirmation of the message to be sent."
+msgstr ""
+"ähnlich wie B<--interactive>, mit der Ausnahme, dass sich ein Editor öffnet "
+"bevor nach der Bestätigung gefragt wird, ob die Nachricht versandt werden "
+"soll."
+
+#. type: =item
+#: ../scripts/bts.pl:437
+msgid "B<--no-interactive>"
+msgstr "B<--no-interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:439
+msgid ""
+"Send control e-mails without confirmation. This is the default behaviour."
+msgstr ""
+"sendet Steuerungs-E-Mails ohne Bestätigung. Dies ist das Standardverhalten."
+
+#. type: =item
+#: ../scripts/bts.pl:441 ../scripts/build-rdeps.pl:105 ../scripts/dget.pl:635
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: textblock
+#: ../scripts/bts.pl:443
+msgid ""
+"When running B<bts cache>, only display information about newly cached "
+"pages, not messages saying already cached. If this option is specified "
+"twice, only output error messages (to stderr)."
+msgstr ""
+"zeigt, wenn B<bts cache> ausgeführt wird, nur Informationen über neu "
+"zwischengespeicherte Seiten an, keine Nachrichten, die aussagen, was bereits "
+"zwischengespeichert ist. Falls diese Option zweimal angegeben wurde, werden "
+"nur Fehlermeldungen (an die Standardfehlerausgabe) ausgegeben."
+
+#. type: TP
+#: ../scripts/bts.pl:447 ../scripts/cvs-debrelease.1:57
+#: ../scripts/cvs-debuild.1:38 ../scripts/debc.1:95 ../scripts/debchange.1:390
+#: ../scripts/debclean.1:80 ../scripts/debdiff.1:166 ../scripts/debi.1:102
+#: ../scripts/debrelease.1:95 ../scripts/debsign.1:95 ../scripts/debuild.1:258
+#: ../scripts/dpkg-depcheck.1:92 ../scripts/dscverify.1:24
+#: ../scripts/grep-excuses.1:15 ../scripts/mass-bug.pl:121
+#: ../scripts/nmudiff.1:72 ../scripts/rmadison.pl:346 ../scripts/salsa.pl:482
+#: ../scripts/uscan.pl:1558 ../scripts/uupdate.1:56 ../scripts/who-uploads.1:41
+#, no-wrap
+msgid "B<--no-conf>, B<--noconf>"
+msgstr "B<--no-conf>, B<--noconf>"
+
+#. type: Plain text
+#: ../scripts/bts.pl:449 ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:99
+#: ../scripts/debchange.1:394 ../scripts/debclean.1:84 ../scripts/debdiff.1:170
+#: ../scripts/debi.1:106 ../scripts/debrelease.1:99 ../scripts/debsign.1:99
+#: ../scripts/debuild.1:262 ../scripts/dpkg-depcheck.1:96
+#: ../scripts/dscverify.1:28 ../scripts/grep-excuses.1:19
+#: ../scripts/mass-bug.pl:123 ../scripts/nmudiff.1:76 ../scripts/uupdate.1:60
+#: ../scripts/who-uploads.1:45
+msgid ""
+"Do not read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+"keine Konfigurationsdateien lesen, Dies kann nur als erste auf der "
+"Befehlszeile angegebene Option benutzt werden."
+
+#. type: =head1
+#: ../scripts/bts.pl:813 ../scripts/chdist.pl:55 ../scripts/salsa.pl:59
+msgid "COMMANDS"
+msgstr "BEFEHLE"
+
+#. type: textblock
+#: ../scripts/bts.pl:815
+msgid ""
+"For full details about the commands, see the BTS documentation. L<https://"
+"www.debian.org/Bugs/server-control>"
+msgstr ""
+"Sämtliche Einzelheiten über die Befehle finden Sie in der BTS-Dokumentation. "
+"L<https://www.debian.org/Bugs/server-control>"
+
+#. type: =item
+#: ../scripts/bts.pl:820
+msgid ""
+"B<show> [I<options>] [I<bug number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<show> [I<Optionen>] [I<Fehlernummer> | I<Paket> | I<Paketbetreuer> | B<:"
+"> ] [I<Opt>B<=>I<Wert> …]"
+
+#. type: =item
+#: ../scripts/bts.pl:822
+msgid ""
+"B<show> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<show> [I<Optionen>] [B<src:>I<Paket> | B<from:>I<Absender>] "
+"[I<Opt>B<=>I<Wert> …]"
+
+#. type: =item
+#: ../scripts/bts.pl:824
+msgid ""
+"B<show> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<show> [I<Optionen>] [B<tag:>I<Markierung> | B<usertag:>I<Markierung> ] "
+"[I<Opt>B<=>I<Wert> …]"
+
+#. type: =item
+#: ../scripts/bts.pl:826
+msgid "B<show> [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr "B<show> [B<release-critical> | B<release-critical/> … | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:828
+msgid "This is a synonym for B<bts bugs>."
+msgstr "Dies ist ein Synonym für B<bts bugs>."
+
+#. type: =item
+#: ../scripts/bts.pl:836
+msgid ""
+"B<bugs> [I<options>] [I<bug_number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<bugs> [I<Optionen>] [I<Fehlernummer> | I<Paket> | I<Paketbetreuer> | B<:"
+"> ] [I<Opt>B<=>I<Wert> …]"
+
+#. type: =item
+#: ../scripts/bts.pl:838
+msgid ""
+"B<bugs> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<bugs> [I<Optionen>] [B<src:>I<Paket> | B<from:>I<Absender>] "
+"[I<Opt>B<=>I<Wert> …]"
+
+#. type: =item
+#: ../scripts/bts.pl:840
+msgid ""
+"B<bugs> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<bugs> [I<Optionen>] [B<tag:>I<Markierung> | B<usertag:>I<Markierung> ] "
+"[I<Opt>B<=>I<Wert> …]"
+
+#. type: =item
+#: ../scripts/bts.pl:842
+msgid "B<bugs> [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr "B<bugs> [B<release-critical> | B<release-critical/> … | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:844
+msgid ""
+"Display the page listing the requested bugs in a web browser using sensible-"
+"browser(1)."
+msgstr ""
+"zeigt die Seite, die die angefragten Fehler in einem Webbrowser auflistet, "
+"unter Benutzung von sensible-browser(1)."
+
+#. type: textblock
+#: ../scripts/bts.pl:847
+msgid ""
+"Options may be specified after the B<bugs> command in addition to or instead "
+"of options at the start of the command line: recognised options at this "
+"point are: B<-o>/B<--offline>/B<--online>, B<-m>/B<--mbox>, B<--mailreader> "
+"and B<-->[B<no->]B<cache>. These are described earlier in this manpage. If "
+"either the B<-o> or B<--offline> option is used, or there is already an up-"
+"to-date copy in the local cache, the cached version will be used."
+msgstr ""
+"Optionen könnten nach dem Befehl B<bugs> zusätzlich oder anstelle von "
+"Optionen am Anfang der Befehlszeile angegeben werden: An diesem Punkt "
+"erkannte Optionen sind: B<-o>/B<--offline>/B<--online>, B<-m>/B<--mbox>, B<--"
+"mailreader> und B<-->[B<no->]B<cache>. Diese wurden an früherer Stelle in "
+"dieser Handbuchseite beschrieben. Falls Sie entweder die Option B<-o> oder "
+"B<--offline> benutzt haben oder es bereits eine aktuelle Kopie des lokalen "
+"Zwischenspeichers gibt, wird die zwischengespeicherte Version benutzt."
+
+#. type: textblock
+#: ../scripts/bts.pl:854
+msgid "The meanings of the possible arguments are as follows:"
+msgstr "Die möglichen Argumente haben folgende Bedeutung:"
+
+#. type: =item
+#: ../scripts/bts.pl:858
+msgid "(none)"
+msgstr "(keins)"
+
+#. type: textblock
+#: ../scripts/bts.pl:860
+msgid ""
+"If nothing is specified, B<bts bugs> will display your bugs, assuming that "
+"either B<DEBEMAIL> or B<EMAIL> (examined in that order) is set to the "
+"appropriate email address."
+msgstr ""
+"Falls keins angegeben wurde, wird B<bts bugs> Ihre Fehler unter der Annahme "
+"anzeigen, dass entweder B<DEBEMAIL> oder B<EMAIL> (in dieser Reihenfolge "
+"geprüft) auf die geeignete E-Mail-Adresse gesetzt ist."
+
+#. type: =item
+#: ../scripts/bts.pl:864
+msgid "I<bug_number>"
+msgstr "I<Fehlernummer>"
+
+#. type: textblock
+#: ../scripts/bts.pl:866
+msgid "Display bug number I<bug_number>."
+msgstr "zeigt Fehler Nummer I<Fehlernummer>."
+
+#. type: =item
+#: ../scripts/bts.pl:868
+msgid "I<package>"
+msgstr "I<Paket>"
+
+#. type: textblock
+#: ../scripts/bts.pl:870
+msgid "Display the bugs for the package I<package>."
+msgstr "zeigt die Fehler des Pakets I<Paket>."
+
+#. type: =item
+#: ../scripts/bts.pl:872
+msgid "B<src:>I<package>"
+msgstr "B<src:>I<Paket>"
+
+#. type: textblock
+#: ../scripts/bts.pl:874
+msgid "Display the bugs for the source package I<package>."
+msgstr "zeigt die Fehler des Quellpakets I<Paket>."
+
+#. type: =item
+#: ../scripts/bts.pl:876
+msgid "I<maintainer>"
+msgstr "I<Paketbetreuer>"
+
+#. type: textblock
+#: ../scripts/bts.pl:878
+msgid "Display the bugs for the maintainer email address I<maintainer>."
+msgstr "zeigt die Fehler für die Paketbetreuer-E-Mail-Adresse I<Paketbetreuer>"
+
+#. type: =item
+#: ../scripts/bts.pl:880
+msgid "B<from:>I<submitter>"
+msgstr "B<from:>I<Absender>"
+
+#. type: textblock
+#: ../scripts/bts.pl:882
+msgid "Display the bugs for the submitter email address I<submitter>."
+msgstr "zeigt die Fehler für die Absender-E-Mail-Adresse I<Absender>"
+
+#. type: =item
+#: ../scripts/bts.pl:884
+msgid "B<tag:>I<tag>"
+msgstr "B<tag:>I<Markierung>"
+
+#. type: textblock
+#: ../scripts/bts.pl:886
+msgid "Display the bugs which are tagged with I<tag>."
+msgstr "zeigt die Fehler, die mit I<Markierung> gekennzeichnet sind."
+
+#. type: =item
+#: ../scripts/bts.pl:888
+msgid "B<usertag:>I<tag>"
+msgstr "B<usertag:>I<Markierung>"
+
+#. type: textblock
+#: ../scripts/bts.pl:890
+msgid ""
+"Display the bugs which are tagged with usertag I<tag>. See the BTS "
+"documentation for more information on usertags. This will require the use "
+"of a B<users=>I<email> option."
+msgstr ""
+"zeigt die Fehler, die mit der Benutzermarkierung I<Markierung> "
+"gekennzeichnet sind. Weitere Informationen über Benutzermarkierungen finden "
+"Sie in der BTS-Dokumentation. Dies wird die Verwendung der Option "
+"B<users=>I<E-Mail> erfordern."
+
+#. type: =item
+#: ../scripts/bts.pl:894
+msgid "B<:>"
+msgstr "B<:>"
+
+#. type: textblock
+#: ../scripts/bts.pl:896
+msgid ""
+"Details of the bug tracking system itself, along with a bug-request page "
+"with more options than this script, can be found on https://bugs.debian."
+"org/. This page itself will be opened if the command 'bts bugs :' is used."
+msgstr ""
+"Einzelheiten der Fehlerdatenbank selbst können, neben einer Fehlermeldeseite "
+"mit mehr Optionen als diesem Skript, unter https://bugs.debian.org/ gefunden "
+"werden. Diese Seite selbst wird geöffnet, falls der Befehl »bts bugs :« "
+"benutzt wird."
+
+#. type: =item
+#: ../scripts/bts.pl:901
+msgid "B<release-critical>, B<RC>"
+msgstr "B<release-critical>, B<RC>"
+
+#. type: textblock
+#: ../scripts/bts.pl:903
+msgid ""
+"Display the front page of the release-critical pages on the BTS. This is a "
+"synonym for https://bugs.debian.org/release-critical/index.html. It is also "
+"possible to say release-critical/debian/main.html and the like. RC is a "
+"synonym for release-critical/other/all.html."
+msgstr ""
+"zeigt die Einstiegssseite der release-kritischen Seiten des BTS. Dies ist "
+"ein Synonym für https://bugs.debian.org/release-critical/index.html. Es ist "
+"außerdem möglich, release-critical/debian/main.html und dergleichen zu "
+"sagen. RC ist ein Synonym für release-critical/other/all.html."
+
+#. type: textblock
+#: ../scripts/bts.pl:910
+msgid ""
+"After the argument specifying what to display, you can optionally specify "
+"options to use to format the page or change what it displayed. These are "
+"passed to the BTS in the URL downloaded. For example, pass dist=stable to "
+"see bugs affecting the stable version of a package, version=1.0 to see bugs "
+"affecting that version of a package, or reverse=yes to display newest "
+"messages first in a bug log."
+msgstr ""
+"Nach dem Argument, das spezifiziert, was angezeigt wird, können Sie "
+"wahlweise Optionen angeben, um die Seite zu formatieren oder um zu ändern, "
+"was angezeigt wird. Diese werden in der heruntergeladenen URL an das BTS "
+"übergeben. Übergeben Sie zum Beispiel »dist=stable«, um Fehler zu sehen, die "
+"die stabile Version des Pakets beeinflussen, »version=1.0«, um Fehler zu "
+"sehen, die diese Version des Pakets beeinflussen oder »reverse=yes«, um die "
+"neuesten Nachrichten im Fehlerprotokoll zuerst zu sehen."
+
+#. type: textblock
+#: ../scripts/bts.pl:917
+msgid ""
+"If caching has been enabled (that is, B<--no-cache> has not been used, and "
+"B<BTS_CACHE> has not been set to B<no>), then any page requested by B<bts "
+"show> will automatically be cached, and be available offline thereafter. "
+"Pages which are automatically cached in this way will be deleted on "
+"subsequent \"B<bts show>|B<bugs>|B<cache>\" invocations if they have not "
+"been accessed in 30 days. Warning: on a filesystem mounted with the "
+"\"noatime\" option, running \"B<bts show>|B<bugs>\" does not update the "
+"cache files' access times; a cached bug will then be subject to auto-"
+"cleaning 30 days after its initial download, even if it has been accessed in "
+"the meantime."
+msgstr ""
+"Falls Zwischenspeicherung aktiviert wurde (sprich B<--no-cache> wurde nicht "
+"benutzt und B<BTS_CACHE> wurde nicht auf B<no> gesetzt), dann wird "
+"automatisch jede durch B<bts show> angeforderte Seite zwischengespeichert "
+"und danach offline verfügbar sein. Seiten, die automatisch auf diese Weise "
+"zwischengespeichert wurden, werden bei nachfolgenden Aufrufen von »B<bts "
+"show>|B<bugs>|B<cache>« gelöscht, falls nicht innerhalb von 30 Tagen darauf "
+"zugegriffen wurde. Warnung: Auf einem Dateisystem, das mit der Option "
+"»noatime« eingehängt wurde, aktualisiert die Ausführung von »B<bts show>|"
+"B<bugs>« nicht die Zugriffszeiten der Zwischenspeicherdateien; ein "
+"zwischengespeicherter Fehler wird dann Gegenstand der automatischen "
+"Bereinigung 30 Tage nach seinem anfänglichen Herunterladen, sogar dann, wenn "
+"auf ihn in der Zwischenzeit zugegriffen wurde."
+
+#. type: textblock
+#: ../scripts/bts.pl:928
+msgid ""
+"Any other B<bts> commands following this on the command line will be "
+"executed after the browser has been exited."
+msgstr ""
+"Alle anderen B<bts>-Befehle, die dieser Befehlszeile folgen, werden nach dem "
+"Beenden des Browsers ausgeführt."
+
+#. type: textblock
+#: ../scripts/bts.pl:931
+msgid ""
+"The desired browser can be specified and configured by setting the "
+"B<BROWSER> environment variable. The conventions follow those defined by "
+"Eric Raymond at http://www.catb.org/~esr/BROWSER/; we here reproduce the "
+"relevant part."
+msgstr ""
+"Der gewünschte Browser kann durch Setzen der Umgebungsvariable B<BROWSER> "
+"angegeben und konfiguriert werden. Die Konventionen folgen denen, die Eric "
+"Raymond auf http://www.catb.org/~esr/BROWSER/ definiert hat; hier wird der "
+"maßgebliche Teil wiedergegeben."
+
+#. type: textblock
+#: ../scripts/bts.pl:936
+msgid ""
+"The value of B<BROWSER> may consist of a colon-separated series of browser "
+"command parts. These should be tried in order until one succeeds. Each "
+"command part may optionally contain the string B<%s>; if it does, the URL to "
+"be viewed is substituted there. If a command part does not contain B<%s>, "
+"the browser is to be launched as if the URL had been supplied as its first "
+"argument. The string B<%%> must be substituted as a single %."
+msgstr ""
+"Der Wert von B<BROWSER> kann aus einer Reihe von durch Doppelpunkt "
+"getrennten Browser-Befehlsteilen bestehen. Diese sollten nacheinander "
+"durchprobiert werden, bis einer erfolgreich ist. Jeder Befehlsteil kann "
+"optional die Zeichenkette B<%s> enthalten; ist dies der Fall, wird die URL, "
+"die betrachtet werden soll, dort ersetzt. Falls der Befehlsteil kein B<%s> "
+"enthält, wird der Browser gestartet, als ob die URL als sein erstes Argument "
+"bereitgestellt worden wäre. Die Zeichenkette B<%%> muss durch ein einzelnes "
+"% ersetzt werden."
+
+#. type: textblock
+#: ../scripts/bts.pl:944
+msgid ""
+"Rationale: We need to be able to specify multiple browser commands so "
+"programs obeying this convention can do the right thing in either X or "
+"console environments, trying X first. Specifying multiple commands may also "
+"be useful for people who share files like F<.profile> across multiple "
+"systems. We need B<%s> because some popular browsers have remote-invocation "
+"syntax that requires it. Unless B<%%> reduces to %, it won't be possible to "
+"have a literal B<%s> in the string."
+msgstr ""
+"Begründung: Es muss möglich sein, mehrere Browser-Befehle anzugeben, damit "
+"Programme, die dieser Konvention folgen, in X- oder Konsolenumgebungen das "
+"Richtige tun können. Dabei wird X zuerst probiert. Die Angabe mehrerer "
+"Befehle kann außerdem für Leute nützlich sein, die Dateien wie F<.profile> "
+"über mehrere Systeme hinweg gemeinsam benutzen. B<%s> wird benötigt, da "
+"einige populäre Browser eine Aufrufsyntax aus der Ferne haben, die dies "
+"erfordern. Falls B<%%> nicht auf % verkürzt würde, wäre es unmöglich, ein "
+"Buchstabensymbol B<%s> in der Zeichenkette zu haben."
+
+#. type: textblock
+#: ../scripts/bts.pl:952
+msgid "For example, on most Linux systems a good thing to do would be:"
+msgstr ""
+"Auf den meisten Linux-Systemen wäre zum Beispiel Folgendes ein gute Sache:"
+
+#. type: textblock
+#: ../scripts/bts.pl:954
+msgid "BROWSER='mozilla -raise -remote \"openURL(%s,new-window)\":links'"
+msgstr "BROWSER='mozilla -raise -remote \"openURL(%s,new-window)\":links'"
+
+#. type: =item
+#: ../scripts/bts.pl:1031
+msgid "B<select> [I<key>B<:>I<value> ...]"
+msgstr "B<select> [I<Schlüssel>B<:>I<Wert> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1033
+msgid ""
+"Uses the SOAP interface to output a list of bugs which match the given "
+"selection requirements."
+msgstr ""
+"benutzt die SOAP-Schnittstelle, um eine Liste von Fehlern auszugeben, die zu "
+"den gegebenen Auswahlanforderungen passen."
+
+#. type: textblock
+#: ../scripts/bts.pl:1036
+msgid "The following keys are allowed, and may be given multiple times."
+msgstr ""
+"Die folgenden Schlüssel sind erlaubt und können mehrmals abgegeben werden."
+
+#. type: =item
+#: ../scripts/bts.pl:1040 ../scripts/bts.pl:1915
+#: ../scripts/who-permits-upload.pl:92
+msgid "B<package>"
+msgstr "B<package>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1042 ../scripts/bts.pl:1917
+msgid "Binary package name."
+msgstr "Name des Binärpakets"
+
+#. type: =item
+#: ../scripts/bts.pl:1044 ../scripts/bts.pl:1919
+msgid "B<source>"
+msgstr "B<source>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1046 ../scripts/bts.pl:1921
+msgid "Source package name."
+msgstr "Name des Quellpakets"
+
+#. type: =item
+#: ../scripts/bts.pl:1048
+msgid "B<maintainer>"
+msgstr "B<maintainer>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1050
+msgid "E-mail address of the maintainer."
+msgstr "E-Mail-Adresse des Paketbetreuers"
+
+#. type: =item
+#: ../scripts/bts.pl:1052 ../scripts/bts.pl:1899
+msgid "B<submitter>"
+msgstr "B<submitter>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1054 ../scripts/bts.pl:1901
+msgid "E-mail address of the submitter."
+msgstr "E-Mail-Adresse des Absenders"
+
+#. type: =item
+#: ../scripts/bts.pl:1056 ../scripts/bts.pl:1927
+msgid "B<severity>"
+msgstr "B<severity>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1058 ../scripts/bts.pl:1929
+msgid "Bug severity."
+msgstr "Schweregrad des Fehlers"
+
+#. type: =item
+#: ../scripts/bts.pl:1060
+msgid "B<status>"
+msgstr "B<status>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1062
+msgid "Status of the bug. One of B<open>, B<done>, or B<forwarded>."
+msgstr "Status des Fehlers; entweder B<open>, B<done> oder B<forwarded>"
+
+#. type: =item
+#: ../scripts/bts.pl:1064 ../scripts/bts.pl:1923
+msgid "B<tag>"
+msgstr "B<tag>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1066
+msgid ""
+"Tags applied to the bug. If B<users> is specified, may include usertags in "
+"addition to the standard tags."
+msgstr ""
+"auf den Fehler bezogene Markierungen. Falls B<users> angegeben ist, könnten "
+"zusätzlich zu den Standardmarkierungen Benutzermarkierungen enthalten sein."
+
+#. type: =item
+#: ../scripts/bts.pl:1069 ../scripts/bts.pl:1931
+msgid "B<owner>"
+msgstr "B<owner>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1071 ../scripts/bts.pl:1933
+msgid "Bug's owner."
+msgstr "Besitzer des Fehlers"
+
+#. type: =item
+#: ../scripts/bts.pl:1073
+msgid "B<correspondent>"
+msgstr "B<correspondent>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1075
+msgid "Address of someone who sent mail to the log."
+msgstr "Adresse von jemandem, der E-Mail an das Protokoll sandte"
+
+#. type: =item
+#: ../scripts/bts.pl:1077 ../scripts/bts.pl:1935
+msgid "B<affects>"
+msgstr "B<affects>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1079
+msgid "Bugs which affect this package."
+msgstr "Fehler, die dieses Paket beeinflussen"
+
+#. type: =item
+#: ../scripts/bts.pl:1081
+msgid "B<bugs>"
+msgstr "B<bugs>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1083
+msgid "List of bugs to search within."
+msgstr "Liste von Fehlern, in der gesucht wird"
+
+#. type: =item
+#: ../scripts/bts.pl:1085
+msgid "B<users>"
+msgstr "B<users>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1087
+msgid "Users to use when looking up usertags."
+msgstr ""
+"Namen von Benutzern, die beim Abfragen von Benutzermarkierungen benutzt "
+"werden"
+
+#. type: =item
+#: ../scripts/bts.pl:1089 ../scripts/bts.pl:1939
+msgid "B<archive>"
+msgstr "B<archive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1091 ../scripts/bts.pl:1941
+msgid ""
+"Whether to search archived bugs or normal bugs; defaults to B<0> (i.e. only "
+"search normal bugs). As a special case, if archive is B<both>, both archived "
+"and unarchived bugs are returned."
+msgstr ""
+"gibt an, ob archivierte oder normale Fehler gesucht werden; Vorgabe ist B<0> "
+"(d.h. nur normale Fehler werden gesucht). Als Sonderfall werden, falls "
+"»archive« B<both> ist, archivierte und nicht archivierte Fehler "
+"zurückgegeben."
+
+#. type: textblock
+#: ../scripts/bts.pl:1097
+msgid ""
+"For example, to select the set of bugs submitted by jrandomdeveloper@example."
+"com and tagged B<wontfix>, one would use"
+msgstr ""
+"Um zum Beispiel die Sammlung von Fehlern auszuwählen, die von "
+"jrandomdeveloper@example.com versandt und mit B<wontfix> markiert würde, "
+"könnte Folgendes benutzt werden:"
+
+#. type: textblock
+#: ../scripts/bts.pl:1100
+msgid "bts select submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr "bts select submitter:jrandomdeveloper@example.com tag:wontfix"
+
+#. type: textblock
+#: ../scripts/bts.pl:1102 ../scripts/bts.pl:1953
+msgid ""
+"If a key is used multiple times then the set of bugs selected includes those "
+"matching any of the supplied values; for example"
+msgstr ""
+"Falls ein Schlüssel mehrfach benutzt wird, dann enthält die ausgewählte "
+"Fehlerzusammenstellung jene, die auf einen der bereitgestellten Werte "
+"passen, zum Beispiel gibt"
+
+#. type: textblock
+#: ../scripts/bts.pl:1105
+msgid "bts select package:foo severity:wishlist severity:minor"
+msgstr "bts select package:foo severity:wishlist severity:minor"
+
+#. type: textblock
+#: ../scripts/bts.pl:1107
+msgid "returns all bugs of package foo with either wishlist or minor severity."
+msgstr ""
+"alle Fehler des Pakets Foo zurück, die entweder den Schweregrad »wishlist« "
+"oder »minor« haben."
+
+#. type: =item
+#: ../scripts/bts.pl:1120
+msgid ""
+"B<status> [I<bug> | B<file:>I<file> | B<fields:>I<field>[B<,>I<field> ...] | "
+"B<verbose>] ..."
+msgstr ""
+"B<status> [I<Fehler> | B<file:>I<Datei> | B<fields:>I<Feld>[B<,>I<Feld> …] | "
+"B<verbose>] …"
+
+#. type: textblock
+#: ../scripts/bts.pl:1122
+msgid ""
+"Uses the SOAP interface to output status information for the given bugs (or "
+"as read from the listed files -- use B<-> to indicate STDIN)."
+msgstr ""
+"benutzt die SOAP-Schnittstelle, um Informationen über die angegebenen Fehler "
+"auszugeben (oder die, die aus den aufgelisteten Dateien gelesen wurden – "
+"verwenden Sie B<->, um die Standardeingabe auszuwählen)."
+
+#. type: textblock
+#: ../scripts/bts.pl:1125
+msgid "By default, all populated fields for a bug are displayed."
+msgstr ""
+"Standardmäßig werden alle ausgefüllten Felder für einen Fehler angezeigt."
+
+#. type: textblock
+#: ../scripts/bts.pl:1127
+msgid "If B<verbose> is given, empty fields will also be displayed."
+msgstr ""
+"Falls B<verbose> angegeben ist, werden außerdem leere Felder angezeigt."
+
+#. type: textblock
+#: ../scripts/bts.pl:1129
+msgid ""
+"If B<fields> is given, only those fields will be displayed. No validity "
+"checking is performed on any specified fields."
+msgstr ""
+"Falls B<fields> angegeben ist, werden nur diese Felder angezeigt. Es wird "
+"keine Gültigkeitsprüfung für irgendwelche angegebenen Felder durchgeführt."
+
+#. type: =item
+#: ../scripts/bts.pl:1201
+msgid "B<clone> I<bug> I<new_ID> [I<new_ID> ...]"
+msgstr "B<clone> I<Fehler> I<neue_Kennung> [I<neue_Kennung> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1203
+msgid ""
+"The B<clone> control command allows you to duplicate a I<bug> report. It is "
+"useful in the case where a single report actually indicates that multiple "
+"distinct bugs have occurred. \"New IDs\" are negative numbers, separated by "
+"spaces, which may be used in subsequent control commands to refer to the "
+"newly duplicated bugs. A new report is generated for each new ID."
+msgstr ""
+"Der Steuerbefehl B<clone> ermöglicht es Ihnen, einen I<Fehler>bericht zu "
+"kopieren. Das ist in dem Fall nützlich, in dem ein einziger Bericht "
+"tatsächlich anzeigt, dass mehrere eigenständige Fehler aufgetreten sind. "
+"»Neue Kennungen« sind durch Leerzeichen getrennte negative Zahlen, die in "
+"nachfolgenden Steuerbefehlen benutzt werden können, um auf die neu kopierten "
+"Fehler Bezug zu nehmen. Für jede neue Kennung wird ein neuer Fehler erzeugt."
+
+#. type: =item
+#: ../scripts/bts.pl:1253
+msgid "B<done> I<bug> [I<version>]"
+msgstr "B<done> I<Fehler> [I<Version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1255
+msgid ""
+"Mark a I<bug> as Done. This forces interactive mode since done messages "
+"should include an explanation why the bug is being closed. You should "
+"specify which I<version> of the package closed the bug, if possible."
+msgstr ""
+"markiert einen Fehler als erledigt. Dies erzwingt einen interaktiven Modus, "
+"da erledigt-Nachrichten eine Erklärung enthalten sollten, weshalb der Fehler "
+"geschlossen wird. Sie sollten angeben, welche Version des Pakets den Fehler "
+"schließt, falls möglich."
+
+#. type: =item
+#: ../scripts/bts.pl:1273
+msgid "B<reopen> I<bug> [I<submitter>]"
+msgstr "B<reopen> I<Fehler> [I<Absender>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1275
+msgid "Reopen a I<bug>, with optional I<submitter>."
+msgstr "öffnet einen I<Fehler> mit optionalem I<Absender> erneut."
+
+#. type: =item
+#: ../scripts/bts.pl:1286
+msgid "B<archive> I<bug>"
+msgstr "B<archive> I<Fehler>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1288
+msgid ""
+"Archive a I<bug> that has previously been archived but is currently not. "
+"The I<bug> must fulfill all of the requirements for archiving with the "
+"exception of those that are time-based."
+msgstr ""
+"archiviert einen I<Fehler>, der vorher archiviert war, es gegenwärtig aber "
+"nicht ist. Der I<Fehler> muss alle Anforderungen für die Archivierung außer "
+"den zeitbasierten erfüllen."
+
+#. type: =item
+#: ../scripts/bts.pl:1300
+msgid "B<unarchive> I<bug>"
+msgstr "B<unarchive> I<Fehler>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1302
+msgid "Unarchive a I<bug> that is currently archived."
+msgstr "nimmt einen derzeit archivierten I<Fehler> aus dem Archiv heraus."
+
+#. type: =item
+#: ../scripts/bts.pl:1312
+msgid "B<retitle> I<bug> I<title>"
+msgstr "B<retitle> I<Fehler> I<Titel>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1314
+msgid "Change the I<title> of the I<bug>."
+msgstr "ändert den I<Titel> des I<Fehler>s."
+
+#. type: =item
+#: ../scripts/bts.pl:1327
+msgid "B<summary> I<bug> [I<messagenum>]"
+msgstr "B<summary> I<Fehler> [I<Nachrichtennummer>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1329
+msgid "Select a message number that should be used as the summary of a I<bug>."
+msgstr ""
+"wählt eine Nachrichtennummer, die als Zusammenfassung von I<Fehler> benutzt "
+"werden soll."
+
+#. type: textblock
+#: ../scripts/bts.pl:1332
+msgid "If no message number is given, the summary is cleared."
+msgstr ""
+"Falls keine Nachrichtennummer angegeben ist, wird die Zusammenfassung "
+"geleert."
+
+#. type: =item
+#: ../scripts/bts.pl:1343
+msgid "B<submitter> I<bug> [I<bug> ...] I<submitter-email>"
+msgstr "B<submitter> I<Fehler> [I<Fehler>] … I<Absender-E-Mail-Adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1345
+msgid ""
+"Change the submitter address of a I<bug> or a number of bugs, with B<!> "
+"meaning `use the address on the current email as the new submitter address'."
+msgstr ""
+"ändert die Adresse des Einreichenden eines I<Fehler>s oder einer Reihe von "
+"Fehlern. B<!> bedeutet »die Adresse der aktuellen E-Mail als neue Adresse "
+"des Einreichenden verwenden«."
+
+#. type: =item
+#: ../scripts/bts.pl:1363
+msgid "B<reassign> I<bug> [I<bug> ...] I<package> [I<version>]"
+msgstr "B<reassign> I<Fehler> [I<Fehler> …] I<Paket> [I<Version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1365
+msgid ""
+"Reassign a I<bug> or a number of bugs to a different I<package>. The "
+"I<version> field is optional; see the explanation at L<https://www.debian."
+"org/Bugs/server-control>."
+msgstr ""
+"weist einem I<Fehler> oder einer Reihe von Fehlern einem anderen I<Paket> "
+"zu. Das Feld I<Version> ist optional; lesen Sie die Erklärung auf L<https://"
+"www.debian.org/Bugs/server-control>."
+
+#. type: =item
+#: ../scripts/bts.pl:1397
+msgid "B<found> I<bug> [I<version>]"
+msgstr "B<found> I<Fehler> [I<Version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1399
+msgid ""
+"Indicate that a I<bug> was found to exist in a particular package version. "
+"Without I<version>, the list of fixed versions is cleared and the bug is "
+"reopened."
+msgstr ""
+"zeigt an, dass ein I<Fehler> in einer bestimmten Paketversion gefunden "
+"wurde. Ohne I<Version> wird die Liste reparierter Versionen bereinigt und "
+"der Fehler wird erneut geöffnet."
+
+#. type: =item
+#: ../scripts/bts.pl:1417
+msgid "B<notfound> I<bug> I<version>"
+msgstr "B<notfound> I<Fehler> I<Version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1419
+msgid ""
+"Remove the record that I<bug> was encountered in the given version of the "
+"package to which it is assigned."
+msgstr ""
+"entfernt den Datensatz, mit dem I<Fehler> in der gegebenen Version des "
+"Pakets, dem er zugewiesen ist, vorgefunden wurde."
+
+#. type: =item
+#: ../scripts/bts.pl:1432
+msgid "B<fixed> I<bug> I<version>"
+msgstr "B<fixed> I<Fehler> I<Version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1434
+msgid ""
+"Indicate that a I<bug> was fixed in a particular package version, without "
+"affecting the I<bug>'s open/closed status."
+msgstr ""
+"zeigt an, dass ein I<Fehler> in einer bestimmten Paketversion behoben wurde "
+"ohne den Offen-/Geschlossenstatus des I<Fehler>s zu beeinflussen."
+
+#. type: =item
+#: ../scripts/bts.pl:1446
+msgid "B<notfixed> I<bug> I<version>"
+msgstr "B<notfixed> I<Fehler> I<Version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1448
+msgid ""
+"Remove the record that a I<bug> was fixed in the given version of the "
+"package to which it is assigned."
+msgstr ""
+"entfernt den Datensatz mit dem ein I<Fehler> in der gegebenen Version des "
+"Pakets, dem er zugewiesen ist, behoben wurde."
+
+#. type: textblock
+#: ../scripts/bts.pl:1451
+msgid ""
+"This is equivalent to the sequence of commands \"B<found> I<bug> "
+"I<version>\", \"B<notfound> I<bug> I<version>\"."
+msgstr ""
+"Dies ist gleichbedeutend mit der Abfolge der Befehle »B<found> I<Fehler> "
+"I<Version>«, »B<notfound> I<Fehler> I<Version>«."
+
+#. type: =item
+#: ../scripts/bts.pl:1464
+msgid "B<block> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+msgstr "B<block> I<Fehler> B<by>|B<with> I<Fehler> [I<Fehler> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1466
+msgid "Note that a I<bug> is blocked from being fixed by a set of other bugs."
+msgstr ""
+"weist darauf hin, dass ein I<Fehler> von der Behebung durch einen Satz "
+"anderer Fehler blockiert ist."
+
+#. type: =item
+#: ../scripts/bts.pl:1486
+msgid "B<unblock> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+msgstr "B<unblock> I<Fehler> B<by>|B<with> I<Fehler> [I<Fehler> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1488
+msgid ""
+"Note that a I<bug> is no longer blocked from being fixed by a set of other "
+"bugs."
+msgstr ""
+"weist darauf hin, dass ein I<Fehler> nicht länger von der Behebung durch "
+"einen Satz anderer Fehler blockiert ist."
+
+#. type: =item
+#: ../scripts/bts.pl:1508
+msgid "B<merge> I<bug> I<bug> [I<bug> ...]"
+msgstr "B<merge> I<Fehler> I<Fehler> [I<Fehler> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1510
+msgid "Merge a set of bugs together."
+msgstr "fügt einen Satz Fehler zusammen."
+
+#. type: =item
+#: ../scripts/bts.pl:1527
+msgid "B<forcemerge> I<bug> I<bug> [I<bug> ...]"
+msgstr "B<forcemerge> I<Fehler> I<Fehler> [I<Fehler> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1529
+msgid ""
+"Forcibly merge a set of bugs together. The first I<bug> listed is the master "
+"bug, and its settings (those which must be equal in a normal B<merge>) are "
+"assigned to the bugs listed next."
+msgstr ""
+"fügt einen Satz Fehler mit Gewalt zusammen. Der erste aufgeführte I<Fehler> "
+"ist der Hauptfehler und seine Einstellungen (diejenigen, die denen in einem "
+"normalen B<merge> entsprechen müssen) werden den nachfolgend aufgeführten "
+"Fehlern zugewiesen."
+
+#. type: =item
+#: ../scripts/bts.pl:1548
+msgid "B<unmerge> I<bug>"
+msgstr "B<unmerge> I<Fehler>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1550
+msgid "Unmerge a I<bug>."
+msgstr "macht das Zusammenführen eines I<Fehler>s rückgängig."
+
+#. type: =item
+#: ../scripts/bts.pl:1560
+msgid "B<tag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<tag> I<Fehler> [B<+>|B<->|B<=>] I<Markierung> [I<Markierung> …]"
+
+#. type: =item
+#: ../scripts/bts.pl:1562
+msgid "B<tags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<tags> I<Fehler> [B<+>|B<->|B<=>] I<Markierung> [I<Markierung> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1564
+msgid ""
+"Set or unset a I<tag> on a I<bug>. The tag may either be the exact tag name "
+"or it may be abbreviated to any unique tag substring. (So using B<fixed> "
+"will set the tag B<fixed>, not B<fixed-upstream>, for example, but B<fix> "
+"would not be acceptable.) Multiple tags may be specified as well. The two "
+"commands (tag and tags) are identical. At least one tag must be specified, "
+"unless the B<=> flag is used, where the command"
+msgstr ""
+"setzt oder entfernt eine I<Markierung> für einen I<Fehler>. Die Markierung "
+"kann entweder der exakte Markierungsname sein oder er kann auf eine "
+"eindeutige Teilzeichenkette abgekürzt werden. (Daher wird B<fixed> "
+"beispielsweise die Markierung B<fixed>, nicht B<fixed-upstream> setzen, aber "
+"B<fix> wäre nicht zulässig.) Mehrere Markierungen können ebenfalls angegeben "
+"werden. Die beiden Befehle (»tag« und »tags«) sind identisch. Wenn der "
+"Schalter B<=> nicht benutzt wird, muss mindestens eine Markierung angegeben "
+"werden, wobei der Befehl"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1571
+#, no-wrap
+msgid ""
+" bts tags <bug> =\n"
+"\n"
+msgstr ""
+" bts tags <Fehler> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1573
+msgid "will remove all tags from the specified I<bug>."
+msgstr "alle Markierungen vom angegebenen I<Fehler> entfernen wird."
+
+#. type: textblock
+#: ../scripts/bts.pl:1575
+msgid ""
+"Adding/removing the B<security> tag will add \"team\\@security.debian.org\" "
+"to the Cc list of the control email."
+msgstr ""
+"Das Hinzufügen/Entfernen der B<security>-Markierung wird der Cc-Liste der "
+"Steuerungs-E-Mail »team\\@security.debian.org« hinzufügen."
+
+#. type: textblock
+#: ../scripts/bts.pl:1578
+msgid ""
+"The list of valid tags and their significance is available at L<https://www."
+"debian.org/Bugs/Developer#tags>. The current valid tags are:"
+msgstr ""
+"Die Liste gültiger Markierungen und ihre Bedeutung ist unter L<https://www."
+"debian.org/Bugs/Developer#tags> verfügbar. Derzeit sind folgende "
+"Markierungen gültig:"
+
+#. type: textblock
+#: ../scripts/bts.pl:1582
+msgid ""
+"patch, wontfix, moreinfo, unreproducible, fixed, help, security, upstream, "
+"pending, d-i, confirmed, ipv6, lfs, fixed-upstream, l10n, newcomer, a11y, "
+"ftbfs"
+msgstr ""
+"patch, wontfix, moreinfo, unreproducible, fixed, help, security, upstream, "
+"pending, d-i, confirmed, ipv6, lfs, fixed-upstream, l10n, newcomer, a11y, "
+"ftbfs"
+
+#. type: textblock
+#: ../scripts/bts.pl:1586
+msgid ""
+"There is also a tag for each release of Debian since \"potato\". Note that "
+"this list may be out of date, see the website for the most up to date source."
+msgstr ""
+"Es gibt auch eine Markierung für jede Veröffentlichung von Debian seit "
+"»Potato«. Beachten Sie, dass diese Liste möglicherweise nicht aktuell ist, "
+"die aktuellste Quelle bietet die Website."
+
+#. type: =item
+#: ../scripts/bts.pl:1671
+msgid "B<affects> I<bug> [B<+>|B<->|B<=>] I<package> [I<package> ...]"
+msgstr "B<affects> I<Fehler> [B<+>|B<->|B<=>] I<Paket> [I<Paket> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1673
+msgid ""
+"Indicates that a I<bug> affects a I<package> other than that against which "
+"it is filed, causing the I<bug> to be listed by default in the I<package> "
+"list of the other I<package>. This should generally be used where the "
+"I<bug> is severe enough to cause multiple reports from users to be assigned "
+"to the wrong package. At least one I<package> must be specified, unless the "
+"B<=> flag is used, where the command"
+msgstr ""
+"zeigt an, dass ein I<Fehler> ein anderes I<Paket> betrifft, als das, gegen "
+"das er eingereicht wurde, was dazu führt, dass der I<Fehler> standardmäßig "
+"in der I<Paket>liste des anderen Pakets aufgeführt wird. Dies sollte "
+"üblicherweise benutzt werden, wo der I<Fehler> ernst genug ist, um mehrere "
+"Berichte von Benutzern dem falschen Paket zuzuweisen. Es muss mindestens ein "
+"I<Paket> angegeben werden, sogar, wenn der Schalter B<=> benutzt wird, wobei "
+"der Befehl"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1679
+#, no-wrap
+msgid ""
+" bts affects <bug> =\n"
+"\n"
+msgstr ""
+" bts affects <Fehler> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1681
+msgid "will remove all indications that I<bug> affects other packages."
+msgstr "alle Hinweise entfernt, dass I<Fehler> andere Pakete beeinflusst."
+
+#. type: =item
+#: ../scripts/bts.pl:1715
+msgid "B<user> I<email>"
+msgstr "B<user> I<E-Mail-Adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1717
+msgid "Specify a user I<email> address before using the B<usertags> command."
+msgstr ""
+"gibt eine Benutzer-I<E-Mail>-Adresse an, bevor der Befehl B<usertags> "
+"verwendet wird."
+
+#. type: =item
+#: ../scripts/bts.pl:1734
+msgid "B<usertag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<usertag> I<Fehler> [B<+>|B<->|B<=>] I<Markierung> [I<Markierung> …]"
+
+#. type: =item
+#: ../scripts/bts.pl:1736
+msgid "B<usertags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<usertags> I<Fehler> [B<+>|B<->|B<=>] I<Markierung> [I<Markierung> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1738
+msgid ""
+"Set or unset a user tag on a I<bug>. The I<tag> must be the exact tag name "
+"wanted; there are no defaults or checking of tag names. Multiple tags may "
+"be specified as well. The two commands (B<usertag> and B<usertags>) are "
+"identical. At least one I<tag> must be specified, unless the B<=> flag is "
+"used, where the command"
+msgstr ""
+"setzt oder entfernt eine Benutzermarkierung für einen I<Fehler>. Die "
+"I<Markierung> muss exakt den gewünschten Markierungsnamen haben; es gibt "
+"dort keine Vorgaben oder Prüfungen von Markierungsnamen. Mehrere "
+"Markierungen können ebenfalls angegeben werden. Die beiden Befehle "
+"(B<usertag> und B<usertags>) sind identisch. Wenn der Schalter B<=> nicht "
+"benutzt wird, muss mindestens eine Markierung angegeben werden, wobei der "
+"Befehl"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1744
+#, no-wrap
+msgid ""
+" bts usertags <bug> =\n"
+"\n"
+msgstr ""
+" bts usertags <Fehler> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1746
+msgid "will remove all user tags from the specified I<bug>."
+msgstr "alle Benutzermarkierungen vom angegebenen I<Fehler> entfernt."
+
+#. type: =item
+#: ../scripts/bts.pl:1776
+msgid "B<claim> I<bug> [I<claim>]"
+msgstr "B<claim> I<Fehler> [I<Anspruch>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1778
+msgid ""
+"Record that you have claimed a I<bug> (e.g. for a bug squashing party). "
+"I<claim> should be a unique token allowing the bugs you have claimed to be "
+"identified; an e-mail address is often used."
+msgstr ""
+"zeichnet auf, dass Sie Anspruch auf einen Fehler erheben (z.B. für ein "
+"Fehlerbearbeitungstreffen, eine »Bug Squashing Party«). I<Anspruch> sollte "
+"ein eindeutiges Kürzel sein, das es ermöglicht, die Fehler, auf die Sie "
+"Anspruch erheben, zu identifizieren; oft wird eine E-Mail-Adresse benutzt."
+
+#. type: textblock
+#: ../scripts/bts.pl:1782 ../scripts/bts.pl:1802
+msgid ""
+"If no I<claim> is specified, the environment variable B<DEBEMAIL> or "
+"B<EMAIL> (checked in that order) is used."
+msgstr ""
+"Falls kein I<Anspruch> angegeben wurde, wird die Umgebungsvariable "
+"B<DEBEMAIL> oder B<EMAIL> (in dieser Reihenfolge geprüft) benutzt."
+
+#. type: =item
+#: ../scripts/bts.pl:1798
+msgid "B<unclaim> I<bug> [I<claim>]"
+msgstr "B<unclaim> I<Fehler> [I<Anspruch>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1800
+msgid "Remove the record that you have claimed a bug."
+msgstr "entfernt den Datensatz, mit dem Sie Anspruch auf einen Fehler erheben."
+
+#. type: =item
+#: ../scripts/bts.pl:1818
+msgid "B<severity> I<bug> I<severity>"
+msgstr "B<severity> I<Fehler> I<Schweregrad>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1820
+msgid ""
+"Change the I<severity> of a I<bug>. Available severities are: B<wishlist>, "
+"B<minor>, B<normal>, B<important>, B<serious>, B<grave>, B<critical>. The "
+"severity may be abbreviated to any unique substring."
+msgstr ""
+"ändert den I<Schweregrad> eines I<Fehler>s. Verfügbare Schweregrade sind: "
+"B<wishlist>, B<minor>, B<normal>, B<important>, B<serious>, B<grave> und "
+"B<critical>. Der Schweregrad kann auf irgendeine eindeutige Teilzeichenkette "
+"abgekürzt werden."
+
+#. type: =item
+#: ../scripts/bts.pl:1840
+msgid "B<forwarded> I<bug> I<address>"
+msgstr "B<forwarded> I<Fehler> I<Adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1842
+msgid ""
+"Mark the I<bug> as forwarded to the given I<address> (usually an email "
+"address or a URL for an upstream bug tracker)."
+msgstr ""
+"markiert den I<Fehler> als an die angegebene I<Adresse> weitergeleitet "
+"(üblicherweise eine E-Mail-Adresse oder eine URL für eine Fehlerdatenbank "
+"der Originalautoren)."
+
+#. type: =item
+#: ../scripts/bts.pl:1862
+msgid "B<notforwarded> I<bug>"
+msgstr "B<notforwarded> I<Fehler>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1864
+msgid "Mark a I<bug> as not forwarded."
+msgstr "markiert einen I<Fehler> als nicht weitergeleitet."
+
+#. type: =item
+#: ../scripts/bts.pl:1874
+msgid "B<package> [I<package> ...]"
+msgstr "B<package> [I<Paket> …]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1876
+msgid ""
+"The following commands will only apply to bugs against the listed "
+"I<package>s; this acts as a safety mechanism for the BTS. If no packages "
+"are listed, this check is turned off again."
+msgstr ""
+"Die folgenden Befehle werden nur auf Fehler gegen die aufgeführten I<Paket>e "
+"angewendet; dies dient als Sicherheitsmechanismus für die Fehlerdatenbank. "
+"Falls keine Pakete aufgeführt sind, wird die Prüfung wieder ausgeschaltet."
+
+#. type: =item
+#: ../scripts/bts.pl:1890
+msgid "B<limit> [I<key>[B<:>I<value>]] ..."
+msgstr "B<limit> [I<Schlüssel>[B<:>I<Wert>]] …"
+
+#. type: textblock
+#: ../scripts/bts.pl:1892
+msgid ""
+"The following commands will only apply to bugs which meet the specified "
+"criterion; this acts as a safety mechanism for the BTS. If no I<value>s are "
+"listed, the limits for that I<key> are turned off again. If no I<key>s are "
+"specified, all limits are reset."
+msgstr ""
+"Die folgenden Befehle werden nur auf Fehler angewendet, die dem angegebenen "
+"Kriterium entsprechen; dies dient als Sicherheitsmechanismus für die "
+"Fehlerdatenbank. Falls keine I<Wert>e aufgeführt sind, werden die "
+"Beschränkungen für diesen I<Schlüssel> wieder ausgeschaltet. Falls keine "
+"I<Schlüssel> angegeben wurden, werden alle Beschränkungen zurückgesetzt."
+
+#. type: =item
+#: ../scripts/bts.pl:1903
+msgid "B<date>"
+msgstr "B<date>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1905
+msgid "Date the bug was submitted."
+msgstr "Datum, an dem der Fehler versandt wurde"
+
+#. type: =item
+#: ../scripts/bts.pl:1907
+msgid "B<subject>"
+msgstr "B<subject>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1909
+msgid "Subject of the bug."
+msgstr "Betreff dieses Fehlers"
+
+#. type: =item
+#: ../scripts/bts.pl:1911
+msgid "B<msgid>"
+msgstr "B<msgid>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1913
+msgid "Message-id of the initial bug report."
+msgstr "Nachrichtenkennung des anfänglichen Fehlerberichts"
+
+#. type: textblock
+#: ../scripts/bts.pl:1925
+msgid "Tags applied to the bug."
+msgstr "auf den Fehler bezogene Markierungen"
+
+#. type: textblock
+#: ../scripts/bts.pl:1937
+msgid "Bugs affecting this package."
+msgstr "Fehler, die dieses Paket beeinflussen"
+
+#. type: textblock
+#: ../scripts/bts.pl:1947
+msgid ""
+"For example, to limit the set of bugs affected by the subsequent control "
+"commands to those submitted by jrandomdeveloper@example.com and tagged "
+"B<wontfix>, one would use"
+msgstr ""
+"Um zum Beispiel die Zusammenstellung von Fehlern, die von nachfolgenden "
+"Steuerbefehlen beeinflusst werden, auf diejenigen zu beschränken, die von "
+"jrandomdeveloper@example.com versandt und mit B<wontfix> markiert wurden, "
+"könnte Folgendes verwendet werden:"
+
+#. type: textblock
+#: ../scripts/bts.pl:1951
+msgid "bts limit submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr "bts limit submitter:jrandomdeveloper@example.com tag:wontfix"
+
+#. type: textblock
+#: ../scripts/bts.pl:1956
+msgid "bts limit package:foo severity:wishlist severity:minor"
+msgstr "bts limit package:foo severity:wishlist severity:minor"
+
+#. type: textblock
+#: ../scripts/bts.pl:1958
+msgid ""
+"only applies the subsequent control commands to bugs of package foo with "
+"either B<wishlist> or B<minor> severity."
+msgstr ""
+"wird nur auf nachfolgende Steuerbefehle für Fehler des Pakets Foo "
+"angewendet, die entweder den Schweregrad B<wishlist> oder B<minor> aufweisen."
+
+#. type: =item
+#: ../scripts/bts.pl:2033
+msgid "B<owner> I<bug> I<owner-email>"
+msgstr "B<owner> I<Fehler> I<Besitzer-E-Mail-Adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2035
+msgid ""
+"Change the \"owner\" address of a I<bug>, with B<!> meaning `use the address "
+"on the current email as the new owner address'."
+msgstr ""
+"ändert die »Besitzer«-Adresse eines I<Fehler>s, wobei B<!> »benutze die "
+"Adresse der aktuellen E-Mail als neue Besitzeradresse« bedeutet."
+
+#. type: textblock
+#: ../scripts/bts.pl:2038
+msgid "The owner of a bug accepts responsibility for dealing with it."
+msgstr ""
+"Der Besitzer eines Fehlers akzeptiert die Verantwortung, ihn zu erledigen."
+
+#. type: =item
+#: ../scripts/bts.pl:2050
+msgid "B<noowner> I<bug>"
+msgstr "B<noowner> I<Fehler>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2052
+msgid "Mark a bug as having no \"owner\"."
+msgstr "markiert, dass ein Fehler keinen »Besitzer« hat."
+
+#. type: =item
+#: ../scripts/bts.pl:2062
+msgid "B<subscribe> I<bug> [I<email>]"
+msgstr "B<subscribe> I<Fehler> [I<E-Mail>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2064
+msgid ""
+"Subscribe the given I<email> address to the specified I<bug> report. If no "
+"email address is specified, the environment variable B<DEBEMAIL> or B<EMAIL> "
+"(in that order) is used. If those are not set, or B<!> is given as email "
+"address, your default address will be used."
+msgstr ""
+"abonniert die gegebene I<E-Mail>-Adresse für den angegebenen I<Fehler>. "
+"Falls keine E-Mail-Adresse angegeben wurde, wird die Umgebungsvariable "
+"B<DEBEMAIL> oder B<EMAIL> (in dieser Reihenfolge) benutzt. Falls diese nicht "
+"gesetzt sind oder B<!> als E-Mail-Adresse angegeben ist, wird Ihre Standard-"
+"E-Mail-Adresse verwendet."
+
+#. type: textblock
+#: ../scripts/bts.pl:2069
+msgid ""
+"After executing this command, you will be sent a subscription confirmation "
+"to which you have to reply. When subscribed to a bug report, you receive "
+"all relevant emails and notifications. Use the unsubscribe command to "
+"unsubscribe."
+msgstr ""
+"Nach der Ausführung dieses Befehls wird ihnen eine Abonnement-Bestätigung "
+"gesandt, auf die Sie antworten müssen. Wenn Sie einen Fehlerbericht "
+"abonniert haben, erhalten Sie alle relevanten E-Mails und "
+"Benachrichtigungen, Benutzen Sie den Befehl unsubscribe, um das Abonnement "
+"zu beenden."
+
+#. type: =item
+#: ../scripts/bts.pl:2092
+msgid "B<unsubscribe> I<bug> [I<email>]"
+msgstr "B<unsubscribe> I<Fehler> [I<E-Mail>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2094
+msgid ""
+"Unsubscribe the given email address from the specified bug report. As with "
+"subscribe above, if no email address is specified, the environment variables "
+"B<DEBEMAIL> or B<EMAIL> (in that order) is used. If those are not set, or "
+"B<!> is given as email address, your default address will be used."
+msgstr ""
+"beendet das Abonnement der angegebenen E-Mail-Adresse für den angegebenen "
+"Fehlerbericht. Wie beim vorhergehenden Abonnieren werden, falls keine E-Mail-"
+"Adresse angegeben wurde, die Umgebungsvariablen B<DEBEMAIL> oder B<EMAIL> "
+"(in dieser Reihenfolge) benutzt. Falls diese nicht gesetzt sind oder B<!> "
+"als E-Mail-Adresse angegeben ist, wird Ihre Standard-E-Mail-Adresse "
+"verwendet."
+
+#. type: textblock
+#: ../scripts/bts.pl:2099
+msgid ""
+"After executing this command, you will be sent an unsubscription "
+"confirmation to which you have to reply. Use the B<subscribe> command to, "
+"well, subscribe."
+msgstr ""
+"Nach der Ausführung dieses Befehls wird Ihnen eine Bestätigung für das "
+"Beenden des Abonnements gesandt, auf die Sie antworten müssen. Benutzen Sie "
+"zum Abonnieren den Befehl B<subscribe>."
+
+#. type: =item
+#: ../scripts/bts.pl:2122
+msgid "B<reportspam> I<bug> ..."
+msgstr "B<reportspam> I<Fehler> …"
+
+#. type: textblock
+#: ../scripts/bts.pl:2124
+msgid ""
+"The B<reportspam> command allows you to report a I<bug> report as containing "
+"spam. It saves one from having to go to the bug web page to do so."
+msgstr ""
+"Der Befehl B<reportspam> ermöglicht es Ihnen, zu melden, dass ein "
+"I<Fehler>bericht Spam enthält. Er bewahrt davor, auf die Fehler-Website "
+"gehen zu müssen, um dies zu tun."
+
+#. type: =item
+#: ../scripts/bts.pl:2161
+msgid "B<spamreport> I<bug> ..."
+msgstr "B<spamreport> I<Fehler> …"
+
+#. type: textblock
+#: ../scripts/bts.pl:2163
+msgid "B<spamreport> is a synonym for B<reportspam>."
+msgstr "B<spamreport> ist ein Synonym für B<reportspam>."
+
+#. type: =item
+#: ../scripts/bts.pl:2171
+msgid ""
+"B<cache> [I<options>] [I<maint_email> | I<pkg> | B<src:>I<pkg> | B<from:"
+">I<submitter>]"
+msgstr ""
+"B<cache> [I<Optionen>] [I<Betreuer-E-Mail-Adresse> | I<Paket> | B<src:"
+">I<Paket> | B<from:>I<Absender>]"
+
+#. type: =item
+#: ../scripts/bts.pl:2173
+msgid ""
+"B<cache> [I<options>] [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr ""
+"B<cache> [I<Optionen>] [B<release-critical> | B<release-critical/> … | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2175
+msgid ""
+"Generate or update a cache of bug reports for the given email address or "
+"package. By default it downloads all bugs belonging to the email address in "
+"the B<DEBEMAIL> environment variable (or the B<EMAIL> environment variable "
+"if B<DEBEMAIL> is unset). This command may be repeated to cache bugs "
+"belonging to several people or packages. If multiple packages or addresses "
+"are supplied, bugs belonging to any of the arguments will be cached; those "
+"belonging to more than one of the arguments will only be downloaded once. "
+"The cached bugs are stored in F<$XDG_CACHE_HOME/devscripts/bts/> or, if "
+"B<XDG_CACHE_HOME> is not set, in F<~/.cache/devscripts/bts/>."
+msgstr ""
+"erzeugt oder aktualisiert einen Zwischenspeicher von Fehlerberichten für die "
+"angegebene E-Mail-Adresse oder das gegebene Paket. Standardmäßig lädt es "
+"alle Fehler herunter, die zu der E-Mail-Adresse in der Umgebungsvariable "
+"B<DEBEMAIL> gehören (oder der Umgebungsvariable B<EMAIL>, falls B<DEBEMAIL> "
+"nicht gesetzt ist). Dieser Befehl kann wiederholt werden, um Fehler "
+"zwischenzuspeichern, die zu mehreren Personen oder Paketen gehören. Falls "
+"mehrere Pakete oder Adressen mitgegeben werden, werden Fehler "
+"zwischengespeichert, die zu allen Argumenten gehören; diejenigen, die zu "
+"mehr als einem Argument gehören, werden nur einmal heruntergeladen. Die "
+"zwischengespeicherten Fehler werden in F<$XDG_CACHE_HOME/devscripts/bts/> "
+"gespeichert oder, falls B<XDG_CACHE_HOME> nicht gesetzt ist, in F<~/.cache/"
+"devscripts/bts/>."
+
+#. type: textblock
+#: ../scripts/bts.pl:2186
+msgid "You can use the cached bugs with the B<-o> switch. For example:"
+msgstr ""
+"Sie können die zwischengespeicherten Fehler mit dem Schalter B<-o> "
+"verwenden. Zum Beispiel:"
+
+#. type: verbatim
+#: ../scripts/bts.pl:2188
+#, no-wrap
+msgid ""
+" bts -o bugs\n"
+" bts -o show 12345\n"
+"\n"
+msgstr ""
+" bts -o bugs\n"
+" bts -o show 12345\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:2191
+msgid ""
+"Also, B<bts> will update the files in it in a piecemeal fashion as it "
+"downloads information from the BTS using the B<show> command. You might thus "
+"set up the cache, and update the whole thing once a week, while letting the "
+"automatic cache updates update the bugs you frequently refer to during the "
+"week."
+msgstr ""
+"Außerdem wird B<bts> die Dateien darin auf unsystematische Weise "
+"aktualisieren, da es Informationen von der Fehlerdatenbank unter Benutzung "
+"des Befehls B<show> herunterlädt. Sie könnten daher den Zwischenspeicher "
+"einrichten, indem Sie die automatischen Zwischenspeicheraktualisierungen die "
+"Fehler aktualisieren lassen, auf die Sie häufig während der Woche Bezug "
+"nehmen."
+
+#. type: textblock
+#: ../scripts/bts.pl:2197
+msgid ""
+"Some options affect the behaviour of the B<cache> command. The first is the "
+"setting of B<--cache-mode>, which controls how much B<bts> downloads of the "
+"referenced links from the bug page, including boring bits such as the "
+"acknowledgement emails, emails to the control bot, and the mbox version of "
+"the bug report. It can take three values: B<min> (the minimum), B<mbox> "
+"(download the minimum plus the mbox version of the bug report) or B<full> "
+"(the whole works). The second is B<--force-refresh> or B<-f>, which forces "
+"the download, even if the cached bug report is up-to-date. The B<--include-"
+"resolved> option indicates whether bug reports marked as resolved should be "
+"downloaded during caching."
+msgstr ""
+"Einige Optionen beeinflussen das Verhalten des Befehls B<cache>. Die erste "
+"ist die Einstellung von B<--cache-mode>, die steuert, wieviel B<bts> von den "
+"referenzierten Verweisen von der Fehlerseite herunterlädt, einschließlich "
+"langweiliger Teile, wie den Bestätigungs-E-Mails, E-Mails an den Steuer-Bot "
+"und der Mbox-Version des Fehlerberichts. Sie kann drei Werte annehmen: "
+"B<min> (das Minimum), B<mbox> (das Minimum plus der Mbox-Version des "
+"Fehlerberichts herunterladen) oder B<full> (alles). Die zweite ist B<--force-"
+"refresh> oder B<-f>. Sie erzwingt das Herunterladen sogar dann, wenn der "
+"zwischengespeicherte Fehler aktuell ist. Die Option B<--include-resolved> "
+"zeigt an, ob Fehlerberichte, die als behoben markiert sind, während des "
+"Zwischenspeicherns heruntergeladen werden sollen."
+
+#. type: textblock
+#: ../scripts/bts.pl:2208
+msgid ""
+"Each of these is configurable from the configuration file, as described "
+"below. They may also be specified after the B<cache> command as well as at "
+"the start of the command line."
+msgstr ""
+"Jedes davon ist, wie nachfolgend beschrieben, in der Konfigurationsdatei "
+"einstellbar. Dies könnte außerdem nach dem Befehl B<cache>, ebenso wie am "
+"Anfang der Befehlszeile angegeben werden."
+
+#. type: textblock
+#: ../scripts/bts.pl:2212
+msgid ""
+"Finally, B<-q> or B<--quiet> will suppress messages about caches being up-to-"
+"date, and giving the option twice will suppress all cache messages (except "
+"for error messages)."
+msgstr ""
+"Schlussendlich wird B<-q> oder B<--quiet> Nachrichten darüber, ob der "
+"Zwischenspeicher aktuell ist, unterdrücken. Wird diese Option zweimal "
+"angegeben, werden alle Zwischenspeichernachrichten (mit Ausnahme von "
+"Fehlermeldungen) unterdrückt."
+
+#. type: textblock
+#: ../scripts/bts.pl:2216
+msgid ""
+"Beware of caching RC, though: it will take a LONG time! (With 1000+ RC bugs "
+"and a delay of 5 seconds between bugs, you're looking at a minimum of 1.5 "
+"hours, and probably significantly more than that.)"
+msgstr ""
+"Vorsicht allerdings beim Zwischenspeichern von RC-Fehlern: Es wird LANGE "
+"dauern! (Mit über 1000 RC-Fehlern und einer Verzögerung von fünf Sekunden "
+"zwischen Fehlern, sehen Sie sich mindestens 1,5 Stunden und wahrscheinlich "
+"bedeutend mehr als dem gegenüber.)"
+
+#. type: =item
+#: ../scripts/bts.pl:2351
+msgid "B<cleancache> I<package> | B<src:>I<package> | I<maintainer>"
+msgstr "B<cleancache> I<Paket> | B<src:>I<Paket> | I<Paketbetreuer>"
+
+#. type: =item
+#: ../scripts/bts.pl:2353
+msgid ""
+"B<cleancache from:>I<submitter> | B<tag:>I<tag> | B<usertag:>I<tag> | "
+"I<number> | B<ALL>"
+msgstr ""
+"B<cleancache from:>I<Absender> | B<tag:>I<Markierung> | B<usertag:"
+">I<Markierung> | I<Zahl> | B<ALL>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2355
+msgid ""
+"Clean the cache for the specified I<package>, I<maintainer>, etc., as "
+"described above for the B<bugs> command, or clean the entire cache if B<ALL> "
+"is specified. This is useful if you are going to have permanent network "
+"access or if the database has become corrupted for some reason. Note that "
+"for safety, this command does not default to the value of B<DEBEMAIL> or "
+"B<EMAIL>."
+msgstr ""
+"bereinigt den Zwischenspeicher für das angegebene I<Paket>, den "
+"I<Paketbetreuer>. etc., wie oben für den Befehl B<bugs> beschrieben oder "
+"bereinigt den kompletten Zwischenspeicher, falls B<ALL> angegeben wurde. "
+"Dies ist nützlich, falls Sie einen permanenten Netzwerkzugang haben oder "
+"falls Ihre Datenbank aus irgend einem Grund beschädigt wurde. Beachten Sie, "
+"dass dieser Befehl aus Sicherheitsgründen nicht standardmäßig den Wert "
+"B<DEBEMAIL> oder B<EMAIL> hat."
+
+#. type: =item
+#: ../scripts/bts.pl:2403
+msgid "B<listcachedbugs> [I<number>]"
+msgstr "B<listcachedbugs> [I<Zahl>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2405
+msgid ""
+"List cached bug ids (intended to support bash completion). The optional "
+"number argument restricts the list to those bug ids that start with that "
+"number."
+msgstr ""
+"listet zwischengespeicherte Fehlerkennungen auf (für die Unterstützung der "
+"Bash-Vervollständigung gedacht). Das optionale Argument »Zahl« beschränkt "
+"die Liste auf jene Fehlerkennungen, die mit dieser Zahl beginnen."
+
+#. type: =item
+#: ../scripts/bts.pl:2437
+msgid "B<version>"
+msgstr "B<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2439
+msgid "Display version and copyright information."
+msgstr "zeigt Version und Copyright-Information an."
+
+#. type: =item
+#: ../scripts/bts.pl:2454
+msgid "B<help>"
+msgstr "B<help>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2456
+msgid ""
+"Display a short summary of commands, suspiciously similar to parts of this "
+"man page."
+msgstr ""
+"zeigt eine kurze Zusammenfassung der Befehle, verdächtig ähnlich zu Teilen "
+"dieser Handbuchseite."
+
+#. type: SH
+#: ../scripts/bts.pl:4190 ../scripts/debuild.1:88 ../scripts/diff2patches.1:40
+#: ../scripts/pts-subscribe.1:34
+#, no-wrap
+msgid "ENVIRONMENT VARIABLES"
+msgstr "UMGEBUNGSVARIABLEN"
+
+#. type: =item
+#: ../scripts/bts.pl:4194
+msgid "B<DEBEMAIL>"
+msgstr "B<DEBEMAIL>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4196
+msgid ""
+"If this is set, the From: line in the email will be set to use this email "
+"address instead of your normal email address (as would be determined by "
+"B<mail>)."
+msgstr ""
+"Falls diese gesetzt ist, wird die Von:-Zeile in der E-Mail gesetzt, um diese "
+"E-Mail-Adresse anstelle Ihrer normalen E-Mail-Adresse zu benutzen (als wäre "
+"sie durch B<mail> festgelegt)."
+
+#. type: =item
+#: ../scripts/bts.pl:4200
+msgid "B<DEBFULLNAME>"
+msgstr "B<DEBFULLNAME>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4202
+msgid ""
+"If B<DEBEMAIL> is set, B<DEBFULLNAME> is examined to determine the full name "
+"to use; if this is not set, B<bts> attempts to determine a name from your "
+"F<passwd> entry."
+msgstr ""
+"Falls B<DEBEMAIL> gesetzt ist, wird B<DEBFULLNAME> geprüft, um den "
+"vollständigen Namen, der verwendet wird, zu bestimmen; falls dies nicht "
+"gesetzt ist, versucht B<bts> einen Namen von Ihrem F<passwd>-Eintrag zu "
+"bestimmen."
+
+#. type: =item
+#: ../scripts/bts.pl:4206
+msgid "B<BROWSER>"
+msgstr "B<BROWSER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4208
+msgid ""
+"If set, it specifies the browser to use for the B<show> and B<bugs> "
+"options. See the description above."
+msgstr ""
+"Falls gesetzt, gibt es den Browser an, der für die Optionen B<show> und "
+"B<bugs> verwendet wird. Lesen Sie die vorhergehende Beschreibung."
+
+#. type: SH
+#: ../scripts/bts.pl:4213 ../scripts/debc.1:102 ../scripts/debchange.1:405
+#: ../scripts/debcheckout.pl:180 ../scripts/debclean.1:93
+#: ../scripts/debcommit.pl:104 ../scripts/debdiff.1:188 ../scripts/debi.1:109
+#: ../scripts/debrelease.1:105 ../scripts/debrsign.1:57
+#: ../scripts/debsign.1:105 ../scripts/debuild.1:327 ../scripts/dget.pl:690
+#: ../scripts/dpkg-depcheck.1:102 ../scripts/dscverify.1:43
+#: ../scripts/grep-excuses.1:46 ../scripts/mass-bug.pl:141
+#: ../scripts/nmudiff.1:92 ../scripts/plotchangelog.1:106
+#: ../scripts/pts-subscribe.1:42 ../scripts/rmadison.pl:355
+#: ../scripts/uupdate.1:107 ../scripts/who-uploads.1:51
+#, no-wrap
+msgid "CONFIGURATION VARIABLES"
+msgstr "KONFIGURATIONSVARIABLEN"
+
+#. type: textblock
+#: ../scripts/bts.pl:4215 ../scripts/debcommit.pl:106
+#: ../scripts/mass-bug.pl:143
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+"Die beiden Konfigurationsdateien F</etc/devscripts.conf> und F<~/."
+"devscripts> werden in dieser Reihenfolge durch eine Shell eingelesen, um "
+"Konfigurationsvariablen zu setzen. Befehlszeilenoptionen können benutzt "
+"werden, um Einstellungen aus Konfigurationsdateien außer Kraft zu setzen. "
+"Einstellungen aus Umgebungsvariablen werden zu diesem Zweck ignoriert. Die "
+"derzeit bekannten Variablen sind:"
+
+#. type: =item
+#: ../scripts/bts.pl:4223
+msgid "B<BTS_OFFLINE>"
+msgstr "B<BTS_OFFLINE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4225
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--offline> command "
+"line parameter being used. Only has an effect on the B<show> and B<bugs> "
+"commands. The default is B<no>. See the description of the B<show> command "
+"above for more information."
+msgstr ""
+"Falls dies auf B<yes> gesetzt ist, dann ist es genauso, als wenn der "
+"Befehlszeilenparameter B<--offline> benutzt würde. Es hat nur Auswirkungen "
+"auf die Befehle B<show> und B<bugs>. Vorgabe ist B<no>. Weitere "
+"Informationen finden Sie in der vorhergehenden Beschreibung des Befehls "
+"B<show>."
+
+#. type: =item
+#: ../scripts/bts.pl:4230
+msgid "B<BTS_CACHE>"
+msgstr "B<BTS_CACHE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4232
+msgid ""
+"If this is set to B<no>, then it is the same as the B<--no-cache> command "
+"line parameter being used. Only has an effect on the B<show> and B<bug> "
+"commands. The default is B<yes>. Again, see the B<show> command above for "
+"more information."
+msgstr ""
+"Falls dies auf B<no> gesetzt ist, dann ist es genauso, als wenn der "
+"Befehlszeilenparameter B<--no-cache> benutzt würde. Es hat nur Auswirkungen "
+"auf die Befehle B<show> und B<bug>. Vorgabe ist B<yes>. Weitere "
+"Informationen finden Sie wieder beim Befehl B<show> weiter oben."
+
+#. type: =item
+#: ../scripts/bts.pl:4237
+msgid "B<BTS_CACHE_MODE=>{B<min>,B<mbox>,B<full>}"
+msgstr "B<BTS_CACHE_MODE=>{B<min>,B<mbox>,B<full>}"
+
+#. type: textblock
+#: ../scripts/bts.pl:4239
+msgid ""
+"How much of the BTS should we mirror when we are asked to cache something? "
+"Just the minimum, or also the mbox or the whole thing? The default is "
+"B<min>, and it has the same meaning as the B<--cache-mode> command line "
+"parameter. Only has an effect on the cache. See the B<cache> command for "
+"more information."
+msgstr ""
+"Wieviel von der Fehlerdatenbank sollte gespiegelt werden, wenn danach "
+"gefragt wird, etwas zwischenzuspeichern? Nur das Minimum oder auch die Mbox "
+"oder das Ganze? Vorgabe ist B<min>, was die gleiche Bedeutung hat wie der "
+"Befehlszeilenparameter B<--cache-mode>. Dies hat nur Auswirkungen auf den "
+"Zwischenspeicher. Weitere Informationen finden Sie beim Befehl B<cache>."
+
+#. type: =item
+#: ../scripts/bts.pl:4245
+msgid "B<BTS_FORCE_REFRESH>"
+msgstr "B<BTS_FORCE_REFRESH>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4247
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--force-refresh> "
+"command line parameter being used. Only has an effect on the B<cache> "
+"command. The default is B<no>. See the B<cache> command for more "
+"information."
+msgstr ""
+"Falls dies auf B<yes> gesetzt ist, dann ist es genauso, als wenn der "
+"Befehlszeilenparameter B<--force-refresh> benutzt würde. Es hat nur "
+"Auswirkungen auf den Befehl B<cache>. Vorgabe ist B<no>. Weitere "
+"Informationen finden Sie beim Befehl B<cache>."
+
+#. type: =item
+#: ../scripts/bts.pl:4252
+msgid "B<BTS_MAIL_READER>"
+msgstr "B<BTS_MAIL_READER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4254
+msgid ""
+"If this is set, specifies a mail reader to use instead of B<mutt>. Same as "
+"the B<--mailreader> command line option."
+msgstr ""
+"Falls dies gesetzt ist, gibt es ein E-Mail-Programm an, der anstelle von "
+"B<mutt> benutzt wird. Entspricht der Befehlszeilenoption B<--mailreader>."
+
+#. type: TP
+#: ../scripts/bts.pl:4257 ../scripts/mass-bug.pl:151 ../scripts/nmudiff.1:117
+#, no-wrap
+msgid "B<BTS_SENDMAIL_COMMAND>"
+msgstr "B<BTS_SENDMAIL_COMMAND>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4259 ../scripts/mass-bug.pl:153
+msgid ""
+"If this is set, specifies a B<sendmail> command to use instead of F</usr/"
+"sbin/sendmail>. Same as the B<--sendmail> command line option."
+msgstr ""
+"Falls dies gesetzt ist, gibt es einen B<sendmail>-Befehl an, der anstelle "
+"von F</usr/sbin/sendmail> verwendet wird. Entspricht der Befehlszeilenoption "
+"B<--sendmail>."
+
+#. type: =item
+#: ../scripts/bts.pl:4262
+msgid "B<BTS_ONLY_NEW>"
+msgstr "B<BTS_ONLY_NEW>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4264
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have. The default is B<no>. Same as the B<--only-new> command line "
+"option."
+msgstr ""
+"lädt beim Zwischenspeichern nur neue Fehler herunter; prüft nicht auf "
+"Aktualisierungen in Fehlern, die bereits vorliegen. Vorgabe ist B<no>. "
+"Entspricht der Befehlszeilenoption B<--only-new>."
+
+#. type: =item
+#: ../scripts/bts.pl:4268
+msgid "B<BTS_SMTP_HOST>"
+msgstr "B<BTS_SMTP_HOST>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4270
+msgid ""
+"If this is set, specifies an SMTP host to use for sending mail rather than "
+"using the B<sendmail> command. Same as the B<--smtp-host> command line "
+"option."
+msgstr ""
+"Falls dies gesetzt ist, gibt es einen SMTP-Host an, der für den Versand von "
+"E-Mail gegenüber dem Befehl B<sendmail> den Vorzug bekommt. Entspricht der "
+"Befehlszeilenoption B<--smtp-host>."
+
+#. type: textblock
+#: ../scripts/bts.pl:4274
+msgid ""
+"Note that this option takes priority over B<BTS_SENDMAIL_COMMAND> if both "
+"are set, unless the B<--sendmail> option is used."
+msgstr ""
+"Beachten Sie, dass diese Option eine höhere Priorität hat als "
+"B<BTS_SENDMAIL_COMMAND>, falls beide gesetzt sind, außer wenn die Option B<--"
+"sendmail> verwendet wird."
+
+#. type: =item
+#: ../scripts/bts.pl:4277
+msgid "B<BTS_SMTP_AUTH_USERNAME>, B<BTS_SMTP_AUTH_PASSWORD>"
+msgstr "B<BTS_SMTP_AUTH_USERNAME>, B<BTS_SMTP_AUTH_PASSWORD>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4279
+msgid ""
+"If these options are set, then it is the same as the B<--smtp-username> and "
+"B<--smtp-password> options being used."
+msgstr ""
+"Falls diese Optionen gesetzt sind, ist es, als ob die Optionen B<--smtp-"
+"username> und B<--smtp-password> benutzt würden."
+
+#. type: =item
+#: ../scripts/bts.pl:4282
+msgid "B<BTS_SMTP_HELO>"
+msgstr "B<BTS_SMTP_HELO>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4284
+msgid "Same as the B<--smtp-helo> command line option."
+msgstr "entspricht der Befehlszeilenoption B<--smtp-helo>."
+
+#. type: =item
+#: ../scripts/bts.pl:4286
+msgid "B<BTS_INCLUDE_RESOLVED>"
+msgstr "B<BTS_INCLUDE_RESOLVED>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4288
+msgid ""
+"If this is set to B<no>, then it is the same as the B<--no-include-resolved> "
+"command line parameter being used. Only has an effect on the B<cache> "
+"command. The default is B<yes>. See the B<cache> command for more "
+"information."
+msgstr ""
+"Falls dies auf B<no> gesetzt ist, ist es, als ob der Befehlszeilenparameter "
+"B<--no-include-resolved> benutzt würde. Es hat nur Auswirkungen auf den "
+"Befehl B<cache>. Vorgabe ist B<yes>. Weitere Informationen finden Sie beim "
+"Befehl B<cache>."
+
+#. type: =item
+#: ../scripts/bts.pl:4293
+msgid "B<BTS_SUPPRESS_ACKS>"
+msgstr "B<BTS_SUPPRESS_ACKS>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4295
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--no-ack> command "
+"line parameter being used. The default is B<no>."
+msgstr ""
+"Falls dies auf B<yes> gesetzt ist, dann ist es, als ob der "
+"Befehlszeilenparameter B<--no-ack> benutzt würde. Vorgabe ist B<no>."
+
+#. type: =item
+#: ../scripts/bts.pl:4298
+msgid "B<BTS_INTERACTIVE>"
+msgstr "B<BTS_INTERACTIVE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4300
+msgid ""
+"If this is set to B<yes> or B<force>, then it is the same as the B<--"
+"interactive> or B<--force-interactive> command line parameter being used. "
+"The default is B<no>."
+msgstr ""
+"Falls dies auf B<yes> oder B<force> gesetzt ist, dann ist es, als ob die "
+"Befehlszeilenparameter B<--interactive> oder B<--force-interactive> benutzt "
+"würden. Vorgabe ist B<no>."
+
+#. type: =item
+#: ../scripts/bts.pl:4304
+msgid "B<BTS_DEFAULT_CC>"
+msgstr "B<BTS_DEFAULT_CC>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4306
+msgid ""
+"Specify a list of e-mail addresses to which a carbon copy of the generated e-"
+"mail to the control bot should automatically be sent."
+msgstr ""
+"gibt eine Liste von E-Mail-Adressen an, an die eine Kopie der erzeugten E-"
+"Mail an den Steuer-Bot automatisch gesandt werden sollte."
+
+#. type: =item
+#: ../scripts/bts.pl:4309
+msgid "B<BTS_SERVER>"
+msgstr "B<BTS_SERVER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4311
+msgid ""
+"Specify the name of a debbugs server which should be used instead of https://"
+"bugs.debian.org."
+msgstr ""
+"gibt den Namen des Debbugs-Servers an, der anstelle von https://bugs.debian."
+"org benutzt werden soll."
+
+#. type: textblock
+#: ../scripts/bts.pl:4318
+msgid ""
+"Please see L<https://www.debian.org/Bugs/server-control> for more details on "
+"how to control the BTS using emails and L<https://www.debian.org/Bugs/> for "
+"more information about the BTS."
+msgstr ""
+"Bitte lesen Sie L<https://www.debian.org/Bugs/server-control>, um weitere "
+"Einzelheiten zu erhalten, wie die Fehlerdatenbank unter Benutzung von E-"
+"Mails gesteuert wird und L<https://www.debian.org/Bugs/>, um weitere "
+"Informationen über die Fehlerdatenbank zu erhalten."
+
+# FIXME wrong order
+#. type: textblock
+#: ../scripts/bts.pl:4322
+msgid "querybts(1), reportbug(1), pts-subscribe(1), devscripts.conf(5)"
+msgstr "pts-subscribe(1), querybts(1), reportbug(1), devscripts.conf(5)"
+
+#. type: =head1
+#: ../scripts/bts.pl:4324 ../scripts/chdist.pl:131 ../scripts/debsnap.1:146
+#: ../scripts/mass-bug.pl:559 ../scripts/tagpending.pl:425
+#, no-wrap
+msgid "COPYRIGHT"
+msgstr "COPYRIGHT"
+
+#. type: textblock
+#: ../scripts/bts.pl:4326
+msgid ""
+"This program is Copyright (C) 2001-2003 by Joey Hess <joeyh@debian.org>. "
+"Many modifications have been made, Copyright (C) 2002-2005 Julian Gilbey "
+"<jdg@debian.org> and Copyright (C) 2007 Josh Triplett <josh@freedesktop.org>."
+msgstr ""
+"Dieses Programm unterliegt dem Copyright (C) 2001-2003 von Joey Hess "
+"<joeyh@debian.org>. Es wurden viele Änderungen vorgenommen unter dem "
+"Copyright (C) 2002-2005 von Julian Gilbey <jdg@debian.org> und dem Copyright "
+"(C) 2007 von Josh Triplett <josh@freedesktop.org>."
+
+#. type: textblock
+#: ../scripts/bts.pl:4331 ../scripts/chdist.pl:136 ../scripts/mass-bug.pl:563
+msgid ""
+"It is licensed under the terms of the GPL, either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"Es ist lizensiert unter den Bedingungen der GPL, entweder Version 2 der "
+"Lizenz oder (nach Ihrer Wahl) irgendeiner späteren Version."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:24
+msgid ""
+"build-rdeps - find packages that depend on a specific package to build "
+"(reverse build depends)"
+msgstr ""
+"build-rdeps - findet Pakete, die von einem speziellen Paket zum Bau abhängen "
+"(umgekehrte Bauabhängigkeit)"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:28
+msgid "B<build-rdeps> I<package>"
+msgstr "B<build-rdeps> I<Paket>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:32
+msgid ""
+"B<build-rdeps> searches for all packages that build-depend on the specified "
+"package."
+msgstr ""
+"B<build-rdeps> sucht nach allen Paketen, die eine Bauabhängigkeit zum "
+"angegebenen Paket haben."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:34
+msgid ""
+"The default behaviour is to just `grep` for the given dependency in the "
+"Build-Depends field of apt's Sources files."
+msgstr ""
+"Das Standardverhalten ist nur per »grep« nach der angegebenen Abhängigkeit "
+"im Feld Build-Depends von APTs Sources-Dateien zu suchen."
+
+# FIXME logic: more complete is impossible
+#. type: textblock
+#: ../scripts/build-rdeps.pl:37
+msgid ""
+"If the package dose-extra >= 4.0 is installed, then a more complete reverse "
+"build dependency computation is carried out. In particular, with that "
+"package installed, build-rdeps will find transitive reverse dependencies, "
+"respect architecture and build profile restrictions, take Provides "
+"relationships, Conflicts, Pre-Depends, Build-Depends-Arch and versioned "
+"dependencies into account and correctly resolve multiarch relationships for "
+"crossbuild reverse dependency resolution. (This tends to be a slow process "
+"due to the complexity of the package interdependencies.)"
+msgstr ""
+"Falls das Paket dose-extra >= 4.0 installiert ist, wird eine komplettere "
+"Berechnung von umgekehrten Abhängigkeiten durchgeführt. Insbesondere werden, "
+"wenn dieses Paket installiert ist, Build-rdeps transitive umgekehrte "
+"Abhängigkeiten finden. Es werden Architektur- und Bauprofilbeschränkungen "
+"beachtet, Provides-Beziehungen, Conflicts, Pre-Depends, Build-Depends-Arch "
+"und Abhängigkeiten, bei denen die Version berücksichtigt wird, in Betracht "
+"gezogen und Multiarch-Beziehungen für das Crossbuild umgekehrter "
+"Abhängigkeiten korrekt aufgelöst. (Dies läuft aufgrund der Komplexität der "
+"Paketwechselwirkungen tendenziell langsam ab.)"
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:50
+msgid "B<-u>, B<--update>"
+msgstr "B<-u>, B<--update>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:52
+msgid "Run apt-get update before searching for build-depends."
+msgstr "führt vor der Suche nach Bauabhängigkeiten »apt-get update« aus."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:54
+msgid "B<-s>, B<--sudo>"
+msgstr "B<-s>, B<--sudo>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:56
+msgid "Use sudo when running apt-get update. Has no effect if -u is omitted."
+msgstr ""
+"benutzt Sudo, wenn »apt-get update« ausgeführt wird. Hat keine Auswirkungen, "
+"falls -u weggelassen wird."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:58
+msgid "B<--distribution>"
+msgstr "B<--distribution>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:60
+msgid "Select another distribution, which is searched for build-depends."
+msgstr ""
+"wählt eine andere Distribution, in der nach Bauabhängigkeiten gesucht wird."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:62
+msgid "B<--only-main>"
+msgstr "B<--only-main>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:64
+msgid "Ignore contrib and non-free"
+msgstr "ignoriert »contrib« und »non-free«"
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:66
+msgid "B<--exclude-component>"
+msgstr "B<--exclude-component>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:68
+msgid "Ignore the given component (e.g. main, contrib, non-free)."
+msgstr ""
+"ignoriert die angegebene Komponente (z.B. »main«, »contrib«, »non-free«)."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:70
+msgid "B<--origin>"
+msgstr "B<--origin>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:72
+msgid "Restrict the search to only the specified origin (such as \"Debian\")."
+msgstr "begrenzt die Suche einzig auf den angegebenen Ursprung (wie »Debian)."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:74
+msgid "B<-m>, B<--print-maintainer>"
+msgstr "B<-m>, B<--print-maintainer>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:76
+msgid "Print the value of the maintainer field for each package."
+msgstr "gibt den Wert des Feldes »maintainer« für jedes Paket aus."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:78
+msgid "B<--host-arch>"
+msgstr "B<--host-arch>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:80
+msgid ""
+"Explicitly set the host architecture. The default is the value of `dpkg-"
+"architecture -qDEB_HOST_ARCH`. This option only works if dose-extra >= 4.0 "
+"is installed."
+msgstr ""
+"setzt explizit die Rechnerarchitektur. Voreingestellt ist der Wert von »dpkg-"
+"architecture -qDEB_HOST_ARCH«. Diese Option funktioniert nur, wenn dose-"
+"extra >= 4.0 installiert ist."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:84
+msgid "B<--build-arch>"
+msgstr "B<--build-arch>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:86
+msgid ""
+"Explicitly set the build architecture. The default is the value of `dpkg-"
+"architecture -qDEB_BUILD_ARCH`. This option only works if dose-extra >= 4.0 "
+"is installed."
+msgstr ""
+"setzt explizit die Bauarchitektur. Voreingestellt ist der Wert von »dpkg-"
+"architecture -qDEB_BUILD_ARCH«. Diese Option funktioniert nur, wenn dose-"
+"extra >= 4.0 installiert ist."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:90
+msgid "B<--no-arch-all>, B<--no-arch-any>"
+msgstr "B<--no-arch-all>, B<--no-arch-any>>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:92
+msgid ""
+"Ignore Build-Depends-Indep or Build-Depends-Arch while looking for reverse "
+"dependencies."
+msgstr ""
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:95 ../scripts/nmudiff.1:29
+#, no-wrap
+msgid "B<--old>"
+msgstr "B<--old>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:97
+msgid ""
+"Force the old simple behaviour without dose-ceve support even if dose-extra "
+">= 4.0 is installed. (This tends to be faster.)"
+msgstr ""
+"erzwingt das alte einfache Verhalten ohne Dose-ceve-Unterstützung selbst "
+"dann, wenn dose-extra >= 4.0 installiert ist. (Dies ist tendenziell "
+"schneller.)"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:100
+msgid ""
+"Notice, that the old behaviour only finds direct dependencies, ignores "
+"virtual dependencies, does not find transitive dependencies and does not "
+"take version relationships, architecture restrictions, build profiles or "
+"multiarch relationships into account."
+msgstr ""
+"Beachten Sie, dass das alte Verhalten nur direkte Abhängigkeiten findet, "
+"virtuelle Abhängigkeiten ignoriert, keine transitiven Abhängigkeiten findet "
+"und keine Versionsbeziehungen, Architekturbeschränkungen, Bauprofile oder "
+"Multiarch-Beziehungen berücksichtigt."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:107
+msgid ""
+"Don't print meta information (header, counter). Making it easier to use in "
+"scripts."
+msgstr ""
+"gibt keine Meta-Informationen (Kopfzeilen, Zähler) aus. Vereinfacht die "
+"Verwendung in Skripten."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:110
+msgid "B<-d>, B<--debug>"
+msgstr "B<-d>, B<--debug>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:112
+msgid "Run the debug mode"
+msgstr "führt den Fehlersuchmodus aus."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:114 ../scripts/cowpoke.1:131
+#: ../scripts/debclean.1:87 ../scripts/diff2patches.1:22
+#: ../scripts/grep-excuses.1:23 ../scripts/mass-bug.pl:126
+#: ../scripts/nmudiff.1:86 ../scripts/plotchangelog.1:92
+#: ../scripts/uscan.pl:1771
+#, no-wrap
+msgid "B<--help>"
+msgstr "B<--help>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:116
+msgid "Show the usage information."
+msgstr "zeigt die Aufrufinformationen."
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:118 ../scripts/chdist.pl:49
+#: ../scripts/cowpoke.1:135 ../scripts/debchange.1:402 ../scripts/debclean.1:90
+#: ../scripts/debrelease.1:102 ../scripts/deb-why-removed.pl:229
+#: ../scripts/debsign.1:102 ../scripts/debsnap.1:77
+#: ../scripts/dep3changelog.1:19 ../scripts/diff2patches.1:25
+#: ../scripts/dscverify.1:40 ../scripts/grep-excuses.1:26
+#: ../scripts/mass-bug.pl:130 ../scripts/nmudiff.1:89
+#: ../scripts/plotchangelog.1:95 ../scripts/pts-subscribe.1:31
+#: ../scripts/rmadison.pl:342 ../scripts/uscan.pl:1775 ../scripts/uupdate.1:104
+#: ../scripts/who-uploads.1:48
+#, no-wrap
+msgid "B<--version>"
+msgstr "B<--version>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:120
+msgid "Show the version information."
+msgstr "zeigt die Versionsinformationen."
+
+#. type: SH
+#: ../scripts/build-rdeps.pl:124 ../scripts/debpkg.1:12
+#, no-wrap
+msgid "REQUIREMENTS"
+msgstr "ANFORDERUNGEN"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:126
+msgid ""
+"The tool requires apt Sources files to be around for the checked "
+"components. In the default case this means that in /var/lib/apt/lists files "
+"need to be around for main, contrib and non-free."
+msgstr ""
+"Das Werkzeug benötigt die »Sources«-Dateien von Apt, um für die geprüften "
+"Komponenten da zu sein. Im Standardfall bedeutet das, dass die Dateien in /"
+"var/lib/apt/lists für »main«, »contrib« und »non-free« vorhanden sein müssen."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:130
+msgid ""
+"In practice this means one needs to add one deb-src line for each component, "
+"e.g."
+msgstr ""
+"In der Praxis bedeutet das, dass eine »deb-src«-Zeile für jede Komponente "
+"hinzugefügt wird, z.B."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:133
+msgid "deb-src http://<mirror>/debian <dist> main contrib non-free"
+msgstr "deb-src http://<mirror>/debian <dist> main contrib non-free"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:135
+msgid ""
+"and run apt-get update afterwards or use the update option of this tool."
+msgstr ""
+"und hinterher »apt-get update« ausgeführt wird oder die Verwendung der "
+"Option »update« für dieses Werkzeug nötig ist."
+
+#. type: =head1
+#: ../scripts/build-rdeps.pl:539 ../scripts/debcommit.pl:943
+#: ../scripts/desktop2menu.pl:43 ../scripts/namecheck.pl:30
+#: ../scripts/svnpath.pl:92 ../scripts/transition-check.pl:72
+msgid "LICENSE"
+msgstr "LIZENZ"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:541
+msgid ""
+"This code is copyright by Patrick Schoenfeld <schoenfeld@debian.org>, all "
+"rights reserved. This program comes with ABSOLUTELEY NO WARRANTY. You are "
+"free to redistribute this code under the terms of the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+"Dieser Code steht unter dem Copyright von Patrick Schoenfeld "
+"<schoenfeld@debian.org>, alle Rechte vorbehalten. Dieses Programm bringt "
+"ABSOLUT KEINE GEWÄHRLEISTUNG mit. Sie haben die Freiheit, diesen Code unter "
+"den Bedingungen der GNU General Public License, Version 2 oder später, "
+"weiterzugeben."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:549
+msgid "Patrick Schoenfeld <schoenfeld@debian.org>"
+msgstr "Patrick Schoenfeld <schoenfeld@debian.org>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:20
+msgid "chdist - script to easily play with several distributions"
+msgstr "chdist - Skript, um einfach mit mehreren Distributionen zu spielen"
+
+#. type: textblock
+#: ../scripts/chdist.pl:24
+msgid "B<chdist> [I<options>] [I<command>] [I<command parameters>]"
+msgstr "B<chdist> [I<Optionen>] [I<Befehl>] [I<Befehl Parameter>]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:28
+msgid ""
+"B<chdist> is a rewrite of what used to be known as 'MultiDistroTools' (or "
+"mdt). Its use is to create 'APT trees' for several distributions, making it "
+"easy to query the status of packages in other distribution without using "
+"chroots, for instance."
+msgstr ""
+"B<chdist> ist eine Neufassung dessen, was früher als "
+"»MultiDistroTools« (oder mdt) bekannt war. Es wird benutzt, um »APT-"
+"Verzeichnisbäume« für verschiedene Distributionen zu erstellen, die es "
+"erleichtern, den Status von Paketen in anderen Distributionen abzufragen, "
+"ohne beispielsweise Chroots zu verwenden."
+
+#. type: textblock
+#: ../scripts/chdist.pl:39 ../scripts/mass-bug.pl:128
+msgid "Provide a usage message."
+msgstr "stellt einen Aufruftext bereit."
+
+#. type: =item
+#: ../scripts/chdist.pl:41
+msgid "B<-d>, B<--data-dir> I<DIR>"
+msgstr "B<-d>, B<--data-dir> I<VERZ>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:43
+msgid "Choose data directory (default: F<~/.chdist/>)."
+msgstr "wählt das Datenverzeichnis aus (Vorgabe: F<~/.chdist/>)."
+
+#. type: =item
+#: ../scripts/chdist.pl:45
+msgid "B<-a>, B<--arch> I<ARCH>"
+msgstr "B<-a>, B<--arch> I<ARCHITEKTUR>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:47
+msgid "Choose architecture (default: `B<dpkg --print-architecture>`)."
+msgstr "wählt die Architektur aus (Vorgabe: »B<dpkg --print-architecture>«)."
+
+#. type: textblock
+#: ../scripts/chdist.pl:51 ../scripts/deb-reversion.dbk:239
+#: ../scripts/mass-bug.pl:132 ../scripts/uscan.pl:1777
+msgid "Display version information."
+msgstr "zeigt Versionsinformationen."
+
+#. type: =item
+#: ../scripts/chdist.pl:59
+msgid "B<create> I<DIST> [I<URL> I<RELEASE> I<SECTIONS>]"
+msgstr "B<create> I<DISTRIBUTION> [I<URL> I<RELEASE> I<ABSCHNITTE>]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:61
+msgid "Prepare a new tree named I<DIST>"
+msgstr "bereitet einen neuen Verzeichnisbaum mit Namen I<DISTRIBUTION> vor."
+
+#. type: =item
+#: ../scripts/chdist.pl:63
+msgid "B<apt> I<DIST> <B<update>|B<source>|B<show>|B<showsrc>|...>"
+msgstr "B<apt> I<DISTRIBUTION> <B<update>|B<source>|B<show>|B<showsrc>|…>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:65
+msgid "Run B<apt> inside I<DIST>"
+msgstr "führt B<apt> innerhalb I<DISTRIBUTION> aus."
+
+#. type: =item
+#: ../scripts/chdist.pl:67
+msgid "B<apt-get> I<DIST> <B<update>|B<source>|...>"
+msgstr "B<apt-get> I<DISTRIBUTION> <B<update>|B<source>|…>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:69
+msgid "Run B<apt-get> inside I<DIST>"
+msgstr "führt B<apt-get> innerhalb I<DISTRIBUTION> aus."
+
+#. type: =item
+#: ../scripts/chdist.pl:71
+msgid "B<apt-cache> I<DIST> <B<show>|B<showsrc>|...>"
+msgstr "B<apt-cache> I<DISTRIBUTION> <B<show>|B<showsrc>|…>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:73
+msgid "Run B<apt-cache> inside I<DIST>"
+msgstr "führt B<apt-cache> innerhalb I<DISTRIBUTION> aus."
+
+#. type: =item
+#: ../scripts/chdist.pl:75
+msgid "B<apt-file> I<DIST> <B<update>|B<search>|...>"
+msgstr "B<apt-file> I<DISTRIBUTION> <B<update>|B<source>|…>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:77
+msgid "Run B<apt-file> inside I<DIST>"
+msgstr "führt B<apt-file> innerhalb I<DISTRIBUTION> aus."
+
+#. type: =item
+#: ../scripts/chdist.pl:79
+msgid "B<apt-rdepends> I<DIST> [...]"
+msgstr "B<apt-rdepends> I<DISTRIBUTION> […]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:81
+msgid "Run B<apt-rdepends> inside I<DIST>"
+msgstr "führt B<apt-rdepends> innerhalb I<DISTRIBUTION> aus."
+
+#. type: =item
+#: ../scripts/chdist.pl:83
+msgid "B<aptitude> I<DIST> [...]"
+msgstr "B<aptitude> I<DISTRIBUTION> […]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:85
+msgid "Run B<aptitude> inside I<DIST>"
+msgstr "führt B<aptitude> innerhalb I<DISTRIBUTION> aus."
+
+#. type: =item
+#: ../scripts/chdist.pl:87
+msgid "B<src2bin> I<DIST SRCPKG>"
+msgstr "B<src2bin> I<DISTRIBUTION QUELLPAKET>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:89
+msgid "List binary packages for I<SRCPKG> in I<DIST>"
+msgstr "listet Binärpakete für I<QUELLPAKET> in I<DISTRIBUTION> auf."
+
+#. type: =item
+#: ../scripts/chdist.pl:91
+msgid "B<bin2src> I<DIST BINPKG>"
+msgstr "B<bin2src> I<DISTRIBUTION BINÄRPAKET>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:93
+msgid "List source package for I<BINPKG> in I<DIST>"
+msgstr "listet Quellpakete für I<BINÄRPAKET> in I<DISTRIBUTION> auf."
+
+#. type: =item
+#: ../scripts/chdist.pl:95
+msgid "B<compare-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+msgstr ""
+"B<compare-packages> I<DISTRIBUTION1 DISTRIBUTION2> [I<DISTRIBUTION3>, …]"
+
+#. type: =item
+#: ../scripts/chdist.pl:97
+msgid "B<compare-bin-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+msgstr ""
+"B<compare-bin-packages> I<DISTRIBUTION1 DISTRIBUTION2> [I<DISTRIBUTION3>, …]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:99
+msgid "List versions of packages in several I<DIST>ributions"
+msgstr "listet Versionen von Paketen in mehreren I<DISTRIBUTION>en auf."
+
+#. type: =item
+#: ../scripts/chdist.pl:101
+msgid "B<compare-versions> I<DIST1 DIST2>"
+msgstr "B<compare-versions> I<DISTRIBUTION1 DISTRIBUTION2>"
+
+#. type: =item
+#: ../scripts/chdist.pl:103
+msgid "B<compare-bin-versions> I<DIST1 DIST2>"
+msgstr "B<compare-bin-versions> I<DISTRIBUTION1 DISTRIBUTION2>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:105
+msgid ""
+"Same as B<compare-packages>/B<compare-bin-packages>, but also runs B<dpkg --"
+"compare-versions> and display where the package is newer."
+msgstr ""
+"dasselbe wie B<compare-packages>/B<compare-bin-packages>, führt aber "
+"zusätzlich B<dpkg --compare-versions> aus und zeigt an, wo das Paket neuer "
+"ist"
+
+#. type: =item
+#: ../scripts/chdist.pl:108
+msgid "B<compare-src-bin-packages> I<DIST>"
+msgstr "B<compare-src-bin-packages> I<DISTRIBUTION>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:110
+msgid "Compare sources and binaries for I<DIST>"
+msgstr "vergleicht die Quell- und Binärdateien für I<DISTRIBUTION>"
+
+#. type: =item
+#: ../scripts/chdist.pl:112
+msgid "B<compare-src-bin-versions> I<DIST>"
+msgstr "B<compare-src-bin-versions> I<DISTRIBUTION>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:114
+msgid ""
+"Same as B<compare-src-bin-packages>, but also run B<dpkg --compare-versions> "
+"and display where the package is newer"
+msgstr ""
+"dasselbe wie B<compare-src-bin-packages>, führt aber zusätzlich B<dpkg --"
+"compare-versions> aus und zeigt an, wo das Paket neuer ist"
+
+#. type: =item
+#: ../scripts/chdist.pl:117
+msgid "B<grep-dctrl-packages> I<DIST> [...]"
+msgstr "B<grep-dctrl-packages> I<DISTRIBUTION> […]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:119
+msgid "Run B<grep-dctrl> on F<*_Packages> inside I<DIST>"
+msgstr ""
+"führt B<grep-dctrl> für F<*_Packages> innerhalb von I<DISTRIBUTION> aus."
+
+#. type: =item
+#: ../scripts/chdist.pl:121
+msgid "B<grep-dctrl-sources> I<DIST> [...]"
+msgstr "B<grep-dctrl-sources> I<DISTRIBUTION> […]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:123
+msgid "Run B<grep-dctrl> on F<*_Sources> inside I<DIST>"
+msgstr ""
+"führt B<grep-dctrl> für F<*_Sources> innerhalb von I<DISTRIBUTION> aus."
+
+#. type: =item
+#: ../scripts/chdist.pl:125
+msgid "B<list>"
+msgstr "B<list>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:127
+msgid "List available I<DIST>s"
+msgstr "listet verfügbare I<DISTRIBUTION>en auf."
+
+#. type: textblock
+#: ../scripts/chdist.pl:133
+msgid ""
+"This program is copyright 2007 by Lucas Nussbaum and Luk Claes. This program "
+"comes with ABSOLUTELY NO WARRANTY."
+msgstr ""
+"Dieses Programm unterliegt dem Copyright 2007 von Lucas Nussbaum und Luk "
+"Claes. Für dieses Programm besteht KEINERLEI GARANTIE."
+
+#. type: TH
+#: ../scripts/checkbashisms.1:1
+#, no-wrap
+msgid "CHECKBASHISMS"
+msgstr "CHECKBASHISMS"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:4
+msgid "checkbashisms - check for bashisms in /bin/sh scripts"
+msgstr "checkbashisms - prüft auf Bash-spezifisches in /bin/sh-Skripten"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:6
+msgid "B<checkbashisms> I<script> ..."
+msgstr "B<checkbashisms> I<Skript> …"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:8
+msgid "B<checkbashisms --help>|B<--version>"
+msgstr "B<checkbashisms --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:14
+msgid ""
+"B<checkbashisms>, based on one of the checks from the B<lintian> system, "
+"performs basic checks on I</bin/sh> shell scripts for the possible presence "
+"of bashisms. It takes the names of the shell scripts on the command line, "
+"and outputs warnings if possible bashisms are detected."
+msgstr ""
+"B<checkbashisms>, basierend auf einer der Prüfungen des B<lintian>-Systems, "
+"führt grundlegende Prüfungen für I</bin/sh>-Shell-Skripte auf mögliches "
+"Vorhandensein von Bash-Besonderheiten aus. Es nimmt die Namen der Shell-"
+"Skripte auf der Befehlszeile entgegen und gibt Warnungen aus, wenn "
+"potenzielle Bash-Besonderheiten entdeckt werden."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:19
+msgid ""
+"Note that the definition of a bashism in this context roughly equates to \"a "
+"shell feature that is not required to be supported by POSIX\"; this means "
+"that some issues flagged may be permitted under optional sections of POSIX, "
+"such as XSI or User Portability."
+msgstr ""
+"Beachten Sie, dass die Definition einer Bash-Besonderheit in diesem Kontext "
+"grob »einer Shell-Funktionalität, die nicht notwendigerweise durch POSIX "
+"unterstützt wird« entspricht; dies bedeutet, dass einige gekennzeichnete "
+"Probleme unter optionalen Abschnitten von POSIX erlaubt sein könnten, wie "
+"XSI oder Benutzerportierbarkeit."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:23
+msgid ""
+"In cases where POSIX and Debian Policy disagree, B<checkbashisms> by default "
+"allows extensions permitted by Policy but may also provide options for "
+"stricter checking."
+msgstr ""
+"In Fällen, in denen sich die POSIX- und Debian-Richtlinien widersprechen, "
+"erlaubt B<checkbashisms> standardmäßig Erweiterungen, die durch die "
+"Richtlinien erlaubt sind, stellt aber außerdem Optionen für strengere "
+"Prüfungen bereit."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:24 ../scripts/debchange.1:399
+#: ../scripts/debdiff.1:176 ../scripts/debrelease.1:99 ../scripts/debsign.1:99
+#: ../scripts/dep3changelog.1:16 ../scripts/dscverify.1:37
+#: ../scripts/pts-subscribe.1:28 ../scripts/rc-alert.1:21
+#: ../scripts/uupdate.1:101 ../scripts/whodepends.1:11
+#: ../scripts/who-uploads.1:45 ../scripts/who-permits-upload.pl:71
+#: ../scripts/wnpp-alert.1:23 ../scripts/wnpp-check.1:20
+#, no-wrap
+msgid "B<--help>, B<-h>"
+msgstr "B<--help>, B<-h>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:27 ../scripts/debdiff.1:179
+#: ../scripts/manpage-alert.1:16 ../scripts/mk-build-deps.pl:113
+#: ../scripts/rc-alert.1:24 ../scripts/wnpp-alert.1:26
+#: ../scripts/wnpp-check.1:23
+msgid "Show a summary of options."
+msgstr "zeigt eine Zusammenfassung der Optionen."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:27
+#, no-wrap
+msgid "B<--newline>, B<-n>"
+msgstr "B<--newline>, B<-n>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:30
+msgid ""
+"Check for \"B<echo -n>\" usage (non POSIX but required by Debian Policy "
+"10.4.)"
+msgstr ""
+"prüft auf den Gebrauch von »B<echo -n>« (nicht POSIX, jedoch von den Debian-"
+"Richtlinien 10.4 gefordert)."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:30
+#, no-wrap
+msgid "B<--posix>, B<-p>"
+msgstr "B<--posix>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:34
+msgid ""
+"Check for issues which are non POSIX but required to be supported by Debian "
+"Policy 10.4 (implies B<-n>)."
+msgstr ""
+"prüft auf Probleme mit Konstrukten, die nicht von POSIX, aber von den Debian-"
+"Richtlinien 10.4 gefordert werden (impliziert B<-n>)."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:34
+#, no-wrap
+msgid "B<--force>, B<-f>"
+msgstr "B<--force>, B<-f>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:39
+msgid ""
+"Force each script to be checked, even if it would normally not be (for "
+"instance, it has a bash or non POSIX shell shebang or appears to be a shell "
+"wrapper)."
+msgstr ""
+"erzwingt die Prüfung jedes Skripts, sogar wenn es normalerweise nicht "
+"geprüft würde (da es beispielsweise einen Bash- oder nicht POSIX-Shell-"
+"Shebang hat oder ein Shell-Wrapper zu sein scheint)."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:39
+#, no-wrap
+msgid "B<--lint>, B<-l>"
+msgstr "B<--lint>, B<-l>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:43
+msgid ""
+"Act like a linter, for integration into a text editor. Possible bashisms "
+"will be printed in stdout, like so:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:45
+msgid "I<{filename}:{lineno}:1: warning: possible bashism; {explanation}>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:45
+#, no-wrap
+msgid "B<--extra>, B<-x>"
+msgstr "B<--extra>, B<-x>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:52
+msgid ""
+"Highlight lines which, whilst they do not contain bashisms, may be useful in "
+"determining whether a particular issue is a false positive which may be "
+"ignored. For example, the use of \"B<$BASH_ENV>\" may be preceded by "
+"checking whether \"B<$BASH>\" is set."
+msgstr ""
+"Hebt Zeilen hervor, die, obwohl sie keine Bash-Besonderheiten enthalten, bei "
+"der Festlegung nützlich sein könnten, ob ein bestimmtes Problem falsch "
+"positiv ist und ignoriert werden kann. Zum Beispiel könnte der Verwendung "
+"von »B<$BASH_ENV>« die Prüfung vorangestellt werden, ob »B<$BASH>« gesetzt "
+"ist."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:52
+#, no-wrap
+msgid "B<--early-fail>, B<-e>"
+msgstr "B<--early-fail>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:55
+msgid "Exit right after a first error is seen."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:55 ../scripts/debdiff.1:179
+#: ../scripts/rc-alert.1:24 ../scripts/whodepends.1:14
+#: ../scripts/wnpp-alert.1:26 ../scripts/wnpp-check.1:23
+#, no-wrap
+msgid "B<--version>, B<-v>"
+msgstr "B<--version>, B<-v>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:58 ../scripts/debdiff.1:182
+#: ../scripts/getbuildlog.1:31 ../scripts/grep-excuses.1:29
+#: ../scripts/manpage-alert.1:19 ../scripts/mk-build-deps.pl:117
+#: ../scripts/rc-alert.1:27 ../scripts/whodepends.1:17
+#: ../scripts/wnpp-alert.1:29 ../scripts/wnpp-check.1:26
+msgid "Show version and copyright information."
+msgstr "zeigt die Version und Copyright-Informationen."
+
+#. type: SH
+#: ../scripts/checkbashisms.1:58 ../scripts/debdiff.1:247
+#, no-wrap
+msgid "EXIT VALUES"
+msgstr "RÜCKGABEWERTE"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:62
+msgid ""
+"The exit value will be 0 if no possible bashisms or other problems were "
+"detected. Otherwise it will be the sum of the following error values:"
+msgstr ""
+"Der Rückgabewert wird 0 sein, falls keine möglichen Bash-Besonderheiten oder "
+"anderen Probleme entdeckt wurden. Andernfalls wird er die Summe der "
+"folgenden Fehlerwerte sein:"
+
+#. type: TP
+#: ../scripts/checkbashisms.1:62 ../scripts/dscextract.1:24
+#: ../scripts/wnpp-check.1:32
+#, no-wrap
+msgid "1"
+msgstr "1"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:65
+msgid "A possible bashism was detected."
+msgstr "Eine potenzielle Bash-Besonderheit wurde entdeckt."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:65 ../scripts/dscextract.1:27
+#, no-wrap
+msgid "2"
+msgstr "2"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:69
+msgid ""
+"A file was skipped for some reason, for example, because it was unreadable "
+"or not found. The warning message will give details."
+msgstr ""
+"Aus irgendeinem Grund wurde eine Datei übersprungen, sie war beispielsweise "
+"nicht lesbar oder wurde nicht gefunden. Die Warnmeldung wird Einzelheiten "
+"preisgeben."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:69
+#, no-wrap
+msgid "4"
+msgstr "4"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:72
+msgid "No bashisms were detected in a bash script."
+msgstr "Es wurden keine Bash-Besonderheiten in einem Bash-Script entdeckt."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:74
+msgid "B<lintian>(1)"
+msgstr "B<lintian>(1)"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:77
+msgid ""
+"B<checkbashisms> was originally written as a shell script by Yann Dirson "
+"E<lt>I<dirson@debian.org>E<gt> and rewritten in Perl with many more features "
+"by Julian Gilbey E<lt>I<jdg@debian.org>E<gt>."
+msgstr ""
+"B<checkbashisms> wurde ursprünglich als Shell-Skript von Yann Dirson "
+"E<lt>I<dirson@debian.org>E<gt> geschrieben. Eine Neuauflage in Perl mit "
+"wesentlich mehr Funktionalitäten wurde von Julian Gilbey E<lt>I<jdg@debian."
+"org>E<gt> verfasst."
+
+#. type: TH
+#: ../scripts/cowpoke.1:5
+#, no-wrap
+msgid "COWPOKE"
+msgstr "COWPOKE"
+
+#. type: TH
+#: ../scripts/cowpoke.1:5
+#, no-wrap
+msgid "April 28, 2008"
+msgstr "28. April 2008"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:20
+msgid "cowpoke - Build a Debian source package in a remote cowbuilder instance"
+msgstr ""
+"cowpoke - baut ein Debian-Quellpaket in einer fernen Cowbuilder-Instanz"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:23
+msgid "B<cowpoke> [I<options>]I< packagename.dsc>"
+msgstr "B<cowpoke> [I<Optionen>] I<Paketname.dsc>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:27
+msgid ""
+"Uploads a Debian source package to a B<cowbuilder> host and builds it, "
+"optionally also signing and uploading the result to an incoming queue."
+msgstr ""
+"lädt ein Debian-Quellpaket auf einen B<cowbuilder>-Rechner hoch und baut es, "
+"wahlweise signiert es außerdem das Ergebnis und lädt es in eine »incoming«-"
+"Warteschlange hoch."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:31 ../scripts/debsnap.1:28
+msgid "The following options are available:"
+msgstr "Die folgenden Optionen sind verfügbar:"
+
+#. type: TP
+#: ../scripts/cowpoke.1:32
+#, no-wrap
+msgid "B<--arch=>I<architecture>"
+msgstr "B<--arch=>I<Architektur>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:38
+msgid ""
+"Specify the Debian architecture(s) to build for. A space separated list of "
+"architectures may be used to build for all of them in a single pass. Valid "
+"arch names are those returned by B<dpkg-architecture>(1) for "
+"B<DEB_BUILD_ARCH>."
+msgstr ""
+"gibt die Debian-Architektur(en) an, für die gebaut wird. Es kann eine durch "
+"Leerzeichen getrennte Liste von Architekturen benutzt werden, um für alle in "
+"einem einzigen Durchgang zu bauen. Gültige Architekturnamen sind jene, die "
+"durch B<dpkg-architecture>(1) für B<DEB_BUILD_ARCH> zurückgegeben werden."
+
+#. type: TP
+#: ../scripts/cowpoke.1:39
+#, no-wrap
+msgid "B<--dist=>I<distribution>"
+msgstr "B<--dist=>I<Distribution>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:47
+msgid ""
+"Specify the Debian distribution(s) to build for. A space separated list of "
+"distributions may be used to build for all of them in a single pass. Either "
+"codenames (such as B<sid>, or B<squeeze>) or distribution names (such as "
+"B<unstable>, or B<experimental>) may be used, but you should usually stick "
+"to using one or the other consistently as this name may be used in file "
+"paths and to locate old packages for comparison reporting."
+msgstr ""
+"gibt die Debian-Distribution(en) an, für die gebaut wird. Es kann eine durch "
+"Leerzeichen getrennte Liste von Distributionen benutzt werden, um für alle "
+"in einem einzigen Durchgang zu bauen. Es können entweder Codenamen (wie "
+"B<sid> oder B<squeeze>) oder Distributionsnamen (wie B<unstable> oder "
+"B<experimental>) verwendet werden, aber Sie sollten üblicherweise "
+"durchgehend dabei bleiben, den einen oder anderen zu benutzen, da dieser "
+"Name in Dateipfaden benutzt wird und um alte Pakete für Vergleichsberichte "
+"zu orten."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:55
+msgid ""
+"It is now also possible to use locally defined names with this option, when "
+"used in conjunction with the B<BASE_DIST> option in a configuration file. "
+"This permits the maintenance and use of specially configured build chroots, "
+"which can source package dependencies from the backports archives or a local "
+"repository, or have other unusual configuration options set, without "
+"polluting the chroots you use for clean package builds intended for upload "
+"to the main repositories. See the description of B<BASE_DIST> below."
+msgstr ""
+"Es ist nun auch möglich, mit dieser Option lokal definierte Namen zu "
+"benutzen, wenn sie zusammen mit der Option B<BASE_DIST> in einer "
+"Konfigurationsdatei verwendet werden. Dies erlaubt die Verwaltung und "
+"Benutzung eigens konfigurierter Bau-Chroots, die Paketabhängigkeiten aus den "
+"Backports-Archiven oder einem lokalen Depot beziehen können. Außerdem sind "
+"andere ungewöhnliche Optionszusammenstellungen möglich, ohne die Chroots zu "
+"verunreinigen, die zum sauberen Bauen und Hochladen in die Hauptdepots "
+"gedacht sind. Lesen Sie die die Beschreibung von B<BASE_DIST> weiter unten."
+
+#. type: TP
+#: ../scripts/cowpoke.1:56
+#, no-wrap
+msgid "B<--buildd=>I<host>"
+msgstr "B<--buildd=>I<Rechner>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:59
+msgid "Specify the remote host to build on."
+msgstr "gibt den fernen Rechner an, auf dem gebaut werden soll."
+
+#. type: TP
+#: ../scripts/cowpoke.1:60
+#, no-wrap
+msgid "B<--buildd-user=>I<name>"
+msgstr "B<--buildd-user=>I<Name>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:63
+msgid "Specify the remote user to build as."
+msgstr "gibt den fernen Benutzernamen an, unter dem gebaut wird."
+
+#. type: TP
+#: ../scripts/cowpoke.1:64 ../scripts/debchange.1:199
+#, no-wrap
+msgid "B<--create>"
+msgstr "B<--create>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:69
+msgid ""
+"Create the remote B<cowbuilder> root if it does not already exist. If this "
+"option is not passed it is an error for the specified B<--dist> or B<--arch> "
+"to not have an existing B<cowbuilder> root in the expected location."
+msgstr ""
+"erstellt das ferne B<cowbuilder>-Wurzelverzeichnis, falls es noch nicht "
+"existiert. Falls diese Option nicht übergeben wird, ist es für die "
+"angegebene B<--dist> oder B<--arch> ein Fehler, über kein existierendes "
+"B<cowbuilder>-Wurzelverzeichnis an der erwarteten Stelle zu verfügen."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:74
+msgid ""
+"The B<--buildd-user> must have permission to create the B<RESULT_DIR> on the "
+"build host, or an admin with the necessary permission must first create it "
+"and give that user (or some group they are in) write access to it, for this "
+"option to succeed."
+msgstr ""
+"Der B<--buildd-user> muss das Recht haben, auf dem Baurechner das "
+"B<RESULT_DIR> zu erstellen oder ein Administrator mit den nötigen Rechten "
+"muss es zuerst erstellen und diesem Benutzer (oder einer Gruppe, der er "
+"angehört) Schreibzugriff darauf geben, damit diese Option erfolgreich ist."
+
+#. type: TP
+#: ../scripts/cowpoke.1:75
+#, no-wrap
+msgid "B<--return=>[I<path>]"
+msgstr "B<--return=>[I<Pfad>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:79
+msgid ""
+"Copy results of the build to I<path>. If I<path> is not specified, then "
+"return them to the current directory. The given I<path> must exist, it will "
+"not be created."
+msgstr ""
+"kopiert Ergebnisse des Bauens nach I<Pfad>. Falls I<Pfad> nicht angegeben "
+"wurde, dann werden sie an das aktuelle Verzeichnis zurückgegeben. Der "
+"angegebene Pfad muss existieren, er wird nicht erstellt."
+
+#. type: TP
+#: ../scripts/cowpoke.1:80
+#, no-wrap
+msgid "B<--no-return>"
+msgstr "B<--no-return>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:84
+msgid ""
+"Do not copy results of the build to B<RETURN_DIR> (overriding a path set for "
+"it in the configuration files)."
+msgstr ""
+"kopiert Ergebnisse des Bauens nicht nach B<RETURN_DIR> (setzt eine "
+"Pfadeinstellung hierfür in den Konfigurationsdateien außer Kraft)."
+
+#. type: TP
+#: ../scripts/cowpoke.1:85
+#, no-wrap
+msgid "B<--dpkg-opts=>I<'opt1 opt2 ...'>"
+msgstr "B<--dpkg-opts=>I<'Option1 Option2 …'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:90
+msgid ""
+"Specify additional options to be passed to B<dpkg-buildpackage>(1). "
+"Multiple options are delimited with spaces. This will override any options "
+"specified in B<DEBBUILDOPTS> in the build host's I<pbuilderrc>."
+msgstr ""
+"gibt zusätzliche Optionen an, die an B<dpkg-buildpackage>(1) übergeben "
+"werden. Mehrere Optionen werden durch Leerzeichen getrennt. Dies wird alle "
+"in B<DEBBUILDOPTS> angegebenen Optionen in der I<pbuilderrc> des Baurechners "
+"außer Kraft setzen."
+
+#. type: TP
+#: ../scripts/cowpoke.1:91
+#, no-wrap
+msgid "B<--create-opts=>I<'cowbuilder option'>"
+msgstr "B<--create-opts=>I<'Cowbuilder-Option'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:97
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> when a "
+"chroot is first created (using the B<--create> option above). If multiple "
+"arguments need to be passed, this option should be specified separately for "
+"each of them."
+msgstr ""
+"gibt zusätzliche Argumente an, die unverändert an B<Cowbuilder> "
+"weitergereicht werden, wenn eine Chroot zum ersten Mal (mittels der obigen "
+"Option B<--create>) erstellt wird. Falls mehrere Optionen weitergereicht "
+"werden müssen, sollte diese Option separat für jede einzelne angegeben "
+"werden."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:99
+msgid ""
+"E.g., B<--create-opts \"--othermirror\" --create-opts \"deb http:// ...\">"
+msgstr "Z.B. B<--create-opts \"--othermirror\" --create-opts \"deb http://…\">"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:102
+msgid ""
+"This option will override any B<CREATE_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+"Diese Option wird jede für eine Chroot in den Cowpoke-Konfigurationsdateien "
+"angegebene B<CREATE_OPTS> außer Kraft setzen."
+
+#. type: TP
+#: ../scripts/cowpoke.1:103
+#, no-wrap
+msgid "B<--update-opts=>I<'cowbuilder option'>"
+msgstr "B<--update-opts=>I<'Cowbuilder-Option'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:108
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> if the "
+"base of the chroot is updated. If multiple arguments need to be passed, "
+"this option should be specified separately for each of them."
+msgstr ""
+"gibt zusätzliche Argumente an, die unverändert an B<Cowbuilder> "
+"weitergereicht werden, wenn die Chroot aktualisiert wird. Falls mehrere "
+"Optionen weitergereicht werden müssen, sollte diese Option separat für jede "
+"einzelne angegeben werden."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:111
+msgid ""
+"This option will override any B<UPDATE_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+"Diese Option wird jede für eine Chroot in den Cowpoke-Konfigurationsdateien "
+"angegebene B<UPDATE_OPTS> außer Kraft setzen."
+
+#. type: TP
+#: ../scripts/cowpoke.1:112
+#, no-wrap
+msgid "B<--build-opts=>I<'cowbuilder option'>"
+msgstr "B<--build-opts=>I<'Cowbuilder-Option'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:117
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> when a "
+"package build is performed. If multiple arguments need to be passed, this "
+"option should be specified separately for each of them."
+msgstr ""
+"gibt zusätzliche Argumente an, die unverändert an B<Cowbuilder> "
+"weitergereicht werden, wenn ein Paket gebaut wird. Falls mehrere Optionen "
+"weitergereicht werden müssen, sollte diese Option separat für jede einzelne "
+"angegeben werden."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:120
+msgid ""
+"This option will override any B<BUILD_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+"Diese Option wird jede für eine Chroot in den Cowpoke-Konfigurationsdateien "
+"angegebene B<BUILD_OPTS> außer Kraft setzen."
+
+#. type: TP
+#: ../scripts/cowpoke.1:121
+#, no-wrap
+msgid "B<--sign=>I<keyid>"
+msgstr "B<--sign=>I<Schlüsselkennung>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:125
+msgid ""
+"Specify the key to sign packages with. This will override any B<SIGN_KEYID> "
+"specified for a chroot in the cowpoke configuration files."
+msgstr ""
+"gibt den Schlüssel an, mit dem Pakete signiert werden. Dies wird jedes "
+"B<SIGN_KEYID>, das für eine Chroot in den Cowpoke-Konfigurationsdateien "
+"angegeben wurde, außer Kraft setzen."
+
+#. type: TP
+#: ../scripts/cowpoke.1:126
+#, no-wrap
+msgid "B<--upload=>I<queue>"
+msgstr "B<--upload=>I<Warteschlange>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:130
+msgid ""
+"Specify the dput queue to upload signed packages to. This will override any "
+"B<UPLOAD_QUEUE> specified for a chroot in the cowpoke configuration files."
+msgstr ""
+"gibt die Dput-Warteschlange an, in die signierte Pakete hochgeladen werden. "
+"Dies wird jede B<UPLOAD_QUEUE>, die für eine Chroot in den Cowpoke-"
+"Konfigurationsdateien angegeben wurde, außer Kraft setzen."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:134
+msgid ""
+"Display a brief summary of the available options and current configuration."
+msgstr ""
+"zeigt eine kurze Zusammenfassung der verfügbaren Optionen und der aktuellen "
+"Konfiguration."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:138
+msgid "Display the current version information."
+msgstr "zeigt die aktuelle Versionsinformation."
+
+#. type: SH
+#: ../scripts/cowpoke.1:140 ../scripts/debsnap.1:82
+#, no-wrap
+msgid "CONFIGURATION OPTIONS"
+msgstr "KONFIGURATIONSOPTIONEN"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:146
+msgid ""
+"When B<cowpoke> is run the following configuration options are read from "
+"global, per-user, and per-project configuration files if present. File "
+"paths may be absolute or relative, the latter being relative to the "
+"B<BUILDD_USER>'s home directory. Since the paths are typically quoted when "
+"used, tilde expansion will B<not> be performed on them."
+msgstr ""
+"Wenn B<cowpoke> ausgeführt wird, werden die folgenden Optionen von globalen, "
+"benutzer- und objektbezogenen Konfigurationsdateien gelesen, falls "
+"vorhanden. Dateipfade können absolut oder relativ sein, letztere sind zum "
+"B<BUILDD_USER>-Home-Verzeichnis relativ. Da die Pfade bei der Benutzung "
+"typischerweise in Anführungszeichen stehen, wird darauf keine Tilde-"
+"Expandierung durchgeführt."
+
+#. type: SS
+#: ../scripts/cowpoke.1:147
+#, no-wrap
+msgid "Global defaults"
+msgstr "Globale Vorgaben"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:149
+msgid ""
+"These apply to every I<arch> and I<dist> in a single cowpoke invocation."
+msgstr ""
+"Dies gilt für jede I<Architektur> und I<Distribution> in einem einzelnen "
+"Cowpoke-Aufruf."
+
+#. type: TP
+#: ../scripts/cowpoke.1:150
+#, no-wrap
+msgid "B<BUILDD_HOST>"
+msgstr "B<BUILDD_HOST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:154
+msgid ""
+"The network address or fqdn of the build machine where B<cowbuilder> is "
+"configured. This may be overridden by the B<--buildd> command line option."
+msgstr ""
+"die Netzwerkadresse oder FQDN der Baumaschine auf der B<cowbuilder> "
+"konfiguriert ist. Dies könnte durch die Befehlszeilenoption B<--buildd> "
+"außer Kraft gesetzt werden."
+
+#. type: TP
+#: ../scripts/cowpoke.1:154
+#, no-wrap
+msgid "B<BUILDD_USER>"
+msgstr "B<BUILDD_USER>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:160
+msgid ""
+"The unprivileged user name for operations on the build machine. This "
+"defaults to the local name of the user executing B<cowpoke> (or to a "
+"username that is specified in your SSH configuration for B<BUILDD_HOST>), "
+"and may be overridden by the B<--buildd-user> command line option."
+msgstr ""
+"der nicht privilegierte Benutzername für Operationen auf der Baumaschine. "
+"Dies ist standardmäßig der lokale Name des Benutzers, der B<cowpoke> "
+"ausführt (oder ein Benutzername, der in der SSH-Konfiguration für "
+"B<BUILDD_HOST> angegeben wurd), und kann durch die Befehlszeilenoption B<--"
+"buildd-user> außer Kraft gesetzt werden."
+
+#. type: TP
+#: ../scripts/cowpoke.1:160
+#, no-wrap
+msgid "B<BUILDD_ARCH>"
+msgstr "B<BUILDD_ARCH>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:167
+msgid ""
+"The Debian architecture(s) to build for. This must match the "
+"B<DEB_BUILD_ARCH> of the build chroot being used. It defaults to the local "
+"machine architecture where B<cowpoke> is executed, and may be overridden by "
+"the B<--arch> command line option. A (quoted) space separated list of "
+"architectures may be used here to build for all of them in a single pass."
+msgstr ""
+"die Debian-Architektur(en), für die gebaut wird. Dies muss zu "
+"B<DEB_BUILD_ARCH> der benutzten Bau-Chroot passen. Standardmäßig ist es die "
+"Architektur des lokalen Rechners, auf der B<cowpoke> ausgeführt wird. Sie "
+"könnte durch die Befehlszeilenoption B<--arch> außer Kraft gesetzt werden. "
+"Hier könnte eine durch Kommas getrennte Liste (in Anführungszeichen) "
+"verwendet werden, um um für alle hieraus in einem einzigen Durchgang zu "
+"bauen."
+
+#. type: TP
+#: ../scripts/cowpoke.1:167
+#, no-wrap
+msgid "B<BUILDD_DIST>"
+msgstr "B<BUILDD_DIST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:172
+msgid ""
+"The Debian distribution(s) to build for. A (quoted) space separated list of "
+"distributions may be used to build for all of them in a single pass. This "
+"may be overridden by the B<--dist> command line option."
+msgstr ""
+"die Debian-Distribution(en), für die gebaut wird. Eine durch Leerzeichen "
+"getrennte Liste von Distributionen (in Anführungszeichen) kann benutzt "
+"werden, um alle in einem einzigen Durchgang zu bauen. Dies könnte durch die "
+"Befehlszeilenoption B<--dist> außer Kraft gesetzt werden."
+
+#. type: TP
+#: ../scripts/cowpoke.1:173
+#, no-wrap
+msgid "B<INCOMING_DIR>"
+msgstr "B<INCOMING_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:177
+msgid ""
+"The directory path on the build machine where the source package will "
+"initially be placed. This must be writable by the B<BUILDD_USER>."
+msgstr ""
+"der Installationspfad auf der Baumaschine, in der das Quellpaket anfangs "
+"platziert wird. Dies muss durch den B<BUILDD_USER> schreibbar sein."
+
+#. type: TP
+#: ../scripts/cowpoke.1:177
+#, no-wrap
+msgid "B<PBUILDER_BASE>"
+msgstr "B<PBUILDER_BASE>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:182
+msgid ""
+"The filesystem root for all pbuilder CoW and result files. I<Arch> and "
+"I<dist> specific subdirectories will normally be created under this. The "
+"apt cache and temporary build directory will also be located under this path."
+msgstr ""
+"die Wurzel des Dateisystems für alle Pbuilder-COW- und Ergebnisdateien. "
+"I<Architektur>- und I<distribution>sspezifische Unterverzeichnisse werden "
+"normalerweise darunter erstellt. Der APT-Zwischenspeicher und die temporären "
+"Bauverzeichnisse werden ebenso unterhalb dieses Pfads liegen."
+
+#. type: TP
+#: ../scripts/cowpoke.1:183
+#, no-wrap
+msgid "B<SIGN_KEYID>"
+msgstr "B<SIGN_KEYID>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:194
+msgid ""
+"If this option is set, it is expected to contain the gpg key ID to pass to "
+"B<debsign>(1) if the packages are to be remotely signed. You will be "
+"prompted to confirm whether you wish to sign the packages after all builds "
+"are complete. If this option is unset or an empty string, no attempt to "
+"sign packages will be made. It may be overridden on an I<arch> and I<dist> "
+"specific basis using the I<arch>B<_>I<dist>B<_SIGN_KEYID> option described "
+"below, or per-invocation with the B<--sign> command line option."
+msgstr ""
+"Falls diese Option gesetzt ist, wird erwartet, dass sie die GPG-"
+"Schlüsselkennung zur Übergabe an B<debsign>(1) enthält, falls die Pakete aus "
+"der Ferne signiert werden sollen. Sie werden um Bestätigung gebeten, ob Sie "
+"die Pakete signieren möchten, nachdem das Bauen aller Pakete abgeschlossen "
+"ist. Falls diese Option nicht gesetzt oder eine leere Zeichenkette ist, wird "
+"kein Versuch unternommen, Pakete zu signieren. Sie kann auf einer "
+"I<Architektur>- oder I<Distribution>sspezifischen Basis mittels der weiter "
+"unten beschriebenen Option I<Architektur>B<_>I<Distribution>B<_SIGN_KEYID> "
+"oder jeweils beim Aufruf mit der Befehlszeilenoption B<--sign> außer Kraft "
+"gesetzt werden."
+
+#. type: TP
+#: ../scripts/cowpoke.1:195
+#, no-wrap
+msgid "B<UPLOAD_QUEUE>"
+msgstr "B<UPLOAD_QUEUE>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:206
+msgid ""
+"If this option is set, it is expected to contain a 'host' specification for "
+"B<dput>(1) which will be used to upload them after they are signed. You "
+"will be prompted to confirm whether you wish to upload the packages after "
+"they are signed. If this option is unset or an empty string, no attempt to "
+"upload packages will be made. If B<SIGN_KEYID> is not set, this option will "
+"be ignored entirely. It may be overridden on an I<arch> and I<dist> "
+"specific basis using the I<arch>B<_>I<dist>B<_UPLOAD_QUEUE> option described "
+"below, or per-invocation with the B<--upload> command line option."
+msgstr ""
+"Falls diese Option gesetzt ist, wird erwartet, dass sie eine »host«-Angabe "
+"für B<dput>(1) enthält, die verwendet wird, um sie nach dem Signieren "
+"hochzuladen. Sie werden um Bestätigung gebeten, ob Sie die Pakete nach dem "
+"Signieren hochladen möchten. Falls diese Option nicht gesetzt oder eine "
+"leere Zeichenkette ist, wird kein Versuch unternommen, diese Pakete "
+"hochzuladen. Falls B<SIGN_KEYID> nicht gesetzt ist, wird diese Option ganz "
+"ignoriert. Sie kann auf einer I<architektur>- oder "
+"I<distribution>sspezifischen Basis mittels der weiter unten beschriebenen "
+"Option I<Architektur>B<_>I<Distribution>B<_UPLOAD_QUEUE> oder jeweils beim "
+"Aufruf mit der Befehlszeilenoption B<--upload> außer Kraft gesetzt werden."
+
+#. type: TP
+#: ../scripts/cowpoke.1:208
+#, no-wrap
+msgid "B<BUILDD_ROOTCMD>"
+msgstr "B<BUILDD_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:216
+msgid ""
+"The command to use to gain root privileges on the remote build machine. If "
+"unset the default is B<sudo>(8). This is only required to invoke "
+"B<cowbuilder> and allow it to enter its chroot, so you may restrict this "
+"user to only being able to run that command with escalated privileges. "
+"Something like this in sudoers will enable invoking B<cowbuilder> without an "
+"additional password entry required:"
+msgstr ""
+"der Befehl, der zum Erlangen von Root-Rechten auf der fernen Baumaschine "
+"benutzt wird. Falls nicht gesetzt, ist die Vorgabe B<sudo>(8). Dies ist nur "
+"nötig, um B<cowbuilder> aufzurufen und ihm zu erlauben, in seine Chroot zu "
+"gelangen, daher könnten Sie diesen Nutzer darauf beschränken, diesen Befehl "
+"mit ausgeweiteten Rechten auszuführen. Ein Eintrag wie der folgende in "
+"»sudoers« wird es ermöglichen, B<cowbuilder> ohne einen zusätzlich nötigen "
+"Passworteintrag aufzurufen:"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:220
+msgid "youruser ALL = NOPASSWD: /usr/sbin/cowbuilder"
+msgstr "Ihrbenutzer ALL = NOPASSWD: /usr/sbin/cowbuilder"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:227
+msgid ""
+"Alternatively you could use SSH with a forwarded key, or whatever other "
+"mechanism suits your local access policy. Using B<su -c> isn't really "
+"suitable here due to its quoting requirements being somewhat different to "
+"the rest."
+msgstr ""
+"Alternativ könnten Sie SSH mit einem weitergeleiteten Schlüssel oder "
+"irgendeinem anderen Mechanismus, der Ihrer lokalen Zugriffsrichtlinie "
+"entspricht, verwenden. Die Benutzung von B<su -c> ist hier nicht wirklich "
+"passend, da seine Maskierungsanforderungen sich etwas vom Rest unterscheiden."
+
+#. type: TP
+#: ../scripts/cowpoke.1:228
+#, no-wrap
+msgid "B<DEBOOTSTRAP>"
+msgstr "B<DEBOOTSTRAP>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:232
+msgid ""
+"The utility to use when creating a new build root. Alternatives are "
+"B<debootstrap> or B<cdebootstrap>."
+msgstr ""
+"das Hilfswerkzeug, das beim Erstellen einer neuen Chroot benutzt wird. "
+"Alternativen sind B<debootstrap> oder B<cdebootstrap>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:233
+#, no-wrap
+msgid "B<RETURN_DIR>"
+msgstr "B<RETURN_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:239
+msgid ""
+"If set, package files resulting from the build will be copied to the path "
+"(local or remote) that this is set to, after the build completes. The path "
+"must exist, it will not be created. This option is unset by default and can "
+"be overridden with B<--return> or B<--no-return>."
+msgstr ""
+"Falls gesetzt, werden Paketdateien, die Ergebnis des Bauens sind, in den "
+"Pfad (lokal oder in der Ferne) kopiert, auf den dies gesetzt ist. Der Pfad "
+"muss existieren, er wird nicht angelegt. Diese Option ist standardmäßig "
+"nicht gesetzt und kann mit B<--return> oder B<--no-return> überschrieben "
+"werden."
+
+#. type: SS
+#: ../scripts/cowpoke.1:241
+#, no-wrap
+msgid "Arch and dist specific options"
+msgstr "Architekur- und distributionsspezifische Optionen"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:244
+msgid ""
+"These are variables of the form: $arch_$distB<_VAR> which apply only for a "
+"particular target arch/dist build."
+msgstr ""
+"Dies sind Variablen der Form $arch_$distB<_VAR>, die nur für ein bestimmtes "
+"Architektur-/Distributions-Bauziel gelten."
+
+#. type: TP
+#: ../scripts/cowpoke.1:245
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_RESULT_DIR>"
+msgstr "I<Architektur>B<_>I<Distribution>B<_RESULT_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:256
+msgid ""
+"The directory path on the build machine where the resulting packages (source "
+"and binary) will be found, and where older versions of the package that were "
+"built previously may be found. If any such older packages exist, B<debdiff> "
+"will be used to compare the new package with the previous version after the "
+"build is complete, and the result will be included in the build log. Files "
+"in it must be readable by the B<BUILDD_USER> for sanity checking with "
+"B<lintian>(1) and B<debdiff>(1), and for upload with B<dput>(1). If this "
+"option is not specified for some arch and dist combination then it will "
+"default to I<$PBUILDER_BASE/$arch/$dist/result>"
+msgstr ""
+"Der Verzeichnispfad auf der Baumaschine, in dem die resultierenden (Quell- "
+"und Binär-)Pakete abgelegt werden und wo ältere Versionen der Pakete, die "
+"vorher gebaut wurden, gefunden werden können. Falls irgendwelche derartigen "
+"älteren Pakete existieren, wird B<debdiff> benutzt, um das neue Paket mit "
+"der vorhergehenden Version zu vergleichen, nachdem das Bauen abgeschlossen "
+"ist. Das Ergebnis wird in das Bauprotokoll eingefügt. Dateien darin müssen "
+"für den B<BUILDD_USER> für Plausibilitätsprüfungen mit B<lintian>(1) und "
+"B<debdiff>(1) und das Hochladen mit B<dput>(1) lesbar sein. Falls diese "
+"Option für irgendwelche Architektur- und Distributionskombinationen nicht "
+"angegeben ist, dann wird I<$PBUILDER_BASE/$arch/$dist/result> vorgegeben."
+
+#. type: TP
+#: ../scripts/cowpoke.1:257
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BASE_PATH>"
+msgstr "I<Architektur>B<_>I<Distribution>B<_BASE_PATH>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:263
+msgid ""
+"The directory where the CoW master files are to be found (or created if the "
+"B<--create> command line option was passed). If this option is not "
+"specified for some arch or dist then it will default to I<$PBUILDER_BASE/"
+"$arch/$dist/base.cow>"
+msgstr ""
+"das Verzeichnis, in dem die CoW-Master-Dateien vorliegen werden (oder "
+"erzeugt werden, falls die Befehlszeilenoption B<--create> übergeben wurde). "
+"Falls diese Option für irgendwelche Architekturen und Distributionen nicht "
+"angegeben wurde, dann wird I<$PBUILDER_BASE/$arch/$dist/base.cow> vorgegeben."
+
+#. type: TP
+#: ../scripts/cowpoke.1:264
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BASE_DIST>"
+msgstr "I<Architektur>B<_>I<Distribution>B<_BASE_DIST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:274
+msgid ""
+"The code name to pass as the B<--distribution> option for cowbuilder instead "
+"of I<dist>. This is necessary when I<dist> is a locally significant name "
+"assigned to some specially configured build chroot, such as "
+"'wheezy_backports', and not the formal suite name of a distro release known "
+"to debootstrap. This option cannot be overridden on the command line, since "
+"it would rarely, if ever, make any sense to change it for individual "
+"invocations of B<cowpoke>. If this option is not specified for an arch and "
+"dist combination then it will default to I<dist>."
+msgstr ""
+"der Codename, der anstelle von I<Distribution> als Option B<--distribution> "
+"an Cowbuilder übergeben wird. Dies ist nötig, wenn I<Distribution> ein lokal "
+"bedeutsamer Name ist, der irgendeiner speziell konfigurierten Bau-Chroot wie "
+"»wheezy_backports« zugewiesen wurde und nicht der Debootstrap bekannte "
+"offizielle Suite-Name einer Distributionsveröffentlichung ist. Diese Option "
+"kann nicht auf der Befehlszeile außer Kraft gesetzt werden, da dies selten, "
+"wenn nicht sogar nie, für einzelne Aufrufe von B<Cowpoke> sinnvoll wäre. "
+"Falls diese Option nicht für eine Architektur- und Distributionskombination "
+"angegeben wurde, wird als Voreinstellung I<Distribution> genommen."
+
+#. type: TP
+#: ../scripts/cowpoke.1:275
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_CREATE_OPTS>"
+msgstr "I<Architektur>B<_>I<Distribution>B<_CREATE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:283
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"when this chroot is created for the first time (using the B<--create> "
+"option). This is useful when options like B<--othermirror> are wanted to "
+"create specialised chroot configurations such as 'wheezy_backports'. By "
+"default this is unset. All values set in it will be overridden if the B<--"
+"create-opts> option is passed on the command line."
+msgstr ""
+"ein Bash-Feld, das zusätzliche Optionen enthält, die unverändert an "
+"B<Cowbuilder> weitergegeben werden, wenn diese Chroot zum ersten Mal "
+"(mittels der Option B<--create>) erstellt wird. Dies ist nützlich, wenn "
+"Optionen wie B<--othermirror> zum Erstellen spezialisierter Chroots wie "
+"»wheezy_backports« erwünscht werden. Standardmäßig ist dies nicht gesetzt. "
+"Alle darin gesetzten Werte werden außer Kraft gesetzt, falls auf der "
+"Befehlszeile die Option B<--create-opts> übergeben wird."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:288
+msgid ""
+"Each element in this array corresponds to a single argument (in the ARGV "
+"sense) that will be passed to cowbuilder. This ensures that arguments "
+"which may contain whitespace or have strange quoting requirements or other "
+"special characters will not be mangled before they get to cowbuilder."
+msgstr ""
+"Jedes Element dieses Feldes entspricht einem einzelnen Argument (im Sinne "
+"von ARGV), das an Cowbuilder übergeben wird. Dadurch wird sichergestellt, "
+"dass Argumente, die Leerräume enthalten oder merkwürdige "
+"Maskierungsanforderungen oder andere Sonderzeichen haben, nicht verwürfelt "
+"werden, ehe Cowbuilder sie bekommt."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:290
+msgid "Bash arrays are initialised using the following form:"
+msgstr "Die Initialisierung von Bash-Feldern geschieht in folgender Form:"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:292
+#, no-wrap
+msgid " OPTS=( \"arg1\" \"arg 2\" \"--option\" \"value\" \"--opt=val\" \"etc. etc.\" )\n"
+msgstr " OPTS=( \"Arg1\" \"Arg 2\" \"--option\" \"Wert\" \"--opt=Wert\" \"etc. etc.\" )\n"
+
+#. type: TP
+#: ../scripts/cowpoke.1:293
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_UPDATE_OPTS>"
+msgstr "I<Architektur>B<_>I<Distribution>B<_UPDATE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:298
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"each time the base of this chroot is updated. It behaves similarly to the "
+"B<CREATE_OPTS> option above, except for acting when the chroot is updated."
+msgstr ""
+"ein Bash-Feld, das zusätzliche Optionen enthält, die jedesmal, wenn die "
+"Basis dieser Chroot aktualisiert wird, unverändert an B<Cowbuilder> "
+"weitergereicht werden. Es verhält sich ähnlich der oben beschriebenen "
+"B<CREATE_OPTS>-Optionen, außer dass es beim Aktualisieren der Chroot tätig "
+"wird."
+
+#. type: TP
+#: ../scripts/cowpoke.1:299
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BUILD_OPTS>"
+msgstr "I<Architektur>B<_>I<Distribution>B<_BUILD_OPTS>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:306
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"each time a package build is performed in this chroot. This is useful when "
+"you want to use some option like B<--twice> which cowpoke does not directly "
+"need to care about. It otherwise behaves similarly to B<UPDATE_OPTS> above "
+"except that it acts during the build phase of B<cowbuilder>."
+msgstr ""
+"ein Bash-Feld, das zusätzliche Optionen enthält, die jedesmal, wenn in "
+"dieser Chroot ein Paket gebaut wird, unverändert an B<Cowbuilder> "
+"weitergereicht werden. Dies ist nützlich, wenn Sie Optionen wie B<--twice> "
+"verwenden, um die sich Cowpoke nicht direkt kümmern muss. In anderen Fällen "
+"verhält es sich ähnlich der oben beschriebenen B<CREATE_OPTS>, außer dass es "
+"während der Bauphase von B<Cowbuilder> tätig wird."
+
+#. type: TP
+#: ../scripts/cowpoke.1:307
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_SIGN_KEYID>"
+msgstr "I<Architektur>B<_>I<Distribution>B<_SIGN_KEYID>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:311
+msgid ""
+"An optional arch and dist specific override for the global B<SIGN_KEYID> "
+"option."
+msgstr ""
+"ein optionales Architektur- und ein distributionsspezifisches Außer-Kraft-"
+"Setzen für die globale Option B<SIGN_KEYID>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:312
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_UPLOAD_QUEUE>"
+msgstr "I<Architektur>B<_>I<Distribution>B<_UPLOAD_QUEUE>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:316
+msgid ""
+"An optional arch and dist specific override for the global B<UPLOAD_QUEUE> "
+"option."
+msgstr ""
+"ein optionales Architektur- und ein distributionsspezifisches Außer-Kraft-"
+"Setzen für die globale Option B<UPLOAD_QUEUE>"
+
+#. type: SH
+#: ../scripts/cowpoke.1:318
+#, no-wrap
+msgid "CONFIGURATION FILES"
+msgstr "KONFIGURATIONSDATEIEN"
+
+#. type: TP
+#: ../scripts/cowpoke.1:319
+#, no-wrap
+msgid "I</etc/cowpoke.conf>"
+msgstr "I</etc/cowpoke.conf>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:322
+msgid "Global configuration options. Will override hardcoded defaults."
+msgstr ""
+"globale Konfigurationsoptionen; setzen die fest kodierten Vorgaben außer "
+"Kraft"
+
+#. type: TP
+#: ../scripts/cowpoke.1:322
+#, no-wrap
+msgid "I<~/.cowpoke>"
+msgstr "I<~/.cowpoke>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:325 ../scripts/debsnap.1:137
+msgid ""
+"Per-user configuration options. Will override any global configuration."
+msgstr ""
+"Konfigurationsoptionen pro Benutzer; werden jede globale Konfiguration "
+"ignorieren"
+
+#. type: TP
+#: ../scripts/cowpoke.1:325
+#, no-wrap
+msgid "I<.cowpoke>"
+msgstr "I<.cowpoke>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:329
+msgid ""
+"Per-project configuration options. Will override any per-user or global "
+"configuration if B<cowpoke> is called from the directory where they exist."
+msgstr ""
+"Konfigurationsoptionen pro Projekt; werden jede Konfiguration pro Benutzer "
+"oder globale Konfiguration überstimmen, falls B<cowpoke> aus dem Verzeichnis "
+"aufgerufen wird, in dem sie existieren."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:333
+msgid ""
+"If the environment variable B<COWPOKE_CONF> is set, it specifies an "
+"additional configuration file which will override all of those above. "
+"Options specified explicitly on the command line override all configuration "
+"files."
+msgstr ""
+"Falls die Umgebungsvariable B<COWPOKE_CONF> gesetzt ist, gibt sie eine "
+"zusätzliche Konfigurationsdatei an, die alles vorhergehende außer Kraft "
+"setzt. Optionen, die explizit auf der Befehlszeile angegeben werden, "
+"ignorieren alle Konfigurationsdateien."
+
+#. type: SH
+#: ../scripts/cowpoke.1:335
+#, no-wrap
+msgid "COWBUILDER CONFIGURATION"
+msgstr "COWBUILDER-KONFIGURATION"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:344
+msgid ""
+"There is nothing particularly special required to configure a B<cowbuilder> "
+"instance for use with B<cowpoke>. Simply create them in the flavour you "
+"require with `B<cowbuilder --create>` according to the B<cowbuilder> "
+"documentation, then configure B<cowpoke> with the user, arch, and path "
+"information required to access it, on the machines you wish to invoke it "
+"from (or alternatively configure B<cowpoke> with the path, arch and "
+"distribution information and pass the B<--create> option to it on the first "
+"invocation). The build host running B<cowbuilder> does not require "
+"B<cowpoke> installed locally."
+msgstr ""
+"Um eine B<cowbuilder>-Instanz zu konfigurieren. die mit B<cowpoke> benutzt "
+"wird, wird nichts sonderlich Spezielles benötigt. Erstellen Sie sie einfach "
+"in der Variante, die Sie mit »B<cowbuilder --create>« gemäß der "
+"B<cowbuilder>-Dokumentation benötigen. Dann konfigurieren Sie B<cowpoke> mit "
+"dem Benutzer, der Architektur und den zum Zugriff benötigten "
+"Pfadinformationen auf den Rechnern, von denen Sie es aufrufen wollen (oder "
+"konfigurieren Sie B<cowpoke> alternativ mit dem Pfad, der Architektur und "
+"der Distributionsinformation und übergeben Sie ihm beim ersten Aufruf die "
+"Option B<--create>). Der Baurechner, der B<cowbuilder> ausführt, benötigt "
+"kein lokal installiertes B<cowpoke>."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:354
+msgid ""
+"The build machine should have the B<lintian> and B<devscripts> packages "
+"installed for post-build sanity checking. Upon completion, the build log "
+"and the results of automated checks will be recorded in the "
+"B<INCOMING_DIR>. If you wish to upload signed packages the build machine "
+"will also need B<dput>(1) installed and configured to use the 'I<host>' "
+"alias specified by B<UPLOAD_QUEUE>. If B<rsync>(1) is available on both the "
+"local and build machine, then it will be used to transfer the source package "
+"(this may save on some transfers of the I<orig.tar.*> when building "
+"subsequent Debian revisions)."
+msgstr ""
+"Auf der Baumaschine sollten die Pakete B<lintian> und B<devscripts> für "
+"Plausibilitätsprüfungen nach dem Bauen installiert sein. Nach Beendigung "
+"werden das Bauprotokoll und die Ergebnisse der automatischen Prüfungen in "
+"B<INCOMING_DIR> aufgezeichnet. Falls Sie signierte Pakete hochladen möchten, "
+"wird die Baumaschine außerdem erforden, dass B<dput>(1) installiert und für "
+"die Benutzung des durch die B<UPLOAD_QUEUE> angegebenen Alias »I<Rechner>« "
+"konfiguriert ist. Falls B<rsync>(1) sowohl auf der lokalen als auch auf der "
+"Baumaschine verfügbar ist, wird es für die Übertragung des Quellpakets "
+"benutzt (dies könnte bei einigen Übertragungen der I<orig.tar.*> Bandbreite "
+"sparen, wenn aufeinander folgende Debian-Revisionen gebaut werden)."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:360
+msgid ""
+"The user executing B<cowpoke> must have SSH access to the build machine as "
+"the B<BUILDD_USER>. That user must be able to invoke B<cowbuilder> as root "
+"by using the B<BUILDD_ROOTCMD>. Signing keys are not required to be "
+"installed on the build machine (and will be ignored there if they are). If "
+"the package is signed, keys will be expected on the machine that executes "
+"B<cowpoke>."
+msgstr ""
+"Der Benutzer, der B<cowpoke> ausführt, muss SSH-Zugriff auf die Baumschine "
+"als B<BUILDD_USER> haben. Dieser Benutzer muss in der Lage sein, "
+"B<cowbuilder> als Root durch Benutzen von B<BUILDD_ROOTCMD> aufzurufen. Zur "
+"Installation auf der Baumaschine werden keine Schlüssel zum Signieren "
+"benötigt (und werden ignoriert, wenn sie dort sind). Falls das Paket "
+"signiert ist, werden die Schlüssel auf dem Rechner, die B<cowpoke> ausführt, "
+"erwartet."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:367
+msgid ""
+"When B<cowpoke> is invoked, it will first attempt to update the "
+"B<cowbuilder> image if that has not already been done on the same day. This "
+"is checked by the presence or absence of a I<cowbuilder-$arch-$dist-update-"
+"log-$date> file in the B<INCOMING_DIR>. You may move, remove, or touch this "
+"file if you wish the image to be updated more or less often than that. Its "
+"contents log the output of B<cowbuilder> during the update (or creation) of "
+"the build root."
+msgstr ""
+"Wenn B<cowpoke> aufgerufen wird, wird es zuerst versuchen, das B<cowbuilder>-"
+"Image zu aktualisieren, falls dies nicht bereits am selben Tag getan wurde. "
+"Dies wird durch das Vorhandensein oder Fehlen einer I<cowbuilder-$arch-$dist-"
+"update-log-$date>-Datei im Verzeichnis B<INCOMING_DIR> geprüft. Sie können "
+"die Datei verschieben, entfernen oder mit touch aktualisieren, falls Sie "
+"wünschen, dass das Image außerhalb des üblichen Zyklus aktualisiert wird. "
+"Ihr Inhalt protokolliert die Ausgabe von B<cowbuilder> während des "
+"Aktualisierens (oder Erstellens) des Bauwurzelverzeichnisses."
+
+#. type: =head1
+#: ../scripts/cowpoke.1:369 ../scripts/origtargz.pl:85
+#: ../scripts/rmadison.pl:396
+#, no-wrap
+msgid "NOTES"
+msgstr "ANMERKUNGEN"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:378
+msgid ""
+"Since B<cowbuilder> creates a chroot, and to do that you need root, "
+"B<cowpoke> also requires some degree of root access. So all the horrible "
+"things that can go wrong with that may well one day rain down upon you. "
+"B<cowbuilder> has been known to accidentally wipe out bind-mounted "
+"filesystems outside the chroot, and worse than that can easily happen. So "
+"be careful, keep good backups of things you don't want to lose on your build "
+"machine, and use B<cowpoke> to keep all that on a machine that isn't your "
+"bleeding edge dev box with your last few hours of uncommitted work."
+msgstr ""
+"Da B<cowbuilder> eine Chroot erstellt und Sie, um dies zu tun, Root-Rechte "
+"benötigen, erfordert B<cowpoke> außerdem zu einem bestimmten Grad Root-"
+"Zugriff. Daher ist es denkbar, dass all die schrecklichen Dinge, die dabei "
+"schiefgehen können, auch bei Ihnen schiefgehen. B<cowbuilder> war bekannt "
+"dafür, versehentlich Dateisysteme, die mit der Option »bind« außerhalb der "
+"Chroot eingehängt sind, zu vernichten und es ist leicht möglich, dass noch "
+"Schlimmeres passiert. Seien Sie daher vorsichtig, bewahren Sie gute "
+"Sicherheitskopien der Dinge auf, die Sie nicht auf Ihrer Baumaschine "
+"verlieren möchten und verwenden Sie B<cowpoke>, um alles auf einem Rechner "
+"zu verwahren, die nicht Ihre modernste Entwicklerkiste mit Ihren letzten "
+"paar Stunden nicht übergebener Arbeit ist."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:384
+msgid "B<cowbuilder>(1), B<pbuilder>(1), B<ssh-agent>(1), B<sudoers>(5)"
+msgstr "B<cowbuilder>(1), B<pbuilder>(1), B<ssh-agent>(1), B<sudoers>(5)"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:388
+msgid "B<cowpoke> was written by Ron E<lt>I<ron@debian.org>E<gt>."
+msgstr "B<cowpoke> wurde von Ron E<lt>I<ron@debian.org>E<gt> geschrieben."
+
+#. type: TH
+#: ../scripts/cvs-debc.1:1 ../scripts/cvs-debrelease.1:1
+#, no-wrap
+msgid "CVS-DEBC"
+msgstr "CVS-DEBC"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:4
+msgid ""
+"cvs-debc - view contents of a cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+"cvs-debc - Inhalte eines mit Cvs-buildpackage/Cvs-debuild erzeugten Pakets "
+"ansehen"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:6
+msgid "B<cvs-debc> [I<options>] [I<package> ...]"
+msgstr "B<cvs-debc> [I<Optionen>] [I<Paket> …]"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:17
+msgid ""
+"B<cvs-debc> is run from the CVS working directory after B<cvs-buildpackage> "
+"or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to locate the I<."
+"changes> file generated in that run. It then displays information about the "
+"I<.deb> files which were generated in that run, by running B<dpkg-deb -I> "
+"and B<dpkg-deb -c> on every I<.deb> archive listed in the I<.changes> file, "
+"assuming that all of the I<.deb> archives live in the same directory as the "
+"I<.changes> file. It is useful for ensuring that the expected files have "
+"ended up in the Debian package."
+msgstr ""
+"B<cvs-debc> wird aus dem CVS-Arbeitsverzeichnis nach B<cvs-buildpackage> "
+"oder B<cvs-debuild> ausgeführt. Es verwendet das B<cvs-buildpackage>-System, "
+"um die in diesem Durchgang erzeugte I<.changes>-Datei ausfindig zu machen. "
+"Dann zeigt es Informationen über die I<.deb>-Dateien an, die in diesem "
+"Durchgang erzeugt wurden, indem B<dpkg-deb -I> und B<dpkg-deb -c> auf jedes "
+"in der I<.changes>-Datei aufgelistete I<.deb>-Archiv ausgeführt werden. Dies "
+"geschieht in der Annahme, dass alle I<.deb> im gleichen Verzeichnis wie die "
+"I<.changes>-Datei liegen. Das ist nützlich, um sicherzustellen, dass die "
+"erwarteten Dateien im Debian-Paket gelandet sind."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:20
+msgid ""
+"If a list of packages is given on the command line, then only those debs "
+"with names in this list of packages will be processed."
+msgstr ""
+"Falls auf der Befehlszeile eine Liste von Paketen angegeben wurde, dann "
+"werden nur jene Debs verarbeitet, deren Namen in der Paketliste stehen."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:24 ../scripts/cvs-debi.1:23
+#: ../scripts/cvs-debrelease.1:21
+msgid ""
+"Note that unlike B<cvs-buildpackage>, the only way to specify the source "
+"package name is with the B<-P> option; you cannot simply have it as the last "
+"command-line parameter."
+msgstr ""
+"Beachten Sie, dass im Gegensatz zu B<cvs-buildpackage>, die Option B<-P> die "
+"einzige Möglichkeit ist, den Namen des Quellpakets anzugeben; Sie können ihn "
+"nicht einfach als letzten Befehlszeilenparameter angeben."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:28 ../scripts/cvs-debi.1:32
+msgid ""
+"All current B<cvs-buildpackage> options are silently accepted; however, only "
+"the ones listed below have any effect. For more details on all of them, see "
+"the B<cvs-buildpackage>(1) manpage."
+msgstr ""
+"Alle aktuellen Optionen von B<cvs-buildpackage> werden stillschweigend "
+"akzeptiert; allerdings haben nur die nachfolgend aufgeführten Auswirkungen. "
+"Weitere Einzelheiten über all das finden Sie in der Handbuchseite von B<cvs-"
+"buildpackage>(1)."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:28 ../scripts/cvs-debi.1:32
+#: ../scripts/cvs-debrelease.1:30 ../scripts/debc.1:65 ../scripts/debi.1:66
+#: ../scripts/debrelease.1:67 ../scripts/debrsign.1:35 ../scripts/debsign.1:72
+#, no-wrap
+msgid "B<-a>I<debian-architecture>, B<-t>I<GNU-system-type>"
+msgstr "B<-a>I<Debian-Architektur>, B<-t>I<GNU-Systemtyp>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:34 ../scripts/cvs-debi.1:38
+#: ../scripts/cvs-debrelease.1:36 ../scripts/debc.1:71 ../scripts/debi.1:72
+#: ../scripts/debrsign.1:41 ../scripts/debsign.1:78
+msgid ""
+"See B<dpkg-architecture>(1) for a description of these options. They affect "
+"the search for the I<.changes> file. They are provided to mimic the "
+"behaviour of B<dpkg-buildpackage> when determining the name of the I<."
+"changes> file."
+msgstr ""
+"Eine Beschreibung dieser Optionen finden Sie unter B<dpkg-architecture>(1). "
+"Sie beeinflussen die Suche nach der I<.changes>-Datei. Sie werden "
+"bereitgestellt, um das Verhalten von B<dpkg-buildpackage> nachzumachen, wenn "
+"der Name der I<.changes>-Datei festgestellt wird."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:34 ../scripts/cvs-debi.1:38
+#: ../scripts/cvs-debrelease.1:36
+#, no-wrap
+msgid "B<-M>I<module>"
+msgstr "B<-M>I<Modul>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:37 ../scripts/cvs-debi.1:41
+#: ../scripts/cvs-debrelease.1:39
+msgid "The name of the CVS module."
+msgstr "der Name des CVS-Moduls"
+
+#. type: TP
+#: ../scripts/cvs-debc.1:37 ../scripts/cvs-debi.1:41
+#: ../scripts/cvs-debrelease.1:39
+#, no-wrap
+msgid "B<-P>I<package>"
+msgstr "B<-P>I<Paket>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:40 ../scripts/cvs-debi.1:44
+#: ../scripts/cvs-debrelease.1:42
+msgid "The name of the package."
+msgstr "der Name des Pakets"
+
+#. type: TP
+#: ../scripts/cvs-debc.1:40 ../scripts/cvs-debi.1:44
+#: ../scripts/cvs-debrelease.1:42
+#, no-wrap
+msgid "B<-V>I<version>"
+msgstr "B<-V>I<Version>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:43 ../scripts/cvs-debi.1:47
+#: ../scripts/cvs-debrelease.1:45
+msgid "The version number of the package."
+msgstr "die Versionsnummer des Pakets"
+
+#. type: TP
+#: ../scripts/cvs-debc.1:43 ../scripts/cvs-debi.1:47
+#: ../scripts/cvs-debrelease.1:45
+#, no-wrap
+msgid "B<-T>I<tag>"
+msgstr "B<-T>I<Markierung>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:46 ../scripts/cvs-debi.1:50
+#: ../scripts/cvs-debrelease.1:48
+msgid "The CVS tag to use for exporting sources."
+msgstr "die CVS-Markierung, die für den Export von Quellen benutzt wird"
+
+#. type: TP
+#: ../scripts/cvs-debc.1:46 ../scripts/cvs-debi.1:50
+#: ../scripts/cvs-debrelease.1:48
+#, no-wrap
+msgid "B<-R>I<root\\ directory>"
+msgstr "B<-R>I<Wurzelverzeichnis>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:49 ../scripts/cvs-debi.1:53
+#: ../scripts/cvs-debrelease.1:51
+msgid "Root of the original sources archive."
+msgstr "Wurzel des Originalquellarchivs"
+
+#. type: TP
+#: ../scripts/cvs-debc.1:49 ../scripts/cvs-debi.1:53
+#: ../scripts/cvs-debrelease.1:51
+#, no-wrap
+msgid "B<-W>I<work directory>"
+msgstr "B<-W>I<Arbeitsverzeichnis>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:52 ../scripts/cvs-debi.1:56
+#: ../scripts/cvs-debrelease.1:54
+msgid "The full path name for the cvs-buildpackage working directory."
+msgstr "der vollständige Pfadname für das Cvs-buildpackage-Arbeitsverzeichnis"
+
+#. type: TP
+#: ../scripts/cvs-debc.1:52 ../scripts/cvs-debi.1:56
+#: ../scripts/cvs-debrelease.1:54
+#, no-wrap
+msgid "B<-x>I<prefix>"
+msgstr "B<-x>I<Präfix>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:55 ../scripts/cvs-debi.1:59
+#: ../scripts/cvs-debrelease.1:57
+msgid "This option provides the CVS default module prefix."
+msgstr "Diese Option stellt das Standard-CVS-Modulpräfix bereit."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:55 ../scripts/cvs-debi.1:59
+#: ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:99 ../scripts/debi.1:106
+#: ../scripts/debrsign.1:50
+#, no-wrap
+msgid "B<--help>, B<--version>"
+msgstr "B<--help>, B<--version>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62
+#: ../scripts/cvs-debrelease.1:64 ../scripts/debc.1:102 ../scripts/debi.1:109
+#: ../scripts/debrsign.1:53
+msgid "Show help message and version information respectively."
+msgstr "zeigt Hilfenachricht beziehungsweise Versionsinformationen."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:63
+msgid "B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1), B<debc>(1)"
+msgstr ""
+"B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1) und B<debc>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:67 ../scripts/cvs-debi.1:71
+msgid ""
+"B<cvs-buildpackage> was written by Manoj Srivastava, and the current version "
+"of B<debi> was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>. They have "
+"been combined into this program by Julian Gilbey."
+msgstr ""
+"B<cvs-buildpackage> wurde von Manoj Srivastava geschrieben und die aktuelle "
+"Version von B<debi> wurde von Julian Gilbey E<lt>jdg@debian.orgE<gt> "
+"verfasst. Sie wurden von Julian Gilbe in diesem Programm kombiniert."
+
+#. type: TH
+#: ../scripts/cvs-debi.1:1
+#, no-wrap
+msgid "CVS-DEBI"
+msgstr "CVS-DEBI"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:4
+msgid "cvs-debi - install cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+"cvs-debi - installiert mit Cvs-buildpackage/Cvs-debuild erzeugtes Paket"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:6
+msgid "B<cvs-debi> [I<options>] [I<package> ...]"
+msgstr "B<cvs-debi> [I<Optionen>] [I<Paket> …]"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:16
+msgid ""
+"B<cvs-debi> is run from the CVS working directory after B<cvs-buildpackage> "
+"or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to locate the I<."
+"changes> file generated in that run. It then runs B<debpkg -i> on every I<."
+"deb> archive listed in the I<.changes> file to install them, assuming that "
+"all of the I<.deb> archives live in the same directory as the I<.changes> "
+"file. Note that you probably don't want to run this program on a I<."
+"changes> file relating to a different architecture after cross-compiling the "
+"package!"
+msgstr ""
+"B<cvs-debi> wird aus dem CVS-Arbeitsverzeichnis nach B<cvs-buildpackage> "
+"oder B<cvs-debuild> ausgeführt. Es verwendet das B<cvs-buildpackage>-System, "
+"um die in diesen Durchgang erzeugte I<.changes>-Datei ausfindig zu machen. "
+"Dann führt es B<debpkg -i> für jedes in der I<.changes>-Datei aufgelistete "
+"I<.deb>-Archiv aus. Dies geschieht in der Annahme, dass alle I<.deb> im "
+"gleichen Verzeichnis wie die I<.changes>-Datei liegen. Beachten Sie, dass "
+"Sie dieses Programm vermutlich nicht für eine I<.changes>-Datei ausführen "
+"möchten, die sich auf eine andere Architektur nach dem Cross-Kompilieren des "
+"Pakets bezieht."
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:19 ../scripts/debi.1:24
+msgid ""
+"If a list of packages is given on the command line, then only those debs "
+"with names in this list of packages will be installed."
+msgstr ""
+"Falls auf der Befehlszeile eine Liste von Paketen angegeben wurde, dann "
+"werden nur diese Debs installiert, deren Namen in der Paketliste stehen."
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:28 ../scripts/debi.1:29
+msgid ""
+"Since installing a package requires root privileges, B<debi> calls B<debpkg> "
+"rather than B<dpkg> directly. Thus B<debi> will only be useful if it is "
+"either being run as root or B<debpkg> can be run as root. See B<debpkg>(1) "
+"for more details."
+msgstr ""
+"Da das Installieren eines Pakets Root-Rechte erfordert, ruft B<debi> direkt "
+"B<debpkg> anstelle von B<dpkg> auf. Daher wird B<debi> nur von Nutzen sein, "
+"falls es entweder als Root ausgeführt wird oder B<debpkg> als Root "
+"ausgeführt werden kann. Siehe B<debpkg>(1) für weitere Einzelheiten."
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:67
+msgid "B<cvs-buildpackage>(1), B<cvs-debc>(1), B<cvs-debuild>(1), B<debi>(1)"
+msgstr ""
+"B<cvs-buildpackage>(1), B<cvs-debc>(1), B<cvs-debuild>(1) und B<debi>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:4
+msgid ""
+"cvs-debrelease - upload a cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+"cvs-debrelease - lädt ein mit Cvs-buildpackage/Cvs-debuild erzeugtes Paket "
+"hoch"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:7
+msgid ""
+"B<cvs-debrelease> [I<cvs-debrelease options>] [B<--dopts> [I<dupload/dput "
+"options>]]"
+msgstr ""
+"B<cvs-debrelease> [I<Cvs-debrelease-Optionen>] [B<--dopts> [I<dupload-/dput-"
+"Optionen>]]"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:17
+msgid ""
+"B<cvs-debrelease> is run from the CVS working directory after B<cvs-"
+"buildpackage> or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to "
+"locate the I<.changes> file generated in that run. It then uploads the "
+"package using B<debrelease>(1), which in turn calls either B<dupload> or "
+"B<dput>. Note that the B<--dopts> option must be specified to distinguish "
+"the B<cvs-debrelease> options from the B<dupload> or B<dput> options. Also, "
+"the B<devscripts> configuration files will be read, as described in the "
+"B<debrelease>(1) manpage."
+msgstr ""
+"B<cvs-debrelease> wird aus dem CVS-Arbeitsverzeichnis nach B<cvs-"
+"buildpackage> oder B<cvs-debuild> ausgeführt. Es verwendet das B<cvs-"
+"buildpackage>-System, um die in diesem Durchgang erzeugte I<.changes>-Datei "
+"ausfindig zu machen. Dann lädt es das Paket mittels B<debrelease>(1) hoch, "
+"welches wiederum B<dupload> oder B<dput> aufruft. Beachten Sie, dass die "
+"Option B<--dopts> angegeben werden muss, um die Optionen von B<cvs-"
+"debrelease> von den Optionen von B<dupload> oder B<dput> zu unterscheiden. "
+"Außerdem werden die B<devscripts>-Konfigurationsdateien, wie in der "
+"Handbuchseite B<debrelease>(1) beschrieben, gelesen."
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:26
+msgid ""
+"All current B<cvs-buildpackage> options are silently accepted; however, only "
+"the ones listed below have any effect. For more details on all of them, see "
+"the B<cvs-buildpackage>(1) manpage. All B<debrelease> options (as listed "
+"below) are also accepted."
+msgstr ""
+"Alle aktuellen Optionen von B<cvs-buildpackage> werden stillschweigend "
+"akzeptiert; allerdings haben nur die nachfolgend aufgeführten Auswirkungen. "
+"Weitere Einzelheiten über alle davon finden Sie in der Handbuchseite von "
+"B<cvs-buildpackage>(1). Zudem werden alle Optionen von B<debrelease> (wie "
+"nachfolgend aufgeführt) akzeptiert."
+
+#. type: TP
+#: ../scripts/cvs-debrelease.1:26 ../scripts/debrelease.1:57
+#, no-wrap
+msgid "B<--dupload>, B<--dput>"
+msgstr "B<--dupload>, B<--dput>"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:30 ../scripts/debrelease.1:61
+msgid ""
+"This specifies which uploader program to use; the default is B<dupload>."
+msgstr ""
+"Dies gibt an, welches Programm zum Hochladen benutzt wird. Die Vorgabe ist "
+"B<dupload>."
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:68
+msgid "B<cvs-buildpackage>(1), B<cvs-debuild>(1), B<debrelease>(1)"
+msgstr "B<cvs-buildpackage>(1), B<cvs-debuild>(1), B<debrelease>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:72
+msgid ""
+"B<cvs-buildpackage> was written by Manoj Srivastava, and the current version "
+"of B<debrelease> was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>. "
+"They have been combined into this program by Julian Gilbey."
+msgstr ""
+"B<cvs-buildpackage> wurde von Manoj Srivastava geschrieben und die aktuelle "
+"Version von B<debrelease> wurde von Julian Gilbey E<lt>jdg@debian.orgE<gt> "
+"verfasst. Sie wurden von Julian Gilbe in diesem Programm kombiniert."
+
+#. type: TH
+#: ../scripts/cvs-debuild.1:1
+#, no-wrap
+msgid "CVS-DEBUILD"
+msgstr "CVS-DEBUILD"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:4
+msgid "cvs-debuild - build a Debian package using cvs-buildpackage and debuild"
+msgstr ""
+"cvs-debuild - baut ein Debian-Paket mittels Cvs-buildpackage und Debuild"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:7
+msgid ""
+"B<cvs-debuild> [I<debuild options>] [I<cvs-buildpackage options>] [B<--"
+"lintian-opts> I<lintian options>]"
+msgstr ""
+"B<cvs-debuild> [I<Debuild-Optionen>] [I<Cvs-buildpackage-Optionen>] [B<--"
+"lintian-opts> I<Lintian-Optionen>]"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:13
+msgid ""
+"B<cvs-debuild> is a wrapper around B<cvs-buildpackage> to run it with "
+"B<debuild> as the package-building program. (This cannot simply be "
+"accomplished using the B<-C> option of B<cvs-buildpackage>, as it does not "
+"know how to handle all of the special B<debuild> options.)"
+msgstr ""
+"B<cvs-debuild> ist ein Wrapper um B<cvs-buildpackage>, um es mit B<debuild> "
+"als Paketbauprogramm auszuführen. (Dies kann nicht einfach durch Verwendung "
+"der Option B<-C> von B<cvs-buildpackage> bewerkstelligt werden, da es nicht "
+"weiß, wie all die speziellen B<debuild>-Optionen gehandhabt werden.)"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:22
+msgid ""
+"The program simply stashes the B<debuild> and B<lintian> options, and passes "
+"them to B<debuild> when it is called by B<cvs-buildpackage>. All of the "
+"standard B<debuild> options may be used (as listed below), but note that the "
+"root command specified by any B<--rootcmd> or B<-r> command-line option will "
+"be passed as an option to B<cvs-buildpackage>. The first non-B<debuild> "
+"option detected will signal the start of the B<cvs-buildpackage> options."
+msgstr ""
+"Das Programm versteckt einfach die Optionen von B<debuild> und B<lintian> "
+"und übergibt sie an B<debuild>, wenn es durch B<cvs-buildpackage> aufgerufen "
+"wird. Alle Standard-B<debuild>-Optionen könnten (wie im Folgenden "
+"aufgelistet) benutzt werden, beachten Sie aber, dass der Root-Befehl, der "
+"durch irgendwelche B<--rootcmd>- oder B<-r>-Befehlszeilenoptionen angegeben "
+"wurde, als eine Option an B<cvs-buildpackage> übergeben wird. Die erste "
+"entdeckte nicht-B<debuild>-Option wird den Anfang der B<cvs-buildpackage>-"
+"Optionen kennzeichnen."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:29
+msgid ""
+"The selection of the root command is slightly subtle: if there are any "
+"command-line options, these will be used. If not, then if B<cvs-"
+"buildpackage> is set up to use a default root command, that will be used. "
+"Finally, if neither of these are the case, then B<debuild> will use its "
+"procedures to determine an appropriate command, as described in its "
+"documentation."
+msgstr ""
+"Die Auswahl des Root-Befehls ist etwas heikel; falls es dort irgendwelche "
+"Befehlszeilenoptionen gibt, werden diese benutzt. Falls nicht, wird B<cvs-"
+"buildpackage> verwendet, falls es so eingerichtet wurde, dass es einen "
+"Standard-Root-Befehl verwendet. Schlussendlich, falls keiner dieser Fälle "
+"vorliegt, wird B<debuild> seine Prozeduren benutzen, um einen geeigneten "
+"Befehl zu bestimmen, wie es in seiner Dokumentation beschrieben wird."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:32
+msgid ""
+"See the manpages for B<debuild>(1) and B<cvs-buildpackage> for more "
+"information about the behaviour of each."
+msgstr ""
+"Weitere Informationen über das Verhalten von B<debuild>(1) und B<cvs-"
+"buildpackage> finden Sie in der jeweiligen Handbuchseite."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:38
+msgid ""
+"The following are the B<debuild> options recognised by B<cvs-debuild>. All "
+"B<cvs-buildpackage> and B<lintian> options are simply passed to the "
+"appropriate program. For explanations of the meanings of these variables, "
+"see B<debuild>(1)."
+msgstr ""
+"Das Folgende sind die von B<cvs-debuild> erkannten B<debuild>-Optionen. Alle "
+"Optionen von B<cvs-buildpackage> und B<lintian> werden einfach an das "
+"passende Programm weitergegeben. Erklärungen und Bedeutungen dieser "
+"Variablen finden Sie unter B<debuild>(1)."
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:40 ../scripts/debuild.1:262
+#, no-wrap
+msgid "B<--rootcmd=>I<gain-root-command>, B<-r>I<gain-root-command>"
+msgstr "B<--rootcmd=>I<Befehl-zum-Erlangen-von-Root-Rechten>, B<-r>I<Befehl-zum-Erlangen-von-Root-Rechten>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:42 ../scripts/debuild.1:265
+#, no-wrap
+msgid "B<--preserve-env>"
+msgstr "B<--preserve-env>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:44 ../scripts/debuild.1:268
+#, no-wrap
+msgid "B<--preserve-envvar=>I<var>, B<-e>I<var>"
+msgstr "B<--preserve-envvar=>I<Variable>, B<-e>I<Variable>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:46 ../scripts/debuild.1:275
+#, no-wrap
+msgid "B<--set-envvar=>I<var>B<=>I<value>, B<-e>I<var>B<=>I<value>"
+msgstr "B<--set-envvar=>I<Variable>B<=>I<Wert>, B<-e>I<Variable>B<=>I<Wert>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:48
+#, no-wrap
+msgid "B<--lintian>, B<--no-lintian>"
+msgstr "B<--lintian>, B<--no-lintian>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:50
+#, no-wrap
+msgid "B<--ignore-dirname>, B<--check-dirname>"
+msgstr "B<--ignore-dirname>, B<--check-dirname>"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:53
+msgid "These should not be needed, but it is provided nevertheless."
+msgstr "Dies sollte nicht nötig sein, wird aber trotzdem bereitgestellt."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:58
+msgid ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1), B<lintian>(1)"
+msgstr ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1) und "
+"B<lintian>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:59
+msgid "This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Dieses Programm wurde von Julian Gilbey E<lt>jdg@debian.orgE<gt> geschrieben."
+
+#. type: TH
+#: ../scripts/dcmd.1:1
+#, no-wrap
+msgid "DCMD"
+msgstr "DCMD"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:4
+msgid "dcmd - expand file lists of .dsc/.changes files in the command line"
+msgstr ""
+"dcmd - expandiert Dateilisten von .dsc-/.changes-Dateien auf der Befehlszeile"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:6
+msgid "B<dcmd> [I<options>] [I<command>] [I<changes-file>|I<dsc-file>] ..."
+msgstr "B<dcmd> [I<Optionen>] [I<Befehl>] [I<changes-Datei>|I<dsc-Datei>] ..."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:11
+msgid ""
+"B<dcmd> replaces any reference to a I<.dsc> or I<.changes> file in the "
+"command line with the list of files in its 'Files' section, plus the file "
+"itself. It allows easy manipulation of all the files involved in an upload "
+"(for I<.changes> files) or a source package (for I<.dsc> files)."
+msgstr ""
+"B<dcmd> ersetzt auf der Befehlszeile alle Bezüge zu I<.dsc>- oder I<."
+"changes>-Dateien mit der Liste der Dateien im Abschnitt »Files« sowie die "
+"Datei selbst. Es ermöglicht einfache Manipulation aller an einem Hochladen "
+"beteiligten Dateien (für I<.changes>-Dateien) oder in einem Quellpaket (für "
+"I<.dsc>-Dateien)."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:15
+msgid ""
+"If I<command> is omitted (that is the first argument is an existing I<.dsc> "
+"or I<.changes> file), the expanded list of files is printed to stdout, one "
+"file by line. Useful for usage in backticks."
+msgstr ""
+"Falls I<Befehl> weggelassen wird (sprich das erste Argument ist eine "
+"existierende I<.dsc>- oder I<.changes>-Datei), wird die expandierte "
+"Dateiliste auf der Standardausgabe (Stdout) ausgegeben, eine Datei pro "
+"Zeile. Nützlich für die Benutzung in rückwärtsgerichteten Hochkommas."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:19
+msgid ""
+"There are a number of options which may be used in order to select only a "
+"subset of the files listed in the I<.dsc> or I<.changes> file. If a "
+"requested file is not found, an error message will be printed."
+msgstr ""
+"Es gibt zahlreiche Optionen, die verwendet werden könnten, um nur eine "
+"Untermenge der aufgelisteten Dateien in der I<.dsc>- oder I<.changes>-Datei "
+"auszuwählen. Falls eine angeforderte Datei nicht gefunden wurde, wird eine "
+"Fehlermeldung ausgegeben."
+
+#. type: TP
+#: ../scripts/dcmd.1:19
+#, no-wrap
+msgid "B<--dsc>"
+msgstr "B<--dsc>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:22
+msgid "Select the I<.dsc> file."
+msgstr "I<.dsc>-Datei auswählen"
+
+#. type: TP
+#: ../scripts/dcmd.1:22
+#, no-wrap
+msgid "B<--schanges>"
+msgstr "B<--schanges>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:25
+msgid "Select I<.changes> files for the 'source' architecture."
+msgstr "wählt I<.changes>-Dateien für die »Quell«architektur."
+
+#. type: TP
+#: ../scripts/dcmd.1:25
+#, no-wrap
+msgid "B<--bchanges>"
+msgstr "B<--bchanges>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:28
+msgid "Select I<.changes> files for binary architectures."
+msgstr "wählt I<.changes>-Dateien für Binärarchitekturen."
+
+#. type: TP
+#: ../scripts/dcmd.1:28
+#, no-wrap
+msgid "B<--changes>"
+msgstr "B<--changes>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:31
+msgid "Select I<.changes> files. Implies B<--schanges> and B<--bchanges>."
+msgstr ""
+"wählt I<.changes>-Dateien aus; impliziert B<--schanges> und B<--bchanges>."
+
+#. type: TP
+#: ../scripts/dcmd.1:31
+#, no-wrap
+msgid "B<--archdeb>"
+msgstr "B<--archdeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:34
+msgid "Select architecture-dependent binary packages (I<.deb> files)."
+msgstr "wählt architekturabhängige Binärpakete (I<.deb>-Dateien) aus."
+
+#. type: TP
+#: ../scripts/dcmd.1:34
+#, no-wrap
+msgid "B<--indepdeb>"
+msgstr "B<--indepdeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:37
+msgid "Select architecture-independent binary packages (I<.deb> files)."
+msgstr "wählt architekturunabhängige Binärpakete (I<.deb>-Dateien) aus."
+
+#. type: TP
+#: ../scripts/dcmd.1:37
+#, no-wrap
+msgid "B<--deb>"
+msgstr "B<--deb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:40
+msgid ""
+"Select binary packages (I<.deb> files). Implies B<--archdeb> and B<--"
+"indepdeb>."
+msgstr ""
+"wählt Binärpakete (I<.deb>-Dateien) aus; impliziert B<--archdeb> und B<--"
+"indepdeb>."
+
+#. type: TP
+#: ../scripts/dcmd.1:40
+#, no-wrap
+msgid "B<--archudeb>"
+msgstr "B<--archudeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:43
+msgid "Select architecture-dependent I<.udeb> binary packages."
+msgstr "wählt architekturabhängige I<.udeb>-Binärpakete aus."
+
+#. type: TP
+#: ../scripts/dcmd.1:43
+#, no-wrap
+msgid "B<--indepudeb>"
+msgstr "B<--indepudeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:46
+msgid "Select architecture-independent I<.udeb> binary packages."
+msgstr "wählt architekturunabhängige I<.udeb>-Binärpakete aus."
+
+#. type: TP
+#: ../scripts/dcmd.1:46
+#, no-wrap
+msgid "B<--udeb>"
+msgstr "B<--udeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:49
+msgid ""
+"Select I<.udeb> binary packages. Implies B<--archudeb> and B<--indepudeb>."
+msgstr ""
+"wählt I<.udeb>-Binärpakete aus; impliziert B<--archudeb> und B<--indepudeb>."
+
+#. type: TP
+#: ../scripts/dcmd.1:49
+#, no-wrap
+msgid "B<--tar>,\\ B<--orig>"
+msgstr "B<--tar>, B<--orig>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:52
+msgid "Select the upstream I<.tar> file."
+msgstr "wählt die I<.tar>-Datei der Originalautoren aus."
+
+#. type: TP
+#: ../scripts/dcmd.1:52
+#, no-wrap
+msgid "B<--diff>,\\ B<--debtar>"
+msgstr "B<--diff>, B<--debtar>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:55
+msgid "Select the Debian I<.debian.tar> or I<.diff> file."
+msgstr "wählt die Debian-I<.debian.tar> oder Debian-I<.diff>-Datei aus."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:58
+msgid ""
+"Each option may be prefixed by B<--no> to indicate that all files I<not> "
+"matching the specification should be selected."
+msgstr ""
+"Jeder Option kann B<--no> vorangestellt werden, um anzuzeigen, dass alle "
+"Dateien, die I<nicht> auf die Spezifikation passen, ausgewählt werden sollen."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:62
+msgid ""
+"It is not possible to combine positive filtering options (e.g. B<--dsc>) "
+"and negative filtering options (e.g. B<--no-changes>) in the same B<dcmd> "
+"invocation."
+msgstr ""
+"Es ist nicht möglich, positive Filteroptionen (z.B. B<--dsc>) und negative "
+"Filteroptionen (z.B. B<--no-changes>) im gleichen B<dcmd>-Aufruf zu "
+"kombinieren."
+
+#. type: TP
+#: ../scripts/dcmd.1:62
+#, no-wrap
+msgid "B<--no-fail-on-missing>, B<-r>"
+msgstr "B<--no-fail-on-missing>, B<-r>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:65
+msgid "If any of the requested files were not found, do not output an error."
+msgstr ""
+"gibt keinen Fehler aus, falls irgendwelche angeforderten Dateien nicht "
+"gefunden werden."
+
+#. type: TP
+#: ../scripts/dcmd.1:65
+#, no-wrap
+msgid "B<--package>, B<-p>"
+msgstr "B<--package>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:68
+msgid "Output package name part only."
+msgstr "gibt nur den Paketnamensteil aus."
+
+#. type: TP
+#: ../scripts/dcmd.1:68
+#, no-wrap
+msgid "B<--sort>, B<-s>"
+msgstr "B<--sort>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:71
+msgid "Sort output alphabetically."
+msgstr "sortiert die Ausgabe alphabetisch."
+
+#. type: TP
+#: ../scripts/dcmd.1:71
+#, no-wrap
+msgid "B<--tac>, B<-t>"
+msgstr "B<--tac>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:74
+msgid "Reverse output order."
+msgstr "kehrt die Reihenfolge der Ausgabe um."
+
+#. type: =head1
+#: ../scripts/dcmd.1:75 ../scripts/debsnap.1:109 ../scripts/debuild.1:404
+#: ../scripts/dget.pl:719 ../scripts/getbuildlog.1:31 ../scripts/rc-alert.1:96
+#: ../scripts/who-permits-upload.pl:139
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "BEISPIELE"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:77
+msgid "Copy the result of a build to another machine:"
+msgstr "das Ergebnis des Bauens auf einen anderen Rechner kopieren:"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:85
+#, no-wrap
+msgid ""
+"$ dcmd scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.dsc 100% 490 0.5KB/s 00:00\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.changes 100% 1095 1.1KB/s 00:00\n"
+"$\n"
+msgstr ""
+"$ dcmd scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.dsc 100% 490 0.5KB/s 00:00\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.changes 100% 1095 1.1KB/s 00:00\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:90
+#, no-wrap
+msgid ""
+"$ dcmd --diff --deb scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"$\n"
+msgstr ""
+"$ dcmd --diff --deb scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:93
+msgid "Check the contents of a source package:"
+msgstr "den Inhalt eines Quellpakets prüfen:"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:100
+#, no-wrap
+msgid ""
+"$ dcmd md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"f0ceeae96603e823eacba6721a30b5c7 rcs_5.7-23.diff.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+msgstr ""
+"$ dcmd md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"f0ceeae96603e823eacba6721a30b5c7 rcs_5.7-23.diff.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:105
+#, no-wrap
+msgid ""
+"$ dcmd --no-diff md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+msgstr ""
+"$ dcmd --no-diff md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:110
+msgid "B<dpkg-genchanges>(1), B<dpkg-source>(1)"
+msgstr "B<dpkg-genchanges>(1), B<dpkg-source>(1)"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:112
+msgid ""
+"This program was written by Romain Francoise E<lt>rfrancoise@debian.orgE<gt> "
+"and is released under the GPL, version 2 or later."
+msgstr ""
+"Dieses Programm wurde von Romain Francoise E<lt>rfrancoise@debian.orgE<gt> "
+"geschrieben und wird unter der GPL, Version 2 oder später, veröffentlicht."
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "DD-LIST"
+msgstr "DD-LIST"
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "2011-10-27"
+msgstr "27. Oktober 2011"
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "Debian"
+msgstr "Debian"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:21
+msgid "dd-list - nicely list .deb packages and their maintainers"
+msgstr "dd-list - nette Liste der .deb-Pakete und ihrer Betreuer"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:26
+msgid ""
+"B<dd-list> [B<-hiusV>] [B<--help>] [B<--stdin>] [B<--sources "
+">I<Sources_file>] [B<--dctrl>] [B<--version>] [B<--uploaders>] "
+"[I<package> ...]"
+msgstr ""
+"B<dd-list> [B<-hiusV>] [B<--help>] [B<--stdin>] [B<--sources >I<Quelldatei>] "
+"[B<--dctrl>] [B<--version>] [B<--uploaders>] [I<Paket> …]"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:30
+msgid ""
+"B<dd-list> produces nicely formatted lists of Debian (.deb) packages and "
+"their maintainers."
+msgstr ""
+"B<dd-list> erzeugt nett formatierte Listen von Debian-Paketen (.deb) und "
+"ihren Betreuern."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:37
+msgid ""
+"Input is a list of source or binary package names on the command line (or "
+"the standard input if B<--stdin> is given). Output is a list of the "
+"following format, where package names are source packages by default:"
+msgstr ""
+"Eingabe ist eine Liste der Quell- oder Binärpaketnamen auf der Befehlszeile "
+"(oder der Standardeingabe, falls B<--stdin> angegeben wurde). Ausgabe ist "
+"eine Liste im folgenden Format, wobei Paketnamen standardmäßig Quellpakete "
+"sind:"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:41
+#, no-wrap
+msgid "J. Random Developer E<lt>jrandom@debian.orgE<gt>\n"
+msgstr "J. Zufälliger Entwickler E<lt>jzufall@debian.orgE<gt>\n"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:44
+#, no-wrap
+msgid ""
+"j-random-package\n"
+"j-random-other\n"
+msgstr ""
+"j-zufall-paket\n"
+"j-zufall-anderes\n"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:47
+#, no-wrap
+msgid "Diana Hacker E<lt>diana@example.orgE<gt>\n"
+msgstr "Diana Hacker E<lt>diana@example.orgE<gt>\n"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:50
+#, no-wrap
+msgid ""
+"fun-package\n"
+"more-fun-package\n"
+msgstr ""
+"spaß-paket\n"
+"mehr-spaß-paket\n"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:58
+msgid ""
+"This is useful when you want, for example, to produce a list of packages "
+"that need to attention from their maintainers, e.g., to be rebuilt when a "
+"library version transition happens."
+msgstr ""
+"Dies ist nützlich, wenn Sie zum Beispiel eine Liste von Paketen erstellen "
+"wollen, die der Aufmerksamkeit ihrer Betreuer bedürfen, z.B. um neu gebaut "
+"zu werden, wenn ein Versionssprung einer Bibliothek vorkommt."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:62
+msgid "Print brief help message."
+msgstr "Ausgabe einer kurzen Hilfenachricht"
+
+#. type: TP
+#: ../scripts/dd-list.1:62
+#, no-wrap
+msgid "B<-i>, B<--stdin>"
+msgstr "B<-i>, B<--stdin>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:66
+msgid ""
+"Read package names from the standard input, instead of taking them from the "
+"command line. Package names are whitespace delimited."
+msgstr ""
+"liest Paketnamen von der Standardeingabe, statt sie von der Befehlszeile zu "
+"nehmen. Paketnamen werden durch Leerräume getrennt."
+
+#. type: TP
+#: ../scripts/dd-list.1:66
+#, no-wrap
+msgid "B<-d>, B<--dctrl>"
+msgstr "B<-d>, B<--dctrl>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:73
+msgid ""
+"Read package list from standard input in the format of a Debian package "
+"control file. This includes the status file, or output of apt-cache. This is "
+"the fastest way to use dd-list, as it uses the maintainer information from "
+"the input instead of looking up the maintainer of each listed package."
+msgstr ""
+"liest die Paketliste von der Standardeingabe im Format der Debian-"
+"Paketsteuerdatei. Dies beinhaltet die Statusdatei oder die Ausgabe von apt-"
+"cache. Dies ist der schnellste Weg, dd-list zu benutzen, da es die "
+"Betreuerinformation von der Eingabe verwendet, statt den Betreuer von jedem "
+"aufgeführten Paket nachzuschlagen."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:76
+msgid ""
+"If no I<Source:> line is given, the I<Package:> name is used for output, "
+"which might be a binary package name."
+msgstr ""
+"Falls keine I<Source:>-Zeile angegeben wurde, wird der I<Package:>-Name als "
+"Ausgabe benutzt. Diese könnte ein Name eines Binärpakets sein."
+
+#. type: TP
+#: ../scripts/dd-list.1:76
+#, no-wrap
+msgid "B<-z>, B<--uncompress>"
+msgstr "B<-z>, B<--uncompress>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:80
+msgid ""
+"Try to uncompress the --dctrl input before parsing. Supported compression "
+"formats are gz, bzip2 or xz."
+msgstr ""
+"versucht, die --dctrl-Eingabe vor dem Auswerten zu entpacken. Unterstützte "
+"Komprimierungsformate sind gz, bzip2 und xz."
+
+#. type: TP
+#: ../scripts/dd-list.1:80
+#, no-wrap
+msgid "B<-s>, B<--sources> I<Sources_file>"
+msgstr "B<-s>, B<--sources> I<Quelldatei>"
+
+# FIXME: gz isn't a program: s/can be gz, /can be gzip, /
+#. type: Plain text
+#: ../scripts/dd-list.1:86
+msgid ""
+"Read package information from the specified I<Sources_file>s. This can be "
+"given multiple times. The files can be gz, bzip2 or xz compressed. If the "
+"filename does not end in I<.gz>, I<.bz2> or I<.xz>, then the B<-z> option "
+"must be used."
+msgstr ""
+"liest Paketinformationen von den angegebenen I<Quelldatei>en. Dies kann "
+"mehrfach angegeben werden. Die Dateien können mit gz, bzip2 oder xz gepackt "
+"sein. Falls der Dateiname nicht auf I<.gz>, I<.bz2> oder I<.xz> endet, muss "
+"die Option B<-z> verwendet werden."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:90
+msgid ""
+"If no I<Sources_file>s are specified, dd-list will ask apt-get for an "
+"appropriate set of sources (if I<apt> is at version greater than 1.1.8), "
+"else any files matching I</var/lib/apt/lists/*_source_Sources> will be used."
+msgstr ""
+"Falls keine I<Quelldatei>en angegeben wurden, wird Dd-list einen geeigneten "
+"Satz Quellen von Apt-get abfragen (falls die Version von APT größer als "
+"1.1.8 ist), ansonsten werden alle Dateien verwendet, auf die I</var/lib/apt/"
+"lists/*_source_Sources> passen."
+
+#. type: TP
+#: ../scripts/dd-list.1:90
+#, no-wrap
+msgid "B<-u>, B<--uploaders>"
+msgstr "B<-u>, B<--uploaders>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:95
+msgid ""
+"Also list developers who are named as uploaders of packages, not only the "
+"maintainers; this is the default behaviour, use --nouploaders to prevent it. "
+"Uploaders are indicated with \"(U)\" appended to the package name."
+msgstr ""
+"listet außerdem Entwickler auf, die als Uploader von Paketen genannt werden, "
+"nicht nur Betreuer; dies ist das Standardverhalten, benutzen Sie --"
+"nouploaders, um das zu verhindern. Uploader werden mit einem an den "
+"Paketnamen angehängten »(U)« angezeigt."
+
+#. type: TP
+#: ../scripts/dd-list.1:95
+#, no-wrap
+msgid "B<-nou>, B<--nouploaders>"
+msgstr "B<-nou>, B<--nouploaders>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:98
+msgid "Only list package Maintainers, do not list Uploaders."
+msgstr "führt nur Paketbetreuer auf, keine Uploader."
+
+#. type: TP
+#: ../scripts/dd-list.1:98
+#, no-wrap
+msgid "B<-b>, B<--print-binary>"
+msgstr "B<-b>, B<--print-binary>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:103
+msgid ""
+"Use binary package names in the output instead of source package names (has "
+"no effect with B<--dctrl> if the I<Package:> line contains source package "
+"names)."
+msgstr ""
+"verwendet Binärpaketnamen statt Quellpaketnamen in der Ausgabe (hat keine "
+"Auswirkungen mit B<--dctrl>, falls die I<Package:>-Zeile Quellpaketnamen "
+"enthält)."
+
+#. type: TP
+#: ../scripts/dd-list.1:103 ../scripts/dget.pl:684 ../scripts/getbuildlog.1:28
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:107
+msgid "Print the version."
+msgstr "gibt die Version aus."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:109
+msgid "Lars Wirzenius E<lt>liw@iki.fiE<gt>"
+msgstr "Lars Wirzenius E<lt>liw@iki.fiE<gt>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:110
+msgid "Joey Hess E<lt>joeyh@debian.orgE<gt>"
+msgstr "Joey Hess E<lt>joeyh@debian.orgE<gt>"
+
+#. type: TH
+#: ../scripts/debc.1:1
+#, no-wrap
+msgid "DEBC"
+msgstr "DEBC"
+
+#. type: Plain text
+#: ../scripts/debc.1:4
+msgid "debc - view contents of a generated Debian package"
+msgstr "debc - Inhalt eines generierten Debian-Pakets betrachten"
+
+#. type: Plain text
+#: ../scripts/debc.1:6
+msgid "B<debc> [I<options>] [I<changes file>] [I<package> ...]"
+msgstr "B<debc> [I<Optionen>] [I<Changes-Datei>] [I<Paket> …]"
+
+#. type: Plain text
+#: ../scripts/debc.1:25
+msgid ""
+"B<debc> figures out the current version of a package and displays "
+"information about the I<.deb> and I<.udeb> files which have been generated "
+"in the current build process. If a I<.changes> file is specified on the "
+"command line, the filename must end with I<.changes>, as this is how the "
+"program distinguishes it from package names. If not, then B<debc> has to be "
+"called from within the source code directory tree. In this case, it will "
+"look for the I<.changes> file corresponding to the current package version "
+"(by determining the name and version number from the changelog, and the "
+"architecture in the same way as B<dpkg-buildpackage>(1) does). It then runs "
+"B<dpkg-deb -I> and B<dpkg-deb -c> on every I<.deb> and I<.udeb> archive "
+"listed in the I<.changes> file to display information about the contents of "
+"the I<.deb> / I<.udeb> files. It precedes every I<.deb> or I<.udeb> file "
+"with the name of the file. It assumes that all of the I<.deb> / I<.udeb> "
+"archives live in the same directory as the I<.changes> file. It is useful "
+"for ensuring that the expected files have ended up in the Debian package."
+msgstr ""
+"B<debc> findet die aktuelle Version eines Pakets heraus und zeigt "
+"Informationen über die I<.deb>- und I<.udeb>-Dateien an, die im aktuellen "
+"Bauprozess generiert wurden. Falls auf der Befehlszeile eine I<.changes>-"
+"Datei angegeben wurde, muss der Dateiname auf I<.changes> enden, da das "
+"Programm sie auf diese Art von Paketnamen unterscheidet. Falls nicht, muss "
+"B<debc> aus dem Quellcodeverzeichnisbaum aufgerufen werden. In diesem Fall "
+"wird es nach der I<.changes>-Datei Ausschau halten, die der aktuellen "
+"Paketversion entspricht (durch Bestimmen des Namens und der Versionsnummer "
+"aus dem Changelog und der Architektur auf der gleichen Art, die B<dpkg-"
+"buildpackage>(1) verwendet). Dann führt es B<dpkg-deb -I> und B<dpkg-deb -c> "
+"auf jedem I<.deb>- und I<.udeb>-Archiv aus, das in der I<.changes>-Datei "
+"aufgeführt ist, um Informationen über die I<.deb>- und I<.udeb>-Archive "
+"anzuzeigen. Es stellt jeder I<.deb>- und I<.udeb>-Datei den Dateinamen "
+"voran. Es geht davon aus, dass all die I<.deb>-/I<.udeb>-Archive im gleichen "
+"Verzeichnis wie die I<.changes>-Datei liegen. Es ist nützlich, um "
+"sicherzustellen, dass die erwarteten Dateien im Debian-Paket gelandet sind."
+
+#. type: Plain text
+#: ../scripts/debc.1:28
+msgid ""
+"If a list of packages is given on the command line, then only those debs or "
+"udebs with names in this list of packages will be processed."
+msgstr ""
+"Falls ein Liste von Paketen auf der Befehlszeile angegeben wurde, werden nur "
+"jene Debs oder Udebs verarbeitet, deren Namen in dieser Paketliste stehen."
+
+#. type: =head2
+#: ../scripts/debc.1:28 ../scripts/debchange.1:109 ../scripts/debclean.1:27
+#: ../scripts/debi.1:29 ../scripts/debrelease.1:20 ../scripts/debuild.1:51
+#: ../scripts/uscan.pl:1979
+#, no-wrap
+msgid "Directory name checking"
+msgstr "Prüfung von Verzeichnisnamen"
+
+#. type: Plain text
+#: ../scripts/debc.1:39
+msgid ""
+"In common with several other scripts in the B<devscripts> package, B<debc> "
+"will climb the directory tree until it finds a I<debian/changelog> file. As "
+"a safeguard against stray files causing potential problems, it will examine "
+"the name of the parent directory once it finds the I<debian/changelog> file, "
+"and check that the directory name corresponds to the package name. "
+"Precisely how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Ebenso wie mehrere andere Skripte im Paket B<devscripts> wird B<debc> das "
+"Verzeichnis emporsteigen, bis es eine I<debian/changelog>-Datei findet. Als "
+"eine Schutzmaßnahme gegen verstreute Dateien, die möglicherweise Probleme "
+"verursachen, wird es den Namen des übergeordneten Verzeichnisses "
+"untersuchen, sobald es die I<debian/changelog>-Datei findet und prüfen, ob "
+"dieser Verzeichnisname dem Paketnamen entspricht. Wie dies genau geschieht "
+"wird über zwei Konfigurationsdateivariablen geregelt, "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> und B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> "
+"sowie ihre entsprechenden Befehlszeilenoptionen B<--check-dirname-level> und "
+"B<--check-dirname-regex>."
+
+#. type: textblock
+#: ../scripts/debc.1:41 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:65
+#: ../scripts/uscan.pl:1994
+msgid "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> can take the following values:"
+msgstr "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> kann die folgenden Werte annehmen:"
+
+#. type: =item
+#: ../scripts/debc.1:41 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:65
+#: ../scripts/uscan.pl:1925 ../scripts/uscan.pl:1998
+#, no-wrap
+msgid "B<0>"
+msgstr "B<0>"
+
+#. type: textblock
+#: ../scripts/debc.1:44 ../scripts/debchange.1:125 ../scripts/debclean.1:43
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:68
+#: ../scripts/uscan.pl:2000
+msgid "Never check the directory name."
+msgstr "prüft den Verzeichnisnamen nie."
+
+#. type: =item
+#: ../scripts/debc.1:44 ../scripts/debchange.1:125 ../scripts/debclean.1:43
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:68
+#: ../scripts/uscan.pl:1930 ../scripts/uscan.pl:2002
+#, no-wrap
+msgid "B<1>"
+msgstr "B<1>"
+
+#. type: Plain text
+#: ../scripts/debc.1:48 ../scripts/debchange.1:129 ../scripts/debclean.1:47
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:72
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for I<debian/changelog>. This is the default behaviour."
+msgstr ""
+"prüft den Verzeichnisnamen nur, falls in der Suche nach I<debian/changelog> "
+"das Verzeichnis gewechselt werden muss. Dies ist das Standardverhalten."
+
+#. type: =item
+#: ../scripts/debc.1:48 ../scripts/debchange.1:129 ../scripts/debclean.1:47
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:72
+#: ../scripts/uscan.pl:2009
+#, no-wrap
+msgid "B<2>"
+msgstr "B<2>"
+
+#. type: textblock
+#: ../scripts/debc.1:51 ../scripts/debchange.1:132 ../scripts/debclean.1:50
+#: ../scripts/debi.1:52 ../scripts/debrelease.1:43 ../scripts/debuild.1:75
+#: ../scripts/uscan.pl:2011
+msgid "Always check the directory name."
+msgstr "prüft den Verzeichnisnamen immer."
+
+#. type: Plain text
+#: ../scripts/debc.1:64 ../scripts/debclean.1:63 ../scripts/debi.1:65
+#: ../scripts/debrelease.1:56
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a '/', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'PACKAGE', this will be replaced by the source package name, as "
+"determined from the changelog. The default value for the regex is: "
+"\\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and PACKAGE-"
+"version."
+msgstr ""
+"Der Verzeichnisname wird geprüft, indem getestet wird, ob der aktuelle "
+"Verzeichnisname (wie er durch B<pwd>(1) bestimmt wurde) zum regulären "
+"Ausdruck passt, der durch die Konfigurationsdateioption "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> oder die Befehlszeilenoption B<--check-"
+"dirname-regex> I<regulärer_Ausdruck> angegeben wurde. Hierbei ist "
+"I<regulärer_Ausdruck> ein regulärer Perl-Ausdruck (siehe B<perlre>(3perl)), "
+"der an den Anfang und das Ende verankert wird. Falls I<regulärer_Ausdruck> "
+"ein »/« enthält, muss er auf den vollständigen Verzeichnispfad passen. Wenn "
+"nicht, dann muss er auf den vollständigen Verzeichnisnamen passen. Falls "
+"I<regulärer_Ausdruck> die Zeichenkette »PACKAGE« beinhaltet, wird diese "
+"durch den Namen des Quellpakets ersetzt, wie er aus dem Changelog bestimmt "
+"wird. Der vorgegebene Wert für den regulären Ausdruck ist: »PACKAGE(-.+)?«, "
+"daher entspricht er Verzeichnisnamen wie PACKAGE und PACKAGE-Version."
+
+#. type: TP
+#: ../scripts/debc.1:71 ../scripts/debdiff.1:170 ../scripts/debi.1:72
+#: ../scripts/debrelease.1:81
+#, no-wrap
+msgid "B<--debs-dir> I<directory>"
+msgstr "B<--debs-dir> I<Verzeichnis>"
+
+#. type: Plain text
+#: ../scripts/debc.1:77
+msgid ""
+"Look for the I<.changes>, I<.deb> and I<.udeb> files in I<directory> instead "
+"of the parent of the source directory. This should either be an absolute "
+"path or relative to the top of the source directory."
+msgstr ""
+"sucht nach I<.changes>-, I<.deb>- und I<.udeb>-Dateien in I<Verzeichnis> "
+"statt im übergeordneten Verzeichnis des Quellverzeichnisses. Dies sollte "
+"entweder ein absoluter Pfad oder relativ zur Wurzel des Quellverzeichnisses "
+"sein."
+
+#. type: =item
+#: ../scripts/debc.1:77 ../scripts/debchange.1:382 ../scripts/debclean.1:72
+#: ../scripts/debi.1:87 ../scripts/debrelease.1:87 ../scripts/debuild.1:313
+#: ../scripts/uscan.pl:1652
+#, no-wrap
+msgid "B<--check-dirname-level> I<N>"
+msgstr "B<--check-dirname-level> I<N>"
+
+#. type: Plain text
+#: ../scripts/debc.1:81 ../scripts/debc.1:85 ../scripts/debclean.1:76
+#: ../scripts/debclean.1:80 ../scripts/debi.1:91 ../scripts/debi.1:95
+#: ../scripts/debrelease.1:91 ../scripts/debrelease.1:95
+#: ../scripts/debuild.1:317 ../scripts/debuild.1:321
+msgid ""
+"See the above section B<Directory name checking> for an explanation of this "
+"option."
+msgstr ""
+"Die Erklärung dieser Option finden Sie im vorhergehenden Abschnitt B<Prüfung "
+"von Verzeichnisnamen>."
+
+#. type: =item
+#: ../scripts/debc.1:81 ../scripts/debchange.1:386 ../scripts/debclean.1:76
+#: ../scripts/debi.1:91 ../scripts/debrelease.1:91 ../scripts/debuild.1:317
+#: ../scripts/uscan.pl:1656
+#, no-wrap
+msgid "B<--check-dirname-regex> I<regex>"
+msgstr "B<--check-dirname-regex> I<regulärer_Ausdruck>"
+
+#. type: TP
+#: ../scripts/debc.1:85
+#, no-wrap
+msgid "B<--list-changes>"
+msgstr "B<--list-changes>"
+
+#. type: Plain text
+#: ../scripts/debc.1:92
+msgid ""
+"List the filename of the .changes file, and do not display anything else. "
+"This option only makes sense if a .changes file is NOT passed explicitly in "
+"the command line. This can be used for example in a script that needs to "
+"reference the .changes file, without having to duplicate the heuristics for "
+"finding it that debc already implements."
+msgstr ""
+"führt den Dateinamen der .changes-Datei auf und zeigt sonst nichts an. Diese "
+"Option ist nur sinnvoll, falls eine .changes-Datei NICHT explizit auf der "
+"Befehlszeile übergeben wird. Dies kann zum Beispiel in einem Skript "
+"verwendet werden, das sich auf die .changes-Datei bezieht, ohne die "
+"Heuristik zum Finden kopieren zu müssen, die Debc bereits umsetzt."
+
+#. type: TP
+#: ../scripts/debc.1:92
+#, no-wrap
+msgid "B<--list-debs>"
+msgstr "B<--list-debs>"
+
+#. type: Plain text
+#: ../scripts/debc.1:95
+msgid ""
+"List the filenames of the .deb packages, and do not display their contents."
+msgstr ""
+"listet die Dateinamen der .deb-Pakete auf, ohne ihren Inhalt anzuzeigen."
+
+#. type: Plain text
+#: ../scripts/debc.1:108 ../scripts/debchange.1:411 ../scripts/debclean.1:99
+#: ../scripts/debi.1:115 ../scripts/debrelease.1:111 ../scripts/debrsign.1:63
+#: ../scripts/debsign.1:111 ../scripts/nmudiff.1:98
+#: ../scripts/pts-subscribe.1:48 ../scripts/uupdate.1:113
+#: ../scripts/who-uploads.1:57
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced in that order to set configuration variables. Command line options "
+"can be used to override configuration file settings. Environment variable "
+"settings are ignored for this purpose. The currently recognised variables "
+"are:"
+msgstr ""
+"Die beiden Konfigurationsdateien I</etc/devscripts.conf> und I<~/."
+"devscripts> werden in dieser Reihenfolge eingelesen, um "
+"Konfigurationsvariablen zu setzen. Befehlszeilenoptionen können benutzt "
+"werden, um Einstellungen in Konfigurationsdateien zu setzen. Einstellungen "
+"in Umgebungsvariablen werden zu diesem Zweck ignoriert. Die derzeit "
+"bekannten Variablen sind:"
+
+#. type: TP
+#: ../scripts/debc.1:108 ../scripts/debdiff.1:237 ../scripts/debi.1:115
+#: ../scripts/debrelease.1:116 ../scripts/debsign.1:123
+#, no-wrap
+msgid "B<DEBRELEASE_DEBS_DIR>"
+msgstr "B<DEBRELEASE_DEBS_DIR>"
+
+#. type: Plain text
+#: ../scripts/debc.1:118
+msgid ""
+"This specifies the directory in which to look for the I<.changes>, I<.deb> "
+"and I<.udeb> files, and is either an absolute path or relative to the top of "
+"the source tree. This corresponds to the B<--debs-dir> command line "
+"option. This directive could be used, for example, if you always use "
+"B<pbuilder> or B<svn-buildpackage> to build your packages. Note that it "
+"also affects B<debrelease>(1) in the same way, hence the strange name of the "
+"option."
+msgstr ""
+"Dies gibt das Verzeichnis an, in dem nach den I<.changes>-, I<.deb>- und I<."
+"udeb>-Dateien gesucht werden soll und ist entweder ein absoluter Pfad oder "
+"relativ zur Wurzel des Quellverzeichnisses. Dies entspricht der "
+"Befehlszeilenoption B<--debs-dir>. Diese Direktive könnte zum Beispiel "
+"benutzt werden, falls Sie immer B<pbuilder> oder B<svn-buildpackage> "
+"verwenden, um Ihre Pakete zu bauen. Beachten Sie, dass es außerdem "
+"B<debrelease>(1) beeinflusst, daher kommt der außergewöhnliche Name der "
+"Option."
+
+#. type: TP
+#: ../scripts/debc.1:118 ../scripts/debchange.1:419 ../scripts/debclean.1:103
+#: ../scripts/debi.1:125 ../scripts/debrelease.1:125 ../scripts/debuild.1:397
+#: ../doc/devscripts.conf.5:42
+#, no-wrap
+msgid "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL>, B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>"
+msgstr "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL>, B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>"
+
+#. type: Plain text
+#: ../scripts/debc.1:125 ../scripts/debclean.1:110 ../scripts/debi.1:132
+#: ../scripts/debrelease.1:132 ../scripts/debuild.1:404
+msgid ""
+"See the above section B<Directory name checking> for an explanation of these "
+"variables. Note that these are package-wide configuration variables, and "
+"will therefore affect all B<devscripts> scripts which check their value, as "
+"described in their respective manpages and in B<devscripts.conf>(5)."
+msgstr ""
+"Die Erklärung dieser Variablen finden Sie im vorhergehenden Abschnitt "
+"B<Prüfung von Verzeichnisnamen>. Beachten Sie, dass dies paketweite "
+"Konfigurationsvariablen sind und daher alle B<devscripts>-Skripte "
+"beeinflussen, die ihren Wert prüfen. Dies wird in ihren jeweiligen "
+"Handbuchseiten und in B<devscripts.conf>(5) beschrieben."
+
+#. type: Plain text
+#: ../scripts/debc.1:129
+msgid "B<debdiff>(1), B<dpkg-deb>(1), B<devscripts.conf>(5)"
+msgstr "B<debdiff>(1), B<dpkg-deb>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debc.1:131
+msgid ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, based on an original script by "
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+msgstr ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, basierend auf einem Originalskript "
+"von Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/debchange.1:1
+#, no-wrap
+msgid "DEBCHANGE"
+msgstr "DEBCHANGE"
+
+#. type: Plain text
+#: ../scripts/debchange.1:4
+msgid ""
+"debchange - Tool for maintenance of the debian/changelog file in a source "
+"package"
+msgstr ""
+"debchange - Werkzeug zum Verwalten der Datei »debian/changelog« in einem "
+"Quellpaket"
+
+#. type: Plain text
+#: ../scripts/debchange.1:6
+msgid "B<debchange> [I<options>] [I<text> ...]"
+msgstr "B<debchange> [I<Optionen>] [I<Text> …]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:8
+msgid "B<dch> [I<options>] [I<text> ...]"
+msgstr "B<dch> [I<Optionen>] [I<Text> …]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:33
+msgid ""
+"B<debchange> or its alias B<dch> will add a new comment line to the Debian "
+"changelog in the current source tree. This command must be run from within "
+"that tree. If the text of the change is given on the command line, "
+"B<debchange> will run in batch mode and simply add the text, with line "
+"breaks as necessary, at the appropriate place in I<debian/changelog> (or the "
+"changelog specified by options, as described below). If the text given on "
+"the command line is a null string, B<debchange> will run in batch mode "
+"without adding any text. If the text given on the command line is a space "
+"string, B<debchange> will run in batch mode and add a blank changelog "
+"entry. If no text is specified then B<debchange> will run the editor as "
+"determined by B<sensible-editor> for you to edit the file. (The environment "
+"variables B<VISUAL> and B<EDITOR> are used in this order to determine which "
+"editor to use.) Editors which understand the I<+n> option for starting the "
+"editing on a specified line will use this to move to the correct line of the "
+"file for editing. If the editor is quit without modifying the temporary "
+"file, B<debchange> will exit without touching the existing changelog. "
+"B<Note that the changelog is assumed to be encoded with the UTF-8 encoding. "
+"If it is not, problems may occur.> Please see the B<iconv>(1) manpage to "
+"find out how to convert changelogs from legacy encodings. Finally, a "
+"I<changelog> or I<NEWS> file can be created from scratch using the B<--"
+"create> option described below."
+msgstr ""
+"B<debchange> oder dessen Alias B<dch> wird eine neue Kommentarzeile zum "
+"Debian-Changelog im aktuellen Quellbaum hinzufügen. Dieser Befehl muss "
+"innerhalb dieses Baums ausgeführt werden. Falls der Text der Änderung auf "
+"der Befehlszeile angegeben wurde, wird B<debchange> im "
+"Stapelverarbeitungsmodus laufen und einfach den Text hinzufügen sowie, falls "
+"nötig, Zeilenumbrüche an der geeigneten Stelle in I<debian/changelog> (oder "
+"dem durch Optionen angegeben Changelog, wie unten beschrieben) hinzufügen. "
+"Falls der auf der Befehlszeile angegebene Text eine Nullzeichenkette ist, "
+"wird B<debchange> im Stapelverarbeitungsmodus ausgeführt ohne einen Text "
+"hinzuzufügen. Falls der auf der Befehlszeile angegebene Text eine "
+"Leerzeichenzeichenkette ist, wird B<debchange> im Stapelverarbeitungsmodus "
+"ausgeführt und fügt einen leeren Changelog-Eintrag hinzu. Falls kein Text "
+"angegeben wurde, wird B<debchange> den durch B<sensible-editor> festgelegten "
+"Editor für Sie öffnen, um die Datei zu bearbeiten. (Die Umgebungsvariablen "
+"B<VISUAL> und B<EDITOR> werden in dieser Reihenfolge verwendet, um "
+"festzustellen, welcher Editor benutzt werden soll). Editoren, die die Option "
+"I<+n> zum Starten der Bearbeitung an einer bestimmten Zeile verstehen, "
+"werden dies benutzen, um zum Bearbeiten an die korrekte Zeile der Datei zu "
+"positionieren. Falls der Editor beendet wird, ohne die temporäre Datei zu "
+"verändern, wird B<debchange> beendet, ohne das existierende Changelog "
+"anzurühren. B<Beachten Sie, dass davon ausgegangen wird, dass das Changelog "
+"in UTF-8 kodiert ist - falls nicht, könnten Probleme auftreten.> Bitte lesen "
+"Sie die Handbuchseite B<iconv>(1), um herauszufinden, wie Changelogs mit "
+"älteren Kodierungen konvertiert werden können. Eine B<changelog>-Datei oder "
+"eine I<NEWS>-Datei kann unter Benutzung der weiter unten beschriebenen "
+"Option B<--create> von Grunde auf erzeugt werden."
+
+#. type: Plain text
+#: ../scripts/debchange.1:46
+msgid ""
+"B<debchange> also supports automatically producing bug-closing changelog "
+"entries, using the B<--closes> option. This will usually query the BTS, the "
+"Debian Bug Tracking System (see https://bugs.debian.org/) to determine the "
+"title of the bug and the package in which it occurs. This behaviour can be "
+"stopped by giving a B<--noquery> option or by setting the configuration "
+"variable B<DEBCHANGE_QUERY_BTS> to I<no>, as described below. In either "
+"case, the editor (as described above) will always be invoked to give an "
+"opportunity to modify the entries, and the changelog will be accepted "
+"whether or not modifications are made. An extra changelog entry can be "
+"given on the command line in addition to the closes entries."
+msgstr ""
+"B<debchange> unterstützt außerdem mittels der Option B<--closes> "
+"automatisches Erzeugen von Changelog-Einträgen, die Fehlerberichte "
+"schließen. Dies wird üblicherweise die Fehlerdatenbank abfragen, das Debian "
+"Bug Tracking System (BTS, siehe https://bugs.debian.org/), um den Titel des "
+"Fehlers und das Paket, in dem er vorkommt, zu bestimmen. Dieses Verhalten "
+"kann durch Angabe der Option B<--noquery> oder dem Setzen der "
+"Konfigurationsvariablen B<DEBCHANGE_QUERY_BTS> auf I<no> beendet werden, wie "
+"nachfolgend beschrieben beendet werden. In beiden Fällen wird der Editor "
+"(wie oben beschrieben) immer aufgerufen, um Gelegenheit zu geben, die "
+"Einträge zu ändern, und das Changelog wird akzeptiert, egal, ob Änderungen "
+"gemacht wurden oder nicht. Ein zusätzlicher Changelog-Eintrag kann auf der "
+"Befehlszeile zu den Einträgen zum Schließen angegeben werden."
+
+#. type: Plain text
+#: ../scripts/debchange.1:53
+msgid ""
+"At most one of B<--append>, B<--increment>, B<--edit>, B<--release>, and B<--"
+"newversion> may be specified as listed below. If no options are specified, "
+"B<debchange> will use heuristics to guess whether or not the package has "
+"been successfully released, and behave as if B<--increment> had been "
+"specified if the package has been released, or otherwise as if B<--append> "
+"has been specified."
+msgstr ""
+"Von B<--append>, B<--increment>, B<--edit>, B<--release> und B<--newversion> "
+"kann höchstens eins, wie unten aufgeführt, benutzt werden. Falls keine "
+"Optionen angegeben wurden, wird B<debchange> Entscheidungsregeln benutzen, "
+"um abzuschätzen, ob ein Paket veröffentlicht wurde oder nicht, und sich so "
+"verhalten, als sei bei der Veröffentlichung des Pakets B<--increment> "
+"angegeben gewesen oder andernfalls, als ob B<--append> angegeben wurde."
+
+#. type: Plain text
+#: ../scripts/debchange.1:68
+msgid ""
+"Two different sets of heuristics can be used, as controlled by the B<--"
+"release-heuristic> option or the B<DEBCHANGE_RELEASE_HEURISTIC> "
+"configuration variable. The default I<changelog> heuristic assumes the "
+"package has been released unless its changelog contains B<UNRELEASED> in the "
+"distribution field. If this heuristic is enabled then the distribution will "
+"default to B<UNRELEASED> in new changelog entries, and the B<--mainttrailer> "
+"option described below will be automatically enabled. This can be useful if "
+"a package can be released by different maintainers, or if you do not keep "
+"the upload logs. The alternate I<log> heuristic determines if a package has "
+"been released by looking for an appropriate B<dupload>(1) or B<dput>(1) log "
+"file in the parent directory. A warning will be issued if the log file is "
+"found but a successful upload is not recorded. This may be because the "
+"previous upload was performed with a version of B<dupload> prior to 2.1 or "
+"because the upload failed."
+msgstr ""
+"Es können zwei verschiedene Zusammenstellungen von Entscheidungsregeln "
+"benutzt werden, was durch die Option B<--release-heuristic> oder die "
+"Konfigurationsdateivariable B<DEBCHANGE_RELEASE_HEURISTIC> geregelt wird. "
+"Die Standard-I<Changelog>-Entscheidungsregel geht davon aus, dass das Paket "
+"veröffentlicht wurde, wenn sein Changelog im Feld »distribution« nicht "
+"B<UNRELEASED> enthält. Falls diese Entscheidungsregel aktiviert ist, wird "
+"die Distribution B<UNRELEASED> in neuen Changelog-Einträgen vorgeben und die "
+"nachfolgend beschriebene Option B<--mainttrailer> wird automatisch "
+"aktiviert. Dies kann nützlich sein, falls ein Paket durch verschiedene "
+"Paketbetreuer veröffentlicht werden kann oder falls Sie die Üpload-"
+"Protokolle nicht aufbewahren. Die alternative I<Protokoll>-"
+"Entscheidungsregel bestimmt, ob ein Paket veröffentlicht wurde, indem es im "
+"übergeordneten Verzeichnis eine geeignete B<dupload>(1)- oder B<dput>(1)-"
+"Protokolldatei sucht. Falls die Protokolldatei gefunden aber kein "
+"erfolgreiches Hochladen aufgezeichnet wurde, wird eine Warnung ausgegeben. "
+"Dies kann daher rühren, dass das vorhergehende Hochladen von einer Version "
+"von B<dupload> vor 2.1 durchgeführt wurde oder das Hochladen fehlschlug."
+
+#. type: Plain text
+#: ../scripts/debchange.1:86
+msgid ""
+"If either B<--increment> or B<--newversion> is used, the name and email for "
+"the new version will be determined as follows. If the environment variable "
+"B<DEBFULLNAME> is set, this will be used for the maintainer full name; if "
+"not, then B<NAME> will be checked. If the environment variable B<DEBEMAIL> "
+"is set, this will be used for the email address. If this variable has the "
+"form \"name E<lt>emailE<gt>\", then the maintainer name will also be taken "
+"from here if neither B<DEBFULLNAME> nor B<NAME> is set. If this variable is "
+"not set, the same test is performed on the environment variable B<EMAIL>. "
+"Next, if the full name has still not been determined, then use "
+"B<getpwuid>(3) to determine the name from the password file. If this fails, "
+"use the previous changelog entry. For the email address, if it has not been "
+"set from B<DEBEMAIL> or B<EMAIL>, then look in I</etc/mailname>, then "
+"attempt to build it from the username and FQDN, otherwise use the email "
+"address in the previous changelog entry. In other words, it's a good idea "
+"to set B<DEBEMAIL> and B<DEBFULLNAME> when using this script."
+msgstr ""
+"Falls entweder B<--increment> oder B<--newversion> benutzt wird, wird der "
+"Name und die E-Mail der neuen Version wie folgt bestimmt. Falls die "
+"Umgebungsvariable B<DEBFULLNAME> gesetzt ist, wird diese für den "
+"vollständigen Namen des Betreuers verwendet; falls nicht, wird B<NAME> "
+"geprüft. Falls die Umgebungsvariable B<DEBEMAIL> gesetzt ist, wird diese für "
+"die E-Mail-Adresse benutzt. Falls diese Variable die Form »Name E<lt>E-"
+"MailE<gt>« hat, dann wird der Betreuername außerdem von hier genommen, wenn "
+"weder B<DEBFULLNAME> noch B<NAME> gesetzt sind. Falls diese Variable nicht "
+"gesetzt ist, wird der gleiche Test für die Umgebungsvariable B<EMAIL> "
+"durchgeführt. Als nächste wird, falls der vollständige Name immer noch nicht "
+"bestimmt wurde, B<getpwuid>(3) verwendet, um den Namen aus der Passwortdatei "
+"zu bestimmen. Falls dies fehlschlägt, wird der vorherige Changelog-Eintrag "
+"benutzt. Für die E-Mail-Adresse wird dann, falls sie nicht von B<DEBEMAIL> "
+"oder B<EMAIL> gesetzt wurde, in I</etc/mailname> nachgesehen, dann wird "
+"versucht, sie aus dem Benutzernamen und dem FQDN zu bilden, andernfalls wird "
+"die E-Mail-Adresse aus dem vorherigen Changelog-Eintrag verwendet. In "
+"anderen Worten: Es ist ein guter Rat, B<DEBEMAIL> und B<DEBFULLNAME> zu "
+"setzen, wenn dieses Skript benutzt wird."
+
+#. type: Plain text
+#: ../scripts/debchange.1:99
+msgid ""
+"Support is included for changelogs that record changes by multiple co-"
+"maintainers of a package. If an entry is appended to the current version's "
+"entries, and the maintainer is different from the maintainer who is listed "
+"as having done the previous entries, then lines will be added to the "
+"changelog to tell which maintainers made which changes. Currently only one "
+"of the several such styles of recording this information is supported, in "
+"which the name of the maintainer who made a set of changes appears on a line "
+"before the changes, inside square brackets. This can be switched on and off "
+"using the B<-->[B<no>]B<multimaint> option or the B<DEBCHANGE_MULTIMAINT> "
+"configuration file option; the default is to enable it. Note that if an "
+"entry has already been marked in this way, then this option will be silently "
+"ignored."
+msgstr ""
+"Für Changelogs, die Änderungen durch mehrere Mitbetreuer eines Pakets "
+"aufzeichnen, ist Unterstützung inbegriffen. Falls ein Eintrag an die "
+"aktuellen Versionseinträge angehängt wird und sich der Betreuer vom Betreuer "
+"unterscheidet, der als derjenige aufgelistet ist, der die letzten Einträge "
+"vorgenommen hat, dann werden dem Changelog Zeilen hinzugefügt, die aussagen, "
+"welcher Betreuer welche Änderungen vorgenommen hat. Derzeit wird nur einer "
+"von mehreren dieser Aufzeichnungsstile für diese Information unterstützt, in "
+"der der Name des Betreuers, der eine Gruppe von Änderungen vorgenommen hat, "
+"in einer Zeile vor den Änderungen in eckigen Klammen erscheint. Dies kann "
+"mittels der Option B<-->[B<no>]B<multimaint> oder der "
+"Konfigurationsdateioption B<DEBCHANGE_MULTIMAINT> ein- und ausgeschaltet "
+"werden; standardmäßig wird es eingeschaltet. Beachten Sie, dass diese "
+"Optionstillschweigend ignoriert wird, falls ein Eintrag bereits auf diese "
+"Art markiert wurde."
+
+#. type: Plain text
+#: ../scripts/debchange.1:105
+msgid ""
+"If the directory name of the source tree has the form I<package>-I<version>, "
+"then B<debchange> will also attempt to rename it if the (upstream) version "
+"number changes. This can be prevented by using the B<--preserve> command "
+"line or configuration file option as described below."
+msgstr ""
+"Falls der Verzeichnisname des Quellverzeichnisbaums die Form I<Paket>-"
+"I<Version> hat, wird B<debchange> außerdem versuchen, ihn umzubenennen, "
+"falls sich die Versionsnummer (der Originalautoren) ändert. Dies kann durch "
+"Verwendung der Befehlszeilen- oder Konfigurationsdateioption B<--preserve> "
+"vermieden werden, wie nachfolgend beschrieben."
+
+#. type: Plain text
+#: ../scripts/debchange.1:109
+msgid ""
+"If B<--force-bad-version> or B<--allow-lower-version> is used, B<debchange> "
+"will not stop if the new version is less than the current one. This is "
+"especially useful while doing backports."
+msgstr ""
+"Falls B<--force-bad-version> oder B<--allow-lower-version> benutzt wird, "
+"wird B<debchange> nicht stoppen, falls die neue Version kleiner als die "
+"aktuelle ist. Dies ist insbesondere beim Zurückportieren nützlich."
+
+#. type: Plain text
+#: ../scripts/debchange.1:120
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debchange> will climb the directory tree until it finds a I<debian/"
+"changelog> file. As a safeguard against stray files causing potential "
+"problems, it will examine the name of the parent directory once it finds the "
+"I<debian/changelog> file, and check that the directory name corresponds to "
+"the package name. Precisely how it does this is controlled by two "
+"configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+"Ebenso wie mehrere andere Skripte im Paket B<devscripts> wird B<debchange> "
+"das Verzeichnis emporsteigen, bis es eine I<debian/changelog>-Datei findet. "
+"Als eine Schutzmaßnahme gegen verirrte Dateien, die potenziell Probleme "
+"bereiten, wird es den Namen des übergeordneten Verzeichnisses untersuchen, "
+"sobald es die I<debian/changelog>-Datei findet, und prüfen, ob dieser "
+"Verzeichnisname dem Paketnamen entspricht. Wie dies genau geschieht, wird "
+"über zwei Konfigurationsdateivariablen geregelt, "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> und B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, "
+"sowie ihre entsprechenden Befehlszeilenoptionen B<--check-dirname-level> und "
+"B<--check-dirname-regex>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:145
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a 'B</>', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'B<PACKAGE>', this will be replaced by the source package name, as "
+"determined from the changelog. The default value for the regex is: "
+"\\'B<PACKAGE(-.+)?>', thus matching directory names such as B<PACKAGE> and "
+"B<PACKAGE->I<version>."
+msgstr ""
+"Der Verzeichnisname wird geprüft, indem getestet wird, ob der aktuelle "
+"Verzeichnisname (wie er durch B<pwd>(1) bestimmt wurde) zum regulären "
+"Ausdruck passt, der durch die Konfigurationsdateioption "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> oder die Befehlszeilenoption B<--check-"
+"dirname-regex> I<regulärer_Ausdruck> angegeben wurde. Hierbei ist "
+"I<regulärer_Ausdruck> ein regulärer Perl-Ausdruck (siehe B<perlre>(3perl)), "
+"der an den Anfang und das Ende verankert wird. Falls I<regulärer_Ausdruck> "
+"ein »/« enthält, muss er auf den vollständigen Verzeichnispfad passen. Falls "
+"nicht, dann muss er auf den vollständigen Verzeichnisnamen passen. Falls "
+"I<regulärer_Ausdruck> die Zeichenkette »B<PACKAGE>« beinhaltet, wird diese "
+"durch den Namen des Quellpakets ersetzt, wie er aus dem Changelog bestimmt "
+"wird. Der vorgegebene Wert für den regulären Ausdruck ist: »B<PACKAGE(-.+)?"
+">«, daher entspricht er Verzeichnisnamen wie B<PACKAGE> und B<PACKAGE-"
+"Version>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:149
+msgid ""
+"The default changelog to be edited is I<debian/changelog>; however, this can "
+"be changed using the B<--changelog> or B<--news> options or the B<CHANGELOG> "
+"environment variable, as described below."
+msgstr ""
+"Das Standard-Changelog, das bearbeitet werden soll, ist I<debian/changelog>; "
+"dies kann jedoch mittels der Optionen B<--changelog>, B<--news> oder der "
+"Umgebungsvariable B<CHANGELOG>, wie nachfolgend beschrieben geändert werden."
+
+#. type: TP
+#: ../scripts/debchange.1:150
+#, no-wrap
+msgid "B<--append>, B<-a>"
+msgstr "B<--append>, B<-a>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:153
+msgid "Add a new changelog entry at the end of the current version's entries."
+msgstr ""
+"fügt einen neuen Changelog-Eintrag an das Ende der Einträge der aktuellen "
+"Version hinzu."
+
+#. type: TP
+#: ../scripts/debchange.1:153
+#, no-wrap
+msgid "B<--increment>, B<-i>"
+msgstr "B<--increment>, B<-i>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:166
+msgid ""
+"Increment either the final component of the Debian release number or, if "
+"this is a native Debian package, the version number. On Ubuntu or Tanglu, "
+"this will also change the suffix from buildX to ubuntu1/tanglu1. Use B<-R>, "
+"B<--rebuild> for a no change rebuild increment. This creates a new section "
+"at the beginning of the changelog with appropriate headers and footers. "
+"Also, if this is a new version of a native Debian package, the directory "
+"name is changed to reflect this. If B<DEBCHANGE_RELEASE_HEURISTIC> is "
+"I<changelog> (default) and the current release is I<UNRELEASED>, this will "
+"only change the version of the current changelog stanza. Otherwise, this "
+"will create a new changelog stanza with the new version."
+msgstr ""
+"Erhöht entweder den letzten Bestandteil der Debian-Veröffentlichungsnummer "
+"oder, falls dies ein natives Debian-Paket ist, die Versionsnummer. Für "
+"Ubuntu oder Tanglu wird dies außerdem die Endung von »buildX« in »ubuntu1« "
+"beziehungsweise »tanglu1« ändern. Benutzen Sie B<-R> oder B<--rebuild> für "
+"ein Erhöhen ohne Änderung beim Neubauen. Dies erstellt am Anfang des "
+"Changelogs einen neuen Abschnitt mit geeigneten Kopf- und Fußzeilen. Falls "
+"dies eine neue Version eines nativen Debian-Pakets ist, wird außerdem der "
+"Verzeichnisname geändert, um dies widerzuspiegeln. Falls "
+"B<DEBCHANGE_RELEASE_HEURISTIC> I<changelog> (Vorgabe) und die aktuelle "
+"Veröffentlichung I<UNRELEASED> ist, wird dies nur die Version des aktuellen "
+"Changelog-Eintrags ändern. Andernfalls wird dies einen neuen Changelog-"
+"Eintrag mit der neuen Version erstellen."
+
+#. type: TP
+#: ../scripts/debchange.1:166
+#, no-wrap
+msgid "B<--newversion >I<version>, B<-v >I<version>"
+msgstr "B<--newversion >I<Version>, B<-v >I<Version>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:176
+msgid ""
+"This specifies the version number (including the Debian release part) "
+"explicitly and behaves as the B<--increment> option in other respects. It "
+"will also change the directory name if the upstream version number has "
+"changed. If B<DEBCHANGE_RELEASE_HEURISTIC> is I<changelog> (default) and "
+"the current release is I<UNRELEASED>, this will only change the version of "
+"the current changelog stanza. Otherwise, this will create a new changelog "
+"stanza with the new version."
+msgstr ""
+"Dies gibt die Versionsnummer (einschließlich des Debian-"
+"Veröffentlichungsteils) explizit an und verhält sich ansonsten wie die "
+"Option B<--increment>. Es wird außerdem den Verzeichnisnamen ändern, falls "
+"sich die Versionsnummer des Originalpakets geändert hat. Falls "
+"B<DEBCHANGE_RELEASE_HEURISTIC> I<changelog> (Vorgabe) und die aktuelle "
+"Veröffentlichung I<UNRELEASED> ist, wird dies nur die Version des aktuellen "
+"Changelog-Eintrags ändern. Andernfalls wird dies einen neuen Changelog-"
+"Eintrag mit der neuen Version erstellen."
+
+#. type: TP
+#: ../scripts/debchange.1:176
+#, no-wrap
+msgid "B<--edit>, B<-e>"
+msgstr "B<--edit>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:179
+msgid "Edit the changelog in an editor."
+msgstr "bearbeitet das Changelog in einem Editor."
+
+#. type: TP
+#: ../scripts/debchange.1:179
+#, no-wrap
+msgid "B<--release>, B<-r>"
+msgstr "B<--release>, B<-r>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:188
+#, fuzzy
+#| msgid ""
+#| "Finalize the changelog for a release. Update the changelog timestamp. If "
+#| "the distribution is set to B<UNRELEASED>, change it to the distribution "
+#| "from the previous changelog entry (or another distribution as specified "
+#| "by B<--distribution>). If there are no previous changelog entries and an "
+#| "explicit distribution has not been specified, B<unstable> will be used."
+msgid ""
+"Finalize the changelog for a release. Update the changelog timestamp. If "
+"the distribution is set to B<UNRELEASED>, change it to the distribution from "
+"the previous changelog entry (or another distribution as specified by B<--"
+"distribution>). If there are no previous changelog entries and an explicit "
+"distribution has not been specified, B<unstable> will be used (or the name "
+"of the current development release when run under Ubuntu)."
+msgstr ""
+"vollendet das Changelog für eine Veröffentlichung; aktualisiert den "
+"Zeitstempel des Changelogs. Falls die Distribution auf B<UNRELEASED> gesetzt "
+"ist, wird sie auf die Distribution des letzten Changelog-Eintrags geändert "
+"(oder eine andere Distribution, die mit B<--distribution> angegeben wurde). "
+"Falls es keine vorhergehenden Changelog-Einträge gibt und keine Distribution "
+"explizit angegeben wurde, wird B<unstable> verwendet."
+
+#. type: TP
+#: ../scripts/debchange.1:188
+#, no-wrap
+msgid "B<--force-save-on-release>"
+msgstr "B<--force-save-on-release>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:193
+msgid ""
+"When B<--release> is used, an editor is opened to allow inspection of the "
+"changelog. The user is required to save the file to accept the modified "
+"changelog, otherwise the original will be kept (default)."
+msgstr ""
+"Wenn B<--release> benutzt wird, wird ein Editor geöffnet, um die Prüfung des "
+"Changelogs zu ermöglichen. Der Benutzer wird aufgefordert, die Datei zu "
+"sichern, um das geänderte Changelog zu akzeptieren, andernfalls wird das "
+"Original beibehalten (Vorgabe)."
+
+#. type: TP
+#: ../scripts/debchange.1:193
+#, no-wrap
+msgid "B<--no-force-save-on-release>"
+msgstr "B<--no-force-save-on-release>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:199
+msgid ""
+"Do not do so. Note that a dummy changelog entry may be supplied in order to "
+"achieve the same effect - e.g. B<debchange --release \"\">. The entry will "
+"not be added to the changelog but its presence will suppress the editor."
+msgstr ""
+"Tun Sie das nicht. Beachten Sie, dass dieser ein Schein-Changelog-Eintrag "
+"mitgeliefert werden kann, um den gleichen Effekt zu erzielen – z.B. "
+"B<debchange --release \"\">. Der Eintrag wird dem Changelog nicht "
+"hinzugefügt, aber seine Anwesenheit wird den Editor unterdrücken."
+
+#. type: Plain text
+#: ../scripts/debchange.1:211
+msgid ""
+"This will create a new I<debian/changelog> file (or I<NEWS> if the B<--news> "
+"option is used). You must be in the top-level directory to use this; no "
+"directory name checking will be performed. The package name and version can "
+"either be specified using the B<--package> and B<--newversion> options, "
+"determined from the directory name using the B<--fromdirname> option or "
+"entered manually into the generated I<changelog> file. The maintainer name "
+"is determined from the environment if this is possible, and the distribution "
+"is specified either using the B<--distribution> option or in the generated "
+"I<changelog> file."
+msgstr ""
+"Dies wird eine neue I<debian/changelog>-Datei erstellen (oder I<NEWS>, falls "
+"die Option B<--news> benutzt wird). Sie müssen sich auf der obersten "
+"Verzeichnisebene befinden, um dies zu tun; es wird keine Prüfung des "
+"Verzeichnisnamens durchgeführt. Der Paketname und die Version können "
+"entweder unter Benutzung der Optionen B<--package> und B<--newversion> "
+"angegeben, aus dem Verzeichnisnamen mittels der Option B<--fromdirname> "
+"bestimmt werden oder manuell in die erzeugte I<changelog>-Datei eingegeben "
+"werden. Der Betreuername wird, falls dies möglich ist, aus der Umgebung "
+"bestimmt und die Distribution wird entweder mittels der Option B<--"
+"distribution> oder in der erzeugten I<changelog>-Datei angegeben."
+
+#. type: TP
+#: ../scripts/debchange.1:211
+#, no-wrap
+msgid "B<--empty>"
+msgstr "B<--empty>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:218
+msgid ""
+"When used in combination with B<--create>, suppress the automatic addition "
+"of an \"B<initial release>\" changelog entry (so that the next invocation of "
+"B<debchange> adds the first entry). Note that this will cause a B<dpkg-"
+"parsechangelog> warning on the next invocation due to the lack of changes."
+msgstr ""
+"Wenn dies in Kombination mit B<--create> benutzt wird, unterdrückt es den "
+"automatischen Zusatz eines »B<initial release>«-Changelog-Eintrags (so dass "
+"der nächste Eintrag von B<debchange> den ersten Eintrag hinzufügt). Beachten "
+"Sie, dass dies mangels Änderungen eine B<dpkg-parsechangelog>-Warnung beim "
+"nächsten Aufruf verursacht."
+
+#. type: =item
+#: ../scripts/debchange.1:218 ../scripts/mk-origtargz.pl:72
+#: ../scripts/uscan.pl:1683
+#, no-wrap
+msgid "B<--package> I<package>"
+msgstr "B<--package> I<Paket>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:223
+msgid ""
+"This specifies the package name to be used in the new changelog; this may "
+"only be used in conjunction with the B<--create>, B<--increment> and B<--"
+"newversion> options."
+msgstr ""
+"Dies gibt den Paketnamen an, der im neuen Changelog benutzt werden soll; "
+"dies könnte in Verbindung mit den Optionen B<--create>, B<--increment> und "
+"B<--newversion> verwendet werden."
+
+#. type: TP
+#: ../scripts/debchange.1:223
+#, no-wrap
+msgid "B<--nmu>, B<-n>"
+msgstr "B<--nmu>, B<-n>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:232
+msgid ""
+"Increment the Debian release number for a non-maintainer upload by either "
+"appending a \"B<.1>\" to a non-NMU version number (unless the package is "
+"Debian native, in which case \"B<+nmu1>\" is appended) or by incrementing an "
+"NMU version number, and add an NMU changelog comment. This happens "
+"automatically if the packager is neither in the B<Maintainer> nor the "
+"B<Uploaders> field in I<debian/control>, unless B<DEBCHANGE_AUTO_NMU> is set "
+"to I<no> or the B<--no-auto-nmu> option is used."
+msgstr ""
+"erhöht die Debian-Veröffentlichungsnummer für ein Hochladen durch jemanden, "
+"der nicht Betreuer des Pakets ist (NMU) entweder durch Anhängen von »B<.1>« "
+"an eine nicht NMU-Versionsnummer (sofern es kein natives Debian-Paket ist, "
+"in diesem Fall wird »B<+nmu1>« angehängt) oder durch Erhöhen einer NMU-"
+"Versionsnummer und dem Hinzufügen eines NMU-Changelog-Eintrags. Dies "
+"geschieht automatisch, falls der Paketierer in I<debian/control> weder im "
+"Feld B<Maintainer> noch im Feld B<Uploaders> steht, außer wenn "
+"B<DEBCHANGE_AUTO_NMU> auf I<no> gesetzt ist oder die Option B<--no-auto-nmu> "
+"benutzt wird."
+
+#. type: TP
+#: ../scripts/debchange.1:232
+#, no-wrap
+msgid "B<--bin-nmu>"
+msgstr "B<--bin-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:237
+msgid ""
+"Increment the Debian release number for a binary non-maintainer upload by "
+"either appending a \"B<+b1>\" to a non-binNMU version number or by "
+"incrementing a binNMU version number, and add a binNMU changelog comment."
+msgstr ""
+"erhöht die Debian-Veröffentlichungsnummer für ein binäres Hochladen durch "
+"jemanden, der nicht Betreuer des Pakets ist (NMU) entweder durch Anhängen "
+"von »B<+b1>« an eine nicht binär-NMU-Versionsnummer oder durch Erhöhen einer "
+"binär-NMU-Versionsnummer und Hinzufügen eines binär-NMU-Changelog-Kommentars."
+
+#. type: TP
+#: ../scripts/debchange.1:237
+#, no-wrap
+msgid "B<--qa>, B<-q>"
+msgstr "B<--qa>, B<-q>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:241
+msgid ""
+"Increment the Debian release number for a Debian QA Team upload, and add a "
+"B<QA upload> changelog comment."
+msgstr ""
+"erhöht die Debian-Veröffentlichungsnummer für ein Hochladen durch das Debian-"
+"QA-Team und fügt einen Changelog-Kommentar B<QA upload> hinzu."
+
+#. type: TP
+#: ../scripts/debchange.1:241
+#, no-wrap
+msgid "B<--rebuild>, B<-R>"
+msgstr "B<--rebuild>, B<-R>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:245
+msgid ""
+"Increment the Debian release number for a no-change rebuild by appending a "
+"\"build1\" or by incrementing a rebuild version number."
+msgstr ""
+"erhöht die Debian-Veröffentlichungsnummer für ein Neubauen ohne Änderungen, "
+"indem ein »build1« angehängt oder die Versionsnummer eines neu gebauten "
+"Pakets erhöht wird."
+
+#. type: TP
+#: ../scripts/debchange.1:245
+#, no-wrap
+msgid "B<--security>, B<-s>"
+msgstr "B<--security>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:249
+msgid ""
+"Increment the Debian release number for a Debian Security Team non-"
+"maintainer upload, and add a B<Security Team upload> changelog comment."
+msgstr ""
+"erhöht die Debian-Veröffentlichungsnummer für ein Hochladen durch das Debian-"
+"Sicherheits-Team als NMU und fügt einen Changelog-Kommentar B<Security Team "
+"upload> hinzu."
+
+#. type: TP
+#: ../scripts/debchange.1:249
+#, no-wrap
+msgid "B<--lts>"
+msgstr "B<--lts>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:253
+msgid ""
+"Increment the Debian release number for a LTS Security Team non-maintainer "
+"upload, and add a B<LTS Security Team upload> changelog comment."
+msgstr ""
+"erhöht die Debian-Veröffentlichungsnummer für ein Hochladen durch das LTS-"
+"Sicherheits-Team als NMU und fügt einen Changelog-Kommentar B<LTS Team "
+"upload> hinzu."
+
+#. type: TP
+#: ../scripts/debchange.1:253
+#, no-wrap
+msgid "B<--team>"
+msgstr "B<--team>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:257
+msgid ""
+"Increment the Debian release number for a team upload, and add a B<Team "
+"upload> changelog comment."
+msgstr ""
+"erhöht die Debian-Veröffentlichungsnummer für ein Hochladen durch ein Team "
+"und fügt einen Changelog-Kommentar B<Team upload> hinzu."
+
+#. type: TP
+#: ../scripts/debchange.1:257
+#, no-wrap
+msgid "B<--upstream>, B<-U>"
+msgstr "B<--upstream>, B<-U>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:261
+msgid ""
+"Don't append B<distro-name1> to the version on a derived distribution. "
+"Increment the Debian version."
+msgstr ""
+"hängt nicht B<distro-name1> an die Version einer abgeleiteten Distribution "
+"an, erhöht die Debian-Version."
+
+#. type: TP
+#: ../scripts/debchange.1:261
+#, no-wrap
+msgid "B<--bpo>"
+msgstr "B<--bpo>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:265
+msgid ""
+"Increment the Debian release number for an upload to bullseye-backports, and "
+"add a backport upload changelog comment."
+msgstr ""
+"erhöht die Debian-Veröffentlichungsnummer für ein Hochladen nach bullseye-"
+"backports und fügt einen Changelog-Kommentar »backport upload« hinzu."
+
+#. type: TP
+#: ../scripts/debchange.1:265
+#, no-wrap
+msgid "B<--stable>"
+msgstr "B<--stable>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:269
+msgid ""
+"Increment the Debian release number for an upload to the current stable "
+"release."
+msgstr ""
+"erhöht die Debian-Veröffentlichungsnummer für ein Hochladen in die aktuelle "
+"Stable-Veröffentlichung."
+
+#. type: TP
+#: ../scripts/debchange.1:269
+#, no-wrap
+msgid "B<--local>, B<-l>I<suffix>"
+msgstr "B<--local>, B<-l>I<Endung>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:272
+#, no-wrap
+msgid " Add a suffix to the Debian version number for a local build.\n"
+msgstr ""
+"fügt eine Endung an eine Debian-Versionsnummer für ein lokal gebautes Paket\n"
+"hinzu.\n"
+
+#. type: TP
+#: ../scripts/debchange.1:272
+#, no-wrap
+msgid "B<--force-bad-version>, B<-b>"
+msgstr "B<--force-bad-version>, B<-b>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:276 ../scripts/uupdate.1:66
+msgid ""
+"Force a version number to be less than the current one (e.g., when "
+"backporting)."
+msgstr ""
+"erzwingt, dass eine Versionsnummer niedriger als die aktuelle ist (z.B. wenn "
+"rückportiert wird)."
+
+#. type: TP
+#: ../scripts/debchange.1:276
+#, no-wrap
+msgid "B<--allow-lower-version >I<pattern>"
+msgstr "B<--allow-lower-version >I<Muster>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:280
+msgid ""
+"Allow a version number to be less than the current one if the new version "
+"matches the specified pattern."
+msgstr ""
+"erlaubt, dass eine Versionsnummer niedriger als die aktuelle ist, falls die "
+"neue Versionsnummer zum angegebenen Muster passt."
+
+#. type: TP
+#: ../scripts/debchange.1:280
+#, no-wrap
+msgid "B<--force-distribution>"
+msgstr "B<--force-distribution>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:284
+msgid ""
+"Force the provided distribution to be used, even if it doesn't match the "
+"list of known distributions (e.g. for unofficial distributions)."
+msgstr ""
+"erzwingt, dass die bereitgestellte Distribution benutzt wird, sogar dann, "
+"wenn sie nicht zur Liste der bekannten Distributionen passt (z.B. für "
+"inoffizielle Distributionen)."
+
+#. type: TP
+#: ../scripts/debchange.1:284
+#, no-wrap
+msgid "B<--auto-nmu>"
+msgstr "B<--auto-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:288
+msgid ""
+"Attempt to automatically determine whether a change to the changelog "
+"represents a Non Maintainer Upload. This is the default."
+msgstr ""
+"versucht automatisch zu bestimmen, ob eine Änderung im Changelog für ein "
+"Hochladen durch jemanden, der kein Paketbetreuer ist (NMU), steht. Dies ist "
+"die Voreinstellung."
+
+#. type: TP
+#: ../scripts/debchange.1:288
+#, no-wrap
+msgid "B<--no-auto-nmu>"
+msgstr "B<--no-auto-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:292
+msgid ""
+"Disable automatic NMU detection. Equivalent to setting "
+"B<DEBCHANGE_AUTO_NMU> to I<no>."
+msgstr ""
+"deaktiviert automatische NMU-Erkennung; entspricht dem Setzen von "
+"B<DEBCHANGE_AUTO_NMU> auf I<no>."
+
+#. type: TP
+#: ../scripts/debchange.1:292
+#, no-wrap
+msgid "B<--fromdirname>, B<-d>"
+msgstr "B<--fromdirname>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:302
+msgid ""
+"This will take the upstream version number from the directory name, which "
+"should be of the form I<package>B<->I<version>. If the upstream version "
+"number has increased from the most recent changelog entry, then a new entry "
+"will be made with version number I<version>B<-1> (or I<version> if the "
+"package is Debian native), with the same epoch as the previous package "
+"version. If the upstream version number is the same, this option will "
+"behave in the same way as B<-i>."
+msgstr ""
+"Dies wird die Versionsnummer der Originalautoren vom Verzeichnisnamen "
+"nehmen, der in der Form I<Paket>B<->I<Version> vorliegen sollte. Falls die "
+"Versionsnummer der Originalautoren gegenüber dem neuesten Changelog-Eintrag "
+"erhöht wurde, wird ein neuer Eintrag mit der Versionsnummer I<Version>B<-1> "
+"(oder I<Version>, falls es ein natives Debian-Paket ist) erstellt, mit der "
+"gleichen Epoche wie die vorhergehende Paketversion. Falls die Versionsnummer "
+"der Originalautoren dieselbe ist, wird sich diese Option genauso verhalten "
+"wie B<-i>."
+
+#. type: TP
+#: ../scripts/debchange.1:302
+#, no-wrap
+msgid "B<--closes>I< nnnnn>[B<,>I<nnnnn >...]"
+msgstr "B<--closes>I< nnnnn>[B<,>I<nnnnn >…]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:308
+msgid ""
+"Add changelog entries to close the specified bug numbers. Also invoke the "
+"editor after adding these entries. Will generate warnings if the BTS cannot "
+"be contacted (and B<--noquery> has not been specified), or if there are "
+"problems with the bug report located."
+msgstr ""
+"fügt Changelog-Einträge zum Schließen der angegebenen Fehlernummern hinzu. "
+"Außerdem ruft es den Editor nach dem Hinzufügen dieser Einträge auf. Dies "
+"wird Warnungen erzeugen, falls die Fehlerdatenbank nicht kontaktiert werden "
+"kann (und B<--noquery> nicht angegeben wurde) oder falls es Probleme mit dem "
+"gefundenen Fehlerbericht gibt."
+
+#. type: TP
+#: ../scripts/debchange.1:308
+#, no-wrap
+msgid "B<-->[B<no>]B<query>"
+msgstr "B<-->[B<no>]B<query>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:311
+msgid "Should we attempt to query the BTS when generating closes entries?"
+msgstr ""
+"Soll versucht werden, die Fehlerdatenbank beim Generieren der Einträge zum "
+"Schließen abzufragen?"
+
+#. type: TP
+#: ../scripts/debchange.1:311
+#, no-wrap
+msgid "B<--preserve>, B<-p>"
+msgstr "B<--preserve>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:316
+msgid ""
+"Preserve the source tree directory name if the upstream version number (or "
+"the version number of a Debian native package) changes. See also the "
+"configuration variables section below."
+msgstr ""
+"erhält den Namen des Quellverzeichnisbaums, falls sich die Versionsnummer "
+"der Originalautoren (oder die Versionsnummer eines nativen Debian-Pakets) "
+"ändert. Siehe auch den Konfigurationsdateivariablenabschnitt weiter unten."
+
+#. type: TP
+#: ../scripts/debchange.1:316
+#, no-wrap
+msgid "B<--no-preserve>, B<--nopreserve>"
+msgstr "B<--no-preserve>, B<--nopreserve>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:319
+msgid "Do not preserve the source tree directory name (default)."
+msgstr "erhält den Namen des Quellverzeichnisbaums nicht (Vorgabe)."
+
+#. type: TP
+#: ../scripts/debchange.1:319
+#, no-wrap
+msgid "B<--vendor >I<vendor>"
+msgstr "B<--vendor >I<vendor>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:324
+msgid ""
+"Override the distributor ID over the default returned by dpkg-vendor. This "
+"name is used for heuristics applied to new package versions and for sanity "
+"checking of the target distribution."
+msgstr ""
+"überschreibt die durch Dpkg-vendor zurückgegebene Vorgabekennung mit der des "
+"Distributors. Dieser Name wird für Entscheidungsregeln benutzt, die auf neue "
+"Paketversionen und Plausibilitätsprüfungen der Zieldistribution angewendet "
+"werden."
+
+#. type: TP
+#: ../scripts/debchange.1:324
+#, no-wrap
+msgid "B<--distribution >I<dist>, B<-D >I<dist>"
+msgstr "B<--distribution >I<Distribution>, B<-D >I<Distribution>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:329
+msgid ""
+"Use the specified distribution in the changelog entry being edited, instead "
+"of using the previous changelog entry's distribution for new entries or the "
+"existing value for existing entries."
+msgstr ""
+"benutzt die angegebene Distribution in dem Changelog-Eintrag, der bearbeitet "
+"wird, anstatt die Distribution des vorherigen Changelog-Eintrags für neue "
+"Einträge oder den existierenden Wert für existierende Einträge zu verwenden."
+
+#. type: TP
+#: ../scripts/debchange.1:329
+#, no-wrap
+msgid "B<--urgency >I<urgency>, B<-u >I<urgency>"
+msgstr "B<--urgency >I<Dringlichkeit>, B<-u >I<Dringlichkeit>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:334
+msgid ""
+"Use the specified urgency in the changelog entry being edited, instead of "
+"using the default \"B<medium>\" for new entries or the existing value for "
+"existing entries."
+msgstr ""
+"benutzt die angegebene Dringlichkeit in dem Changelog-Eintrag, der "
+"bearbeitet wird, anstatt die Standarddringlichkeit »B<medium>« für neue "
+"Einträge oder den existierenden Wert für existierende Einträge zu verwenden."
+
+#. type: TP
+#: ../scripts/debchange.1:334
+#, no-wrap
+msgid "B<--changelog >I<file>, B<-c >I<file>"
+msgstr "B<--changelog >I<Datei>, B<-c >I<Datei>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:340
+msgid ""
+"This will edit the changelog I<file> instead of the standard I<debian/"
+"changelog>. This option overrides any B<CHANGELOG> environment variable "
+"setting. Also, no directory traversing or checking will be performed when "
+"this option is used."
+msgstr ""
+"Dies wird das Changelog I<Datei> anstelle des vorgegebenen I<debian/"
+"changelog> bearbeiten. Diese Option setzt jede Einstellung der "
+"Umgebungsvariable B<CHANGELOG> außer Kraft. Außerdem wird kein Durchlaufen "
+"von Verzeichnissen durchgeführt, wenn diese Option benutzt wird."
+
+#. type: TP
+#: ../scripts/debchange.1:340
+#, no-wrap
+msgid "B<--news> [I<newsfile>]"
+msgstr "B<--news> [I<News-Datei>]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:346
+msgid ""
+"This will edit I<newsfile> (by default, I<debian/NEWS>) instead of the "
+"regular changelog. Directory searching will be performed. The changelog "
+"will be examined in order to determine the current package version."
+msgstr ""
+"Dies wird die I<News-Datei> (standardmäßig I<debian/NEWS>) statt des "
+"normalen Changelogs bearbeiten. Es wird eine Verzeichnissuche durchgeführt. "
+"Das Changelog wird untersucht, um die aktuelle Paketversion zu bestimmen."
+
+#. type: TP
+#: ../scripts/debchange.1:346
+#, no-wrap
+msgid "B<-->[B<no>]B<multimaint>"
+msgstr "B<-->[B<no>]B<multimaint>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:351
+msgid ""
+"Should we indicate that parts of a changelog entry have been made by "
+"different maintainers? Default is yes; see the discussion above and also the "
+"B<DEBCHANGE_MULTIMAINT> configuration file option below."
+msgstr ""
+"Soll angezeigt werden, ob Teile des Changelogs durch unterschiedliche "
+"Paketbetreuer erstellt wurden? Vorgabe ist »yes«; siehe die Erörterung "
+"weiter oben und außerdem die Konfigurationsdateioption "
+"B<DEBCHANGE_MULTIMAINT> weiter unten."
+
+#. type: TP
+#: ../scripts/debchange.1:351
+#, no-wrap
+msgid "B<-->[B<no>]B<multimaint-merge>"
+msgstr "B<-->[B<no>]B<multimaint-merge>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:356
+msgid ""
+"Should all changes made by the same author be merged into the same changelog "
+"section? Default is no; see the discussion above and also the "
+"B<DEBCHANGE_MULTIMAINT_MERGE> configuration file option below."
+msgstr ""
+"Sollen alle vom gleichen Autor vorgenommenen Änderungen im selben Abschnitt "
+"des Changelogs zusammengeführt werden? Vorgabe ist »no«; siehe die "
+"Erörterung weiter oben und außerdem die Konfigurationsdateioption "
+"B<DEBCHANGE_MULTIMAINT> weiter unten."
+
+#. type: TP
+#: ../scripts/debchange.1:356
+#, no-wrap
+msgid "B<--maintmaint>, B<-m>"
+msgstr "B<--maintmaint>, B<-m>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:364
+msgid ""
+"Do not modify the maintainer details previously listed in the changelog. "
+"This is useful particularly for sponsors wanting to automatically add a "
+"sponsorship message without disrupting the other changelog details. Note "
+"that there may be some interesting interactions if multi-maintainer mode is "
+"in use; you will probably wish to check the changelog manually before "
+"uploading it in such cases."
+msgstr ""
+"ändert nicht die Paketbetreuereinzelheiten, die vorher im Changelog "
+"aufgeführt wurden. Dies ist insbesondere für Sponsoren nützlich, die "
+"automatisch eine Nachricht bezüglich der Sponsorschaft hinzufügen möchten, "
+"ohne die anderen Changelog-Einzelheiten zu stören. Beachten Sie, dass es "
+"einige interessante Wechselwirkungen geben könnte, falls der Modus für "
+"mehrere Betreuer verwendet wird; Sie möchten in solchen Fällen "
+"wahrscheinlich das Changelog manuell prüfen, ehe Sie das Paket hochladen."
+
+#. type: TP
+#: ../scripts/debchange.1:364
+#, no-wrap
+msgid "B<--controlmaint>, B<-M>"
+msgstr "B<--controlmaint>, B<-M>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:372
+msgid ""
+"Use maintainer details from the I<debian/control> B<Maintainer> field rather "
+"than relevant environment variables (B<DEBFULLNAME>, B<DEBEMAIL>, etc.). "
+"This option might be useful to restore details of the main maintainer in the "
+"changelog trailer after a bogus edit (e.g. when B<-m> was intended but "
+"forgot) or when releasing a package in the name of the main maintainer (e.g. "
+"the team)."
+msgstr ""
+"benutzt Paketbetreuereinzelheiten aus dem I<debian/control>-Feld "
+"B<Maintainer> anstatt aus passenden Umgebungsvariablen (B<DEBFULLNAME>, "
+"B<DEBEMAIL>, etc.). Diese Option könnte nützlich sein, um Einzelheiten des "
+"Hauptpaketbetreuers im Vorspann des Changelogs nach einem falschen "
+"Bearbeiten wiederherzustellen (z.B. wenn B<-m> beabsichtigt war, aber "
+"vergessen wurde) oder wenn ein Paket im Namen des Hauptpaketbetreuers (z.B. "
+"dem Team) veröffentlicht wird."
+
+#. type: TP
+#: ../scripts/debchange.1:372
+#, no-wrap
+msgid "B<-->[B<no>]B<mainttrailer>, B<-t>"
+msgstr "B<-->[B<no>]B<mainttrailer>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:382
+msgid ""
+"If B<mainttrailer> is set, it will avoid modifying the existing changelog "
+"trailer line (i.e. the maintainer and date-stamp details), unless used with "
+"options that require the trailer to be modified (e.g. B<--create>, B<--"
+"release>, B<-i>, B<--qa>, etc.) This option differs from B<--maintmaint> in "
+"that it will use multi-maintainer mode if appropriate, with the exception of "
+"editing the trailer. See also the B<DEBCHANGE_MAINTTRAILER> configuration "
+"file option below."
+msgstr ""
+"Falls B<mainttrailer> gesetzt wurde, werden Änderungen an der existierenden "
+"Changelog-Nachspannzeile vermieden (d.h. die Betreuer- und "
+"Datumsstempeleinzelheiten), es sei denn, es wird mit Optionen verwendet, die "
+"ein Ändern des Nachspanns erfordern (z.B. B<--create>, B<--release>, B<-i>, "
+"B<--qa>, etc.) Diese Option unterscheidet sich von B<--maintmaint>, in dem "
+"es, falls zweckmäßig, den Mehrbetreuermodus mit Ausnahme der Bearbeitung des "
+"Nachspanns benutzt. Siehe auch die Konfigurationsdateioption "
+"B<DEBCHANGE_MULTIMAINT> weiter unten."
+
+#. type: Plain text
+#: ../scripts/debchange.1:386 ../scripts/debchange.1:390
+msgid ""
+"See the above section \"B<Directory name checking>\" for an explanation of "
+"this option."
+msgstr ""
+"Die Erklärung dieser Variablen finden Sie im vorhergehenden Abschnitt "
+"B<Prüfung von Verzeichnisnamen>."
+
+#. type: TP
+#: ../scripts/debchange.1:394
+#, no-wrap
+msgid "B<--release-heuristic> I<log>|I<changelog>"
+msgstr "B<--release-heuristic> I<Protokoll>|I<Changelog>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:399
+msgid ""
+"Controls how B<debchange> determines if a package has been released, when "
+"deciding whether to create a new changelog entry or append to an existing "
+"changelog entry."
+msgstr ""
+"steuert, wie B<debchange> bestimmt, ob ein Paket veröffentlicht wurde, wenn "
+"entschieden wird, ob ein neuer Changelog-Eintrag erstellt oder an einen "
+"existierenden Changelog-Eintrag angehängt wird."
+
+#. type: Plain text
+#: ../scripts/debchange.1:405 ../scripts/debclean.1:93
+#: ../scripts/debrelease.1:105 ../scripts/debsign.1:105
+#: ../scripts/dep3changelog.1:22 ../scripts/dscverify.1:43
+#: ../scripts/nmudiff.1:92 ../scripts/pts-subscribe.1:34
+#: ../scripts/uupdate.1:107 ../scripts/who-uploads.1:51
+msgid "Display version and copyright information and exit successfully."
+msgstr "zeigt Versions- und Copyright-Informationen an und endet erfolgreich."
+
+#. type: TP
+#: ../scripts/debchange.1:411
+#, no-wrap
+msgid "B<DEBCHANGE_PRESERVE>"
+msgstr "B<DEBCHANGE_PRESERVE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:415
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve> command "
+"line parameter being used."
+msgstr ""
+"Falls dieser Parameter auf I<yes> gesetzt ist, ist das dasselbe, als wenn "
+"der Befehlszeilenparameter B<--preserve> benutzt würde."
+
+#. type: TP
+#: ../scripts/debchange.1:415
+#, no-wrap
+msgid "B<DEBCHANGE_QUERY_BTS>"
+msgstr "B<DEBCHANGE_QUERY_BTS>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:419
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--noquery> command "
+"line parameter being used."
+msgstr ""
+"Falls dieser Parameter auf I<no> gesetzt ist, ist das dasselbe, als wenn der "
+"Befehlszeilenparameter B<--noquery> benutzt würde."
+
+#. type: Plain text
+#: ../scripts/debchange.1:426
+msgid ""
+"See the above section \"B<Directory name checking>\" for an explanation of "
+"these variables. Note that these are package-wide configuration variables, "
+"and will therefore affect all B<devscripts> scripts which check their value, "
+"as described in their respective manpages and in B<devscripts.conf>(5)."
+msgstr ""
+"Die Erklärung dieser Variablen finden Sie im vorhergehenden Abschnitt "
+"»B<Prüfung von Verzeichnisnamen>«. Beachten Sie, dass dies paketweite "
+"Konfigurationsvariablen sind und daher alle B<devscripts>-Skripte "
+"beeinflussen, die ihren Wert prüfen. Dies wird in ihren jeweiligen "
+"Handbuchseiten und in B<devscripts.conf>(5) beschrieben."
+
+#. type: TP
+#: ../scripts/debchange.1:426
+#, no-wrap
+msgid "B<DEBCHANGE_RELEASE_HEURISTIC>"
+msgstr "B<DEBCHANGE_RELEASE_HEURISTIC>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:431
+msgid ""
+"Controls how B<debchange> determines if a package has been released, when "
+"deciding whether to create a new changelog entry or append to an existing "
+"changelog entry. Can be either I<log> or I<changelog>."
+msgstr ""
+"steuert, wie B<debchange> bestimmt, ob ein Paket veröffentlicht wurde, wenn "
+"entschieden wird, ob ein neuer Changelog-Eintrag erstellt oder an einen "
+"existierenden Changelog-Eintrag angehängt wird. Dies kann entweder I<log> "
+"oder I<changelog> sein."
+
+#. type: TP
+#: ../scripts/debchange.1:431
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT>"
+msgstr "B<DEBCHANGE_MULTIMAINT>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:436
+msgid ""
+"If set to I<no>, B<debchange> will not introduce multiple-maintainer "
+"distinctions when a different maintainer appends an entry to an existing "
+"changelog. See the discussion above. Default is I<yes>."
+msgstr ""
+"Falls dies auf I<no> gesetzt ist, wird B<debchange> keine Mehrbetreuer-"
+"Unterscheidungen einbauen, wenn ein anderer Betreuer einen Eintrag an ein "
+"existierendes Changelog anhängt. Siehe die vorhergehende Erörterung. Vorgabe "
+"ist I<yes>."
+
+#. type: TP
+#: ../scripts/debchange.1:436
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT_MERGE>"
+msgstr "B<DEBCHANGE_MULTIMAINT_MERGE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:442
+msgid ""
+"If set to I<yes>, when adding changes in multiple-maintainer mode "
+"B<debchange> will check whether previous changes by the current maintainer "
+"exist and add the new changes to the existing block rather than creating a "
+"new block. Default is I<no>."
+msgstr ""
+"Falls diese Variable den Wert I<yes> hat, wird B<debchange> im "
+"Mehrbetreuermodus prüfen, ob es bereits Änderungen durch den aktuellen "
+"Paketbetreuer gibt. Es fügt die neuen Änderungen dem existierenden Block "
+"hinzu, anstatt einen neuen Block zu erstellen. Voreinstellung ist I<no>."
+
+#. type: TP
+#: ../scripts/debchange.1:442
+#, no-wrap
+msgid "B<DEBCHANGE_MAINTTRAILER>"
+msgstr "B<DEBCHANGE_MAINTTRAILER>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:446
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--nomainttrailer> "
+"command line parameter being used."
+msgstr ""
+"Falls dies auf I<no> gesetzt ist, dann entspricht das der Verwendung des "
+"Befehlszeilenparameters B<--nomainttrailer>."
+
+#. type: TP
+#: ../scripts/debchange.1:446
+#, no-wrap
+msgid "B<DEBCHANGE_TZ>"
+msgstr "B<DEBCHANGE_TZ>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:450
+msgid ""
+"Use this timezone for changelog entries. Default is the user/system "
+"timezone as shown by `B<date -R>` and affected by the environment variable "
+"B<TZ>."
+msgstr ""
+"benutzt diese Zeitzone für Changelog-Einträge. Vorgabe ist die Zeitzone von "
+"user/system, wie sie von »B<date -R>« angezeigt und durch die "
+"Umgebungsvariable B<TZ> beeinflusst wird."
+
+#. type: TP
+#: ../scripts/debchange.1:450
+#, no-wrap
+msgid "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+msgstr "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:454
+msgid ""
+"If this is set, then it is the same as the B<--allow-lower-version> command "
+"line parameter being used."
+msgstr ""
+"Falls dies gesetzt ist, dann entspricht das der Verwendung des "
+"Befehlszeilenparameters B<--allow-lower-version>."
+
+#. type: TP
+#: ../scripts/debchange.1:454
+#, no-wrap
+msgid "B<DEBCHANGE_AUTO_NMU>"
+msgstr "B<DEBCHANGE_AUTO_NMU>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:460
+msgid ""
+"If this is set to I<no> then B<debchange> will not attempt to automatically "
+"determine whether the current changelog stanza represents an NMU. The "
+"default is I<yes>. See the discussion of the B<--nmu> option above."
+msgstr ""
+"Falls dies auf I<no> gesetzt ist, wird B<debchange> nicht versuchen, "
+"automatisch zu bestimmen, ob der aktuelle Changelog-Abschnitt einen NMU "
+"darstellt. Die Vorgabe ist I<yes>. Siehe die vorhergehende Erörterung der "
+"Option B<--nmu>."
+
+#. type: TP
+#: ../scripts/debchange.1:460
+#, no-wrap
+msgid "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+msgstr "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:464
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-force-save-on-"
+"release> command line parameter being used."
+msgstr ""
+"Falls dies auf I<no> gesetzt ist, dann entspricht das der Verwendung des "
+"Befehlszeilenparameters B<--no-force-save-on-release>."
+
+#. type: TP
+#: ../scripts/debchange.1:464
+#, no-wrap
+msgid "B<DEBCHANGE_VENDOR>"
+msgstr "B<DEBCHANGE_VENDOR>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:468
+msgid ""
+"Use this vendor instead of the default (dpkg-vendor output). See B<--"
+"vendor> for details."
+msgstr ""
+"benutzt diesen Anbieter statt der Vorgabe (Ausgabe von Dpkg-vendor). "
+"Einzelheiten finden Sie unter B<--vendor>."
+
+#. type: =head1
+#: ../scripts/debchange.1:468 ../scripts/dep3changelog.1:22
+#: ../doc/devscripts.1:16 ../doc/devscripts.1:20 ../scripts/ltnu.pod:68
+#: ../scripts/mass-bug.pl:136 ../scripts/mk-build-deps.pl:126
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "UMGEBUNGSVARIABLEN"
+
+#. type: TP
+#: ../scripts/debchange.1:469 ../scripts/dep3changelog.1:23
+#, no-wrap
+msgid "B<DEBEMAIL>, B<EMAIL>, B<DEBFULLNAME>, B<NAME>"
+msgstr "B<DEBEMAIL>, B<EMAIL>, B<DEBFULLNAME>, B<NAME>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:472 ../scripts/dep3changelog.1:26
+msgid "See the above description of the use of these environment variables."
+msgstr ""
+"Siehe die vorhergehende Beschreibung über die Benutzung dieser "
+"Umgebungsvariablen."
+
+#. type: TP
+#: ../scripts/debchange.1:472
+#, no-wrap
+msgid "B<CHANGELOG>"
+msgstr "B<CHANGELOG>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:478
+msgid ""
+"This variable specifies the changelog to edit in place of I<debian/"
+"changelog>. No directory traversal or checking is performed when this "
+"variable is set. This variable is overridden by the B<--changelog> command-"
+"line setting."
+msgstr ""
+"Diese Variable gibt an, welches Changelog anstelle von I<debian/changelog> "
+"bearbeitet wird. Es wird kein Verzeichnisdurchlauf und keine "
+"Verzeichnisüberprüfung durchgeführt, wenn diese Variable gesetzt ist. Diese "
+"Variable wird durch die Befehlszeileneinstellung B<--changelog> außer Kraft "
+"gesetzt."
+
+#. type: TP
+#: ../scripts/debchange.1:478
+#, no-wrap
+msgid "B<VISUAL>, B<EDITOR>"
+msgstr "B<VISUAL>, B<EDITOR>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:482
+msgid ""
+"These environment variables (in this order) determine the editor used by "
+"B<sensible-editor>."
+msgstr ""
+"Diese Umgebungsvariablen legen (in dieser Reihenfolge) fest, welcher Editor "
+"durch B<sensible-editor> benutzt wird."
+
+#. type: Plain text
+#: ../scripts/debchange.1:488
+msgid ""
+"B<debc>(1), B<debclean>(1), B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+msgstr ""
+"B<debc>(1), B<debclean>(1), B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debchange.1:491
+msgid ""
+"The original author was Christoph Lameter E<lt>clameter@debian.orgE<gt>. "
+"Many substantial changes and improvements were made by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Der ursprüngliche Autor war Christoph Lameter E<lt>clameter@debian.orgE<gt>. "
+"Viele bedeutende Änderungen und Verbesserungen wurden von Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> beigetragen."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:26
+msgid "debcheckout - checkout the development repository of a Debian package"
+msgstr "debcheckout - checkt das Entwicklerdepot eines Debian-Pakets aus"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:32
+msgid "B<debcheckout> [I<OPTIONS>] I<PACKAGE> [I<DESTDIR>]"
+msgstr "B<debcheckout> [I<OPTIONEN>] I<PAKET> [I<ZIELVERZEICHNIS>]"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:34
+msgid "B<debcheckout> [I<OPTIONS>] I<REPOSITORY_URL> [I<DESTDIR>]"
+msgstr "B<debcheckout> [I<OPTIONEN>] I<DEPOT_URL> [I<ZIELVERZEICHNIS>]"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:36
+msgid "B<debcheckout> B<--help>"
+msgstr "B<debcheckout> B<--help>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:42
+msgid ""
+"B<debcheckout> retrieves the information about the Version Control System "
+"used to maintain a given Debian package (the I<PACKAGE> argument), and then "
+"checks out the latest (potentially unreleased) version of the package from "
+"its repository. By default the repository is checked out to the I<PACKAGE> "
+"directory; this can be overridden by providing the I<DESTDIR> argument."
+msgstr ""
+"B<debcheckout> fragt die Informationen über das Versionskontrollsystem ab, "
+"das zur Verwaltung eines angegebenen Debian-Pakets verwendet wird (das "
+"Argument I<PAKET>), und checkt dann die neueste (möglicherweise "
+"unveröffentlichte) Version des Pakets aus dem Depot aus. Standardmäßig wird "
+"das Depot in das I<PAKET>verzeichnis ausgecheckt; dies kann durch Angabe des "
+"Arguments I<ZIELVERZEICHNIS> außer Kraft gesetzt werden."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:48
+msgid ""
+"The information about where the repository is available is expected to be "
+"found in B<Vcs-*> fields available in the source package record. For "
+"example, the B<vim> package exposes such information with a field like "
+"S<B<Vcs-Hg: http://hg.debian.org/hg/pkg-vim/vim>>, you can see it by "
+"grepping through B<apt-cache showsrc vim>."
+msgstr ""
+"Es wird erwartet, dass die Informationen, wo das Depot verfügbar ist, in den "
+"B<Vcs-*>-Feldern im Quellpaketdatensatz stehen. Das Paket B<vim> stellt zum "
+"Beispiel solche Informationen mit einem Feld wie S<B<Vcs-Hg: http://hg."
+"debian.org/hg/pkg-vim/vim>> dar. Sie können es mit Grep in der Ausgabe von "
+"B<apt-cache showsrc vim> sehen."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:54
+msgid ""
+"If more than one source package record containing B<Vcs-*> fields is "
+"available, B<debcheckout> will select the record with the highest version "
+"number. Alternatively, a particular version may be selected from those "
+"available by specifying the package name as I<PACKAGE>=I<VERSION>."
+msgstr ""
+"Falls mehr als ein Quellpaketdatensatz verfügbar ist, der B<Vcs-*>-Felder "
+"enthält, wird B<debcheckout> den Datensatz mit der höchsten Versionsnummer "
+"auswählen. Alternativ kann eine bestimmte Version aus den verfügbaren "
+"Versionen ausgewählt werden, indem der Paketname als I<PAKET>=I<VERSION> "
+"angegeben wird."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:59
+msgid ""
+"If you already know the URL of a given repository you can invoke "
+"B<debcheckout> directly on it, but you will probably need to pass the "
+"appropriate B<-t> flag. That is, some heuristics are in use to guess the "
+"repository type from the URL; if they fail, you might want to override the "
+"guessed type using B<-t>."
+msgstr ""
+"Falls Sie bereits die URL eines angegebenen Depots kennen, können Sie "
+"B<debcheckout> direkt damit aufrufen, aber Sie werden wahrscheinlich den "
+"passenden B<-t>-Schalter übergeben müssen. Das heißt, es werden einige "
+"Entscheidungsregeln verwendet, um den Depottyp aus der URL zu ermitteln; "
+"falls sie fehlschlagen, möchten Sie möglicherweise den geratenen Typ mittels "
+"B<-t> außer Kraft setzen."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:65
+msgid ""
+"The currently supported version control systems are: Arch (arch), Bazaar "
+"(bzr), CVS (cvs), Darcs (darcs), Git (git), Mercurial (hg) and Subversion "
+"(svn)."
+msgstr ""
+"Die derzeit unterstützten Versionskontrollsysteme sind: Arch (arch), Bazaar "
+"(bzr), CVS (cvs), Darcs (darcs), Git (git), Mercurial (hg) und Subversion "
+"(svn)."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:70
+msgid "B<GENERAL OPTIONS>"
+msgstr "B<ALLGEMEINE OPTIONEN>"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:74
+msgid "B<-a>, B<--auth>"
+msgstr "B<-a>, B<--auth>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:76
+msgid ""
+"Work in authenticated mode; this means that for known repositories (mainly "
+"those hosted on S<I<https://salsa.debian.org>>) URL rewriting is attempted "
+"before checking out, to ensure that the repository can be committed to. For "
+"example, for Git repositories hosted on Salsa this means that S<I<git@salsa."
+"debian.org:...git>> will be used instead of S<I<https://salsa.debian.org/..."
+"git>>."
+msgstr ""
+"arbeitet im authentifizierten Modus; dies bedeutet, dass für bekannte URLs "
+"(hauptsächlich die auf S<I<https://salsa.debian.org>> bereitgestellten) vor "
+"dem Auschecken versucht wird, die URL umzuschreiben, um sicherzustellen, "
+"dass in das Depot geschrieben werden kann. Für Git-Depots, die auf Salsa "
+"bereitgestellt sind, bedeutet das beispielsweise, dass S<I<git@salsa.debian."
+"org:…git>> anstelle von S<I<https://salsa.debian.org/…git>> benutzt wird."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:83
+#, fuzzy
+#| msgid ""
+#| "There are built-in rules for salsa.debian.org, alioth.debian.org and "
+#| "github.com. Other hosts can be configured using B<DEBCHECKOUT_AUTH_URLS>."
+msgid ""
+"There are built-in rules for salsa.debian.org and github.com. Other hosts "
+"can be configured using B<DEBCHECKOUT_AUTH_URLS>."
+msgstr ""
+"Es gibt integrierte Regeln für salsa.debian.org, alioth.debian.org und "
+"github.com. Andere Server können mittels B<DEBCHECKOUT_AUTH_URLS> "
+"konfiguriert werden."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:86
+msgid "B<-d>, B<--details>"
+msgstr "B<-d>, B<--details>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:88
+msgid ""
+"Only print a list of detailed information about the package repository, "
+"without checking it out; the output format is a list of fields, each field "
+"being a pair of TAB-separated field name and field value. The actual fields "
+"depend on the repository type. This action might require a network "
+"connection to the remote repository."
+msgstr ""
+"gibt nur eine detaillierte Information über das Paketdepot aus, ohne sie "
+"auszuchecken; das Ausgabeformat ist eine Liste von Feldern, von denen jedes "
+"Feld ein Paar von durch Tabulator getrenntem Feldnamen und Feldwert ist. Die "
+"tatsächlichen Felder hängen vom Depottyp ab. Diese Aktion könnte eine "
+"Netzwerkverbindung zu einem fernen Depot erfordern."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:94
+msgid "Also see B<-p>. This option and B<-p> are mutually exclusive."
+msgstr "Siehe auch B<-p>. Diese Option und B<-p> sind wechselseitig exklusiv."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:98
+msgid "Print a detailed help message and exit."
+msgstr "gibt eine detaillierte Hilfenachricht aus und wird beendet."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:100
+msgid "B<-p>, B<--print>"
+msgstr "B<-p>, B<--print>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:102
+msgid ""
+"Only print a summary about package repository information, without checking "
+"it out; the output format is TAB-separated with two fields: repository type, "
+"repository URL. This action works offline, it only uses \"static\" "
+"information as known by APT's cache."
+msgstr ""
+"gibt nur eine Zusammenfassung über die Paketdepotinformation aus, ohne sie "
+"auszuchecken; das Ausgabeformat sind zwei durch Tabulator getrennte Felder: "
+"Depottyp und Depot-URL. Diese Aktion funktioniert offline, sie benutzt "
+"»statische« Informationen, wie sie durch APTs Zwischenspeicher bekannt sind."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:107
+msgid "Also see B<-d>. This option and B<-d> are mutually exclusive."
+msgstr "Siehe auch B<-d>. Diese Option und B<-d> sind wechselseitig exklusiv."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:109
+msgid "B<-P> I<package>, B<--package> I<package>"
+msgstr "B<-P> I<Paket>, B<--package> I<Paket>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:111
+msgid ""
+"When checking out a repository URL, instead of trying to guess the package "
+"name from the URL, use this package name."
+msgstr ""
+"Wenn ein Depot von einer URL heruntergeladen wird, anstatt zu versuchen, den "
+"Paketnamen anhand des Namens der URL zu erraten, wird dieser Paketname "
+"benutzt."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:114
+msgid "B<-t> I<TYPE>, B<--type> I<TYPE>"
+msgstr "B<-t> I<TYP>, B<--type> I<TYP>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:116
+msgid ""
+"Override the repository type (which defaults to some heuristics based on the "
+"URL or, in case of heuristic failure, the fallback \"git\"); should be one "
+"of the currently supported repository types."
+msgstr ""
+"setzt den Depottyp außer Kraft (der einige Entscheidungsregeln, basierend "
+"auf der URL oder im Fall dass diese Entscheidungsregeln nicht zutreffen, des "
+"Rückfallwerts »git«, als Standard übernimmt); sollte einer der derzeit "
+"unterstützten Depottypen sein"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:120
+msgid "B<-u> I<USERNAME>, B<--user> I<USERNAME>"
+msgstr "B<-u> I<BENUTZERNAME>, B<--user> I<BENUTZERNAME>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:122
+msgid ""
+"Specify the login name to be used in authenticated mode (see B<-a>). This "
+"option implies B<-a>: you don't need to specify both."
+msgstr ""
+"gibt den Anmeldenamen an, der im authentifizierten Modus (siehe B<-a>) "
+"benutzt werden soll. Diese Option impliziert B<-a>: Sie müssen nicht beides "
+"angeben."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:125
+msgid "B<-f> I<FILE>, B<--file> I<FILE>"
+msgstr "B<-f >I<DATEI>, B<--file=>I<DATEI>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:127
+msgid ""
+"Specify that the named file should be extracted from the repository and "
+"placed in the destination directory. May be used more than once to extract "
+"multiple files."
+msgstr ""
+"gibt an, dass die genannte Datei aus dem Depot extrahiert und im "
+"Zielverzeichnis abgelegt werden soll; kann mehrfach benutzt werden, um "
+"mehrere Dateien zu extrahieren."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:131
+msgid "B<--source=never>|B<auto>|B<download-only>|B<always>"
+msgstr "B<--source=never>|B<auto>|B<download-only>|B<always>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:133
+msgid ""
+"Some packages only place the F<debian> directory in version control. "
+"B<debcheckout> can retrieve the remaining parts of the source using B<apt-"
+"get source> and move the files into the checkout."
+msgstr ""
+"Einige Pakete legen nur das Verzeichnis F<debian> in die Versionskontrolle "
+"ab. B<debcheckout> kann die verbleibenden Teile der Quelle mittels B<apt-get "
+"source> abrufen und die Dateien in die ausgecheckte Version verschieben."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:139
+msgid "B<never>"
+msgstr "B<never>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:141
+msgid "Only use the repository."
+msgstr "verwendet nur das Depot."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:143
+msgid "B<auto> (default)"
+msgstr "B<auto> (Vorgabe)"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:145
+msgid ""
+"If the repository only contains the F<debian> directory, retrieve the source "
+"package, unpack it, and also place the F<.orig.tar.gz> file into the current "
+"directory. Else, do nothing."
+msgstr ""
+"ruft, falls das Depot nur das Verzeichnis F<debian> enthält, das Quellpaket "
+"ab, entpackt es und platziert außerdem die F<.orig.tar.gz>-Datei in das "
+"aktuelle Verzeichnis. Tut ansonsten nichts."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:149
+msgid "B<download-only>"
+msgstr "B<download-only>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:151
+msgid "Always retrieve the I<.orig.tar.gz> file, but do not unpack it."
+msgstr "ruft immer die F<.orig.tar.gz>-Datei ab, entpackt sie aber nicht."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:153
+msgid "B<always>"
+msgstr "B<always>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:155
+msgid ""
+"Always retrieve the I<.orig.tar.gz> file, and if the repository only "
+"contains the F<debian> directory, unpack it."
+msgstr ""
+"ruft immer die F<.orig.tar.gz>-Datei ab und entpackt sie, falls das Depot "
+"nur das Verzeichnis F<debian> enthält."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:162
+msgid "B<VCS-SPECIFIC OPTIONS>"
+msgstr "B<VCS-SPEZIFISCHE OPTIONEN>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:164
+msgid "I<GIT-SPECIFIC OPTIONS>"
+msgstr "I<GIT-SPEZIFISCHE OPTIONEN>"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:168
+msgid "B<--git-track> I<BRANCHES>"
+msgstr "B<--git-track> I<ZWEIGE>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:170
+msgid ""
+"Specify a list of remote branches which will be set up for tracking (as in "
+"S<B<git branch --track>>, see B<git-branch>(1)) after the remote Git "
+"repository has been cloned. The list should be given as a space-separated "
+"list of branch names."
+msgstr ""
+"gibt eine Liste von fernen Zweigen an, die für die Verfolgung (wie in "
+"S<B<git branch --track>>, siehe B<git-branch>(1)) eingerichtet werden, "
+"nachdem das ferne Git-Depot geklont wurde. Die Liste sollte als "
+"leerzeichengetrennte Liste der Zweignamen angegeben werden."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:175
+msgid ""
+"As a shorthand, the string \"B<*>\" can be given to require tracking of all "
+"remote branches."
+msgstr ""
+"Als Abkürzung kann die Zeichenkette »B<*>« angegeben werden, damit die "
+"Verfolgung aller fernen Zweige verlangt wird."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:182 ../scripts/rmadison.pl:357
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+"Die beiden Konfigurationsdateien F</etc/devscripts.conf> und F<~/."
+"devscripts> werden in dieser Reihenfolge von einer Shell eingelesen, um "
+"Konfigurationsvariablen zu setzen. Befehlszeilenoptionen können benutzt "
+"werden, um Einstellungen in Konfigurationsdateien außer Kraft zu setzen. "
+"Umgebungsvariablen werden zu diesem Zweck ignoriert. Die derzeit bekannten "
+"Variablen sind:"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:190
+msgid "B<DEBCHECKOUT_AUTH_URLS>"
+msgstr "B<DEBCHECKOUT_AUTH_URLS>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:192
+msgid ""
+"This variable should be a space separated list of Perl regular expressions "
+"and replacement texts, which must come in pairs: I<REGEXP> I<TEXT> I<REGEXP> "
+"I<TEXT> ... and so on. Each pair denotes a substitution which is applied to "
+"repository URLs if other built-in means of building URLs for authenticated "
+"mode (see B<-a>) have failed."
+msgstr ""
+"Diese Variable sollte eine leerzeichengetrennte Liste regulärer Perl-"
+"Ausdrücke und Ersetzungstexte sein, die paarweise vorkommen müssen: "
+"I<REGEXP> I<TEXT> I<REGEXP> I<TEXT> … und so fort. Jedes Paar bezeichnet "
+"eine Ersetzung, die auf Depot-URLs angewendet wird, falls andere integrierte "
+"Mittel von Bau-URLs für den authentifizierten Modus (siehe B<-a>) "
+"fehlgeschlagen sind."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:198
+msgid ""
+"References to matching substrings in the replacement texts are allowed as "
+"usual in Perl by the means of B<$1>, B<$2>, ... and so on."
+msgstr ""
+"Bezüge auf passende Teilzeichenketten in Ersetzungstexten sind, wie in Perl "
+"üblich, durch die Mittel von B<$1>, B<$2>, … und so weiter erlaubt."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:201
+msgid ""
+"This setting is used to configure the \"authenticated mode\" location for "
+"repositories. The Debian repositories on S<salsa.debian.org> are implicitly "
+"defined, as is S<github.com>."
+msgstr ""
+"Diese Einstellung kann benutzt werden, um den Ort des »authentifizierten "
+"Modus« für Depots einzuschalten. Die Debian-Depots auf S<salsa.debian.org> "
+"werden implizit definiert, wie auch S<github.com>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:205
+msgid "Here is a sample snippet suitable for the configuration files:"
+msgstr ""
+"Hier ist ein für Konfigurationsdateien geeigneter Beispielcodeschnipsel:"
+
+#. type: verbatim
+#: ../scripts/debcheckout.pl:207
+#, no-wrap
+msgid ""
+" DEBCHECKOUT_AUTH_URLS='\n"
+" ^\\w+://(svn\\.example\\.com)/(.*) svn+ssh://$1/srv/svn/$2\n"
+" ^\\w+://(git\\.example\\.com)/(.*) git+ssh://$1/home/git/$2\n"
+" '\n"
+"\n"
+msgstr ""
+" DEBCHECKOUT_AUTH_URLS='\n"
+" ^\\w+://(svn\\.example\\.com)/(.*) svn+ssh://$1/srv/svn/$2\n"
+" ^\\w+://(git\\.example\\.com)/(.*) git+ssh://$1/home/git/$2\n"
+" '\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:212
+msgid ""
+"Note that whitespace is not allowed in either regexps or replacement texts. "
+"Also, given that configuration files are sourced by a shell, you probably "
+"want to use single quotes around the value of this variable."
+msgstr ""
+"Beachten Sie, dass weder in Regexps noch in Ersetzungstext Leerräume erlaubt "
+"sind. Da Konfigurationsdateien von einer Shell eingelesen werden, ist es "
+"wahrscheinlich wünschenswert, einzelne Anführungszeichen um den Wert dieser "
+"Variable zu verwenden."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:217
+msgid "B<DEBCHECKOUT_SOURCE>"
+msgstr "B<DEBCHECKOUT_SOURCE>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:219
+msgid ""
+"This variable determines under what scenarios the associated orig.tar.gz for "
+"a package will be downloaded. See the B<--source> option for a description "
+"of the values."
+msgstr ""
+"Diese Variable bestimmt, in welchen Szenarien die zugehörige orig.tar.gz für "
+"ein Paket heruntergeladen wird. Eine Beschreibung der Werte finden Sie unter "
+"der Option B<--source>."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:223
+msgid "B<DEBCHECKOUT_USER>"
+msgstr "B<DEBCHECKOUT_USER>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:225
+msgid ""
+"This variable sets the username for authenticated mode. It can be overridden "
+"with the B<--user> option. Setting this variable does not imply the use of "
+"authenticated mode, it still has to be activated with B<--auth>."
+msgstr ""
+"Diese Variable setzt den Benutzernamen für den authentifizierten Modus. Sie "
+"kann mit der Option B<--user> außer Kraft gesetzt werden. Das Setzen dieser "
+"Variable bedeutet nicht, dass der authentifizierte Modus verwendet wird, er "
+"muss nach wie vor mit B<--auth> aktiviert werden."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:233
+msgid ""
+"B<apt-cache>(8), Section 6.2.5 of the Debian Developer's Reference (for more "
+"information about B<Vcs-*> fields): S<I<https://www.debian.org/doc/"
+"developers-reference/best-pkging-practices.html#bpp-vcs>>."
+msgstr ""
+"B<apt-cache>(8), Abschnitt 6.2.5 der Debian Entwickler-Referenz (weitere "
+"Informationen über B<Vcs-*>-Felder finden Sie unter S<I<https://www.debian."
+"org/doc/manuals/developers-reference/best-pkging-practices.de.html#bpp-vcs>>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:238
+msgid ""
+"B<debcheckout> and this manpage have been written by Stefano Zacchiroli "
+"<I<zack@debian.org>>."
+msgstr ""
+"B<debcheckout> und diese Handbuchseite wurden von Stefano Zacchiroli "
+"<I<zack@debian.org>> geschrieben."
+
+#. type: TH
+#: ../scripts/debclean.1:1
+#, no-wrap
+msgid "DEBCLEAN"
+msgstr "DEBCLEAN"
+
+#. type: Plain text
+#: ../scripts/debclean.1:4
+msgid "debclean - clean up a sourcecode tree"
+msgstr "debclean - bereinigt einen Quellcodeverzeichnisbaum"
+
+#. type: Plain text
+#: ../scripts/debclean.1:6
+msgid "B<debclean> [I<options>]"
+msgstr "B<debclean> [I<Optionen>]"
+
+#. type: Plain text
+#: ../scripts/debclean.1:13
+msgid ""
+"B<debclean> walks through the directory tree starting at the directory tree "
+"in which it was invoked, and executes I<debuild -- clean> for each Debian "
+"source directory encountered. These directories are recognised by "
+"containing a debian/changelog file for a package whose name matches that of "
+"the directory. Name matching is described below."
+msgstr ""
+"B<debclean> durchläuft den Verzeichnisbaum, beginnend mit dem "
+"Verzeichnisbaum, aus dem es aufgerufen wurde und führt I<debuild --clean> "
+"für jedes gefundene Debian-Quellverzeichnis aus. Diese Verzeichnisse werden "
+"daran erkannt, dass sie eine debian/changelog-Datei für ein Paket enthalten, "
+"dessen Name zu dem des Verzeichnisses passt. Wann Namen passen, wird im "
+"Folgenden beschrieben."
+
+#. type: Plain text
+#: ../scripts/debclean.1:16
+msgid ""
+"If B<debclean> is invoked from a directory that is already a Debian source "
+"package, it will not descend into its subdirectories."
+msgstr ""
+"Falls B<debclean> aus einem Verzeichnis aufgerufen wird, das bereits ein "
+"Debian-Quellpaket ist, wird es nicht in dessen Unterverzeichnisse "
+"hinabsteigen."
+
+#. type: Plain text
+#: ../scripts/debclean.1:25
+msgid ""
+"Also, if the B<--cleandebs> option is given, then in every directory "
+"containing a Debian source tree, all files named *.deb, *.changes and *."
+"build are removed. The .dsc, .diff.gz and the (.orig).tar.gz files are not "
+"touched so that the release can be reconstructed if necessary, and the ."
+"upload files are left so that B<debchange> functions correctly. The B<--"
+"nocleandebs> option prevents this extra cleaning behaviour and the B<--"
+"cleandebs> option forces it. The default is not to clean these files."
+msgstr ""
+"Falls die Option B<--cleandebs> angegeben ist, werden außerdem alle Dateien "
+"mit Namen *.deb, *.changes und *.build in jedem Verzeichnis, das einen "
+"Debian-Quellverzeichnisbaum enthält, entfernt. Die .dsc-, .diff.gz- und die "
+"(.orig).tar.gz-Dateien werden nicht angefasst, so dass die Veröffentlichung, "
+"falls nötig, rekonstruiert werden kann und die .upload-Dateien behalten "
+"werden, so dass die B<debchange>-Funktionen korrekt funktionieren. Die "
+"Option B<--nocleandebs> verhindert dieses zusätzliche Bereinigungsverhalten "
+"und die Option B<--cleandebs> erzwingt sie. Standardmäßig werden diese "
+"Dateien nicht bereinigt."
+
+#. type: Plain text
+#: ../scripts/debclean.1:27
+msgid "B<debclean> uses B<debuild>(1) to clean the source tree."
+msgstr ""
+"B<debclean> verwendet B<debuild>(1), um den Quellverzeichnisbaum zu "
+"bereinigen."
+
+#. type: Plain text
+#: ../scripts/debclean.1:38
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debclean> will walk through the directory tree searching for I<debian/"
+"changelog> files. As a safeguard against stray files causing potential "
+"problems, it will examine the name of the parent directory once it finds a "
+"I<debian/changelog> file, and check that the directory name corresponds to "
+"the package name. Precisely how it does this is controlled by two "
+"configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+"Ebenso wie mehrere andere Skripte im Paket B<devscripts> wird B<debclean> "
+"den Verzeichnisbaum durchlaufen, um I<debian/changelog>-Dateien zu suchen. "
+"Als eine Schutzmaßnahme gegen verirrte Dateien, die potenziell Probleme "
+"bereiten, wird es den Namen des übergeordneten Verzeichnisses untersuchen, "
+"sobald es eine I<debian/changelog>-Datei findet und prüfen, ob der "
+"Verzeichnisname dem Paketnamen entspricht. Wie dies genau geschieht, wird "
+"durch die beiden Konfigurationsdateivariablen "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> und B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> "
+"sowie ihren entsprechenden Befehlszeilenoptionen B<--check-dirname-level> "
+"und B<--check-dirname-regex> geregelt."
+
+#. type: TP
+#: ../scripts/debclean.1:64
+#, no-wrap
+msgid "B<--cleandebs>"
+msgstr "B<--cleandebs>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:68
+msgid ""
+"Also remove all .deb, .changes and .build files from the parent directory."
+msgstr ""
+"entfernt außerdem alle .deb-, .changes- und .build-Dateien aus dem "
+"übergeordneten Verzeichnis."
+
+#. type: TP
+#: ../scripts/debclean.1:68
+#, no-wrap
+msgid "B<--nocleandebs>"
+msgstr "B<--nocleandebs>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:72
+msgid ""
+"Do not remove the .deb, .changes and .build files from the parent directory; "
+"this is the default behaviour."
+msgstr ""
+"entfernt die .deb-, .changes- und .build-Dateien aus dem übergeordneten "
+"Verzeichnis nicht; dies ist das Standardverhalten."
+
+#. type: TP
+#: ../scripts/debclean.1:84 ../scripts/debuild.1:321
+#, no-wrap
+msgid "B<-d>"
+msgstr "B<-d>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:87
+msgid "Do not run dpkg-checkbuilddeps to check build dependencies."
+msgstr ""
+"führt dpkg-checkbuilddeps nicht aus, um die Bauabhängigkeiten zu prüfen."
+
+#. type: TP
+#: ../scripts/debclean.1:99
+#, no-wrap
+msgid "B<DEBCLEAN_CLEANDEBS>"
+msgstr "B<DEBCLEAN_CLEANDEBS>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:103
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--cleandebs> command "
+"line parameter being used."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--cleandebs> benutzt würde."
+
+#. type: Plain text
+#: ../scripts/debclean.1:113
+msgid "B<debuild>(1), B<devscripts.conf>(5)"
+msgstr "B<debuild>(1) und B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debclean.1:115
+msgid ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; modifications by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; Änderungen durch Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:5
+msgid "debcommit - commit changes to a package"
+msgstr "debcommit - übergibt Änderungen an einem Paket"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:9
+msgid "B<debcommit> [I<options>] [B<--all> | I<files to commit>]"
+msgstr "B<debcommit> [I<Optionen>] [B<--all> | I<zu übergebende Dateien>]"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:13
+msgid ""
+"B<debcommit> generates a commit message based on new text in B<debian/"
+"changelog>, and commits the change to a package's repository. It must be run "
+"in a working copy for the package. Supported version control systems are: "
+"B<cvs>, B<git>, B<hg> (mercurial), B<svk>, B<svn> (Subversion), B<baz>, "
+"B<bzr>, B<tla> (arch), B<darcs>."
+msgstr ""
+"B<debcommit> erzeugt, basierend auf neuem Text in B<debian/changelog>, eine "
+"Commit-Nachricht und übergibt die Änderungen an das Depot eines Pakets. Es "
+"muss in einer Arbeitskopie für das Paket ausgeführt werden. Folgende "
+"Versionskontrollsysteme werden unterstützt: B<cvs>, B<git>, B<hg> "
+"(Mercurial), B<svk>, B<svn> (Subversion), B<baz>, B<bzr>, B<tla> (Arch), "
+"B<darcs>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:23
+msgid "B<-c>, B<--changelog> I<path>"
+msgstr "B<-c>, B<--changelog> I<Pfad>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:25
+msgid ""
+"Specify an alternate location for the changelog. By default debian/changelog "
+"is used."
+msgstr ""
+"gibt einen alternativen Speicherplatz für das Changelog an. Standardmäßig "
+"wird debian/changelog benutzt."
+
+#. type: =item
+#: ../scripts/debcommit.pl:28
+msgid "B<-r>, B<--release>"
+msgstr "B<-r>, B<--release>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:30
+msgid ""
+"Commit a release of the package. The version number is determined from "
+"debian/changelog, and is used to tag the package in the repository."
+msgstr ""
+"übergibt eine Veröffentlichung des Pakets. Die Versionsnummer wird anhand "
+"von debian/changelog bestimmt und benutzt, um das Paket im Depot zu "
+"markieren."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:33
+msgid ""
+"Note that svn/svk tagging conventions vary, so debcommit uses svnpath(1) to "
+"determine where the tag should be placed in the repository."
+msgstr ""
+"Beachten Sie, das svn-/svk-Markierungskonventionen variieren, weswegen "
+"Debcommit svnpath(1) verwendet, um zu bestimmen, wo die Markierung im Depot "
+"platziert werden soll."
+
+#. type: =item
+#: ../scripts/debcommit.pl:37
+msgid "B<-R>, B<--release-use-changelog>"
+msgstr "B<-R>, B<--release-use-changelog>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:39
+msgid ""
+"When used in conjunction with B<--release>, if there are uncommitted changes "
+"to the changelog then derive the commit message from those changes rather "
+"than using the default message."
+msgstr ""
+"Wenn dies in Verbindung mit B<--release> benutzt wird, dann wird die Commit-"
+"Nachricht, falls es nicht übertragene Änderungen am Changelog gibt, aus "
+"diesen Änderungen abgeleitet, statt die Standardnachricht zu verwenden."
+
+#. type: =item
+#: ../scripts/debcommit.pl:43
+msgid "B<-m> I<text>, B<--message> I<text>"
+msgstr "B<-m> I<Text>, B<--message> I<Text>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:45
+msgid ""
+"Specify a commit message to use. Useful if the program cannot determine a "
+"commit message on its own based on debian/changelog, or if you want to "
+"override the default message."
+msgstr ""
+"gibt die Commit-Nachricht an, die verwendet werden soll; nützlich, falls das "
+"Programm von allein keine auf debian/changelog basierende Commit-Nachricht "
+"festlegen kann oder falls Sie die Standardnachricht außer Kraft setzen "
+"möchten."
+
+#. type: =item
+#: ../scripts/debcommit.pl:49 ../scripts/tagpending.pl:98
+msgid "B<-n>, B<--noact>"
+msgstr "B<-n>, B<--noact>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:51
+msgid ""
+"Do not actually do anything, but do print the commands that would be run."
+msgstr ""
+"tut tatsächlich nichts, gibt aber die Befehle aus, die ausgeführt würden."
+
+#. type: =item
+#: ../scripts/debcommit.pl:53
+msgid "B<-d>, B<--diff>"
+msgstr "B<-d>, B<--diff>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:55
+msgid ""
+"Instead of committing, do print the diff of what would have been committed "
+"if this option were not given. A typical usage scenario of this option is "
+"the generation of patches against the current working copy (e.g. when you "
+"don't have commit access right)."
+msgstr ""
+"druckt statt ein Commit durchzuführen das Diff, das übergeben worden wäre, "
+"falls diese Option nicht angegeben gewesen wäre. Eine typisches "
+"Verwendungsszenario dieser Option ist das Erzeugen von Patches für die "
+"aktuelle Arbeitskopie (z.B. wenn Sie keine Commit-Rechte haben)."
+
+#. type: =item
+#: ../scripts/debcommit.pl:60
+msgid "B<-C>, B<--confirm>"
+msgstr "B<-C>, B<--confirm>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:62
+msgid ""
+"Display the generated commit message and ask for confirmation before "
+"committing it. It is also possible to edit the message at this stage; in "
+"this case, the confirmation prompt will be re-displayed after the editing "
+"has been performed."
+msgstr ""
+"zeigt die erzeugte Commit-Nachricht an und erbittet vor dem Commit eine "
+"Bestätigung. Es ist auch möglich, die Nachricht an dieser Stelle zu "
+"bearbeiten; in diesem Fall wird die Bestätigungsanfrage erneut angezeigt, "
+"nachdem die Bearbeitung durchgeführt wurde."
+
+#. type: =item
+#: ../scripts/debcommit.pl:66
+msgid "B<-e>, B<--edit>"
+msgstr "B<-e>, B<--edit>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:68
+msgid ""
+"Edit the generated commit message in your favorite editor before committing "
+"it."
+msgstr ""
+"bearbeitet die erzeugte Commit-Nachricht in Ihrem Lieblingseditor, bevor ein "
+"Commit davon durchgeführt wird."
+
+#. type: TP
+#: ../scripts/debcommit.pl:71 ../scripts/dget.pl:624
+#: ../scripts/dpkg-depcheck.1:16
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:73
+msgid ""
+"Commit all files. This is the default operation when using a VCS other than "
+"git."
+msgstr ""
+"führt ein Commit aller Dateien durch. Dies ist die Standardtransaktion, wenn "
+"ein anderes Versionskontrollsystem als Git verwendet wird."
+
+#. type: =item
+#: ../scripts/debcommit.pl:76
+msgid "B<-s>, B<--strip-message>, B<--no-strip-message>"
+msgstr "B<-s>, B<--strip-message>, B<--no-strip-message>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:78
+msgid ""
+"If this option is set and the commit message has been derived from the "
+"changelog, the characters \"* \" will be stripped from the beginning of the "
+"message."
+msgstr ""
+"Falls diese Option gesetzt ist und die Commit-Nachricht aus dem Changelog "
+"abgeleitet wurde, werden die »*«-Zeichen vom Anfang der Nachricht entfernt."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:82
+msgid ""
+"This option is set by default and ignored if more than one line of the "
+"message begins with \"[*+-] \"."
+msgstr ""
+"Diese Option ist standardmäßig gesetzt und wird ignoriert, falls mehr als "
+"eine Zeile der Nachricht mit »[*+-] « beginnt."
+
+#. type: =item
+#: ../scripts/debcommit.pl:85
+msgid "B<--sign-commit>, B<--no-sign-commit>"
+msgstr "B<--sign-commit>, B<--no-sign-commit>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:87
+msgid ""
+"If this option is set, then the commits that debcommit creates will be "
+"signed using gnupg. Currently this is only supported by git, hg, and bzr."
+msgstr ""
+"Falls diese Option gesetzt ist, dann werden Commits, die Debcommit erstellt, "
+"mittels GnuPG signiert. Derzeit wird dies nur von Git, Hg und Bzr "
+"unterstützt."
+
+#. type: =item
+#: ../scripts/debcommit.pl:90
+msgid "B<--sign-tags>, B<--no-sign-tags>"
+msgstr "B<--sign-tags>, B<--no-sign-tags>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:92
+msgid ""
+"If this option is set, then tags that debcommit creates will be signed using "
+"gnupg. Currently this is only supported by git."
+msgstr ""
+"Falls diese Option gesetzt ist, dann werden Markierungen, die Debcommit "
+"erstellt, mittels GnuPG signiert. Derzeit wird dies nur von Git unterstützt."
+
+#. type: =item
+#: ../scripts/debcommit.pl:95
+msgid "B<--changelog-info>"
+msgstr "B<--changelog-info>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:97
+msgid ""
+"If this option is set, the commit author and date will be determined from "
+"the Maintainer and Date field of the first paragraph in F<debian/"
+"changelog>. This is mainly useful when using B<debchange>(1) with the B<--"
+"no-mainttrailer> option."
+msgstr ""
+"Falls diese Option gesetzt ist, werden der Autor und das Datum, die "
+"übertragen werden, anhand der Felder »Maintainer« und »Date« des ersten "
+"Absatzes in F<debian/changelog> bestimmt. Dies ist hauptsächlich dann "
+"nützlich, wenn B<debchange>(1) mit der Option B<--no-mainttrailer> verwendet "
+"wird."
+
+#. type: =item
+#: ../scripts/debcommit.pl:114
+msgid "B<DEBCOMMIT_STRIP_MESSAGE>"
+msgstr "B<DEBCOMMIT_STRIP_MESSAGE>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:116
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-strip-message> "
+"command line parameter being used. The default is I<yes>."
+msgstr ""
+"Falls dies auf I<no> gesetzt ist, dann entspricht das der Verwendung des "
+"Befehlszeilenparameters B<--no-strip-message>. Die Vorgabe ist I<yes>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:119
+msgid "B<DEBCOMMIT_SIGN_TAGS>"
+msgstr "B<DEBCOMMIT_SIGN_TAGS>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:121
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--sign-tags> command "
+"line parameter being used. The default is I<no>."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--sign-tags> benutzt würde. Die Vorgabe ist I<no>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:124
+msgid "B<DEBCOMMIT_SIGN_COMMITS>"
+msgstr "B<DEBCOMMIT_SIGN_COMMITS>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:126
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--sign-commit> "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--sign-commit> benutzt würde. Die Vorgabe ist I<no>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:129
+msgid "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+msgstr "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:131
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--release-use-"
+"changelog> command line parameter being used. The default is I<no>."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--release-use-changelog> benutzt würde. Die Vorgabe "
+"ist I<no>."
+
+#. type: TP
+#: ../scripts/debcommit.pl:134 ../scripts/debsign.1:117
+#, no-wrap
+msgid "B<DEBSIGN_KEYID>"
+msgstr "B<DEBSIGN_KEYID>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:136
+msgid ""
+"This is the key id used for signing tags. If not set, a default will be "
+"chosen by the revision control system."
+msgstr ""
+"Dies ist die Schlüsselkennung, die zum Signieren von Markierungen benutzt "
+"wird. Falls nicht gesetzt, wird eine Vorgabe durch das "
+"Versionskontrollsystem ausgewählt."
+
+#. type: =head1
+#: ../scripts/debcommit.pl:141
+msgid "VCS SPECIFIC FEATURES"
+msgstr "VERSIONSKONTROLLSYSTEMSPEZIFISCHE FUNKTIONALITÄTEN"
+
+#. type: =item
+#: ../scripts/debcommit.pl:145
+msgid "B<tla> / B<baz>"
+msgstr "B<tla> / B<baz>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:147
+msgid ""
+"If the commit message contains more than 72 characters, a summary will be "
+"created containing as many full words from the message as will fit within 72 "
+"characters, followed by an ellipsis."
+msgstr ""
+"Falls die Commit-Nachricht mehr als 72 Zeichen enthält, wird eine "
+"Zusammenfassung erstellt, die so viele vollständige Worte aus der Nachricht "
+"enthält, wie in 72 Zeichen hineinpassen, gefolgt von Auslassungspunkten."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:153
+msgid ""
+"Each of the features described below is applicable only if the commit "
+"message has been automatically determined from the changelog."
+msgstr ""
+"Jede der unten beschriebenen Funktionalitäten ist nur anwendbar, falls die "
+"Commit-Nachricht automatisch aus dem Changelog bestimmt wurde."
+
+#. type: =item
+#: ../scripts/debcommit.pl:158 ../scripts/uscan.pl:399
+msgid "B<git>"
+msgstr "B<git>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:160
+msgid ""
+"If only a single change is detected in the changelog, B<debcommit> will "
+"unfold it to a single line and behave as if B<--strip-message> was used."
+msgstr ""
+"Falls nur eine einzelne Änderung im Changelog entdeckt wird, wird "
+"B<debcommit> sie in eine einzelne Zeile entfalten und sich so verhalten, als "
+"ob B<--strip-message> benutzt worden wäre."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:163
+msgid ""
+"Otherwise, the first change will be unfolded and stripped to form a summary "
+"line and a commit message formed using the summary line followed by a blank "
+"line and the changes as extracted from the changelog. B<debcommit> will then "
+"spawn an editor so that the message may be fine-tuned before committing."
+msgstr ""
+"Andernfalls wird die erste Änderung entfaltet und bereinigt, um eine "
+"Zusammenfassungszeile und damit eine Commit-Nachricht, gefolgt von einer "
+"leeren Zeile und den Änderungen, wie sie aus dem Changelog extrahiert "
+"wurden, zu bilden. B<debcommit> wird dann einen Editor öffnen, so dass die "
+"Nachricht vor dem Commit abgestimmt werden kann."
+
+#. type: =item
+#: ../scripts/debcommit.pl:168
+msgid "B<hg> / B<darcs>"
+msgstr "B<hg> / B<darcs>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:170
+msgid ""
+"The first change detected in the changelog will be unfolded to form a single "
+"line summary. If multiple changes were detected then an editor will be "
+"spawned to allow the message to be fine-tuned."
+msgstr ""
+"Die erste im Changelog entdeckte Änderung wird entfaltet, um eine einzelne "
+"Zusammenfassungszeile zu bilden, Falls mehrere Änderungen entdeckt wurden, "
+"wird ein Editor geöffnet, der eine Feinabstimmung der Nachricht ermöglicht."
+
+#. type: =item
+#: ../scripts/debcommit.pl:174
+msgid "B<bzr>"
+msgstr "B<bzr>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:176
+msgid ""
+"If the changelog entry used for the commit message closes any bugs then B<--"
+"fixes> options to \"bzr commit\" will be generated to associate the revision "
+"and the bugs."
+msgstr ""
+"Falls der für die Commit-Nachricht benutzte Changelog-Eintrag irgendwelche "
+"Fehler schließt, werden B<--fixes>-Optionen für »bzr commit« generiert, um "
+"die Revision und die Fehler zu verknüpfen."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:945
+msgid ""
+"This code is copyright by Joey Hess <joeyh@debian.org>, all rights "
+"reserved. This program comes with ABSOLUTELY NO WARRANTY. You are free to "
+"redistribute this code under the terms of the GNU General Public License, "
+"version 2 or later."
+msgstr ""
+"Dieser Code unterliegt dem Copyright von Joey Hess <joeyh@debian.org>, alle "
+"Rechte vorbehalten. Für dieses Programm besteht KEINERLEI GARANTIE. Es ist "
+"Ihnen erlaubt, diesen Code unter den Bedingungen der GNU General Public "
+"License, Version 2 oder später, weiterzugeben."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:952 ../scripts/mass-bug.pl:568
+msgid "Joey Hess <joeyh@debian.org>"
+msgstr "Joey Hess <joeyh@debian.org>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:956
+msgid "B<debchange>(1), B<svnpath>(1)"
+msgstr "B<debchange>(1), B<svnpath>(1)"
+
+#. type: TH
+#: ../scripts/debdiff.1:1
+#, no-wrap
+msgid "DEBDIFF"
+msgstr "DEBDIFF"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:4
+msgid "debdiff - compare file lists in two Debian packages"
+msgstr "debdiff - vergleicht Dateilisten in zwei Debian-Paketen"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:6
+msgid "B<debdiff> [I<options>]"
+msgstr "B<debdiff> [I<Optionen>]"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:8
+msgid "B<debdiff> [I<options>] ... I<deb1 deb2>"
+msgstr "B<debdiff> [I<Optionen>] … I<deb1 deb2>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:10
+msgid "B<debdiff> [I<options>] ... I<changes1 changes2>"
+msgstr "B<debdiff> [I<Optionen>] … I<Änderungen1 Änderungen2>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:13
+msgid ""
+"B<debdiff> [I<options>] ... B<--from >I<deb1a deb1b ... >B<--to >I<deb2a "
+"deb2b ...>"
+msgstr ""
+"B<debdiff> [I<Optionen>] … B<--from >I<deb1a deb1b … >B<--to >I<deb2a deb2b …"
+">"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:15
+msgid "B<debdiff> [I<options>] ... I<dsc1 dsc2>"
+msgstr "B<debdiff> [I<Optionen>] … I<dsc1 dsc2>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:26
+msgid ""
+"B<debdiff> takes the names of two Debian package files (I<.deb>s or I<."
+"udeb>s) on the command line and compares their contents (considering only "
+"the files in the main package, not the maintenance scripts). It shows which "
+"files have been introduced and which removed between the two package files, "
+"and is therefore useful for spotting files which may have been inadvertently "
+"lost between revisions of the package. It also checks the file owners and "
+"permissions, and compares the control files of the two packages using the "
+"B<wdiff> program. If you want a deeper comparison of two Debian package "
+"files you can use the B<diffoscope> tool."
+msgstr ""
+"B<debdiff> nimmt die Namen zweier Debian-Pakete (I<.deb>s oder I<.udeb>s) "
+"auf der Befehlszeile entgegen und vergleicht ihren Inhalt (dabei werden nur "
+"die Dateien im Hauptpaket berücksichtigt, nicht die Betreuerskripte). Es "
+"zeigt, welche Dateien eingeführt und welche zwischen den beiden Dateien "
+"entfernt wurden. Es ist daher nützlich, um Dateien ausfindig zu machen, die "
+"möglicherweise versehentlich zwischen zwei Revisionen des Pakets verloren "
+"gingen. Es prüft außerdem die Dateibesitzer und Zugriffsrechte und "
+"vergleicht die Steuerdateien der beiden Pakete mittels des Programms "
+"B<wdiff>. Falls Sie zwei Debian-Pakete genauer vergleichen wollen, können "
+"Sie das Werkzeug B<diffoscope> benutzen."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:29
+msgid ""
+"If no arguments are given, B<debdiff> tries to compare the content of the "
+"current source directory with the last version of the package."
+msgstr ""
+"Falls kein Argument angegeben wurde, versucht B<debdiff>, den Inhalt des "
+"aktuellen Quellverzeichnisses mit der neuesten Version des Pakets zu "
+"vergleichen."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:40
+msgid ""
+"B<debdiff> can also handle changes between groups of I<.deb> files in two "
+"ways. The first is to specify two I<.changes> files. In this case, the I<."
+"deb> files listed in the I<.changes> file will be compared, by taking the "
+"contents of all of the listed I<.deb> files together. (The I<.deb> files "
+"listed are assumed to be in the same directory as the I<.changes> file.) "
+"The second way is to list the I<.deb> files of interest specifically using "
+"the B<--from> ... B<--to> syntax. These both help if a package is broken up "
+"into smaller packages and one wishes to ensure that nothing is lost in the "
+"interim."
+msgstr ""
+"B<debdiff> kann außerdem Änderungen zwischen Gruppen von I<.deb>-Dateien auf "
+"zwei Arten handhaben. Die erste ist, zwei I<.changes>-Dateien anzugeben. In "
+"diesem Fall werden die in der I<.changes>-Datei aufgeführten I<.deb>-Dateien "
+"verglichen, indem der Inhalt aller aufgelisteten I<.deb>-Dateien "
+"zusammengenommenen wird. (Es wird davon ausgegangen, dass die I<.deb>-"
+"Dateien im gleichen Verzeichnis wie die I<.changes>-Datei liegen.) Die "
+"zweite Art besteht darin, die I<.deb>-Dateien von Interesse insbesondere mit "
+"der Syntax B<--from> … B<--to> aufzulisten. Diese beiden helfen, falls ein "
+"Paket in mehrere kleinere Pakete zerteilt wurde und sichergestellt werden "
+"soll, dass zwischenzeitlich nichts verloren ging."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:44
+msgid ""
+"B<debdiff> examines the B<devscripts> configuration files as described "
+"below. Command line options override the configuration file settings, "
+"though."
+msgstr ""
+"B<debdiff> untersucht die B<devscripts>-Konfigurationsdateien wie "
+"nachfolgend beschrieben. Befehlszeilenoptionen setzten jedoch die "
+"Konfigurationsdateieinstellungen außer Kraft."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:52
+msgid ""
+"If B<debdiff> is passed two source packages (I<.dsc> files) it will compare "
+"the contents of the source packages. If the source packages differ only in "
+"Debian revision number (that is, the I<.orig.tar.gz> files are the same in "
+"the two I<.dsc> files), then B<interdiff>(1) will be used to compare the two "
+"patch files if this program is available on the system, otherwise a B<diff> "
+"will be performed between the two source trees."
+msgstr ""
+"Falls B<debdiff> zwei Quellpakete (I<.dsc>-Dateien) übergeben wurden, wird "
+"es den Inhalt der Quellpakete vergleichen. Falls sich die Quellpakete nur in "
+"der Debian-Revisionsnummer unterscheiden (sprich, die I<.orig.tar.gz>-"
+"Dateien sind in beiden I<.dsc>-Dateien gleich), dann wird B<interdiff>(1) "
+"benutzt, um die beiden Patch-Dateien zu vergleichen, falls das Programm auf "
+"dem System verfügbar ist. Andernfalls wird ein B<diff> zwischen beiden "
+"Quellverzeichnisbäumen durchgeführt."
+
+#. type: TP
+#: ../scripts/debdiff.1:53
+#, no-wrap
+msgid "B<--dirs>, B<-d>"
+msgstr "B<--dirs>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:58
+msgid ""
+"The default mode of operation is to ignore directory names which appear in "
+"the file list, but they, too, will be considered if this option is given."
+msgstr ""
+"Im Standardbetriebsmodus werden Verzeichnisnamen, die in der Dateiliste "
+"auftauchen, ignoriert, sie werden aber, wenn diese Option angegeben wurde, "
+"berücksichtigt."
+
+#. type: TP
+#: ../scripts/debdiff.1:58
+#, no-wrap
+msgid "B<--nodirs>"
+msgstr "B<--nodirs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:62
+msgid ""
+"Ignore directory names which appear in the file list. This is the default "
+"and it can be used to override a configuration file setting."
+msgstr ""
+"ignoriert Verzeichnisnamen, die in der Dateiliste erscheinen. Dies ist die "
+"Vorgabe und kann benutzt werden, um die Einstellungen der "
+"Konfigurationsdatei außer Kraft zu setzen."
+
+#. type: TP
+#: ../scripts/debdiff.1:62
+#, no-wrap
+msgid "B<--move>I< FROM TO>,B< -m>I< FROM TO>"
+msgstr "B<--move>I< VON BIS>,B< -m>I< VON BIS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:73
+msgid ""
+"It sometimes occurs that various files or directories are moved around "
+"between revisions. This can be handled using this option. There are two "
+"arguments, the first giving the location of the directory or file in the "
+"first package, and the second in the second. Any files in the first listing "
+"whose names begin with the first argument are treated as having that "
+"substituted for the second argument when the file lists are compared. Any "
+"number of B<--move> arguments may be given; they are processed in the order "
+"in which they appear. This only affects comparing binary packages, not "
+"source packages."
+msgstr ""
+"Manchmal kommt es vor, dass unterschiedliche Dateien oder Verzeichnisse "
+"zwischen Revisionen hin- und hergeschoben werden. Dies kann mithilfe dieser "
+"Option gehandhabt werden. Es gibt zwei Argumente, das erste gibt den "
+"Speicherort des Verzeichnisses oder der Datei im ersten Paket und das Zweite "
+"den im Zweiten an. Alle Dateien in der ersten Auflistung, deren Name mit dem "
+"ersten Argument beginnt, werden beim Vergleich der Dateilisten so angesehen, "
+"als ob dies durch das zweite Argument ersetzt worden wäre. Es kann eine "
+"beliebige Anzahl von B<--move>-Argumenten angegeben werden; sie werden in "
+"der Reihenfolge verarbeitet, in der sie erscheinen. Dies betrifft nur das "
+"Vergleichen von Binärpaketen, nicht das von Quellpaketen."
+
+#. type: TP
+#: ../scripts/debdiff.1:73
+#, no-wrap
+msgid "B<--move-regex>I< FROM TO>"
+msgstr "B<--move-regex>I< VON BIS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:79
+msgid ""
+"This is the same as B<--move>, except that I<FROM> is treated as a regular "
+"expression and the B<perl> substitution command I<s/^FROM/TO/> is applied to "
+"the files. In particular, TO can make use of backreferences such as $1."
+msgstr ""
+"Dies ist identisch mit B<--move>, außer dass I<VON> als ein regulärer "
+"Ausdruck angesehen wird und der B<perl>-Ersetzungsbefehl I<s/^VON/BIS/> auf "
+"die Dateien angewendet wird. Insbesondere kann BIS Gebrauch von "
+"Rückverweisen wie $1 machen."
+
+#. type: TP
+#: ../scripts/debdiff.1:79
+#, no-wrap
+msgid "B<--nocontrol>"
+msgstr "B<--nocontrol>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:84
+msgid ""
+"B<debdiff> will usually compare the respective control files of the packages "
+"using B<wdiff>(1). This option suppresses this part of the processing."
+msgstr ""
+"B<debdiff> wird normalerweise die jeweiligen Steuerdateien der Pakete "
+"mittels B<wdiff>(1) vergleichen. Diese Option unterdrückt diesen Teil der "
+"Verarbeitung."
+
+#. type: TP
+#: ../scripts/debdiff.1:84
+#, no-wrap
+msgid "B<--control>"
+msgstr "B<--control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:88
+msgid ""
+"Compare the respective control files; this is the default, and it can be "
+"used to override a configuration file setting."
+msgstr ""
+"vergleicht die jeweiligen Steuerdateien. Dies ist die Vorgabe und es kann "
+"verwendet werden, um eine Einstellung der Konfigurationsdatei außer Kraft zu "
+"setzen."
+
+#. type: TP
+#: ../scripts/debdiff.1:88
+#, no-wrap
+msgid "B<--controlfiles>I< FILE>[B<,>I<FILE> ...]"
+msgstr "B<--controlfiles>I< DATEI>[B<,>I<DATEI> …]"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:96
+msgid ""
+"Specify which control files to compare; by default this is just I<control>, "
+"but could include I<postinst>, I<config> and so on. Files will only be "
+"compared if they are present in both I<.debs> being compared. The special "
+"value I<ALL> compares all control files present in both packages, except for "
+"md5sums. This option can be used to override a configuration file setting."
+msgstr ""
+"gibt an, welche Steuerdateien verglichen werden sollen; standardmäßig ist "
+"dies nur I<control>, könnte aber auch I<postinst>, I<config> und so weiter "
+"umfassen. Dateien werden nur verglichen, falls sie in beiden verglichenen I<."
+"debs> enthalten sind. Der Spezialwert I<ALL> vergleicht alle Steuerdateien, "
+"die es in beiden Paketen gibt, außer md5sums. Diese Option kann benutzt "
+"werden, um eine Konfigurationsdateieinstellung außer Kraft zu setzen."
+
+#. type: TP
+#: ../scripts/debdiff.1:96
+#, no-wrap
+msgid "B<--wdiff-source-control>"
+msgstr "B<--wdiff-source-control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:100
+msgid ""
+"When processing source packages, compare control files using B<wdiff>. "
+"Equivalent to the B<--control> option for binary packages."
+msgstr ""
+"vergleicht Steuerdateien, wenn Quellpakete verarbeitet werden, mittels "
+"B<wdiff>. Entspricht der Option B<--control> für Binärpakete."
+
+#. type: TP
+#: ../scripts/debdiff.1:100
+#, no-wrap
+msgid "B<--no-wdiff-source-control>"
+msgstr "B<--no-wdiff-source-control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:104
+msgid ""
+"Do not compare control files in source packages using B<wdiff>. This is the "
+"default."
+msgstr ""
+"vergleicht keine Steuerdateien in Quellpaketen mittels B<wdiff>. Dies ist "
+"die Vorgabe."
+
+#. type: TP
+#: ../scripts/debdiff.1:104
+#, no-wrap
+msgid "B<--wp>, B<--wl>, B<--wt>"
+msgstr "B<--wp>, B<--wl>, B<--wt>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:109
+msgid ""
+"Pass a B<-p>, B<-l> or B<-t> option to B<wdiff> respectively. (This yields "
+"the whole B<wdiff> output rather than just the lines with any changes.)"
+msgstr ""
+"übergibt eine B<-p>-, B<-l>- beziehungsweise B<-t>-Option an B<wdiff>. (Dies "
+"liefert die ganze B<wdiff>-Ausgabe statt nur den Zeilen mit irgendwelchen "
+"Änderungen)."
+
+#. type: TP
+#: ../scripts/debdiff.1:109
+#, no-wrap
+msgid "B<--show-moved>"
+msgstr "B<--show-moved>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:116
+msgid ""
+"If multiple I<.deb> files are specified on the command line, either using I<."
+"changes> files or the B<--from>/B<--to> syntax, then this option will also "
+"show which files (if any) have moved between packages. (The package names "
+"are simply determined from the names of the I<.deb> files.)"
+msgstr ""
+"Falls mehrere I<.deb>-Dateien auf der Befehlszeile angegeben wurden, "
+"entweder mit den I<.changes>-Dateien oder mit der B<--from>-/B<--to>-Syntax, "
+"wird diese Option außerdem (falls vorhanden) Dateien anzeigen, die zwischen "
+"Paketen verschoben wurden. (Die Paketnamen werden einfach aus den Namen der "
+"I<.deb>-Dateien bestimmt.)"
+
+#. type: TP
+#: ../scripts/debdiff.1:116
+#, no-wrap
+msgid "B<--noshow-moved>"
+msgstr "B<--noshow-moved>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:120 ../scripts/debdiff.1:141
+msgid ""
+"The default behaviour; can be used to override a configuration file setting."
+msgstr ""
+"das Standardverhalten; kann benutzt werden, um "
+"Konfigurationsdateieinstellungen außer Kraft zu setzen."
+
+#. type: TP
+#: ../scripts/debdiff.1:120
+#, no-wrap
+msgid "B<--renamed>I< FROM TO>"
+msgstr "B<--renamed>I< VON BIS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:126
+msgid ""
+"If B<--show-moved> is being used and a package has been renamed in the "
+"process, this command instructs B<debdiff> to treat the package in the first "
+"list called I<FROM> as if it were called I<TO>. Multiple uses of this "
+"option are permitted."
+msgstr ""
+"Falls B<--show-moved> verwendet wird und ein Paket in dem Prozess umbenannt "
+"wurde, weist dieser Befehl B<debdiff> an, das Paket in der ersten, I<VON> "
+"genannten Liste, so zu betrachten, als ob es I<BIS> genannt würde. Es ist "
+"erlaubt, diese Option mehrfach zu benutzen."
+
+#. type: TP
+#: ../scripts/debdiff.1:126
+#, no-wrap
+msgid "B<--exclude>I< PATTERN>"
+msgstr "B<--exclude>I< MUSTER>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:134
+msgid ""
+"Exclude files whose basenames match I<PATTERN>. Multiple uses of this "
+"option are permitted. Note that this option is passed on to B<diff> and has "
+"the same behaviour, so only the basename of the file is considered: in "
+"particular, B<--exclude='*.patch'> will work, but B<--exclude='debian/"
+"patches/*'> will have no practical effect."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:134
+#, no-wrap
+msgid "B<--diffstat>"
+msgstr "B<--diffstat>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:137
+msgid "Include the result of B<diffstat> before the generated diff."
+msgstr "beinhaltet das Ergebnis von B<diffstat> vor dem erzeugten Diff"
+
+#. type: TP
+#: ../scripts/debdiff.1:137
+#, no-wrap
+msgid "B<--no-diffstat>"
+msgstr "B<--no-diffstat>"
+
+#. type: TP
+#: ../scripts/debdiff.1:141
+#, no-wrap
+msgid "B<--auto-ver-sort>"
+msgstr "B<--auto-ver-sort>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:144
+msgid "When comparing source packages, do so in version order."
+msgstr ""
+"Wenn Quellpakete verglichen werden, soll dies in der Reihenfolge ihrer "
+"Versionen getan werden."
+
+#. type: TP
+#: ../scripts/debdiff.1:144
+#, no-wrap
+msgid "B<--no-auto-ver-sort>"
+msgstr "B<--no-auto-ver-sort>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:150
+msgid ""
+"Compare source packages in the order they were passed on the command-line, "
+"even if that means comparing a package with a higher version against one "
+"with a lower version. This is the default behaviour."
+msgstr ""
+"vergleicht zwei Quellpakete in der Reihenfolge, in der sie auf der "
+"Befehlszeile übergeben wurden, sogar, wenn dies bedeutet, dass ein Paket mit "
+"einer höheren Versionsnummer mit einem mit einer niedrigeren Version "
+"verglichen wird. Dies ist das Standardverhalten."
+
+#. type: TP
+#: ../scripts/debdiff.1:150
+#, no-wrap
+msgid "B<--unpack-tarballs>"
+msgstr "B<--unpack-tarballs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:155
+msgid ""
+"When comparing source packages, also unpack tarballs found in the top level "
+"source directory to compare their contents along with the other files. This "
+"is the default behaviour."
+msgstr ""
+"Wenn Quellpakete verglichen werden, werden außerdem Tarbälle entpackt, die "
+"auf der obersten Stufe des Quellverzeichnisbaums liegen, um ihren Inhalt "
+"zusammen mit den anderen Dateien zu vergleichen. Dies ist das "
+"Standardverhalten."
+
+#. type: TP
+#: ../scripts/debdiff.1:155
+#, no-wrap
+msgid "B<--no-unpack-tarballs>"
+msgstr "B<--no-unpack-tarballs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:158
+msgid "Do not unpack tarballs inside source packages."
+msgstr "entpackt keine Tarbälle innerhalb von Quellpaketen."
+
+#. type: TP
+#: ../scripts/debdiff.1:158
+#, no-wrap
+msgid "B<--apply-patches>"
+msgstr "B<--apply-patches>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:162
+msgid ""
+"If the old and/or new package is in 3.0 (quilt) format, apply the quilt "
+"patches (and remove B<.pc/>) before comparison."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:162
+#, no-wrap
+msgid "B<--no-apply-patches, --noapply-patches>"
+msgstr "B<--no-apply-patches, --noapply-patches>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:166
+msgid ""
+"If the old and/or new package is in 3.0 (quilt) format, do not apply the "
+"quilt patches before comparison. This is the default behaviour."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:176
+msgid ""
+"Look for the I<.dsc> files in I<directory> instead of the parent of the "
+"source directory. This should either be an absolute path or relative to the "
+"top of the source directory."
+msgstr ""
+"sucht nach I<.dsc>-Dateien in I<Verzeichnis> statt im übergeordneten "
+"Verzeichnis des Quellverzeichnisses. Dies sollte entweder ein absoluter Pfad "
+"oder relativ zur Wurzel des Quellverzeichnisses sein."
+
+#. type: =item
+#: ../scripts/debdiff.1:182 ../scripts/hardening-check.pl:621
+#, no-wrap
+msgid "B<--quiet>, B<-q>"
+msgstr "B<--quiet>, B<-q>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:185
+msgid "Be quiet if no differences were found."
+msgstr "ist still, wenn keine Unterschiede gefunden wurden."
+
+#. type: TP
+#: ../scripts/debdiff.1:185
+#, no-wrap
+msgid "B<--ignore-space>, B<-w>"
+msgstr "B<--ignore-space>, B<-w>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:188
+msgid "Ignore whitespace in diffs."
+msgstr "ignoriert Leerräume in Diffs."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:194
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+"Die beiden Konfigurationsdateien I</etc/devscripts.conf> und I<~/."
+"devscripts> werden durch eine Shell eingelesen, um Konfigurationsvariablen "
+"zu setzen. Befehlszeilenoptionen können benutzt werden, um "
+"Konfigurationsdateieinstellungen außer Kraft zu setzen. Einstellungen aus "
+"Umgebungsvariablen werden zu diesem Zweck ignoriert. Die derzeit bekannten "
+"Variablen sind:"
+
+#. type: TP
+#: ../scripts/debdiff.1:194
+#, no-wrap
+msgid "B<DEBDIFF_DIRS>"
+msgstr "B<DEBDIFF_DIRS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:198
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--dirs> command line "
+"parameter being used."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--dirs> benutzt würde."
+
+#. type: TP
+#: ../scripts/debdiff.1:198
+#, no-wrap
+msgid "B<DEBDIFF_CONTROL>"
+msgstr "B<DEBDIFF_CONTROL>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:203
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--nocontrol> command "
+"line parameter being used. The default is I<yes>."
+msgstr ""
+"Falls dies auf I<no> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--nocontrol> benutzt würde. Die Vorgabe ist I<yes>."
+
+#. type: TP
+#: ../scripts/debdiff.1:203
+#, no-wrap
+msgid "B<DEBDIFF_CONTROLFILES>"
+msgstr "B<DEBDIFF_CONTROLFILES>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:208
+msgid ""
+"Which control files to compare, corresponding to the B<--controlfiles> "
+"command line option. The default is I<control>."
+msgstr ""
+"welche Steuerdateien zu vergleichen sind, entspricht der Befehlszeilenoption "
+"B<--controlfiles>. Die Vorgabe ist I<control>."
+
+#. type: TP
+#: ../scripts/debdiff.1:208
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_MOVED>"
+msgstr "B<DEBDIFF_SHOW_MOVED>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:212
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--show-moved> command "
+"line parameter being used."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--show-moved> benutzt würde."
+
+#. type: TP
+#: ../scripts/debdiff.1:212
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_OPT>"
+msgstr "B<DEBDIFF_WDIFF_OPT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:216
+msgid ""
+"This option will be passed to B<wdiff>; it should be one of B<-p>, B<-l> or "
+"B<-t>."
+msgstr ""
+"Dieses Option wird an B<wdiff> übergeben; sie sollte entweder B<-p>, B<-l> "
+"oder B<-t> sein."
+
+#. type: TP
+#: ../scripts/debdiff.1:216
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_DIFFSTAT>"
+msgstr "B<DEBDIFF_SHOW_DIFFSTAT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:220
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--diffstat> command "
+"line parameter being used."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--diffstat> benutzt würde."
+
+#. type: TP
+#: ../scripts/debdiff.1:220
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+msgstr "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:224
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--wdiff-source-"
+"control> command line parameter being used."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--wdiff-source-control> benutzt würde."
+
+#. type: TP
+#: ../scripts/debdiff.1:224
+#, no-wrap
+msgid "B<DEBDIFF_AUTO_VER_SORT>"
+msgstr "B<DEBDIFF_AUTO_VER_SORT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:228
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--auto-ver-sort> "
+"command line parameter being used."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--auto-ver-sort> benutzt würde."
+
+#. type: TP
+#: ../scripts/debdiff.1:228
+#, no-wrap
+msgid "B<DEBDIFF_UNPACK_TARBALLS>"
+msgstr "B<DEBDIFF_UNPACK_TARBALLS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:232
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-unpack-tarballs> "
+"command line parameter being used."
+msgstr ""
+"Falls dies auf I<no> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--no-unpack-tarballs> benutzt würde."
+
+#. type: TP
+#: ../scripts/debdiff.1:232
+#, no-wrap
+msgid "B<DEBDIFF_APPLY_PATCHES>"
+msgstr "B<DEBDIFF_APPLY_PATCHES>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:237
+#, fuzzy
+#| msgid ""
+#| "If this is set to I<yes>, then it is the same as the B<--sign-tags> "
+#| "command line parameter being used. The default is I<no>."
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--apply-patches> "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--sign-tags> benutzt würde. Die Vorgabe ist I<no>."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:247
+msgid ""
+"This specifies the directory in which to look for the I<.dsc> and files, and "
+"is either an absolute path or relative to the top of the source tree. This "
+"corresponds to the B<--debs-dir> command line option. This directive could "
+"be used, for example, if you always use B<pbuilder> or B<svn-buildpackage> "
+"to build your packages. Note that it also affects B<debrelease>(1) in the "
+"same way, hence the strange name of the option."
+msgstr ""
+"Dies gibt das Verzeichnis an, in dem nach den I<.dsc>-Dateien gesucht werden "
+"soll. Es ist entweder ein absoluter Pfad oder relativ zur obersten Ebene des "
+"Quellverzeichnisbaums. Dies entspricht der Befehlszeilenoption B<--debs-"
+"dir>. Diese Direktive kann zum Beispiel benutzt werden, falls Sie immer "
+"B<pbuilder> oder B<svn-buildpackage> verwenden, um Ihre Pakete zu bauen. "
+"Beachten Sie, dass es außerdem B<debrelease>(1) auf die gleiche Weise "
+"beeinflusst, daher der merkwürdige Name der Option."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:251
+msgid ""
+"Normally the exit value will be 0 if no differences are reported and 1 if "
+"any are reported. If there is some fatal error, the exit code will be 255."
+msgstr ""
+"Normalerweise wird der Rückgabewert 0 sein, wenn keine Unterschiede gemeldet "
+"werden und 1, falls doch. Falls es irgendeinen schwerwiegenden Fehler gibt, "
+"wird der Rückgabewert 255 sein."
+
+# FIXME wrong order
+#. type: Plain text
+#: ../scripts/debdiff.1:259
+msgid ""
+"B<debdiff-apply>(1), B<diffstat>(1), B<dpkg-deb>(1), B<interdiff>(1), "
+"B<wdiff>(1), B<devscripts.conf>(5), B<diffoscope>(1)"
+msgstr ""
+"B<debdiff-apply>(1), B<diffoscope>(1), B<diffstat>(1), B<dpkg-deb>(1), "
+"B<interdiff>(1), B<wdiff>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:264
+msgid ""
+"B<debdiff> was originally written as a shell script by Yann Dirson "
+"E<lt>dirson@debian.orgE<gt> and rewritten in Perl with many more features by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>. The software may be freely "
+"redistributed under the terms and conditions of the GNU General Public "
+"License, version 2."
+msgstr ""
+"B<debdiff> wurde ursprünglich als ein Shell-Skript von Yann Dirson "
+"E<lt>dirson@debian.orgE<gt> verfasst und neu in Perl mit viel mehr "
+"Funktionalitäten durch Julian Gilbey E<lt>jdg@debian.orgE<gt> geschrieben. "
+"Die Software kann frei unter den Bestimmungen und Bedingungen der GNU "
+"General Public License, Version 2 weitergegeben werden."
+
+#. type: TH
+#: ../scripts/debdiff-apply.1:15
+#, no-wrap
+msgid "DEBDIFF-APPLY"
+msgstr "DEBDIFF-APPLY"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:19
+msgid "debdiff-apply - apply a debdiff to a Debian source package"
+msgstr "debdiff-apply - wendet ein Debdiff auf eine Debian-Quellpaket an."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:23
+msgid "B<debdiff-apply> [options] [orig_dsc_or_dir] [patch_file]"
+msgstr "B<debdiff-apply> [Optionen] [orig_dsc_oder_Verz] [Patch-Datei]"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:26
+msgid "B<debdiff-apply> [options] E<lt> [patch_file]"
+msgstr "B<debdiff> [Optionen] E<lt> [Patch-Datei]"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:32
+msgid ""
+"B<debdiff-apply> takes a I<patchfile> that describes the differences between "
+"two Debian source packages I<old> and I<new>, and applies it to a target "
+"Debian source package I<orig>."
+msgstr ""
+"B<debdiff-apply> akzeptiert eine I<Patch-Datei>, die die Unterschiede "
+"zwischen zwei Debian-Quellpaketen, I<alt> und I<neu>, beschreibt und wendet "
+"sie auf ein Ziel-Debian-Quellpaket I<Orig> an."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:38
+msgid ""
+"I<orig> could either be the same as I<old> or it could be different. "
+"I<patchfile> is expected to be a unified diff between two Debian source "
+"trees, as what B<debdiff>(1) normally generates."
+msgstr ""
+"I<Orig> kann entweder dasselbe wie I<alt> sein oder sich davon "
+"unterscheiden. Von der I<Patch-Datei> wird erwartet, dass sie ein "
+"vereinheitlichtes Diff zwischen zwei Debian-Quellverzeichnissen ist, was "
+"B<debdiff>(1) normalerweise erzeugt."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:42
+msgid ""
+"Any changes to I<debian/changelog> are dealt with specially, to avoid the "
+"conflicts that changelog diffs typically produce when applied naively. The "
+"exact behaviour may be tweaked in the future, so one should not rely on it."
+msgstr ""
+"Alle Änderungen am Changelog werden gesondert behandelt, um Konflikte zu "
+"vermeiden, die Changelog-Diffs normalerweise produzieren, wenn sie "
+"naiverweise angewendet werden. Das genaue Verhalten wird möglicherweise in "
+"der Zukunft optimiert, daher ist kein Verlass darauf."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:47
+msgid ""
+"If I<patchfile> does not apply to I<orig>, even after the special-casing of "
+"I<debian/changelog>, no changes are made and B<debdiff-apply>(1) will exit "
+"with a non-zero error code."
+msgstr ""
+"Falls die I<Patch-Datei> nicht auf I<Orig> anwendbar ist, sogar nach der "
+"Sonderbehandlung von I<debian/changelog>, werden keine Änderungen "
+"vorgenommen und B<debdiff-apply>(1) wird mit einem von Null verschiedenen "
+"Fehlercode beendet."
+
+#. type: SH
+#: ../scripts/debdiff-apply.1:48
+#, no-wrap
+msgid "ARGUMENTS"
+msgstr "ARGUMENTE"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:49
+#, no-wrap
+msgid "orig_dsc_or_dir"
+msgstr "orig_dsc_oder_Verz"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:54
+msgid ""
+"Target to apply the patch to. This can either be an unpacked source tree, or "
+"a \\[char46]dsc file. In the former case, the directory is modified in-"
+"place; in the latter case, a second .dsc is created. Default: I<.>"
+msgstr ""
+"Ziel, auf das der Patch angewendet wird. Dies kann entweder ein entpackter "
+"Quellverzeichnisbaum oder eine \\[char46]dsc-Datei sein. Im ersteren Fall "
+"wird das vorhandene Verzeichnis geändert, in letzterem Fall wird ein "
+"zweites .dsc erstellt. Voreinstellung: I<.>"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:54
+#, no-wrap
+msgid "patch_file"
+msgstr "Patch-Datei"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:60
+msgid ""
+"Patch file to apply, in the format output by B<debdiff>(1). Default: I<\\,/"
+"dev/stdin\\/>"
+msgstr ""
+"Patch-Datei im durch B<debdiff>(1) ausgegebenen Format, die angewendet "
+"werden soll. Voreinstellung: I<\\,/dev/stdin\\/>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:65
+msgid "show this help message and exit"
+msgstr "zeigt diese Hilfenachricht und wird beendet."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:65 ../scripts/debsnap.1:42 ../scripts/sadt.pod:46
+#: ../doc/suspicious-source.1:38 ../scripts/tagpending.pl:106
+#: ../doc/wrap-and-sort.1:73
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:68
+msgid "Output more information"
+msgstr "gibt weitere Informationen aus."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:68
+#, no-wrap
+msgid "B<-c> CHANGELOG, B<--changelog> CHANGELOG"
+msgstr "B<-c> CHANGELOG, B<--changelog> CHANGELOG"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:71
+msgid "Path to debian/changelog; default: debian/changelog"
+msgstr "Pfad zu debian/changelog; Voreinstellung: debian/changelog"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:71
+#, no-wrap
+msgid "B<-D> DISTRIBUTION, B<--distribution> DISTRIBUTION"
+msgstr "B<-D> DISTRIBUTION, B<--distribution> DISTRIBUTION"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:75
+msgid ""
+"Distribution to use, if the patch doesn't already contain a changelog; "
+"default: experimental"
+msgstr ""
+"Distribution, die benutzt werden soll, falls das Patch noch kein Changelog "
+"enthält; Voreinstellung: experimental"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:75
+#, no-wrap
+msgid "B<--repl>"
+msgstr "B<--repl>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:78
+msgid "Run the python REPL after processing."
+msgstr "führt das Python-REPL nach der Verarbeitung aus."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:78
+#, no-wrap
+msgid "B<--source-version>"
+msgstr "B<--source-version>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:83
+msgid ""
+"Don't apply the patch; instead print out the version of the package that it "
+"is supposed to be applied to, or nothing if the patch does not specify a "
+"source version."
+msgstr ""
+"wendet den Patch nicht an; stattdessen wird die Version des Pakets "
+"ausgegeben auf das er angewendet werden soll oder nichts, falls der Patch "
+"keine Quellversion angibt."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:83
+#, no-wrap
+msgid "B<--target-version>"
+msgstr "B<--target-version>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:89
+msgid ""
+"Don't apply the patch; instead print out the new version of the package "
+"B<debdiff-apply>(1) would generate, when the patch is applied to the the "
+"given target package, as specified by the other arguments."
+msgstr ""
+"wendet den Patch nicht an; stattdessen wird die neue Version des Pakets "
+"ausgegeben, das B<debdiff-apply>(1) erstellen würde, wenn dieser Patch auf "
+"das angegebenene Zielpaket angewendet wird, wie es durch andere Argumente "
+"angegeben wird."
+
+#. type: SS
+#: ../scripts/debdiff-apply.1:89
+#, no-wrap
+msgid "For .dsc patch targets:"
+msgstr "Für .dsc-Patch-Ziele:"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:90
+#, no-wrap
+msgid "B<--no-clean>"
+msgstr "B<--no-clean>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:94
+msgid ""
+"Don't clean temporary directories after a failure, so you can examine what "
+"failed."
+msgstr ""
+"räumt temporäre Verzeichnisse nach einem Misserfolg nicht auf, so dass Sie "
+"untersuchen können, was fehlschlug."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:94
+#, no-wrap
+msgid "B<--quilt-refresh>"
+msgstr "B<--quilt-refresh>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:99
+msgid ""
+"If the building of the new source package fails, try to refresh patches "
+"using B<quilt>(1) then try building it again."
+msgstr ""
+"Falls das Bauen des neuen Quellpakets fehlschlägt, wird versucht, die Patche "
+"mittels B<quilt>(1) zu aktualisieren, dann wird versucht, es erneut zu bauen."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:99
+#, no-wrap
+msgid "B<-d> DIRECTORY, B<--directory> DIRECTORY"
+msgstr "B<-d> VERZEICHNIS, B<--directory> VERZEICHNIS"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:104
+msgid ""
+"Extract the .dsc into this directory, which won't be cleaned up after "
+"B<debdiff-apply>(1) exits. If not given, then it will be extracted to a "
+"temporary directory."
+msgstr ""
+"extrahiert das .dsc in dieses Verzeichnis, das nicht nach dem Beenden von "
+"B<debdiff-apply>(1) aufgeräumt wird. Falls es nicht angegeben wurde, wird es "
+"in ein temporäres Verzeichnis extrahiert."
+
+#. type: SH
+#: ../scripts/debdiff-apply.1:105 ../scripts/debsnap.1:143
+#: ../doc/edit-patch.1:37 ../doc/suspicious-source.1:51 ../doc/what-patch.1:27
+#: ../doc/wrap-and-sort.1:98
+#, no-wrap
+msgid "AUTHORS"
+msgstr "AUTOREN"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:108
+msgid ""
+"B<debdiff-apply> and this manual page were written by Ximin Luo "
+"E<lt>infinity0@debian.orgE<gt>"
+msgstr ""
+"B<debdiff-apply> und diese Handbuchseite wurden von Ximin Luo "
+"E<lt>infinity0@debian.orgE<gt> geschrieben."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:110 ../doc/what-patch.1:34
+msgid ""
+"Both are released under the GNU General Public License, version 3 or later."
+msgstr ""
+"Beide wurden unter der GNU General Public License, Version 3 oder später, "
+"veröffentlicht."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:112
+msgid "B<debdiff>(1)"
+msgstr "B<debdiff>(1)"
+
+#. type: TH
+#: ../scripts/debi.1:1
+#, no-wrap
+msgid "DEBI"
+msgstr "DEBI"
+
+#. type: Plain text
+#: ../scripts/debi.1:4
+msgid "debi - install current version of generated Debian package"
+msgstr "debi - installiert die aktuelle Version eines erzeugten Debian-Pakets"
+
+#. type: Plain text
+#: ../scripts/debi.1:6
+msgid "B<debi> [I<options>] [I<changes file>] [I<package> ...]"
+msgstr "B<debi> [I<Optionen>] [I<Changes-Datei>] [I<Paket> …]"
+
+#. type: Plain text
+#: ../scripts/debi.1:21
+msgid ""
+"B<debi> figures out the current version of a package and installs it. If a "
+"I<.changes> file is specified on the command line, the filename must end "
+"with I<.changes>, as this is how the program distinguishes it from package "
+"names. If not, then B<debi> has to be called from within the source code "
+"directory tree. In this case, it will look for the I<.changes> file "
+"corresponding to the current package version (by determining the name and "
+"version number from the changelog, and the architecture in the same way as "
+"B<dpkg-buildpackage>(1) does). It then runs B<debpkg -i> on every I<.deb> "
+"archive listed in the I<.changes> file to install them, assuming that all of "
+"the I<.deb> archives live in the same directory as the I<.changes> file. "
+"Note that you probably don't want to run this program on a I<.changes> file "
+"relating to a different architecture after cross-compiling the package!"
+msgstr ""
+"B<debi> findet die aktuelle Version eines Pakets heraus und installiert sie. "
+"Falls eine I<.changes>-Datei auf der Befehlszeile angegeben wurde, muss der "
+"Dateiname auf I<.changes> enden, da das Programm sie auf diese Weise von "
+"Paketnamen unterscheidet. Falls nicht, muss B<debi> aus dem "
+"Quellcodeverzeichnisbaum heraus aufgerufen werden. In diesem Fall wird es "
+"nach der I<.changes>-Datei suchen, die zur aktuellen Paketversion passt "
+"(durch Bestimmen des Namens und der Versionsnummer aus dem Changelog und der "
+"Architektur auf die gleiche Art, die B<dpkg-buildpackage>(1) verwendet). "
+"Dann führt es B<debpkg -i>zur Installation für jedes I<.deb>-Archiv aus, das "
+"in der I<.changes>-Datei aufgeführt ist. Dabei wird davon ausgegangen, dass "
+"alle I<.deb>-Archive im selben Verzeichnis wie die I<.changes>-Datei liegen. "
+"Beachten Sie, dass Sie dieses Programm vermutlich nicht für eine I<.changes>-"
+"Datei ausführen möchten, die sich auf eine andere Architektur nach dem Cross-"
+"Kompilieren des Pakets bezieht."
+
+#. type: Plain text
+#: ../scripts/debi.1:40
+msgid ""
+"In common with several other scripts in the B<devscripts> package, B<debi> "
+"will climb the directory tree until it finds a I<debian/changelog> file. As "
+"a safeguard against stray files causing potential problems, it will examine "
+"the name of the parent directory once it finds the I<debian/changelog> file, "
+"and check that the directory name corresponds to the package name. "
+"Precisely how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Ebenso wie mehrere andere Skripte im Paket B<devscripts> wird B<debi> den "
+"Verzeichnisbaum heruntersteigen, bis es eine I<debian/changelog>-Datei "
+"findet. Als eine Schutzmaßnahme gegen verirrte Dateien, die möglicherweise "
+"Probleme bereiten, wird es den Namen des übergeordneten Verzeichnisses "
+"untersuchen, sobald es eine I<debian/changelog>-Datei findet und prüfen, ob "
+"der Verzeichnisname dem Paketnamen entspricht. Wie dies genau geschieht, "
+"wird durch die beiden Konfigurationsdateivariablen "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> und B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> "
+"sowie ihre entsprechenden Befehlszeilenoptionen B<--check-dirname-level> und "
+"B<--check-dirname-regex> geregelt."
+
+#. type: Plain text
+#: ../scripts/debi.1:78 ../scripts/debrelease.1:87
+msgid ""
+"Look for the I<.changes> and I<.deb> files in I<directory> instead of the "
+"parent of the source directory. This should either be an absolute path or "
+"relative to the top of the source directory."
+msgstr ""
+"sucht nach I<.changes>- und I<.deb>-Dateien in I<Verzeichnis> statt im "
+"übergeordneten Verzeichnis des Quellverzeichnisses. Dies sollte entweder ein "
+"absoluter Pfad oder relativ zur Wurzel des Quellverzeichnisses sein."
+
+#. type: TP
+#: ../scripts/debi.1:78
+#, no-wrap
+msgid "B<-m>, B<--multi>"
+msgstr "B<-m>, B<--multi>"
+
+#. type: Plain text
+#: ../scripts/debi.1:81
+msgid "Search for a multiarch I<.changes> file, as created by B<dpkg-cross>."
+msgstr ""
+"sucht nach einer Multiarch-I<.changes>-Datei, wie sie von B<dpkg-cross> "
+"erstellt wird."
+
+#. type: TP
+#: ../scripts/debi.1:81
+#, no-wrap
+msgid "B<-u>, B<--upgrade>"
+msgstr "B<-u>, B<--upgrade>"
+
+#. type: Plain text
+#: ../scripts/debi.1:87
+msgid ""
+"Only upgrade packages already installed on the system, rather than "
+"installing all packages listed in the I<.changes> file. Useful for multi-"
+"binary packages when you don't want to have all the binaries installed at "
+"once."
+msgstr ""
+"führt nur ein Upgrade von Paketen durch, die bereits auf dem System "
+"installiert sind, anstatt alle in der I<.changes>-Datei aufgeführten Pakete "
+"zu installieren. Nützlich für Pakete mit mehreren Binärpaketen, wenn Sie "
+"nicht möchten, dass alle Binärpakete auf einmal installiert werden."
+
+#. type: TP
+#: ../scripts/debi.1:95
+#, no-wrap
+msgid "B<--with-depends>"
+msgstr "B<--with-depends>"
+
+#. type: Plain text
+#: ../scripts/debi.1:98
+msgid "Attempt to satisfy the I<Depends> of a package when installing it."
+msgstr ""
+"versucht, die I<Depends> (Abhängigkeiten) eines Pakets bei der Installation "
+"aufzulösen."
+
+#. type: TP
+#: ../scripts/debi.1:98
+#, no-wrap
+msgid "B<--tool> I<tool>"
+msgstr "B<--tool> I<Werkzeug>"
+
+#. type: Plain text
+#: ../scripts/debi.1:102
+msgid ""
+"Use the specified I<tool> for installing the dependencies of the package(s) "
+"to be installed. By default, B<apt-get> is used."
+msgstr ""
+"benutzt das angegebene I<Werkzeug>, um die Abhängigkeiten der zu "
+"installierenden Pakete zu installieren. Standardmäßig wird B<apt-get> "
+"benutzt."
+
+#. type: Plain text
+#: ../scripts/debi.1:125
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and I<."
+"deb> files, and is either an absolute path or relative to the top of the "
+"source tree. This corresponds to the B<--debs-dir> command line option. "
+"This directive could be used, for example, if you always use B<pbuilder> or "
+"B<svn-buildpackage> to build your packages. Note that it also affects "
+"B<debrelease>(1) in the same way, hence the strange name of the option."
+msgstr ""
+"Dies gibt das Verzeichnis an, in dem nach den I<.changes>- und I<.deb>-"
+"Dateien gesucht wird. Es ist entweder ein absoluter Pfad oder relativ zur "
+"obersten Ebene des Quellverzeichnisbaums. Dies entspricht der "
+"Befehlszeilenoption B<--debs-dir>. Diese Direktive kann zum Beispiel benutzt "
+"werden, falls Sie immer B<pbuilder> oder B<svn-buildpackage> verwenden, um "
+"Ihre Pakete zu bauen. Beachten Sie, dass es außerdem B<debrelease>(1) auf "
+"die gleiche Weise beeinflusst, daher der merkwürdige Name der Option."
+
+#. type: Plain text
+#: ../scripts/debi.1:135
+msgid "B<debpkg>(1), B<devscripts.conf>(5)"
+msgstr "B<debpkg>(1) und B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debi.1:140
+msgid ""
+"B<debi> was originally written by Christoph Lameter E<lt>clameter@debian."
+"orgE<gt>. The now-defunct script B<debit> was originally written by James "
+"R. Van Zandt E<lt>jrv@vanzandt.mv.comE<gt>. They have been moulded into one "
+"script together with B<debc>(1) and parts extensively modified by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"B<debi> wurde ursprünglich von Christoph Lameter E<lt>clameter@debian."
+"orgE<gt> geschrieben. Das heute nicht mehr funktionierende Skript B<debit> "
+"wurde ursprünglich von James R. Van Zandt E<lt>jrv@vanzandt.mv.comE<gt> "
+"geschrieben. Sie wurden zusammen mit B<debc>(1) zu einem Skript geformt und "
+"Teile davon ausgiebig durch Julian Gilbey E<lt>jdg@debian.orgE<gt> verändert."
+
+#. type: TH
+#: ../scripts/debpkg.1:1
+#, no-wrap
+msgid "DEBPKG"
+msgstr "DEBPKG"
+
+#. type: Plain text
+#: ../scripts/debpkg.1:4
+msgid "debpkg - wrapper for dpkg"
+msgstr "debpkg - Wrapper für Dpkg"
+
+#. type: Plain text
+#: ../scripts/debpkg.1:6
+msgid "B<debpkg> I<dpkg-options>"
+msgstr "B<debpkg> I<Dpkg-Optionen>"
+
+#. type: Plain text
+#: ../scripts/debpkg.1:12
+msgid ""
+"B<debpkg> simply invokes B<dpkg>(1) but first becomes superuser so that "
+"B<dpkg> is able to install and remove packages. It also cleans the "
+"environment and resets PATH to a sane default: \"/usr/sbin:/usr/bin:/sbin:/"
+"bin:/usr/bin/X11\" so that local versions of programs are not run by "
+"accident."
+msgstr ""
+"B<debpkg> ruft einfach B<dpkg>(1) auf, wird aber zuerst Superuser, so dass "
+"B<dpkg> in der Lage ist, Programme zu installieren und zu entfernen. "
+"Außerdem bereinigt es die Umgebung und setzt PATH auf eine vernünftige "
+"Vorgabe: »/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11«, so dass lokale "
+"Versionen von Programmen nicht aus Versehen ausgeführt werden."
+
+#. type: Plain text
+#: ../scripts/debpkg.1:17
+msgid ""
+"B<debpkg> must be given superuser privileges in some way to function "
+"properly. B<Access to debpkg with those privileges is the same as having "
+"superuser access to your machine.> B<debpkg> will abort if it finds that it "
+"neither being run by root nor setuid root."
+msgstr ""
+"B<debpkg> muss irgendwie Superuser-Rechte bekommen, damit es richtig "
+"funktioniert. B<Zugriff auf Debpkg mit diesen Rechten ist dasselbe, als wenn "
+"Sie Superuser-Zugriff auf Ihren Rechner hätten.> B<debpkg> wird abgebrochen, "
+"wenn es herausfindet, dass es weder durch Root noch per Setuid-Root "
+"ausgeführt wird."
+
+#. type: Plain text
+#: ../scripts/debpkg.1:23
+msgid ""
+"The B<devscripts> package has been designed to allow B<debpkg> to be made "
+"setuid root. This works by using a compiled wrapper script, which means "
+"that B<suidperl> is not required. See B<dpkg-statoverride>(8) if you wish "
+"to make this program setuid root. B<sudo> or B<super> could also "
+"conceivably be used."
+msgstr ""
+"Das Paket B<devscripts> wurde entworfen, um B<debpkg> zu ermöglichen, Setuid-"
+"Root zu sein. Dies funktioniert mittels eines kompilierten Wrapper-Skripts, "
+"was bedeutet, dass B<suidperl> nicht benötigt wird. Lesen Sie B<dpkg-"
+"statoverride>(8), falls Sie diesem Programm das Setuid-Root-Recht geben "
+"möchten. Es ist auch denkbar, dass B<sudo> oder B<super> verwendet werden."
+
+#. type: Plain text
+#: ../scripts/debpkg.1:25
+msgid ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; minor modifications made by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; kleinere Änderungen wurden "
+"von Julian Gilbey E<lt>jdg@debian.orgE<gt> vorgenommen."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:3
+msgid "debrepro - reproducibility tester for Debian packages"
+msgstr "debrepro - Reproduzierbarkeitstester für Debian-Pakete"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:7
+msgid "B<debrepro> [I<OPTIONS>] [I<SOURCEDIR>]"
+msgstr "B<debrepro> [I<OPTIONEN>] [I<QUELLVERZ>]"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:11
+msgid ""
+"B<debrepro> will build a given source directory twice, with a set of "
+"variations between the first and the second build, and compare the produced "
+"binary packages. If B<diffoscope> is installed, it is used to compare non-"
+"matching binaries. If B<disorderfs> is installed, it is used during the "
+"build to inject non-determinism in filesystem listing operations."
+msgstr ""
+"B<debrepro> wird ein angegebenes Quellverzeichnis zweimal bauen, mit einem "
+"Satz von Veränderungen zwischen erstem und zweiten Bauen und dann die "
+"erzeugten Binärpakete vergleichen. Falls B<diffoscope> installiert ist, wird "
+"es zum Vergleich unpassender Programme verwendet. Falls B<disorderfs> "
+"installiert ist, wird es während des Bauens benutzt, um nicht vorbestimmtes "
+"in Dateisystemauflistungsaktionen einzuspeisen."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:18
+msgid ""
+"I<SOURCEDIR> must be a directory containing an unpacked Debian source "
+"package. If I<SOURCEDIR> is omitted, the current directory is assumed."
+msgstr ""
+"I<QUELLVERZ> muss ein Verzeichnis sein, das ein entpacktes Debian-Quellpaket "
+"enthält. Falls I<QUELLVERZ> weggelassen wird, wird das aktuelle Verzeichnis "
+"angenommen."
+
+#. type: =head1
+#: ../scripts/debrepro.pod:21
+msgid "OUTPUT DIRECTORY"
+msgstr "AUSGABEVERZEICHNIS"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:23
+msgid ""
+"At the very end of a build, B<debrepro> will inform the location of the "
+"output directory where the build artifacts can be found. In that directory, "
+"you will find:"
+msgstr ""
+"Ganz am Ende des Bauens wird B<debrepro> den Speicherort des "
+"Ausgabeverzeichnisses mitteilen, wo die Bauartefakte zu finden sind. In "
+"diesem Verzeichnis werden Sie folgendes finden:"
+
+#. type: =item
+#: ../scripts/debrepro.pod:29
+msgid "I<$OUTPUTDIR/first>"
+msgstr "I<$AUSGABEVERZ/first>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:31
+msgid ""
+"Contains the results of the first build, including a copy of the source "
+"tree, and the resulting binary packages."
+msgstr ""
+"enthält die Ergebnisse des ersten Bauens, einschließlich einer Kopie des "
+"Quellverzeichnisbaums und den daraus resultierenden Binärpaketen."
+
+#. type: =item
+#: ../scripts/debrepro.pod:34
+msgid "I<$OUTPUTDIR/first/build.sh>"
+msgstr "I<$AUSGABEVERZ/first/build.sh>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:36
+msgid "Contains the exact build script that was used in the first build."
+msgstr "enthält das genaue Bauskript, das beim ersten Bauen benutzt wurde."
+
+#. type: =item
+#: ../scripts/debrepro.pod:38
+msgid "I<$OUTPUTDIR/second>"
+msgstr "I<$AUSGABEVERZ/second>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:40
+msgid ""
+"Contains the results of the second build, including a copy of the source "
+"tree, and the resulting binary packages."
+msgstr ""
+"enthält die Ergebnisse des zweiten Bauens, einschließlich einer Kopie des "
+"Quellverzeichnisbaums und den daraus resultierenden Binärpaketen."
+
+#. type: =item
+#: ../scripts/debrepro.pod:43
+msgid "I<$OUTPUTDIR/second/build.sh>"
+msgstr "I<$AUSGABEVERZ/second/build.sh>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:45
+msgid "Contains the exact build script that was used in the second build."
+msgstr "enthält das genaue Bauskript, das beim zweiten Bauen benutzt wurde."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:49
+msgid ""
+"Taking a B<diff(1)> between I<$OUTPUTDIR/first/build.sh> and I<$OUTPUTDIR/"
+"second/build.sh> is an excellent way of figuring out exactly what changed "
+"between the two builds."
+msgstr ""
+"Um herauszufinden, was genau sich zwischen den beiden Bauvorgängen geändert "
+"hat, ist B<diff(1)> zwischen I<$AUSGABEVERZ/first/build.sh> und "
+"I<$AUSGABEVERZ/second/build.sh> eine hervorragende Methode."
+
+#. type: =head1
+#: ../scripts/debrepro.pod:53
+msgid "SUPPORTED VARIATIONS"
+msgstr "UNTERSTÜTZTE VARIATIONEN"
+
+#. type: =item
+#: ../scripts/debrepro.pod:57
+msgid "B<user>"
+msgstr "B<user>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:59
+msgid ""
+"The I<$USER> environment variable will contain different values between the "
+"first and second builds."
+msgstr ""
+"Die Umgebungsvariable I<$USER> wird bei erstem und zweitem Bauen "
+"unterschiedliche Werte enthalten."
+
+#. type: =item
+#: ../scripts/debrepro.pod:62
+msgid "B<path>"
+msgstr "B<path>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:64
+msgid ""
+"During the second build, a fake, non-existing directory will be appended to "
+"the I<$PATH> environment variable."
+msgstr ""
+"Während des zweiten Bauens wird ein gefälschtes, nicht existierendes "
+"Verzeichnis an die Umgebungsvariable I<$PATH> angehängt."
+
+#. type: =item
+#: ../scripts/debrepro.pod:67
+msgid "B<umask>"
+msgstr "B<umask>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:69
+msgid "The builds will use different umask settings."
+msgstr "Beim Bauen werden unterschiedliche Umask-Einstellungen verwendet."
+
+#. type: =item
+#: ../scripts/debrepro.pod:71
+msgid "B<locale>"
+msgstr "B<locale>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:73
+msgid "Both I<$LC_ALL> and I<$LANG> will be different across the two builds."
+msgstr ""
+"Sowohl I<$LC_ALL> als auch I<$LANG> werden sich bei den beiden Bauvorgängen "
+"unterscheiden."
+
+#. type: =item
+#: ../scripts/debrepro.pod:75
+msgid "B<timezone>"
+msgstr "B<timezone>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:77
+msgid "I<$TZ> will be different across builds."
+msgstr "I<$TZ> wird sich bei den beiden Bauvorgängen unterscheiden."
+
+#. type: =item
+#: ../scripts/debrepro.pod:79
+msgid "B<filesystem-ordering>"
+msgstr "B<Dateisystemordnung>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:81
+msgid ""
+"If B<disorderfs> is installed, both builds will be done under a disorderfs "
+"overlay directory. This will cause filesystem listing operations to be "
+"return items in a non-deterministic order."
+msgstr ""
+"Falls B<disorderfs> installiert ist, werden beide Bauvorgänge unter einem "
+"überlagernden Disorderfs-Verzeichnis erledigt. Dies führt dazu, dass "
+"Dateisystemauflistungstransaktionen Elemente in einer nicht festgelegten "
+"Reihenfolge zurückgeben."
+
+#. type: =item
+#: ../scripts/debrepro.pod:85
+msgid "B<time>"
+msgstr "B<time>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:87
+msgid ""
+"The second build will be executed 213 days, 7 hours and 13 minutes in the "
+"future with regards to the current time (using B<faketime(1)>)."
+msgstr ""
+"Das zweite Bauen wird in 213 Tagen, 7 Stunden und 13 Minuten in der Zukunft "
+"unter Berücksichtigung der aktuellen Zeit (mittels B<faketime(1)>) erledigt."
+
+#. type: =item
+#: ../scripts/debrepro.pod:96
+msgid "-s VARIATION, --skip VARIATION"
+msgstr "-s VARIATION, --skip VARIATION"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:98
+msgid ""
+"Don't perform the named VARIATION. Variation names are the ones used in "
+"their description in section B<SUPPORTED VARIATIONS>."
+msgstr ""
+"führt die genannte VARIATION nicht durch. Variationsnamen sind die, deren "
+"Beschreibung im Abschnitt B<SUPPORTED VARIATIONS> benutzt werden."
+
+#. type: =item
+#: ../scripts/debrepro.pod:101
+msgid "-b COMMAND, --before-second-build COMMAND"
+msgstr "-b BEFEHL, --before-second-build BEFEHL"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:103
+msgid ""
+"Run COMMAND before performing the second build. This can be used for example "
+"to apply a patch to a source tree for the second build, and check whether "
+"(or how) the resulting binaries are affected."
+msgstr ""
+"führt den BEFEHL vor dem zweiten Bauen aus. Dies kann zum Beispiel verwendet "
+"werden, um für das zweite Bauen einen Patch auf den Quellverzeichnisbaum "
+"anzuwenden und zu prüfen ob (oder wie) die daraus resultierenden "
+"Binärdateien betroffen sind."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:107 ../scripts/salsa.pl:381
+msgid "Examples:"
+msgstr "Beispiele:"
+
+#. type: verbatim
+#: ../scripts/debrepro.pod:109
+#, no-wrap
+msgid ""
+" $ debrepro --before-second-build \"git checkout branch-with-changes\"\n"
+"\n"
+msgstr ""
+" $ debrepro --before-second-build \"git checkout Zweig-mit-Änderungen\"\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/debrepro.pod:111
+#, no-wrap
+msgid ""
+" $ debrepro --before-second-build \"patch -p1 < /path/to/patch\"\n"
+"\n"
+msgstr ""
+" $ debrepro --before-second-build \"patch -p1 < /Pfad/zum/Patch\"\n"
+"\n"
+
+#. type: =item
+#: ../scripts/debrepro.pod:113
+msgid "-B COMMAND, --build-command COMMAND"
+msgstr "-B BEFEHL, --build-command BEFEHL"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:115
+msgid "Use custom build command. Default: I<dpkg-buildpackage -b -us -uc>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:117
+msgid ""
+"If a custom build command is specified, the restriction of only running "
+"against a Debian source tree is relaxed and you can run debrepro against any "
+"source directory."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:121
+msgid "-a PATTERN, --artifact-pattern PATTERN"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:123
+msgid ""
+"Define a file glob pattern to determine which artifacts need to be compared "
+"across the builds. Default: I<../*.deb>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:126
+msgid "-n, --no-copy"
+msgstr "-n, --no-copy"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:128
+msgid ""
+"Do not copy the source directory to the temporary work directory before each "
+"build. Use this to run debrepro against the source directory directly."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:132
+msgid "-t TIME, --timeout TIME"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:134
+msgid ""
+"Apply a timeout to all builds. I<TIME> must be a time specification "
+"compatible with GNU timeout(1)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:138
+msgid "-h, --help"
+msgstr "-h, --help"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:140
+msgid "Display this help message and exit."
+msgstr "zeigt diese Hilfenachricht und beendet sich."
+
+#. type: SH
+#: ../scripts/debrepro.pod:144 ../scripts/debsnap.1:102
+#: ../scripts/dscextract.1:20 ../scripts/transition-check.pl:54
+#: ../scripts/uscan.pl:1917 ../scripts/wnpp-check.1:28
+#, no-wrap
+msgid "EXIT STATUS"
+msgstr "EXIT-STATUS"
+
+#. type: =item
+#: ../scripts/debrepro.pod:148 ../scripts/transition-check.pl:61
+#: ../scripts/who-permits-upload.pl:125
+msgid "0Z<>"
+msgstr "0Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:150
+msgid "Package is reproducible."
+msgstr "Paket ist reproduzierbar."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:152
+msgid ""
+"Reproducible here means that the two builds produced the exactly the same "
+"binaries, under the set of variations that B<debrepro> tests. Other sources "
+"of non-determinism in builds that are not yet tested might still affect "
+"builds in the wild."
+msgstr ""
+"Reproduzierbar bedeutet, dass die beiden Bauvorgänge unter dem Satz von "
+"Variationen, die B<debrepro> testet, zu exakt denselben Binärdateien führen. "
+"Andere Quellen, die den Bau unvorhersehbar beeinflussen können, wurden noch "
+"nicht getestet, können jedoch in freier Wildbahn das Bauen beeinflussen."
+
+#. type: =item
+#: ../scripts/debrepro.pod:157 ../scripts/transition-check.pl:66
+#: ../scripts/who-permits-upload.pl:129
+msgid "1Z<>"
+msgstr "1Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:159
+msgid "Package is not reproducible."
+msgstr "Paket ist nicht reproduzierbar."
+
+#. type: =item
+#: ../scripts/debrepro.pod:161 ../scripts/who-permits-upload.pl:133
+msgid "2Z<>"
+msgstr "2Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:163
+msgid "The given input is not a valid Debian source package."
+msgstr "Die angegebene Eingabe ist kein gültiges Debian-Quellpaket."
+
+#. type: =item
+#: ../scripts/debrepro.pod:165
+msgid "3Z<>"
+msgstr "3Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:167
+msgid "Required programs are missing."
+msgstr "Erforderliche Programme fehlen."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:173
+msgid "diffoscope (1), disorderfs (1), timeout(1)"
+msgstr "diffoscope (1), disorderfs (1), timeout(1)"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:177
+msgid "Antonio Terceiro <terceiro@debian.org>."
+msgstr "Antonio Terceiro <terceiro@debian.org>."
+
+#. type: TH
+#: ../scripts/debrelease.1:1
+#, no-wrap
+msgid "DEBRELEASE"
+msgstr "DEBRELEASE"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:4
+msgid "debrelease - a wrapper around dupload or dput"
+msgstr "debrelease - ein Wrapper um Dupload oder Dput"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:6
+msgid "B<debrelease> [I<debrelease options>] [I<dupload/dput options>]"
+msgstr "B<debrelease> [I<Debrelease-Optionen>] [I<Dupload-/Dput-Optionen>]"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:15
+msgid ""
+"B<debrelease> is a simple wrapper around B<dupload> or B<dput>. It is "
+"called from within the source code tree of a package, and figures out the "
+"current version of a package. It then looks for the corresponding I<."
+"changes> file (which lists the files needed to upload in order to release "
+"the package) in the parent directory of the source code tree and calls "
+"B<dupload> or B<dput> with the I<.changes> file as parameter in order to "
+"perform the actual uploading."
+msgstr ""
+"B<debrelease> ist ein einfacher Wrapper um B<dupload> oder B<dput>. Es wird "
+"aus dem Quellcodeverzeichnisbaum eines Pakets heraus aufgerufen und findet "
+"die aktuelle Version eines Pakets heraus. Dann sucht es im übergeordneten "
+"Verzeichnis des Quellcodeverzeichnisbaums nach der entsprechenden I<."
+"changes>-Datei (die die Dateien auflistet, die zum Hochladen nötig sind) und "
+"ruft B<dupload> oder B<dput> mit der I<.changes>-Datei als Parameter auf, um "
+"das tatsächliche Hochladen durchzuführen."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:20
+msgid ""
+"Options may be given to B<debrelease>; except for the ones listed below, "
+"they are passed on unchanged to B<dupload> or B<dput>. The B<devscripts> "
+"configuration files are also read by B<debrelease> as described below."
+msgstr ""
+"An B<debrelease> können Optionen übergeben werden; mit Ausnahme der unten "
+"aufgeführten werden sie unverändert an B<dupload> oder B<dput> "
+"weitergereicht. Die B<devscripts>-Konfigurationsdateien werden außerdem wie "
+"im Folgenden beschrieben durch B<debrelease> gelesen."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:31
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debrelease> will climb the directory tree until it finds a I<debian/"
+"changelog> file. As a safeguard against stray files causing potential "
+"problems, it will examine the name of the parent directory once it finds the "
+"I<debian/changelog> file, and check that the directory name corresponds to "
+"the package name. Precisely how it does this is controlled by two "
+"configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+"Ebenso wie mehrere andere Skripte im Paket B<devscripts> wird B<debrelease> "
+"den Verzeichnisbaum emporsteigen, bis es eine I<debian/changelog>-Datei "
+"findet. Als eine Schutzmaßnahme gegen verirrte Dateien, die potenziell "
+"Probleme bereiten, wird es den Namen des übergeordneten Verzeichnisses "
+"untersuchen, sobald es eine I<debian/changelog>-Datei findet und prüfen, ob "
+"der Verzeichnisname dem Paketnamen entspricht. Wie dies genau geschieht, "
+"wird durch die beiden Konfigurationsdateivariablen "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> und B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> "
+"sowie ihre entsprechenden Befehlszeilenoptionen B<--check-dirname-level> und "
+"B<--check-dirname-regex> geregelt."
+
+#. type: TP
+#: ../scripts/debrelease.1:61 ../scripts/debrsign.1:31 ../scripts/debsign.1:68
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:67
+msgid ""
+"If this option is used, or the default I<.changes> file is not found but a "
+"source-only I<.changes> file is present, then this source-only I<.changes> "
+"file will be uploaded instead of an arch-specific one."
+msgstr ""
+"Falls diese Option benutzt wird oder die Standard-I<.changes>-Datei nicht "
+"gefunden wurde, jedoch eine reine Quell-I<.changes>-Datei vorliegt, dann "
+"wird diese reine Quell-I<.changes>-Datei anstelle der "
+"architekturspezifischen hochgeladen."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:75
+msgid ""
+"See B<dpkg-architecture>(1) for a description of these options. They affect "
+"the search for the I<.changes> file. They are provided to mimic the "
+"behaviour of B<dpkg-buildpackage> when determining the name of the I<."
+"changes> file. If a plain B<-t> is given, it is taken to be the B<dupload> "
+"host-specifying option, and therefore signifies the end of the B<debrelease>-"
+"specific options."
+msgstr ""
+"Eine Beschreibung dieser Optionen finden Sie unter B<dpkg-architecture>(1). "
+"Sie beeinflussen die Suche nach der I<.changes>-Datei, Sie werden "
+"bereitgestellt, um das Verhalten von B<dpkg-buildpackage> nachzuahmen, wenn "
+"der Name der I<.changes>-Datei bestimmt wird. Falls ein einfaches B<-t> "
+"angegeben wurde, wird sie von der rechnerangebenden B<dupload>-Option "
+"genommen und bedeutet daher das Ende der B<debrelease>-spezifischen Optionen."
+
+#. type: TP
+#: ../scripts/debrelease.1:75 ../scripts/debrsign.1:41 ../scripts/debsign.1:78
+#, no-wrap
+msgid "B<--multi>"
+msgstr "B<--multi>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:81
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debrelease> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by B<dpkg-"
+"cross>."
+msgstr ""
+"Multiarch-Änderungsmodus: Dies bedeutet, dass B<debrelease> die aktuellste "
+"Datei mit dem Namensmuster I<Paketversion_*+*.changes> als I<.changes>-Datei "
+"benutzen soll, was durch B<dpkg-cross> erstellte I<.changes>-Dateien "
+"ermöglicht."
+
+#. type: TP
+#: ../scripts/debrelease.1:111
+#, no-wrap
+msgid "B<DEBRELEASE_UPLOADER>"
+msgstr "B<DEBRELEASE_UPLOADER>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:116
+msgid ""
+"The currently recognised values are I<dupload> and I<dput>, and it specifies "
+"which uploader program should be used. It corresponds to the B<--dupload> "
+"and B<--dput> command line options."
+msgstr ""
+"Die derzeit erkannten Werte sind I<dupload> sowie I<dput> und es gibt an, "
+"welches Programm zum Hochladen verwendet werden soll. Es entspricht den "
+"Befehlszeilenoptionen B<--dupload> und B<--dput>."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:125
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and I<."
+"deb> files, and is either an absolute path or relative to the top of the "
+"source tree. This corresponds to the B<--debs-dir> command line option. "
+"This directive could be used, for example, if you always use B<pbuilder> or "
+"B<svn-buildpackage> to build your packages. Note that it also affects "
+"B<debc>(1) and B<debi>(1)."
+msgstr ""
+"Dies gibt das Verzeichnis an, in dem nach den I<.changes>- und I<.deb>-"
+"Dateien gesucht wird. Es ist entweder ein absoluter Pfad oder relativ zur "
+"obersten Ebene des Quellverzeichnisbaums. Dies entspricht der "
+"Befehlszeilenoption B<--debs-dir>. Diese Direktive kann zum Beispiel benutzt "
+"werden, falls Sie immer B<pbuilder> oder B<svn-buildpackage> verwenden, um "
+"Ihre Pakete zu bauen. Beachten Sie, dass es außerdem B<debc>(1) und "
+"B<debi>(1) auf die gleiche Weise beeinflusst."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:136
+msgid "B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+msgstr "B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:138
+msgid ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, based on the original B<release> "
+"script by Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+msgstr ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt> auf Basis des Original-B<release>-"
+"Skripts von Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+
+#. type: Content of the dhfirstname entity
+#: ../scripts/deb-reversion.dbk:30
+msgid "<firstname>martin f.</firstname>"
+msgstr "<firstname>martin f.</firstname>"
+
+#. type: Content of the dhsurname entity
+#: ../scripts/deb-reversion.dbk:31
+msgid "<surname>krafft</surname>"
+msgstr "<surname>krafft</surname>"
+
+#. type: Content of the dhmaintfirstname entity
+#: ../scripts/deb-reversion.dbk:32
+msgid "<firstname>Julian</firstname>"
+msgstr "<firstname>Julian</firstname>"
+
+#. type: Content of the dhmaintsurname entity
+#: ../scripts/deb-reversion.dbk:33
+msgid "<surname>Gilbey</surname>"
+msgstr "<surname>Gilbey</surname>"
+
+#. type: Content of the dhdate entity
+#: ../scripts/deb-reversion.dbk:35
+msgid "<date>Feb 13, 2006</date>"
+msgstr "<date>13. Feb. 2006</date>"
+
+#. type: Content of the dhsection entity
+#: ../scripts/deb-reversion.dbk:38
+msgid "<manvolnum>1</manvolnum>"
+msgstr "<manvolnum>1</manvolnum>"
+
+#. type: Content of the dhemail entity
+#: ../scripts/deb-reversion.dbk:39
+msgid "<email>madduck@debian.org</email>"
+msgstr "<email>madduck@debian.org</email>"
+
+#. type: Content of the dhmaintemail entity
+#: ../scripts/deb-reversion.dbk:40
+msgid "<email>jdg@debian.org</email>"
+msgstr "<email>jdg@debian.org</email>"
+
+#. type: Content of the dhusername entity
+#: ../scripts/deb-reversion.dbk:41
+msgid "martin f. krafft"
+msgstr "martin f. krafft"
+
+#. type: Content of the dhmaintusername entity
+#: ../scripts/deb-reversion.dbk:42
+msgid "Julian Gilbey"
+msgstr "Julian Gilbey"
+
+#. type: Content of the dhucpackage entity
+#: ../scripts/deb-reversion.dbk:43
+msgid "<refentrytitle>deb-reversion</refentrytitle>"
+msgstr "<refentrytitle>deb-reversion</refentrytitle>"
+
+#. type: Content of the dhcommand entity
+#: ../scripts/deb-reversion.dbk:44 ../scripts/deb-reversion.dbk:45
+msgid "deb-reversion"
+msgstr "deb-reversion"
+
+#. type: Content of the debian entity
+#: ../scripts/deb-reversion.dbk:47
+msgid "<productname>Debian</productname>"
+msgstr "<productname>Debian</productname>"
+
+#. type: Content of the gnu entity
+#: ../scripts/deb-reversion.dbk:48
+msgid "<acronym>GNU</acronym>"
+msgstr "<acronym>GNU</acronym>"
+
+#. type: Content of the gpl entity
+#: ../scripts/deb-reversion.dbk:49
+msgid "&gnu; <acronym>GPL</acronym>"
+msgstr "&gnu; <acronym>GPL</acronym>"
+
+#. type: Content of: <refentry><refentryinfo><address>
+#: ../scripts/deb-reversion.dbk:55
+#, no-wrap
+msgid ""
+" &dhemail;\n"
+" "
+msgstr ""
+" &dhemail;\n"
+" "
+
+#. type: Content of: <refentry><refentryinfo>
+#: ../scripts/deb-reversion.dbk:54
+msgid "<placeholder type=\"address\" id=\"0\"/> &dhdate;"
+msgstr "<placeholder type=\"address\" id=\"0\"/> &dhdate;"
+
+#. type: Content of: <refentry><refnamediv><refname>
+#: ../scripts/deb-reversion.dbk:65
+msgid "&dhcommand;"
+msgstr "&dhcommand;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: ../scripts/deb-reversion.dbk:67
+msgid "simple script to change the version of a .deb file"
+msgstr "einfaches Skript, um die Version einer .deb-Datei zu ändern"
+
+#. type: Content of: <refentry><refsynopsisdiv><cmdsynopsis>
+#: ../scripts/deb-reversion.dbk:72
+msgid ""
+"<command>&dhcommand;</command> <arg choice=\"opt\"> <replaceable>options</"
+"replaceable> </arg> <replaceable> .deb-file</replaceable> <arg "
+"choice=\"opt\" rep=\"repeat\"><replaceable>log message</replaceable></arg>"
+msgstr ""
+"<command>&dhcommand;</command> <arg choice=\"opt\"> <replaceable>Optionen</"
+"replaceable> </arg> <replaceable> .deb-Datei</replaceable> <arg "
+"choice=\"opt\" rep=\"repeat\"><replaceable>log message</replaceable></arg>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:85
+msgid ""
+"<command>&dhcommand;</command> unpacks the specified <filename>.deb</"
+"filename> file, changes the version number in the relevant locations, "
+"appends a Debian <filename>changelog</filename> entry with the specified "
+"contents, and creates a new <filename>.deb</filename> file with the updated "
+"version."
+msgstr ""
+"<command>&dhcommand;</command> entpackt die angegebene <filename>.deb</"
+"filename>-Datei, ändert die Versionsnummer an den relevanten Stellen, hängt "
+"einen Debian-<filename>changelog</filename>-Eintrag mit dem angegebenen "
+"Inhalt an und erstellt eine neue <filename>.deb</filename>-Datei mit der "
+"aktualisierten Version."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:92
+msgid ""
+"By default, the tool creates a new version number suitable for local "
+"changes, such that the new package will be greater than the current one, but "
+"lesser than any future, official Debian packages. With <option>-v "
+"<replaceable class=\"parameter\">version</replaceable></option>, the version "
+"number can be specified directly. On the other hand, the <option>-c</"
+"option> simply calculates the new version number but does not generate a new "
+"package."
+msgstr ""
+"Standardmäßig erstellt das Werkzeug eine für lokale Änderungen angemessene "
+"neue Versionsnummer, so dass die des neuen Pakets größer sein wird, als die "
+"des aktuellen, aber kleiner als die irgendwelcher zukünftiger offizieller "
+"Debian-Pakete. Mit <option>-v <replaceable class=\"parameter\">Version</"
+"replaceable></option> kann die Versionsnummer direkt angegeben werden. "
+"Andererseits berechnet <option>-c</option> einfach die neue Versionsnummer, "
+"erzeugt aber kein neues Paket."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:103
+msgid ""
+"When building a <filename>.deb</filename> file, root privileges are required "
+"in order to have the correct permissions and ownerships in the resulting "
+"<filename>.deb</filename> file. This can be achieved either by running "
+"<command>&dhcommand;</command> as root or running under "
+"<citerefentry><refentrytitle>fakeroot</refentrytitle> <manvolnum>1</"
+"manvolnum></citerefentry>, as 'fakeroot &dhcommand; foo.deb'."
+msgstr ""
+"Wenn eine <filename>.deb</filename>-Datei gebaut wird, sind Root-Rechte "
+"nötig, um die korrekten Zugriffs- und Besitzrechte in der resultierenden "
+"<filename>.deb</filename>-Datei zu bekommen. Dies kann entweder durch "
+"Ausführen von <command>&dhcommand;</command> als Root oder durch Ausführen "
+"unter <citerefentry><refentrytitle>fakeroot</refentrytitle> <manvolnum>1</"
+"manvolnum></citerefentry> als »fakeroot &dhcommand; foo.deb« erreicht werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:113
+msgid ""
+"With <option>-k <replaceable class=\"parameter\">hook</replaceable></"
+"option>, a hook script may be specified, which is run on the unpacked binary "
+"packages just before it is repacked. If you want to write changelog entries "
+"from within the hook, use '<command>dch -a -- <replaceable "
+"class=\"parameter\">your message</replaceable></command>'. (Alternatively, "
+"do not give a changelog entry on the <command>&dhcommand;</command> command "
+"line and <command>dch</command> will be called automatically.) The hook "
+"command must be placed in quotes if it has more than one word; it is called "
+"via <command>sh -c</command>."
+msgstr ""
+"Mit <option>-k <replaceable class=\"parameter\">Hook</replaceable></option> "
+"kann ein Hook-Skript angegeben werden, das auf den entpackten Binärpaketen "
+"ausgeführt wird, unmittelbar bevor sie erneut gepackt werden. Falls Sie "
+"Changelog-Einträge aus dem Hook heraus schreiben möchten, verwenden Sie "
+"»<command>dch -a -- <replaceable class=\"parameter\">Ihre Nachricht</"
+"replaceable></command>«. (Geben Sie alternativ auf der <command>&dhcommand;</"
+"command>-Befehlszeile keinen Changelog-Eintrag an, dann wird <command>dch</"
+"command> automatisch aufgerufen.) Der Hook-Befehl muss in Anführungszeichen "
+"gesetzt werden, falls er aus mehr als einem Wort besteht; er wird per "
+"<command>sh -c</command> aufgerufen."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:131
+msgid ""
+"<option>-v</option> <replaceable class=\"parameter\">new-version</"
+"replaceable>"
+msgstr ""
+"<option>-v</option> <replaceable class=\"parameter\">neue_Version</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:132
+msgid ""
+"<option>--new-version</option> <replaceable class=\"parameter\">new-version</"
+"replaceable>"
+msgstr ""
+"<option>--new-version</option> <replaceable "
+"class=\"parameter\">neue_Version</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:135
+msgid ""
+"Specifies the version number to be used for the new version. Passed to "
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>."
+msgstr ""
+"gibt die Versionsnummer an, die für die neue Version benutzt wird. Wird an "
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry> übergeben."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:145
+msgid ""
+"<option>-o</option> <replaceable class=\"parameter\">old-version</"
+"replaceable>"
+msgstr ""
+"<option>-o</option> <replaceable class=\"parameter\">alte_Version</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:146
+msgid ""
+"<option>--old-version</option> <replaceable class=\"parameter\">old-version</"
+"replaceable>"
+msgstr ""
+"<option>--old-version</option> <replaceable "
+"class=\"parameter\">alte_Version</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:149
+msgid ""
+"Specifies the version number to be used as the old version instead of the "
+"version stored in the <filename>.deb</filename>'s <filename>control</"
+"filename> file."
+msgstr ""
+"gibt die Versionsnummer an, die als alte Version anstelle der in der Datei "
+"<filename>control</filename> des <filename>.deb</filename>s gespeicherten "
+"Version verwendet werden soll."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:157
+msgid "<option>-c</option>"
+msgstr "<option>-c</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:158
+msgid "<option>--calculate-only</option>"
+msgstr "<option>--calculate-only</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:161
+msgid ""
+"Only calculate and display the new version number which would be used; do "
+"not build a new <filename>.deb</filename> file. Cannot be used in "
+"conjunction with <option>-v</option>."
+msgstr ""
+"berechnet nur die neue Versionsnummer, die benutzt würde, und zeigt sie an; "
+"baut keine neue <filename>.deb</filename>-Datei; kann nicht zusammen mit "
+"<option>-v</option> benutzt werden."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:169
+msgid ""
+"<option>-s</option> <replaceable class=\"parameter\">string</replaceable>"
+msgstr ""
+"<option>-s</option> <replaceable class=\"parameter\">Zeichenkette</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:170
+msgid ""
+"<option>--string</option> <replaceable class=\"parameter\">string</"
+"replaceable>"
+msgstr ""
+"<option>--string</option> <replaceable class=\"parameter\">Zeichenkette</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:173
+msgid ""
+"Instead of using 'LOCAL.' as the version string to append to the old version "
+"number, use <replaceable class=\"parameter\">string</replaceable> instead."
+msgstr ""
+"benutzt als Versionszeichenkette zum Anhängen an die alte Versionsnummer "
+"<replaceable class=\"parameter\">Zeichenkette</replaceable> anstelle von "
+"»LOCAL.«."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:181
+msgid ""
+"<option>-k</option> <replaceable class=\"parameter\">hook-command</"
+"replaceable>"
+msgstr ""
+"<option>-k</option> <replaceable class=\"parameter\">Hook-Befehl</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:182
+msgid ""
+"<option>--hook</option> <replaceable class=\"parameter\">hook-command</"
+"replaceable>"
+msgstr ""
+"<option>--hook</option> <replaceable class=\"parameter\">Hook-Befehl</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:185
+msgid ""
+"A hook command to run after unpacking the old <filename>.deb</filename> file "
+"and modifying the <filename>changelog</filename>, and before packing up the "
+"new <filename>.deb</filename> file. Must be in quotes if it is more than "
+"one (shell) word. Only one hook command may be specified; if you want to "
+"perform more than this, you could specify 'bash' as the hook command, and "
+"you will then be given a shell to work in."
+msgstr ""
+"ein Hook-Befehl, der nach dem Entpacken der alten <filename>.deb</filename>-"
+"Datei und dem Ändern des <filename>changelog</filename> ausgeführt wird und "
+"bevor die neue <filename>.deb</filename>-Datei entpackt wird. Muss in "
+"Anführungszeichen stehen, falls er aus mehr als einem (Shell-)Wort besteht. "
+"Es kann nur ein Hook-Befehl angegeben werden; falls Sie mehr als diesen "
+"einen ausführen möchten, könnten Sie »bash« als Hook-Befehl angeben, dann "
+"erhalten Sie eine Shell, in der Sie arbeiten können."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:197
+msgid "<option>-D</option>"
+msgstr "<option>-D</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:198
+msgid "<option>--debug</option>"
+msgstr "<option>--debug</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:201
+msgid ""
+"Pass <option>--debug</option> to <citerefentry> <refentrytitle>dpkg-deb</"
+"refentrytitle> <manvolnum>1</manvolnum> </citerefentry>."
+msgstr ""
+"übergibt <option>--debug</option> an <citerefentry> <refentrytitle>dpkg-deb</"
+"refentrytitle> <manvolnum>1</manvolnum> </citerefentry>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:211
+msgid "<option>-b</option>"
+msgstr "<option>-b</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:212
+msgid "<option>--force-bad-version</option>"
+msgstr "<option>--force-bad-version</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:215
+msgid ""
+"Pass <option>--force-bad-version</option> to <citerefentry> "
+"<refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>"
+msgstr ""
+"übergibt <option>--force-bad-version</option> an <citerefentry> "
+"<refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:225
+msgid "<option>-h</option>"
+msgstr "<option>-h</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:226
+msgid "<option>--help</option>"
+msgstr "<option>--help</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:229
+msgid "Display usage information."
+msgstr "zeigt Aufrufinformationen"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:235
+msgid "<option>-V</option>"
+msgstr "<option>-V</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:236
+msgid "<option>--version</option>"
+msgstr "<option>--version</option>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:249
+msgid ""
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>, <citerefentry> <refentrytitle>dpkg-deb</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> "
+"<refentrytitle>fakeroot</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>"
+msgstr ""
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>, <citerefentry> <refentrytitle>dpkg-deb</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> "
+"<refentrytitle>fakeroot</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: ../scripts/deb-reversion.dbk:265
+msgid "DISCLAIMER"
+msgstr "HAFTUNGSAUSSCHLUSS"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:267
+msgid ""
+"&dhpackage; is a tool intended to help porters with modifying packages for "
+"other architectures, and to augment deb-repack, which creates modified "
+"packages with identical version numbers as the official packages. Chaos will "
+"ensue! With &dhpackage;, a proper version number can be selected, which does "
+"not obstruct the next official release but can be specifically pinned with "
+"APT or held with dpkg."
+msgstr ""
+"&dhpackage; ist ein Werkzeug, das Portierern helfen soll, Pakete für andere "
+"Architekturen zu ändern und deb-repack zu ergänzen, das veränderte Pakete "
+"mit identischen Versionsnummern als offizielle Pakete erstellt. Chaos wird "
+"folgen! Mit &dhpackage; kann eine ordnungsgemäße Versionsnummer ausgewählt "
+"werden, die die nächste offizielle Veröffentlichung nicht behindert, aber "
+"eigens mit APT-Pinning behandelt oder mit Dpkg gehalten werden kann."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:276
+msgid ""
+"Please take note that &dhpackage; does not come without problems. While it "
+"works fine in most cases, it may just not in yours. Especially, please "
+"consider that it changes binary packages (only!) and hence can break strict "
+"versioned dependencies between binary packages generated from the same "
+"source."
+msgstr ""
+"Bitte nehmen Sie zur Kenntnis, dass &dhpackage; nicht ohne Probleme "
+"daherkommt. Obwohl es in den meisten Fällen gut funktioniert, könnte das "
+"gerade bei Ihnen anders sein. Beachten Sie insbesondere, das es (nur!) "
+"Binärpakete ändert und daher Abhängigkeiten mit strenger Berücksichtigung "
+"der Versionen zwischen Binärpaketen, die aus der selben Quelle erzeugt "
+"wurden, zerstört."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:283
+msgid ""
+"You are using this tool at your own risk and I shall not shed a tear if your "
+"gerbil goes up in flames, your microwave attacks the stereo, or the angry "
+"slamming of your fist spills your coffee into the keyboard, which sets off a "
+"chain reaction resulting in a vast amount of money transferred from your "
+"account to mine."
+msgstr ""
+"Sie benutzen dieses Werkzeug auf eigene Gefahr und sollten keine Träne "
+"vergießen, falls Ihre Rennmaus in Flammen aufgeht, Ihre Mikrowelle Ihre "
+"Stereoanlage angreift oder der wütende Aufschlag Ihrer Faust Kaffee in Ihre "
+"Tastatur schüttet, was eine Kettenreaktion auslöst, die dazu führt, dass "
+"eine gewaltige Geldsumme von Ihrem Konto auf meins überwiesen wird."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:295
+msgid ""
+"&dhpackage; is Copyright 2004-5 by &dhusername; &dhemail; and modifications "
+"are Copyright 2006 by &dhmaintusername; &dhmaintemail;."
+msgstr ""
+"Das Copyright 2004/2005 liegt bei &dhusername; &dhemail; und Änderungen "
+"unterliegen dem Copyright 2006 von &dhmaintusername; &dhmaintemail;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:300
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the Artistic License: <ulink>http://www.opensource.org/licenses/"
+"artistic-license.php</ulink>. On Debian systems, the complete text of the "
+"Artistic License can be found in <filename>/usr/share/common-licenses/"
+"Artistic</filename>."
+msgstr ""
+"Die Rechte für das Kopieren, Weitergeben und/oder Ändern dieses Dokuments "
+"werden unter den Bedingungen der Artistic License gewährt: <ulink>http://www."
+"opensource.org/licenses/artistic-license.php</ulink>. Auf Debian-Systemen "
+"kann der komplette Text der Artistic License unter <filename>/usr/share/"
+"common-licenses/Artistic</filename> gefunden werden."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:309
+msgid ""
+"This manual page was written by &dhusername; &dhemail; and modified by "
+"&dhmaintusername; &dhmaintemail;."
+msgstr ""
+"Diese Handbuchseite wurde von &dhusername; &dhemail; geschrieben und durch "
+"&dhmaintusername; &dhmaintemail; geändert."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:198
+msgid ""
+"deb-why-removed - shows the reason a package was removed from the archive"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:202
+msgid "B<deb-why-removed> [I<option>...] I<package>..."
+msgstr "B<deb-why-removed> [I<Optionen>] I<Paket> …"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:206
+msgid ""
+"This program will download the removals metadata from the archive, search "
+"and print the entries within for a source or binary package name match."
+msgstr ""
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:213
+msgid "B<-u>, B<--url> I<URL>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:215
+msgid ""
+"URL to the archive removals deb822-formatted file list. This can be either "
+"an actual URL (https://, http://, file://), an pathname or an origin name. "
+"Currently the only origin name known is B<debian>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:220
+msgid "B<--no-refresh>"
+msgstr "B<--no-refresh>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:222
+msgid ""
+"Do not refresh the cached removals file even if there is a newer version in "
+"the archive."
+msgstr ""
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:225
+msgid "B<-h>, B<-?>, B<--help>"
+msgstr "B<-h>, B<-?>, B<--help>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:227 ../scripts/sadt.pod:66
+msgid "Show a help message and exit."
+msgstr "zeigt eine Hilfenachricht und wird beendet."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:231
+#, fuzzy
+#| msgid "Show the version information."
+msgid "Show the program version."
+msgstr "zeigt die Versionsinformationen."
+
+#. type: SH
+#: ../scripts/deb-why-removed.pl:235 ../scripts/debsnap.1:130
+#: ../scripts/diff2patches.1:28
+#, no-wrap
+msgid "FILES"
+msgstr "DATEIEN"
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:239
+msgid "I<cachedir>B</devscripts/deb-why-removed/>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:241
+msgid ""
+"This directory contains the cached removal files downloaded from the "
+"archive. I<cachedir> will be either B<$XDG_CACHE_HOME> or if that is not "
+"defined B<$HOME/.cache/>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:249
+msgid "L<https://ftp-master.debian.org/#removed>"
+msgstr "L<https://ftp-master.debian.org/#removed>"
+
+#. type: TH
+#: ../scripts/debrsign.1:1
+#, no-wrap
+msgid "DEBRSIGN"
+msgstr "DEBRSIGN"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:4
+msgid "debrsign - remotely sign a Debian .changes and .dsc file pair using SSH"
+msgstr ""
+"debrsign - signiert mittels SSH ein Debian-.changes- und .dsc-Dateipaar aus "
+"der Ferne"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:7
+msgid ""
+"B<debrsign> [I<options>] [I<user>B<@>]I<remotehost> [I<changes-file>|I<dsc-"
+"file>]"
+msgstr ""
+"B<debrsign> [I<Optionen>] [I<Benutzer>B<@>]I<ferner_Rechner> [I<Changes-"
+"Datei>|I<Dsc-Datei>]"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:15
+msgid ""
+"B<debrsign> takes either an unsigned I<.dsc> file or an unsigned I<.changes> "
+"file and the associated unsigned I<.dsc> file (found by replacing the "
+"architecture name and I<.changes> by I<.dsc>) if it appears in the I<."
+"changes> file and signs them by copying them to the remote machine using "
+"B<ssh>(1) and remotely running B<debsign>(1) on that machine. All options "
+"not listed below are passed to the B<debsign> program on the remote machine."
+msgstr ""
+"B<debrsign> nimmt entweder eine nicht signierte I<.dsc>-Datei oder eine "
+"nicht signierte I<.changes>-Datei und die zugehörige I<.dsc>-Datei entgegen "
+"(gefunden durch Ersetzen des Architekturnamens und I<.changes> durch I<."
+"dsc>), falls sie in der I<.changes>-Datei auftaucht, und signiert sie, indem "
+"sie mittels B<ssh>(1) auf den fernen Rechner kopiert werden und "
+"B<debsign>(1) aus der Ferne auf diesem Rechner ausgeführt wird. Alle "
+"Optionen, die nicht nachfolgend aufgeführt sind, werden an das Programm "
+"B<debsign> auf dem fernen Rechner weitergegeben."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:19
+msgid ""
+"If a I<.changes> or I<.dsc> file is specified, it is signed, otherwise, "
+"I<debian/changelog> is parsed to determine the name of the I<.changes> file "
+"to look for in the parent directory."
+msgstr ""
+"Falls eine I<.changes>- oder I<.dsc>-Datei angegeben wurde, wird sie "
+"signiert, andernfalls wird I<debian/changelog> ausgewertet, um den Namen der "
+"I<.changes>-Datei zu bestimmen, nach der im übergeordneten Verzeichnis "
+"gesucht werden soll."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:25
+msgid ""
+"This utility is useful if a developer must build a package on one machine "
+"where it is unsafe to sign it; they need then only transfer the small I<."
+"dsc> and I<.changes> files to a safe machine and then use the B<debsign> "
+"program to sign them before transferring them back. This program automates "
+"this process."
+msgstr ""
+"Dieses Hilfswerkzeug ist nützlich, falls ein Entwickler ein Paket auf einem "
+"Rechner bauen muss, der zum Signieren zu unsicher ist; er muss dann nur die "
+"kleinen I<.dsc>- und I<.changes>-Dateien auf den sicheren Rechner übertragen "
+"und dann das Programm B<debsign> verwenden, um sie vor der Rückübertragung "
+"zu signieren. Dieses Programm automatisiert diesen Prozess."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:30
+msgid ""
+"To do it the other way round, that is to connect to an unsafe machine to "
+"download the I<.dsc> and I<.changes> files, to sign them locally and then to "
+"transfer them back, see the B<debsign>(1) program, which can do this task."
+msgstr ""
+"Um es andersherum durchzuführen,d.h. sich mit einem unsicheren Rechner zu "
+"verbinden, um die I<.dsc>- und I<.changes>-Dateien herunterzuladen, sie "
+"lokal zu signieren und dann zurückzuübertragen, siehe das Programm "
+"B<debsign>(1), das diese Aufgabe erledigen kann."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:35 ../scripts/debsign.1:72
+msgid ""
+"Look for a source-only I<.changes> file instead of a binary-build I<."
+"changes> file."
+msgstr ""
+"sucht nach einer reinen Quell-I<.changes>-Datei anstatt einer I<.changes>-"
+"Datei eines Binärbaus."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:47
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debrsign> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by B<dpkg-"
+"cross>."
+msgstr ""
+"Multiarch-Änderungsmodus: Dies bedeutet, dass B<debrsign> die aktuellste "
+"Datei mit dem Namensmuster I<Paket_Version_*+*.changes> als I<.changes>-"
+"Datei verwenden soll, was durch B<dpkg-cross> erstellte I<.changes>-Dateien "
+"ermöglicht."
+
+#. type: TP
+#: ../scripts/debrsign.1:47
+#, no-wrap
+msgid "B<--path >I<remote-path>"
+msgstr "B<--path >I<ferner_Pfad>"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:50
+msgid "Specify a path to the GPG binary on the remote host."
+msgstr "gibt einen Pfad zum GPG-Programm auf dem fernen Rechner an."
+
+#. type: TP
+#: ../scripts/debrsign.1:53
+#, no-wrap
+msgid "B<Other options>"
+msgstr "B<andere Optionen>"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:57
+msgid "All other options are passed on to B<debsign> on the remote machine."
+msgstr ""
+"Alle anderen Optionen werden B<debsign> auf dem fernen Rechner übergeben."
+
+#. type: TP
+#: ../scripts/debrsign.1:63
+#, no-wrap
+msgid "B<DEBRSIGN_PGP_PATH>"
+msgstr "B<DEBRSIGN_PGP_PATH>"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:66
+msgid "Equivalent to passing B<--path> on the command line (see above.)"
+msgstr ""
+"entspricht der Übergabe von B<--path> auf der Befehlszeile (siehe oben)."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:70
+msgid "B<debsign>(1), B<dpkg-architecture>(1), B<ssh>(1)"
+msgstr "B<debsign>(1), B<dpkg-architecture>(1) und B<ssh>(1)"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:72 ../scripts/debsign.1:146
+msgid ""
+"This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt> and is "
+"copyright under the GPL, version 2 or later."
+msgstr ""
+"Dieses Programm wurde von Julian Gilbey E<lt>jdg@debian.orgE<gt> geschrieben "
+"und unterliegt dem Copyright gemäß der GPL, Version 2 oder später."
+
+#. type: TH
+#: ../scripts/debsign.1:1
+#, no-wrap
+msgid "DEBSIGN"
+msgstr "DEBSIGN"
+
+#. type: Plain text
+#: ../scripts/debsign.1:4
+msgid "debsign - sign a Debian .changes and .dsc file pair using GPG"
+msgstr ""
+"debsign - signiert ein Debian-.changes- und -.dsc-Dateipaar mittels GPG"
+
+#. type: Plain text
+#: ../scripts/debsign.1:6
+msgid ""
+"B<debsign> [I<options>] [I<changes-file>|I<dsc-file>|I<commands-file> ...]"
+msgstr ""
+"B<debsign> [I<Optionen>] [I<Changes-Datei>|I<Dsc-Datei>|I<Befehlsdatei> …]"
+
+#. type: Plain text
+#: ../scripts/debsign.1:14
+msgid ""
+"B<debsign> mimics the signing aspects (and bugs) of B<dpkg-"
+"buildpackage>(1). It takes a I<.dsc>, I<.buildinfo>, or I<.changes> file "
+"and signs it, and any child I<.dsc>, I<.buildinfo>, or I<.changes> files "
+"directly or indirectly referenced by it, using the GNU Privacy Guard. It is "
+"careful to calculate the size and checksums of any newly signed child files "
+"and replace the original values in the parent file."
+msgstr ""
+"B<debsign> ahmt die Signierungsgesichtspunkte (und Fehler) von B<dpkg-"
+"buildpackage>(1) nach. Es nimmt eine I<.dsc>-, I<.buildinfo>- oder I<."
+"changes>-Datei entgegen und signiert sie ebenso wie jede untergeordnete I<."
+"dsc>-, I<.buildinfo>- oder I<.changes>-Datei, auf die direkt oder indirekt "
+"verwiesen wird, mittels des GNU Privacy Guards. Es ist gewissenhaft, die "
+"Größe der Prüfsummen aller neu signierten untergeordneten Dateien zu "
+"berechnen und die Originalwerte in der übergeordneten Datei zu ersetzen."
+
+#. type: Plain text
+#: ../scripts/debsign.1:18
+msgid ""
+"If no file is specified, I<debian/changelog> is parsed to determine the name "
+"of the I<.changes> file to look for in the parent directory."
+msgstr ""
+"Falls keine Datei angegeben wurde, wird I<debian/changelog> ausgewertet, um "
+"den Namen der I<.changes>-Datei zu bestimmen, nach der im übergeordneten "
+"Verzeichnis gesucht werden soll."
+
+#. type: Plain text
+#: ../scripts/debsign.1:22
+msgid ""
+"If a I<.commands> file is specified it is first validated (see the details "
+"at I<ftp://ftp.upload.debian.org/pub/UploadQueue/README>), and the name "
+"specified in the Uploader field is used for signing."
+msgstr ""
+"Falls eine I<.commands>-Datei angegeben wurde, wird sie zuerst validiert "
+"(Einzelheiten finden Sie unter I<ftp://ftp.upload.debian.org/pub/UploadQueue/"
+"README>). Der im Feld »Uploader« angegebene Name wird für das Signieren "
+"verwendet."
+
+#. type: Plain text
+#: ../scripts/debsign.1:36
+msgid ""
+"This utility is useful if a developer must build a package on one machine "
+"where it is unsafe to sign it; they need then only transfer the small I<."
+"dsc>, I<.buildinfo> and I<.changes> files to a safe machine and then use the "
+"B<debsign> program to sign them before transferring them back. This process "
+"can be automated in two ways. If the files to be signed live on the "
+"B<remote> machine, the B<-r> option may be used to copy them to the local "
+"machine and back again after signing. If the files live on the B<local> "
+"machine, then they may be transferred to the remote machine for signing "
+"using B<debrsign>(1). However note that it is probably safer to have your "
+"trusted signing machine use B<debsign> to connect to the untrusted non-"
+"signing machine, rather than using B<debrsign> to make the connection in the "
+"reverse direction."
+msgstr ""
+"Dieses Hilfswerkzeug ist nützlich, falls ein Entwickler ein Paket auf einem "
+"Rechner bauen muss, der nicht sicher genug ist, um es zu signieren; er muss "
+"dann nur die kleinen I<.dsc>-, I<.buildinfo>- und I<.changes>-Dateien an "
+"einen sicheren Rechner übertragen und dann das Programm B<debsign> "
+"verwenden, um sie vor der Rückübertragung zu signieren. Dieser Prozess kann "
+"auf zwei Arten automatisiert werden. Falls die Dateien zum Signieren auf dem "
+"B<fernen> Rechner liegen, kann die Option B<-r> benutzt werden, um sie auf "
+"den lokalen Rechner und nach dem Signieren zurück zu kopieren. Falls die "
+"Dateien auf dem B<lokalen> Rechner liegen, können sie auf den fernen Rechner "
+"übertragen werden, um sie mittels B<debrsign>(1) zu signieren. Beachten Sie "
+"jedoch, dass es wahrscheinlich sicherer ist, wenn Sie ihren "
+"vertrauenswürdigen Signierrechner benutzen, der sich mittels B<debsign> mit "
+"dem nicht vertrauenswürdigen Signierrechner verbindet, als B<debrsign> zu "
+"verwenden, um die Verbindung in umgekehrter Richtung herzustellen."
+
+#. type: Plain text
+#: ../scripts/debsign.1:39
+msgid ""
+"This program can take default settings from the B<devscripts> configuration "
+"files, as described below."
+msgstr ""
+"Dieses Programm kann Standardeinstellungen der B<devscripts>-"
+"Konfigurationsdateien übernehmen, wie nachfolgend beschrieben."
+
+#. type: TP
+#: ../scripts/debsign.1:40
+#, no-wrap
+msgid "B<-r >[I<username>B<@>]I<remotehost>"
+msgstr "B<-r >[I<Benutzername>B<@>]I<ferner_Rechner>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:48
+msgid ""
+"The files to be signed live on the specified remote host. In this case, a "
+"I<.dsc>, I<.buildinfo> or I<.changes> file must be explicitly named, with an "
+"absolute directory or one relative to the remote home directory. B<scp> "
+"will be used for the copying. The [I<username>B<@>]I<remotehost>B<:"
+">I<filename> syntax is permitted as an alternative. Wildcards (B<*> etc.) "
+"are allowed."
+msgstr ""
+"Die Dateien, die signiert werden sollen, liegen auf dem angegebenen fernen "
+"Rechner. In diesem Fall muss explizit eine I<.dsc>-, I<.buildinfo>- oder I<."
+"changes>-Datei mit einem absoluten Pfad oder relativ zum fernen Home-"
+"Verzeichnisbaum benannt werden. Zum Kopieren wird B<scp> verwendet. Als eine "
+"Alternative ist die Syntax [I<Benutzername>B<@>]I<ferner_Rechner>B<:"
+">I<Dateiname> zulässig. Platzhalter (B<*> etc.) sind erlaubt."
+
+#. type: TP
+#: ../scripts/debsign.1:48
+#, no-wrap
+msgid "B<-p>I<progname>"
+msgstr "B<-p>I<Programmname>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:52
+msgid ""
+"When B<debsign> needs to execute GPG to sign it will run I<progname> "
+"(searching the B<PATH> if necessary), instead of B<gpg>."
+msgstr ""
+"Wenn B<debsign> zum Signieren GPG ausführen muss, wird es I<Programmname> "
+"(dabei durchsucht es B<PATH>, falls nötig) anstelle von B<gpg> ausführen."
+
+#. type: TP
+#: ../scripts/debsign.1:52
+#, no-wrap
+msgid "B<-m>I<maintainer>"
+msgstr "B<-m>I<Paketbetreuer>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:61
+msgid ""
+"Specify the maintainer name to be used for signing. (See B<dpkg-"
+"buildpackage>(1) for more information about the differences between B<-m>, "
+"B<-e> and B<-k> when building packages; B<debsign> makes no use of these "
+"distinctions except with respect to the precedence of the various options. "
+"These multiple options are provided so that the program will behave as "
+"expected when called by B<debuild>(1).)"
+msgstr ""
+"gibt den Namen des Paketbetreuers an, der zum Signieren verwendet werden "
+"soll. (Weitere Informationen über die Unterschiede zwischen B<-m>, B<-e> und "
+"B<-k> beim Paketbau finden Sie unter B<dpkg-buildpackage>(1); B<debsign> "
+"macht keinen Gebrauch von diesen Unterschieden, außer dass es "
+"berücksichtigt, dass die verschiedenen Optionen Vorrang haben. Diese "
+"Mehrfachoptionen werden bereitgestellt, so dass sich das Programm wie "
+"erwartet verhält, wenn es durch B<debuild>(1) aufgerufen wird.)"
+
+#. type: TP
+#: ../scripts/debsign.1:61
+#, no-wrap
+msgid "B<-e>I<maintainer>"
+msgstr "B<-e>I<Paketbetreuer>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:64
+msgid "Same as B<-m> but takes precedence over it."
+msgstr "entspricht B<-m>, hat demgegenüber aber Vorrang"
+
+#. type: TP
+#: ../scripts/debsign.1:64
+#, no-wrap
+msgid "B<-k>I<keyid>"
+msgstr "B<-k>I<Schlüsselkennung>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:68
+msgid ""
+"Specify the key ID to be used for signing; overrides any B<-m> and B<-e> "
+"options."
+msgstr ""
+"gibt die Schlüsselkennung an, die zum Signieren benutzt wird; setzt alle B<-"
+"m>- und B<-e>-Optionen außer Kraft"
+
+#. type: Plain text
+#: ../scripts/debsign.1:84
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debsign> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by B<dpkg-"
+"cross>."
+msgstr ""
+"Multiarch-Änderungsmodus: Dies bedeutet, dass B<debsign> die aktuellste "
+"Datei mit dem Namensmuster I<Paket_Version_*+*.changes> als I<.changes>-"
+"Datei verwenden soll, was durch B<dpkg-cross> erstellte I<.changes>-Dateien "
+"ermöglicht."
+
+#. type: TP
+#: ../scripts/debsign.1:84
+#, no-wrap
+msgid "B<--re-sign>, B<--no-re-sign>"
+msgstr "B<--re-sign>, B<--no-re-sign>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:90
+msgid ""
+"Recreate signature, respectively use the existing signature, if the file has "
+"been signed already. If neither option is given and an already signed file "
+"is found the user is asked if he or she likes to use the current signature."
+msgstr ""
+"erstellt die Signatur neu, beziehungsweise benutzt die existierende "
+"Signatur, falls die Datei bereits signiert ist. Falls keine der beiden "
+"Optionen angegeben wurde, und eine bereits signierte Datei gefunden wird, "
+"wird der Benutzer gefragt, ob er oder sie die aktuelle Signatur verwenden "
+"möchte."
+
+#. type: TP
+#: ../scripts/debsign.1:90
+#, no-wrap
+msgid "B<--debs-dir> I<DIR>"
+msgstr "B<--debs-dir> I<VERZ>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:95
+msgid ""
+"Look for the files to be signed in directory I<DIR> instead of the parent of "
+"the source directory. This should either be an absolute path or relative to "
+"the top of the source directory."
+msgstr ""
+"sucht nach den zu signierenden Dateien in I<Verzeichnis> statt im "
+"übergeordneten Verzeichnis des Quellverzeichnisses. Dies sollte entweder ein "
+"absoluter Pfad oder relativ zur Wurzel des Quellverzeichnisses sein."
+
+#. type: TP
+#: ../scripts/debsign.1:111
+#, no-wrap
+msgid "B<DEBSIGN_PROGRAM>"
+msgstr "B<DEBSIGN_PROGRAM>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:114
+msgid "Setting this is equivalent to giving a B<-p> option."
+msgstr "Diese Einstellung entspricht der Angabe der Option B<-p>."
+
+#. type: TP
+#: ../scripts/debsign.1:114
+#, no-wrap
+msgid "B<DEBSIGN_MAINT>"
+msgstr "B<DEBSIGN_MAINT>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:117
+msgid "This is the B<-m> option."
+msgstr "Dies ist die Option B<-m>."
+
+#. type: Plain text
+#: ../scripts/debsign.1:120
+msgid "And this is the B<-k> option."
+msgstr "Und dies ist die Option B<-k>."
+
+#. type: TP
+#: ../scripts/debsign.1:120
+#, no-wrap
+msgid "B<DEBSIGN_ALWAYS_RESIGN>"
+msgstr "B<DEBSIGN_ALWAYS_RESIGN>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:123
+msgid ""
+"Always re-sign files even if they are already signed, without prompting."
+msgstr ""
+"signiert ohne Nachfrage Dateien immer neu, sogar, wenn sie bereits signiert "
+"sind."
+
+#. type: Plain text
+#: ../scripts/debsign.1:132
+msgid ""
+"This specifies the directory in which to look for the files to be signed, "
+"and is either an absolute path or relative to the top of the source tree. "
+"This corresponds to the B<--debs-dir> command line option. This directive "
+"could be used, for example, if you always use B<pbuilder> or B<svn-"
+"buildpackage> to build your packages. Note that it also affects "
+"B<debrelease>(1) in the same way, hence the strange name of the option."
+msgstr ""
+"Dies gibt das Verzeichnis an, in dem nach den zu signierenden Dateien "
+"gesucht werden soll. Es ist entweder ein absoluter Pfad oder relativ zur "
+"obersten Ebene des Quellverzeichnisbaums. Dies entspricht der "
+"Befehlszeilenoption B<--debs-dir>. Diese Direktive kann zum Beispiel benutzt "
+"werden, falls Sie immer B<pbuilder> oder B<svn-buildpackage> verwenden, um "
+"Ihre Pakete zu bauen. Beachten Sie, dass es außerdem B<debrelease>(1) auf "
+"die gleiche Weise beeinflusst, daher der merkwürdige Name der Option."
+
+#. type: Plain text
+#: ../scripts/debsign.1:144
+msgid ""
+"B<debrsign>(1), B<debuild>(1), B<dpkg-architecture>(1), B<dpkg-"
+"buildpackage>(1), B<gpg>(1), B<gpg2>(1), B<md5sum>(1), B<sha1sum>(1), "
+"B<sha256sum>(1), B<scp>(1), B<devscripts.conf>(5)"
+msgstr ""
+"B<debrsign>(1), B<debuild>(1), B<dpkg-architecture>(1), B<dpkg-"
+"buildpackage>(1), B<gpg>(1), B<gpg2>(1), B<md5sum>(1), B<sha1sum>(1), "
+"B<sha256sum>(1), B<scp>(1), B<devscripts.conf>(5)"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "DEBSNAP"
+msgstr "DEBSNAP"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "July 3, 2010"
+msgstr "3. Juli 2010"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "Debian devscripts"
+msgstr "Debian-Entwicklerskripte"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "DebSnap User Manual"
+msgstr "DebSnap-Benutzerhandbuch"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:5
+msgid "debsnap - retrieve old snapshots of Debian packages"
+msgstr "debsnap - ruft alte Momentaufnahmen von Debian-Paketen ab"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:9
+msgid "B<debsnap> [I<options>]I< package >[I<version>]"
+msgstr "B<debsnap> [I<Optionen>]I< Paket >[I<Version>]"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:12
+msgid "B<debsnap> [B<-h> | B<--help>]B< >[B<--version>]"
+msgstr "B<debsnap> [B<-h> | B<--help>]B< >[B<--version>]"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:17
+msgid ""
+"B<debsnap> is a tool to help with retrieving snapshots of old packages from "
+"a daily archive repository."
+msgstr ""
+"B<debsnap> ist ein Werkzeug, das hilft, Momentaufnahmen von alten Debian-"
+"Paketen aus einen täglichen Archivedepot abzurufen."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:20
+msgid ""
+"The only publicly available snapshot archive is currently located at "
+"I<https://snapshot.debian.org>"
+msgstr ""
+"Das einzige öffentlich verfügbare Momentaufnahmenarchiv liegt derzeit auf "
+"I<https://snapshot.debian.org>."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:24
+msgid ""
+"By default, debsnap will download all the available versions for I<package> "
+"that are found in the snapshot archive. If a I<version> is specified, only "
+"that particular version will be downloaded, if available."
+msgstr ""
+"Standardmäßig wird Debsnap alle verfügbaren Versionen herunterladen, die für "
+"I<Paket> im Momentaufnahmenarchiv gefunden werden. Falls eine I<Version> "
+"angegeben wurde, wird nur diese bestimmte Version heruntergeladen, falls "
+"verfügbar."
+
+#. type: TP
+#: ../scripts/debsnap.1:29
+#, no-wrap
+msgid "B<-d>I< destination>,I< >B<--destdir>I< destination>"
+msgstr "B<-d>I< Bestimmungsort>,I< >B<--destdir>I< Bestimmungsort>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:32
+msgid "Directory to place retrieved packages."
+msgstr "Verzeichnis, in das abgefragte Pakete platziert werden sollen"
+
+#. type: =item
+#: ../scripts/debsnap.1:33 ../scripts/tagpending.pl:110
+#, no-wrap
+msgid "B<-f>, B<--force>"
+msgstr "B<-f>, B<--force>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:41
+msgid ""
+"Force writing into an existing I<destination>. By default B<debsnap> will "
+"insist the destination directory does not exist yet unless it is explicitly "
+"specified to be 'B<.>' (the current working directory). This is to avoid "
+"files being accidentally overwritten by what is fetched from the archive and "
+"to provide a guarantee for other scripts that only the files fetched will be "
+"present there upon completion."
+msgstr ""
+"erzwingt das Schreiben an einen existierenden I<Bestimmungsort>. "
+"Standardmäßig wird B<debsnap> darauf beharren, dass das Zielverzeichnis noch "
+"nicht existiert, es sei denn, es wird explizit als »B<.>« (das "
+"Arbeitsverzeichnis) angegeben. Dies dient der Vermeidung von versehentlichem "
+"Überschreiben von Dateien durch das, was vom Archiv abgeholt wird, und um "
+"allen anderen Skripten zu garantieren, dass nur die abgeholten Dateien nach "
+"Beendigung vorhanden sein werden."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:46
+msgid ""
+"Report on the B<debsnap> configuration being used and progress during the "
+"download operation. Please always use this option when reporting bugs."
+msgstr ""
+"berichtet über die benutzte B<debsnap>-Konfiguration und den Fortschritt "
+"während des Herunterladens. Benutzen Sie diese Option bitte immer, wenn Sie "
+"Fehler melden."
+
+#. type: TP
+#: ../scripts/debsnap.1:47
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:50
+msgid "Don't download but just list versions."
+msgstr "lädt nicht herunter, sondern listet nur die Versionen auf."
+
+#. type: TP
+#: ../scripts/debsnap.1:51
+#, no-wrap
+msgid "B<--binary>"
+msgstr "B<--binary>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:54
+msgid "Download binary packages instead of source packages."
+msgstr "lädt anstelle von Quellpaketen Binärpakete herunter."
+
+#. type: TP
+#: ../scripts/debsnap.1:55
+#, no-wrap
+msgid "B<-a>, B<--architecture>"
+msgstr "B<-a>, B<--architecture>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:60
+msgid ""
+"Specify architecture of downloaded binary packages. Implies B<--binary>. "
+"This can be given multiple times in order to download binary packages for "
+"multiple architectures."
+msgstr ""
+"gibt die Architektur der heruntergeladenen Binärpakete an. Impliziert B<--"
+"binary>. Dies kann mehrfach angegeben werden, um Binärpakete für mehrere "
+"Architekturen herunterzuladen."
+
+#. type: TP
+#: ../scripts/debsnap.1:61
+#, no-wrap
+msgid "B<--first>"
+msgstr "B<--first>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:66
+msgid ""
+"Specify the minimum version of a package which will be downloaded. Any "
+"versions which compare larger than this, according to B<dpkg>, will be "
+"considered for download. May be used in combination with B<--last>."
+msgstr ""
+"gibt die minimale Version eines Pakets an, das heruntergeladen wird. Alle "
+"Versionen, die laut B<dpkg> im Vergleich dazu größer sind, werden zum "
+"Herunterladen berücksichtigt. Dies kann zusammen mit B<--last> benutzt "
+"werden."
+
+#. type: TP
+#: ../scripts/debsnap.1:67
+#, no-wrap
+msgid "B<--last>"
+msgstr "B<--last>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:72
+msgid ""
+"Specify the maximum version of a package which will be downloaded. Any "
+"package versions which compare less than this, according to B<dpkg>, will be "
+"considered for download. May be used in combination with B<--first>."
+msgstr ""
+"gibt die maximale Version eines Pakets an, das heruntergeladen wird. Alle "
+"Paketversionen, die laut B<dpkg> im Vergleich dazu kleiner sind, werden zum "
+"Herunterladen berücksichtigt. Dies kann zusammen mit B<--first> benutzt "
+"werden."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:76
+msgid "Show a summary of these options."
+msgstr "zeigt eine Zusammenfassung dieser Optionen."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:80
+msgid "Show the version of B<debsnap>."
+msgstr "zeigt die Version von B<debsnap>."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:85
+msgid ""
+"B<debsnap> may also be configured through the use of the following options "
+"in the devscripts configuration files:"
+msgstr ""
+"B<debsnap> kann auch mittels der folgenden Optionen in den "
+"Konfigurationsdateien der Devscripts konfiguriert werden."
+
+#. type: TP
+#: ../scripts/debsnap.1:86
+#, no-wrap
+msgid "B<DEBSNAP_VERBOSE>"
+msgstr "B<DEBSNAP_VERBOSE>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:89
+msgid "Same as the command line option B<--verbose>. Set to I<yes> to enable."
+msgstr ""
+"entspricht der Befehlszeilenoption B<--verbose>. Setzen Sie sie auf I<yes>, "
+"um es zu aktivieren."
+
+#. type: TP
+#: ../scripts/debsnap.1:90
+#, no-wrap
+msgid "B<DEBSNAP_DESTDIR>"
+msgstr "B<DEBSNAP_DESTDIR>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:95
+msgid ""
+"Set a default path for the destination directory. If unset I<./source-"
+"E<lt>package_nameE<gt>> will be used. The command line option B<--destdir> "
+"will override this."
+msgstr ""
+"setzt einen Standardpfad für das Zielverzeichnis. Falls sie nicht gesetzt "
+"wird, wird I<./source-E<lt>PaketnameE<gt>> verwendet. Die "
+"Befehlszeilenoption B<--destdir> wird dies außer Kraft setzen."
+
+#. type: TP
+#: ../scripts/debsnap.1:96
+#, no-wrap
+msgid "B<DEBSNAP_BASE_URL>"
+msgstr "B<DEBSNAP_BASE_URL>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:99
+msgid "The base url for the snapshots archive."
+msgstr "die Basis-URL für das Momentaufnahmenarchiv"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:101
+msgid "If unset this defaults to I<https://snapshot.debian.org>"
+msgstr "Falls nicht gesetzt, ist die Vorgabe I<https://snapshot.debian.org>."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:108
+msgid ""
+"B<debsnap> will return an exit status of 0 if all operations succeeded, 1 if "
+"a fatal error occurred, and 2 if some packages failed to be downloaded but "
+"operations otherwise succeeded as expected. In some cases packages may fail "
+"to be downloaded because they are no longer available on the snapshot "
+"mirror, so any caller should expect this may occur in normal use."
+msgstr ""
+"B<debsnap> wird einen Exit-Status von 0 zurückgeben, falls alle "
+"Transaktionen erfolgreich verliefen, 1, falls ein schwerwiegender Fehler "
+"auftrat und 2, falls das Herunterladen einiger Pakete fehlschlug, "
+"Transaktionen aber ansonsten wie erwartet erfolgreich verliefen. In einigen "
+"Fällen kann das Herunterladen einiger Pakete fehlschlagen, weil sie nicht "
+"mehr auf dem Momentaufnahmenspiegel verfügbar sind, daher sollte jeder "
+"Aufrufende erwarten, dass dies bei normaler Verwendung auftritt."
+
+#. type: TP
+#: ../scripts/debsnap.1:110
+#, no-wrap
+msgid "B<debsnap -a amd64 xterm 256-1>"
+msgstr "B<debsnap -a amd64 xterm 256-1>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:113
+msgid ""
+"Download the binary package of a specific xterm version for amd64 "
+"architecture."
+msgstr ""
+"lädt das Binärpaket einer bestimmten Xterm-Version für die Architektur Amd64 "
+"herunter."
+
+#. type: TP
+#: ../scripts/debsnap.1:113
+#, no-wrap
+msgid "B<debsnap -a armel xterm>"
+msgstr "B<debsnap -a armel xterm>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:116
+msgid ""
+"Download binary packages for all versions of xterm for armel architecture."
+msgstr ""
+"lädt Binärpakete aller Xterm-Versionen für die Architektur Armel herunter."
+
+#. type: TP
+#: ../scripts/debsnap.1:116
+#, no-wrap
+msgid "B<debsnap --binary xterm 256-1>"
+msgstr "B<debsnap --binary xterm 256-1>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:119
+msgid ""
+"Download binary packages for a specific xterm version but for all "
+"architectures."
+msgstr ""
+"lädt Binärpakete einer bestimmten Xterm-Version für alle Architekturen "
+"herunter."
+
+#. type: TP
+#: ../scripts/debsnap.1:119
+#, no-wrap
+msgid "B<debsnap --binary xterm>"
+msgstr "B<debsnap --binary xterm>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:122
+msgid ""
+"Download binary packages for all versions of xterm for all architectures."
+msgstr ""
+"lädt Binärpakete aller Xterm-Versionen für alle Architekturen herunter."
+
+#. type: TP
+#: ../scripts/debsnap.1:122
+#, no-wrap
+msgid "B<debsnap -v --first 347-1 --last 348-2 xterm>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:126
+msgid ""
+"Download source packages for local architecture of xterm, between 347-1 and "
+"348-2 revisions, inclusive, showing the progress when doing it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:126
+#, no-wrap
+msgid "B<aptitude search '~i' -F '%p %V' | while read pkg ver; do debsnap -a $(dpkg-architecture -qDEB_HOST_ARCH) -a all $pkg $ver; done>"
+msgstr "B<aptitude search '~i' -F '%p %V' | while read pkg ver; do debsnap -a $(dpkg-architecture -qDEB_HOST_ARCH) -a all $pkg $ver; done>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:129
+msgid ""
+"Download binary packages of all packages that are installed on the system."
+msgstr "lädt Binärpakete aller auf dem System installierten Pakete herunter."
+
+#. type: TP
+#: ../scripts/debsnap.1:131
+#, no-wrap
+msgid "I</etc/devscripts.conf>"
+msgstr "I</etc/devscripts.conf>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:134
+msgid ""
+"Global devscripts configuration options. Will override hardcoded defaults."
+msgstr ""
+"globale Konfigurationsoptionen der Entwicklerskripte; werden hart kodierte "
+"Vorgaben außer Kraft setzen"
+
+#. type: TP
+#: ../scripts/debsnap.1:134
+#, no-wrap
+msgid "I<~/.devscripts>"
+msgstr "I<~/.devscripts>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:142
+msgid "B<devscripts>(1), B<devscripts.conf>(5), B<git-debimport>(1)"
+msgstr "B<devscripts>(1), B<devscripts.conf>(5), B<git-debimport>(1)"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:145
+msgid "David Paleino E<lt>dapal@debian.orgE<gt>"
+msgstr "David Paleino E<lt>dapal@debian.orgE<gt>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:148
+msgid "Copyright \\(co 2010 David Paleino"
+msgstr "Copyright \\(co 2010 David Paleino"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:152
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU General Public License, Version 3 or (at your option) "
+"any later version published by the Free Software Foundation."
+msgstr ""
+"Das Recht, dieses Dokument zu kopieren, zu verteilen und/oder zu ändern, "
+"wird unter den Bedingungen der GNU General Public License, Version 3 oder "
+"(nach Ihrer Option) jeder späteren durch die Free Software Foundation "
+"veröffentlichten Version, gewährt."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:155
+msgid ""
+"On Debian systems, the complete text of the GNU General Public License can "
+"be found in I</usr/share/common-licenses/GPL>."
+msgstr ""
+"Auf Debian-Systemen kann der vollständige Text der GNU General Public "
+"License in I</usr/share/common-licenses/GPL> gefunden werden."
+
+#. type: SS
+#: ../scripts/debsnap.1:157
+#, no-wrap
+msgid "Reporting bugs"
+msgstr "Fehler melden"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:160
+msgid ""
+"The program is part of the devscripts package. Please report bugs using "
+"`B<reportbug devscripts>`"
+msgstr ""
+"Dieses Programm ist Teil des Pakets »devscripts«. Bitte melden Sie Fehler "
+"mittels »B<reportbug devscripts>«."
+
+#. type: TH
+#: ../scripts/debuild.1:1
+#, no-wrap
+msgid "DEBUILD"
+msgstr "DEBUILD"
+
+#. type: Plain text
+#: ../scripts/debuild.1:4
+msgid "debuild - build a Debian package"
+msgstr "debuild - baut ein Debian-Paket"
+
+#. type: Plain text
+#: ../scripts/debuild.1:7
+msgid ""
+"B<debuild> [I<debuild options>] [I<dpkg-buildpackage options>] [B<--lintian-"
+"opts> I<lintian options>]"
+msgstr ""
+"B<debuild> [I<Debuild-Optionen>] [I<Dpkg-Buildpackage-Optionen>] [B<--"
+"lintian-opts> I<Lintian-Optionen>]"
+
+#. type: Plain text
+#: ../scripts/debuild.1:10
+msgid ""
+"B<debuild> [I<debuild options>] -- B<binary>|B<binary-arch>|B<binary-indep>|"
+"B<clean> ..."
+msgstr ""
+"B<debuild> [I<Debuild-Optionen>] -- B<binary>|B<binary-arch>|B<binary-indep>|"
+"B<clean> …"
+
+#. type: Plain text
+#: ../scripts/debuild.1:31
+msgid ""
+"B<debuild> creates all the files necessary for uploading a Debian package. "
+"It first runs B<dpkg-buildpackage>, then runs B<lintian> on the I<.changes> "
+"file created (assuming that B<lintian> is installed), and finally signs the "
+"appropriate files (using B<debsign>(1) to do this instead of B<dpkg-"
+"buildpackage>(1) itself; all relevant key-signing options are passed on). "
+"Signing will be skipped if the distribution is I<UNRELEASED>, unless B<dpkg-"
+"buildpackage>'s B<--force-sign> option is used. Parameters can be passed to "
+"B<dpkg-buildpackage> and B<lintian>, where the parameters to the latter are "
+"indicated with the B<--lintian-opts> option. The allowable options in this "
+"case are B<--lintian> and B<--no-lintian> to force or skip the B<lintian> "
+"step, respectively. The default is to run B<lintian>. There are also "
+"various options available for setting and preserving environment variables, "
+"as described below in the Environment Variables section. In this method of "
+"running B<debuild>, we also save a build log to the file I<../"
+"E<lt>packageE<gt>_E<lt>versionE<gt>_E<lt>archE<gt>.build>."
+msgstr ""
+"B<debuild> erstellt alle Dateien, die zum Hochladen eines Debian-Pakets "
+"nötig sind. Zuerst führt es B<dpkg-buildpackage> aus, dann B<lintian> für "
+"die erstellte I<.changes>-Datei (unter der Annahme, dass B<lintian> "
+"installiert ist) und signiert schließlich die zugehörigen Dateien (mittels "
+"B<debsign>(1) anstelle von B<dpkg-buildpackage>(1) selbst; alle passenden "
+"Schlüsselsignierungsoptionen werden übergeben). Das Signieren wird "
+"übersprungen, falls die Distribution I<UNRELEASED> ist, außer es wird die "
+"Option B<--force-sign> von B<dpkg-buildpackage> benutzt. An B<dpkg-"
+"buildpackage> und B<lintian> können Parameter übergeben werden, wobei "
+"letztere mit der Option B<--lintian-opts> angegeben werden. Die in diesem "
+"Fall erlaubten Optionen sind B<--lintian> und B<--no-lintian>, um den "
+"Lintian-Schritt zu erzwingen beziehungsweise zu überspringen. Standardmäßig "
+"wird B<lintian> ausgeführt. Außerdem sind verschiedene Optionen für das "
+"Setzen und Erhalten von Umgebungsvariablen verfügbar, wie nachfolgend im "
+"Abschnitt »Umgebungsvariablen« beschrieben. Bei dieser Methode B<debuild> "
+"auszuführen wird außerdem das Bauprotokoll I<../"
+"E<lt>PaketE<gt>_E<lt>VersionE<gt>_E<lt>ArchitekturE<gt>.build> sichern."
+
+#. type: Plain text
+#: ../scripts/debuild.1:48
+msgid ""
+"An alternative way of using B<debuild> is to use one or more of the "
+"parameters B<binary>, B<binary-arch>, B<binary-indep> and B<clean>, in which "
+"case B<debuild> will attempt to gain root privileges and then run I<debian/"
+"rules> with the given parameters. A B<--rootcmd=>I<gain-root-command> or B<-"
+"r>I<gain-root-command> option may be used to specify a method of gaining "
+"root privileges. The I<gain-root-command> is likely to be one of "
+"I<fakeroot>, I<sudo> or I<super>. See below for further discussion of this "
+"point. Again, the environment preservation options may be used. In this "
+"case, B<debuild> will also attempt to run B<dpkg-checkbuilddeps> first; this "
+"can be explicitly requested or switched off using the options B<-D> and B<-"
+"d> respectively. Note also that if either of these or a B<-r> option is "
+"specified in the configuration file option "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>, then it will be recognised even in this "
+"method of invocation of B<debuild>."
+msgstr ""
+"Eine alternative Möglichkeit, B<debuild> zu benutzen, besteht darin, einen "
+"oder mehrere der Parameter B<binary>, B<binary-arch>, B<binary-indep> und "
+"B<clean> zu verwenden. In diesem Fall wird B<debuild> versuchen, Root-Rechte "
+"zu bekommen und dann I<debian/rules> mit den angegebenen Parametern "
+"auszuführen. Um Root-Rechte zu bekommen, kann eine der Optionen B<--"
+"rootcmd=>I<Befehl_um_Root_zu_werden> oder B<-r>I<Befehl_um_Root_zu_werden> "
+"benutzt werden. I<Befehl_um_Root_zu_werden> ist wahrscheinlich entweder "
+"I<fakeroot>, I<sudo> oder I<super>. Eine weitere Erörterung dieses Punkts "
+"finden Sie nachfolgend. Wieder können die Optionen zum Erhalten der Umgebung "
+"verwendet werden. In diesem Fall wird B<debuild> außerdem versuchen, zuerst "
+"B<dpkg-checkbuilddeps> auszuführen; dies kann explizit mittels der Optionen "
+"B<-D> beziehungsweise B<-d> angefordert oder abgeschaltet werden. Beachten "
+"Sie außerdem, dass wenn entweder eine dieser beiden oder eine B<-r>-Option "
+"in der Konfigurationsdateioption B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> angegeben "
+"wurde, dies dann sogar in dieser Aufrufmethode von B<debuild> erkannt wird."
+
+#. type: Plain text
+#: ../scripts/debuild.1:51
+msgid ""
+"B<debuild> also reads the B<devscripts> configuration files as described "
+"below. This allows default options to be given."
+msgstr ""
+"B<debuild> liest außerdem, wie nachfolgend beschrieben, die B<devscripts>-"
+"Konfigurationsdateien. Dies ermöglicht die Angabe von Standardoptionen."
+
+#. type: Plain text
+#: ../scripts/debuild.1:63
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debuild> will climb the directory tree until it finds a I<debian/"
+"changelog> file before attempting to build the package. As a safeguard "
+"against stray files causing potential problems, it will examine the name of "
+"the parent directory once it finds the I<debian/changelog> file, and check "
+"that the directory name corresponds to the package name. Precisely how it "
+"does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Ebenso wie mehrere andere Skripte im Paket B<devscripts> wird B<debuild> den "
+"Verzeichnisbaum emporsteigen, bis es eine I<debian/changelog>-Datei findet. "
+"Als eine Schutzmaßnahme gegen verirrte Dateien, die potenziell Probleme "
+"bereiten, wird es den Namen des übergeordneten Verzeichnisses untersuchen, "
+"sobald es eine I<debian/changelog>-Datei findet und prüfen, ob der "
+"Verzeichnisname dem Paketnamen entspricht. Wie dies genau geschieht, wird "
+"durch die beiden Konfigurationsdateivariablen "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> und B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> "
+"sowie ihre entsprechenden Befehlszeilenoptionen B<--check-dirname-level> und "
+"B<--check-dirname-regex> geregelt."
+
+#. type: Plain text
+#: ../scripts/debuild.1:88
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a '/', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'PACKAGE', this will be replaced by the source package name, as "
+"determined from the I<changelog>. The default value for the regex is: "
+"\\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and PACKAGE-"
+"version."
+msgstr ""
+"Der Verzeichnisname wird geprüft, indem getestet wird, ob der aktuelle "
+"Verzeichnisname (wie er durch B<pwd>(1) bestimmt wurde) zum regulären "
+"Ausdruck passt, der durch die Konfigurationsdateioption "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> oder die Befehlszeilenoption B<--check-"
+"dirname-regex> I<regulärer_Ausdruck> angegeben wurde. Hierbei ist "
+"I<regulärer_Ausdruck> ein regulärer Perl-Ausdruck (siehe B<perlre>(3perl)), "
+"der an den Anfang und das Ende verankert wird. Falls I<regulärer_Ausdruck> "
+"ein »/« enthält, muss er auf den vollständigen Verzeichnispfad passen. Wenn "
+"nicht, dann muss er auf den vollständigen Verzeichnisnamen passen. Falls "
+"I<regulärer_Ausdruck> die Zeichenkette »PACKAGE« beinhaltet, wird diese "
+"durch den Namen des Quellpakets ersetzt, wie er aus dem I<Changelog> "
+"bestimmt wird. Der vorgegebene Wert für den regulären Ausdruck ist: "
+"»PACKAGE(-.+)?«, daher entspricht er Verzeichnisnamen wie PACKAGE und "
+"PACKAGE-Version."
+
+#. type: Plain text
+#: ../scripts/debuild.1:98
+msgid ""
+"As environment variables can affect the building of a package, often "
+"unintentionally, B<debuild> sanitises the environment by removing all "
+"environment variables except for B<TERM>, B<HOME>, B<LOGNAME>, B<GNUPGHOME>, "
+"B<PGPPATH>, B<GPG_AGENT_INFO>, B<GPG_TTY>, B<DBUS_SESSION_BUS_ADDRESS>, "
+"B<FAKEROOTKEY>, B<DEBEMAIL>, B<DEB_>I<*>, the (B<C>, B<CPP>, B<CXX>, B<LD> "
+"and B<F>)B<FLAGS> variables and their B<_APPEND> counterparts and the locale "
+"variables B<LANG> and B<LC_>I<*>. B<TERM> is set to `dumb' if it is unset, "
+"and B<PATH> is set to \"/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11\"."
+msgstr ""
+"Da Umgebungsvariablen den Bau eines Pakets beeinflussen, oft ungewollt, "
+"reduziert B<debuild> die Umgebung, indem es alle Umgebungsvariablen außer "
+"B<TERM>, B<HOME>, B<LOGNAME>, B<GNUPGHOME>, B<PGPPATH>, B<GPG_AGENT_INFO>, "
+"B<GPG_TTY>, B<DBUS_SESSION_BUS_ADDRESS>, B<FAKEROOTKEY>, B<DEBEMAIL>, "
+"B<DEB_>I<*>, den B<FLAGS>-Variablen (B<C>, B<CPP>, B<CXX>, B<LD> und B<F>) "
+"und ihren B<_APPEND>-Gegenstücken sowie den Locale-Variablen B<LANG> und "
+"B<LC_>I<*> entfernt. B<TERM> ist, falls es nicht gesetzt wurde, auf »dumb« "
+"gesetzt und B<PATH> ist auf »/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11« "
+"gesetzt."
+
+#. type: Plain text
+#: ../scripts/debuild.1:109
+msgid ""
+"If a particular environment variable is required to be passed through "
+"untouched to the build process, this may be specified by using a B<--"
+"preserve-envvar> I<envvar> (which can also be written as B<-e> I<envvar> "
+"option). The environment may be left untouched by using the B<--preserve-"
+"env> option. However, even in this case, the B<PATH> will be set to the "
+"sane value described above. The B<only> way to prevent B<PATH> from being "
+"reset is to specify a B<--preserve-envvar PATH> option. But you are warned "
+"that using programs from non-standard locations can easily result in the "
+"package being broken, as it will not be able to be built on standard systems."
+msgstr ""
+"Falls erforderlich ist, dass eine bestimmte Umgebungsvariable unverändert an "
+"den Bauprozess durchgeleitet wird, kann dies mittels einer B<--preserve-"
+"envvar>-I<Umgebungsvariable>n angegeben werden (dies kann auch als Option B<-"
+"e> I<Umgebungsvariable> geschrieben werden). Die Umgebung kann mittels der "
+"Option B<--preserve-env> unverändert belassen werden. B<PATH> wird jedoch "
+"sogar in diesem Fall auf den oben beschriebenen vernünftigen Wert gesetzt. "
+"Die B<einzige> Möglichkeit, B<PATH> vor dem Zurücksetzen zu bewahren, "
+"besteht darin, eine B<--preserve-envvar PATH>-Option anzugeben. Seien Sie "
+"aber gewarnt, dass die Benutzung von Programmen, die an Nichtstandardorten "
+"liegen, leicht dazu führen kann, dass das Paket beschädigt ist, da es nicht "
+"auf Standardsystemen gebaut werden kann."
+
+#. type: Plain text
+#: ../scripts/debuild.1:113
+msgid ""
+"Note that one may add directories to the beginning of the sanitised B<PATH>, "
+"using the B<--prepend-path> option. This is useful when one wishes to use "
+"tools such as B<ccache> or B<distcc> for building."
+msgstr ""
+"Beachten Sie, dass Verzeichnisse mittels der Option B<--prepend-path> an den "
+"Anfang des zurückgesetzten B<PATH> hinzugefügt werden können. Dies ist "
+"nützlich, wenn zum Bauen die Verwendung von Werkzeugen wie B<ccache> oder "
+"B<distcc> gewünscht wird."
+
+#. type: Plain text
+#: ../scripts/debuild.1:118
+msgid ""
+"It is also possible to avoid having to type something like I<FOO>B<=>I<bar "
+">B<debuild -e >I<FOO> by writing B<debuild -e >I<FOO>B<=>I<bar> or the long "
+"form B<debuild --set-envvar >I<FOO>B<=>I<bar>."
+msgstr ""
+"Es ist außerdem möglich, zu verhindern, dass etwas wie I<FOO>B<=>I<bar "
+">B<debuild -e >I<FOO> durch Schreiben von B<debuild -e >I<FOO>B<=>I<bar> "
+"oder der Langform B<debuild --set-envvar >I<FOO>B<=>I<bar> getippt werden "
+"muss."
+
+#. type: SH
+#: ../scripts/debuild.1:118
+#, no-wrap
+msgid "SUPERUSER REQUIREMENTS"
+msgstr "SUPERUSER-ANFORDERUNGEN"
+
+#. type: Plain text
+#: ../scripts/debuild.1:128
+msgid ""
+"B<debuild> needs to be run as superuser to function properly. There are "
+"three fundamentally different ways to do this. The first, and preferable, "
+"method is to use some root-gaining command. The best one to use is probably "
+"B<fakeroot>(1), since it does not involve granting any genuine privileges. "
+"B<super>(1) and B<sudo>(1) are also possibilities. If no B<-r> (or B<--"
+"rootcmd>) option is given (and recall that B<dpkg-buildpackage> also accepts "
+"a B<-r> option) and neither of the following methods is used, then B<-"
+"rfakeroot> will silently be assumed."
+msgstr ""
+"B<debuild> muss als Superuser ausgeführt werden, um ordnungsgemäß zu "
+"funktionieren. Es gibt grundlegend verschiedene Arten, dies zu erreichen. "
+"Die erste und bevorzugte Methode besteht in der Benutzung eines Befehls, um "
+"Root-Rechte zu erlangen. Es ist wahrscheinlich am besten, B<fakeroot>(1) zu "
+"verwenden, da es nicht das Gewähren echter Rechte beinhaltet. B<super>(1) "
+"und B<sudo>(1) sind weitere Möglichkeiten. Falls keine B<-r>-Option (oder "
+"B<--rootcmd>) angegeben wurde (und erinnern Sie sich daran, dass B<dpkg-"
+"buildpackage> eine B<-r>-Option ebenfalls akzeptiert) und keine der "
+"folgenden Methoden benutzt wird, dann wird stillschweigend von B<-rfakeroot> "
+"ausgegangen."
+
+#. type: Plain text
+#: ../scripts/debuild.1:134
+msgid ""
+"The second method is to use some command such as B<su>(1) to become root, "
+"and then to do everything as root. Note, though, that B<lintian> will abort "
+"if it is run as root or setuid root; this can be overcome using the B<--"
+"allow-root> option of B<lintian> if you know what you are doing."
+msgstr ""
+"Die zweite Methode besteht darin, etwas wie B<su>(1) zu verwenden, um Root "
+"zu werden, und dann alles als Root zu tun. Beachten Sie jedoch, dass "
+"B<lintian> abbrechen wird, falls es als Root oder Setuid-Root ausgeführt "
+"wird; dies kann mittels der Option B<--allow-root> von B<lintian> verhindert "
+"werden, falls Sie wissen, was Sie tun."
+
+#. type: Plain text
+#: ../scripts/debuild.1:150
+msgid ""
+"The third possible method is to have B<debuild> installed as setuid root. "
+"This is not the default method, and will have to be installed as such by the "
+"system administrator. It must also be realised that anyone who can run "
+"B<debuild> as root or setuid root has B<full access to the whole machine>. "
+"This method is therefore not recommended, but will work. B<debuild> could "
+"be installed with mode 4754, so that only members of the owning group could "
+"run it. A disadvantage of this method would be that other users would then "
+"not be able to use the program. There are many other variants of this "
+"option involving multiple copies of B<debuild>, or the use of programs such "
+"as B<sudo> or B<super> to grant root privileges to users selectively. If "
+"the sysadmin wishes to do this, she should use the B<dpkg-statoverride> "
+"program to change the permissions of I</usr/bin/debuild>. This will ensure "
+"that these permissions are preserved across upgrades."
+msgstr ""
+"Die dritte mögliche Methode ist, dass B<debuild> als Setuid-Root installiert "
+"wurde. Dies ist nicht die Standardmethode und wird dergestalt vom "
+"Systemadministrator installiert werden müssen. Es muss außerdem erkannt "
+"werden, dass jedermann, der B<debuild> als Root oder Setuid-Root ausführt, "
+"B<vollen Zugriff auf den ganzen Rechner> hat. Diese Methode wird daher nicht "
+"empfohlen, wird aber funktionieren. B<debuild> könnte mit den Rechten 4754 "
+"installiert werden, so dass es nur Mitglieder der besitzenden Gruppe "
+"ausführen können. Ein Nachteil dieser Methode wäre, dass andere Benutzer "
+"nicht in der Lage wären, dieses Programm zu verwenden. Es gibt viele andere "
+"Varianten dieser Option unter Einbeziehung mehrerer Kopien von B<debuild> "
+"oder der Verwendung von Programmen wie B<sudo> oder B<super>, um "
+"ausgewählten Benutzern Root-Rechte zu gewähren. Falls der "
+"Systemadministrator dies tun möchte, sollte er das Programm B<dpkg-"
+"statoverride> benutzen, um die Rechte von I</usr/bin/debuild> zu ändern. "
+"Dies wird sicherstellen, dass diese Rechte über Upgrades hinweg erhalten "
+"werden."
+
+#. type: SH
+#: ../scripts/debuild.1:150
+#, no-wrap
+msgid "HOOKS"
+msgstr "HOOKS"
+
+#. type: Plain text
+#: ../scripts/debuild.1:156
+msgid ""
+"B<debuild> supports a number of hooks when running B<dpkg-buildpackage>. "
+"Note that the hooks B<dpkg-buildpackage> to B<lintian> (inclusive) are "
+"passed through to B<dpkg-buildpackage> using its corresponding B<--hook-"
+">I<name> option. The available hooks are as follows:"
+msgstr ""
+"B<debuild> unterstützt eine Reihe von Hooks, wenn B<dpkg-buildpackage> "
+"ausgeführt wird. Beachten Sie, dass die Hooks B<dpkg-buildpackage> bis "
+"(einschließlich) B<lintian> an B<dpkg-buildpackage> mittels ihrer "
+"zugehörigen Option B<--hook->I<name> weitergereicht werden. Folgende Hooks "
+"sind verfügbar:"
+
+#. type: TP
+#: ../scripts/debuild.1:156
+#, no-wrap
+msgid "B<dpkg-buildpackage-hook>"
+msgstr "B<dpkg-buildpackage-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:159
+msgid ""
+"Run before B<dpkg-buildpackage> begins by calling B<dpkg-checkbuilddeps>."
+msgstr ""
+"wird ausgeführt bevor B<dpkg-buildpackage> beginnt, indem B<dpkg-"
+"checkbuilddeps> aufgerufen wird."
+
+#. type: Plain text
+#: ../scripts/debuild.1:161 ../scripts/debuild.1:170 ../scripts/debuild.1:178
+#: ../scripts/debuild.1:187 ../scripts/debuild.1:195 ../scripts/debuild.1:203
+#: ../scripts/debuild.1:212
+msgid "Hook is run inside the unpacked source."
+msgstr "Hook wird innerhalb der entpackten Quelle ausgeführt."
+
+#. type: Plain text
+#: ../scripts/debuild.1:163
+msgid "Corresponds to B<dpkg>'s B<init> hook."
+msgstr "entspricht dem Hook B<init> von B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:163
+#, no-wrap
+msgid "B<clean-hook>"
+msgstr "B<clean-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:168
+msgid ""
+"Run before B<dpkg-buildpackage> runs B<debian/rules clean> to clean the "
+"source tree. (Run even if the tree is not being cleaned because B<-nc> is "
+"used.)"
+msgstr ""
+"wird ausgeführt, bevor B<dpkg-buildpackage> B<debian/rules clean> ausführt, "
+"um den Quellverzeichnisbaum zu bereinigen (wird sogar ausgeführt, falls der "
+"Verzeichnisbaum nicht bereinigt wird, da B<-nc> verwendet wird)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:172
+msgid "Corresponds to B<dpkg>'s B<preclean> hook."
+msgstr "entspricht dem Hook B<preclean> von B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:172
+#, no-wrap
+msgid "B<dpkg-source-hook>"
+msgstr "B<dpkg-source-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:176
+msgid ""
+"Run after cleaning the tree and before running B<dpkg-source>. (Run even if "
+"B<dpkg-source> is not being called because B<-b>, B<-B>, or B<-A> is used.)"
+msgstr ""
+"wird nach dem Bereinigen des Verzeichnisbaums und vor dem Ausführen von "
+"B<dpkg-source> ausgeführt (wird sogar ausgeführt, falls B<dpkg-source> nicht "
+"aufgerufen wird, da B<-b>, B<-B> oder B<-A> benutzt wird)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:180
+msgid "Corresponds to B<dpkg>'s B<source> hook."
+msgstr "entspricht dem Hook B<source> von B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:180
+#, no-wrap
+msgid "B<dpkg-build-hook>"
+msgstr "B<dpkg-build-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:185
+msgid ""
+"Run after B<dpkg-source> and before calling B<debian/rules build>. (Run "
+"even if this is a source-only build, so B<debian/rules build> is not being "
+"called.)"
+msgstr ""
+"wird nach B<dpkg-source> und vor dem Aufruf von B<debian/rules build> "
+"ausgeführt (wird sogar ausgeführt, falls es sich um das Bauen eines reinen "
+"Quellpakets handelt, wodurch B<debian/rules build> nicht aufgerufen wird)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:189
+msgid "Corresponds to B<dpkg>'s B<build> hook."
+msgstr "entspricht dem Hook B<build> von B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:189
+#, no-wrap
+msgid "B<dpkg-binary-hook>"
+msgstr "B<dpkg-binary-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:193
+msgid ""
+"Run between B<debian/rules build> and B<debian/rules binary>(B<-arch>). Run "
+"B<only> if a binary package is being built."
+msgstr ""
+"wird zwischen B<debian/rules build> und B<debian/rules binary>(B<-arch>) "
+"ausgeführt. Läuft B<nur>, falls ein Binärpaket gebaut wird."
+
+#. type: Plain text
+#: ../scripts/debuild.1:197
+msgid "Corresponds to B<dpkg>'s B<binary> hook."
+msgstr "entspricht dem Hook B<binary> von B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:197
+#, no-wrap
+msgid "B<dpkg-genchanges-hook>"
+msgstr "B<dpkg-genchanges-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:201
+msgid ""
+"Run after the binary package is built and before calling B<dpkg-genchanges>."
+msgstr ""
+"wird nach dem Bau eines Binärpakets und vor dem Aufruf von B<dpkg-"
+"genchanges> ausgeführt."
+
+#. type: Plain text
+#: ../scripts/debuild.1:205
+msgid "Corresponds to B<dpkg>'s B<changes> hook."
+msgstr "entspricht dem Hook B<changes> von B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:205
+#, no-wrap
+msgid "B<final-clean-hook>"
+msgstr "B<final-clean-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:210
+msgid ""
+"Run after B<dpkg-genchanges> and before the final B<debian/rules clean>. "
+"(Run even if we are not cleaning the tree post-build, which is the default.)"
+msgstr ""
+"wird nach B<dpkg-genchanges> und vor dem abschließenden B<debian/rules "
+"clean> ausgeführt (wird sogar ausgeführt, falls der Verzeichnisbaum nach dem "
+"Baunicht bereinigt wird, was Standard ist)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:214
+msgid "Corresponds to B<dpkg>'s B<postclean> hook."
+msgstr "entspricht dem Hook B<postclean> von B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:214
+#, no-wrap
+msgid "B<lintian-hook>"
+msgstr "B<lintian-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:218
+msgid ""
+"Run (once) before calling B<lintian>. (Run even if we are not calling "
+"B<lintian>.)"
+msgstr ""
+"wird (einmal) vor dem Aufruf von B<lintian> ausgeführt (wird sogar dann "
+"ausgeführt, wenn B<lintian> nicht aufgerufen wird)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:220 ../scripts/debuild.1:228 ../scripts/debuild.1:235
+msgid "Hook is run from parent directory of unpacked source."
+msgstr ""
+"Hook wird im übergeordneten Verzeichnis der entpackten Quelle ausgeführt."
+
+#. type: Plain text
+#: ../scripts/debuild.1:222
+msgid "Corresponds to B<dpkg>'s B<check> hook."
+msgstr "entspricht dem Hook B<check> von B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:222
+#, no-wrap
+msgid "B<signing-hook>"
+msgstr "B<signing-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:226
+msgid ""
+"Run after calling B<lintian> before any signing takes place. (Run even if "
+"we are not signing anything.)"
+msgstr ""
+"wird nach dem Aufruf von B<lintian>, bevor irgendwelche Signierung erfolgt, "
+"ausgeführt (wird sogar dann ausgeführt, wenn nichts signiert wird)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:230
+msgid "Corresponds to B<dpkg>'s B<sign> hook, but is run by B<debuild>."
+msgstr ""
+"entspricht dem Hook B<sign> von B<dpkg>, wird aber von B<debuild> ausgeführt."
+
+#. type: TP
+#: ../scripts/debuild.1:230
+#, no-wrap
+msgid "B<post-dpkg-buildpackage-hook>"
+msgstr "B<post-dpkg-buildpackage-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:233
+msgid "Run after everything has finished."
+msgstr "wird ausgeführt, nachdem alles beendet ist."
+
+#. type: Plain text
+#: ../scripts/debuild.1:237
+msgid "Corresponds to B<dpkg>'s B<done> hook, but is run by B<debuild>."
+msgstr ""
+"entspricht dem Hook B<done> von B<dpkg>, wird aber von B<debuild> ausgeführt."
+
+#. type: Plain text
+#: ../scripts/debuild.1:252
+msgid ""
+"A hook command can be specified either in the configuration file as, for "
+"example, DEBUILD_SIGNING_HOOK='foo' (note the hyphens change into "
+"underscores!) or as a command line option B<--signing-hook-foo>. The "
+"command will have certain percent substitutions made on it: B<%%> will be "
+"replaced by a single B<%> sign, B<%p> will be replaced by the package name, "
+"B<%v> by the package version number, B<%s> by the source version number, "
+"B<%u> by the upstream version number. Neither B<%s> nor B<%u> will contain "
+"an epoch. B<%a> will be B<1> if the immediately following action is to be "
+"performed and B<0> if not (for example, in the B<dpkg-source> hook, B<%a> "
+"will become B<1> if B<dpkg-source> is to be run and B<0> if not). Then it "
+"will be handed to the shell to deal with, so it can include redirections and "
+"stuff. For example, to only run the B<dpkg-source> hook if B<dpkg-source> "
+"is to be run, the hook could be something like: \"if [ %a -eq 1 ]; then ...; "
+"fi\"."
+msgstr ""
+"Ein Hook-Befehl kann entweder in der Konfigurationsdatei angegeben werden, "
+"zum Beispiel DEBUILD_SIGNING_HOOK='foo' (beachten Sie, dass Bindestriche in "
+"Unterstriche geändert werden!) oder als eine B<--signing-hook-foo>-"
+"Befehlszeilenoption. Der Befehl führt bestimmte Prozentzeichenersetzungen "
+"durch: B<%%> wird durch ein einzelnes B<%>-Zeichen ersetzt, B<%p> wird durch "
+"den Paketnamen ersetzt, B<%v> durch die Versionsnummer des Pakets, B<%s> "
+"durch die Versionsnummer der Quelle und B<%u> durch die Versionsnummer der "
+"Originalautoren. Weder B<%s> noch B<%u> werden eine Epoche enthalten. B<%a> "
+"wird B<1> sein, falls die unmittelbar folgende Aktion ausgeführt wird und "
+"B<0> falls nicht (zum Beispiel wird B<%a> im B<dpkg-source>-Hook B<1> "
+"werden, falls B<dpkg-source> ausgeführt werden soll und B<0> falls nicht). "
+"Dann wird es zum Erledigen an die Shell gereicht, daher kann es "
+"Weiterleitungen und Ähnliches enthalten. Um zum Beispiel nur den B<dpkg-"
+"source>-Hook auszuführen, falls B<dpkg-source> ausgeführt wird, könnte der "
+"Hook etwas wie »if [ %a -eq 1 ]; then …; fi« sein."
+
+#. type: Plain text
+#: ../scripts/debuild.1:256
+msgid ""
+"B<Please take care with hooks>, as misuse of them can lead to packages which "
+"FTBFS (fail to build from source). They can be useful for taking snapshots "
+"of things or the like."
+msgstr ""
+"B<Bitte seien Sie mit Hooks vorsichtig>, da ihre falsche Verwendung zu "
+"Paketen führen kann, die nicht aus der Quelle gebaut werden können (FTBFS/"
+"fail to build from source). Sie können nützlich sein, um Momentaufnahmen von "
+"Dingen aufzuzeichnen oder dergleichen."
+
+#. type: Plain text
+#: ../scripts/debuild.1:258
+msgid "For details, see above."
+msgstr "Einzelheiten finden Sie oben."
+
+#. type: Plain text
+#: ../scripts/debuild.1:265
+msgid "Command to gain root (or fake root) privileges."
+msgstr "Befehl zum Erlangen von Root- (oder Fake-Root-)Rechten"
+
+#. type: Plain text
+#: ../scripts/debuild.1:268
+msgid "Do not clean the environment, except for PATH."
+msgstr "bereinigt die Umgebung nicht, ausgenommen PATH."
+
+#. type: Plain text
+#: ../scripts/debuild.1:271
+msgid "Do not clean the I<var> variable from the environment."
+msgstr "entfernt die Variable I<Variable> nicht aus der Umgebung."
+
+#. type: Plain text
+#: ../scripts/debuild.1:275
+msgid ""
+"If I<var> ends in an asterisk (\"*\") then all variables with names that "
+"match the portion of I<var> before the asterisk will be preserved."
+msgstr ""
+"Falls I<Variable> mit einem Stern (»*«) endet, dann werden alle Variablen, "
+"deren Namen zum Teil von I<Variable> vor dem Stern passen, erhalten."
+
+#. type: Plain text
+#: ../scripts/debuild.1:279
+msgid ""
+"Set the environment variable I<var> to I<value> and do not remove it from "
+"the environment."
+msgstr ""
+"setzt die Umgebungsvariable I<Variable> auf I<Wert> und entfernt sie nicht "
+"aus der Umgebung."
+
+#. type: TP
+#: ../scripts/debuild.1:279
+#, no-wrap
+msgid "B<--prepend-path=>I<value >"
+msgstr "B<--prepend-path=>I<Wert >"
+
+#. type: Plain text
+#: ../scripts/debuild.1:283
+msgid "Once the normalized PATH has been set, prepend I<value> to it."
+msgstr ""
+"Sobald der normalisierte PATH gesetzt ist, wird ihm I<Wert> vorangestellt."
+
+#. type: TP
+#: ../scripts/debuild.1:283
+#, no-wrap
+msgid "B<--lintian>"
+msgstr "B<--lintian>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:288
+msgid ""
+"Run B<lintian> after B<dpkg-buildpackage>. This is the default behaviour, "
+"and it overrides any configuration file directive to the contrary."
+msgstr ""
+"führt B<lintian> nach B<dpkg-buildpackage> aus. Dies ist das "
+"Standardverhalten und verkehrt alle Konfigurationsdateidirektiven ins "
+"Gegenteil."
+
+#. type: TP
+#: ../scripts/debuild.1:288
+#, no-wrap
+msgid "B<--no-lintian>"
+msgstr "B<--no-lintian>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:291
+msgid "Do not run B<lintian> after B<dpkg-buildpackage>."
+msgstr "führt B<lintian> nicht nach B<dpkg-buildpackage> aus."
+
+#. type: TP
+#: ../scripts/debuild.1:291
+#, no-wrap
+msgid "B<--no-tgz-check>"
+msgstr "B<--no-tgz-check>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:296
+msgid ""
+"Even if we're running B<dpkg-buildpackage> and the version number has a "
+"Debian revision, do not check that the I<.orig.tar.gz> file or I<.orig> "
+"directory exists before starting the build."
+msgstr ""
+"prüft nicht einmal, falls B<dpkg-buildpackage> ausgeführt wird und die "
+"Versionsnummer eine Debian-Revision hat, ob die I<.orig.tar.gz>-Datei oder "
+"das I<.orig>-Verzeichnis existiert, bevor das Bauen gestartet wird."
+
+#. type: TP
+#: ../scripts/debuild.1:296
+#, no-wrap
+msgid "B<--tgz-check>"
+msgstr "B<--tgz-check>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:301
+msgid ""
+"If we're running B<dpkg-buildpackage> and the version number has a Debian "
+"revision, check that the I<.orig.tar.gz> file or I<.orig> directory exists "
+"before starting the build. This is the default behaviour."
+msgstr ""
+"prüft, falls B<dpkg-buildpackage> ausgeführt wird und die Versionsnummer "
+"eine Debian-Revision hat, ob die I<.orig.tar.gz>-Datei oder das I<.orig>-"
+"Verzeichnis existiert, bevor das Bauen gestartet wird. Dies ist das "
+"Standardverhalten."
+
+#. type: TP
+#: ../scripts/debuild.1:301
+#, no-wrap
+msgid "B<--username> I<username>"
+msgstr "B<--username> I<Benutzername>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:305
+msgid ""
+"When signing, use B<debrsign> instead of B<debsign>. I<username> specifies "
+"the credentials to be used."
+msgstr ""
+"verwendet beim Signieren B<debrsign> anstelle von B<debsign>. "
+"I<Benutzername> gibt die Legitimation an, die verwendet werden soll."
+
+#. type: TP
+#: ../scripts/debuild.1:305
+#, no-wrap
+msgid "B<-->I<foo>B<-hook>=I<hook>"
+msgstr "B<-->I<foo>B<-hook>=I<Hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:309
+msgid ""
+"Set a hook as described above. If I<hook> is blank, this unsets the hook."
+msgstr ""
+"setzt einen Hook, wie oben beschrieben. Falls I<Hook> leer ist, entfernt "
+"dies den Hook."
+
+#. type: TP
+#: ../scripts/debuild.1:309
+#, no-wrap
+msgid "B<--clear-hooks>"
+msgstr "B<--clear-hooks>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:313
+msgid ""
+"Clears all hooks. They may be reinstated by later command line options."
+msgstr ""
+"bereinigt alle Hooks. Sie können später durch Befehlszeilenoptionen wieder "
+"eingesetzt werden."
+
+#. type: Plain text
+#: ../scripts/debuild.1:324
+msgid "Do not run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+"führt nicht B<dpkg-checkbuilddeps> aus, um Bauabhängigkeiten zu prüfen."
+
+#. type: TP
+#: ../scripts/debuild.1:324
+#, no-wrap
+msgid "B<-D>"
+msgstr "B<-D>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:327
+msgid "Run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr "führt B<dpkg-checkbuilddeps> aus, um Bauabhängigkeiten zu prüfen."
+
+#. type: Plain text
+#: ../scripts/debuild.1:335
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override some of these configuration file "
+"settings, otherwise the B<--no-conf> option can be used to prevent reading "
+"these files. Environment variable settings are ignored when these "
+"configuration files are read. The currently recognised variables are:"
+msgstr ""
+"Die beiden Konfigurationsdateien I</etc/devscripts.conf> und I<~/."
+"devscripts> werden durch eine Shell in dieser Reihenfolge eingelesen, um "
+"Konfigurationsvariablen zu setzen. Befehlszeilenoptionen können benutzt "
+"werden, um einige der Konfigurationsdateieinstellungen außer Kraft zu "
+"setzen, andernfalls kann die Option B<--no-conf> benutzt werden, um das "
+"Lesen dieser Dateien zu vermeiden. Einstellungen aus Umgebungsvariablen "
+"werden ignoriert, wenn diese Konfigurationsdateien gelesen werden. Die "
+"derzeit erkannten Variablen sind:"
+
+#. type: TP
+#: ../scripts/debuild.1:335
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENV>"
+msgstr "B<DEBUILD_PRESERVE_ENV>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:339
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve-env> "
+"command line parameter being used."
+msgstr ""
+"Falls dies auf I<yes> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--preserve-env> benutzt würde."
+
+#. type: TP
+#: ../scripts/debuild.1:339
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENVVARS>"
+msgstr "B<DEBUILD_PRESERVE_ENVVARS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:344
+msgid ""
+"Which environment variables to preserve. This should be a comma-separated "
+"list of variables. This corresponds to using possibly multiple B<--preserve-"
+"envvar> or B<-e> options."
+msgstr ""
+"die Umgebungsvariablen, die erhalten werden sollen. Dies sollte eine durch "
+"Kommas getrennte Variablenliste sein. Dies entspricht der Verwendung "
+"mehrerer B<--preserve-envvar>- oder B<-e>-Optionen."
+
+#. type: TP
+#: ../scripts/debuild.1:344
+#, no-wrap
+msgid "B<DEBUILD_SET_ENVVAR_>I<var>B<=>I<value>"
+msgstr "B<DEBUILD_SET_ENVVAR_>I<Variable>B<=>I<Wert>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:347
+msgid "This corresponds to B<--set-envvar=>I<var>B<=>I<value>."
+msgstr "Dies entspricht B<--set-envvar=>I<Variable>B<=>I<Wert>."
+
+#. type: TP
+#: ../scripts/debuild.1:347
+#, no-wrap
+msgid "B<DEBUILD_PREPEND_PATH>"
+msgstr "B<DEBUILD_PREPEND_PATH>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:350
+msgid "This corresponds to B<--prepend-path>."
+msgstr "Dies entspricht B<--prepend-path>."
+
+#. type: TP
+#: ../scripts/debuild.1:350
+#, no-wrap
+msgid "B<DEBUILD_ROOTCMD>"
+msgstr "B<DEBUILD_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:354
+msgid "Setting this variable to I<prog> is the equivalent of B<-r>I<prog>."
+msgstr ""
+"Diese Variable auf I<Programm> zu setzen ist die Entsprechung von B<-"
+"r>I<Programm>."
+
+#. type: TP
+#: ../scripts/debuild.1:354
+#, no-wrap
+msgid "B<DEBUILD_TGZ_CHECK>"
+msgstr "B<DEBUILD_TGZ_CHECK>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:358
+msgid ""
+"Setting this variable to I<no> is the same as the B<--no-tgz-check> command "
+"line option."
+msgstr ""
+"Diese Variable auf I<no> zu setzen ist dasselbe wie die Befehlszeilenoption "
+"B<--no-tgz-check>."
+
+#. type: TP
+#: ../scripts/debuild.1:358
+#, no-wrap
+msgid "B<DEBUILD_SIGNING_USERNAME>"
+msgstr "B<DEBUILD_SIGNING_USERNAME>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:362
+msgid ""
+"Setting this variable is the same as using the B<--username> command line "
+"option."
+msgstr ""
+"Das Setzen dieser Variable entspricht der Benutzung der Befehlszeilenoption "
+"B<--username>."
+
+#. type: TP
+#: ../scripts/debuild.1:362
+#, no-wrap
+msgid "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+msgstr "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:370
+msgid ""
+"These are options which should be passed to the invocation of B<dpkg-"
+"buildpackage>. They are given before any command-line options. Due to "
+"issues of shell quoting, if a word containing spaces is required as a single "
+"option, extra quotes will be required. For example, to ensure that your own "
+"GPG key is always used, even for sponsored uploads, the configuration file "
+"might contain the line:"
+msgstr ""
+"Diese Optionen werden an den Aufruf von B<dpkg-buildpackage> weitergegeben "
+"werden. Sie werden vor allen anderen Befehlszeilenoptionen übergeben. Falls "
+"eine Option ein Leerzeichen enthalten soll, muss durch Verwendung "
+"zusätzlicher Anführungszeichen verhindert werden, dass die Shell die Option "
+"in mehrere trennt. Um zum Beispiel sicherzustellen, dass immer (auch beim "
+"Sponsern) Ihr eigener GPG-Schlüssel verwendet wird, kann die "
+"Konfigurationsdatei folgende Zeile enthalten:"
+
+#. type: Plain text
+#: ../scripts/debuild.1:373
+#, no-wrap
+msgid "DEBUILD_DPKG_BUILDPACKAGE_OPTS=\"-k'Julian Gilbey E<lt>jdg@debian.orgE<gt>' -sa\"\n"
+msgstr "DEBUILD_DPKG_BUILDPACKAGE_OPTS=\"-k'Julian Gilbey E<lt>jdg@debian.orgE<gt>' -sa\"\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:378
+msgid ""
+"which gives precisely two options. Without the extra single quotes, B<dpkg-"
+"buildpackage> would reasonably complain that I<Gilbey> is an unrecognised "
+"option (it doesn't start with a B<-> sign)."
+msgstr ""
+"die genau zwei Optionen angibt. Ohne die zusätzlichen einfachen "
+"Anführungszeichen würde B<dpkg-buildpackage> berechtigterweise beklagen, "
+"dass I<Gilbey> eine unbekannte Option ist (es beginnt nicht mit einem B<->-"
+"Zeichen)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:383
+msgid ""
+"Also, if this option contains any B<-r>, B<-d> or B<-D> options, these will "
+"always be taken account of by B<debuild>. Note that a B<-r> option in this "
+"variable will override the setting in B<DEBUILD_ROOTCMD>."
+msgstr ""
+"Falls diese Option eine B<-r>-, B<-d>- oder B<-D>-Option enthält, wird diese "
+"immer durch B<debuild> mitberücksichtigt. Beachten Sie, dass eine B<-r>-"
+"Option in dieser Variable die Einstellung B<DEBUILD_ROOTCMD> außer Kraft "
+"setzt."
+
+#. type: TP
+#: ../scripts/debuild.1:383
+#, no-wrap
+msgid "B<DEBUILD_>I<FOO>B<_HOOK>"
+msgstr "B<DEBUILD_>I<FOO>B<_HOOK>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:387
+msgid ""
+"The hook variable for the I<foo> hook. See the section on hooks above for "
+"more details. By default, this is empty."
+msgstr ""
+"die Hook-Variable für den Hook I<foo>. Weitere Einzelheiten finden Sie im "
+"vorhergehenden Abschnitt über Hooks. Standardmäßig ist sie leer."
+
+#. type: TP
+#: ../scripts/debuild.1:387
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN>"
+msgstr "B<DEBUILD_LINTIAN>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:391
+msgid ""
+"Should we run B<lintian>? If this is set to I<no>, then B<lintian> will not "
+"be run."
+msgstr ""
+"Soll B<lintian> ausgeführt werden? Falls dies auf I<no> gesetzt ist, dann "
+"wird B<lintian> nicht ausgeführt."
+
+#. type: TP
+#: ../scripts/debuild.1:391
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN_OPTS>"
+msgstr "B<DEBUILD_LINTIAN_OPTS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:397
+msgid ""
+"These are options which should be passed to the invocation of B<lintian>. "
+"They are given before any command-line options, and the usage of this "
+"variable is as described for the B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> variable."
+msgstr ""
+"Dies sind Optionen, die an den Aufruf von B<lintian> übergeben werden "
+"sollen. Sie werden vor jeder anderen Befehlszeilenoption angegeben. Diese "
+"Variable wird verwendet, wie bei der Variablen "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> beschrieben."
+
+#. type: Plain text
+#: ../scripts/debuild.1:408
+msgid ""
+"To build your own package, simply run B<debuild> from inside the source "
+"tree. B<dpkg-buildpackage>(1) options may be given on the command line."
+msgstr ""
+"Um Ihr eigenes Paket zu bauen, führen Sie einfach B<debuild> aus dem Quellen-"
+"Verzeichnis aus. B<dpkg-buildpackage>(1)-Optionen können auf der "
+"Befehlszeile übergeben werden."
+
+#. type: Plain text
+#: ../scripts/debuild.1:411
+msgid ""
+"The typical command line options to build only the binary package(s) "
+"without signing the .changes file (or the non-existent .dsc file):"
+msgstr ""
+"Die typischen Befehlszeilenoptionen, um nur die binären Pakete zu bauen, "
+"ohne die .changes-Datei (oder die nicht existierende .dsc-Datei) zu "
+"signieren:"
+
+#. type: Plain text
+#: ../scripts/debuild.1:414
+#, no-wrap
+msgid "debuild -i -us -uc -b\n"
+msgstr "debuild -i -us -uc -b\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:417
+msgid "Change the B<-b> to B<-S> to build only a source package."
+msgstr "Ändern Sie das B<-b> in B<-S>, um nur ein Quellpaket zu bauen."
+
+#. type: Plain text
+#: ../scripts/debuild.1:420
+msgid ""
+"An example using B<lintian> to check the resulting packages and passing "
+"options to it:"
+msgstr ""
+"Ein Beispiel, das B<lintian> verwendet, um die erzeugten Pakete zu testen, "
+"und diesem eine Option mitgibt:"
+
+#. type: Plain text
+#: ../scripts/debuild.1:423
+#, no-wrap
+msgid "debuild --lintian-opts -i\n"
+msgstr "debuild --lintian-opts -i\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:431
+msgid ""
+"Note the order of options here: the B<debuild> options come first, then the "
+"B<dpkg-buildpackage> ones, then finally the checker options. (And "
+"B<lintian> is called by default.) If you find yourself using the same "
+"B<dpkg-buildpackage> options repeatedly, consider using the "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> configuration file option as described "
+"above."
+msgstr ""
+"Beachten Sie hier die Reihenfolge der Optionen: Zuerst kommen die B<debuild>-"
+"Optionen, dann die von B<dpkg-buildpackage>, dann am Ende die "
+"Prüferoptionen. (Und standardmäßig wird B<lintian> aufgerufen.) Falls Sie "
+"feststellen, dass Sie wiederholt die selben B<dpkg-buildpackage>-Optionen "
+"benutzen, sollten Sie in Betracht ziehen, die Konfigurationsdateioption "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> zu benutzen, wie oben beschrieben."
+
+#. type: Plain text
+#: ../scripts/debuild.1:435
+msgid ""
+"To build a package for a sponsored upload, given I<foobar_1.0-1.dsc> and the "
+"respective source files, run something like the following commands:"
+msgstr ""
+"Um ein Paket für ein sponserndes Hochladen zu bauen, wobei I<foobar_1.0-1."
+"dsc> und die jeweilige Quelldatei gegeben sind, führen Sie Befehle wie die "
+"folgenden aus:"
+
+#. type: Plain text
+#: ../scripts/debuild.1:440
+#, no-wrap
+msgid ""
+"dpkg-source -x foobar_1.0-1.dsc\n"
+"cd foobar-1.0\n"
+"debuild -k0x12345678\n"
+msgstr ""
+"dpkg-source -x foobar_1.0-1.dsc\n"
+"cd foobar-1.0\n"
+"debuild -k0x12345678\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:447
+msgid ""
+"where 0x12345678 is replaced by your GPG key ID or other key identifier such "
+"as your email address. Again, you could also use the "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> configuration file option as described "
+"above to avoid having to type the B<-k> option each time you do a sponsored "
+"upload."
+msgstr ""
+"wobei 0x12345678 durch Ihre GPG-Schlüsselkennung oder andere "
+"Schlüsselbezeichner wie Ihre E-Mail-Adresse ersetzt wird. Außerdem können "
+"Sie wieder die Konfigurationsdateioption B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> "
+"wie oben beschrieben verwenden, um zu vermeiden, dass Sie die Option B<-k> "
+"jedes Mal tippen müssen, wenn Sie ein gesonsortes Hochladen durchführen."
+
+#. type: Plain text
+#: ../scripts/debuild.1:459
+msgid ""
+"B<chmod>(1), B<debsign>(1), B<dpkg-buildpackage>(1), B<dpkg-"
+"checkbuilddeps>(1), B<fakeroot>(1), B<lintian>(1), B<su>(1), B<sudo>(1), "
+"B<super>(1), B<devscripts.conf>(5), B<dpkg-statoverride>(8)"
+msgstr ""
+"B<chmod>(1), B<debsign>(1), B<dpkg-buildpackage>(1), B<dpkg-"
+"checkbuilddeps>(1), B<fakeroot>(1), B<lintian>(1), B<su>(1), B<sudo>(1), "
+"B<super>(1), B<devscripts.conf>(5), B<dpkg-statoverride>(8)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:462
+msgid ""
+"The original B<debuild> program was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. The current version has been written by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Das ursprüngliche B<debuild>-Programm wurde von Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt> geschrieben. Die aktuelle Version wurde von "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt> verfasst."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:26
+msgid "desktop2menu - create a menu file skeleton from a desktop file"
+msgstr "desktop2menu - erstellt ein Menüdateigerüst aus einer Desktop-Datei"
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:30
+msgid "B<desktop2menu> B<--help>|B<--version>"
+msgstr "B<desktop2menu> B<--help>|B<--version>"
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:32
+msgid "B<desktop2menu> I<desktop file> [I<package name>]"
+msgstr "B<desktop2menu> I<Desktop-Datei> [I<Paketname>]"
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:36
+msgid ""
+"B<desktop2menu> generates a skeleton menu file from the supplied freedesktop."
+"org desktop file."
+msgstr ""
+"B<desktop2menu> erstellt eine Gerüstmenüdatei aus der übergegebenen "
+"freedesktop.org-Desktopdatei."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:39
+msgid ""
+"The package name to be used in the menu file may be passed as an additional "
+"argument. If it is not supplied then B<desktop2menu> will attempt to derive "
+"the package name from the data in the desktop file."
+msgstr ""
+"Der Paketname, der in der Menüdatei benutzt wird, kann als zusätzliches "
+"Argument übergeben werden. Falls er nicht mitgegeben wurde, wird "
+"B<desktop2menu> versuchen, den Paketnamen aus den Daten der Desktopdatei "
+"abzuleiten."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:45
+msgid ""
+"This program is Copyright (C) 2007 by Sune Vuorela <debian@pusling.com>. It "
+"was modified by Adam D. Barratt <adam@adam-barratt.org.uk> for the "
+"devscripts package. This program comes with ABSOLUTELY NO WARRANTY. You "
+"are free to redistribute this code under the terms of the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+"Dieses Programm unterliegt dem Copyright (C) 2007 von Sune Vuorela "
+"<debian@pusling.com>. Es wurde von Adam D. Barratt <adam@adam-barratt.org."
+"uk> für das Paket Devscripts verändert. Für dieses Programm besteht "
+"KEINERLEI GARANTIE. Es ist Ihnen erlaubt, diesen Code unter den Bedingungen "
+"der GNU General Public License, Version 2 oder später, weitergeben."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:54
+msgid ""
+"Sune Vuorela <debian@pusling.com> with modifications by Adam D. Barratt "
+"<adam@adam-barratt.org.uk>"
+msgstr ""
+"Sune Vuorela <debian@pusling.com> mit Änderungen durch Adam D. Barratt "
+"<adam@adam-barratt.org.uk>"
+
+#. type: TH
+#: ../scripts/dep3changelog.1:1
+#, no-wrap
+msgid "DEP3CHANGELOG"
+msgstr "DEP3CHANGELOG"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:4
+msgid ""
+"dep3changelog - generate a changelog entry from a DEP3-style patch header"
+msgstr ""
+"dep3changelog - erzeugt einen Changelog-Eintrag aus Patch-Kopfzeilen im DEP3-"
+"Stil"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:6
+msgid ""
+"B<dep3changelog> I<patch> [I<patch> ...] [I<options>] [-- [I<dch_options>]]"
+msgstr ""
+"B<dep3changelog> I<Patch> [I<Patch> …] [I<Optionen>] [-- [I<Dch_Optionen>]]"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:15
+msgid ""
+"B<dep3changelog> extracts the DEP3 patch headers from the given I<patch> "
+"files and builds a changelog entry for each patch. If the patch author "
+"differs from the one detected from the B<DEBEMAIL>, B<NAME>, B<DEBEMAIL>, or "
+"B<EMAIL> environment variables, ``Thanks to I<author> E<lt>I<email>E<gt>'' "
+"is added to the changelog entry for that patch. Any B<bug-debian> or B<bug-"
+"ubuntu> fields are added as ``Closes'' to the changelog entry. The "
+"generated changelog entries are passed to B<debchange> as an argument along "
+"with the given I<dch_options>."
+msgstr ""
+"B<dep3changelog> extrahiert die DEP3-Patch-Kopfzeilen aus den angegebenen "
+"I<Patch>-Dateien und erzeugt einen Changelog-Eintrag für jeden Patch. Falls "
+"sich der Patch-Autor von dem in den Umgebungsvariablen B<DEBEMAIL>, B<NAME>, "
+"B<DEBEMAIL> oder B<EMAIL> angegebenen unterscheidet, wird »Thanks to "
+"I<Autor> E<lt>I<E-Mail>E<gt>« zum Changelog-Eintrag für den Patch "
+"hinzugefügt. Alle B<bug-debian>- oder B<bug-ubuntu>-Felder werden dem "
+"Changelog-Eintrag als »Closes« hinzugefügt. Die erzeugten Einträge werden an "
+"B<debchange> als Argument neben den angegebenen I<Dch_Optionen> übergeben."
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:28
+msgid "Steve Langasek E<lt>vorlon@debian.orgE<gt>"
+msgstr "Steve Langasek E<lt>vorlon@debian.orgE<gt>"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:29 ../scripts/list-unreleased.1:21
+msgid "B<debchange>(1)"
+msgstr "B<debchange>(1)"
+
+#. type: TH
+#: ../doc/devscripts.1:1
+#, no-wrap
+msgid "DEVSCRIPTS"
+msgstr "DEVSCRIPTS"
+
+#. type: Plain text
+#: ../doc/devscripts.1:4
+msgid "devscripts - scripts to ease the lives of Debian developers"
+msgstr "devscripts - Skripte, die das Leben von Debian-Entwicklern erleichtern"
+
+#. type: Plain text
+#: ../doc/devscripts.1:12
+msgid ""
+"The B<devscripts> package provides a collection of scripts which may be of "
+"use to Debian developers and others wishing to build Debian packages. For a "
+"summary of the available scripts, please see the file I</usr/share/doc/"
+"devscripts/README.gz>, and for full details, please see the individual "
+"manpages. They are contributed by multiple developers; for details of the "
+"authors, please see the code or manpages."
+msgstr ""
+"Das Paket B<devscripts> ist eine Sammlung von Skripten für Debian-Entwickler "
+"und andere, die Debian-Pakete bauen wollen. Eine Zusammenfassung der "
+"verfügbaren Skripte finden Sie in der Datei I</usr/share/doc/devscripts/"
+"README.gz> nach. Vollständige Einzelheiten finden Sie in den jeweiligen "
+"Handbuchseiten. Sie werden durch mehrere Entwickler beigetragen; "
+"Einzelheiten über die Autoren finden Sie im Code oder den Handbuchseiten."
+
+#. type: Plain text
+#: ../doc/devscripts.1:16
+#, fuzzy
+#| msgid ""
+#| "Also, the directory I</usr/share/doc/devscripts/examples> contains "
+#| "examples of B<procmail> and B<exim> scripts for sorting mail arriving to "
+#| "Debian mailing lists."
+msgid ""
+"Also, the directory I</usr/share/doc/devscripts/examples> contains an "
+"example B<exim> script for sorting mail arriving to Debian mailing lists."
+msgstr ""
+"Außerdem enthält das Verzeichnis I</usr/share/doc/devscripts/examples> "
+"Beispiele von B<procmail>- und B<exim>-Skripten zum Sortieren ankommender E-"
+"Mails zu Debian-Mailinglisten."
+
+#. type: Plain text
+#: ../doc/devscripts.1:20
+msgid ""
+"Several scripts of the devscripts suite use the following environment "
+"variables. Check the man pages of individual scripts for more details on how "
+"the variables are used."
+msgstr ""
+"Mehrere Skripte der Devscripts-Suite verwenden die folgenden "
+"Umgebungsvariablen. Lesen Sie die Einzelheiten zur Benutzung der Variablen "
+"in den Handbuchseiten der jeweiligen Skripte nach."
+
+# FIXME appears not in the manpage --> remove from translation
+#. type: IX
+#: ../doc/devscripts.1:20
+#, no-wrap
+msgid "Header"
+msgstr "Header"
+
+#. type: IP
+#: ../doc/devscripts.1:21
+#, no-wrap
+msgid "\\s-1DEBEMAIL\\s0"
+msgstr "\\s-1DEBEMAIL\\s0"
+
+# FIXME appears not in the manpage --> remove from translation
+#. type: IX
+#: ../doc/devscripts.1:22 ../doc/devscripts.1:25
+#, no-wrap
+msgid "Item"
+msgstr "Item"
+
+#. type: =item
+#: ../doc/devscripts.1:22 ../scripts/ltnu.pod:74
+#, no-wrap
+msgid "DEBEMAIL"
+msgstr "DEBEMAIL"
+
+#. type: Plain text
+#: ../doc/devscripts.1:24
+msgid "Email of the person acting on a given Debian package via devscripts."
+msgstr ""
+"E-Mail-Adresse der Person, die an einem angegebenen Debian-Paket mittels "
+"Devscripts tätig ist."
+
+#. type: IP
+#: ../doc/devscripts.1:24
+#, no-wrap
+msgid "\\s-1DEBFULLNAME\\s0"
+msgstr "\\s-1DEBFULLNAME\\s0"
+
+#. type: IX
+#: ../doc/devscripts.1:25
+#, no-wrap
+msgid "DEBFULLNAME"
+msgstr "DEBFULLNAME"
+
+#. type: Plain text
+#: ../doc/devscripts.1:28
+msgid ""
+"Full name (first + family) of the person acting on a given Debian package "
+"via devscripts."
+msgstr ""
+"Vollständiger Name (Vor- und Zuname) der Person, die an einem angegebenen "
+"Debian-Paket mittels Devscripts tätig ist."
+
+#. type: SH
+#: ../doc/devscripts.1:28
+#, no-wrap
+msgid "SCRIPTS"
+msgstr "SKRIPTE"
+
+#. type: Plain text
+#: ../doc/devscripts.1:31
+msgid ""
+"Here is the complete list of available devscripts. See their man pages for "
+"additional documentation."
+msgstr ""
+"Es folgt eine komplette Liste verfügbarer Devscripts. Zusätzliche "
+"Dokumentation finden Sie in deren Handbuchseiten."
+
+#. type: IP
+#: ../doc/devscripts.1:31
+#, no-wrap
+msgid "I<annotate-output>(1)"
+msgstr "I<annotate-output>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:33
+msgid ""
+"run a command and prepend time and stream (O for stdout, E for stderr) for "
+"every line of output."
+msgstr ""
+"führt einen Befehl aus und stellt jeder Zeile der Ausgabe die Zeit und den "
+"Datenstrom (O für die Standardausgabe Stdout, E für die "
+"Standardfehlerausgabe Stderr) voran."
+
+#. type: IP
+#: ../doc/devscripts.1:33
+#, no-wrap
+msgid "I<archpath>(1)"
+msgstr "I<archpath>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:35
+#, fuzzy
+#| msgid ""
+#| "Prints arch (tla/Bazaar) package names. Also supports calculating the "
+#| "package names for other branches. [tla | bazaar]"
+msgid ""
+"Prints arch (tla/Bazaar 1.x) package names. Also supports calculating the "
+"package names for other branches. [tla]"
+msgstr ""
+"gibt Architekturpaketnamen (tla/Bazaar) aus. Unterstützt auch die Berechnung "
+"von Paketnamen für andere Zweige. [tla | bazaar]"
+
+#. type: IP
+#: ../doc/devscripts.1:35
+#, no-wrap
+msgid "I<bts>(1)"
+msgstr "I<bts>(1)"
+
+# SOAP = Simple Object Access Protocol
+#. type: Plain text
+#: ../doc/devscripts.1:37
+msgid ""
+"A command-line tool for accessing the Debian Bug Tracking System, both to "
+"send mails to control@bts.debian.org and to access the web pages and SOAP "
+"interface of the BTS. [www-browser, libauthen-sasl-perl, libsoap-lite-perl, "
+"liburi-perl, libwww-perl, bsd-mailx | mailx]"
+msgstr ""
+"ein Befehlszeilenwerkzeug zum Manipulieren der Fehlerdatenbank, sowohl zum "
+"Senden von E-Mails an control@bts.debian.org als auch für den Zugriff auf "
+"Web-Seiten und die SOAP-Schnittstelle des BTS. [www-browser, libauthen-sasl-"
+"perl, libsoap-lite-perl, liburi-perl, libwww-perl, bsd-mailx | mailx]"
+
+#. type: IP
+#: ../doc/devscripts.1:37
+#, no-wrap
+msgid "I<build-rdeps>(1)"
+msgstr "I<build-rdeps>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:39
+msgid ""
+"Searches for all packages that build-depend on a given package. [dctrl-"
+"tools, dose-extra, libdpkg-perl]"
+msgstr ""
+"sucht nach allen Paketen, die eine Bauabhängigkeit von einem angegebenen "
+"Paket haben. [dctrl-tools, dose-extra, libdpkg-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:39
+#, no-wrap
+msgid "I<chdist>(1)"
+msgstr "I<chdist>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:41
+msgid "tool to easily play with several distributions. [dctrl-tools]"
+msgstr ""
+"Werkzeug zum einfachen Umgang mit mehreren Distributionen. [dctrl-tools]"
+
+#. type: IP
+#: ../doc/devscripts.1:41
+#, no-wrap
+msgid "I<checkbashisms>(1)"
+msgstr "I<checkbashisms>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:43
+msgid ""
+"check whether a /bin/sh script contains any common bash-specific constructs."
+msgstr ""
+"prüft, ob ein /bin/sh-Skript irgendwelche üblichen Bash-spezifischen "
+"Konstrukte enthält."
+
+#. type: IP
+#: ../doc/devscripts.1:43
+#, no-wrap
+msgid "I<cowpoke>(1)"
+msgstr "I<cowpoke>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:45
+msgid ""
+"upload a Debian source package to a cowbuilder host and build it, optionally "
+"also signing and uploading the result to an incoming queue. [ssh-client]"
+msgstr ""
+"lädt ein Debian-Quellpaket auf einen Cowbuilder-Rechner und baut es, "
+"signiert es wahlweise und lädt das Ergebnis in eine Incoming-Warteschlange."
+"ssh. [ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:45
+#, no-wrap
+msgid "I<cvs-debi, cvs-debc>(1)"
+msgstr "I<cvs-debi, cvs-debc>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:47
+msgid ""
+"wrappers around debi and debc respectively (see below) which allow them to "
+"be called from the CVS working directory. [cvs-buildpackage]"
+msgstr ""
+"Wrapper um Debi beziehungsweise Debc (siehe unten), die ermöglichen, sie aus "
+"dem CVS-Arbeitsverzeichnis aufzurufen. [cvs-buildpackage]"
+
+#. type: IP
+#: ../doc/devscripts.1:47
+#, no-wrap
+msgid "I<cvs-debrelease>(1)"
+msgstr "I<cvs-debrelease>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:49
+msgid ""
+"wrapper around debrelease which allows it to be called from the CVS working "
+"directory. [cvs-buildpackage, dupload | dput, ssh-client]"
+msgstr ""
+"Wrapper um Debrelease, der es ermöglicht, es aus dem CVS-Arbeitsverzeichnis "
+"aufzurufen. [cvs-buildpackage, dupload | dput, ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:49
+#, no-wrap
+msgid "I<cvs-debuild>(1)"
+msgstr "I<cvs-debuild>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:51
+msgid ""
+"A wrapper for cvs-buildpackage to use debuild as its package building "
+"program. [cvs-buildpackage, fakeroot, lintian, gnupg |gnupg2]"
+msgstr ""
+"Wrapper für CVS-Buildpackage, um Debuild als Paketbauprogramm zu benutzen. "
+"[cvs-buildpackage, fakeroot, lintian, gnupg | gnupg2]"
+
+#. type: IP
+#: ../doc/devscripts.1:51
+#, no-wrap
+msgid "I<dcmd>(1)"
+msgstr "I<dcmd>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:53
+msgid ""
+"run a given command replacing the name of a .changes or .dsc file with each "
+"of the files referenced therein. *"
+msgstr ""
+"führt einen angegebenen Befehl aus, der den Namen einer .changes- oder .dsc-"
+"Datei durch jede darin referenzierte Datei ersetzt. *"
+
+#. type: IP
+#: ../doc/devscripts.1:53
+#, no-wrap
+msgid "I<dd-list>(1)"
+msgstr "I<dd-list>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:55
+msgid "given a list of packages, pretty-print it ordered by maintainer. *"
+msgstr ""
+"gibt eine angegebene Liste von Paketen hübsch nach Paketbetreuer sortiert "
+"aus. *"
+
+#. type: IP
+#: ../doc/devscripts.1:55
+#, no-wrap
+msgid "I<debbisect>(1)"
+msgstr "I<debbisect>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:57
+msgid ""
+"bisect snapshot.debian.org to find which change in the archive introduced a "
+"certain problem. [mmdebstrap, python3-debian]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:57
+#, no-wrap
+msgid "I<debc>(1)"
+msgstr "I<debc>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:59
+msgid ""
+"List contents of current package. Do this after a successful \"debuild\" to "
+"see if the package looks all right."
+msgstr ""
+"listet den Inhalt des aktuellen Pakets auf. Tun Sie dies nach einem "
+"erfolgreichen »debuild«, um zu sehen, ob das Paket richtig aussieht."
+
+#. type: IP
+#: ../doc/devscripts.1:59
+#, no-wrap
+msgid "I<debchange (abbreviation dch)>(1)"
+msgstr "I<debchange (Abkürzung dch)>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:61
+msgid ""
+"Modifies debian/changelog and manages version numbers for you. It will "
+"either increment the version number or add an entry for the current version, "
+"depending upon the options given to it. [libdistro-info-perl, libsoap-lite-"
+"perl]*"
+msgstr ""
+"ändert debian/changelog und verwaltet die Versionsnummern für Sie. Es wird "
+"die Versionsnummer entweder erhöhen oder einen Eintrag für die aktuelle "
+"Version hinzufügen, je nachdem, welche Optionen Sie angeben. [libdistro-info-"
+"perl, libsoap-lite-perl]*"
+
+#. type: IP
+#: ../doc/devscripts.1:61
+#, no-wrap
+msgid "I<debcheckout>(1)"
+msgstr "I<debcheckout>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:63
+msgid "checkout the development repository of a Debian package. *"
+msgstr "checkt das Entwicklungsdepot eines Debian-Pakets aus. *"
+
+#. type: IP
+#: ../doc/devscripts.1:63
+#, no-wrap
+msgid "I<debclean>(1)"
+msgstr "I<debclean>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:65
+msgid ""
+"Clean a Debian source tree. Debclean will clean all Debian source trees "
+"below the current directory, and if requested, also remove all files that "
+"were generated from these source trees (that is .deb, .dsc and .changes "
+"files). It will keep the .diffs and original files, though, so that the "
+"binaries and other files can be rebuilt if necessary. [fakeroot]*"
+msgstr ""
+"bereinigt einen Debian-Quellverzeichnisbaum. Debclean wird alle Debian-"
+"Quellverzeichnisbäume unterhalb des aktuellen Verzeichnisses bereinigen und, "
+"falls gewünscht, auch alle Dateien entfernen, die aus diesen "
+"Quellverzeichnisbäumen erzeugt wurden (dabei handelt es sich um .deb-, .dsc- "
+"und .changes-Dateien). Es wird allerdings die .diffs und Originaldateien "
+"behalten, so dass die Binärdateien und andere Dateien neu gebaut werden "
+"können, falls nötig. [fakeroot]*"
+
+#. type: IP
+#: ../doc/devscripts.1:65
+#, no-wrap
+msgid "I<debcommit>(1)"
+msgstr "I<debcommit>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:67
+msgid ""
+"Commits changes to cvs, darcs, svn, svk, tla, bzr, git, or hg, using new "
+"entries in debian/changelog as the commit message. Also supports tagging "
+"Debian package releases. [cvs | darcs | subversion | svk | tla | bzr | git-"
+"core | mercurial, libtimedate-perl]"
+msgstr ""
+"übergibt Änderungen an cvs, darcs, svn, svk, tla, bzr, git oder hg mittels "
+"neuen Einträgen in debian/changelog als Commit-Nachricht. Unterstützt auch "
+"das Markieren von Debian-Paketveröffentlichungen. [cvs | darcs | subversion "
+"| svk | tla | bzr | git-core | mercurial, libtimedate-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:67
+#, no-wrap
+msgid "I<debdiff>(1)"
+msgstr "I<debdiff>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:69
+msgid ""
+"A program which examines two .deb files or two .changes files and reports on "
+"any difference found in their file lists. Useful for ensuring that no files "
+"were inadvertently lost between versions. Can also examine two .dsc files "
+"and report on the changes between source versions. For a deeper comparison "
+"one can use the diffoscope package. [wdiff, patchutils]*"
+msgstr ""
+"Ein Programm, das zwei .deb- oder .changes-Dateien prüft und alle "
+"Unterschiede meldet, die es in ihren Dateilisten findet. Dies ist nützlich, "
+"um sicherzustellen, dass zwischen zwei Versionen keine Dateien versehentlich "
+"verloren gingen. Es kann auch zwei .dsc-Dateien prüfen und Änderungen "
+"zwischen den Quellversionen melden. Für einen tiefergehenden Vergleich "
+"können Sie das Paket Diffoscope benutzen. [wdiff, patchutils]*"
+
+#. type: IP
+#: ../doc/devscripts.1:69
+#, no-wrap
+msgid "I<debdiff-apply>(1)"
+msgstr "I<debdiff-apply>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:71
+msgid ""
+"Apply unified diffs of two Debian source packages, such as those generated "
+"by debdiff, to a target Debian source package. Any changes to debian/"
+"changelog are dealt with specially, to avoid the conflicts that changelog "
+"diffs typically produce when applied naively. May be used to check that old "
+"patches still apply to newer versions of those packages. [python3-debian, "
+"python3-unidiff, quilt]"
+msgstr ""
+"wendet vereinheitlichte Diffs aus zwei Debian-Quellpaketen an, so wie sie "
+"durch Debdiff erzeugt werden, auf ein Ziel-Debian-Quellpaket an. Alle "
+"Änderungen am Changelog werden gesondert behandelt, um Konflikte zu "
+"vermeiden, die Changelog-Diffs normalerweise produzieren, wenn sie "
+"naiverweise angewendet werden. Dies kann benutzt werden, um zu prüfen, ob "
+"alte Patche noch immer zu neueren Versionen dieser Pakete passen. [python3-"
+"debian, python3-unidiff, quilt]"
+
+#. type: IP
+#: ../doc/devscripts.1:71
+#, no-wrap
+msgid "I<debi>(1)"
+msgstr "I<debi>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:73
+msgid ""
+"Installs the current package by using the setuid root debpkg script "
+"described below. It assumes that the current package has just been built "
+"(for example by debuild), and the .deb lives in the parent directory, and "
+"will effectively run dpkg -i on the .deb. The ability to install the "
+"package with a very short command is very useful when troubleshooting "
+"packages."
+msgstr ""
+"installiert das aktuelle Paket mittels des unten beschriebenen Setuid-Root-"
+"Debpkg-Skripts. Es geht davon aus, dass das aktuelle Paket gerade gebaut "
+"wurde (zum Beispiel durch Debuild), dass das .deb im übergeordneten "
+"Verzeichnis liegt und führt effektiv »dpkg -i« auf dem .deb aus. Die "
+"Fähigkeit, das Paket mit einem sehr kurzen Befehl zu erstellen, ist bei der "
+"Fehlerbehebung in Paketen sehr nützlich."
+
+#. type: IP
+#: ../doc/devscripts.1:73
+#, no-wrap
+msgid "I<debootsnap>(1)"
+msgstr "I<debootsnap>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:75
+msgid ""
+"Combines debootstrap and snapshot.debian.org to create a chroot containing "
+"exactly the requested selection of packages. This can be used to re-create a "
+"chroot from the past, for example to reproduce a bug. The tool is also used "
+"by debrebuild to build a package in a chroot with build dependencies in the "
+"same version as recorded in the buildinfo file. [apt-utils, dpkg-dev, "
+"equivs, mmdebstrap, python3-pycurl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:75
+#, no-wrap
+msgid "I<debpkg>(1)"
+msgstr "I<debpkg>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:77
+msgid ""
+"A wrapper for dpkg used by debi to allow convenient testing of packages. "
+"For debpkg to work, it needs to be made setuid root, and this needs to be "
+"performed by the sysadmin -- it is not installed as setuid root by default. "
+"(Note that being able to run a setuid root debpkg is effectively the same as "
+"having root access to the system, so this should be done with caution.) "
+"Having debpkg as a wrapper for dpkg can be a Good Thing (TM), as it "
+"decreases the potential for damage by accidental wrong use of commands in "
+"superuser mode (e.g., an inadvertent rm -rf * in the wrong directory is "
+"disastrous as many can attest to)."
+msgstr ""
+"Ein Wrapper für Dpkg, der von Debi benutzt wird, um bequemes Testen von "
+"Paketen zu ermöglichen. Damit Debpkg funktioniert, muss es mit gesetztem "
+"Setuid-Root-Bit laufen, welches vom Sysadmin gesetzt werden muss – das "
+"Setuid-Root-Bit ist nicht standardmäßig gesetzt. (Beachten Sie, dass die "
+"Fähigkeit, es mit Setuid-Root-Rechten auszuführen, Debpkg effektiv dieselben "
+"Rechte gibt, als hätte es Root-Zugriff auf das System, daher sollte es mit "
+"Vorsicht benutzt werden.) Debpkg als Wrapper für Dpkg zu verwenden, kann "
+"eine gute Sache ™ sein, da es die Möglichkeiten vermindert, durch "
+"versehentlich falsche Verwendung von Befehlen im Superbenutzermodus Schaden "
+"zu verursachen (z.B. kann ein unbeabsichtigtes »rm -rf *« im falschen "
+"Verzeichnis desaströs sein, wie viele bestätigen können)."
+
+#. type: IP
+#: ../doc/devscripts.1:77
+#, no-wrap
+msgid "I<debrelease>(1)"
+msgstr "I<debrelease>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:79
+msgid ""
+"A wrapper around dupload or dput which figures out which version to upload, "
+"and then calls dupload or dput to actually perform the upload. [dupload | "
+"dput, ssh-client]"
+msgstr ""
+"Ein Wrapper um Dupload oder Dput, der herausfindet, welche Version "
+"hochgeladen werden soll, und dann Dupload oder Dput tatsächlich aufruft, um "
+"das Hochladen durchzuführen. [dupload | dput, ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:79
+#, no-wrap
+msgid "I<debrebuild>(1)"
+msgstr "I<debrebuild>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:81
+msgid ""
+"A script that provided a .buildinfo file reports the instructions on how to "
+"try to reproduce the reported build. [sbuild | mmdebstrap, python3-pycurl, "
+"libdpkg-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:81
+#, no-wrap
+msgid "I<debrepro>(1)"
+msgstr "I<debrepro>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:83
+msgid ""
+"A script that tests reproducibility of Debian packages. It will build a "
+"given source directory twice, with a set of variation between the first and "
+"second build, and compare the binary packages produced. If diffoscope is "
+"installed, it is used to compare non-matching binaries. If disorderfs is "
+"installed, it is used during the build to inject non-determinism in "
+"filesystem listing operations. [faketime, diffoscope, disorderfs]"
+msgstr ""
+"Ein Skript, das die Reproduzierbarkeit von Debian-Paketen testet. Es wird "
+"ein gegebenes Quellverzeichnis zweimal bauen, mit einem Satz von "
+"Veränderungen zwischen erstem und zweiten Bauen und dann die erzeugten "
+"Binärpakete vergleichen. Falls Diffoscope installiert ist, wird es zum "
+"Vergleich nicht passender Binärpakete verwendet. Falls Disorderfs "
+"installiert ist, wird es während des Bauens benutzt, um nicht vorbestimmtes "
+"in Dateisystemauflistungstransaktionen einzuspeisen. [faketime, diffoscope, "
+"disorderfs]"
+
+#. type: IP
+#: ../doc/devscripts.1:83
+#, no-wrap
+msgid "I<debrsign>(1)"
+msgstr "I<debrsign>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:85
+msgid ""
+"This transfers a .changes/.dsc pair to a remote machine for signing, and "
+"runs debsign on the remote machine over an SSH connection. [gnupg | gnupg2, "
+"debian-keyring, ssh-client]"
+msgstr ""
+"Dies überträgt ein .changes-/.dsc-Paar zum Signieren auf eine ferne Maschine "
+"und führt dort über eine SSH-Verbindung Debsign aus. [gnupg | gnupg2, debian-"
+"keyring, ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:85
+#, no-wrap
+msgid "I<debsign>(1)"
+msgstr "I<debsign>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:87
+msgid ""
+"Use GNU Privacy Guard to sign the changes (and possibly dsc) files created "
+"by running dpkg-buildpackage with no-sign options. Useful if you are "
+"building a package on a remote machine and wish to sign it on a local one. "
+"This script is capable of automatically downloading the .changes and .dsc "
+"files from a remote machine. [gnupg |gnupg2, debian-keyring, ssh-client]*"
+msgstr ""
+"verwendet GNU Privacy Guard, um die Changes- (und eventuell Dsc-)Dateien zu "
+"signieren, die durch das Ausführen von Dpkg-buildpackage mit No-sign-"
+"Optionen erzeugt wurden. Dies ist nützlich, falls Sie ein Paket auf einem "
+"fernen Rechner bauen und es auf einem lokalen Rechner signieren möchten. Das "
+"Skript ist in der Lage, die .changes- und .dsc-Dateien automatisch vom "
+"fernen Rechner herunterzuladen. [gnupg |gnupg2, debian-keyring, ssh-client]*"
+
+#. type: IP
+#: ../doc/devscripts.1:87
+#, no-wrap
+msgid "I<debsnap>(1)"
+msgstr "I<debsnap>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:89
+msgid ""
+"grab packages from https://snapshot.debian.org [libwww-perl, libjson-perl]"
+msgstr ""
+"greift auf Pakete von https://snapshot.debian.org zu. [libwww-perl, libjson-"
+"perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:89
+#, no-wrap
+msgid "I<debuild>(1)"
+msgstr "I<debuild>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:91
+msgid ""
+"A wrapper for building a package (i.e., dpkg-buildpackage) to avoid problems "
+"with insufficient permissions and wrong paths etc. Debuild will set up the "
+"proper environment for building a package. Debuild will use the fakeroot "
+"program to build the package by default, but can be instructed to use any "
+"other gain-root command, or can even be installed setuid root. Debuild can "
+"also be used to run various of the debian/rules operations with the same "
+"root-gaining procedure. Debuild will also run lintian to check that the "
+"package does not have any major policy violations. [fakeroot, lintian, gnupg "
+"| gnupg2]*"
+msgstr ""
+"Ein Wrapper zum Bau eines Pakets (d.h. Dpkg-buildpackage), um Probleme mit "
+"unzureichenden Zugriffsrechten, falschen Pfaden usw. zu vermeiden. Debuild "
+"wird die ordnungsgemäße Umgebung zum Bau eines Pakets einrichten. Debuild "
+"wird standardmäßig das Programm Fakeroot zum Bau des Pakets verwenden, kann "
+"aber angewiesen werden, irgendein anderes Programm zu benutzen, das Root-"
+"Zugriff erlangt oder sogar mit Setuid-Root installiert werden. Debuild kann "
+"auch verwendet werden, um verschiedene der debian/rules-Aktionen mit "
+"derselben Prozedur zum Erlangen von Root-Rechten auszuführen. Debuild wird "
+"außerdem Lintian ausführen, um zu prüfen, ob das Paket keine groben Verstöße "
+"gegen das Regelwerk enthält. [fakeroot, lintian, gnupg | gnupg2]*"
+
+#. type: IP
+#: ../doc/devscripts.1:91
+#, no-wrap
+msgid "I<deb-janitor>(1)"
+msgstr "I<deb-janitor>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:93
+msgid "command-line client for interacting with the Debian Janitor."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:93
+#, no-wrap
+msgid "I<deb-reversion>(1)"
+msgstr "I<deb-reversion>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:95
+msgid ""
+"increases a binary package version number and repacks the package, useful "
+"for porters and the like."
+msgstr ""
+"erhöht die Versionsnummer eines Binärpakets und packt das Paket neu. Dies "
+"ist nützlich für Portierer und dergleichen."
+
+#. type: IP
+#: ../doc/devscripts.1:95
+#, no-wrap
+msgid "I<deb-why-removed>(1)"
+msgstr "I<deb-why-removed>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:97
+msgid "shows the reason a package was removed from the archive. [libdpkg-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:97
+#, no-wrap
+msgid "I<dep3changelog>(1)"
+msgstr "I<dep3changelog>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:99
+msgid "generate a changelog entry from a DEP3-style patch header."
+msgstr "erzeugt einen Changelog-Eintrag aus Patch-Kopfzeilen im DEP3-Stil."
+
+#. type: IP
+#: ../doc/devscripts.1:99
+#, no-wrap
+msgid "I<desktop2menu>(1)"
+msgstr "I<desktop2menu>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:101
+msgid ""
+"given a freedesktop.org desktop file, generate a skeleton for a menu file. "
+"[libfile-desktopentry-perl]"
+msgstr ""
+"erzeugt eine Gerüstmenüdatei aus einer gegebenen freedesktop.org-"
+"Desktopdatei. [libfile-desktopentry-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:101
+#, no-wrap
+msgid "I<dget>(1)"
+msgstr "I<dget>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:103
+msgid ""
+"Downloads Debian source and binary packages. Point at a .changes or .dsc to "
+"download all references files. Specify a package name to download it from "
+"the configured apt repository. [wget | curl]"
+msgstr ""
+"lädt Debian-Quell- und Binärpakete herunter. Zeigen Sie es auf ein .changes "
+"oder .dsc, um alle referenzierten Dateien herunterzuladen. Geben Sie einen "
+"Paketnamen an, um es aus dem konfigurierten APT-Depot herunterzuladen. [wget "
+"| curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:103
+#, no-wrap
+msgid "I<diff2patches>(1)"
+msgstr "I<diff2patches>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:105
+msgid ""
+"extracts patches from a .diff.gz file placing them under debian/ or, if "
+"present, debian/patches. [patchutils]"
+msgstr ""
+"extrahiert Patches aus einer .diff.gz-Datei und legt sie unter debian/ oder, "
+"falls verfügbar, debian/patches ab. [patchutils]"
+
+#. type: IP
+#: ../doc/devscripts.1:105
+#, no-wrap
+msgid "I<dpkg-depcheck, dpkg-genbuilddeps>(1)"
+msgstr "I<dpkg-depcheck, dpkg-genbuilddeps>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:107
+msgid ""
+"Runs a specified command (such as debian/rules build) or dpkg-buildpackage, "
+"respectively, to determine the packages used during the build process. This "
+"information can be helpful when trying to determine the packages needed in "
+"the Build-Depends etc. lines in the debian/control file. [build-essential, "
+"strace]"
+msgstr ""
+"führt einen angegebenen Befehl aus (wie »debian/rules build«) "
+"beziehungsweise Dpkg-buildpackage, um die beim Bauprozess benutzten Pakete "
+"zu bestimmen. Diese Information kann beim Bestimmen der Pakete, die in den "
+"Build-Depends-Zeilen usw. in der debian/control-Datei benötigt werden, "
+"hilfreich sein. [build-essential, strace]"
+
+#. type: IP
+#: ../doc/devscripts.1:107
+#, no-wrap
+msgid "I<dscextract>(1)"
+msgstr "I<dscextract>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:109
+msgid "extract a single file from a Debian source package. [patchutils]"
+msgstr ""
+"extrahiert eine einzelne Datei aus einem Debian-Quellpaket. [patchutils]"
+
+#. type: IP
+#: ../doc/devscripts.1:109
+#, no-wrap
+msgid "I<dscverify>(1)"
+msgstr "I<dscverify>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:111
+msgid ""
+"check the signature and MD5 sums of a dsc file against the most current "
+"Debian keyring on your system. [gnupg | gnupg2, debian-keyring]"
+msgstr ""
+"prüft die Signatur und die MD5-Prüfsummen einer .dsc-Datei gegen den neusten "
+"Debian-Schlüsselbund auf Ihrem System. [gnupg | gnupg2, debian-keyring]"
+
+#. type: IP
+#: ../doc/devscripts.1:111
+#, no-wrap
+msgid "I<edit-patch>(1)"
+msgstr "I<edit-patch>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:113
+msgid ""
+"add/edit a patch for a source package and commit the changes. [quilt | "
+"dpatch | cdbs]"
+msgstr ""
+"fügt einen Patch für ein Quellpaket hinzu oder bearbeitet ihn und führt "
+"einen Commit der Änderungen durch. [quilt | dpatch | cdbs]"
+
+#. type: IP
+#: ../doc/devscripts.1:113
+#, no-wrap
+msgid "I<getbuildlog>(1)"
+msgstr "I<getbuildlog>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:115
+msgid "download package build logs from Debian auto-builders. [wget]"
+msgstr ""
+"lädt die Paketbauprotokolle von den automatischen Debian-Baumaschinen "
+"herunter. [wget]"
+
+#. type: IP
+#: ../doc/devscripts.1:115
+#, no-wrap
+msgid "I<git-deborig>(1)"
+msgstr "I<git-deborig>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:117
+msgid ""
+"try to produce Debian orig.tar using git-archive(1). [libdpkg-perl, libgit-"
+"wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, libtry-tiny-"
+"perl]"
+msgstr ""
+"versucht, mittels git-archive(1) Debians orig.tar zu erstellen. [libdpkg-"
+"perl, libgit-wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, "
+"libtry-tiny-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:117
+#, no-wrap
+msgid "I<grep-excuses>(1)"
+msgstr "I<grep-excuses>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:119
+msgid ""
+"grep britney's excuses to find out what is happening to your packages. "
+"[libdbd-pg-perl, libterm-size-perl, libyaml-syck-perl, wget, w3m]"
+msgstr ""
+"durchsucht mit Grep Britneys Excuses, um herauszufinden, was mit Ihren "
+"Paketen geschieht. [libdbd-pg-perl, libterm-size-perl, libyaml-syck-perl, "
+"wget, w3m]"
+
+#. type: IP
+#: ../doc/devscripts.1:119
+#, no-wrap
+msgid "I<hardening-check>(1)"
+msgstr "I<hardening-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:121
+msgid "report the hardening characteristics of a set of binaries."
+msgstr "berichtet die Härtungscharakteristiken einer Gruppe von Binärpaketen."
+
+#. type: IP
+#: ../doc/devscripts.1:121
+#, no-wrap
+msgid "I<list-unreleased>(1)"
+msgstr "I<list-unreleased>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:123
+msgid "searches for packages marked UNRELEASED in their changelog."
+msgstr ""
+"sucht nach Paketen, die in ihrem Changelog mit UNRELEASED markiert sind."
+
+#. type: IP
+#: ../doc/devscripts.1:123
+#, no-wrap
+msgid "I<ltnu (Long Time No Upload)>(1)"
+msgstr "I<ltnu (Long Time No Upload, seit längerem nicht hochgeladen)>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:125
+msgid ""
+"List all uploads of packages by the given uploader or maintainer and display "
+"them ordered by the last upload of that package, oldest uploads first."
+msgstr ""
+"listet jede hochgeladene Version von Paketen durch den angegebenen "
+"Hochladenden oder Paketbetreuer auf, sortiert nach dem letzten Hochladen des "
+"Pakets, ältestes Hochladen zuerst."
+
+#. type: IP
+#: ../doc/devscripts.1:125
+#, no-wrap
+msgid "I<manpage-alert>(1)"
+msgstr "I<manpage-alert>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:127
+msgid "locate binaries without corresponding manpages. [man-db]"
+msgstr "ortet Programme ohne zugehörige Handbuchseiten. [man-db]"
+
+#. type: IP
+#: ../doc/devscripts.1:127
+#, no-wrap
+msgid "I<mass-bug>(1)"
+msgstr "I<mass-bug>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:129
+msgid "mass-file bug reports. [bsd-mailx | mailx]"
+msgstr "reicht größere Anzahl von Fehlerberichten ein. [bsd-mailx | mailx]"
+
+#. type: IP
+#: ../doc/devscripts.1:129
+#, no-wrap
+msgid "I<mergechanges>(1)"
+msgstr "I<mergechanges>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:131
+msgid ""
+"merge .changes files from the same release but built on different "
+"architectures."
+msgstr ""
+"führt .changes-Dateien der gleichen Veröffentlichung zusammen, die aber auf "
+"unterschiedlichen Architekturen gebaut wurden."
+
+#. type: IP
+#: ../doc/devscripts.1:131
+#, no-wrap
+msgid "I<mk-build-deps>(1)"
+msgstr "I<mk-build-deps>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:133
+msgid ""
+"Given a package name and/or control file, generate a binary package which "
+"may be installed to satisfy the build-dependencies of the given package. "
+"[equivs]"
+msgstr ""
+"erzeugt bei gegebenem Paketnamen und/oder Steuerungsdatei ein Binärpaket, "
+"das installiert werden kann, um Bauabhängigkeiten der angegebenen Pakete zu "
+"erfüllen. [equivs]"
+
+#. type: IP
+#: ../doc/devscripts.1:133
+#, no-wrap
+msgid "I<mk-origtargz>(1)"
+msgstr "I<mk-origtargz>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:135
+msgid ""
+"Rename upstream tarball, optionally changing the compression and removing "
+"unwanted files. [libfile-which-perl, unzip, xz-utils, file]"
+msgstr ""
+"benennt den Tarball der Originalautoren um, ändert wahlweise die "
+"Komprimierung und entfernt unerwünschte Dateien. [libfile-which-perl, unzip, "
+"xz-utils, file]"
+
+#. type: IP
+#: ../doc/devscripts.1:135
+#, no-wrap
+msgid "I<namecheck>(1)"
+msgstr "I<namecheck>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:137
+msgid "Check project names are not already taken."
+msgstr "prüft, ob Projektnamen bereits vergeben sind."
+
+#. type: IP
+#: ../doc/devscripts.1:137
+#, no-wrap
+msgid "I<nmudiff>(1)"
+msgstr "I<nmudiff>(1)"
+
+# FIXME: missing ')'
+#. type: Plain text
+#: ../doc/devscripts.1:139
+msgid ""
+"prepare a diff of this version (presumably an NMU against the previously "
+"released version (as per the changelog) and submit the diff to the BTS. "
+"[patchutils, mutt]"
+msgstr ""
+"bereitet ein Diff dieser Version vor (vermutlich ein NMU gegen die vorher "
+"veröffentlichte Version (wie aus dem Changelog ersichtlich)) und sendet das "
+"Diff an die Fehlerdatenbank. [patchutils, mutt]"
+
+#. type: IP
+#: ../doc/devscripts.1:139
+#, no-wrap
+msgid "I<origtargz>(1)"
+msgstr "I<origtargz>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:141
+#, fuzzy
+#| msgid ""
+#| "fetch the orig tarball of a Debian package from various sources, and "
+#| "unpack it."
+msgid ""
+"fetch the orig tarball of a Debian package from various sources, and unpack "
+"it. [pristine-tar, pristine-lfs]"
+msgstr ""
+"ruft den Original-Tarball eines Debian-Pakets aus verschiedenen Quellen ab "
+"und entpackt ihn."
+
+#. type: IP
+#: ../doc/devscripts.1:141
+#, no-wrap
+msgid "I<plotchangelog>(1)"
+msgstr "I<plotchangelog>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:143
+msgid ""
+"display information from a changelog graphically using gnuplot. [libtimedate-"
+"perl, gnuplot]"
+msgstr ""
+"zeigt Informationen aus einem Changelog grafisch mittels Gnuplot an. "
+"[libtimedate-perl, gnuplot]"
+
+#. type: IP
+#: ../doc/devscripts.1:143
+#, no-wrap
+msgid "I<pts-subscribe>(1)"
+msgstr "I<pts-subscribe>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:145
+msgid ""
+"subscribe to the PTS (Package Tracking System) for a limited period of time. "
+"[bsd-mailx | mailx, at]"
+msgstr ""
+"abonniert das PTS (Paketverfolgungssystem) für eine begrenzte Zeit. [bsd-"
+"mailx | mailx, at]"
+
+#. type: IP
+#: ../doc/devscripts.1:145
+#, no-wrap
+msgid "I<rc-alert>(1)"
+msgstr "I<rc-alert>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:147
+msgid "list installed packages which have release-critical bugs. [wget | curl]"
+msgstr ""
+"führt alle installierten Pakete auf, die release-kritische Fehler enthalten. "
+"[wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:147
+#, no-wrap
+msgid "I<reproducible-check>(1)"
+msgstr "I<reproducible-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:149
+msgid ""
+"reports on the reproducible status of installed packages. For more details "
+"please see E<lt>https://reproducible-builds.orgE<gt>."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:149
+#, no-wrap
+msgid "I<rmadison>(1)"
+msgstr "I<rmadison>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:151
+msgid ""
+"remotely query the Debian archive database about packages. [liburi-perl, "
+"wget | curl]"
+msgstr ""
+"fragt aus der Ferne die Debian-Archivdatenbank über Pakete ab. [liburi-perl, "
+"wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:151
+#, no-wrap
+msgid "I<sadt>(1)"
+msgstr "I<sadt>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:153
+msgid "run DEP-8 tests. [python3-debian, autodep8]"
+msgstr "führt DEP-8-Tests durch. [python3-debian, autodep8]"
+
+#. type: IP
+#: ../doc/devscripts.1:153
+#, no-wrap
+msgid "I<salsa>(1)"
+msgstr "I<salsa>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:155
+msgid ""
+"manipulates salsa.debian.org repositories and users [libgitlab-api-v4-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:155
+#, no-wrap
+msgid "I<suspicious-source>(1)"
+msgstr "I<suspicious-source>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:157
+msgid ""
+"output a list of files which are not common source files. [python3-magic]"
+msgstr ""
+"gibt eine Liste der Dateien aus, die keine üblichen Quelldateien sind. "
+"[python3-magic]"
+
+#. type: IP
+#: ../doc/devscripts.1:157
+#, no-wrap
+msgid "I<svnpath>(1)"
+msgstr "I<svnpath>(1)"
+
+# https://www.duden.de/rechtschreibung/auschecken
+#. type: Plain text
+#: ../doc/devscripts.1:159
+msgid ""
+"Prints the path to the Subversion repository of a Subversion checkout. Also "
+"supports calculating the paths for branches and tags in a repository "
+"independent fashion. Used by debcommit to generate svn tags. [subversion]"
+msgstr ""
+"gibt den Pfad zu einem Subversion-Depot aus, aus dem ausgecheckt wurde. "
+"Unterstützt außerdem die Berechnung der Pfade für Zweige und Markierungen in "
+"auf eine Art, die unabhängig vom Depot ist. Wird von Debcommit zum Erzeugen "
+"von SVN-Markierungen benutzt. [subversion]"
+
+#. type: IP
+#: ../doc/devscripts.1:159
+#, no-wrap
+msgid "I<tagpending>(1)"
+msgstr "I<tagpending>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:161
+msgid ""
+"runs from a Debian source tree and tags bugs that are to be closed in the "
+"latest changelog as pending. [libsoap-lite-perl]"
+msgstr ""
+"wird aus einem Debian-Quellverzeichnisbaum ausgeführt und markiert Fehler, "
+"die im neuesten Changelog geschlossen werden sollen, als anstehend. [libsoap-"
+"lite-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:161
+#, no-wrap
+msgid "I<transition-check>(1)"
+msgstr "I<transition-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:163
+msgid ""
+"Check a list of source packages for involvement in transitions for which "
+"uploads to unstable are currently blocked. [libwww-perl, libyaml-syck-perl]"
+msgstr ""
+"prüft eine Liste von Quellpaketen, ob sie an Übergängen beteiligt sind, "
+"weswegen Uploads nach Unstable derzeit blockiert sind. [libwww-perl, libyaml-"
+"syck-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:163
+#, no-wrap
+msgid "I<uscan>(1)"
+msgstr "I<uscan>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:165
+#, fuzzy
+#| msgid ""
+#| "Automatically scan for and download upstream updates. Uscan can also "
+#| "call a program such as uupdate to attempt to update the Debianised "
+#| "version based on the new update. Whilst uscan could be used to release "
+#| "the updated version automatically, it is probably better not to without "
+#| "testing it first. Uscan can also verify detached OpenPGP signatures if "
+#| "upstream's signing key is known. [file, gpgv | gpgv2, gnupg | gnupg2, "
+#| "libfile-which-perl, liblwp-protocol-https-perl, libmoo-perl, libwww-perl, "
+#| "unzip, xz-utils]*"
+msgid ""
+"Automatically scan for and download upstream updates. Uscan can also call a "
+"program such as uupdate to attempt to update the Debianised version based on "
+"the new update. Whilst uscan could be used to release the updated version "
+"automatically, it is probably better not to without testing it first. Uscan "
+"can also verify detached OpenPGP signatures if upstream's signing key is "
+"known. [file, gpgv | gpgv2, gnupg | gnupg2, libfile-dirlist-perl, libfile-"
+"touch-perl, libfile-which-perl, liblwp-protocol-https-perl, libmoo-perl, "
+"libwww-perl, unzip, xz-utils]*"
+msgstr ""
+"sucht automatisch nach Aktualisierungen der Ursprungsautoren und lädt sie "
+"herunter. Uscan kann außerdem ein Programm wie Uupdate aufrufen, um zu "
+"versuchen, basierend auf der neuen Aktualisierung, die debianisierte "
+"Version zu aktualisieren. Obwohl Uscan zum automatischen Veröffentlichen der "
+"aktualisierten Version verwendet werden könnte, ist es wahrscheinlich "
+"besser, dies nicht ohne vorheriges Testen zu tun. Uscan kann außerdem "
+"separate OpenPGP-Signaturen prüfen, falls der Signaturschlüssel der "
+"Ursprungsautoren bekannt ist. [file, gpgv | gpgv2, gnupg | gnupg2, libfile-"
+"which-perl, liblwp-protocol-https-perl, libmoo-perl, libwww-perl, unzip, xz-"
+"utils]*"
+
+#. type: IP
+#: ../doc/devscripts.1:165
+#, no-wrap
+msgid "I<uupdate>(1)"
+msgstr "I<uupdate>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:167
+msgid ""
+"Update the package with an archive or patches from an upstream author. This "
+"will be of help if you have to update your package. It will try to apply "
+"the latest diffs to your package and tell you how successful it was. [patch]"
+msgstr ""
+"aktualisiert das Paket mit einem Archiv oder Patches von einem "
+"Ursprungsautor. Dies wird hilfreich sein, wenn Sie Ihr Paket aktualisieren "
+"müssen. Es wird versuchen, die neusten Diffs auf Ihr Paket anzuwenden und "
+"Ihnen mitteilen, wie erfolgreich dies verlief. [patch]"
+
+#. type: IP
+#: ../doc/devscripts.1:167
+#, no-wrap
+msgid "I<what-patch>(1)"
+msgstr "I<what-patch>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:169
+msgid ""
+"determine what patch system, if any, a source package is using. [patchutils]"
+msgstr ""
+"bestimmt, welches Patch-System ein Quellpaket verwendet, falls es dies tut. "
+"[patchutils]"
+
+#. type: IP
+#: ../doc/devscripts.1:169
+#, no-wrap
+msgid "I<whodepends>(1)"
+msgstr "I<whodepends>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:171
+msgid "check which maintainers' packages depend on a package."
+msgstr "prüft die Pakete welches Betreuers von einem Paket abhängen."
+
+#. type: IP
+#: ../doc/devscripts.1:171
+#, no-wrap
+msgid "I<who-permits-upload>(1)"
+msgstr "I<who-permits-upload>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:173
+msgid ""
+"Retrieve information about Debian Maintainer access control lists. [gnupg | "
+"gnupg2, libencode-locale-perl, libwww-perl, debian-keyring]"
+msgstr ""
+"ruft Informationen über ACLs (Zugriffssteuerungslisten) ab [gnupg | gnupg2, "
+"libencode-locale-perl, libwww-perl, debian-keyring]"
+
+#. type: IP
+#: ../doc/devscripts.1:173
+#, no-wrap
+msgid "I<who-uploads>(1)"
+msgstr "I<who-uploads>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:175
+msgid ""
+"determine the most recent uploaders of a package to the Debian archive. "
+"[gnupg | gnupg2, debian-keyring, debian-maintainers, wget]"
+msgstr ""
+"bestimmt diejenigen, die ein Paket kürzlich in das Debian-Archiv hochgeladen "
+"haben. [gnupg | gnupg2, debian-keyring, debian-maintainers, wget]"
+
+#. type: IP
+#: ../doc/devscripts.1:175
+#, no-wrap
+msgid "I<wnpp-alert>(1)"
+msgstr "I<wnpp-alert>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:177
+msgid ""
+"list installed packages which are orphaned or up for adoption. [wget | curl]"
+msgstr ""
+"führt installierte Pakete auf, die verwaist oder zur Adoption freigegeben "
+"sind. [wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:177
+#, no-wrap
+msgid "I<wnpp-check>(1)"
+msgstr "I<wnpp-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:179
+msgid ""
+"check whether there is an open request for packaging or intention to package "
+"bug for a package. [wget | curl]"
+msgstr ""
+"prüft, ob es eine offene Anfrage zum Paketieren oder einen Fehlerbericht "
+"über die Absicht zum Packen für ein Paket gibt. [wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:179
+#, no-wrap
+msgid "I<wrap-and-sort>(1)"
+msgstr "I<wrap-and-sort>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:180
+msgid "wrap long lines and sort items in packaging files. [python3-debian]"
+msgstr ""
+"bricht lange Zeilen um und sortiert Elemente in Paketierungsdateien. "
+"[python3-debian]"
+
+#. type: textblock
+#: ../scripts/dget.pl:567
+msgid "dget - Download Debian source and binary packages"
+msgstr "dget - lädt Debian-Quell- und -Binärpakete herunter"
+
+#. type: =item
+#: ../scripts/dget.pl:573
+msgid "B<dget> [I<options>] I<URL> ..."
+msgstr "B<dget> [I<Optionen>] I<URL> …"
+
+#. type: =item
+#: ../scripts/dget.pl:575
+msgid "B<dget> [I<options>] [B<--all>] I<package>[B<=>I<version>] ..."
+msgstr "B<dget> [I<Optionen>] [B<--all>] I<Paket>[B<=>I<Version>] …"
+
+#. type: textblock
+#: ../scripts/dget.pl:581
+msgid ""
+"B<dget> downloads Debian packages. In the first form, B<dget> fetches the "
+"requested URLs. If this is a .dsc or .changes file, then B<dget> acts as a "
+"source-package aware form of B<wget>: it also fetches any files referenced "
+"in the .dsc/.changes file. The downloaded source is then checked with "
+"B<dscverify> and, if successful, unpacked by B<dpkg-source>."
+msgstr ""
+"B<dget> lädt Debian-Pakete herunter. In der ersten Form ruft B<dget> die "
+"angeforderten URLs ab. Falls dies eine .dsc- oder .changes-Datei ist, agiert "
+"B<dget> als eine Form von B<wget>, die das Quellpaket kennt: Es ruft "
+"außerdem alle Dateien ab, die in der .dsc-/.changes-Datei referenziert "
+"werden. Die heruntergeladene Quelle wird dann mit B<dscverify> geprüft und, "
+"falls diese Prüfung erfolgreich verläuft, durch B<dpkg-source> entpackt."
+
+#. type: textblock
+#: ../scripts/dget.pl:588
+msgid ""
+"In the second form, B<dget> downloads a I<binary> package (i.e., a I<.deb> "
+"file) from the Debian mirror configured in /etc/apt/sources.list(.d). "
+"Unlike B<apt-get install -d>, it does not require root privileges, writes to "
+"the current directory, and does not download dependencies. If a version "
+"number is specified, this version of the package is requested. With B<--"
+"all>, the list of all binaries for the source package I<package> is "
+"extracted from the output of C<apt-cache showsrc package>."
+msgstr ""
+"In der zweiten Form lädt B<dget> ein I<Binär>paket (d.h. eine I<.deb>-Datei) "
+"von einem Debian-Spiegel herunter, der in /etc/apt/sources.list(.d) "
+"konfiguriert wurde. Anders als B<apt-get install -d> benötigt es keine Root-"
+"Rechte, schreibt ins aktuelle Verzeichnis und lädt keine Abhängigkeiten "
+"herunter. Falls eine Versionsnummer angegeben wurde, wird diese Version des "
+"Pakets abgerufen. Mit B<--all> wird die Liste aller Binärpakete für das "
+"Quellpaket I<Paket> aus der Ausgabe von C<apt-cache showsrc Paket> "
+"extrahiert."
+
+#. type: textblock
+#: ../scripts/dget.pl:597
+msgid ""
+"In both cases dget is capable of getting several packages and/or URLs at "
+"once."
+msgstr ""
+"In beiden Fällen ist Dget in der Lage, mehrere Pakete und/oder URLs auf "
+"einmal zu holen."
+
+#. type: textblock
+#: ../scripts/dget.pl:600
+msgid ""
+"(Note that I<.udeb> packages used by debian-installer are located in "
+"separate packages files from I<.deb> packages. In order to use I<.udebs> "
+"with B<dget>, you will need to have configured B<apt> to use a packages file "
+"for I<component>/I<debian-installer>)."
+msgstr ""
+"(Beachten Sie, dass I<.udeb>-Pakete, die vom Debian-Installer verwendet "
+"werden, in separaten Paketdateien von I<.deb>-Paketen liegen. Um I<.udebs> "
+"mit B<dget> zu benutzen, müssen Sie B<apt> konfiguriert haben, um eine "
+"Paketdatei für I<Komponente>/I<Debian-Installer> zu verwenden)."
+
+#. type: textblock
+#: ../scripts/dget.pl:605
+msgid ""
+"Before downloading files listed in .dsc and .changes files, and before "
+"downloading binary packages, B<dget> checks to see whether any of these "
+"files already exist. If they do, then their md5sums are compared to avoid "
+"downloading them again unnecessarily. B<dget> also looks for matching files "
+"in I</var/cache/apt/archives> and directories given by the B<--path> option "
+"or specified in the configuration files (see below). Finally, if "
+"downloading (.orig).tar.gz or .diff.gz files fails, dget consults B<apt-get "
+"source --print-uris>. Download backends used are B<curl> and B<wget>, "
+"looked for in that order."
+msgstr ""
+"Bevor Dateien heruntergeladen werden, die in .dsc- und .changes-Dateien "
+"aufgeführt sind, prüft B<dget>, ob all diese Dateien existieren. Ist dies "
+"der Fall, werden ihre MD5-Summen verglichen, um zu verhindern, dass sie "
+"unnötigerweise erneut heruntergeladen werden. B<dget> sucht außerdem nach "
+"passenden Dateien in I</var/cache/apt/archives> und Verzeichnissen, die "
+"durch die Option B<--path> oder in den Konfigurationsdateien (siehe unten) "
+"angegeben wurden. Schlussendlich, falls das Herunterladen von (.orig).tar."
+"gz- oder .diff.gz-Dateien fehlschlägt, zieht Dget B<apt-get source --print-"
+"uris> zu Rate. Die benutzten Herunterlade-Backends sind B<curl> und B<wget> "
+"in dieser Reihenfolge."
+
+#. type: textblock
+#: ../scripts/dget.pl:615
+msgid ""
+"B<dget> was written to make it easier to retrieve source packages from the "
+"web for sponsor uploads. For checking the package with B<debdiff>, the last "
+"binary version is available via B<dget> I<package>, the last source version "
+"via B<apt-get source> I<package>."
+msgstr ""
+"B<dget> wurde geschrieben, um die Abfrage von Quellpaketen aus dem Web für "
+"gesponsortes Hochladen zu erleichtern. Um das Paket mit B<debdiff> zu "
+"prüfen, ist die letzte binäre Version über B<dget> I<Paket> und die letzte "
+"Quellpaketversion über B<apt-get source> I<Paket> verfügbar."
+
+#. type: textblock
+#: ../scripts/dget.pl:626
+msgid ""
+"Interpret I<package> as a source package name, and download all binaries as "
+"found in the output of \"apt-cache showsrc I<package>\". If I<package> is "
+"arch-qualified, then only binary packages which are \"Arch: all\", \"Arch: "
+"any\", or \"Arch: $arch\" will be downloaded."
+msgstr ""
+"deutet I<Paket> als einen Quellpaketnamen und lädt alle Binärdateien, die in "
+"der Ausgabe von »apt-cache showsrc I<Paket>« gefunden werden, herunter. "
+"Falls I<Paket> mit einer expliziten Architektur angegeben ist, werden nur "
+"die Binärpakete heruntergeladen, die unter »Arch: all«, »Arch: any« oder "
+"»Arch: $arch« fallen."
+
+#. type: =item
+#: ../scripts/dget.pl:631
+msgid "B<-b>, B<--backup>"
+msgstr "B<-b>, B<--backup>"
+
+#. type: textblock
+#: ../scripts/dget.pl:633
+msgid "Move files that would be overwritten to I<./backup>."
+msgstr "verschiebt Dateien, die überschrieben würden, nach I<./backup>."
+
+#. type: textblock
+#: ../scripts/dget.pl:637
+msgid "Suppress B<wget>/B<curl> non-error output."
+msgstr "unterdrückt Ausgaben von B<wget>/B<curl>, die keine Fehler betreffen."
+
+#. type: =item
+#: ../scripts/dget.pl:639 ../scripts/origtargz.pl:134
+msgid "B<-d>, B<--download-only>"
+msgstr "B<-d>, B<--download-only>"
+
+#. type: textblock
+#: ../scripts/dget.pl:641
+msgid ""
+"Do not run B<dpkg-source -x> on the downloaded source package. This can "
+"only be used with the first method of calling B<dget>."
+msgstr ""
+"führt für das heruntergeladene Quellpaket nicht B<dpkg-source -x> aus. Dies "
+"kann nur mit der ersten Aufrufmethode von B<dget> verwendet werden."
+
+#. type: =item
+#: ../scripts/dget.pl:644
+msgid "B<-x>, B<--extract>"
+msgstr "B<-x>, B<--extract>"
+
+#. type: textblock
+#: ../scripts/dget.pl:646
+msgid ""
+"Run B<dpkg-source -x> on the downloaded source package to unpack it. This "
+"option is the default and can only be used with the first method of calling "
+"B<dget>."
+msgstr ""
+"führt B<dpkg-source -x> für das heruntergeladene Quellpaket aus, um es zu "
+"entpacken. Diese Option ist die Vorgabe und kann nur mit der ersten "
+"Aufrufmethode von B<dget> verwendet werden."
+
+#. type: =item
+#: ../scripts/dget.pl:650
+msgid "B<-u>, B<--allow-unauthenticated>"
+msgstr "B<-u>, B<--allow-unauthenticated>"
+
+#. type: textblock
+#: ../scripts/dget.pl:652
+msgid ""
+"Do not attempt to verify the integrity of downloaded source packages using "
+"B<dscverify>."
+msgstr ""
+"versucht nicht, die Vollständigkeit der heruntergeladenen Quellpakete "
+"mittels B<dscverify> zu überprüfen."
+
+#. type: =item
+#: ../scripts/dget.pl:655
+msgid "B<--build>"
+msgstr "B<--build>"
+
+#. type: textblock
+#: ../scripts/dget.pl:657
+msgid "Run B<dpkg-buildpackage -b -uc> on the downloaded source package."
+msgstr ""
+"führt B<dpkg-buildpackage -b -uc> für das heruntergeladene Quellpaket aus."
+
+#. type: =item
+#: ../scripts/dget.pl:659
+msgid "B<--path> I<DIR>[B<:>I<DIR> ...]"
+msgstr "B<--path> I<VERZ>[B<:>I<VERZ> …]"
+
+#. type: textblock
+#: ../scripts/dget.pl:661
+msgid ""
+"In addition to I</var/cache/apt/archives>, B<dget> uses the colon-separated "
+"list given as argument to B<--path> to find files with a matching md5sum. "
+"For example: \"--path /srv/pbuilder/result:/home/cb/UploadQueue\". If DIR "
+"is empty (i.e., \"--path ''\" is specified), then any previously listed "
+"directories or directories specified in the configuration files will be "
+"ignored. This option may be specified multiple times, and all of the "
+"directories listed will be searched; hence, the above example could have "
+"been written as: \"--path /srv/pbuilder/result --path /home/cb/UploadQueue\"."
+msgstr ""
+"Zusätzlich zu I</var/cache/apt/archives> verwendet B<dget> die durch Kommas "
+"getrennte Liste, die als Argument an B<--path> übergeben wurde, um Dateien "
+"mit passender MD5-Summe zu finden, zum Beispiel »--path /srv/pbuilder/"
+"result:/home/cb/UploadQueue«. Falls VERZ leer ist (d.h. es wurde »--path ''« "
+"angegeben), werden alle Verzeichnisse ignoriert, die vorher aufgeführt oder "
+"in den Konfigurationsdateien angegeben wurden. Diese Option kann mehrfach "
+"angegeben werden, dann werden alle aufgelisteten Verzeichnisse durchsucht; "
+"daher könnte das vorhergehende Beispiel als »--path /srv/pbuilder/result --"
+"path /home/cb/UploadQueue« geschrieben werden."
+
+#. type: =item
+#: ../scripts/dget.pl:672
+msgid "B<-k>, B<--insecure>"
+msgstr "B<-k>, B<--insecure>"
+
+#. type: textblock
+#: ../scripts/dget.pl:674
+msgid "Allow SSL connections to untrusted hosts."
+msgstr "erlaubt SSL-Verbindungen zu nicht vetrauenswürdigen Rechnern."
+
+#. type: =item
+#: ../scripts/dget.pl:676 ../scripts/salsa.pl:456
+msgid "B<--no-cache>"
+msgstr "B<--no-cache>"
+
+#. type: textblock
+#: ../scripts/dget.pl:678
+msgid "Bypass server-side HTTP caches by sending a B<Pragma: no-cache> header."
+msgstr ""
+"umgeht Server-seitige HTTP-Zwischenspeicher durch Senden einer B<Pragma: no-"
+"cache>-Kopzeile."
+
+#. type: textblock
+#: ../scripts/dget.pl:682
+msgid "Show a help message."
+msgstr "zeigt eine Hilfenachricht an."
+
+#. type: textblock
+#: ../scripts/dget.pl:686
+msgid "Show version information."
+msgstr "zeigt Versionsinformationen an."
+
+#. type: textblock
+#: ../scripts/dget.pl:692
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variable is:"
+msgstr ""
+"Die beiden Konfigurationsdateien F</etc/devscripts.conf> und F<~/."
+"devscripts> werden durch eine Shell in dieser Reihenfolge eingelesen, um "
+"Konfigurationsvariablen zu setzen. Befehlszeilenoptionen können benutzt "
+"werden, um Einstellungen in Konfigurationsdateien außer Kraft zu setzen. "
+"Einstellungen in Umgebungsvariablen werden zu diesem Zweck ignoriert. Die "
+"derzeit bekannte Variable ist:"
+
+#. type: =item
+#: ../scripts/dget.pl:700
+msgid "B<DGET_PATH>"
+msgstr "B<DGET_PATH>"
+
+#. type: textblock
+#: ../scripts/dget.pl:702
+msgid ""
+"This can be set to a colon-separated list of directories in which to search "
+"for files in addition to the default I</var/cache/apt/archives>. It has the "
+"same effect as the B<--path> command line option. It is not set by default."
+msgstr ""
+"Dies kann auf eine durch Kommas getrennte Liste von Verzeichnissen gesetzt "
+"werden, in denen zusätzlich zu dem vorgegebenen I</var/cache/apt/archives> "
+"nach Dateien gesucht wird. Es hat die gleichen Auswirkungen wie die "
+"Befehlszeilenoption B<--path>. Standardmäßig ist es nicht gesetzt."
+
+#. type: =item
+#: ../scripts/dget.pl:707
+msgid "B<DGET_UNPACK>"
+msgstr "B<DGET_UNPACK>"
+
+#. type: textblock
+#: ../scripts/dget.pl:709
+msgid ""
+"Set to 'no' to disable extracting downloaded source packages. Default is "
+"'yes'."
+msgstr ""
+"auf »no« gesetzt deaktiviert das Extrahieren heruntergeladener Quellpakete. "
+"Vorgabe ist »yes«."
+
+#. type: =item
+#: ../scripts/dget.pl:712
+msgid "B<DGET_VERIFY>"
+msgstr "B<DGET_VERIFY>"
+
+#. type: textblock
+#: ../scripts/dget.pl:714
+msgid ""
+"Set to 'no' to disable checking signatures of downloaded source packages. "
+"Default is 'yes'."
+msgstr ""
+"auf »no« gesetzt deaktiviert die Überprüfung der Signaturen "
+"heruntergeladener Quellpakete. Vorgabe ist »yes«."
+
+#. type: textblock
+#: ../scripts/dget.pl:721
+msgid ""
+"Download all I<.deb> files for the previous version of a package and run "
+"B<debdiff> on them:"
+msgstr ""
+"lädt alle I<.deb>-Dateien für die verhergehende Version eines Pakets "
+"herunter und für B<debdiff> für sie aus:"
+
+#. type: verbatim
+#: ../scripts/dget.pl:724
+#, no-wrap
+msgid ""
+" dget --all mypackage=1.2-1\n"
+" debdiff --from *_1.2-1_*.deb --to *_1.2-2_*.deb\n"
+"\n"
+msgstr ""
+" dget --all meinpaket=1.2-1\n"
+" debdiff --from *_1.2-1_*.deb --to *_1.2-2_*.deb\n"
+"\n"
+
+#. type: =head1
+#: ../scripts/dget.pl:727
+msgid "BUGS AND COMPATIBILITY"
+msgstr "FEHLER UND KOMPATIBILITÄT"
+
+#. type: textblock
+#: ../scripts/dget.pl:729
+msgid "B<dget> I<package> should be implemented in B<apt-get install -d>."
+msgstr "B<dget> I<Paket> sollte in B<apt-get install -d> implementiert sein."
+
+#. type: textblock
+#: ../scripts/dget.pl:731
+msgid ""
+"Before devscripts version 2.10.17, the default was not to extract the "
+"downloaded source. Set DGET_UNPACK=no to revert to the old behaviour."
+msgstr ""
+"Vor Devscripts-Version 2.10.17 wurde die heruntergeladene Quelle "
+"standardmäßig nicht extrahiert. Setzen Sie DGET_UNPACK=no, um wieder zum "
+"alten Verhalten zurückzukehren."
+
+#. type: textblock
+#: ../scripts/dget.pl:736
+msgid ""
+"This program is Copyright (C) 2005-2013 by Christoph Berg <myon@debian."
+"org>. Modifications are Copyright (C) 2005-06 by Julian Gilbey <jdg@debian."
+"org>."
+msgstr ""
+"Dieses Programm unterliegt dem Copyright (C) 2005-13 von Christoph Berg "
+"<myon@debian.org>. Änderungen unterliegen dem Copyright (C) 2005-06 von "
+"Julian Gilbey <jdg@debian.org>."
+
+#. type: textblock
+#: ../scripts/dget.pl:739 ../scripts/tagpending.pl:434
+msgid ""
+"This program is licensed under the terms of the GPL, either version 2 of the "
+"License, or (at your option) any later version."
+msgstr ""
+"Dieses Programm wurde unter den Bedingungen der GPL lizensiert, entweder "
+"Version 2 der Lizenz oder (nach Ihrer Wahl) irgendeiner späteren Version."
+
+#. type: textblock
+#: ../scripts/dget.pl:744
+msgid ""
+"B<apt-get>(1), B<curl>(1), B<debcheckout>(1), B<debdiff>(1), B<dpkg-"
+"source>(1), B<wget>(1)"
+msgstr ""
+"B<apt-get>(1), B<curl>(1), B<debcheckout>(1), B<debdiff>(1), B<dpkg-"
+"source>(1), B<wget>(1)"
+
+#. type: TH
+#: ../scripts/diff2patches.1:1
+#, no-wrap
+msgid "diff2patches"
+msgstr "diff2patches"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:1 ../scripts/diff2patches.1:50
+#, no-wrap
+msgid "Raphael Geissert E<lt>atomo64@gmail.comE<gt>"
+msgstr "Raphael Geissert E<lt>atomo64@gmail.comE<gt>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:5
+msgid "diff2patches - Extract non-debian/ patches from .diff.gz files"
+msgstr "diff2patches - extrahiert non-debian/-Patches aus .diff.gz-Dateien."
+
+#. type: SH
+#: ../scripts/diff2patches.1:5
+#, no-wrap
+msgid "SYNTAX"
+msgstr "SYNTAX"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:8
+msgid "B<diff2patches >I<filename>"
+msgstr "B<diff2patches >I<Dateiname>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:10
+msgid "B<diff2patches --help>|B<--version>"
+msgstr "B<diff2patches --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:16
+msgid ""
+"Extracts patches from .diff.gz which apply to files outside the ``debian/'' "
+"directory scope. A patch is created for each modified file. Each patch is "
+"named according to the path of the modified file, with ``/'' replaced by "
+"``___'', and an extension of ``.patch''."
+msgstr ""
+"extrahiert Patches aus .diff.gz, die auf Dateien außerhalb des Bereichs des "
+"»debian/«-Verzeichnisses angewendet werden. Ein Patch wird für jede "
+"geänderte Datei erstellt. Jeder Patch ist entsprechend des Pfads der "
+"geänderten Datei benannt, wobei »/« durch »___« ersetzt und eine ».patch«-"
+"Erweiterung angehängt wird."
+
+#. type: TP
+#: ../scripts/diff2patches.1:18
+#, no-wrap
+msgid "I<filename>"
+msgstr "I<Dateiname>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:22
+msgid ""
+"Extract patches from I<filename> which apply outside the ``debian/'' "
+"directory."
+msgstr ""
+"extrahiert Patches aus I<Dateiname>, die außerhalb des Bereichs des "
+"»debian/«-Verzeichnisses Anwendung finden."
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:25
+msgid "Output help information and exit."
+msgstr "gibt Hilfsinformationen aus und beendet sich."
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:28
+msgid "Output version information and exit."
+msgstr "gibt Versionsinformationen aus und beendet sich."
+
+#. type: TP
+#: ../scripts/diff2patches.1:29
+#, no-wrap
+msgid "I<debian/control>"
+msgstr "I<debian/control>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:32
+msgid "Existence of this file is tested before any patch is extracted."
+msgstr ""
+"Die Existenz dieser Datei wird überprüft, bevor der Patch extrahiert wird."
+
+#. type: TP
+#: ../scripts/diff2patches.1:32
+#, no-wrap
+msgid "I<debian/>"
+msgstr "I<debian/>"
+
+#. type: TQ
+#: ../scripts/diff2patches.1:34
+#, no-wrap
+msgid "I<debian/patches/>"
+msgstr "I<debian/patches/>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:40
+msgid ""
+"Patches are extracted to one of these directories. ``debian/patches/'' is "
+"preferred, if it exists. If I<DEB_PATCHES> is present in the environment, "
+"it will override this behavior (see ``ENVIRONMENT VARIABLES'' section below)."
+msgstr ""
+"Patches werden in eines dieser Verzeichnisse extrahiert, vorzugsweise nach "
+"»debian/patches/«, falls es existiert. Falls I<DEB_PATCHES> in der Umgebung "
+"vorliegt, wird es dieses Verhalten außer Kraft setzen (siehe den Abschnitt "
+"»UMGEBUNGSVARIABLEN« weiter unten)."
+
+#. type: TP
+#: ../scripts/diff2patches.1:41
+#, no-wrap
+msgid "B<DEB_PATCHES>"
+msgstr "B<DEB_PATCHES>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:45
+msgid ""
+"When defined and points to an existing directory, patches are extracted in "
+"that directory and not under ``debian/'' nor ``debian/patches/''."
+msgstr ""
+"Wenn dies definiert ist und auf ein existierendes Verzeichnis zeigt, werden "
+"Patches in dieses Verzeichnis und weder unter »debian/« noch unter »debian/"
+"patches/« extrahiert."
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:48
+msgid "B<combinediff>(1)"
+msgstr "B<combinediff>(1)"
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "DPKG-DEPCHECK"
+msgstr "DPKG-DEPCHECK"
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "March 2002"
+msgstr "März 2002"
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "dpkg-depcheck"
+msgstr "dpkg-depcheck"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:4
+msgid "dpkg-depcheck - determine packages used to execute a command"
+msgstr ""
+"dpkg-depcheck - bestimmt Pakete, die benutzt werden, um einen Befehl "
+"auszuführen."
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:6
+msgid "B<dpkg-depcheck> [I<options>] I<command>"
+msgstr "B<dpkg-depcheck> [I<Optionen>] I<Befehl>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:15
+msgid ""
+"This program runs the specified command under B<strace> and then determines "
+"and outputs the packages used in the process. The list can be trimmed in "
+"various ways as described in the options below. A good example of this "
+"program would be the command B<dpkg-depcheck -b debian/rules build>, which "
+"would give a good first approximation to the Build-Depends line needed by a "
+"Debian package. Note, however, that this does I<not> give any direct "
+"information on versions required or architecture-specific packages."
+msgstr ""
+"Dieses Programm führt den angegebenen Befehl unter B<strace> aus, bestimmt "
+"dann die in diesem Prozess verwendeten Pakete und gibt sie aus. Die Liste "
+"kann auf verschiedene Arten, wie in den nachfolgenden Optionen beschrieben, "
+"gekürzt werden. Ein gutes Beispiel dieses Programms wäre der Befehl B<dpkg-"
+"depcheck -b debian/rules build>, der eine gute erste Annäherung an die von "
+"einem Debian-Paket benötigte Build-Depends-Zeile geben würde. Beachten Sie "
+"jedoch, dass dies I<keine> direkte Information über benötigte Versionen oder "
+"architekturspezifische Pakete liefert."
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:22
+msgid ""
+"Report all packages used to run I<command>. This is the default behaviour. "
+"If used in conjunction with B<-b>, B<-d> or B<-m>, gives additional "
+"information on those packages skipped by these options."
+msgstr ""
+"meldet alle Pakete, die benutzt werden, um I<Befehl> auszuführen. Dies ist "
+"das Standardverhalten. Falls es zusammen mit B<-b>, B<-d> oder B<-m> "
+"verwendet wird, gibt es zusätzliche Informationen über jene Pakete, die von "
+"diesen Optionen übersprungen wurden."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:22
+#, no-wrap
+msgid "B<-b>, B<--build-depends>"
+msgstr "B<-b>, B<--build-depends>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:26
+msgid ""
+"Do not report any build-essential or essential packages used, or any of "
+"their (direct or indirect) dependencies."
+msgstr ""
+"meldet keine für den Bau wesentlichen (»build-essential«) oder wesentlichen "
+"(»essential«) benutzten Pakete oder irgendwelche ihrer (direkten oder "
+"indirekten) Abhängigkeiten."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:26
+#, no-wrap
+msgid "B<-d>, B<--ignore-dev-deps>"
+msgstr "B<-d>, B<--ignore-dev-deps>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:30
+msgid ""
+"Do not show packages used which are direct dependencies of I<-dev> packages "
+"used. This implies B<-b>."
+msgstr ""
+"zeigt keine benutzten Pakete, die direkte Abhängigkeiten verwendeter I<-dev>-"
+"Pakete sind. Dies impliziert B<-b>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:30
+#, no-wrap
+msgid "B<-m>, B<--min-deps>"
+msgstr "B<-m>, B<--min-deps>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:34
+msgid ""
+"Output a minimal set of packages needed, taking into account direct "
+"dependencies. Using B<-m> implies B<-d> and also B<-b>."
+msgstr ""
+"gibt einen minimalen Satz benötigter Pakete aus und berücksichtigt direkte "
+"Abhängigkeiten. Die Verwendung von B<-m> impliziert B<-d> ebenso wie B<-b>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:34
+#, no-wrap
+msgid "B<-C>, B<--C-locale>"
+msgstr "B<-C>, B<--C-locale>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:37
+msgid "Run I<command> with the C locale."
+msgstr "führt I<Befehl> mit der Locale C aus."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:37
+#, no-wrap
+msgid "B<--no-C-locale>"
+msgstr "B<--no-C-locale>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:40
+msgid "Don't change locale when running I<command>."
+msgstr "ändert nicht die Locale, wenn I<Befehl> ausgeführt wird."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:40
+#, no-wrap
+msgid "B<-l>, B<--list-files>"
+msgstr "B<-l>, B<--list-files>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:43
+msgid "Also report the list of files used in each package."
+msgstr ""
+"meldet außerdem die Liste der Dateien, die von jedem Paket benutzt werden."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:43
+#, no-wrap
+msgid "B<--no-list-files>"
+msgstr "B<--no-list-files>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:47
+msgid "Do not report the files used in each package. Cancels a B<-l> option."
+msgstr ""
+"meldet nicht die Dateien, die von jedem Paket verwendet werden, hebt eine B<-"
+"l>-Option auf."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:47
+#, no-wrap
+msgid "B<-o>, B<--output=>I<FILE>"
+msgstr "B<-o>, B<--output=>I<DATEI>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:50
+msgid "Output the package diagnostics to I<FILE> instead of stdout."
+msgstr ""
+"gibt die Paketdiagnose in I<DATEI> statt auf der Standardausgabe (Stdout) "
+"aus."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:50
+#, no-wrap
+msgid "B<-O>, B<--strace-output=>I<FILE>"
+msgstr "B<-O>, B<--strace-output=>I<DATEI>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:54
+msgid ""
+"Write the B<strace> output to I<FILE> when tracing I<command> instead of "
+"using a temporary file."
+msgstr ""
+"schreibt die Ausgabe von B<strace> nach I<DATEI>, wenn I<Befehl> "
+"nachverfolgt wird, anstatt eine temporäre Datei zu benutzen."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:54
+#, no-wrap
+msgid "B<-I>, B<--strace-input=>I<FILE>"
+msgstr "B<-I>, B<--strace-input=>I<DATEI>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:59
+msgid ""
+"Get B<strace> output from I<FILE> instead of tracing I<command>; B<strace> "
+"must have be run with the B<-f -q> options for this to work."
+msgstr ""
+"erhält die B<strace>-Ausgabe von I<DATEI> anstatt vom Verfolgen von "
+"I<Befehl>; B<strace> muss für diese Arbeit mit den Optionen B<-f -q> "
+"ausgeführt worden sein, damit das funktioniert."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:59
+#, no-wrap
+msgid "B<-f>, B<--features=>I<LIST>"
+msgstr "B<-f>, B<--features=>I<LISTE>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:65
+msgid ""
+"Enable or disabled features given in the comma-separated I<LIST> as "
+"follows. A feature is enabled with I<+feature> or just I<feature> and "
+"disabled with I<-feature>. The currently recognised features are:"
+msgstr ""
+"aktiviert oder deaktiviert Funktionalitäten, die in einer durch Kommas "
+"getrennten I<LISTE> wie folgt angegeben sind. Eine Funktionalität mit "
+"I<+Funktionalität> oder nur I<Funktionalität> ist aktiviert und eine mit I<-"
+"Funktionalität> ist deaktiviert. Die derzeit bekannten Funktionalitäten sind:"
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:67
+#, no-wrap
+msgid "B<warn-local>"
+msgstr "B<warn-local>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:71
+msgid ""
+"Warn if files in I</usr/local> or I</var/local> are used. Enabled by "
+"default."
+msgstr ""
+"warnt, falls Dateien in I</usr/local> oder I</var/local> verwendet werden, "
+"ist standardmäßig aktiviert."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:71
+#, no-wrap
+msgid "B<discard-check-version>"
+msgstr "B<discard-check-version>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:76
+msgid ""
+"Discards I<execve> when only a I<--version> argument is given to the "
+"program; this works around some configure scripts that check for binaries "
+"they don't actually use. Enabled by default."
+msgstr ""
+"verwirft I<execve>, wenn dem Programm nur ein I<--version>-Argument gegeben "
+"wurde; dies ist ein Behelf für einige Konfigurationsskripte, die auf "
+"Binärdateien hin prüfen, die sie nicht wirklich verwenden. Standardmäßig "
+"aktiviert."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:76
+#, no-wrap
+msgid "B<trace-local>"
+msgstr "B<trace-local>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:81
+msgid ""
+"Also try to identify files which are accessed in I</usr/local> and I</var/"
+"local>. Not usually very useful, as Debian does not place files in these "
+"directories. Disabled by default."
+msgstr ""
+"versucht außerdem Dateien zu identifizieren, auf die in I</usr/local> und I</"
+"var/local> zugegriffen wird. Üblicherweise nicht besonders nützlich, da "
+"Debian keine Dateien in diesen Verzeichnissen ablegt. Standardmäßig "
+"deaktiviert."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:81
+#, no-wrap
+msgid "B<catch-alternatives>"
+msgstr "B<catch-alternatives>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:85
+msgid ""
+"Warn about access to files controlled by the Debian I<alternatives> "
+"mechanism. Enabled by default."
+msgstr ""
+"warnt beim Zugriff auf Dateien, die unter der Kontrolle des Debian-"
+"I<alternatives>-Mechanismus stehen. Standardmäßig aktiviert."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:85
+#, no-wrap
+msgid "B<discard-sgml-catalogs>"
+msgstr "B<discard-sgml-catalogs>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:90
+msgid ""
+"Discards access to SGML catalogs; some SGML tools read all the registered "
+"catalogs at startup. Files matching the regexp /usr/share/sgml/.*\\e.cat "
+"are recognised as catalogs. Enabled by default."
+msgstr ""
+"verwirft den Zugriff auf SGML-Kataloge; einige SGML-Werkzeuge lesen beim "
+"Start alle registrierten Kataloge. Dateien, die auf den regulären Ausdruck /"
+"usr/share/sgml/.*\\e.cat passen, werden als Kataloge erkannt. Standardmäßig "
+"aktiviert."
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:99
+msgid "Display usage information and exit."
+msgstr "zeigt Aufrufinformationen und wird beendet."
+
+#. type: =item
+#: ../scripts/dpkg-depcheck.1:99 ../scripts/mk-build-deps.pl:115
+#, no-wrap
+msgid "B<-v>, B<--version>"
+msgstr "B<-v>, B<--version>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:102
+msgid "Display version and copyright information and exit."
+msgstr "zeigt Versions- und Copyright-Informationen und wird beendet."
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:108 ../scripts/grep-excuses.1:52
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced in that order to set configuration variables. Command line options "
+"can be used to override configuration file settings. Environment variable "
+"settings are ignored for this purpose. The currently recognised variable is:"
+msgstr ""
+"Die beiden Konfigurationsdateien I</etc/devscripts.conf> und I<~/."
+"devscripts> werden in dieser Reihenfolge eingelesen, um "
+"Konfigurationsvariablen zu setzen. Um Konfigurationsdateieinstellungen außer "
+"Kraft zu setzen, können Befehlszeilenoptionen verwendet werden. "
+"Umgebungsvariablen werden zu diesem Zweck ignoriert. Die derzeit bekannte "
+"Variable ist:"
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:108
+#, no-wrap
+msgid "B<DPKG_DEPCHECK_OPTIONS>"
+msgstr "B<DPKG_DEPCHECK_OPTIONS>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:112
+msgid ""
+"These are options which are parsed before the command-line options. For "
+"example,"
+msgstr ""
+"Dies sind Optionen, die vor den Befehlszeilenoptionen ausgewertet werden, "
+"zum Beispiel"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:114
+msgid "DPKG_DEPCHECK_OPTIONS=\"-b -f-catch-alternatives\""
+msgstr "DPKG_DEPCHECK_OPTIONS=\"-b -f-catch-alternatives\""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:118
+msgid ""
+"which passes these options to B<dpkg-depcheck> before any command-line "
+"options are processed. You are advised not to try tricky quoting, because "
+"of the vagaries of shell quoting!"
+msgstr ""
+"was diese Optionen an B<dpkg-depcheck> weiterreicht, bevor irgendwelche "
+"Befehlszeilenoptionen verarbeitet werden. Sie sind gut beraten, wegen den "
+"Launen der Shell-Klammersetzung, keine knifflige Klammersetzung zu verwenden!"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:123
+msgid ""
+"B<dpkg>(1), B<strace>(1), B<devscripts.conf>(5), B<update-alternatives>(8)"
+msgstr ""
+"B<dpkg>(1), B<strace>(1), B<devscripts.conf>(5), B<update-alternatives>(8)"
+
+#. type: SH
+#: ../scripts/dpkg-depcheck.1:123
+#, no-wrap
+msgid "COPYING"
+msgstr "KOPIEREN"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:130
+msgid ""
+"Copyright 2001 Bill Allombert E<lt>ballombe@debian.orgE<gt>. Modifications "
+"copyright 2002,2003 Julian Gilbey E<lt>jdg@debian.orgE<gt>. B<dpkg-"
+"depcheck> is free software, covered by the GNU General Public License, "
+"version 2 or (at your option) any later version, and you are welcome to "
+"change it and/or distribute copies of it under certain conditions. There is "
+"absolutely no warranty for B<dpkg-depcheck>."
+msgstr ""
+"Copyright 2001 Bill Allombert E<lt>ballombe@debian.orgE<gt>. Änderungen "
+"Copyright 2002, 2003 Julian Gilbey E<lt>jdg@debian.orgE<gt>. B<dpkg-"
+"depcheck> ist freie Software, sie unterliegt der GNU General Public License, "
+"entweder Version 2 der Lizenz oder (nach Ihrer Wahl) irgendeiner späteren "
+"Version. Sie sind eingeladen, es zu ändern und/oder Kopien davon unter "
+"bestimmten Bedingungen weiterzugeben. Es besteht absolut keine "
+"Gewährleistung für B<dpkg-depcheck>."
+
+#. type: TH
+#: ../scripts/dpkg-genbuilddeps.1:1
+#, no-wrap
+msgid "DPKG-GENBUILDDEPS"
+msgstr "DPKG-GENBUILDDEPS"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:4
+msgid ""
+"dpkg-genbuilddeps - generate a list of packages used to build this package"
+msgstr ""
+"dpkg-genbuilddeps - erzeugt eine Liste von Paketen, die benutzt werden, um "
+"dieses Paket zu bauen"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:6
+msgid "B<dpkg-genbuilddeps> [I<arg> ...]"
+msgstr "B<dpkg-genbuilddeps> [I<Arg> …]"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:19
+msgid ""
+"This program is a wrapper around B<dpkg-depcheck>(1). It should be run from "
+"the top of a Debian build tree. It calls B<dpkg-buildpackage> with any "
+"arguments given on the command line, and by tracing the execution of this, "
+"it determines which non-essential packages were used during the package "
+"building. This can be useful in determining what the I<Build-Depends> "
+"control fields should contain. It does not determine which packages were "
+"used for the arch independent parts of the build and which for the arch "
+"dependent parts, not does it attempt to determine which versions of packages "
+"are required. It should be able to run under B<fakeroot> rather than being "
+"run as root, as B<fakeroot dpkg-genbuilddeps>, or B<dpkg-genbuilddeps -"
+"rfakeroot>."
+msgstr ""
+"Dieses Programm ist ein Wrapper um B<dpkg-depcheck>(1). Es sollte von der "
+"obersten Ebene des Debian-Bauverzeichnisbaums ausgeführt werden. Es ruft "
+"B<dpkg-buildpackage> mit allen auf der Befehlszeile angegebenen Argumenten "
+"auf und bestimmt beim Verfolgen von dessen Ausführung, welche nicht "
+"essentiellen Pakete beim Bau des Pakets verwendet werden. Dies kann bei der "
+"Bestimmung, welche I<Build-Depends>-Steuerfelder enthalten sein sollen, "
+"nützlich sein. Es bestimmt weder welche Pakete für die "
+"architekturunabhängigen Teile des Bauens verwendet werden und welche für die "
+"architekturabhängigen Teile, noch versucht es, zu bestimmen, welche "
+"Versionen von Paketen benötigt werden. Es sollte in der Lage sein, unter "
+"B<fakeroot> ausgeführt zu werden, als B<fakeroot dpkg-genbuilddeps> oder "
+"B<dpkg-genbuilddeps -rfakeroot> anstatt als Root."
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:23
+msgid ""
+"This program requires the build-essential package to be installed. If it is "
+"not, please use B<dpkg-depcheck> directly, with a command such as"
+msgstr ""
+"Dieses Programm verlangt, dass das Paket »build-essential« installiert ist. "
+"Falls dies nicht der Fall ist, verwenden Sie direkt B<dpkg-depcheck> mit "
+"einem Befehl wie"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:25
+#, no-wrap
+msgid " dpkg-depcheck --all dpkg-buildpackage -us -uc -b -rfakeroot ...\n"
+msgstr " dpkg-depcheck --all dpkg-buildpackage -us -uc -b -rfakeroot …\n"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:27
+msgid "All this program itself does is essentially to run the command:"
+msgstr "Im Wesentlichen führt das Programm folgenden Befehl aus:"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:29
+#, no-wrap
+msgid " dpkg-depcheck -b dpkg-buildpackage -us -uc -b -rfakeroot [arg ...]\n"
+msgstr " dpkg-depcheck -b dpkg-buildpackage -us -uc -b -rfakeroot [Arg …]\n"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:33
+msgid "B<dpkg-depcheck>(1), B<fakeroot>(1)"
+msgstr "B<dpkg-depcheck>(1), B<fakeroot>(1)"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:36
+msgid "B<The Debian Policy Manual,> sections on Build-Depends etc."
+msgstr "B<The Debian Policy Manual>, Abschnitte über Bauabhängigkeiten etc."
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:40
+msgid ""
+"The original B<dpkg-genbuilddeps> was written by Ben Collins "
+"E<lt>bcollins@debian.orgE<gt>. The current version is a simple wrapper "
+"around B<dpkg-depcheck> written by Bill Allombert E<lt>ballombe@debian."
+"orgE<gt>. This manual page was written by Julian Gilbey E<lt>jdg@debian."
+"orgE<gt>."
+msgstr ""
+"Das ursprüngliche B<dpkg-genbuilddeps> wurde von Ben Collins "
+"E<lt>bcollins@debian.orgE<gt> geschrieben. Die aktuelle Version ist ein "
+"einfacher Wrapper um B<dpkg-depcheck>, geschrieben von Bill Allombert "
+"E<lt>ballombe@debian.orgE<gt>. Diese Handbuchseite wurde von Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> geschrieben."
+
+#. type: TH
+#: ../doc/edit-patch.1:1
+#, no-wrap
+msgid "EDIT-PATCH"
+msgstr "EDIT-PATCH"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:5
+msgid ""
+"B<edit-patch>, B<add-patch> - tool for preparing patches for Debian source "
+"packages"
+msgstr ""
+"B<edit-patch>, B<add-patch> - Werkzeug, das Patches für Debian-Quellpakete "
+"vorbereitet"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:8
+msgid "B<edit-patch> I<path/to/patch>"
+msgstr "B<edit-patch> I<Pfad/zum/Patch>"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:10
+msgid "B<add-patch> I<path/to/patch>"
+msgstr "B<add-patch> I<Pfad/zum/Patch>"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:18
+msgid ""
+"B<edit-patch> is a wrapper script around the Quilt, CDBS, and dpatch patch "
+"systems. It simplifies the process of preparing and editing patches to "
+"Debian source packages and allows the user to not have to be concerned with "
+"which patch system is in use. Run from inside the root directory of the "
+"source package, B<edit-patch> can be used to edit existing patches located "
+"in I<debian/patches>."
+msgstr ""
+"B<edit-patch> ist ein Wrapper-Skript um die Quilt-, CDBS- und Dpatch-Patch-"
+"Systeme. Es vereinfacht den Prozess der Vorbereitung und Bearbeitung von "
+"Patches für Debian-Quellpakete und sorgt dafür, dass sich der Benutzer nicht "
+"darum kümmern muss, welches Patch-System benutzt wird. Aus dem "
+"Wurzelverzeichnis des Quellpakets ausgeführt, kann B<edit-patch> verwendet "
+"werden, um existierende Patches, die in I<debian/patches> liegen, zu "
+"bearbeiten."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:25
+msgid ""
+"It can also be used to incorporate new patches. If pointed at a patch not "
+"already present, it will copy the patch to I<debian/patches> in the correct "
+"format for the patch system in use. Next, the patch is applied and a "
+"subshell is opened in order to edit the patch. Typing B<exit> or pressing "
+"Ctrl-d will close the subshell and launch an editor to record the I<debian/"
+"changelog> entry."
+msgstr ""
+"Es kann außerdem benutzt werden, um neue Patches zu integrieren. Falls es "
+"auf einen Patch zeigt, der noch nicht vorhanden ist, wird es den Patch im "
+"für das benutzte Patch-System korrekten Format, nach I<debian/patches> "
+"kopieren. Als nächstes wird der Patch angewendet und es wird eine Unter-"
+"Shell geöffnet, um den Patch zu bearbeiten. Die Eingabe von B<exit> oder das "
+"Drücken von Strg-D wird die Unter-Shell schließen und einen Editor öffnen, "
+"um den I<debian/changelog>-Eintrag aufzuschreiben."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:29
+msgid ""
+"B<edit-patch> is integrated with the Bazaar and Git version control "
+"systems. The patch will be automatically added to the tree, and the "
+"I<debian/changelog> entry will be used as the commit message."
+msgstr ""
+"B<edit-patch> ist in die Versionskontrollsysteme Bazaar und Git integriert. "
+"Der Patch wird dem Baum automatisch hinzugefügt und der I<debian/changelog>-"
+"Eintrag wird als Commit-Nachricht verwendet."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:32
+msgid ""
+"If no patch system is present, the patch is applied inline, and a copy is "
+"stored in I<debian/patches-applied>."
+msgstr ""
+"Falls kein Patch-System vorhanden ist, wird der Patch inline angewendet und "
+"es wird eine Kopie in I<debian/patches-applied> gespeichert."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:36
+msgid ""
+"B<add-patch> is the non-interactive version of B<edit-patch>. The patch "
+"will be incorporated but no editor or subshell will be spawned."
+msgstr ""
+"B<add-patch> ist eine nicht interaktive Version von B<edit-patch>. Der Patch "
+"wird integriert, es wird aber weder ein Editor noch eine Unter-Shell "
+"ausgeführt."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:40
+msgid ""
+"B<edit-patch> was written by Daniel Holbach E<lt>daniel.holbach@canonical."
+"comE<gt>, Michael Vogt E<lt>michael.vogt@canonical.comE<gt>, and David "
+"Futcher E<lt>bobbo@ubuntu.comE<gt>."
+msgstr ""
+"B<edit-patch> wurde von Daniel Holbach E<lt>daniel.holbach@canonical."
+"comE<gt>, Michael Vogt E<lt>michael.vogt@canonical.comE<gt> und David "
+"Futcher E<lt>bobbo@ubuntu.comE<gt> geschrieben."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:42
+msgid ""
+"This manual page was written by Andrew Starr-Bochicchio E<lt>a.starr.b@gmail."
+"comE<gt>."
+msgstr ""
+"Diese Handbuchseite wurde von Andrew Starr-Bochicchio E<lt>a.starr.b@gmail."
+"comE<gt> verfasst."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:43
+msgid ""
+"Both are released under the terms of the GNU General Public License, version "
+"3."
+msgstr ""
+"Beide wurden unter den Bedingungen der GNU General Public License, Version "
+"3, veröffentlicht."
+
+#. type: TH
+#: ../scripts/dscextract.1:1
+#, no-wrap
+msgid "DSCEXTRACT"
+msgstr "DSCEXTRACT"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:4
+msgid "dscextract - extract a single file from a Debian source package"
+msgstr ""
+"dscextract - extrahiert eine einzelne Datei aus einem Debian-Quellpaket"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:6
+msgid "B<dscextract> [I<options>] I<dscfile> I<file>"
+msgstr "B<dscextract> [I<Optionen>] I<dsc-Datei> I<Datei>"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:11
+msgid ""
+"B<dscextract> reads a single file from a Debian source package. The idea is "
+"to only look into I<.diff.gz> files (source format 1.0) or I<.debian.tar.gz/"
+"bz2> files (source format 3.0) where possible, hence avoiding to unpack "
+"large tarballs. It is most useful for files in the I<debian/> subdirectory."
+msgstr ""
+"B<dscextract> liest eine einzelne Datei aus einem Debian-Quellpaket. Die "
+"Idee besteht darin, nur in I<.diff.gz>-Dateien (Quellformat 1.0) oder I<."
+"debian.tar.gz/bz2>-Dateien (Quellformat 3.0) zu schauen, wo dies möglich "
+"ist, infolgedessen wird das Entpacken großer Tarbälle vermieden. Es ist am "
+"nützlichsten für die Dateien im Unterverzeichnis I<debian/>."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:14
+msgid ""
+"I<file> is relative to the first level directory contained in the package, i."
+"e. with the first component stripped."
+msgstr ""
+"I<Datei> ist relativ zur ersten Ebene des im Paket enthaltenen "
+"Verzeichnisses, d.h. nach der Entfernung der ersten Komponente."
+
+#. type: TP
+#: ../scripts/dscextract.1:15
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:20
+msgid ""
+"\"Fast\" mode. For source format 1.0, avoid to fall back scanning the I<."
+"orig.tar.gz> file if I<file> was not found in the I<.diff.gz>. (For 3.0 "
+"packages, it is assumed that I<debian/*> are exactly the contents of "
+"I<debian.tar.gz/bz2>.)"
+msgstr ""
+"»schneller« Modus. Vermeidet für das Quellformat 1.0 den Rückfall zum "
+"Scannen der I<.orig.tar.gz>-Datei, falls I<Datei> nicht im I<.diff.gz> "
+"gefunden wurde. (Für 3.0-Pakete wird davon ausgegangen, dass I<debian/*> "
+"exakt der Inhalt von I<debian.tar.gz/bz2> ist.)"
+
+#. type: TP
+#: ../scripts/dscextract.1:21 ../scripts/wnpp-check.1:29
+#, no-wrap
+msgid "0"
+msgstr "0"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:24
+msgid "I<file> was extracted."
+msgstr "I<Datei> wurde extrahiert."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:27
+msgid "I<file> was not found in the source package."
+msgstr "I<Datei> wurde nicht im Quellpaket gefunden."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:30
+msgid "An error occurred, like I<dscfile> was not found."
+msgstr "Es ist ein Fehler, wie I<Dsc-Datei> wurde nicht gefunden, aufgetreten."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:32
+msgid "dscextract dds_2.1.1+ddd105-2.dsc debian/watch || test $? = 1"
+msgstr "dscextract dds_2.1.1+ddd105-2.dsc debian/watch || test $? = 1"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:33
+msgid "B<dscextract> was written by Christoph Berg E<lt>myon@debian.orgE<gt>."
+msgstr ""
+"B<dscextract> wurde von Christoph Berg E<lt>myon@debian.orgE<gt> geschrieben."
+
+#. type: TH
+#: ../scripts/dscverify.1:1
+#, no-wrap
+msgid "DSCVERIFY"
+msgstr "DSCVERIFY"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:4
+msgid "dscverify - verify the validity of a Debian package"
+msgstr "dscverify - überprüft die Gültigkeit eines Debian-Pakets"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:6
+msgid ""
+"B<dscverify> [B<--keyring >I<keyring>] ... "
+"I<changes_or_buildinfo_or_dsc_filename> ..."
+msgstr ""
+"B<dscverify> [B<--keyring >I<Schlüsselbund>] … I<changes-_oder_buildinfo-"
+"_oder_dsc-Dateiname> …"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:17
+msgid ""
+"B<dscverify> checks that the GPG signatures on the given I<.changes>, I<."
+"buildinfo> or I<.dsc> files are good signatures made by keys in the current "
+"Debian keyrings, found in the I<debian-keyring> package. (Additional "
+"keyrings can be specified using the B<--keyring> option any number of "
+"times.) It then checks that the other files listed in the I<.changes>, I<."
+"buildinfo> or I<.dsc> files have the correct sizes and checksums (MD5 plus "
+"SHA1 and SHA256 if the latter are present). The exit status is 0 if there "
+"are no problems and non-zero otherwise."
+msgstr ""
+"B<dscverify> prüft, ob die GPG-Signaturen der angegebenen I<.changes>-, I<."
+"buildinfo>- oder I<.dsc>-Dateien gute Signaturen sind, die durch Schlüssel "
+"aus aktuellen Debian-Schlüsselbünden erstellt wurden, die aus dem Paket "
+"I<debian-keyring> stammen. (Zusätzliche Schlüsselbünde können beliebig oft "
+"mittels der Option B<--keyring> angegeben werden.) Dann prüft es, ob die "
+"anderen in den I<.changes>-, I<.buildinfo>- oder I<.dsc>-Dateien "
+"aufgeführten Dateien die korrekten Größen und Prüfsummen aufweisen (MD5 plus "
+"SHA1 und SHA256, falls letzteres vorhanden ist). Der Exit-Status ist 0, "
+"falls es keine Probleme gibt, andernfalls ungleich 0,"
+
+#. type: TP
+#: ../scripts/dscverify.1:18
+#, no-wrap
+msgid "B<--keyring>I< >I<keyring>"
+msgstr "B<--keyring>I< >I<Schlüsselbund>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:21
+msgid "Add I<keyring> to the list of keyrings to be used."
+msgstr ""
+"fügt der Liste der zu benutzenden Schlüsselbünde I<Schlüsselbund> hinzu."
+
+#. type: TP
+#: ../scripts/dscverify.1:21 ../scripts/who-uploads.1:25
+#, no-wrap
+msgid "B<--no-default-keyrings>"
+msgstr "B<--no-default-keyrings>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:24
+msgid "Do not use the default set of keyrings."
+msgstr "verwendet nicht den vorgegebenen Satz von Schlüsselbünden."
+
+#. type: TP
+#: ../scripts/dscverify.1:28
+#, no-wrap
+msgid "B<--nosigcheck>, B<--no-sig-check>, B<-u>"
+msgstr "B<--nosigcheck>, B<--no-sig-check>, B<-u>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:33
+msgid ""
+"Skip the signature verification step. That is, only verify the sizes and "
+"checksums of the files listed in the I<.changes>, I<.buildinfo> or I<.dsc> "
+"files."
+msgstr ""
+"überspringt den Signaturprüfschritt. Sprich, es prüft nur die Größen und "
+"Prüfsummen der in den I<.changes>-, I<.buildinfo>- oder I<.dsc>-Dateien "
+"aufgeführten Dateien."
+
+#. type: TP
+#: ../scripts/dscverify.1:33 ../scripts/plotchangelog.1:78
+#: ../scripts/salsa.pl:579 ../scripts/uupdate.1:98
+#, no-wrap
+msgid "B<--verbose>"
+msgstr "B<--verbose>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:36
+msgid "Do not suppress GPG output."
+msgstr "unterdrückt nicht die Ausgabe von GPG."
+
+#. type: Plain text
+#: ../scripts/dscverify.1:50
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. "
+"Environment variable settings are ignored for this purpose. If the first "
+"command line option given is B<--noconf> or B<--no-conf>, then these files "
+"will not be read. The currently recognised variable is:"
+msgstr ""
+"Die beiden Konfigurationsdateien I</etc/devscripts.conf> und I<~/."
+"devscripts> werden durch eine Shell in dieser Reihenfolge eingelesen, um "
+"Konfigurationsvariablen zu setzen. Umgebungsvariablen werden zu diesem Zweck "
+"ignoriert. Falls die erste Befehlszeilenoption B<--noconf> oder B<--no-conf> "
+"ist, werden diese Dateien nicht gelesen. Die derzeit bekannte Variable ist:"
+
+#. type: TP
+#: ../scripts/dscverify.1:50
+#, no-wrap
+msgid "B<DSCVERIFY_KEYRINGS>"
+msgstr "B<DSCVERIFY_KEYRINGS>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:54
+msgid ""
+"This is a colon-separated list of extra keyrings to use in addition to any "
+"specified on the command line."
+msgstr ""
+"Dies ist eine durch Doppelpunkte getrennte Liste zusätzlicher "
+"Schlüsselbünde, die zusätzlich zu denen benutzt werden, die auf der "
+"Befehlszeile angegeben wurden."
+
+#. type: SH
+#: ../scripts/dscverify.1:54
+#, no-wrap
+msgid "KEYRING"
+msgstr "SCHLÜSSELBUND"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:61
+msgid ""
+"Please note that the keyring provided by the debian-keyring package can be "
+"slightly out of date. The latest version can be obtained with rsync, as "
+"documented in the README that comes with debian-keyring. If you sync the "
+"keyring to a non-standard location (see below), you can use the "
+"possibilities to specify extra keyrings, by either using the above mentioned "
+"configuration option or the --keyring option."
+msgstr ""
+"Bitte beachten Sie, dass der vom Paket »debian-keyring« bereitgestellte "
+"Schlüsselbund etwas veraltet sein kann. Die letzte Version können Sie mit "
+"Rsync abrufen, wie es in der »debian-keyring« mitgegebenen Datei README "
+"dokumentiert ist. Falls Sie den Schlüsselbund an einen unüblichen Ort "
+"synchronisieren (siehe unten), können Sie die Möglichkeiten nutzen, "
+"zusätzliche Schlüsselbünde anzugeben, indem Sie entweder die oben erwähnte "
+"Konfigurationsoption oder die Option --keyring verwenden."
+
+#. type: Plain text
+#: ../scripts/dscverify.1:63
+msgid "Below is an example for an alias:"
+msgstr "Nachfolgend ein Beispiel für einen Alias:"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:65
+msgid "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+msgstr "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+
+#. type: SH
+#: ../scripts/dscverify.1:65
+#, no-wrap
+msgid "STANDARD KEYRING LOCATIONS"
+msgstr "SPEICHERORTE DES STANDARDSCHLÜSSELBUNDS"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:68
+msgid ""
+"By default dscverify searches for the debian-keyring in the following "
+"locations:"
+msgstr ""
+"Standardmäßig sucht Dscverify den Debian-Schlüsselbund an den folgenden "
+"Speicherorten:"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:70
+msgid "- ~/.gnupg/trustedkeys.gpg"
+msgstr "- ~/.gnupg/trustedkeys.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:72
+msgid "- /srv/keyring.debian.org/keyrings/debian-keyring.gpg"
+msgstr "- /srv/keyring.debian.org/keyrings/debian-keyring.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:74
+msgid "- /usr/share/keyrings/debian-keyring.gpg"
+msgstr "- /usr/share/keyrings/debian-keyring.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:76
+msgid "- /usr/share/keyrings/debian-maintainers.gpg"
+msgstr "- /usr/share/keyrings/debian-maintainers.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:78
+msgid "- /usr/share/keyrings/debian-nonupload.gpg"
+msgstr "- /usr/share/keyrings/debian-nonupload.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:82
+msgid "B<gpg>(1), B<gpg2>(1), B<devscripts.conf>(5)"
+msgstr "B<gpg>(1), B<gpg2>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:86
+msgid ""
+"B<dscverify> was written by Roderick Schertler E<lt>roderick@argon.orgE<gt> "
+"and posted on the debian-devel@lists.debian.org mailing list, with several "
+"modifications by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"B<dscverify> wurde von Roderick Schertler E<lt>roderick@argon.orgE<gt> "
+"geschrieben und mit vielen Änderungen von Julian Gilbey E<lt>jdg@debian."
+"orgE<gt> an die Mailingliste debian-devel@lists.debian.org geschickt."
+
+#. type: TH
+#: ../scripts/getbuildlog.1:1
+#, no-wrap
+msgid "GETBUILDLOG"
+msgstr "GETBUILDLOG"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:4
+msgid "getbuildlog - download build logs from Debian auto-builders"
+msgstr ""
+"getbuildlog - lädt Bauprotokolle von den automatischen Debian-"
+"Paketbaumaschinen herunter"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:8
+msgid ""
+"B<getbuildlog> I<package> [I<version-pattern>] [I<architecture-pattern>]"
+msgstr "B<getbuildlog> I<package> [I<Versionsmuster>] [I<Architekturmuster>]"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:17
+msgid ""
+"B<getbuildlog> downloads build logs of I<package> from Debian auto-builders. "
+"It downloads build logs of all versions and for all architectures if "
+"I<version-pattern> and I<architecture-pattern> are not specified or empty, "
+"otherwise only build logs whose versions match I<version-pattern> and build "
+"logs whose architectures match I<architecture-pattern> will be downloaded. "
+"The version and architecture patterns are interpreted as extended regular "
+"expressions as described in B<grep>(1)."
+msgstr ""
+"B<getbuildlog> lädt Bauprotokolle des I<Paket>s von den automatischen Debian-"
+"Paketbaumaschinen herunter. Es lädt Bauprotokolle aller Versionen und für "
+"alle Architekturen, falls I<Versionsmuster> und I<Architekturmuster> nicht "
+"angegeben wurden oder leer sind. Andernfalls werden nur Bauprotokolle "
+"heruntergeladen, deren Versionen zu I<Versionsmuster> passen und "
+"Bauprotokolle, deren Architekturen zu I<Architekturmuster> passen. Die "
+"Versions- und Architekturmuster werden als erweiterte reguläre Ausdrücke, "
+"wie in B<grep>(1) beschrieben, interpretiert."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:21
+msgid ""
+"If I<version-pattern> is \"last\" then only the logs for the most recent "
+"version of I<package> found on buildd.debian.org will be downloaded."
+msgstr ""
+"Falls I<Versionsmuster> »last« ist, dann werden nur die Protokolle der "
+"aktuellsten auf buildd.debian.org gefundenen Version von I<Paket> "
+"heruntergeladen."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:24
+msgid ""
+"If I<version-pattern> is \"last-all\" then the logs for the most recent "
+"version found on each build log index will be downloaded."
+msgstr ""
+"Falls I<Versionsmuster> »last-all« ist, dann werden die Protokolle der "
+"aktuellsten auf jedem Bauprotokollindex gefundenen Version heruntergeladen."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:28
+msgid "Show usage information and examples."
+msgstr "zeigt Aufrufinformationen und Beispiele."
+
+#. type: TP
+#: ../scripts/getbuildlog.1:32
+#, no-wrap
+msgid "getbuildlog hello 2\\e.2-1 amd64"
+msgstr "getbuildlog hello 2\\e.2-1 amd64"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:35
+msgid "Download amd64 build log for hello version 2.2-1."
+msgstr "lädt das AMD64-Bauprotokoll für Hello Version 2.2-1 herunter."
+
+#. type: TP
+#: ../scripts/getbuildlog.1:35
+#, no-wrap
+msgid "getbuildlog glibc \"\" mips.*"
+msgstr "getbuildlog glibc \"\" mips.*"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:38
+msgid "Download mips(el) build logs of all glibc versions."
+msgstr "lädt MIPS(el)-Bauprotokolle aller Glibc-Versionen herunter."
+
+#. type: TP
+#: ../scripts/getbuildlog.1:38
+#, no-wrap
+msgid "getbuildlog wesnoth .*bpo.*"
+msgstr "getbuildlog wesnoth .*bpo.*"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:41
+msgid "Download all build logs of backported wesnoth versions."
+msgstr "lädt alle Bauprotokolle zurückportierter Wesnoth-Versionen herunter."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:42
+msgid "Written by Frank S. Thomas E<lt>fst@debian.orgE<gt>."
+msgstr "geschrieben von Frank S. Thomas E<lt>fst@debian.orgE<gt>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:22
+msgid "git-deborig - try to produce Debian orig.tar using git-archive(1)"
+msgstr ""
+"git-deborig - versucht, mittels git-archive(1) Debians orig.tar zu erstellen."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:26
+#, fuzzy
+#| msgid ""
+#| "B<git deborig> [B<--force>|B<-f>] [B<--just-print>] [B<--"
+#| "version=>I<VERSION>] [I<COMMITTISH>]"
+msgid ""
+"B<git deborig> [B<--force>|B<-f>] [B<--just-print>|B<--just-print-tag-"
+"names>] [B<--version=>I<VERSION>] [I<COMMITTISH>]"
+msgstr ""
+"B<git deborig> [B<--force>|B<-f>] [B<--just-print>] [B<--"
+"version=>I<VERSION>] [I<COMMITTISH>]"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:30
+msgid ""
+"B<git-deborig> tries to produce the orig.tar you need for your upload by "
+"calling git-archive(1) on an existing git tag or branch head. It was "
+"written with the dgit-maint-merge(7) workflow in mind, but can be used with "
+"other workflows."
+msgstr ""
+"B<git-deborig> versucht, das orig.tar, das Sie zum Hochladen benötigen, zu "
+"erstellen, indem es git-archive(1) auf einer bestehenden Git-Markierung oder "
+"Kopf eines Zweiges aufrufen. Es wurde unter Berücksichtigung des "
+"Arbeitsablaufs von dgit-maint-merge(7) geschrieben, kann aber auch mit "
+"anderen Arbeitsabläufen benutzt werden."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:35
+msgid ""
+"B<git-deborig> will try several common tag names. If this fails, or if more "
+"than one of those common tags are present, you can specify the tag or branch "
+"head to archive on the command line (I<COMMITTISH> above)."
+msgstr ""
+"B<git-deborig> wird mehrere geläufige Markierungsnamen durchprobieren. Falls "
+"dies fehlschlägt oder mherere dieser Markierungen vorhanden sind, können Sie "
+"die Markierung oder den Kopf des Zweiges zum Archivieren auf der "
+"Befehlszeile (I<COMMITTISH> oben) angeben."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:39
+msgid ""
+"B<git-deborig> will override gitattributes(5) that would cause the contents "
+"of the tarball generated by git-archive(1) not to be identical with the "
+"commitish archived: the B<export-subst> and B<export-ignore> attributes."
+msgstr ""
+"B<git-deborig> wird gitattributes(5) außer Kraft setzen. letzteres würde "
+"dazu führen, dass der Inhalt des durch git-archive(1) erstellten Tarballs "
+"nicht mit dem archivierten Commitish übereinstimmt: den Attributen B<export-"
+"subst> und B<export-ignore>."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:44
+msgid ""
+"B<git-deborig> should be invoked from the root of the git repository, which "
+"should contain I<debian/changelog>."
+msgstr ""
+"B<git-deborig> sollte von der Wurzel des Git-Depots aufgerufen werden, das "
+"I<debian/changelog> enthalten sollte."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:51
+msgid "B<-f>|B<--force>"
+msgstr "B<-f>|B<--force>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:53
+msgid "Overwrite any existing orig.tar in the parent directory."
+msgstr "überschreibt jede existierende orig.tar im übergeordneten Verzeichnis."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:55
+msgid "B<--just-print>"
+msgstr "B<--just-print>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:57
+msgid ""
+"Instead of actually invoking git-archive(1), output information about how it "
+"would be invoked. Ignores I<--force>."
+msgstr ""
+"gibt, anstatt git-archive(1) tatsächlich aufzurufen, Informationen aus, was "
+"beim Aufruf geschehen würde. Ignoriert I<--force>."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:60
+msgid ""
+"Note that running the git-archive(1) invocation outputted with this option "
+"may not produce the same output. This is because B<git-deborig> takes care "
+"to disables git attributes otherwise heeded by git-archive(1), as detailed "
+"above."
+msgstr ""
+"Beachten Sie, dass das Ausführen von git-archive(1) dessen Aufruf mit dieser "
+"Option ausgegeben wird, möglicherweise nicht dieselbe Ausgabe erzeugt. Dies "
+"liegt daran, dass B<git-deborig> Git-Attribute deaktiviert, die anderenfalls "
+"durch git-archive(1) beherzigt würden, wie oben erklärt."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:65
+msgid "B<--just-print-tag-names>"
+msgstr "B<--just-print-tag-names>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:67
+msgid ""
+"Instead of actually invoking git-archive(1), or even checking which tags "
+"exist, print the tag names we would consider for the upstream version number "
+"in the first entry in the Debian changelog, or that supplied with B<--"
+"version>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/git-deborig.pl:72
+msgid "B<--version=>I<VERSION>"
+msgstr "B<--version=>I<VERSION>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:74
+msgid ""
+"Instead of reading the new upstream version from the first entry in the "
+"Debian changelog, use I<VERSION>."
+msgstr ""
+"benutzt I<VERSION>, statt die Version von den Originalautoren aus dem ersten "
+"Eintrag des Debian-Changelogs zu lesen."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:81
+msgid "git-archive(1), dgit-maint-merge(7), dgit-maint-debrebase(7)"
+msgstr "git-archive(1), dgit-maint-merge(7), dgit-maint-debrebase(7)"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:85
+msgid "B<git-deborig> was written by Sean Whitton <spwhitton@spwhitton.name>."
+msgstr ""
+"B<git-deborig> wurde von Sean Whitton <spwhitton@spwhitton.name> geschrieben."
+
+#. type: TH
+#: ../scripts/grep-excuses.1:1
+#, no-wrap
+msgid "GREP-EXCUSES"
+msgstr "GREP-EXCUSES"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:4
+msgid ""
+"grep-excuses - search the testing excuses files for a specific maintainer"
+msgstr ""
+"grep-excuses - durchsucht die Testing-Excuses-Dateien nach einem bestimmten "
+"Betreuer"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:6
+msgid "B<grep-excuses> [I<options>] [I<maintainer>|I<package>]"
+msgstr "B<grep-excuses> [I<Optionen>] [I<Betreuer>|I<Paket>]"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:14
+msgid ""
+"B<grep-excuses> downloads the autoremovals and update_excuses.html files and "
+"greps them for the specified maintainer or package name. The B<wget> "
+"package is required for this script. If no name is given on the command "
+"line, first the environment variable B<DEBFULLNAME> is used if it is "
+"defined, and failing that, the configuration variable described below is "
+"used."
+msgstr ""
+"B<grep-excuses> lädt die Dateien »autoremovals« und »update_excuses.html« "
+"herunter und durchsucht sie nach dem angegebenen Betreuer oder Paketnamen. "
+"Für dieses Skript wird das Paket B<wget> benötigt. Falls auf der "
+"Befehlszeile kein Name angegeben wurde, wird zuerst die Umgebungsvariable "
+"B<DEBFULLNAME> benutzt, falls sie definiert ist. Schlägt dies fehl, wird die "
+"Konfigurationsvariable wie nachfolgend beschrieben benutzt."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:19
+#, no-wrap
+msgid "B<--wipnity>, B<-w>"
+msgstr "B<--wipnity>, B<-w>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:23
+#, fuzzy
+#| msgid ""
+#| "Get information from E<lt>https://qa.debian.org/excuses.phpE<gt>. A "
+#| "package name must be given when using this option."
+msgid ""
+"Get information from E<lt>https://qa.debian.org/excuses.phpE<gt>. One or "
+"more package names must be given when using this option."
+msgstr ""
+"bezieht Informationen von E<lt>https://qa.debian.org/excuses.phpE<gt>. Wenn "
+"diese Option benutzt wird, muss ein Paketname angegeben werden."
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:26 ../scripts/whodepends.1:14
+msgid "Show a brief usage message."
+msgstr "zeigt eine kurze Aufrufnachricht."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:29
+#, no-wrap
+msgid "B<--autopkgtests>"
+msgstr "B<--autopkgtests>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:37
+msgid ""
+"Investigate and show autopkgtest (ci.debian.net) failures in your packages "
+"but apparently caused by new versions of other packages trying to migrate. "
+"(B<--no-autopkgtests> can be used to override GREP_EXCUSES_AUTOPKGTESTS.)"
+msgstr ""
+"untersucht und zeigt das Versagen von autopkgtest (ci.debian.net) in Ihren "
+"Paketen, die aber durch neue Versionen anderer Pakete beim Versuch zu "
+"migirieren verursacht wurden. (B<--no-autopkgtests> benutzt werden, um "
+"GREP_EXCUSES_AUTOPKGTESTS außer Kraft zu setzen."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:37
+#, no-wrap
+msgid "B<--no-autoremovals>"
+msgstr "B<--no-autoremovals>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:40
+msgid ""
+"Investigate and show only testing propagation excuses, not autoremovals."
+msgstr ""
+"durchsucht und zeigt nur die Testing-Verbreitungs-Excuses, keine "
+"Autoremovals."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:40
+#, no-wrap
+msgid "B<--experimental>, B<-e>"
+msgstr "B<--experimental>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:43
+msgid ""
+"Print pseudo-excuses for manual migration from experimental to unstable."
+msgstr ""
+
+#. type: =item
+#: ../scripts/grep-excuses.1:43 ../scripts/hardening-check.pl:647
+#: ../scripts/salsa.pl:487
+#, no-wrap
+msgid "B<--debug>"
+msgstr "B<--debug>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:46
+msgid "Print debugging output to stderr (including url(s) fetched)."
+msgstr ""
+"gibt Fehlersuchausgaben (einschließlich abgeholter URLs) auf der "
+"Standardfehlerausgabe aus."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:52
+#, no-wrap
+msgid "B<GREP_EXCUSES_MAINTAINER>"
+msgstr "B<GREP_EXCUSES_MAINTAINER>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:56
+msgid ""
+"The default maintainer, email or package to grep for if none is specified on "
+"the command line."
+msgstr ""
+"der Standardbetreuer, die E-Mail oder das Paket, nach dem gesucht werden "
+"soll, falls keines auf der Befehlszeile angegeben wurde"
+
+#. type: TP
+#: ../scripts/grep-excuses.1:56
+#, no-wrap
+msgid "B<GREP_EXCUSES_AUTOPKGTESTS>"
+msgstr "B<GREP_EXCUSES_AUTOPKGTESTS>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:61
+msgid ""
+"Boolean: whether to show autopkgtest failures in other packages. See B<--"
+"autopkgtests>."
+msgstr ""
+"boolesch: ob autopkgtest-Versagen in anderen Paketen angezeigt wird. Siehe "
+"B<--autopkgtests>."
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:63 ../scripts/plotchangelog.1:126
+msgid "B<devscripts.conf>(5)"
+msgstr "B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:65
+msgid ""
+"Joey Hess E<lt>joeyh@debian.orgE<gt>; modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Joey Hess E<lt>joeyh@debian.orgE<gt>; Änderungen durch Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:523
+msgid "hardening-check - check binaries for security hardening features"
+msgstr ""
+"hardening-check - prüft Binärdateien auf Sicherheitshärtungsfunktionalitäten"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:527
+msgid "hardening-check [options] [ELF ...]"
+msgstr "hardening-check [Optionen] [ELF …]"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:529
+msgid ""
+"Examine a given set of ELF binaries and check for several security hardening "
+"features, failing if they are not all found."
+msgstr ""
+"untersucht einen angegebenen Satz von ELF-Binärdateien und prüft auf mehrere "
+"Sicherheitshärtungsfunktionalitäten. Das Programm schlägt fehl, wenn sie "
+"nicht alle gefunden werden."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:534
+msgid ""
+"This utility checks a given list of ELF binaries for several security "
+"hardening features that can be compiled into an executable. These features "
+"are:"
+msgstr ""
+"Dieses Hilfswerkzeug prüft eine angegebene Liste von ELF-Binärdateien auf "
+"mehrere Sicherheitshärtungsfunktionalitäten, die in ein ausführbares "
+"Programm einkompiliert werden können. Diese Funktionalitäten sind:"
+
+#. type: =item
+#: ../scripts/hardening-check.pl:540
+msgid "B<Position Independent Executable>"
+msgstr "B<Positionsunabhängiges Programm>"
+
+# https://de.wikipedia.org/wiki/Position-independent_Code
+#. type: textblock
+#: ../scripts/hardening-check.pl:542
+msgid ""
+"This indicates that the executable was built in such a way (PIE) that the "
+"\"text\" section of the program can be relocated in memory. To take full "
+"advantage of this feature, the executing kernel must support text Address "
+"Space Layout Randomization (ASLR)."
+msgstr ""
+"Dies zeigt an, dass das Programm so gebaut wurde (PIE), dass der Abschnitt "
+"»text« des Programms nicht im Speicher an andere Stelle geschoben werden "
+"kann. Um die Vorteile dieser Funktionalität vollständig zu erlangen, muss "
+"der ausführende Kernel Address Space Layout Randomization (ASLR, "
+"Adressverwürfelung) unterstützen."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:547
+msgid "B<Stack Protected>"
+msgstr "B<Geschützter Stapelverarbeitungsspeicher>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:549
+msgid ""
+"This indicates that there is evidence that the ELF was compiled with the "
+"L<gcc(1)> option B<-fstack-protector> (e.g. uses B<__stack_chk_fail>). The "
+"program will be resistant to having its stack overflowed."
+msgstr ""
+"Dies zeigt an, dass es Anzeichen gibt, dass das ELF mit der L<gcc(1)>-Option "
+"B<-fstack-protector> kompiliert wurde (benutzt z.B. B<__stack_chk_fail>). "
+"Das Programm wird widerstandsfähig gegen "
+"Stapelverarbeitungsspeicherüberläufe sein."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:553
+msgid ""
+"When an executable was built without any character arrays being allocated on "
+"the stack, this check will lead to false alarms (since there is no use of "
+"B<__stack_chk_fail>), even though it was compiled with the correct options."
+msgstr ""
+"Wenn ein Programm gebaut wurde ohne dass irgendwelche Zeichenkettenfelder "
+"auf dem Stapelverarbeitungsspeicher reserviert wurden, wird diese Prüfung zu "
+"Fehlalarmen führen (da dort B<__stack_chk_fail> nicht benutzt wird), obwohl "
+"es mit korrekten Optionen kompiliert wurde."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:558
+msgid "B<Fortify Source functions>"
+msgstr "B<Quellfunktionen verstärken>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:560
+msgid ""
+"This indicates that the executable was compiled with B<-D_FORTIFY_SOURCE=2> "
+"and B<-O1> or higher. This causes certain unsafe glibc functions with their "
+"safer counterparts (e.g. B<strncpy> instead of B<strcpy>), or replaces calls "
+"that are verifiable at runtime with the runtime-check version (e.g. "
+"B<__memcpy_chk> insteade of B<memcpy>)."
+msgstr ""
+"Dies zeigt an, dass das Programm mit B<-D_FORTIFY_SOURCE=2> und B<-O1> oder "
+"höher kompiliert wurde. Dies sorgt dafür, dass bestimmte unsichere Glibc-"
+"Funktionen durch ihre sicheren Gegenstücke (z.B. B<strncpy> statt B<strcpy>) "
+"oder Aufrufe, die zur Laufzeit überprüfbar sind, durch die zur Laufzeit "
+"prüfende Version (z.B. B<__memcpy_chk> statt B<memcpy>) ersetzt werden."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:566
+msgid ""
+"When an executable was built such that the fortified versions of the glibc "
+"functions are not useful (e.g. use is verified as safe at compile time, or "
+"use cannot be verified at runtime), this check will lead to false alarms. "
+"In an effort to mitigate this, the check will pass if any fortified function "
+"is found, and will fail if only unfortified functions are found. Uncheckable "
+"conditions also pass (e.g. no functions that could be fortified are found, "
+"or not linked against glibc)."
+msgstr ""
+"Wenn ein Programm so gebaut wird, dass die verstärkten Versionen der Glibc-"
+"Funktionen nicht nützlich sind (z.B. Benutzung wird zu Kompilierungszeit als "
+"sicher befunden oder die Benutzung kann nicht zur Laufzeit überprüft "
+"werden), wird diese Prüfung zu Fehlalarmen führen. Im Versuch, dies zu "
+"mildern, wird die Prüfung positiv abgeschlossen, falls eine verstärkte "
+"Funktion gefunden wird und fehlschlagen, falls nur unverstärkte Funktionen "
+"gefunden werden. Unprüfbare Bedingungen führen auch zu positiven Ergebnissen "
+"(z.B. es werden keine verstärkten Funktionen gefunden oder sie sind nicht "
+"gegen Glibc gelinkt)."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:574
+msgid "B<Read-only relocations>"
+msgstr "B<Nur lesende Verlagerungen>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:576
+msgid ""
+"This indicates that the executable was build with B<-Wl,-z,relro> to have "
+"ELF markings (RELRO) that ask the runtime linker to mark any regions of the "
+"relocation table as \"read-only\" if they were resolved before execution "
+"begins. This reduces the possible areas of memory in a program that can be "
+"used by an attacker that performs a successful memory corruption exploit."
+msgstr ""
+"Dies zeigt an, dass das Programm mit B<-Wl,-z,relro> gebaut wurde, um ELF-"
+"Kennzeichen (RELRO) zu haben, die vom Laufzeit-Linker verlangen, dass er "
+"einige Bereiche der Verlagerungstabelle als »nur lesbar« kennzeichnet, falls "
+"sie aufgelöst waren, bevor die Verarbeitung begann. Dies vermindert die "
+"möglichen Speicherbereiche in einem Programm, die von einem Angreifer "
+"benutzt werden können, der mit einem Exploit erfolgreich Speicherinhalt "
+"verfälscht."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:583
+msgid "B<Immediate binding>"
+msgstr "B<Sofortanbindung>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:585
+msgid ""
+"This indicates that the executable was built with B<-Wl,-z,now> to have ELF "
+"markings (BIND_NOW) that ask the runtime linker to resolve all relocations "
+"before starting program execution. When combined with RELRO above, this "
+"further reduces the regions of memory available to memory corruption attacks."
+msgstr ""
+"Dies zeigt an, dass das Programm mit B<-Wl,-z,now> gebaut wurde, um ELF-"
+"Kennzeichen (BIND_NOW) zu haben, die vom Laufzeit-Linker verlangen, dass er "
+"alle Verlagerungen auflöst, bevor die Programmausführung beginnt. Wenn es "
+"mit obigem RELRO kombiniert wurde, vermindert dies weitere Bereiche des "
+"Speichers, die für Angriffe, die dessen Inhalt verfälschen, zur Verfügung "
+"stehen."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:597
+msgid "B<--nopie>, B<-p>"
+msgstr "B<--nopie>, B<-p>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:599
+msgid "Do not require that the checked binaries be built as PIE."
+msgstr ""
+"erfordert nicht, dass die geprüften Binärdateien als PIE gebaut wurden."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:601
+msgid "B<--nostackprotector>, B<-s>"
+msgstr "B<--nostackprotector>, B<-s>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:603
+msgid ""
+"Do not require that the checked binaries be built with the stack protector."
+msgstr ""
+"erfordert nicht, dass die geprüften Binärdateien mit "
+"Stapelverarbeitungsschutz gebaut werden."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:605
+msgid "B<--nofortify>, B<-f>"
+msgstr "B<--nofortify>, B<-f>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:607
+msgid "Do not require that the checked binaries be built with Fortify Source."
+msgstr ""
+"erfordert nicht, dass die geprüften Binärdateien mit Fortify Source gebaut "
+"werden."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:609
+msgid "B<--norelro>, B<-r>"
+msgstr "B<--norelro>, B<-r>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:611
+msgid "Do not require that the checked binaries be built with RELRO."
+msgstr ""
+"erfordert nicht, dass die geprüften Binärdateien mit RELRO gebaut werden."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:613
+msgid "B<--nobindnow>, B<-b>"
+msgstr "B<--nobindnow>, B<-b>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:615
+msgid "Do not require that the checked binaries be built with BIND_NOW."
+msgstr ""
+"erfordert nicht, dass die geprüften Binärdateien mit BIND_NOW gebaut werden."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:617
+msgid "B<--nocfprotection>, B<-b>"
+msgstr "B<--nocfprotection>, B<-b>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:619
+#, fuzzy
+#| msgid ""
+#| "Do not require that the checked binaries be built with the stack "
+#| "protector."
+msgid ""
+"Do not require that the checked binaries be built with control flow "
+"protection."
+msgstr ""
+"erfordert nicht, dass die geprüften Binärdateien mit "
+"Stapelverarbeitungsschutz gebaut werden."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:623
+msgid "Only report failures."
+msgstr "meldet nur Fehlschläge."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:625 ../scripts/uscan.pl:1567
+msgid "B<--verbose>, B<-v>"
+msgstr "B<--verbose>, B<-v>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:627
+msgid "Report verbosely on failures."
+msgstr "meldet Fehlschläge detailliert."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:629
+msgid "B<--report-functions>, B<-R>"
+msgstr "B<--report-functions>, B<-R>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:631
+msgid "After the report, display all external functions needed by the ELF."
+msgstr ""
+"zeigt nach dem Bericht alle externen Funktionen, die vom ELF benötigt werden."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:633
+msgid "B<--find-libc-functions>, B<-F>"
+msgstr "B<--find-libc-functions>, B<-F>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:635
+msgid ""
+"Instead of the regular report, locate the libc for the first ELF on the "
+"command line and report all the known \"fortified\" functions exported by "
+"libc."
+msgstr ""
+"statt des normalen Berichts wird die Libc für das erste ELF auf der "
+"Befehlszeile geortet und alle bekannten »verstärkten« Funktionen, die von "
+"der Libc exportiert werden, gemeldet."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:639
+msgid "B<--color>, B<-c>"
+msgstr "B<--color>, B<-c>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:641
+msgid "Enable colorized status output."
+msgstr "aktiviert eingefärbte Statusausgabe."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:643
+msgid "B<--lintian>, B<-l>"
+msgstr "B<--lintian>, B<-l>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:645
+msgid "Switch reporting to lintian-check-parsable output."
+msgstr ""
+"schaltet das Berichten auf »lintian-check-parsable«-Ausgabe (durch Lintian "
+"auswertbare Ausgabe)."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:649
+msgid "Report some debugging during processing."
+msgstr "meldet während des Ausführung einige Fehlersuchausgaben."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:651
+msgid "B<--help>, B<-h>, B<-?>"
+msgstr "B<--help>, B<-h>, B<-?>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:653
+msgid "Print a brief help message and exit."
+msgstr "gibt eine kurze Hilfenachricht aus und wird beendet."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:655
+msgid "B<--man>, B<-H>"
+msgstr "B<--man>, B<-H>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:657
+msgid "Print the manual page and exit."
+msgstr "gibt die Handbuchseite aus und beendet sich."
+
+#. type: =head1
+#: ../scripts/hardening-check.pl:661
+msgid "RETURN VALUE"
+msgstr "RÜCKGABEWERT"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:663
+msgid ""
+"When all checked binaries have all checkable hardening features detected, "
+"this program will finish with an exit code of 0. If any check fails, the "
+"exit code with be 1. Individual checks can be disabled via command line "
+"options."
+msgstr ""
+"Wenn in allen geprüften Programmen alle Härtungsfunktionalitäten entdeckt "
+"wurden, wird dieses Programm mit einem Exit-Code von 0 beendet. Falls "
+"irgendeine Prüfung fehlschlägt, wird der Exit-Code 1 sein. Individuelle "
+"Prüfungen können über Befehlszeilenoptionen deaktiviert werden."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:670
+msgid "Kees Cook <kees@debian.org>"
+msgstr "Kees Cook <kees@debian.org>"
+
+#. type: =head1
+#: ../scripts/hardening-check.pl:672 ../scripts/salsa.pl:1037
+msgid "COPYRIGHT AND LICENSE"
+msgstr "COPYRIGHT UND LIZENZ"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:674
+msgid "Copyright 2009-2013 Kees Cook <kees@debian.org>."
+msgstr "Copyright 2009-2013 Kees Cook <kees@debian.org>."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:676
+msgid ""
+"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; version 2 or later."
+msgstr ""
+"Dieses Programm ist freie Software; Sie können es unter den Bedingungen der "
+"GNU General Public License, Version 2 oder neuer, wie sie von der Free "
+"Software Foundation veröffentlicht wurde, weitergeben und/oder ändern."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:682
+msgid "L<gcc(1)>, L<hardening-wrapper(1)>"
+msgstr "L<gcc(1)>, L<hardening-wrapper(1)>"
+
+#. type: TH
+#: ../scripts/list-unreleased.1:1
+#, no-wrap
+msgid "LIST-UNRELEASED"
+msgstr "LIST-UNRELEASED"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:4
+msgid "list-unreleased - display UNRELEASED packages"
+msgstr "list-unreleased - zeigt Pakete, die UNRELEASED sind"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:6
+msgid "B<list-unreleased> [I<arg> ...] [I<path> ...]"
+msgstr "B<list-unreleased> [I<Arg> …] [I<Pfad> …]"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:9
+msgid ""
+"Searches for packages whose changelogs indicate there are pending changes "
+"(UNRELEASED) and either lists them or displays the relevant changelog entry."
+msgstr ""
+"sucht nach Paketen, deren Changelogs angeben, dass Änderungen anstehen "
+"(UNRELEASED) und listet sie entweder auf oder zeigt den maßgeblichen "
+"Changelog-Eintrag."
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:12
+msgid ""
+"By default it searches for packages under the current directory. If a path "
+"is specified it will look for packages under that directory instead."
+msgstr ""
+"Standardmäßig sucht es nach Paketen unterhalb des aktuellen Verzeichnisses. "
+"Falls ein Pfad angegeben wurde, wird es stattdessen nach Paketen unterhalb "
+"dieses Verzeichnisses suchen."
+
+#. type: TP
+#: ../scripts/list-unreleased.1:13
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:16
+msgid "Display pending changes."
+msgstr "zeigt ausstehende Änderungen."
+
+#. type: TP
+#: ../scripts/list-unreleased.1:16
+#, no-wrap
+msgid "B<-R>"
+msgstr "B<-R>"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:19
+msgid "Don't recurse into subdirectories looking for packages."
+msgstr "sucht nicht rekursiv in Unterverzeichnissen nach Paketen."
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:23
+msgid ""
+"B<list-unreleased> was written by Frans Pop E<lt>elendil@planet.nlE<gt>. "
+"This manual page was written by Joey Hess E<lt>joeyh@debian.orgE<gt>."
+msgstr ""
+"B<list-unreleased> wurde von Frans Pop E<lt>elendil@planet.nlE<gt> "
+"geschrieben. Diese Handbuchseite wurde von Joey Hess E<lt>joeyh@debian."
+"orgE<gt> verfasst."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:3
+msgid "ltnu - lists packages of a maintainer ordered by last upload"
+msgstr ""
+"ltnu - führt Pakete eines Betreuers auf, sortiert nach dem letzten Hochladen."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:7
+msgid "B<env> DEBEMAIL=I<maintainer> B<ltnu> [-m]"
+msgstr "B<env> DEBEMAIL=I<Paketbetreuer> B<ltnu> [-m]"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:9
+msgid "B<ltnu> [-m] I<maintainer>"
+msgstr "B<ltnu> [-m] I<Paketbetreuer>"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:11
+msgid "B<ltnu> --help"
+msgstr "B<ltnu> --help"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:15
+msgid ""
+"B<ltnu> (Long Time No Upload) queries the public mirror of the Ultimate "
+"Debian Database (udd-mirror.debian.net) for all uploads of packages by the "
+"given uploader or maintainer and displays them ordered by the last upload of "
+"that package to Debian Unstable, oldest uploads first."
+msgstr ""
+"B<ltnu> (Long Time No Upload, Lange Zeit nichts hochgeladen) fragt die "
+"öffentlichen Spiegelserver der Ultimate Debian Database (udd-mirror.debian."
+"net) nach jedem Hochladen von Paketen durch den angegebenen Hochladenden "
+"oder Paketbetreuer ab und zeigt sie sortiert nach dem letzten Hochladen "
+"dieses Pakets nach Debian Unstable an, das älteste Hochladen zuerst."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:21
+msgid ""
+"Its primary purpose is to check which of your own or your team's packages "
+"haven't been uploaded for a long time and likely need a packaging revamp. "
+"It's less suitable for MIA team purposes as it doesn't make a difference "
+"with regards to who actually uploaded a package."
+msgstr ""
+"Sein vorrangiger Zweck besteht darin, zu prüfen, welches Ihrer eigenen "
+"Pakete oder der Ihres Teams schon seit längerem nicht mehr hochgeladen "
+"wurden und vermutlich erneuert werden muss. Es ist weniger für die Zwecke "
+"des Vermissten-Teams (MIA) geeignet, da es nicht unterschiedet, wer ein "
+"Paket tatsächlich hochlädt."
+
+#. type: =item
+#: ../scripts/ltnu.pod:31
+msgid "-m"
+msgstr "-m"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:33
+msgid "Only search in the Maintainer field and ignore the Uploaders field."
+msgstr "sucht nur im Feld »Maintainer« und ignoriert das Feld Uploader."
+
+#. type: =head1
+#: ../scripts/ltnu.pod:37
+msgid "PARAMETERS"
+msgstr "PARAMETER"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:39
+msgid ""
+"The maintainer/uploader to query can be given either by setting C<$DEBEMAIL> "
+"as environment variable or as single commandline parameter."
+msgstr ""
+"Der abzufragende Paketbetreuer/Hochladende kann entweder über die "
+"Einstellung C<$DEBEMAIL> als Umgebungsvariable oder als einzelner "
+"Befehlszeilenparameter angegeben werden."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:42
+msgid ""
+"If a commandline parameter does not contain an C<@>, C<@debian.org> is "
+"appended, e.g. C<ltnu abe> queries for C<abe@debian.org>."
+msgstr ""
+"Falls ein Befehlszeilenparameter kein C<@> enthält, wird C<@debian.org> "
+"angehängt, z.B. C<ltnu abe>-Abfragen für C<abe@debian.org>."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:45
+msgid ""
+"Exceptions are some shortcuts for common, long e-mail addresses. So far "
+"implemented shortcuts:"
+msgstr ""
+"Ausnahmen sind einige Abkürzungen für üblich lange E-Mail-Adressen. Bisher "
+"implementierte Abkürzungen:"
+
+#. type: =item
+#: ../scripts/ltnu.pod:50
+msgid "pkg-gnustep"
+msgstr "pkg-gnustep"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:52
+msgid "pkg-gnustep-maintainers@lists.alioth.debian.org"
+msgstr "pkg-gnustep-maintainers@lists.alioth.debian.org"
+
+#. type: =item
+#: ../scripts/ltnu.pod:54
+msgid "pkg-perl"
+msgstr "pkg-perl"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:56
+msgid "pkg-perl-maintainers@lists.alioth.debian.org"
+msgstr "pkg-perl-maintainers@lists.alioth.debian.org"
+
+#. type: =item
+#: ../scripts/ltnu.pod:58
+msgid "pkg-zsh"
+msgstr "pkg-zsh"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:60
+msgid "pkg-zsh-devel@lists.alioth.debian.org"
+msgstr "pkg-zsh-devel@lists.alioth.debian.org"
+
+#. type: =item
+#: ../scripts/ltnu.pod:62
+msgid "qa"
+msgstr "qa"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:64
+msgid "packages@qa.debian.org"
+msgstr "packages@qa.debian.org"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:70
+msgid "The following environment variables are honoured:"
+msgstr "Die folgenden Umgebungsvariablen werden berücksichtigt:"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:76
+msgid "Used for querying if no parameter is given."
+msgstr "Wird zum Abfragen benutzt, wenn kein Parameter angegeben wurde."
+
+#. type: =item
+#: ../scripts/ltnu.pod:78
+msgid "PAGER"
+msgstr "TEXTANZEIGEPROGRAMM"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:80
+msgid "Used by B<psql> as pager."
+msgstr "wird durch B<psql> als Textanzeigeprogramm benutzt."
+
+#. type: verbatim
+#: ../scripts/ltnu.pod:86
+#, no-wrap
+msgid ""
+" $ ltnu pkg-zsh\n"
+" source | ver | uploaded\n"
+" -------------------------+--------------+------------------------\n"
+" zgen | 0~20150919-3 | 2016-08-24 04:55:31+00\n"
+" zplug | 2.4.1-1 | 2017-01-13 09:51:26+00\n"
+" zsh-syntax-highlighting | 0.6.0-1 | 2017-08-30 09:06:26+00\n"
+" zsh | 5.4.2-2 | 2017-11-02 20:56:55+00\n"
+" (4 rows)\n"
+"\n"
+msgstr ""
+" $ ltnu pkg-zsh\n"
+" source | ver | uploaded\n"
+" -------------------------+--------------+------------------------\n"
+" zgen | 0~20150919-3 | 2016-08-24 04:55:31+00\n"
+" zplug | 2.4.1-1 | 2017-01-13 09:51:26+00\n"
+" zsh-syntax-highlighting | 0.6.0-1 | 2017-08-30 09:06:26+00\n"
+" zsh | 5.4.2-2 | 2017-11-02 20:56:55+00\n"
+" (4 rows)\n"
+"\n"
+
+#. type: =head1
+#: ../scripts/ltnu.pod:95
+msgid "DEPENDENCIES"
+msgstr "ABHÄNGIGKEITEN"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:97
+msgid ""
+"B<ltnu> uses the PostgreSQL client command B<psql> and hence needs Debian's "
+"B<postgresql-client> package to be installed."
+msgstr ""
+"B<ltnu> verwendet den PostgreSQL-Client-Befehl B<psql>. Daher muss Debians "
+"Paket B<postgresql-client> installiert sein."
+
+#. type: =head1
+#: ../scripts/ltnu.pod:100
+msgid "AUTHOR, COPYRIGHT, LICENSE"
+msgstr "AUTOR, COPYRIGHT, LIZENZ"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:102
+msgid ""
+"Copyright 2017 Axel Beckert <abe@debian.org>. Licensed under the GNU General "
+"Public License, version 2 or later."
+msgstr ""
+"Copyright 2017 Axel Beckert <abe@debian.org>. Lizensiert unter der GNU "
+"General Public License, Version 2 oder neuer."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:107
+msgid ""
+"L<https://udd-mirror.debian.net/>, L<https://udd.debian.org/>, L<https://"
+"wiki.debian.org/UltimateDebianDatabase>"
+msgstr ""
+"L<https://udd-mirror.debian.net/>, L<https://udd.debian.org/>, L<https://"
+"wiki.debian.org/UltimateDebianDatabase>"
+
+#. type: TH
+#: ../scripts/manpage-alert.1:1
+#, no-wrap
+msgid "MANPAGE-ALERT"
+msgstr "MANPAGE-ALERT"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:4
+msgid "manpage-alert - check for binaries without corresponding manpages"
+msgstr "manpage-alert - sucht nach Programmen ohne zugehörige Handbuchseiten"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:6
+msgid "B<manpage-alert> [I<options>] [I<paths>]"
+msgstr "B<manpage-alert> [I<Optionen>] [I<Pfade>]"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:9
+msgid ""
+"B<manpage-alert> searches the given list of paths for binaries without "
+"corresponding manpages."
+msgstr ""
+"B<manpage-alert> durchsucht die angegebene Pfadliste nach Programmen ohne "
+"zugehörige Handbuchseiten."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:12
+msgid ""
+"If no I<paths> are specified on the command line, the path list I</bin /"
+"sbin /usr/bin /usr/sbin /usr/games> will be assumed."
+msgstr ""
+"Falls keine I<Pfade> auf der Befehlszeile angegeben wurden, wird die "
+"Pfadliste I</bin /sbin /usr/bin /usr/sbin /usr/games> verwendet."
+
+#. type: TP
+#: ../scripts/manpage-alert.1:13
+#, no-wrap
+msgid "B<-h>,B<--help>"
+msgstr "B<-h>,B<--help>"
+
+#. type: TP
+#: ../scripts/manpage-alert.1:16
+#, no-wrap
+msgid "B<-V>,B<--version>"
+msgstr "B<-V>,B<--version>"
+
+#. type: TP
+#: ../scripts/manpage-alert.1:19
+#, no-wrap
+msgid "B<-f>,B<--file>"
+msgstr "B<-f>,B<--file>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:22
+msgid "Show filenames of missing manpages without any leading text."
+msgstr ""
+"zeigt Dateinamen fehlender Handbuchseiten ohne jeglichen Einleitungstext."
+
+#. type: TP
+#: ../scripts/manpage-alert.1:22
+#, no-wrap
+msgid "B<-p>,B<--package>"
+msgstr "B<-p>,B<--package>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:25
+msgid "Show filenames of missing manpages with their package name."
+msgstr "zeigt Dateinamen fehlender Handbuchseiten mit ihrem Paketnamen."
+
+#. type: TP
+#: ../scripts/manpage-alert.1:25
+#, no-wrap
+msgid "B<-n>,B<--no-stat>"
+msgstr "B<-n>,B<--no-stat>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:28
+msgid "Do not show statistics at the end."
+msgstr "zeigt am Ende keine Statistiken."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:33
+msgid ""
+"B<manpage-alert> was written by Branden Robinson and modified by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt> and Adam D. Barratt E<lt>debian-bts@adam-"
+"barratt.org.ukE<gt> (who also wrote this manpage) for the devscripts package."
+msgstr ""
+"B<manpage-alert> wurde von Branden Robinson geschrieben und durch Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt> sowie Adam D. Barratt E<lt>debian-bts@adam-"
+"barratt.org.ukE<gt> (der auch diese Handbuchseite verfasste) für das Paket "
+"Devscripts angepasst."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:35
+msgid ""
+"This manpage and the associated program are licensed under the terms of the "
+"GPL, version 2 or later."
+msgstr ""
+"Diese Handbuchseite und das zugehörige Programm sind unter den Bedingungen "
+"der GPL, Version 2 oder später, lizensiert."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:23
+msgid "mass-bug - mass-file a bug report against a list of packages"
+msgstr ""
+"mass-bug - reicht einen Massenfehlerbericht gegen eine Liste von Paketen ein"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:27
+msgid ""
+"B<mass-bug> [I<options>] B<--subject=\">I<bug subject>B<\"> I<template "
+"package-list>"
+msgstr ""
+"B<mass-bug> [I<Optionen>] B<--subject=\">I<Betreff des Fehlerberichts>B<\"> "
+"I<Schablonenpaketliste>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:31
+msgid ""
+"mass-bug assists in filing a mass bug report in the Debian BTS on a set of "
+"packages. For each package in the package-list file (which should list one "
+"package per line together with an optional version number separated from the "
+"package name by an underscore), it fills out the template, adds BTS pseudo-"
+"headers, and either displays or sends the bug report."
+msgstr ""
+"Mass-bug hilft bei der Masseneinreichung von Fehlerberichten in der Debian-"
+"Fehlerdatenbank gegen eine Gruppe von Paketen. Für jedes Paket in der "
+"Paketliste (die ein Paket pro Zeile mit einer optionalen Versionsnummer, die "
+"per Unterstrich vom Paketnamen getrennt ist, aufführen sollte), füllt es die "
+"Schablone aus, fügt Pseudokopfzeilen der Fehlerdatenbank hinzu und zeigt "
+"entweder den Fehlerbericht an oder versendet ihn."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:37
+msgid ""
+"Warning: Some care has been taken to avoid unpleasant and common mistakes, "
+"but this is still a power tool that can generate massive amounts of bug "
+"report mails. Use it with care, and read the documentation in the "
+"Developer's Reference about mass filing of bug reports first."
+msgstr ""
+"Warnung: Es wurde darauf geachtet, unangenehme und häufige Fehler zu "
+"vermeiden, aber dies ist immer noch ein Werkzeug für Fortgeschrittene, das "
+"massenhaft E-Mails mit Fehlerberichten erzeugen kann. Benutzen Sie es mit "
+"Vorsicht und lesen Sie zuerst die Dokumentation in der Debian-Entwickler-"
+"Referenz über die Masseneinreichung von Fehlern."
+
+#. type: =head1
+#: ../scripts/mass-bug.pl:42
+msgid "TEMPLATE"
+msgstr "SCHABLONE"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:44
+msgid ""
+"The template file is the body of the message that will be sent for each bug "
+"report, excluding the BTS pseudo-headers. In the template, #PACKAGE# is "
+"replaced with the name of the package. If a version was specified for the "
+"package, #VERSION# will be replaced by that version."
+msgstr ""
+"Die Schablonendatei ist der Rumpf der Nachricht, die an jeden Fehlerbericht "
+"gesandt wird, ausgenommen der Pseudokopfzeilen der Fehlerdatenbank. In der "
+"Schablone wird #PACKAGE# durch den Namen des Pakets ersetzt. Falls eine "
+"Version für das Paket angegeben wurde, wird #VERSION# durch diese Version "
+"ersetzt."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:49
+msgid ""
+"The components of the version number may be specified using #EPOCH#, "
+"#UPSTREAM_VERSION# and #REVISION#. #EPOCH# includes the trailing colon and "
+"#REVISION# the leading dash so that #EPOCH#UPSTREAM_VERSION##REVISION# is "
+"always the same as #VERSION#."
+msgstr ""
+"Die Bestandteile der Versionsnummer können mittels #EPOCH#, "
+"#UPSTREAM_VERSION# und #REVISION# angegeben werden. #EPOCH# beinhaltet den "
+"Doppelpunkt am Ende und #REVISION# den führenden Bindestrich, so dass "
+"#EPOCH#UPSTREAM_VERSION##REVISION# immer dasselbe wie #VERSION# ist."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:54
+msgid ""
+"Note that text in the template will be automatically word-wrapped to 70 "
+"columns, up to the start of a signature (indicated by S<'-- '> at the start "
+"of a line on its own). This is another reason to avoid including BTS pseudo-"
+"headers in your template."
+msgstr ""
+"Beachten Sie, dass Text in der Schablone bei 70 Zeichen umgebrochen wird bis "
+"zum Anfang einer Signatur (also bis zu einer Zeile, die genau S<'-- '> "
+"alleine am Anfang der Zeile enthält). Dies ist ein weiterer Grund, das "
+"Einschließen von Pseudokopfzeilen der Fehlerdatenbank in Ihre Schablone zu "
+"vermeiden."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:61
+msgid ""
+"B<mass-bug> examines the B<devscripts> configuration files as described "
+"below. Command line options override the configuration file settings, "
+"though."
+msgstr ""
+"B<mass-bug> untersucht die B<devscripts>-Konfigurationsdateien wie "
+"nachfolgend beschrieben. Befehlszeilenoptionen setzen jedoch die "
+"Einstellungen von Konfigurationsdateien außer Kraft."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:67
+msgid ""
+"B<--severity=>(B<wishlist>|B<minor>|B<normal>|B<important>|B<serious>|"
+"B<grave>|B<critical>)"
+msgstr ""
+"B<--severity=>(B<wishlist>|B<minor>|B<normal>|B<important>|B<serious>|"
+"B<grave>|B<critical>)"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:69
+msgid ""
+"Specify the severity with which bugs should be filed. Default is B<normal>."
+msgstr ""
+"gibt den Schweregrad an, mit dem Fehler eingereicht werden sollen. Vorgabe "
+"ist B<normal>."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:72
+msgid "B<--display>"
+msgstr "B<--display>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:74
+msgid ""
+"Fill out the templates for each package and display them all for "
+"verification. This is the default behavior."
+msgstr ""
+"füllt die Schablonen für jedes Paket aus und zeigt sie zur Überprüfung an. "
+"Dies ist das Standardverhalten."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:77
+msgid "B<--send>"
+msgstr "B<--send>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:79
+msgid "Actually send the bug reports."
+msgstr "sendet die Fehlerberichte tatsächlich."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:81
+msgid "B<--subject=\">I<bug subject>B<\">"
+msgstr "B<--subject=\">I<Betreff des Fehlerberichts>B<\">"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:83
+msgid ""
+"Specify the subject of the bug report. The subject will be automatically "
+"prefixed with the name of the package that the bug is filed against."
+msgstr ""
+"gibt den Betreff des Fehlerberichts an. Dem Betreff wird automatisch der "
+"Name des Pakets vorangestellt, gegen das der Fehlerbericht eingereicht wird."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:86
+msgid "B<--tags>"
+msgstr "B<--tags>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:88
+msgid "Set the BTS pseudo-header for tags."
+msgstr ""
+"erzeugt die Pseudokopfzeile »Tags« der Fehlerdatenbank, um Markierungen zu "
+"setzen."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:90 ../scripts/salsa.pl:566
+msgid "B<--user>"
+msgstr "B<--user>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:92
+msgid "Set the BTS pseudo-header for a usertags' user."
+msgstr ""
+"erzeugt die Pseudokopfzeile »User« der Fehlerdatenbank (Benutzer der "
+"Benutzermarkierungen)."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:94
+msgid "B<--usertags>"
+msgstr "B<--usertags>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:96
+msgid "Set the BTS pseudo-header for usertags."
+msgstr ""
+"erzeugt die Pseudokopfzeile »Usertags« der Fehlerdatenbank (um eine "
+"Benutzermarkierung zu setzen)."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:98
+msgid "B<--control=>I<COMMAND>"
+msgstr "B<--control>=>I<BEFEHL>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:100
+msgid ""
+"Add a BTS control command. This option may be repeated to add multiple "
+"control commands. For example, if you are mass-bug-filing \"please stop "
+"depending on this deprecated package\", and bug 123456 represents removal of "
+"the deprecated package, you could use:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/mass-bug.pl:105
+#, no-wrap
+msgid ""
+" mass-bug --control='block 123456 by -1' ...\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:107
+msgid "B<--source>"
+msgstr "B<--source>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:109
+msgid ""
+"Specify that package names refer to source packages rather than binary "
+"packages."
+msgstr "gibt an, dass Paketnamen sich auf Quell- statt Binärpakete beziehen."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:114
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will not be passed to a shell. Default is F</usr/sbin/sendmail>."
+msgstr ""
+"gibt den B<sendmail>-Befehl an. Der Befehl wird bei Leerräumen unterteilt "
+"und nicht an eine Shell übergeben. Vorgabe ist F</usr/sbin/sendmail>."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:117
+msgid "B<--no-wrap>"
+msgstr "B<--no-wrap>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:119
+msgid "Do not wrap the template to lines of 70 characters."
+msgstr "bricht die Schablone nicht bei 70 Zeichen um."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:138
+msgid ""
+"B<DEBEMAIL> and B<EMAIL> can be set in the environment to control the email "
+"address that the bugs are sent from."
+msgstr ""
+"B<DEBEMAIL> und B<EMAIL> können in der Umgebung gesetzt werden, um die E-"
+"Mail-Adresse festzulegen, von der Fehlerberichte versandt werden."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:561
+msgid "This program is Copyright (C) 2006 by Joey Hess <joeyh@debian.org>."
+msgstr ""
+"Dieses Programm unterliegt dem Copyright (C) 2006 von Joey Hess "
+"<joeyh@debian.org>."
+
+#. type: TH
+#: ../scripts/mergechanges.1:1
+#, no-wrap
+msgid "MERGECHANGES"
+msgstr "MERGECHANGES"
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:4
+msgid "mergechanges - merge multiple changes files"
+msgstr "mergechanges - fügt mehrere Changes-Dateien zusammen"
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:6
+msgid ""
+"B<mergechanges> [B<-d>] [B<-f>] [B<-S>] [B<-i>] I<file1 file2> [I<file>...]"
+msgstr ""
+"B<mergechanges> [B<-d>] [B<-f>] [B<-S>] [B<-i>] I<Datei1 Datei2> I<Datei> …]"
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:13
+msgid ""
+"B<mergechanges> merges two or more I<.changes> files, merging the "
+"Architecture, Description and Files (and Checksums-*, if present) fields of "
+"the two. There are checks made to ensure that the changes files are from "
+"the same source package and version and use the same changes file Format. "
+"The first changes file is used as the basis and the information from the "
+"later ones is merged into it."
+msgstr ""
+"B<mergechanges> fügt zwei oder mehr I<.changes>-Dateien zusammen und fügt "
+"dabei die Felder »Architecture«, »Description« und »Files« (und »Checksums-"
+"*«, falls vorhanden) der beiden zusammen. Es werden Prüfungen durchgeführt, "
+"um sicherzustellen, dass die Changes-Dateien vom gleichen Quellpaket und der "
+"gleichen Version sind und dasselbe Changes-Dateiformat besitzen. Die erste "
+"Changes-Datei wird als Basis verwendet und die Information der letzteren "
+"wird in dieser zusammengefügt."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:18
+msgid ""
+"The output is normally written to I<stdout>. If the B<-f> option is given, "
+"the output is written to I<package>_I<version>_multi.changes instead, in the "
+"same directory as the first changes file listed."
+msgstr ""
+"Die Ausgabe wird normalerweise auf die Standardausgabe (I<stdout>) "
+"geschrieben. Falls die Option B<-f> angegeben wurde, wird die Ausgabe "
+"stattdessen in I<Paket>_I<Version>_multi.changes im selben Verzeichnis wie "
+"die zuerst aufgeführte Changes-Datei geschrieben."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:21
+msgid ""
+"If the B<-d> option is given and the output is generated successfully, the "
+"input files will be deleted."
+msgstr ""
+"Falls die Option B<-d> angegeben wurde und die Ausgabe erfolgreich erzeugt "
+"werden konnte, werden die Eingabedateien gelöscht."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:25
+msgid ""
+"If the B<-i> or B<--indep> option is given, source packages and architecture-"
+"independent (Architecture: all) packages are included in the output, but "
+"architecture-dependent packages are not."
+msgstr ""
+"Falls die Option B<-i> oder B<--indep> angegeben wurde, fließen Quellpakete "
+"und architekturunabhängige Pakete (Architecture: all) in die Ausgabe ein, "
+"nicht jedoch architekturabhängige."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:28
+msgid ""
+"If the B<-S> or B<--source> option is given, only source packages are "
+"included in the output."
+msgstr ""
+"Falls die Option B<-S> oder B<--source> angegeben wurde, fließen nur "
+"Quellpakete in die Ausgabe ein."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:33
+msgid ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>, Mark Hymers E<lt>mhy@debian.orgE<gt>, Adam D. "
+"Barratt E<lt>adam@adam-barratt.org.ukE<gt>, and Simon McVittie "
+"E<lt>smcv@debian.orgE<gt>."
+msgstr ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, Änderungen durch Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>, Mark Hymers E<lt>mhy@debian.orgE<gt>, Adam D. "
+"Barratt E<lt>adam@adam-barratt.org.ukE<gt>, und Simon McVittie "
+"E<lt>smcv@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:26
+msgid ""
+"mk-build-deps - build a package satisfying a package's build-dependencies"
+msgstr ""
+"mk-build-deps - baut ein Paket, das die Bauabhängigkeiten eines Pakets "
+"erfüllt"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:30
+msgid "B<mk-build-deps> B<--help>|B<--version>"
+msgstr "B<mk-build-deps> B<--help>|B<--version>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:32
+msgid "B<mk-build-deps> [I<options>] I<control file> | I<package name> ..."
+msgstr "B<mk-build-deps> [I<Optionen>] I<Steuerungsdatei> | I<Paketname> …"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:36
+msgid ""
+"Given a I<package name> and/or I<control file>, B<mk-build-deps> will use "
+"B<equivs> to generate a binary package which may be installed to satisfy all "
+"the build dependencies of the given package."
+msgstr ""
+"Bei einem angegebenen I<Paketname>n und/oder einer I<Steuerungsdatei> wird "
+"B<mk-build-deps> B<equivs> verwenden, um ein Binärpaket zu erstellen, das "
+"installiert werden kann, um die gesamten Bauabhängigkeiten des angegebenen "
+"Pakets zu erfüllen."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:40
+msgid ""
+"If B<--build-dep> and/or B<--build-indep> are given, then the resulting "
+"binary package(s) will depend solely on the Build-Depends/Build-Depends-"
+"Indep dependencies, respectively."
+msgstr ""
+"Falls B<--build-dep> und/oder B<--build-indep> angegeben wurden, wird das "
+"resultierende Biärpaket ausschließlich von den Build-Depends- "
+"beziehungsweise Build-Depends-Indep-Abhängigkeiten abhängen."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:48
+msgid "B<-i>, B<--install>"
+msgstr "B<-i>, B<--install>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:50
+msgid "Install the generated packages and its build-dependencies."
+msgstr "installiert die erstellten Pakete und ihre Bauabhängigkeiten."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:52
+msgid "B<-t>, B<--tool>"
+msgstr "B<-t>, B<--tool>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:54
+msgid ""
+"When installing the generated package use the specified tool. (default: "
+"B<apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends>)"
+msgstr ""
+"benutzt, wenn das erstellte Paket installiert wird, das angegebene Werkzeug. "
+"(Vorgabe: B<apt-get -o Debug::pkgProblemResolver=yes --no-install-"
+"recommends>)"
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:57
+msgid "B<-r>, B<--remove>"
+msgstr "B<-r>, B<--remove>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:59
+msgid ""
+"Remove the package file after installing it. Ignored if used without the B<--"
+"install> switch."
+msgstr ""
+"entfernt die Paketdatei nachdem sie installiert wurde. Es wird ignoriert, "
+"falls es ohne den Schalter B<--install> benutzt wird."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:62
+msgid "B<-a> I<foo>, B<--arch> I<foo>"
+msgstr "B<-a> I<foo>, B<--arch> I<foo>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:64
+msgid ""
+"Set the architecture of the produced binary package to I<foo>. If this "
+"option is not given, fall back to the value given by B<--host-arch>. If "
+"neither this option nor B<--host-arch> are given but the Build-Depends "
+"contain architecture restrictions, use the value printed by `dpkg-"
+"architecture -qDEB_HOST_ARCH`. Otherwise, use I<all>."
+msgstr ""
+"setzt die Architektur auf das erstellte Binärpaket von I<foo>. Falls diese "
+"Option nicht angegeben wurde, wird auf den durch B<--host-arch> angegebenen "
+"Wert zurückgegriffen. Falls beides nicht angegeben wurde, Build-Depends "
+"jedoch Baubeschränkungen enthält, wird der von »dpkg-architecture -"
+"qDEB_HOST_ARCH« ausgegebene Wert verwendet. Ansonsten wird I<all> benutzt."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:70
+msgid ""
+"The package architecture must be equal to the host architecture except if "
+"the package architecture is I<all>."
+msgstr ""
+"Die Paketarchitektur muss der Rechnerarchitektur entsprechen, es sei denn, "
+"die Paketarchitektur ist I<all>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:73
+msgid ""
+"The package architecture cannot be I<all> if the build and host architecture "
+"differ."
+msgstr ""
+"Die Paketarchitektur kann nicht I<all> sein, falls sich Bau- und "
+"Rechnerarchitektur unterscheiden."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:76
+msgid "B<--host-arch> I<foo>"
+msgstr "B<--host-arch> I<foo>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:78
+msgid ""
+"Set the host architecture the binary package is built for. This defaults to "
+"the value printed by `dpkg-architecture -qDEB_HOST_ARCH`. Use this option to "
+"create a binary package that is able to satisfy crossbuild dependencies."
+msgstr ""
+"setzt die Rechnerarchitektur, für die das Binärpaket gebaut wird. Dies ist "
+"standardmäßig der Wert, der von »dpkg-architecture -qDEB_HOST_ARCH« "
+"ausgegeben wird. Verwenden Sie diese Option, um ein Binärpaket zu erstellen, "
+"das Crossbuild-Abhängigkeiten erfüllen kann."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:82
+msgid ""
+"If this option is used together with B<--arch>, then they must be equal "
+"except if the value of B<--arch> is I<all>."
+msgstr ""
+"Falls diese Option zusammen mit B<--arch> benutzt wird, muss sie mit dieser "
+"übereinstimmen, es sei denn, B<--arch> ist I<all>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:85
+msgid ""
+"If B<--arch> is not given, then this option also sets the package "
+"architecture."
+msgstr ""
+"Falls B<--arch> nicht angegeben ist, setzt diese Option auch die "
+"Paketarchitektur."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:87
+msgid "B<--build-arch> I<foo>"
+msgstr "B<--build-arch> I<foo>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:89
+msgid ""
+"Set the build architecture the binary package is built for. This defaults to "
+"the value printed by `dpkg-architecture -qDEB_BUILD_ARCH`. Use this option "
+"to create a binary package that is able to satisfy crossbuild dependencies."
+msgstr ""
+"setzt die Bauarchitektur, für die das Binärpaket gebaut werden soll. Dies "
+"ist standardmäßig der Wert, der von »dpkg-architecture -qDEB_HOST_ARCH« "
+"ausgegeben wird. Verwenden Sie diese Option, um ein Binärpaket zu erstellen, "
+"das Crossbuild-Abhängigkeiten erfüllen kann."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:93
+msgid "B<-B>, B<--build-dep>"
+msgstr "B<-B>, B<--build-dep>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:95
+msgid ""
+"Generate a package which only depends on the source package's Build-Depends "
+"dependencies."
+msgstr ""
+"erstellt ein Paket, das nur von den Build-Depends-Abhängigkeiten des "
+"Quellpakets abhängt."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:98
+msgid "B<-A>, B<--build-indep>"
+msgstr "B<-A>, B<--build-indep>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:100
+msgid ""
+"Generate a package which only depends on the source package's Build-Depends-"
+"Indep dependencies."
+msgstr ""
+"erstellt ein Paket, das nur von den Build-Depends-Indep-Abhängigkeiten des "
+"Quellpakets abhängt."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:103
+#, fuzzy
+#| msgid "B<-s>, B<--sources> I<Sources_file>"
+msgid "B<-P>, B<--build-profiles> I<profile[,...]>"
+msgstr "B<-s>, B<--sources> I<Quelldatei>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:105
+msgid ""
+"Generate a package which only depends on build dependencies with the build "
+"profile(s), given as a comma-separated list. The default behavior is to use "
+"no specific profile. Setting this option will override the "
+"B<DEB_BUILD_PROFILES> environment variable."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:119
+msgid "B<-s>, B<--root-cmd>"
+msgstr "B<-s>, B<--root-cmd>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:121
+msgid ""
+"Use the specified tool to gain root privileges before installing. Ignored "
+"if used without the B<--install> switch."
+msgstr ""
+"verwendet das angegebene Werkzeug, um für die Installation Root-Rechte zu "
+"erlangen. Dies wird ignoriert, falls es ohne den Schalter B<--install> "
+"benutzt wird."
+
+#. type: =head2
+#: ../scripts/mk-build-deps.pl:128
+msgid "External environment"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:132
+msgid "B<DEB_BUILD_PROFILES>"
+msgstr "B<DEB_BUILD_PROFILES>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:134
+msgid ""
+"If set, it will be used as the active build profile(s) for the build "
+"dependencies to be installed. It is a space separated list of profile "
+"names. Overridden by the B<-P> option."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:143
+msgid ""
+"B<mk-build-deps> is copyright by Vincent Fourmond and was modified for the "
+"devscripts package by Adam D. Barratt <adam@adam-barratt.org.uk>."
+msgstr ""
+"B<mk-build-deps> unterliegt dem Copyright von Vincent Fourmond und wurde für "
+"das Devscripts-Paket durch Adam D. Barratt <adam@adam-barratt.org.uk> "
+"verändert."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:146 ../scripts/transition-check.pl:77
+msgid ""
+"This program comes with ABSOLUTELY NO WARRANTY. You are free to "
+"redistribute this code under the terms of the GNU General Public License, "
+"version 2 or later."
+msgstr ""
+"Für dieses Programm besteht KEINERLEI GARANTIE. Es ist Ihnen erlaubt, diesen "
+"Code unter den Bedingungen der GNU General Public License, Version 2 oder "
+"später, weitergeben."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:27
+msgid ""
+"mk-origtargz - rename upstream tarball, optionally changing the compression "
+"and removing unwanted files"
+msgstr ""
+"mk-origtargz - benennt den Tarball der Originalautoren um, ändert wahlweise "
+"die Komprimierung und entfernt unerwünschte Dateien."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:33
+msgid "B<mk-origtargz> [I<options>] F<foo-1.0.tar.gz>"
+msgstr "B<mk-origtargz> [I<Optionen>] F<foo-1.0.tar.gz>"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:35
+msgid "B<mk-origtargz> B<--help>"
+msgstr "B<mk-origtargz> B<--help>"
+
+# FIXME there's no chapter »COPYRIGHT FILE EXAMPLE« in uscan(1)
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:41
+#, fuzzy
+#| msgid ""
+#| "B<mk-origtargz> renames the given file to match what is expected by "
+#| "B<dpkg-buildpackage>, based on the source package name and version in "
+#| "F<debian/changelog>. It can convert B<zip> to B<tar>, optionally change "
+#| "the compression scheme and remove files according to B<Files-Excluded> "
+#| "and B<Files-Excluded->I<component> in F<debian/copyright>. The resulting "
+#| "file is placed in F<debian/../..>. (In F<debian/copyright>, the B<Files-"
+#| "Excluded> and B<Files-Excluded->I<component> stanzas are a part of the "
+#| "first paragraph and there is a blank line before the following paragraphs "
+#| "which contain B<Files> and other stanzas. See B<uscan>(1) \"COPYRIGHT "
+#| "FILE EXAMPLE\".)"
+msgid ""
+"B<mk-origtargz> renames the given file to match what is expected by B<dpkg-"
+"buildpackage>, based on the source package name and version in F<debian/"
+"changelog>. It can convert B<zip> to B<tar>, optionally change the "
+"compression scheme and remove files according to B<Files-Excluded> and "
+"B<Files-Excluded->I<component> in F<debian/copyright>. The resulting file is "
+"placed in F<debian/../..>. (In F<debian/copyright>, the B<Files-Excluded> "
+"and B<Files-Excluded->I<component> stanzas are a part of the first paragraph "
+"and there is a blank line before the following paragraphs which contain "
+"B<Files> and other stanzas. The B<Files-Included> stanza may be used to "
+"ignore parts of subdirectories specified by the B<Files-Excluded> stanza See "
+"B<uscan>(1) \"COPYRIGHT FILE EXAMPLE\".)"
+msgstr ""
+"B<mk-origtargz> benennt die angegebene Datei auf Basis des Quellpaketnamens "
+"und der Version in F<debian/changelog> so um, dass sie den Anforderungen von "
+"B<dpkg-buildpackage> entspricht. Es kann B<zip> in B<tar> umwandeln, "
+"wahlweise das Komprimierungsverfahren ändern und Dateien entsprechend "
+"B<Files-Excluded> und B<Files-Excluded->I<Komponente> in F<debian/copyright> "
+"entfernen. Die daraus resultierende Datei wird in F<debian/../..> abgelegt. "
+"(In F<debian/copyright> sind die Abschnitte B<Files-Excluded> und B<Files-"
+"Excluded->I<Komponente> Teil des ersten Absatzes und es gibt dort eine leere "
+"Zeile vor den folgenden Absätzen, die B<Files> oder weitere Absätze "
+"enthalten. Siehe B<uscan>(1) »COPYRIGHT FILE EXAMPLE«.)"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:53
+msgid ""
+"The archive type for B<zip> is detected by \"B<file --dereference --brief --"
+"mime-type>\" command. So any B<zip> type archives such as B<jar> are "
+"treated in the same way. The B<xpi> archive is detected by its extension "
+"and is handled properly using the B<xpi-unpack> command."
+msgstr ""
+"Der Archivtyp für B<zip> wird mit dem Befehl »B<file --dereference --brief --"
+"mime-type> ermittelt. Daher werden alle Archve vom Typ B<zip>, wie etwa "
+"B<jar>, auf die gleiche Weise behandelt. Das B<xpi>-Archiv wird anhand "
+"seiner Erweiterung bestimmt und ordnungsgemäß mittels des Befehls B<xpi-"
+"unpack> gehandhabt."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:58
+msgid ""
+"If the package name is given via the B<--package> option, no information is "
+"read from F<debian/>, and the result file is placed in the current directory."
+msgstr ""
+"Falls der Paketname über die Option B<--package> angegeben wurde, werden "
+"keine Informationen aus F<debian/> gelesen und die resultierende Datei wird "
+"im aktuellen Verzeichnis abgelegt."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:61
+msgid ""
+"B<mk-origtargz> is commonly called via B<uscan>, which first obtains the "
+"upstream tarball."
+msgstr ""
+"B<mk-origtargz> wird üblicherweise über B<uscan> aufgerufen. Es erhält "
+"zuerst den Tarball der Originalautoren."
+
+#. type: =head2
+#: ../scripts/mk-origtargz.pl:66
+msgid "Metadata options"
+msgstr "Metadatenoptionen"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:68
+msgid ""
+"The following options extend or replace information taken from F<debian/>."
+msgstr ""
+"Die folgenden Optionen erweitern oder ersetzen die aus F<debian/> "
+"entnommenen Informationen."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:74
+msgid ""
+"Use I<package> as the name of the Debian source package, and do not require "
+"or use a F<debian/> directory. This option can only be used together with "
+"B<--version>."
+msgstr ""
+"benutzt I<Paket> als Namen des Debian-Quellpakets und erfordert oder "
+"verwendet daher nicht ein F<debian/>-Verzeichnis. Diese Option kann nur "
+"zusammen mit B<--version> benutzt werden."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:78
+msgid ""
+"The default is to use the package name of the first entry in F<debian/"
+"changelog>."
+msgstr ""
+"Standardmäßig wird der Paketname des ersten Eintrags in F<debian/changelog> "
+"verwendet."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:80
+msgid "B<-v>, B<--version> I<version>"
+msgstr "B<-v>, B<--version> I<Version>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:82
+msgid ""
+"Use I<version> as the version of the package. This needs to be the upstream "
+"version portion of a full Debian version, i.e. no Debian revision, no epoch."
+msgstr ""
+"benutzt I<Version> als Version des Pakets. Dies muss der Teil einer "
+"vollständigen Debian-Version sein, der von den Originalautoren stammt, d.h. "
+"keine Debian-Revision, keine Epoche."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:85
+msgid ""
+"The default is to use the upstream portion of the version of the first entry "
+"in F<debian/changelog>."
+msgstr ""
+"Standardmäßig wird der Teil der Version von den Originalautoren des ersten "
+"Eintrags in F<debian/changelog> benutzt."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:88
+msgid "B<--exclude-file> I<glob>"
+msgstr "B<--exclude-file> I<Glob>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:90
+msgid ""
+"Remove files matching the given I<glob> from the tarball, as if it was "
+"listed in B<Files-Excluded>."
+msgstr ""
+"entfernt Dateien, die zum angegebenen I<Glob> des Tarballs passen, als ob er "
+"in B<Files-Excluded> aufgeführt wäre."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:93
+msgid "B<--copyright-file> I<filename>"
+msgstr "B<--copyright-file> I<Dateiname>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:95
+msgid ""
+"Remove files matching the patterns found in I<filename>, which should have "
+"the format of a Debian F<copyright> file (B<Format: https://www.debian.org/"
+"doc/packaging-manuals/copyright-format/1.0/> to be precise). Errors parsing "
+"that file are silently ignored, exactly as is the case with F<debian/"
+"copyright>."
+msgstr ""
+"entfernt Dateien, die den in I<Dateiname> gefunden Mustern entsprechen. "
+"Diese sollten im Format einer Debian-F<Copyright>-Datei (genaugenommen "
+"B<Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/"
+">) vorliegen. Fehler beim Auswerten dieser Datei werden stillschweigend "
+"ignoriert, genau wie dies bei F<debian/copyright> der Fall ist."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:101
+msgid ""
+"Unmatched patterns will emit a warning so the user can verify whether it is "
+"correct. If there are multiple patterns which match a file, only the last "
+"one will count as being matched."
+msgstr ""
+"Ungleiche Muster werden eine Warnung ausgeben, so dass der Benutzer prüfen "
+"kann, ob es korrekt ist. Falls es mehrere zu einer Datei passende Muster "
+"gibt, zählt nur das letzte als passend."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:105
+msgid ""
+"Both the B<--exclude-file> and B<--copyright-file> options amend the list of "
+"patterns found in F<debian/copyright>. If you do not want to read that file, "
+"you will have to use B<--package>."
+msgstr ""
+"Sowohl die B<--exclude-file>- als auch B<--copyright-file>-Optionen ergänzen "
+"die Liste der in F<debian/copyright> gefundenen Muster. Falls Sie diese "
+"Datei nicht auslesen wollen, müssen Sie B<--package> verwenden."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:109
+msgid "B<--signature> I<signature-mode>"
+msgstr "B<--signature> I<Signaturmodus>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:111
+msgid "Set I<signature-mode>:"
+msgstr "I<Signaturmodus> setzen:"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:115
+msgid "0 for no signature"
+msgstr "0 für keine Signatur"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:117
+msgid "1 for normal detached signature"
+msgstr "1 für normale freistehende Signatur"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:119
+msgid "2 for signature on decompressed"
+msgstr "2 für Signatur von Dekompriniertem"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:121
+msgid "3 for self signature"
+msgstr "3 für Selbstsignatur"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:125
+msgid "B<--signature-file> I<signature-file>"
+msgstr "B<--signature-file> I<Signaturdatei>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:127
+msgid ""
+"Use I<signature-file> as the signature file corresponding to the Debian "
+"source package to create a B<dpkg-source> (post-stretch) compatible "
+"signature file. (optional)"
+msgstr ""
+"verwendet I<Signaturdatei> als zum Debian-Quellpaket gehörige Signaturdatei, "
+"um eine B<dpkg-source> (post-stretch)-kompatible Signaturdatei zu erzeugen. "
+"(optional)."
+
+#. type: =head2
+#: ../scripts/mk-origtargz.pl:133
+msgid "Action options"
+msgstr "Aktionsoptionen"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:135
+msgid ""
+"These options specify what exactly B<mk-origtargz> should do. The options "
+"B<--copy>, B<--rename> and B<--symlink> are mutually exclusive."
+msgstr ""
+"Diese Optionen geben an, was genau B<mk-origtargz> tun soll. Die Optionen "
+"B<--copy>, B<--rename> und B<--symlink> schließen sich gegenseitig aus."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:140 ../scripts/uscan.pl:1785
+msgid "B<--symlink>"
+msgstr "B<--symlink>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:142
+msgid ""
+"Make the resulting file a symlink to the given original file. (This is the "
+"default behaviour.)"
+msgstr ""
+"liefert als Ergebnis einen symbolischen Verweis auf die Originaldatei. (Dies "
+"ist das Standardverhalten.)"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:145
+#, fuzzy
+#| msgid ""
+#| "If the file has to be modified (because it is a B<zip>, or B<xpi> file, "
+#| "because of B<--repack> or B<Files-Excluded>), this option behaves like "
+#| "B<--copy>."
+msgid ""
+"If the file has to be modified (because it is a B<zip>, B<xpi> or B<zst> "
+"file, because of B<--repack> or B<Files-Excluded>), this option behaves like "
+"B<--copy>."
+msgstr ""
+"Falls die Datei verändert werden muss (da es aufgrund von B<--repack> oder "
+"B<Files-Excluded> eine B<Zip>- oder B<Xpi>-Datei ist), verhält sich diese "
+"Option wie B<--copy>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:149 ../scripts/uscan.pl:1790
+msgid "B<--copy>"
+msgstr "B<--copy>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:151
+msgid ""
+"Make the resulting file a copy of the original file (unless it has to be "
+"modified, of course)."
+msgstr ""
+"liefert als Ergebnis eine Kopie der Originaldatei (natürlich nur, wenn sie "
+"nicht verändert werden muss)."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:154 ../scripts/uscan.pl:1794
+msgid "B<--rename>"
+msgstr "B<--rename>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:156
+msgid "Rename the original file."
+msgstr "benennt die Originaldatei um."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:158
+#, fuzzy
+#| msgid ""
+#| "If the file has to be modified (because it is a B<zip>, or B<xpi> file, "
+#| "because of B<--repack> or B<Files-Excluded>), this implies that the "
+#| "original file is deleted afterwards."
+msgid ""
+"If the file has to be modified (because it is a B<zip>, B<xpi>, B<zst> file, "
+"because of B<--repack> or B<Files-Excluded>), this implies that the original "
+"file is deleted afterwards."
+msgstr ""
+"Falls die Datei verändert werden muss (da es aufgrund von B<--repack> oder "
+"B<Files-Excluded> eine B<Zip>- oder B<Xpi>-Datei ist), impliziert dies, dass "
+"die Originaldatei hinterher gelöscht wird."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:162 ../scripts/uscan.pl:1798
+msgid "B<--repack>"
+msgstr "B<--repack>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:164
+msgid ""
+"If the given file is not compressed using the desired format (see B<--"
+"compression>), recompress it."
+msgstr ""
+"Falls die angegebene Datei nicht im gewünschten Format komprimiert vorliegt, "
+"(siehe B<--compression>) wird sie erneut komprimiert."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:167
+msgid "B<-S>, B<--repack-suffix> I<suffix>"
+msgstr "B<-S>, B<--repack-suffix> I<Endung>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:169
+msgid ""
+"If the file has to be modified, because of B<Files-Excluded>, append "
+"I<suffix> to the upstream version."
+msgstr ""
+"Falls die Datei aufgrund von B<Files-Excluded> verändert werden muss, wird "
+"I<Endung> an die Version der Originalautoren angehängt."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:172
+msgid "B<--force-repack>"
+msgstr "B<--force-repack>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:174
+msgid ""
+"Recompress even if file is compressed using the desired format and no files "
+"were deleted."
+msgstr ""
+"komprimiert die Datei sogar dann neu, wenn sie im gewünschten Format "
+"komprimiert vorliegt und keine Dateien gelöscht wurden."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:177
+msgid "B<-c>, B<--component> I<componentname>"
+msgstr "B<-c>, B<--component> I<Komponentenname>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:179
+msgid ""
+"Use <componentname> as the component name for the secondary upstream "
+"tarball. Set I<componentname> as the component name. This is used only for "
+"the secondary upstream tarball of the Debian source package. Then "
+"I<packagename_version.orig-componentname.tar.gz> is created."
+msgstr ""
+"verwendet I<Komponentenname> als Komponentenname für den untergeordneten "
+"Tarball der Ursprungsautoren. Dies wird nur für den untergeordneten Tarball "
+"der Ursprungsautoren eines Debian-Quellpakets benutzt. Dann wird "
+"I<Paketname_Version.orig-Komponentenname.tar.gz> erstellt."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:184
+msgid "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> | B<default> ]"
+msgstr "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> | B<default> ]"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:186
+msgid ""
+"The default method is B<xz>. When mk-origtargz is launched in a debian "
+"source repository which format is \"1.0\" or undefined, the method switches "
+"to B<gzip>."
+msgstr ""
+"Die Standardmethode ist B<xz>. Wenn mk-origtargz in einem Debian-Quelldepot, "
+"dessen Format »1.0« oder nicht definiert ist, gestartet wird, wechselt die "
+"Methode zu B<gzip>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:189
+msgid "B<-C>, B<--directory> I<directory>"
+msgstr "B<-C>, B<--directory> I<Verzeichnis>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:191
+msgid "Put the resulting file in the given directory."
+msgstr "legt die resultierende Datei im angegebenen Verzeichnis ab."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:193
+msgid "B<--unzipopt> I<options>"
+msgstr "B<--unzipopt> [I<Optionen>]"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:195
+msgid ""
+"Add the extra options to use with the B<unzip> command such as B<-a>, B<-"
+"aa>, and B<-b>."
+msgstr ""
+"fügt die zusätzlichen Optionen, wie B<-a>, B<-aa> und B<-b>, hinzu, die mit "
+"dem Befehl B<unzip> benutzt werden."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:212
+msgid "B<uscan>(1), B<uupdate>(1)"
+msgstr "B<uscan>(1), B<uupdate>(1)"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:216
+msgid ""
+"B<mk-origtargz> and this manpage have been written by Joachim Breitner "
+"<I<nomeata@debian.org>>."
+msgstr ""
+"B<mk-origtargz> und diese Handbuchseite wurden von Joachim Breitner "
+"<I<nomeata@debian.org>> geschrieben."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:5
+msgid "namecheck - Check project names are not already taken."
+msgstr "namecheck - prüft, ob Projektnamen bereits vergeben sind"
+
+#. type: =head1
+#: ../scripts/namecheck.pl:7
+msgid "ABOUT"
+msgstr "ÜBER"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:9
+msgid ""
+"This is a simple tool to automate the testing of project names at the most "
+"common Open Source / Free Software hosting environments."
+msgstr ""
+"Dies ist ein einfaches Werkzeug, um die Prüfung von Projektnamen auf den "
+"gängigsten Open-Source-/Freie-Software-Hosting-Umgebungen zu automatisieren."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:12
+msgid ""
+"Each new project requires a name, and those names are ideally unique. To "
+"come up with names is hard, and testing to ensure they're not already in use "
+"is time-consuming - unless you have a tool such as this one."
+msgstr ""
+"Jedes neue Projekt benötigt einen Namen und diese Namen sind idealerweise "
+"eindeutig. Es ist schwierig, sich Namen auszudenken und sie zu prüfen, um "
+"sicherzustellen, dass sie nicht bereits verwendet werden, kostet Zeit – es "
+"sei denn, Sie haben ein Werkzeug wie dieses."
+
+#. type: =head1
+#: ../scripts/namecheck.pl:16
+msgid "CUSTOMIZATION"
+msgstr "ANPASSUNG"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:18
+msgid ""
+"The script, as is, contains a list of sites, and patterns, to test against."
+msgstr ""
+"Das Skript enthält, wie es ist, eine Liste von Seiten und Mustern, gegen die "
+"getestet wird."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:20
+msgid ""
+"If those patterns aren't sufficient then you may create your own additions "
+"and add them to the script. If you wish to have your own version of the "
+"patterns you may save them into the file ~/.namecheckrc"
+msgstr ""
+"Falls diese Muster nicht ausreichen, können Sie Ihre eigenen Zusätze "
+"erstellen und sie dann dem Skript hinzufügen. Falls Sie Ihre eigene Version "
+"der Muster wünschen, können Sie sie in der Datei ~/.namecheckrc speichern."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:26
+msgid "Steve -- http://www.steve.org.uk/"
+msgstr "Steve -- http://www.steve.org.uk/"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:32
+msgid "Copyright (c) 2008 by Steve Kemp. All rights reserved."
+msgstr "Copyright (c) 2008 von Steve Kemp. Alle Rechte vorbehalten."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:34
+msgid ""
+"This module is free software; you can redistribute it and/or modify it under "
+"the same terms as Perl itself."
+msgstr ""
+"Dieses Modul ist freie Software; Sie können es unter den gleichen "
+"Bedingungen wie Perl selbst weiterverteilen und/oder ändern."
+
+#. type: TH
+#: ../scripts/nmudiff.1:1
+#, no-wrap
+msgid "NMUDIFF"
+msgstr "NMUDIFF"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:4
+msgid "nmudiff - email an NMU diff to the Debian BTS"
+msgstr ""
+"nmudiff - versendet ein NMU-Diff per E-Mail an die Debian-Fehlerdatenbank"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:6
+msgid "B<nmudiff> [I<options>]"
+msgstr "B<nmudiff> [I<Optionen>]"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:9
+msgid ""
+"B<nmudiff> is the tool to be used while preparing a Non-Maintainer Upload "
+"(NMU) to notify the maintainer about the work being done."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:19
+msgid ""
+"B<nmudiff> should be run in the source tree of the package being NMUed, "
+"after the NMU is built. It assumes that the source packages (specifically, "
+"the I<.dsc> and any corresponding I<tar> and I<diff> files) for both the "
+"previous version of the package and the newly built NMU version are in the "
+"parent directory. It then uses B<debdiff> to generate a diff between the "
+"previous version and the current NMU, and either runs mutt or an editor "
+"(using B<sensible-editor>) so that the mail message (including the diff) can "
+"be examined and modified; once you exit the editor the diff will be mailed "
+"to the Debian BTS."
+msgstr ""
+"B<nmudiff> sollte im Quellverzeichnisbaum des Pakets ausgeführt werden, von "
+"dem ein NMU durchgeführt wird, nachdem es gebaut wurde. Es geht davon aus, "
+"dass das Quellpaket (speziell die I<.dsc>-Datei und alle zugehörigen I<tar>- "
+"und I<diff>-Dateien) sowohl für die vorherige Version des Pakets als auch "
+"für die neu gebaute Version im übergeordneten Verzeichnis liegt. Dann "
+"benutzt es B<debdiff>, um ein Diff zwischen der vorherigen Version und dem "
+"aktuellen NMU zu erstellen und führt entweder Mutt oder einen Editor aus (es "
+"wird B<sensible-editor> verwendet), so dass die E-Mail (einschließlich des "
+"Diffs) untersucht und geändert werden kann. Sobald Sie den Editor schließen, "
+"wird das Diff per E-Mail an die Debian-Fehlerdatenbank gesandt."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:24
+msgid ""
+"The default behaviour is that if exactly one bug is closed by this NMU, then "
+"that bug will be mailed, otherwise a new bug will be submitted. This "
+"behaviour may be changed by command line options and configuration file "
+"options."
+msgstr ""
+"Das Standardverhalten ist, falls genau ein Fehler durch diesen NMU "
+"geschlossen wird, dass eine E-Mails an den Fehler versandt wird, andernfalls "
+"wird ein neuer Fehlerbericht eingereicht. Dieses Verhalten kann durch "
+"Befehlszeilen- und Konfigurationsdateioptionen geändert werden."
+
+#. type: TP
+#: ../scripts/nmudiff.1:25
+#, no-wrap
+msgid "B<--new>"
+msgstr "B<--new>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:29
+msgid ""
+"Instead of mailing the bug reports which are to be closed by this NMU, a new "
+"bug report is submitted directly to the BTS."
+msgstr ""
+"Anstatt E-Mails an die Fehlerberichte zu versenden, die durch diesen NMU "
+"geschlossen wurden, wird ein neuer Fehlerbericht direkt an die "
+"Fehlerdatenbank eingereicht."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:34
+msgid ""
+"Send the bug report to all of the bugs which are being closed by this NMU, "
+"rather than opening a new bug report. This option has no effect if no bugs "
+"are being closed by this NMU."
+msgstr ""
+"sendet den Fehlerbericht an alle Fehler, die durch diesen NMU geschlossen "
+"werden, anstatt einen neuen Fehlerbericht zu öffnen. Diese Option hat keine "
+"Auswirkungen, falls durch diesen NMU keine Fehlerberichte geschlossen werden."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:39
+msgid ""
+"Use B<mutt>(1) (or B<neomutt>(1)) for editing and sending the message to the "
+"BTS (default behaviour). This can be controlled using a configuration file "
+"option (see below)."
+msgstr ""
+"verwendet B<mutt>(1) (oder B<neomutt>(1)) zum Bearbeiten und Versenden der "
+"Nachricht an die Fehlerdatenbank (Standardverhalten). Dies kann mittels "
+"einer Konfigurationsdateioption geregelt werden (siehe unten)."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:44
+msgid ""
+"Use B<sensible-editor>(1) to edit the message and then mail it directly "
+"using I</usr/bin/sendmail>. This can be controlled using a configuration "
+"file option (see below)."
+msgstr ""
+"benutzt B<sensible-editor>(1), um die Nachricht zu bearbeiten und versendet "
+"sie per E-Mail mittels I</usr/bin/sendmail>. Dies kann über eine "
+"Konfigurationsdateioption geregelt werden (siehe unten)."
+
+#. type: TP
+#: ../scripts/nmudiff.1:44
+#, no-wrap
+msgid "B<--sendmail> I<SENDMAILCMD>"
+msgstr "B<--sendmail> I<SENDMAIL-BEFEHL>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:54
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will be interpreted by the shell. Default is I</usr/sbin/sendmail>. "
+"The B<-t> option will be automatically added if the command is I</usr/sbin/"
+"sendmail> or I</usr/sbin/exim*>. For other mailers, if they require a B<-t> "
+"option, this must be included in the I<SENDMAILCMD>, for example: B<--"
+"sendmail=\"/usr/sbin/mymailer -t\">. This can also be set using the "
+"devscripts configuration files; see below."
+msgstr ""
+"gibt den B<sendmail>-Befehl an. Der Befehl wird bei Leerräumen getrennt und "
+"durch die Shell interpretiert. Vorgabe ist I</usr/sbin/sendmail>. Falls der "
+"Befehl I</usr/sbin/sendmail> oder I</usr/sbin/exim*> ist, wird die Option B<-"
+"t> automatisch hinzugefügt. Für andere Mailprogramme muss dies in den "
+"I<SENDMAIL-BEFEHL> eingefügt werden, wenn Sie eine B<-t>-Option benötigen, "
+"zum Beispiel: B<--sendmail=\"/usr/sbin/mymailer -t\">. Dies kann auch "
+"mittels der Devscripts-Konfigurationsdateien gesetzt werden; siehe unten."
+
+#. type: TP
+#: ../scripts/nmudiff.1:54
+#, no-wrap
+msgid "B<--from> I<EMAIL>"
+msgstr "B<--from> I<E-MAIL>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:62
+msgid ""
+"If using the B<sendmail> (B<--no-mutt>) option, then the email to the BTS "
+"will be sent using the name and address in the environment variables "
+"B<DEBEMAIL> and B<DEBFULLNAME>. If these are not set, then the variables "
+"B<EMAIL> and B<NAME> will be used instead. These can be overridden using "
+"the B<--from> option. The program will not work in this case if an email "
+"address cannot be determined."
+msgstr ""
+"Falls die B<sendmail>-Option (B<--no-mutt>) benutzt wird, dann werden für "
+"die E-Mail an die Fehlerdatenbank die Umgebungsvariablen B<DEBEMAIL> und "
+"B<DEBFULLNAME> verwendet. Falls diese nicht gesetzt sind, werden stattdessen "
+"die Variablen B<EMAIL> und B<NAME> benutzt. Diese können mittels der Option "
+"B<--from> außer Kraft gesetzt werden. Das Programm wird in diesem Fall nicht "
+"funktionieren, falls eine E-Mail-Adresse nicht bestimmt werden kann."
+
+#. type: TP
+#: ../scripts/nmudiff.1:62
+#, no-wrap
+msgid "B<--delay> I<DELAY>"
+msgstr "B<--delay> I<VERZÖGERUNG>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:69
+msgid ""
+"Indicate in the generated mail that the NMU has been uploaded to the DELAYED "
+"queue, with a delay of I<DELAY> days. The default value is I<XX> which adds "
+"a placeholder to the e-mail. A value of B<0> indicates that the upload has "
+"not been sent to a delayed queue. This can also be set using the devscripts "
+"configuration files; see below."
+msgstr ""
+"gibt in der erzeugten E-Mail an, dass der NMU in die DELAYED-Warteschlange "
+"mit einer Verzögerung von I<VERZÖGERUNG> Tagen hochgeladen wurde. Der "
+"Vorgabewert ist I<XX>, wodurch der E-Mail ein Platzhalter hinzugefügt wird. "
+"Ein Wert von B<0> gibt an, dass nichts an eine Warteschlange hochgeladen "
+"wurde. Dies kann auch mittels der Devscripts-Konfigurationsdateien gesetzt "
+"werden; siehe unten."
+
+#. type: TP
+#: ../scripts/nmudiff.1:69
+#, no-wrap
+msgid "B<--no-delay>, B<--nodelay>"
+msgstr "B<--no-delay>, B<--nodelay>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:72
+msgid "Equivalent to B<--delay 0>."
+msgstr "entspricht B<--delay 0>."
+
+#. type: TP
+#: ../scripts/nmudiff.1:76
+msgid "B<--no-pending>, B<--nopending>"
+msgstr "B<--no-pending>, B<--nopending>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:79
+#, fuzzy
+#| msgid "Do not unpack the orig tarball."
+msgid "Do not add the I<pending> tag."
+msgstr "entpackt nicht den Original-Tarball."
+
+#. type: TP
+#: ../scripts/nmudiff.1:79
+msgid "B<--non-dd>, B<--nondd>"
+msgstr "B<--non-dd>, B<--nondd>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:82
+msgid "Mention in the email that you require sponsorship."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:82
+#, no-wrap
+msgid "B<--template> I<TEMPLATEFILE>"
+msgstr "B<--template> I<SCHABLONENDATEI>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:86
+msgid ""
+"Use content of TEMPLATEFILE for message body instead of default template. "
+"If TEMPLATEFILE does not exist, default template is applied."
+msgstr ""
+"verwendet den Inhalt der SCHABLONENDATEI für den Nachrichtentext anstelle "
+"der Standardschablone. Falls die SCHABLONENDATEI nicht existiert, wird die "
+"Standardschablone genommen."
+
+#. type: TP
+#: ../scripts/nmudiff.1:98
+#, no-wrap
+msgid "B<NMUDIFF_DELAY>"
+msgstr "B<NMUDIFF_DELAY>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:104
+msgid ""
+"If this is set to a number, e-mails generated by B<nmudiff> will by default "
+"mention an upload to the DELAYED queue, delayed for the specified number of "
+"days. The value B<0> indicates that the DELAYED queue has not been used."
+msgstr ""
+"Falls dies auf eine Zahl gesetzt ist, werden E-Mails, die durch B<nmudiff> "
+"erzeugt wurden, standardmäßig ein Hochladen in die DELAYED-Warteschlange "
+"vermerken, die für die angegebene Zahl von Tagen verzögert. Der Wert B<0> "
+"gibt an, dass die DELAYED-Warteschlange nicht benutzt wurde."
+
+#. type: TP
+#: ../scripts/nmudiff.1:104
+#, no-wrap
+msgid "B<NMUDIFF_MUTT>"
+msgstr "B<NMUDIFF_MUTT>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:109
+#, fuzzy
+#| msgid ""
+#| "Can be I<yes> (default) or I<no>, and specifies whether to use B<mutt> "
+#| "(or B<neomut>)to compose and send the message or not, as described above."
+msgid ""
+"Can be I<yes> (default) or I<no>, and specifies whether to use B<mutt> (or "
+"B<neomutt>)to compose and send the message or not, as described above."
+msgstr ""
+"kann I<yes> (Vorgabe) oder I<no> sein und gibt wie oben beschrieben an, ob "
+"B<mutt> (oder B<neomut>) zum Verfassen und Senden der Nachricht verwendet "
+"wird oder nicht."
+
+#. type: TP
+#: ../scripts/nmudiff.1:109
+#, no-wrap
+msgid "B<NMUDIFF_NEWREPORT>"
+msgstr "B<NMUDIFF_NEWREPORT>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:117
+msgid ""
+"This option controls whether a new bug report is made, or whether the diff "
+"is sent to the bugs closed by this NMU. Can be I<maybe> (default), which "
+"sends to the existing bug reports if exactly one bug is being closed; "
+"I<yes>, which always creates a new report, or I<no>, which always sends to "
+"the reports of the bugs being closed (unless no bugs are being closed, in "
+"which case a new report is always made)."
+msgstr ""
+"Diese Option steuert, ob ein neuer Fehlerbericht erstellt wird oder ob das "
+"Diff an die durch diesen NMU geschlossenen Fehler geschickt wird. Dies kann "
+"I<maybe> sein (Vorgabe), wodurch an die existierenden Fehlerberichte gesandt "
+"wird, falls nur ein Fehler geschlossen wird, I<yes>, wodurch immer ein neuer "
+"Fehlerbericht erstellt wird oder I<no> wodurch immer an die Berichte der "
+"Fehler gesandt wird, die geschlossen werden (außer wenn keine Fehler "
+"geschlossen werden, in diesem Fall wird immer ein neuer Fehlerbericht "
+"erstellt)."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:121
+msgid ""
+"If this is set, specifies a B<sendmail> command to use instead of I</usr/"
+"sbin/sendmail>. Same as the B<--sendmail> command line option."
+msgstr ""
+"Falls dies gesetzt ist, gibt es einen B<sendmail>-Befehl an, anstatt I</usr/"
+"sbin/sendmail> zu benutzen. Entspricht der Befehlszeilenoption B<--sendmail>."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:125
+msgid "B<debdiff>(1), B<sensible-editor>(1), B<devscripts.conf>(5)"
+msgstr "B<debdiff>(1), B<sensible-editor>(1) und B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:129
+msgid ""
+"B<nmudiff> was written and is copyright 2006 by Steinar H. Gunderson and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt>. The software may be "
+"freely redistributed under the terms and conditions of the GNU General "
+"Public License, version 2."
+msgstr ""
+"B<nmudiff> wurde geschrieben und unterliegt dem Copyright 2006 von Steinar "
+"H. Gunderson und wurde von Julian Gilbey E<lt>jdg@debian.orgE<gt> angepasst. "
+"Die Software kann frei unter den Bedingungen und Bestimmungen der GNU "
+"General Public License, Version 2, weitergegeben werden."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:22
+msgid ""
+"origtargz - fetch the orig tarball of a Debian package from various sources, "
+"and unpack it"
+msgstr ""
+"origtargz - ruft den Original-Tarball eines Debian-Pakets aus verschiedenen "
+"Quellen ab und entpackt ihn."
+
+#. type: =item
+#: ../scripts/origtargz.pl:28
+msgid "B<origtargz> [I<OPTIONS>] [B<--unpack>[=B<no>|B<once>|B<yes>]]"
+msgstr "B<origtargz> [I<OPTIONEN>] [B<--unpack>[=B<no>|B<once>|B<yes>]]"
+
+#. type: =item
+#: ../scripts/origtargz.pl:30
+msgid "B<origtargz> B<--help>"
+msgstr "B<origtargz> B<--help>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:36
+msgid ""
+"B<origtargz> downloads the orig tarball of a Debian package, and also "
+"unpacks it into the current directory, if it just contains a F<debian> "
+"directory. The main use for B<origtargz> is with debian-dir-only repository "
+"checkouts, but it is useful as a general tarball download wrapper. The "
+"version number for the tarball to be downloaded is determined from F<debian/"
+"changelog>. It should be invoked from the top level directory of an unpacked "
+"Debian source package."
+msgstr ""
+"B<origtargz> lädt den Original-Tarball eines Debian-Pakets herunter und "
+"entpackt ihn außerdem in das aktuelle Verzeichnis, falls es nur ein "
+"F<debian>-Verzeichnis enthält. B<origtargz> wird hauptsächlich beim "
+"Auschecken von reinen Debian-Verzeichnissen benutzt, aber es ist auch als "
+"allgemeiner Wrapper zum Herunterladen von Tarbällen nützlich. Die "
+"Versionsnummer des Tarballs, der heruntergeladen werden soll, wird von "
+"F<debian/changelog> festgelegt. Es sollte von der obersten Verzeichnisebene "
+"eines entpackten Debian-Quellpakets aufgerufen werden."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:43
+msgid "Various download locations are tried:"
+msgstr "Es werden verschiedene Speicherorte zum Herunterladen ausprobiert:"
+
+#. type: =item
+#: ../scripts/origtargz.pl:47 ../scripts/origtargz.pl:51
+#: ../scripts/origtargz.pl:55 ../scripts/origtargz.pl:59
+#: ../scripts/origtargz.pl:63 ../scripts/origtargz.pl:67
+msgid "*"
+msgstr "*"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:49
+msgid "First, an existing file is looked for."
+msgstr "Zuerst wird nach einer existierenden Datei gesucht."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:53
+msgid "Directories given with B<--path> are searched."
+msgstr "Es werden mit B<--path> angegebene Verzeichnisse durchsucht."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:57
+msgid "B<pristine-tar> is tried."
+msgstr "B<pristine-tar> wird probiert."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:61
+#, fuzzy
+#| msgid "B<pristine-tar> is tried."
+msgid "B<pristine-lfs> is tried."
+msgstr "B<pristine-tar> wird probiert."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:65
+msgid ""
+"B<apt-get source> is tried when B<apt-cache showsrc> reports a matching "
+"version."
+msgstr ""
+"Wenn B<apt-cache showsrc> eine passende Version meldet, wird B<apt-get "
+"source> probiert."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:69
+msgid "Finally, B<uscan --download --download-current-version> is tried."
+msgstr "Am Ende wird B<uscan --download --download-current-version> versucht."
+
+# FIXME s/preserved/are preserved/
+#. type: textblock
+#: ../scripts/origtargz.pl:73
+msgid ""
+"When asked to unpack the orig tarball, B<origtargz> will remove all files "
+"and directories from the current directory, except the debian directory, and "
+"the VCS repository directories. I<Note that this will drop all non-committed "
+"changes> for the patch system in use (e.g. source format \"3.0 (quilt)\"), "
+"and will even remove all patches from the package when no patch system is in "
+"use (the original \"1.0\" source format). Some VCS control files outside "
+"F<debian/> preserved (F<.bzr-builddeb>, F<.bzr-ignore>, F<.gitignore>, F<."
+"hgignore>), if stored in VCS."
+msgstr ""
+"Wenn B<origtargz> den Original-Tarball entpacken soll, wird es alle Dateien "
+"und Verzeichnisse außer dem Debian-Verzeichnis und den VCS-"
+"Depotverzeichnissen aus dem aktuellen Verzeichnis entfernen. I<Beachten Sie, "
+"dass dadurch alle nicht übergebenen Änderungen> für das benutzte Patch-"
+"System (z.B. Quellformat »3.0 (quilt)«) I<verworfen werden>. Wenn kein Patch-"
+"System benutzt wird (das Originalquellformat »1.0«), werden sogar alle "
+"Patches des Pakets entfernt. Einige VCS-Steuerdateien außerhalb von F<debian/"
+"> werden aufbewahrt (F<.bzr-builddeb>, F<.bzr-ignore>, F<.gitignore>, F<."
+"hgignore>), falls sie im VCS gespeichert sind."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:82
+msgid ""
+"The default behavior is to unpack the orig tarball if the current directory "
+"is empty except for a F<debian> directory and the VCS files mentioned above."
+msgstr ""
+"Standardverhalten ist es, den Original-Tarball zu entpacken, falls das "
+"derzeitige Verzeichnis mit Ausnahme des F<debian>-Verzeichnisses und der "
+"oben erwähnten VCS-Dateien leer ist."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:87
+msgid ""
+"Despite B<origtargz> being called \"targz\", it will work with any "
+"compression scheme used for the tarball."
+msgstr ""
+"Obwohl B<origtargz> »targz« heißt, funktioniert es mit jedem für den Tarball "
+"benutzten Komprimierungsverfahren."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:90
+msgid ""
+"A similar tool to unpack orig tarballs is B<uupdate>(1). B<uupdate> creates "
+"a new working directory, unpacks the tarball, and applies the Debian F<.diff."
+"gz> changes. In contrast, B<origtargz> uses the current directory, keeping "
+"VCS metadata."
+msgstr ""
+"Ein ähnliches Werkzeug zum Entpacken von Tarbällen ist B<uupdate>(1). "
+"B<uupdate> erstellt ein neues Arbeitsverzeichnis, entpackt den Tarball und "
+"wendet die Debian-F<.diff.gz>-Änderungen an. Demgegenüber benutzt "
+"B<origtargz> das aktuelle Verzeichnis und behält die VCS-Metadaten bei."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:95
+msgid ""
+"For Debian package repositories that keep the full upstream source, other "
+"tools should be used to upgrade the repository from the new tarball. See "
+"B<gbp-import-orig>(1) and B<svn-upgrade>(1) for examples. B<origtargz> is "
+"still useful for downloading the current tarball."
+msgstr ""
+"Für Debian-Paketdepots, die die ganze Ursprungsquelle beibehalten, sollten "
+"andere Werkzeuge benutzt werden, um ein Upgrade des Depots von dem neuen "
+"Tarball durchzuführen. Siehe zum Beispiel B<gbp-import-orig>(1) und B<svn-"
+"upgrade>(1). B<origtargz> ist immer noch zum Herunterladen des aktuellen "
+"Tarballs nützlich."
+
+#. type: =item
+#: ../scripts/origtargz.pl:104
+msgid "B<-p>, B<--path> I<directory>"
+msgstr "B<-p>, B<--path> I<Verzeichnis>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:106
+msgid ""
+"Add I<directory> to the list of locations to search for an existing "
+"tarball. When found, a hardlink is created if possible, otherwise a symlink."
+msgstr ""
+"fügt I<Verzeichnis> der Liste von Orten hinzu, an denen nach einem "
+"existierenden Tarball gesucht wird. Wenn er gefunden wird, wird nach "
+"Möglichkeit ein harter, andernfalls ein symbolischer Verweis erzeugt."
+
+#. type: =item
+#: ../scripts/origtargz.pl:109
+msgid "B<-u>, B<--unpack>[=B<no>|B<once>|B<yes>]"
+msgstr "B<-u>, B<--unpack>[=B<no>|B<once>|B<yes>]"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:111
+msgid ""
+"Unpack the downloaded orig tarball to the current directory, replacing "
+"everything except the debian directory. Existing files are removed, except "
+"for F<debian/> and VCS files. Preserved are: F<.bzr>, F<.bzrignore>, F<.bzr-"
+"builddeb>, F<.git>, F<.gitignore>, F<.hg>, F<.hgignore>, F<_darcs> and F<."
+"svn>."
+msgstr ""
+"entpackt den heruntergeladenen Original-Tarball in das aktuelle Verzeichnis "
+"und ersetzt alles außer dem Debian-Verzeichnis. Existierende Dateien werden "
+"entfernt, mit Ausnahme der F<debian/> und VCS-Dateien. Aufbewahrt werden: F<."
+"bzr>, F<.bzrignore>, F<.bzr-builddeb>, F<.git>, F<.gitignore>, F<.hg>, F<."
+"hgignore>, F<_darcs> und F<.svn>."
+
+#. type: =item
+#: ../scripts/origtargz.pl:119
+msgid "B<no>"
+msgstr "B<no>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:121
+msgid "Do not unpack the orig tarball."
+msgstr "entpackt nicht den Original-Tarball."
+
+#. type: =item
+#: ../scripts/origtargz.pl:123
+msgid "B<once> (default when B<--unpack> is not used)"
+msgstr "B<once> (Vorgabe, wenn nicht B<--unpack> benutzt wird)"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:125
+msgid ""
+"If the current directory contains only a F<debian> directory (and possibly "
+"some dotfiles), unpack the orig tarball. This is the default behavior."
+msgstr ""
+"Falls das aktuelle Verzeichnis nur ein F<debian>-Verzeichnis (und "
+"möglicherweise ein paar Dateien, deren Name mit Punkt beginnt) enthält, wird "
+"der Original-Tarball entpackt. Dies ist das Standardverhalten."
+
+#. type: =item
+#: ../scripts/origtargz.pl:128
+msgid "B<yes> (default for B<--unpack> without argument)"
+msgstr "B<yes> (Vorgabe für B<--unpack> ohne Argument)"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:130
+msgid "Always unpack the orig tarball."
+msgstr "entpackt immer den Original-Tarball."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:136
+msgid "Alias for B<--unpack=no>."
+msgstr "Alias für B<--unpack=no>"
+
+#. type: =item
+#: ../scripts/origtargz.pl:138
+msgid "B<-t>, B<--tar-only>"
+msgstr "B<-t>, B<--tar-only>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:140
+msgid ""
+"When using B<apt-get source>, pass B<--tar-only> to it. The default is to "
+"download the full source package including F<.dsc> and F<.diff.gz> or F<."
+"debian.tar.gz> components so B<debdiff> can be used to diff the last upload "
+"to the next one. With B<--tar-only>, only download the F<.orig.tar.*> file."
+msgstr ""
+"Wenn B<apt-get source> benutzt wird, wird B<--tar-only> daran übergeben. "
+"Standardmäßig wird die vollständige Quelle einschließlich der F<.dsc>- und "
+"F<.diff.gz>- oder F<.debian.tar.gz>-Bestandteile heruntergeladen. Daher kann "
+"B<debdiff> verwendet werden, um den Unterschied zwischen dem letzten Upload "
+"und dem nächsten zu ermitteln. Mit B<--tar-only> wird nur die F<.orig.tar.*>-"
+"Datei heruntergeladen."
+
+#. type: =item
+#: ../scripts/origtargz.pl:145
+msgid "B<--clean>"
+msgstr "B<--clean>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:147
+msgid ""
+"Remove existing files as with B<--unpack>. Note that like B<--unpack>, this "
+"will remove upstream files even if they are stored in VCS."
+msgstr ""
+"entfernt existierende Dateien wie bei B<--unpack>. Beachten Sie, dass dies "
+"wie B<--unpack> die Ursprungsdateien auch dann entfernt, wenn sie im VCS "
+"gespeichert sind."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:164
+msgid ""
+"B<debcheckout>(1), B<gbp-import-orig>(1), B<pristine-tar>(1), B<svn-"
+"upgrade>(1), B<uupdate>(1)"
+msgstr ""
+"B<debcheckout>(1), B<gbp-import-orig>(1), B<pristine-tar>(1), B<svn-"
+"upgrade>(1), B<uupdate>(1)"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:168
+msgid ""
+"B<origtargz> and this manpage have been written by Christoph Berg "
+"<I<myon@debian.org>>."
+msgstr ""
+"B<origtargz> und diese Handbuchseite wurden von Christoph Berg "
+"<I<myon@debian.org>> geschrieben."
+
+#. type: TH
+#: ../scripts/plotchangelog.1:1
+#, no-wrap
+msgid "PLOTCHANGELOG"
+msgstr "PLOTCHANGELOG"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:4
+msgid "plotchangelog - graph Debian changelogs"
+msgstr "plotchangelog - zeichnet Debian-Changelogs"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:7
+msgid "B<plotchangelog> [I<options>]I< changelog >..."
+msgstr "B<plotchangelog> [I<Optionen>]I< Changelog > …"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:17
+msgid ""
+"B<plotchangelog> is a tool to aid in visualizing a Debian I<changelog>. The "
+"changelogs are graphed with B<gnuplot>(1) , with the X axis of the graph "
+"denoting time of release and the Y axis denoting the Debian version number "
+"of the package. Each individual release of the package is represented by a "
+"point, and the points are color coded to indicate who released that version "
+"of the package. The upstream version number of the package can also be "
+"labeled on the graph."
+msgstr ""
+"B<plotchangelog> ist ein Werkzeug, das hilft, ein Debian-I<Changelog> zu "
+"veranschaulichen. Die Changelogs werden durch B<gnuplot>(1) gezeichnet, "
+"wobei die X-Achse des Graphs die Zeit der Veröffentlichung des Pakets und "
+"die Y-Achse die Debian-Versionsnummer des Pakets anzeigt. Jede einzelne "
+"Veröffentlichung des Pakets wird durch einen Punkt dargestellt und die "
+"Punkte werden farbig kodiert, um anzuzeigen, wer diese Version des Pakets "
+"veröffentlichte. Der Graph kann ebenfalls mit der Versionsnummer der "
+"Originalautoren des Pakets beschriftet werden."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:21
+msgid ""
+"Alternatively, the Y axis can be configured to display the size of the "
+"changelog entry for each new version. Or it can be configured to display "
+"approximately how many bugs were fixed for each new version."
+msgstr ""
+"Alternativ kann die Y-Achse konfiguriert werden, um die Größe der Changelog-"
+"Einträge für jede neue Version anzuzeigen. Oder sie kann konfiguriert "
+"werden, um anzuzeigen, wieviele Fehler schätzungsweise für jede neue Version "
+"behoben wurden."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:24
+msgid ""
+"Note that if the package is a Debian-specific package, the entire package "
+"version will be used for the Y axis. This does not always work perfectly."
+msgstr ""
+"Beachten Sie, falls das Paket Debian-spezifisch ist, dass die ganze "
+"Paketversion für die Y-Achse verwendet wird. Dies funktioniert nicht immer "
+"perfekt."
+
+#. type: SH
+#: ../scripts/plotchangelog.1:25
+#, no-wrap
+msgid "READING THE GRAPH"
+msgstr "DEN GRAPH LESEN"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:33
+msgid ""
+"The general outline of a package's graph is typically a series of peaks, "
+"starting at 1, going up to n, and then returning abruptly to 1. The higher "
+"the peaks, the more releases the maintainer made between new upstream "
+"versions of the package. If a package is Debian-only, it's graph will just "
+"grow upwards without ever falling (although a bug in this program may cause "
+"it to fall sometimes, if the version number goes from say, 0.9 to say, 0.10 "
+"- this is interpreted wrong...)"
+msgstr ""
+"Die allgemeine Kontur eines Paket-Graphen ist typischerweise eine Serie von "
+"Spitzen, beginnend bei 1, steigend bis n und dann abrupt zu 1 zurückkehrend. "
+"Je höher die Höchstwerte, um so mehr Veröffentlichungen brachte der "
+"Paketbetreuer zwischen den neuen Paketversionen der Ursprungsautoren heraus. "
+"Falls es sich um ein reines Debian-Paket handelt, wird sein Graph nur nach "
+"oben wachsen ohne irgendwann abzufallen (allerdings kann ihn ein Fehler in "
+"diesem Programm manchmal zum Fallen veranlassen, falls sich die "
+"Versionsnummer von zum Beispiel 0.9 auf zum Beispiel 0.10 ändert – dies wird "
+"falsch interpretiert …)"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:40
+msgid ""
+"If the graph dips below 1, someone made a NMU of the package and upgraded it "
+"to a new upstream version, thus setting the Debian version to 0. NMU's in "
+"general appear as fractional points like 1.1, 2.1, etc. A NMU can also be "
+"easily detected by looking at the points that represent which maintainer "
+"uploaded the package -- a solitary point of a different type than the points "
+"before and after it is typically a NMU."
+msgstr ""
+"Falls der Graph unter 1 sinkt, hat jemand ein NMU des Pakets und ein Upgrade "
+"auf eine neue Version der Ursprungsautoren durchgeführt, dadurch wird die "
+"Debian-Version auf 0 gesetzt. NMUs erscheinen im Allgemeinen als Unterpunkte "
+"wie 1.1, 2.1, etc. Ein NMU kann außerdem einfach festgestellt werden, indem "
+"die Punkte betrachtet werden, die für den Paketbetreuer stehen, der das "
+"Paket hochgeladen hat – ein einzelner Punkt eines anderen Typs, als der der "
+"Punkte davor und dahinter ist normalerweise ein NMU."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:43
+msgid ""
+"It's also easy to tell by looking at the points when a package changes "
+"maintainers."
+msgstr ""
+"Es ist außerdem einfach, durch Ansehen der Punkte zu sagen, wann sich "
+"Betreuer eines Pakets ändern."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:44
+#, no-wrap
+msgid "B<-l>, B<--linecount>"
+msgstr "B<-l>, B<--linecount>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:50
+msgid ""
+"Instead of using the Debian version number as the Y axis, use the number of "
+"lines in the changelog entry for each version. Cannot be used together with "
+"B<--bugcount>."
+msgstr ""
+"nimmt statt der Debian-Versionsnummer als Y-Achse die Anzahl der Zeilen im "
+"Changelog-Eintrag für jede Version. Dies kann nicht zusammen mit B<--"
+"bugcount> verwendet werden."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:50
+#, no-wrap
+msgid "B<-b>, B<--bugcount>"
+msgstr "B<-b>, B<--bugcount>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:57
+msgid ""
+"Instead of using the Debian version number as the Y axis, use the number of "
+"bugs that were closed by each changelog entry. Note that this number is "
+"obtained by searching for \"#dddd\" in the changelog, and so it may be "
+"inaccurate. Cannot be used together with B<--linecount>."
+msgstr ""
+"nimmt statt der Debian-Versionsnummer als Y-Achse die Anzahl der Fehler, die "
+"durch jeden Changelog-Eintrag geschlossen wurden. Beachten Sie, dass diese "
+"Zahl durch eine Suche nach »#dddd« im Changelog abgefragt wurde und daher "
+"ungenau sein kann. Dies kann nicht zusammen mit B<--linecount> verwendet "
+"werden."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:57
+#, no-wrap
+msgid "B<-c>, B<--cumulative>"
+msgstr "B<-c>, B<--cumulative>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:65
+msgid ""
+"When used together with either B<--bugcount> or B<--linecount>, graphs the "
+"cumulative count rather than the count in each individual changelog entry."
+msgstr ""
+"zeichnet, wenn es zusammen mit B<--bugcount> oder B<--linecount> benutzt "
+"wird, die Gesamtzahl statt der Anzahl in jedem einzelnen Changelog-Eintrag."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:65
+#, no-wrap
+msgid "B<-v>, B<--no-version>"
+msgstr "B<-v>, B<--no-version>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:68
+msgid ""
+"Do not show upstream version labels. Useful if the graph gets too crowded."
+msgstr ""
+"zeigt nicht die Versionsbezeichnungen der Ursprungsautoren. Dies ist "
+"nützlich, falls der Graph zu voll wird."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:68
+#, no-wrap
+msgid "B<-m, --no-maint>"
+msgstr "B<-m, --no-maint>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:71
+msgid "Do not differentiate between different maintainers of the package."
+msgstr "unterscheidet nicht zwischen verschiedenen Betreuern des Pakets."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:71
+#, no-wrap
+msgid "B<-s file>, B<--save=>I<file>"
+msgstr "B<-s Datei>, B<--save=>I<Datei>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:75
+msgid ""
+"Save the graph to I<file> in PostScript format instead of immediately "
+"displaying it."
+msgstr ""
+"speichert den Graph im PostScript-Format in I<Datei>, statt sie direkt "
+"anzuzeigen."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:75
+#, no-wrap
+msgid "B<-u>, B<--urgency>"
+msgstr "B<-u>, B<--urgency>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:78
+msgid "Use larger points when displaying higher-urgency package uploads."
+msgstr ""
+"benutzt größere Punkte, wenn Pakete mit höherer Dringlichkeit beim Hochladen "
+"angezeigt werden."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:81
+msgid ""
+"Output the gnuplot script that is fed into gnuplot (for debugging purposes)."
+msgstr ""
+"gibt (zu Fehlersuchzwecken) das Gnuplot-Skript aus, das in Gnuplot "
+"eingespeist wird."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:81
+#, no-wrap
+msgid "B<-g>I<commands>, B<--gnuplot=>I<commands>"
+msgstr "B<-g>I<Befehle>, B<--gnuplot=>I<Befehle>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:92
+msgid ""
+"This allows you to insert B<gnuplot>(1) commands into the gnuplot script "
+"that is used to generate the graph. The commands are placed after all "
+"initialization but before the final B<plot> command. This can be used to "
+"override the default look provided by this program in arbitrary ways. You "
+"can also use things like \"set terminal png color\" to change the output "
+"file type, which is useful in conjunction with the -s option."
+msgstr ""
+"Dies ermöglicht Ihnen, B<gnuplot>(1)-Befehle in das Gnuplot-Skript "
+"einzufügen, das benutzt wird, um den Graph zu erzeugen. Die Befehle werden "
+"nach allen Initialisierungen aber bevor dem abschließenden Befehl B<plot> "
+"platziert. Dies kann verwendet werden, um das durch dieses Programm "
+"vorgegebenes Aussehen auf beliebige Weise außer Kraft zu setzen. Sie können "
+"auch Dinge wie »set terminal png color« verwenden, um den Ausgabedateityp zu "
+"ändern, was in Verbindung mit der Option -s nützlich ist."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:95
+msgid "Show a usage summary."
+msgstr "zeigt eine Zusammenfassung, wie es benutzt wird."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:98
+msgid "Display version, author and copyright information."
+msgstr "zeigt Version, Autor und Copyright-Informationen."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:98
+#, no-wrap
+msgid "B<--noconf>, B<--no-conf>"
+msgstr "B<--noconf>, B<--no-conf>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:101
+msgid "Do not read any configuration files (see below)."
+msgstr "liest keine Konfigurationsdateien (siehe unten)."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:101
+#, no-wrap
+msgid "I<changelog >..."
+msgstr "I<Changelog > …"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:106
+msgid ""
+"The I<changelog> files to graph. If multiple files are specified they will "
+"all be displayed on the same graph. The files may be compressed with gzip. "
+"Any text in them that is not in Debian changelog format will be ignored."
+msgstr ""
+"die Changelog-Dateien, die gezeichnet werden. Falls mehrere Dateien "
+"angegeben wurden, werden sie alle auf dem gleichen Graph angezeigt. Die "
+"Dateien können mit Gzip komprimiert sein. Jeglicher darin enthaltener Text, "
+"der nicht im Debian-Changelog-Format vorliegt, wird ignoriert."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:113
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. The B<--no-"
+"conf> option can be used to prevent reading these files. Environment "
+"variable settings are ignored when these configuration files are read. The "
+"currently recognised variables are:"
+msgstr ""
+"Die beiden Konfigurationsdateien I</etc/devscripts.conf> und I<~/."
+"devscripts> werden durch eine Shell in dieser Reihenfolge eingelesen, um "
+"Konfigurationsvariablen zu setzen. Die Option B<--no-conf> kann benutzt "
+"werden, um ein Lesen dieser Dateien zu verhindern. Wenn diese "
+"Konfigurationsdateien gelesen werden, werden Umgebungsvariablen ignoriert. "
+"Die derzeit bekannten Variablen sind:"
+
+#. type: TP
+#: ../scripts/plotchangelog.1:113
+#, no-wrap
+msgid "B<PLOTCHANGELOG_OPTIONS>"
+msgstr "B<PLOTCHANGELOG_OPTIONS>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:118
+msgid ""
+"This is a space-separated list of options to always use, for example B<-l -"
+"b>. Do not include B<-g> or B<--gnuplot> among this list as it may be "
+"ignored; see the next variable instead."
+msgstr ""
+"Dies ist eine durch Kommas getrennte Liste von Optionen, die immer benutzt "
+"werden, zum Beispiel B<-l -b>. Fügen Sie in diese Liste nicht B<-g> oder B<--"
+"gnuplot> ein, da dies ignoriert werden könnte; siehe stattdessen die nächste "
+"Variable."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:118
+#, no-wrap
+msgid "B<PLOTCHANGELOG_GNUPLOT>"
+msgstr "B<PLOTCHANGELOG_GNUPLOT>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:124
+msgid ""
+"These are B<gnuplot> commands which will be prepended to any such commands "
+"given on the command line."
+msgstr ""
+"Dies sind B<gnuplot>-Befehle, die allen derartigen auf der Befehlszeile "
+"angegebenen Befehlen vorangestellt werden."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:127
+msgid "Joey Hess E<lt>joey@kitenet.netE<gt>"
+msgstr "Joey Hess E<lt>joey@kitenet.netE<gt>"
+
+#. type: TH
+#: ../scripts/pts-subscribe.1:1
+#, no-wrap
+msgid "PTS-SUBSCRIBE"
+msgstr "PTS-SUBSCRIBE"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:4
+msgid "pts-subscribe - time-limited subscription to the PTS"
+msgstr "pts-subscribe - zeitlich begrenztes Abonnement des PTS"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:6
+msgid "B<pts-subscribe> [I<options>] I<package>"
+msgstr "B<pts-subscribe> [I<Optionen>] I<Paket>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:8
+msgid "B<pts-unsubscribe> [I<options>] I<package>"
+msgstr "B<pts-unsubscribe> [I<Optionen>] I<Paket>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:12
+msgid ""
+"B<pts-subscribe> sends a subscription request for I<package> to the Package "
+"Tracking System at pts@qa.debian.org, and cancels the subscription 30 days "
+"later."
+msgstr ""
+"B<pts-subscribe> sendet eine Abonnement-Anfrage für I<Paket> an das "
+"Paketverfolgungssystem (PTS) unter »pts@qa.debian.org« und annuliert das "
+"Abonnement 30 Tage später."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:15
+msgid ""
+"If called as B<pts-unsubscribe>, send an unsubscription request for "
+"I<package> to the Package Tracking System."
+msgstr ""
+"Falls es als B<pts-unsubscribe> aufgerufen wird, sendet es eine Anfrage für "
+"das Annulieren des Abonnements an das Paketverfolgungssystem."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:18
+msgid ""
+"This utility is useful if a developer has made an NMU and wants to track the "
+"package for a limited period of time."
+msgstr ""
+"Dieses Hilfswerkzeug ist nützlich, falls ein Entwickler ein NMU durchgeführt "
+"hat und das Paket für eine begrenzte Zeit verfolgen möchte."
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:19
+#, no-wrap
+msgid "B<--until >I<time>, B<-u> I<time>"
+msgstr "B<--until >I<Zeit>, B<-u> I<Zeit>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:24
+msgid ""
+"When B<at>(1) should cancel the subscription. I<time> must be specified "
+"using B<at>'s syntax. Default is 'now + 30 days'. This option will "
+"probably require quoting!"
+msgstr ""
+"wenn B<at>(1) das Abonnements annulieren soll. I<Zeit> muss mittels der "
+"Syntax von B<at> angegeben werden. Vorgabe ist »now + 30 days«. Diese Option "
+"muss wahrscheinlich vor der Interpretation durch die Shell geschützt werden!"
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:24
+#, no-wrap
+msgid "B<--forever>"
+msgstr "B<--forever>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:28
+msgid ""
+"Don't cancel the subscription automatically. This can also be specified as "
+"B<--until forever>."
+msgstr ""
+"annuliert das Abonnement nicht automatisch. Dies kann auch als B<--until "
+"forever> angegeben werden."
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:35
+#, no-wrap
+msgid "B<DEBEMAIL>, B<EMAIL>"
+msgstr "B<DEBEMAIL>, B<EMAIL>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:42
+msgid ""
+"If one of these is set (with preference give to B<DEBEMAIL>), then this will "
+"be used for the subscription address. If neither is set, then the email "
+"will be sent without a specified subscription address, and the email's From: "
+"line will be used to determine the sender's address. This will be "
+"determined by B<mail>(1)."
+msgstr ""
+"Falls eine davon gesetzt ist (vorrangig B<DEBEMAIL>), wird sie als "
+"Abonnement-Adresse verwendet. Falls keine davon gesetzt ist, wird die E-Mail "
+"ohne Angabe einer Abonnement-Adresse gesandt und die E-Mail aus der Zeile "
+"»Von:« zum Bestimmen der Absenderadresse benutzt. Dies wird durch B<mail>(1) "
+"festgelegt."
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:48
+#, no-wrap
+msgid "B<PTS_UNTIL>"
+msgstr "B<PTS_UNTIL>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:51
+msgid "Setting this is equivalent to giving a B<--until> option."
+msgstr "diese Einstellung entspricht der Option B<--until>."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:56
+msgid ""
+"B<at>(1), information about the Package Tracking System in the Developer's "
+"Reference at https://www.debian.org/doc/developers-reference/resources."
+"html#pkg-tracking-system"
+msgstr ""
+"B<at>(1), Informationen über das Paketverfolgungssystem (PTS) finden sich in "
+"der Debian Entwickler-Referenz unter https://www.debian.org/doc/developers-"
+"reference/resources.html#pkg-tracking-system."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:59
+msgid ""
+"This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt> based on "
+"a public domain prototype by Raphael Hertzog E<lt>hertzog@debian.orgE<gt> "
+"and is copyright under the GPL, version 2 or later."
+msgstr ""
+"Dieses Programm wurde von Julian Gilbey E<lt>jdg@debian.orgE<gt> basierend "
+"auf einem Public-Domain-Prototyp von Raphael Hertzog E<lt>hertzog@debian."
+"orgE<gt> geschrieben und unterliegt dem Copyright der GPL, Version 2 oder "
+"später."
+
+#. type: TH
+#: ../scripts/rc-alert.1:1
+#, no-wrap
+msgid "RC-ALERT"
+msgstr "RC-ALERT"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:4
+msgid "rc-alert - check for installed packages with release-critical bugs"
+msgstr ""
+"rc-alert - sucht nach installieren Paketen mit release-kritischen Fehlern"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:6
+msgid ""
+"B<rc-alert> [I<inclusion options>] [B<--debtags> [I<tag>[B<,>I<tag> ...]]] "
+"[B<--popcon>] [I<package> ...]"
+msgstr ""
+"B<rc-alert> [I<Aufnahmeoptionen>] [B<--debtags> [I<Markierung>[B<,"
+">I<Markierung> …]]] [B<--popcon>] [I<Paket> …]"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:8
+msgid "B<rc-alert --help>|B<--version>"
+msgstr "B<rc-alert --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:12
+msgid ""
+"B<rc-alert> downloads the list of release-critical bugs from the Debian BTS "
+"webpages, and then outputs a list of packages installed on the system, or "
+"given on the command-line, which are in that list."
+msgstr ""
+"B<rc-alert> lädt die Liste der release-kritischen Fehler von den Websites "
+"der Debian-Fehlerdatenbank herunter und gibt dann eine Liste der auf dem "
+"System installierten Pakete oder der auf der Befehlszeile angegebenen Pakete "
+"aus, die auf dieser Liste stehen."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:17
+msgid ""
+"If the directory I<$XDG_CACHE_HOME/devscripts/rc-alert> exists or the B<--"
+"cache> option is given, then the (sizable) downloaded list will be cached, "
+"and will only be downloaded again on a second invocation if it has changed."
+msgstr ""
+"Falls das Verzeichnis I<$XDG_CACHE_HOME/devscripts/rc-alert> existiert oder "
+"die Option B<--cache> angegeben wurde, wird die (ziemlich große) "
+"heruntergeladene Liste zwischengespeichert und bei einem zweiten Aufruf nur "
+"erneut geladen, falls sie sich geändert hat."
+
+#. type: TP
+#: ../scripts/rc-alert.1:18
+#, no-wrap
+msgid "B<--cache>"
+msgstr "B<--cache>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:21
+msgid ""
+"Force the creation of the I<$XDG_CACHE_HOME/devscripts/rc-alert> cache "
+"directory."
+msgstr ""
+"erzwingt das Erstellen des Zwischenspeicherverzeichnisses I<$XDG_CACHE_HOME/"
+"devscripts/rc-alert>."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:31
+msgid ""
+"It is also possible to filter the list of bugs reported based on the tags "
+"and distributions associated with the package. The filtering options are:"
+msgstr ""
+"Es ist außerdem möglich, die gemeldete Fehlerliste anhand der mit dem Paket "
+"verbundenen Markierungen und Distributionen zu filtern. Die Filteroptionen "
+"sind:"
+
+#. type: TP
+#: ../scripts/rc-alert.1:31
+#, no-wrap
+msgid "B<--include-tags>, B<-f>"
+msgstr "B<--include-tags>, B<-f>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:35
+msgid ""
+"A list of tags which the bug must have, in the format used for output. For "
+"example, to include bugs tagged security or help wanted, use \"SH\"."
+msgstr ""
+"eine Liste der Markierungen, die der Fehlerbericht haben muss, in dem für "
+"die Ausgabe benutzten Format. Um zum Beispiel Fehler einzuschließen, die mit "
+"»security« oder »help wanted« markiert sind, verwenden Sie »SH«."
+
+#. type: TP
+#: ../scripts/rc-alert.1:35
+#, no-wrap
+msgid "B<--include-tag-op>, B<-t>"
+msgstr "B<--include-tag-op>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:39
+msgid ""
+"If set to I<and>, a bug must have all of the tags specified by B<--include-"
+"tags>."
+msgstr ""
+"Falls dies auf I<and> gesetzt ist, muss ein Fehlerbericht alle durch B<--"
+"include-tags> angegebenen Markierungen haben."
+
+#. type: TP
+#: ../scripts/rc-alert.1:39
+#, no-wrap
+msgid "B<--exclude-tags>"
+msgstr "B<--exclude-tags>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:43
+msgid ""
+"A list of tags which the bug must not have, in the same format as B<--"
+"include-tags>."
+msgstr ""
+"eine Liste der Markierungen, die der Fehlerbericht nicht haben darf, im "
+"selben Format wie für B<--include-tags>."
+
+#. type: TP
+#: ../scripts/rc-alert.1:43
+#, no-wrap
+msgid "B<--exclude-tag-op>"
+msgstr "B<--exclude-tag-op>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:48
+msgid ""
+"If set to I<and>, a bug must have none of the tags specified by B<--exclude-"
+"tags>. By default, the bug will be excluded if any tag matches."
+msgstr ""
+"Falls dies auf I<and> gesetzt ist, darf ein Fehlerbericht keine durch B<--"
+"exclude-tags> angegebenen Markierungen haben. Standardmäßig wird der "
+"Fehlerbericht ausgenommen, falls irgendeine Markierung passt."
+
+#. type: TP
+#: ../scripts/rc-alert.1:48
+#, no-wrap
+msgid "B<--include-dists>, B<-d>"
+msgstr "B<--include-dists>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:52
+msgid ""
+"A list of distributions which the bug must apply to, in the format used for "
+"output. For example, to include bugs affecting testing or unstable, use "
+"\"TU\"."
+msgstr ""
+"eine Liste der Distributionen, für die der Fehlerbericht gelten muss, in dem "
+"für die Ausgabe benutzten Format. Um zum Beispiel Fehler einzuschließen, die "
+"Testing oder Unstable betreffen, verwenden Sie »TU«."
+
+#. type: TP
+#: ../scripts/rc-alert.1:52
+#, no-wrap
+msgid "B<--include-dist-op>, B<-o>"
+msgstr "B<--include-dist-op>, B<-o>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:56
+msgid ""
+"If set to I<and>, a bug must apply to all of the specified distributions in "
+"order to be included."
+msgstr ""
+"Falls dies auf I<and> gesetzt ist, muss ein Fehlerbericht für alle "
+"angegebenen Distributionen gelten, um enthalten zu sein."
+
+#. type: TP
+#: ../scripts/rc-alert.1:56
+#, no-wrap
+msgid "B<--exclude-dists>"
+msgstr "B<--exclude-dists>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:60
+msgid ""
+"A list of distributions to which the bug must not apply, in the same format "
+"as B<--include-dists>."
+msgstr ""
+"eine Liste der Distributionen, für die der Fehlerbericht nicht gelten darf, "
+"im selben Format wie für B<--include-dists>."
+
+#. type: TP
+#: ../scripts/rc-alert.1:60
+#, no-wrap
+msgid "B<--exclude-dist-op>"
+msgstr "B<--exclude-dist-op>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:65
+msgid ""
+"If set to I<and>, a bug must apply to all of the specified distributions in "
+"order to be excluded. By default the bug will be excluded if it applies to "
+"any of the listed distributions."
+msgstr ""
+"Falls dies auf I<and> gesetzt ist, muss ein Fehlerbericht für alle "
+"angegebenen Distributionen gelten, um ausgenommen zu werden. Standardmäßig "
+"wird der Fehler ausgeschlossen, wenn er für irgendeine der aufgeführten "
+"Distributionen gilt."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:70
+msgid ""
+"It is also possible to only list bugs which have specific debtags set. Note "
+"that you need to have debtags installed and also that it's not mandatory for "
+"maintainers to set proper debtags. The produced list will thus probably be "
+"incomplete."
+msgstr ""
+"Es ist außerdem möglich, nur die Fehler aufzuführen, bei denen eine "
+"spezielle Gruppe von Debtags gesetzt ist. Beachten Sie, dass Debtags "
+"installiert sein muss und Paketbetreuer außerdem nicht verpflichtet sind, "
+"ordnungsgemäße Debian-Markierungen zu setzen. Die erzeugte Liste wird daher "
+"wahrscheinlich unvollständig sein."
+
+#. type: TP
+#: ../scripts/rc-alert.1:70
+#, no-wrap
+msgid "B<--debtags>"
+msgstr "B<--debtags>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:75
+msgid ""
+"Match packages based on the listed tags. Each package is matched only if it "
+"has all the listed tags; in the case of multiple tags within the same facet, "
+"a package is matched if it has any of the listed tags within the facet."
+msgstr ""
+"entspricht Paketen basierend auf aufgeführten Markierungen. Jedes Paket "
+"passt nur, falls es alle aufgeführten Markierungen hat; im Fall mehrerer "
+"Markierungen innerhalb des gleichen Aspekts passt ein Paket, falls es "
+"irgendeine der innerhalb des Aspekts aufgeführten Markierungen hat."
+
+#. type: TP
+#: ../scripts/rc-alert.1:75
+#, no-wrap
+msgid "B<--debtags-database>"
+msgstr "B<--debtags-database>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:79
+msgid ""
+"Use a non-standard debtags database. The default is I</var/lib/debtags/"
+"packages-tags>."
+msgstr ""
+"benutzt eine Debtags-Datenbank, die nicht Standard ist. Vorgabe ist I</var/"
+"lib/debtags/packages-tags>."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:83
+msgid ""
+"Popularity-contest collects data about installation and usage of Debian "
+"packages. You can additionally sort the bugs by the popcon rank of the "
+"related packages."
+msgstr ""
+"Der Beliebtheitswettbewerb (Popcon) sammelt Daten über die Installation und "
+"die Benutzung von Debian-Paketen. Sie können Fehler zusätzlich zum Popcon-"
+"Rang des zugehörigen Pakets sortieren."
+
+#. type: TP
+#: ../scripts/rc-alert.1:83
+#, no-wrap
+msgid "B<--popcon>"
+msgstr "B<--popcon>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:86
+msgid "Sort bugs by the popcon rank of the package the bug belongs to."
+msgstr ""
+"sortiert Fehler nach dem Popcon-Rang des Pakets, zu dem der Fehler gehört."
+
+#. type: TP
+#: ../scripts/rc-alert.1:86
+#, no-wrap
+msgid "B<--pc-vote>"
+msgstr "B<--pc-vote>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:92
+msgid ""
+"By default, packages are sorted according to the number of people who have "
+"the package installed. This option enables sorting by the number of people "
+"regularly using the package instead. This option has no effect in "
+"combination with --pc-local."
+msgstr ""
+"Standardmäßig werden Pakete nach der Anzahl der Leute sortiert, die das "
+"Paket installiert haben. Diese Option aktiviert stattdessen die Sortierung "
+"nach der Anzahl der Leute, die das Paket regelmäßig nutzen. Diese Option hat "
+"in Kombination mit --pc-local keine Auswirkungen."
+
+#. type: TP
+#: ../scripts/rc-alert.1:92
+#, no-wrap
+msgid "B<--pc-local>"
+msgstr "B<--pc-local>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:96
+msgid ""
+"Instead of requesting remote data the information from the last popcon run "
+"is used (I</var/log/popularity-contest>)."
+msgstr ""
+"Anstatt Daten aus der Ferne abzufragen, wird die Information aus dem letzten "
+"Popcon-Durchlauf benutzt (I</var/log/popularity-contest>)."
+
+#. type: TP
+#: ../scripts/rc-alert.1:97
+#, no-wrap
+msgid "B<--include-dists> OS"
+msgstr "B<--include-dists> OS"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:100
+msgid "The bug must apply to at least one of oldstable or stable"
+msgstr "Der Fehler muss mindestens für Oldstable oder Stable gelten."
+
+#. type: TP
+#: ../scripts/rc-alert.1:100
+#, no-wrap
+msgid "B<--include-dists> TUB< --include-dist-op> and"
+msgstr "B<--include-dists> TUB< --include-dist-op> and"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:103
+msgid "The bug must apply to both testing and unstable"
+msgstr "Der Fehler muss sowohl für Testing als auch für Unstable gelten."
+
+#. type: TP
+#: ../scripts/rc-alert.1:103
+#, no-wrap
+msgid "B<--include-dists> OB< --include-tags> SB< --exclude-tags> +"
+msgstr "B<--include-dists> OB< --include-tags> SB< --exclude-tags> +"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:106
+msgid "The bug must apply to oldstable and be tagged security but not patch"
+msgstr ""
+"Der Fehler muss für Oldstable gelten und mit »security« aber nicht mit "
+"»patch« markiert sein."
+
+#. type: TP
+#: ../scripts/rc-alert.1:106
+#, no-wrap
+msgid "B<--exclude-dists> SOTB< --include-tags> R"
+msgstr "B<--exclude-dists> SOTB< --include-tags> R"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:110
+msgid ""
+"The bug must apply to only unstable or experimental (or both) and be tagged "
+"unreproducible"
+msgstr ""
+"der Fehler darf nur für Unstable oder Experimental (oder beide) gelten und "
+"muss als »unreproducible« markiert sein."
+
+#. type: TP
+#: ../scripts/rc-alert.1:110
+#, no-wrap
+msgid "B<--debtags> implemented-in::perl,role::plugin,implemented-in::python"
+msgstr "B<--debtags> implemented-in::perl,role::plugin,implemented-in::python"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:115
+msgid ""
+"The bug must apply to packages matching the specified debtags, i.e. the "
+"match will only include packages that have the 'role::plugin' tag and that "
+"have either of the tags 'implemented-in::perl' or 'implemented-in::python'."
+msgstr ""
+"Der Fehler muss für Pakete gelten, die zu den angegebenen Debtags passen, d."
+"h. der Treffer wird nur Pakete enthalten, die die Markierung »role::plugin« "
+"und entweder die Markierung »implemented-in::perl« oder »implemented-in::"
+"python« haben."
+
+#. type: TP
+#: ../scripts/rc-alert.1:115
+#, no-wrap
+msgid "B<--popcon> B<--pc-local>"
+msgstr "B<--popcon> B<--pc-local>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:119
+msgid ""
+"Read I</var/log/popularity-contest> and sort bugs by your personal popcon "
+"ranking (which is basically the atime of your packages' binaries)."
+msgstr ""
+"liest I</var/log/popularity-contest> und sortiert Fehler nach Ihrer "
+"persönlichen Popcon-Rangordnung (die im Grunde die Atime der Programme Ihrer "
+"Pakete ist)."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:121
+msgid "It is not possible to say \"does not apply only to unstable\""
+msgstr "Es ist nicht möglich zu sagen, »gilt nicht nur für Unstable«."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:125
+msgid "B<debtags(1)> B<popbugs(1)> B<popularity-contest(8)>"
+msgstr "B<debtags(1)>, B<popbugs(1)>, B<popularity-contest(8)>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:129
+msgid ""
+"B<rc-alert> was written by Anthony DeRobertis and modified by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> and Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt> for the devscripts package. Debtags and popcon functionality was "
+"added by Jan Hauke Rahm E<lt>info@jhr-online.deE<gt>."
+msgstr ""
+"B<rc-alert> wurde von Anthony DeRobertis geschrieben und von Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> und Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt> für das Paket Devscripts angepasst. Die Debtags- und Popcon-"
+"Funktionalität wurde von Jan Hauke Rahm E<lt>info@jhr-online.deE<gt> "
+"hinzugefügt."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:262
+msgid "rmadison -- Remotely query the Debian archive database about packages"
+msgstr ""
+"rmadison - fragt Pakete aus der Debian-Archivdatenbank aus der Ferne ab"
+
+#. type: =item
+#: ../scripts/rmadison.pl:268
+msgid "B<rmadison> [I<OPTIONS>] I<PACKAGE> ..."
+msgstr "B<rmadison> [I<OPTIONEN>] I<PAKET> …"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:274
+msgid ""
+"B<dak ls> queries the Debian archive database (\"projectb\") and displays "
+"which package version is registered per architecture/component/suite. The "
+"CGI at B<https://qa.debian.org/madison.php> provides that service without "
+"requiring SSH access to ftp-master.debian.org or the mirror on mirror.ftp-"
+"master.debian.org. This script, B<rmadison>, is a command line frontend to "
+"this CGI."
+msgstr ""
+"B<dak ls> fragt die Debian-Archivdatenbank (»projectb«) ab und zeigt, welche "
+"Paketversion je Architektur/Komponente/Suite registriert ist. Das CGI unter "
+"B<https://qa.debian.org/madison.php> stellt diesen Dienst zur Verfügung ohne "
+"SSH-Zugriff auf ftp-master.debian.org oder den Spiegel auf mirror.ftp-master."
+"debian.org zu benötigen. Dieses Skript, B<rmadison>, ist eine "
+"Befehlszeilenoberfläche für dieses CGI."
+
+#. type: =item
+#: ../scripts/rmadison.pl:285
+msgid "B<-a>, B<--architecture=>I<ARCH>"
+msgstr "B<-a>, B<--architecture=>I<ARCHITEKTUR>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:287
+msgid "only show info for ARCH(s)"
+msgstr "zeigt nur Informationen für ARCHITEKTUR(en)."
+
+#. type: =item
+#: ../scripts/rmadison.pl:289
+msgid "B<-b>, B<--binary-type=>I<TYPE>"
+msgstr "B<-b>, B<--binary-type=>I<TYP>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:291
+msgid "only show info for binary TYPE"
+msgstr "zeigt nur Informationen für binären TYP."
+
+#. type: =item
+#: ../scripts/rmadison.pl:293
+msgid "B<-c>, B<--component=>I<COMPONENT>"
+msgstr "B<-c>, B<--component=>I<KOMPONENTE>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:295
+msgid "only show info for COMPONENT(s)"
+msgstr "zeigt nur Informationen für KOMPONENTE(n)."
+
+#. type: =item
+#: ../scripts/rmadison.pl:297
+msgid "B<-g>, B<--greaterorequal>"
+msgstr "B<-g>, B<--greaterorequal>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:299
+msgid "show buildd 'dep-wait pkg >= {highest version}' info"
+msgstr "zeigt die Buildd-Information »dep-wait Paket >= {höchste Version}«."
+
+#. type: =item
+#: ../scripts/rmadison.pl:301
+msgid "B<-G>, B<--greaterthan>"
+msgstr "B<-G>, B<--greaterthan>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:303
+msgid "show buildd 'dep-wait pkg >> {highest version}' info"
+msgstr "zeigt die Buildd-Information »dep-wait Paket >> {höchste Version}«."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:307
+msgid "show this help and exit"
+msgstr "zeigt diese Hilfe und wird beendet."
+
+#. type: =item
+#: ../scripts/rmadison.pl:309
+msgid "B<-s>, B<--suite=>I<SUITE>"
+msgstr "B<-s>, B<--suite=>I<SUITE>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:311
+msgid "only show info for this suite"
+msgstr "zeigt nur Informationen für diese Suite."
+
+#. type: =item
+#: ../scripts/rmadison.pl:313
+msgid "B<-r>, B<--regex>"
+msgstr "B<-r>, B<--regex>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:315
+msgid "treat PACKAGE as a regex"
+msgstr "betrachtet PAKET als regulären Ausdruck."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:317
+msgid ""
+"B<Note:> Since B<-r> can easily DoS the database (\"-r .\"), this option is "
+"not supported by the CGI on qa.debian.org and most other installations."
+msgstr ""
+"B<Hinweis:> Da B<-r> leicht für einen Diensteverweigerungsangriff auf die "
+"Datenbank benutzt werden kann (»-r .«), wird diese Option nicht durch das "
+"CGI auf qa.debian.org und die meisten anderen Installationen unterstützt."
+
+#. type: =item
+#: ../scripts/rmadison.pl:320
+msgid "B<-S>, B<--source-and-binary>"
+msgstr "B<-S>, B<--source-and-binary>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:322
+msgid "show info for the binary children of source pkgs"
+msgstr "zeigt Informationen über die binären Kindpakete von Quellpaketen."
+
+#. type: =item
+#: ../scripts/rmadison.pl:324
+msgid "B<-t>, B<--time>"
+msgstr "B<-t>, B<--time>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:326
+msgid "show projectb snapshot and reload time (not supported by all archives)"
+msgstr ""
+"zeigt eine Projectb-Momentaufnahme und die Zeit zum Neuladen (nicht von "
+"allen Archiven unterstützt)."
+
+#. type: =item
+#: ../scripts/rmadison.pl:328
+msgid "B<-u>, B<--url=>I<URL>[B<,>I<URL> ...]"
+msgstr "B<-u>, B<--url=>I<URL>[B<,>I<URL> …]"
+
+#. type: verbatim
+#: ../scripts/rmadison.pl:330
+#, no-wrap
+msgid ""
+"use I<URL> for the query. Supported shorthands are\n"
+" B<debian> https://api.ftp-master.debian.org/madison\n"
+" B<new> https://api.ftp-master.debian.org/madison?s=new\n"
+" B<qa> https://qa.debian.org/madison.php\n"
+" B<ubuntu> https://people.canonical.com/~ubuntu-archive/madison.cgi\n"
+" B<udd> https://qa.debian.org/cgi-bin/madison.cgi\n"
+" B<archive> https://qa.debian.org/cgi-bin/madison.cgi?table=archived\n"
+" B<ports> https://qa.debian.org/cgi-bin/madison.cgi?table=ports\n"
+"\n"
+msgstr ""
+"verwendet für die Abfrage I<URL>. Folgende Abkürzungen werden unterstützt:\n"
+" B<debian> https://api.ftp-master.debian.org/madison\n"
+" B<new> https://api.ftp-master.debian.org/madison?s=new\n"
+" B<qa> https://qa.debian.org/madison.php\n"
+" B<ubuntu> https://people.canonical.com/~ubuntu-archive/madison.cgi\n"
+" B<udd> https://qa.debian.org/cgi-bin/madison.cgi\n"
+" B<archive> https://qa.debian.org/cgi-bin/madison.cgi?table=archived\n"
+" B<ports> https://qa.debian.org/cgi-bin/madison.cgi?table=ports\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:339
+msgid ""
+"See the B<RMADISON_URL_MAP_> variable below for a method to add new "
+"shorthands."
+msgstr ""
+"Eine Methode, neue Abkürzungen hinzuzufügen, finden Sie nachfolgend bei der "
+"Variable B<RMADISON_URL_MAP_>."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:344
+msgid "show version and exit"
+msgstr "zeigt die Version und wird beendet."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:348
+msgid "don't read the devscripts configuration files"
+msgstr "liest die Devscripts-Konfigurationsdateien nicht."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:352
+msgid ""
+"ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g. --"
+"architecture=amd64,i386"
+msgstr ""
+"ARCHITEKTUR, KOMPONENTE und SUITE können durch Kommas (oder Leerzeichen) "
+"getrennte Listen sein, z.B. --architecture=amd64,i386."
+
+#. type: =item
+#: ../scripts/rmadison.pl:365
+msgid "B<RMADISON_URL_MAP_>I<SHORTHAND>=I<URL>"
+msgstr "B<RMADISON_URL_MAP_>I<ABKÜRZUNG>=I<URL>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:367
+msgid ""
+"Add an entry to the set of shorthand URLs listed above. I<SHORTHAND> should "
+"be replaced with the shorthand form to be used to refer to I<URL>."
+msgstr ""
+"fügt der oben aufgeführten Zusammenstellung von Abkürzungs-URLs einen "
+"Eintrag hinzu. I<ABKÜRZUNG> sollte durch die Abkürzungsform ersetzt werden, "
+"die als Bezug zu I<URL> benutzt wird."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:370
+msgid ""
+"Multiple shorthand entries may be specified by using multiple "
+"B<RMADISON_URL_MAP_*> variables."
+msgstr ""
+"Mehrere Abkürzungseinträge können mittels mehrerer B<RMADISON_URL_MAP_*>-"
+"Variablen angegeben werden."
+
+#. type: =item
+#: ../scripts/rmadison.pl:373
+msgid "B<RMADISON_DEFAULT_URL>=I<URL>"
+msgstr "B<RMADISON_DEFAULT_URL>=I<URL>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:375
+msgid ""
+"Set the default URL to use unless overridden by a command line option. For "
+"Debian this defaults to debian. For Ubuntu this defaults to ubuntu."
+msgstr ""
+"setzt die Standard-URL, die benutzt werden soll, solange sie nicht durch "
+"eine Befehlszeilenoption außer Kraft gesetzt wird. Für Debian ist die "
+"Voreinstellung »debian«, für Ubuntu ist es »ubuntu«."
+
+#. type: =item
+#: ../scripts/rmadison.pl:378
+msgid "B<RMADISON_ARCHITECTURE>=I<ARCH>"
+msgstr "B<RMADISON_ARCHITECTURE>=I<ARCHITEKTUR>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:380
+msgid ""
+"Set the default architecture to use unless overridden by a command line "
+"option. To run an unrestricted query when B<RMADISON_ARCHITECTURE> is set, "
+"use B<--architecture='*'>."
+msgstr ""
+"setzt die Standardarchitektur, die benutzt werden soll, solange sie nicht "
+"durch eine Befehlszeilenoption außer Kraft gesetzt wird. Um eine "
+"uneingeschränkte Abfrage auszuführen, wenn B<RMADISON_ARCHITECTURE> gesetzt "
+"wurde, verwenden Sie B<--architecture='*'>."
+
+#. type: =item
+#: ../scripts/rmadison.pl:384
+msgid "B<RMADISON_SSL_CA_FILE>=I<FILE>"
+msgstr "B<RMADISON_SSL_CA_FILE>=I<DATEI>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:386
+msgid ""
+"Use the specified CA file instead of the default CA bundle for curl/wget, "
+"passed as --cacert to curl, and as --ca-certificate to wget."
+msgstr ""
+"verwendet die angegebene CA-Datei anstelle des vorgegebenen CA-Bündels für "
+"Curl/Wget. Es wird als --cacert an Curl und als --ca-certificate an Wget "
+"übergeben."
+
+#. type: =item
+#: ../scripts/rmadison.pl:389
+msgid "B<RMADISON_SSL_CA_PATH>=I<PATH>"
+msgstr "B<RMADISON_SSL_CA_PATH>=I<PFAD>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:391
+msgid ""
+"Use the specified CA directory instead of the default CA bundle for curl/"
+"wget, passed as --capath to curl, and as --ca-directory to wget."
+msgstr ""
+"verwendet das angegebene CA-Verzeichnis anstelle des vorgegebenen CA-Bündels "
+"für Curl/Wget. Es wird als --capath an Curl und als --ca-directory an Wget "
+"übergeben."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:398
+msgid "B<dak ls> was formerly called B<madison>."
+msgstr "B<dak ls> wurde früher B<madison> genannt."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:400
+msgid ""
+"The protocol used by rmadison is fairly simple, the CGI accepts query the "
+"parameters a, b, c, g, G, r, s, S, t, and package. The parameter text is "
+"passed to enable plain-text output."
+msgstr ""
+"Das von Rmadison benutzte Protokoll ist recht einfach, das CGI akzeptiert "
+"die Parameter »a«, »b«, »c«, »g«, »G«, »r«, »s«, »S«, »t« und »package«. Der "
+"Parameter »text« wird übergeben, um Klartextausgabe zu aktivieren."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:406
+msgid "B<dak>(1), B<madison-lite>(1)"
+msgstr "B<dak>(1), B<madison-lite>(1)"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:410
+msgid ""
+"rmadison and https://qa.debian.org/madison.php were written by Christoph "
+"Berg <myon@debian.org>. dak was written by James Troup <james@nocrew.org>, "
+"Anthony Towns <ajt@debian.org>, and others."
+msgstr ""
+"Rmadison und https://qa.debian.org/madison.php wurden von Christoph Berg "
+"<myon@debian.org> geschrieben. Dak wurde von James Troup <james@nocrew.org>, "
+"Anthony Towns <ajt@debian.org> und anderen verfasst."
+
+#. type: textblock
+#: ../scripts/sadt.pod:19
+msgid "sadt - simple DEP-8 test runner"
+msgstr "sadt - einfaches DEP-8-Test-Ausführungsprogramm"
+
+#. type: textblock
+#: ../scripts/sadt.pod:23
+msgid "B<sadt> [I<options>] [I<test-name>...]"
+msgstr "B<sadt> [I<Optionen>] [I<Testname> …]"
+
+#. type: textblock
+#: ../scripts/sadt.pod:27
+msgid ""
+"B<sadt> is a simple implementation of DEP-8 (“automatic as-installed package "
+"testing”) test runner."
+msgstr ""
+"B<sadt> ist eine einfache Implementierung eines DEP-8-Test-"
+"Ausführungsprogramms (»automatische, installationsartige Paketprüfung«)."
+
+#. type: textblock
+#: ../scripts/sadt.pod:30
+msgid ""
+"It is your responsibility to satisfy tests' dependencies. B<sadt> won't "
+"attempt to install any missing packages. If a test's dependencies cannot be "
+"satisfied by packages that are currently installed, the test will be skipped."
+msgstr ""
+"Sie sind verantwortlich dafür, dass die Abhängigkeiten der Tests erfüllt "
+"sind. B<sadt> wird nicht versuchen, die fehlenden Pakete zu installieren. "
+"Falls Abhängigkeiten eines Tests nicht durch derzeit installierte Pakete "
+"erfüllt werden können, wird der Test übersprungen."
+
+#. type: textblock
+#: ../scripts/sadt.pod:34
+msgid ""
+"B<sadt> won't build the package even if a test declares the B<build-needed> "
+"restriction. Instead, such a test will be skipped. However, you can build "
+"the package manually, and then tell B<sadt> to assume that the package is "
+"already built using the B<-b>/B<--built-source-tree>."
+msgstr ""
+"B<sadt> wird das Paket nicht einmal dann bauen, wenn ein Test die "
+"Restriktion B<build-needed> deklariert. Stattdessen wird ein derartiger Test "
+"übersprungen. Sie können jedoch das Paket manuell bauen und B<sadt> dann "
+"mitteilen, dass es davon ausgehen kann, dass das Paket bereits mittels B<-b>/"
+"B<--built-source-tree> gebaut wurde."
+
+#. type: textblock
+#: ../scripts/sadt.pod:39
+msgid ""
+"B<sadt> doesn't implement any virtualisation arrangements, therefore it "
+"skips tests that declare the B<breaks-testbed> restriction."
+msgstr ""
+"B<sadt> implementiert keine Virtualisierungsmaßnahmen, daher überspringt es "
+"Tests, die die Restriktion B<breaks-testbed> deklarieren."
+
+#. type: textblock
+#: ../scripts/sadt.pod:48
+msgid "Make the output more verbose."
+msgstr "erzeugt eine detailliertere Ausgabe."
+
+#. type: =item
+#: ../scripts/sadt.pod:50
+msgid "B<-b>, B<--built-source-tree>"
+msgstr "B<-b>, B<--build-source-tree>"
+
+#. type: textblock
+#: ../scripts/sadt.pod:52
+msgid ""
+"Assume that the source tree is already built. This is equivalent to B<--"
+"ignore-restriction=build-needed>."
+msgstr ""
+"Es wird angenommen, dass der Quellverzeichnisbaum bereits gebaut wurde. Dies "
+"entspricht B<--ignore-restriction=build-needed>."
+
+#. type: =item
+#: ../scripts/sadt.pod:55
+msgid "B<--run-autodep8>, B<--no-run-autodep8>"
+msgstr "B<--run-autodep8>, B<--no-run-autodep8>"
+
+#. type: textblock
+#: ../scripts/sadt.pod:57
+msgid ""
+"Control whether to run autodep8(1) to determine the tests to run. By "
+"default, autodep8 will be run."
+msgstr ""
+
+#. type: =item
+#: ../scripts/sadt.pod:60
+msgid "B<--ignore-restriction>=I<restriction>"
+msgstr "B<--ignore-restriction>=I<Restriktion>"
+
+#. type: textblock
+#: ../scripts/sadt.pod:62
+msgid "Don't skip tests that declare the I<restriction>."
+msgstr "überspringt keine Tests, die die I<Restriktion> deklarieren."
+
+#. type: =head1
+#: ../scripts/sadt.pod:70
+msgid "CONFORMING TO"
+msgstr "KONFORM ZU"
+
+#. type: textblock
+#: ../scripts/sadt.pod:72
+msgid "README.package-tests shipped by autopkgtest 2.7.2"
+msgstr "README.package-tests, bei Autopkgtest 2.7.2 mitgeliefert"
+
+#. type: textblock
+#: ../scripts/sadt.pod:76
+msgid "B<adt-run>(1)"
+msgstr "B<adt-run>(1)"
+
+#. type: textblock
+#: ../scripts/salsa.pl:5
+msgid "salsa - tool to manipulate salsa repositories and group members"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:9
+#, no-wrap
+msgid ""
+" # salsa <command> <args>\n"
+" salsa whoami\n"
+" salsa search_project devscripts\n"
+" salsa search_project qa/qa\n"
+" salsa search_group js-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_user yadd\n"
+" salsa push_repo . --group js-team --kgb --irc devscripts --tagpending\n"
+" salsa update_repo node-mongodb --group js-team --disable-kgb --desc \\\n"
+" --desc-pattern \"Package %p\"\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+" salsa update_safe --all --desc --desc-pattern \"Debian package %p\" \\\n"
+" --group js-team\n"
+" salsa checkout node-mongodb --group js-team\n"
+" salsa checkout js-team/node-mongodb\n"
+" salsa add_user developer foobar --group-id 2665\n"
+" salsa update_user maintainer foobar --group js-team\n"
+" salsa del_user foobar --group js-team\n"
+" salsa last_ci_status js-team/nodejs\n"
+" salsa pipelines js-team/nodejs\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:32
+msgid ""
+"B<salsa> is designed to create and configure repositories on L<https://salsa."
+"debian.org> and manage users of groups."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:35
+msgid ""
+"A Salsa token is required, except for search* commands, and must be set in "
+"command line I<(see below)>, or in your configuration file I<(~/."
+"devscripts)>:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:38
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=abcdefghi\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:40 ../scripts/salsa.pl:44 ../scripts/salsa.pl:509
+#: ../scripts/salsa.pl:538
+msgid "or"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:42
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=`cat ~/.token`\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:46
+#, no-wrap
+msgid ""
+" SALSA_TOKEN_FILE=~/.dpt.conf\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:48
+msgid ""
+"If you choose to link another file using SALSA_TOKEN_FILE, it must contain a "
+"line with one of (no differences):"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:51
+#, no-wrap
+msgid ""
+" <anything>SALSA_PRIVATE_TOKEN=xxxx\n"
+" <anything>SALSA_TOKEN=xxxx\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:54
+msgid ""
+"This allows for example to use dpt(1) configuration file (~/.dpt.conf) which "
+"contains:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:57
+#, no-wrap
+msgid ""
+" DPT_SALSA_PRIVATE_TOKEN=abcdefghi\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:61
+msgid "Managing users and groups"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:65
+msgid "B<join>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:67
+msgid "Request access to a group."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:69
+#, no-wrap
+msgid ""
+" salsa join js-team\n"
+" salsa join --group js-team\n"
+" salsa join --group-id 1234\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:73
+msgid "B<add_user>"
+msgstr "B<add_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:75
+msgid "Add a user to a group."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:77
+#, no-wrap
+msgid ""
+" salsa --group js-group add_user guest foouser\n"
+" salsa --group-id 1234 add_user guest foouser\n"
+" salsa --group-id 1234 add_user maintainer 1245\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:81 ../scripts/salsa.pl:125
+msgid ""
+"First argument is the GitLab's access levels: guest, reporter, developer, "
+"maintainer, owner."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:84
+msgid "B<del_user>"
+msgstr "B<del_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:86
+msgid "Remove a user from a group"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:88
+#, no-wrap
+msgid ""
+" salsa --group js-team del_user foouser\n"
+" salsa --group-id=1234 del_user foouser\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:91
+msgid "B<list_groups>"
+msgstr "B<list_groups>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:93
+msgid ""
+"List sub groups of current one if group is set, groups of current user else."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:96
+msgid "B<group>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:98
+msgid "Show group members."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:100
+#, no-wrap
+msgid ""
+" salsa --group js-team group\n"
+" salsa --group-id 1234 group\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:103
+msgid "B<search_group>"
+msgstr "B<search_group>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:105
+msgid ""
+"Search for a group using given string. Shows group id and other information."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:108
+#, no-wrap
+msgid ""
+" salsa search_group perl-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_group 2666\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:112
+msgid "B<search_user>"
+msgstr "B<search_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:114
+msgid ""
+"Search for a user using given string. Shows user id and other information."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:116
+#, no-wrap
+msgid ""
+" salsa search_user yadd\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:118
+msgid "B<update_user>"
+msgstr "B<update_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:120
+msgid "Update user role in a group."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:122
+#, no-wrap
+msgid ""
+" salsa --group-id 1234 update_user guest foouser\n"
+" salsa --group js-team update_user maintainer 1245\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:128
+msgid "B<whoami>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:130
+msgid "Gives information on the token owner"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:132
+#, no-wrap
+msgid ""
+" salsa whoami\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:136
+msgid "Managing repositories"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:138
+msgid ""
+"One of C<--group>, C<--group-id>, C<--user> or C<--user-id> is required to "
+"manage repositories. If both are set, salsa warns and only C<--user>/C<--"
+"user-id> is used. If none is given, salsa uses current user id I<(token "
+"owner)>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:145
+msgid "B<check_repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:147
+msgid ""
+"Verify that repo(s) are well configured. It works exactly like "
+"B<update_repo> except that it does not modify anything but just lists "
+"projects not well configured with found errors."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:151
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts check_repo test\n"
+" salsa --group js-team check_repo --all\n"
+" salsa --group js-team --rename-head check_repo test1 test2 test3\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:155
+msgid "B<checkout> or B<co>"
+msgstr "B<checkout> oder B<co>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:157
+msgid ""
+"Clone repo in current dir. If directory already exists, update local repo."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:160
+#, no-wrap
+msgid ""
+" salsa --user yadd co devscripts\n"
+" salsa --group js-team co node-mongodb\n"
+" salsa co js-team/node-mongodb\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:164
+msgid ""
+"You can clone more than one repository or all repositories of a group or a "
+"user:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:167
+#, no-wrap
+msgid ""
+" salsa --user yadd co devscripts autodep8\n"
+" salsa co yadd/devscripts js-team/npm\n"
+" salsa --group js-team co --all # All js-team active repos\n"
+" salsa co --all-archived # All your repos including archived\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:172
+msgid "B<create_repo>"
+msgstr "B<create_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:174
+msgid ""
+"Create public empty project. If C<--group>/C<--group-id> is set, project is "
+"created in group directory, else in user directory."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:177
+#, no-wrap
+msgid ""
+" salsa --user yadd create_repo test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts create_repo test\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:180
+msgid "B<del_repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:182
+msgid "Delete a repository."
+msgstr "Löscht ein Depot."
+
+#. type: =item
+#: ../scripts/salsa.pl:184
+msgid "B<fork>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:186
+msgid ""
+"Forks a project in group/user repository and set \"upstream\" to original "
+"project. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:189
+#, no-wrap
+msgid ""
+" $ salsa fork js-team/node-mongodb --verbose\n"
+" ...\n"
+" salsa.pl info: node-mongodb ready in node-mongodb/\n"
+" $ cd node-mongodb\n"
+" $ git remote --verbose show\n"
+" origin git@salsa.debian.org:me/node-mongodb (fetch)\n"
+" origin git@salsa.debian.org:me/node-mongodb (push)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (fetch)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (push)\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:199
+msgid "For a group:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:201
+#, no-wrap
+msgid ""
+" salsa fork --group js-team user/node-foo\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:203
+msgid "B<forks>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:205
+msgid "List forks of project(s)."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:207
+#, no-wrap
+msgid ""
+" salsa forks qa/qa debian/devscripts\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:209 ../scripts/salsa.pl:320
+msgid ""
+"Project can be set using full path or using B<--group>/B<--group-id> or B<--"
+"user>/B<--user-id>, else it is searched in current user namespace."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:212
+msgid "B<push>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:214
+msgid ""
+"Push relevant packaging refs to origin Git remote. To be run from packaging "
+"working directory."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:217
+#, no-wrap
+msgid ""
+" salsa push\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:219
+msgid ""
+"It pushes the following refs to the configured remote for the debian-branch "
+"or, falling back, to the \"origin\" remote:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:224
+msgid "\"master\" branch (or whatever is set to debian-branch in gbp.conf)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:226
+msgid "\"upstream\" branch (or whatever is set to upstream-branch in gbp.conf)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:228
+#, fuzzy
+#| msgid "B<pristine-tar> is tried."
+msgid "\"pristine-tar\" branch"
+msgstr "B<pristine-tar> wird probiert."
+
+#. type: =item
+#: ../scripts/salsa.pl:230
+msgid "tags named \"debian/*\" (or whatever is set to debian-tag in gbp.conf)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:232
+msgid ""
+"tags named \"upstream/*\" (or whatever is set to upstream-tag in gbp.conf)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:234
+msgid "all tags, if the package's source format is \"3.0 (native)\""
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:238
+msgid "B<ls> or B<list_repos>"
+msgstr "B<ls> oder B<list_repos>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:240
+msgid ""
+"Shows projects owned by user or group. If second argument exists, search "
+"only matching projects"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:243
+#, no-wrap
+msgid ""
+" salsa --group js-team list_repos\n"
+" salsa --user yadd list_repos foo*\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:246
+msgid "B<last_ci_status> or B<ci>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:248
+msgid ""
+"Displays last continuous integration result. Use B<--verbose> to see URL of "
+"pipeline when result isn't B<success>. Unless B<--no-fail> is set, B<salsa "
+"last_ci_status> will stop on first \"failed\" status."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:252
+#, no-wrap
+msgid ""
+" salsa --group js-team last_ci_status --all --no-fail\n"
+" salsa --user yadd last_ci_status foo\n"
+" salsa last_ci_status js-team/nodejs\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:256
+msgid ""
+"This commands returns the number of \"failed\" status found. \"success\" "
+"entries are displayed using STDOUT while other are displayed I<(with "
+"details)> using STDERR. Then you can easily see only failures using:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:260
+#, no-wrap
+msgid ""
+" salsa --group js-team last_ci_status --all --no-fail >/dev/null\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:262
+msgid "B<pipeline>, B<schedule>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:264
+msgid "Control pipeline schedule"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:266
+msgid "B<pipelines>, B<schedules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:268
+msgid "Lists current pipeline schedule items."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:270
+msgid "You can use B<--no-fail> and B<--all> options here."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:272
+msgid "B<merge_request>, B<mr>"
+msgstr "B<merge_request>, B<mr>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:274
+msgid "Creates a merge request."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:276
+msgid ""
+"Suppose you created a fork using B<salsa fork>, modify some things in a new "
+"branch using one commit and want to propose it to original project I<(branch "
+"\"master\")>. You just have to launch this in source directory:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:280
+#, no-wrap
+msgid ""
+" salsa mr\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:282
+msgid "Other example:"
+msgstr "Weiteres Beispiel:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:284
+#, no-wrap
+msgid ""
+" salsa mr --mr-dst-project debian/foo --mr-dst-branch debian/master\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:286
+msgid "or simply"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:288
+#, no-wrap
+msgid ""
+" salsa mr debian/foo debian/master\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:290
+msgid ""
+"Note that unless destination project has been set using command line, "
+"B<salsa merge_request> will search it in the following order:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:295
+msgid "using GitLab API: salsa will detect from where this project was forked"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:297
+msgid "using \"upstream\" origin"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:299
+msgid "else salsa will use source project as destination project"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:303
+msgid ""
+"To force salsa to use source project as destination project, you can use "
+"\"same\":"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:306
+#, no-wrap
+msgid ""
+" salsa mr --mr-dst-project same\n"
+" # or\n"
+" salsa mr same\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:310
+msgid ""
+"New merge request will be created using last commit title and description."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:312
+msgid "See B<--mr-*> options for more."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:314
+msgid "B<merge_requests>, B<mrs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:316
+msgid "List opened merge requests for project(s)"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:318
+#, no-wrap
+msgid ""
+" salsa mrs qa/qa debian/devscripts\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:323
+msgid "B<protect_branch>"
+msgstr "B<protect_branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:325
+msgid "Protect/unprotect a branch."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:329
+msgid "Set protection"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:331
+#, no-wrap
+msgid ""
+" # project branch merge push\n"
+" salsa --group js-team protect_branch node-mongodb master m d\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:334
+msgid "\"merge\" and \"push\" can be one of:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:338
+msgid "B<o>, B<owner>: owner only"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:340
+msgid "B<m>, B<maintainer>: B<o> + maintainers allowed"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:342
+msgid "B<d>, B<developer>: B<m> + developers allowed"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:344
+msgid "B<r>, B<reporter>: B<d> + reporters allowed"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:346
+msgid "B<g>, B<guest>: B<r> + guest allowed"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:350
+msgid "Unprotect"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:352
+#, no-wrap
+msgid ""
+" salsa --group js-team protect_branch node-mongodb master no\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:356
+msgid "B<protected_branches>"
+msgstr "B<protected_branches>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:358
+msgid "List protected branches"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:360
+#, no-wrap
+msgid ""
+" salsa --group js-team protected_branches node-mongodb\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:362
+msgid "B<push_repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:364
+msgid ""
+"Create a new project from a local Debian source directory configured with "
+"git."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:367
+msgid "B<push_repo> executes the following steps:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:371
+msgid "gets project name using debian/changelog file;"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:373
+msgid "launches B<git remote add upstream ...>;"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:375
+msgid "launches B<create_repo>;"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:377
+msgid "pushes local repo."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:383
+#, no-wrap
+msgid ""
+" salsa --user yadd push_repo ./test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts push_repo .\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:386
+msgid "B<rename_branch>"
+msgstr "B<rename_branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:388
+msgid ""
+"Rename branch given in B<--source-branch> with name given in B<--dest-"
+"branch>. You can use B<--no-fail>, B<--all> and B<--all-archived> options "
+"here."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:391
+msgid "B<search>, B<search_project>, B<search_repo>"
+msgstr "B<search>, B<search_project>, B<search_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:393
+msgid ""
+"Search for a project using given string. Shows name, owner id and other "
+"information."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:396
+#, no-wrap
+msgid ""
+" salsa search devscripts\n"
+" salsa search debian/devscripts\n"
+" salsa search 18475\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:400
+msgid "B<update_repo>"
+msgstr "B<update_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:402
+msgid ""
+"Configure repo(s) using parameters given to command line. A repo name has "
+"to be given unless B<--all> or B<--all-archived> is set. Prefer to use "
+"B<update_safe>."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:406
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_repo test\n"
+" salsa --group js-team update_repo --all\n"
+" salsa --group js-team --rename-head update_repo test1 test2 test3\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:411
+msgid ""
+"By default when using B<--all>, salsa will fail on first error. If you want "
+"to continue, set B<--no-fail>. In this case, salsa will display a warning "
+"for each project that has fail but continue with next project. Then to see "
+"full errors, set B<--verbose>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:416
+msgid "B<update_safe>"
+msgstr "B<update_safe>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:418
+msgid ""
+"Launch B<check_repo> and ask before launching B<update_repo> (unless B<--"
+"yes>)."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:420
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_safe test\n"
+" salsa --group js-team update_safe --all\n"
+" salsa --group js-team --rename-head update_safe test1 test2 test3\n"
+" salsa update_safe js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:427
+msgid "Other"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:431
+msgid "B<purge_cache>"
+msgstr "B<purge_cache>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:433
+msgid "Empty local cache."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:439
+msgid "General options"
+msgstr "Allgemeine Optionen"
+
+#. type: =item
+#: ../scripts/salsa.pl:443
+msgid "B<-C>, B<--chdir>"
+msgstr "B<-C>, B<--chdir>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:445
+msgid "Change directory before launching command"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:447
+#, no-wrap
+msgid ""
+" salsa -C ~/debian co debian/libapache2-mod-fcgid\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:449
+msgid "B<--cache-file>"
+msgstr "B<--cache-file>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:451
+msgid ""
+"File to store cached values. Default to B<~/.cache/salsa.json>. An empty "
+"value disables cache."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:454
+msgid "C<.devscripts> value: B<SALSA_CACHE_FILE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:458
+msgid "Disable cache usage. Same as B<--cache-file ''>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:460 ../scripts/uscan.pl:1538
+msgid "B<--conffile>, B<--conf-file>"
+msgstr "B<--conffile>, B<--conf-file>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:462 ../scripts/uscan.pl:1540
+msgid ""
+"Add or replace default configuration files (C</etc/devscripts.conf> and C<~/."
+"devscripts>). This can only be used as the first option given on the command-"
+"line."
+msgstr ""
+"Standard-Konfigurationsdateien hinzufügen oder ersetzen (C</etc/devscripts."
+"conf> und C<~/.devscripts>). Dies kann nur als erste auf der Befehlszeile "
+"angegebene Option benutzt werden."
+
+#. type: =item
+#: ../scripts/salsa.pl:468 ../scripts/uscan.pl:1546
+msgid "replace:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:470
+#, no-wrap
+msgid ""
+" salsa --conf-file test.conf <command>...\n"
+" salsa --conf-file test.conf --conf-file test2.conf <command>...\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:473 ../scripts/uscan.pl:1550
+msgid "add:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:475
+#, no-wrap
+msgid ""
+" salsa --conf-file +test.conf <command>...\n"
+" salsa --conf-file +test.conf --conf-file +test2.conf <command>...\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:478 ../scripts/uscan.pl:1554
+msgid ""
+"If one B<--conf-file> has no C<+>, default configuration files are ignored."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:484 ../scripts/uscan.pl:1560
+msgid ""
+"Don't read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+"liest keine Konfigurationsdateien. Dies kann nur als erste auf der "
+"Befehlszeile angegebene Option benutzt werden."
+
+#. type: textblock
+#: ../scripts/salsa.pl:489
+msgid "Enable debugging output"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:491
+msgid "B<--group>"
+msgstr "B<--group>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:493
+msgid "Team to use. Use C<salsa search_group name> to find it."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:495
+msgid "If you want to use a subgroup, you have to set its full path:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:497
+#, no-wrap
+msgid ""
+" salsa --group perl-team/modules/packages check_repo lemonldap-ng\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:499
+msgid "C<.devscripts> value: B<SALSA_GROUP>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:501
+msgid ""
+"Be careful when you use B<SALSA_GROUP> in your C<.devscripts> file. Every "
+"B<salsa> command will be executed in group space, for example if you want to "
+"propose a little change in a project using B<salsa fork> + B<salsa mr>, this "
+"\"fork\" will be done in group space unless you set a B<--user>/B<--user-"
+"id>. Prefer to use an alias in your C<.bashrc> file. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:507
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --group js-team\"\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:511 ../scripts/salsa.pl:540
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --conf-file ~/.js.conf\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:513
+msgid "or to use both .devscripts and .js.conf:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:515
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --conf-file +~/.js.conf\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:517
+msgid "then you can fix B<SALSA_GROUP> in C<~/.js.conf>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:519
+msgid ""
+"To enable bash completion for your alias, add this in your .bashrc file:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:521
+#, no-wrap
+msgid ""
+" _completion_loader salsa\n"
+" complete -F _salsa_completion jsteam_admin\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:524
+msgid "B<--group-id>"
+msgstr "B<--group-id>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:526
+msgid "Group id to use. Use C<salsa search_group name> to find it."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:528
+msgid "C<.devscripts> value: B<SALSA_GROUP_ID>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:530
+msgid ""
+"Be careful when you use B<SALSA_GROUP_ID> in your C<.devscripts> file. Every "
+"B<salsa> command will be executed in group space, for example if you want to "
+"propose a little change in a project using B<salsa fork> + B<salsa mr>, this "
+"\"fork\" will be done in group space unless you set a B<--user>/B<--user-"
+"id>. Prefer to use an alias in your C<.bashrc> file. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:536
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --group-id 2666\"\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:542
+msgid "then you can fix B<SALSA_GROUP_ID> in C<~/.js.conf>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:544
+msgid "B<--help>: displays this manpage"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:546
+msgid "B<-i>, B<--info>"
+msgstr "B<-i>, B<--info>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:548
+msgid "Prompt before sensible changes."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:550
+msgid "C<.devscripts> value: B<SALSA_INFO> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:552
+msgid "B<--path>"
+msgstr "B<--path>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:554
+msgid "Repo path. Default to group or user path."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:556
+msgid "C<.devscripts> value: B<SALSA_REPO_PATH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:558
+msgid "B<--token>"
+msgstr "B<--token>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:560
+msgid "Token value (see above)."
+msgstr "Token-Wert (siehe oben)."
+
+#. type: =item
+#: ../scripts/salsa.pl:562
+msgid "B<--token-file>"
+msgstr "B<--token-file>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:564
+msgid "File to find token (see above)."
+msgstr "Datei mit Token (siehe oben)."
+
+#. type: textblock
+#: ../scripts/salsa.pl:568
+msgid ""
+"Username to use. If neither B<--group>, B<--group-id>, B<--user> or B<--user-"
+"id> is set, salsa uses current user id (corresponding to salsa private "
+"token)."
+msgstr ""
+"Benutzername. Wenn weder B<--group>, B<--group-id>, B<--user> noch B<--user-"
+"id> gesetzt sind, benutzt salsa die aktuelle Benutzer-Id (die zu dem "
+"privaten Salsa-Token gehört)."
+
+#. type: =item
+#: ../scripts/salsa.pl:571
+msgid "B<--user-id>"
+msgstr "B<--user-id>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:573
+msgid ""
+"User id to use. Use C<salsa search_user name> to find one. If neither B<--"
+"group>, B<--group-id>, B<--user> or B<--user-id> is set, salsa uses current "
+"user id (corresponding to salsa private token)."
+msgstr ""
+"Benutzer-Id. Benutzen Sie C<salsa search_user name> um eine zu finden. Wenn "
+"weder B<--group>, B<--group-id>, B<--user> noch B<--user-id> gesetzt sind, "
+"benutzt salsa die aktuelle Benutzer-Id (die zu dem privaten Salsa-Token "
+"gehört)."
+
+#. type: textblock
+#: ../scripts/salsa.pl:577
+msgid "C<.devscripts> value: B<SALSA_USER_ID>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:581
+msgid "Enable verbose output."
+msgstr "Erzeugt eine detaillierte Ausgabe."
+
+#. type: =item
+#: ../scripts/salsa.pl:583
+msgid "B<--yes>"
+msgstr "B<--yes>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:585
+msgid "Never ask for consent."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:587
+msgid "C<.devscripts> value: B<SALSA_YES> (yes/no)"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:591
+msgid "List/search repo options"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:595
+msgid "B<--archived>, B<--no-archived>"
+msgstr "B<--archived>, B<--no-archived>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:597
+msgid ""
+"Instead of looking to active projects, list or search in archived projects. "
+"Note that you can't have both archived and unarchived projects in the same "
+"request. Default: no I<(ie --no-archived)>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:601
+msgid "C<.devscripts> value: B<SALSA_ARCHIVED> (yes/no)"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:605
+msgid "Update/create repo options"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:609
+msgid "B<--all>, B<--all-archived>"
+msgstr "B<--all>, B<--all-archived>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:611
+msgid ""
+"When set, all projects of group/user are affected by command. B<--all> will "
+"filter all active projects, whereas B<--all-archived> will include active "
+"and archived projects."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:617
+msgid "B<--skip>: ignore project with B<--all> or B<--all-achived>. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:619
+#, no-wrap
+msgid ""
+" salsa update_repo --tagpending --all --skip qa --skip devscripts\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:621
+msgid ""
+"C<.devscripts> value: B<SALSA_SKIP>. To set multiples values, use spaces. "
+"Example"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:624
+#, no-wrap
+msgid ""
+" SALSA_SKIP=qa devscripts\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:626
+msgid "B<--skip-file>: ignore projects in this file (1 project per line)"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:628
+#, no-wrap
+msgid ""
+" salsa update_repo --tagpending --all --skip-file ~/.skip\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:630
+msgid "C<.devscripts> value: B<SALSA_SKIP_FILE>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:634
+msgid "B<--build-timeout>"
+msgstr "B<--build-timeout>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:636
+msgid "The maximum amount of time, in seconds, that a job can run."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:638
+msgid "Default: 3600 (60 minutes)"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:640
+#, no-wrap
+msgid ""
+" salsa update_safe myrepo --build-timeout 3600\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:642
+msgid "C<.devscripts> value: B<SALSA_BUILD_TIMEOUT>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:644
+msgid "B<--avatar-path>"
+msgstr "B<--avatar-path>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:646
+msgid ""
+"Path to an image for the project's avatar. If path value contains \"%p\", "
+"it is replaced by project name."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:649
+msgid "C<.devscripts> value: B<SALSA_AVATAR_PATH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:651
+msgid "B<--ci-config-path>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:653
+msgid ""
+"Configure configuration file path of GitLab CI. Default: empty. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:655
+#, no-wrap
+msgid ""
+" salsa update_safe --ci-config-path recipes/debian.yml@salsa-ci-team/pipeline debian/devscripts\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:657
+msgid "C<.devscripts> value: B<SALSA_CI_CONFIG_PATH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:659
+msgid "B<--desc>, B<--no-desc>"
+msgstr "B<--desc>, B<--no-desc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:661
+msgid "Configure repo description using pattern given in B<desc-pattern>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:663
+msgid "C<.devscripts> value: B<SALSA_DESC> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:665
+msgid "B<--desc-pattern>"
+msgstr "B<--desc-pattern>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:667
+msgid ""
+"Repo description pattern. Default to \"Debian package %p\". \"%p\" is "
+"replaced by repo name, while \"%P\" is replaced by repo name given in "
+"command (may contains full path)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:671
+msgid "C<.devscripts> value: B<SALSA_DESC_PATTERN>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:673
+msgid "B<--email>, B<--no-email>, B<--disable-email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:675
+msgid "Enable, ignore or disable email-on-push."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:677
+msgid "C<.devscripts> value: B<SALSA_EMAIL> (yes/ignore/no, default: ignore)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:679
+msgid "B<--email-recipient>"
+msgstr "B<--email-recipient>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:681
+msgid "Email-on-push recipient. Can be multi valued:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:683
+#, no-wrap
+msgid ""
+" $ salsa update_safe myrepo \\\n"
+" --email-recipient foo@foobar.org \\\n"
+" --email-recipient bar@foobar.org\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:687
+msgid "If recipient value contains \"%p\", it is replaced by project name."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:689
+msgid ""
+"C<.devscripts> value: B<SALSA_EMAIL_RECIPIENTS> (use spaces to separate "
+"multiples recipients)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:692
+msgid "B<--issues>"
+msgstr "B<--issues>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:694
+msgid "Set issues feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:696
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:698
+msgid "B<--repo>"
+msgstr "B<--repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:700
+msgid "Set repository feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:702
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REPO> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:704
+msgid "B<--mr>"
+msgstr "B<--mr>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:706
+msgid "Set merge requests feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:708
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:710
+msgid "B<--forks>, B<--forks-mr>"
+msgstr "B<--forks>, B<--forks-mr>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:712
+msgid "Set forking a repository feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:714
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_FORKS> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:716
+msgid "B<--lfs>"
+msgstr "B<--lfs>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:718
+msgid "Set Large File Storage (LFS) feature."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:720
+msgid "C<.devscripts> values: B<SALSA_ENABLE_LFS> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:722
+msgid "B<--packages>"
+msgstr "B<--packages>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:724
+#, fuzzy
+#| msgid "Source package name."
+msgid "Set packages feature."
+msgstr "Name des Quellpakets"
+
+#. type: textblock
+#: ../scripts/salsa.pl:726
+msgid "C<.devscripts> values: B<SALSA_ENABLE_PACKAGING> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:728
+msgid "B<--jobs>"
+msgstr "B<--jobs>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:730
+msgid "Set jobs feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:732
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_JOBS> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:734
+msgid "B<--container>"
+msgstr "B<--container>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:736
+msgid "Set container feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:738
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_CONTAINER> (yes/private/no, default: "
+"yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:740
+msgid "B<--analytics>"
+msgstr "B<--analytics>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:742
+msgid "Set analytics feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:744
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_ANALYTICS> (yes/private/no, default: "
+"yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:746
+msgid "B<--requirements>"
+msgstr "B<--requirements>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:748
+msgid "Set requirements feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:750
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REQUIREMENTS> (yes/private/no, "
+"default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:752
+msgid "B<--wiki>"
+msgstr "B<--wiki>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:754
+msgid "Set wiki feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:756
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_WIKI> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:758
+msgid "B<--snippets>"
+msgstr "B<--snippets>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:760
+msgid "Set snippets feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:762
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_SNIPPETS> (yes/private/no, default: "
+"yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:764
+msgid "B<--pages>"
+msgstr "B<--pages>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:766
+msgid "Set pages feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:768
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_PAGES> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:770
+msgid "B<--releases>"
+msgstr "B<--releases>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:772
+msgid "Set releases feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:774
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_RELEASES> (yes/private/no, default: "
+"yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:776
+msgid "B<--auto-devops>"
+msgstr "B<--auto-devops>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:778
+msgid "Set auto devops feature."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:780
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_AUTO_DEVOPS> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:782
+msgid "B<--request-acc>"
+msgstr "B<--request-acc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:784
+msgid "Set request access feature."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:786
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REQUEST_ACC> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:788
+msgid "B<--enable-remove-source-branch>, B<--disable-remove-source-branch>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:790
+msgid ""
+"Enable or disable deleting source branch option by default for all new merge "
+"requests."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:793
+msgid ""
+"C<.devscripts> values: B<SALSA_REMOVE_SOURCE_BRANCH> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:795
+msgid "B<--irc-channel>"
+msgstr "B<--irc-channel>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:797
+msgid ""
+"IRC channel for KGB or Irker. Can be used more than one time only with B<--"
+"irker>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:800
+msgid ""
+"B<Important>: channel must not include the first \"#\". If salsa finds a "
+"channel starting with \"#\", it will consider that the channel starts with 2 "
+"\"#\"!"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:803
+msgid "C<.devscript> value: B<SALSA_IRC_CHANNEL>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:805
+msgid "Multiple values must be space separated."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:807
+msgid ""
+"Since configuration files are read using B<sh>, be careful when using \"#\": "
+"you must enclose the channel with quotes, else B<sh> will consider it as a "
+"comment and will ignore this value."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:811
+msgid "B<--irker>, B<--no-irker>, B<--disable-irker>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:813
+msgid "Enable, ignore or disable Irker service"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:815
+msgid "C<.devscripts> values: B<SALSA_IRKER> (yes/ignore/no, default: ignore)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:817
+msgid "B<--irker-host>"
+msgstr "B<--irker-host>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:819
+msgid "Irker host. Default: ruprecht.snow-crash.org"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:821
+msgid "C<.devscripts> value: B<SALSA_IRKER_HOST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:823
+msgid "B<--irker-port>"
+msgstr "B<--irker-port>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:825
+msgid "Irker port. Default: empty (default value)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:827
+msgid "C<.devscripts> value: B<SALSA_IRKER_PORT>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:829
+msgid "B<--kgb>, B<--no-kgb>, B<--disable-kgb>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:831
+msgid "Enable, ignore or disable KGB webhook."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:833
+msgid "C<.devscripts> value: B<SALSA_KGB> (yes/ignore/no, default: ignore)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:835
+msgid "B<--kgb-options>"
+msgstr "B<--kgb-options>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:837
+msgid ""
+"List of KGB enabled options (comma separated). Default: issues_events, "
+"merge_requests_events, note_events, pipeline_events, push_events, "
+"tag_push_events, wiki_page_events, enable_ssl_verification"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:841
+#, no-wrap
+msgid ""
+" $ salsa update_safe debian/devscripts --kgb --irc-channel devscripts \\\n"
+" --kgb-options 'merge_requests_events,issues_events,enable_ssl_verification'\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:844
+msgid ""
+"List of available options: confidential_comments_events, "
+"confidential_issues_events, confidential_note_events, "
+"enable_ssl_verification, issues_events, job_events, merge_requests_events, "
+"note_events, pipeline_events, tag_push_events, wiki_page_events"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:849
+msgid "C<.devscripts> value: B<SALSA_KGB_OPTIONS>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:851
+msgid "B<--no-fail>"
+msgstr "B<--no-fail>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:853
+msgid ""
+"Don't stop on error when using B<update_repo> with B<--all> or B<--all-"
+"archived>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:855
+msgid "C<.devscripts> value: B<SALSA_NO_FAIL> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:857
+msgid "B<--request-access>"
+msgstr "B<--request-access>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:859
+msgid "Allow users to request member access."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:861
+msgid "C<.devscripts> value: B<SALSA_REQUEST_ACCESS> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:863
+msgid "B<--rename-head>, B<--no-rename-head>"
+msgstr "B<--rename-head>, B<--no-rename-head>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:865
+msgid ""
+"Rename HEAD branch given by B<--source-branch> into B<--dest-branch> and "
+"change \"default branch\" of project. Works only with B<update_repo>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:868
+msgid "C<.devscripts> value: B<SALSA_RENAME_HEAD> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:872
+msgid "B<--source-branch>: default \"master\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:874
+msgid "C<.devscripts> value: B<SALSA_SOURCE_BRANCH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:876
+msgid "B<--dest-branch>: default \"debian/master\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:878
+msgid "C<.devscripts> value: B<SALSA_DEST_BRANCH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:882
+msgid "B<--tagpending>, B<--no-tagpending>, B<--disable-tagpending>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:884
+msgid "Enable, ignore or disable \"tagpending\" webhook."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:886
+msgid ""
+"C<.devscripts> value: B<SALSA_TAGPENDING> (yes/ignore/no, default: ignore)"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:890
+msgid "Pipeline schedules"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:894
+msgid "B<--schedule-desc>"
+msgstr "B<--schedule-desc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:896
+msgid "Description of the pipeline schedule."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:898
+msgid "B<--schedule-ref>"
+msgstr "B<--schedule-ref>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:900
+msgid "Branch or tag name that is triggered."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:902
+msgid "B<--schedule-cron>"
+msgstr "B<--schedule-cron>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:904
+msgid "Cron schedule, for example: 0 1 * * *."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:906
+msgid "B<--schedule-tz>"
+msgstr "B<--schedule-tz>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:908
+msgid "Time zone to run cron schedule. Default: UTC"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:910
+msgid "B<--schedule-enable>, B<--schedule-disable>"
+msgstr "B<--schedule-enable>, B<--schedule-disable>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:912
+msgid "Enable/disable the pipeline schedule to run. Default: disabled"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:914
+msgid "B<--schedule-run>"
+msgstr "B<--schedule-run>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:916
+msgid ""
+"Trigger B<--schedule-desc> scheduled pipeline to run immediately. Default:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:918
+msgid "B<--schedule-delete>"
+msgstr "B<--schedule-delete>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:920
+msgid "Delete B<--schedule-desc> pipeline schedule"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:924
+msgid "Merge requests options"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:928
+msgid "B<--mr-title>"
+msgstr "B<--mr-title>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:930
+msgid "Title for merge request. Default: last commit title."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:932
+msgid "B<--mr-desc>"
+msgstr "B<--mr-desc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:934
+msgid "Description of new MR. Default:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:938
+msgid "empty if B<--mr-title> is set"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:940
+msgid "last commit description if any"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:944
+msgid "B<--mr-dst-branch> (or second command line argument)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:946
+msgid "Destination branch. Default to \"master\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:948
+msgid "B<--mr-dst-project> (or first command line argument)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:950
+msgid ""
+"Destination project. Default: project from which the current project was "
+"forked; or, if not found, \"upstream\" value found using B<git remote --"
+"verbose show>; or using source project."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:954
+msgid ""
+"If B<--mr-dst-project> is set to B<same>, salsa will use source project as "
+"destination."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:957
+msgid "B<--mr-src-branch>"
+msgstr "B<--mr-src-branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:959
+msgid "Source branch. Default: current branch."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:961
+msgid "B<--mr-src-project>"
+msgstr "B<--mr-src-project>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:963
+msgid ""
+"Source project. Default: current project found using B<git remote --verbose "
+"show>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:966
+msgid "B<--mr-allow-squash>, B<--no-mr-allow-squash>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:968
+msgid "Allow upstream project to squash your commits, this is the default."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:970
+msgid "C<.devscripts> value: B<SALSA_MR_ALLOW_SQUASH> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:972
+msgid "B<--mr-remove-source-branch>, B<--no-mr-remove-source-branch>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:974
+msgid "Remove source branch if merge request is accepted. Default: no."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:976
+msgid "C<.devscripts> value: B<SALSA_MR_REMOVE_SOURCE_BRANCH> (yes/no)"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:980
+msgid "Options to manage other Gitlab instances"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:984
+msgid "B<--api-url>"
+msgstr "B<--api-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:986
+msgid "GitLab API. Default: L<https://salsa.debian.org/api/v4>."
+msgstr "GitLab-API. Standardwert: L<https://salsa.debian.org/api/v4>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:988
+msgid "C<.devscripts> value: B<SALSA_API_URL>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:990
+msgid "B<--git-server-url>"
+msgstr "B<--git-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:992
+msgid "Default to \"git@salsa.debian.org:\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:994
+msgid "C<.devscripts> value: B<SALSA_GIT_SERVER_URL>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:996
+msgid "B<--irker-server-url>"
+msgstr "B<--irker-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:998
+msgid "Default to \"ircs://irc.oftc.net:6697/\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1000
+msgid "C<.devscripts> value: B<SALSA_IRKER_SERVER_URL>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:1002
+msgid "B<--kgb-server-url>"
+msgstr "B<--kgb-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1004
+msgid "Default to L<http://kgb.debian.net:9418/webhook/?channel=>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1006
+msgid "C<.devscripts> value: B<SALSA_KGB_SERVER_URL>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:1008
+msgid "B<--tagpending-server-url>"
+msgstr "B<--tagpending-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1010
+msgid "Default to L<https://webhook.salsa.debian.org/tagpending/>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1012
+msgid "C<.devscripts> value: B<SALSA_TAGPENDING_SERVER_URL>"
+msgstr ""
+
+#. type: =head3
+#: ../scripts/salsa.pl:1016
+msgid "Configuration file example"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1018
+msgid ""
+"Example to use salsa with L<https://gitlab.ow2.org> (group \"lemonldap-ng\"):"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:1020
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=`cat ~/.ow2-gitlab-token`\n"
+" SALSA_API_URL=https://gitlab.ow2.org/api/v4\n"
+" SALSA_GIT_SERVER_URL=git@gitlab.ow2.org:\n"
+" SALSA_GROUP_ID=34\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1025
+msgid "Then to use it, add something like this in your C<.bashrc> file:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:1027
+#, no-wrap
+msgid ""
+" alias llng_admin='salsa --conffile ~/.salsa-ow2.conf'\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1031
+msgid "B<dpt-salsa>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1035
+msgid "Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+msgstr "Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1039
+msgid "Copyright (C) 2018, Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1041
+msgid ""
+"It contains code formerly found in L<dpt-salsa> I<(pkg-perl-tools)> "
+"copyright 2018, gregor herrmann E<lt>gregoa@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1044
+msgid ""
+"This library 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."
+msgstr ""
+"Dieses Programm ist freie Software; Sie können es unter den Bedingungen der "
+"GNU General Public License, Version 2 oder (nach Ihrer Wahl) neuer, wie sie "
+"von der Free Software Foundation veröffentlicht wurde, weitergeben und/oder "
+"ändern."
+
+#. type: textblock
+#: ../scripts/salsa.pl:1049
+msgid ""
+"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."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1054
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see L<http://www.gnu.org/licenses/>."
+msgstr ""
+
+#. type: TH
+#: ../doc/suspicious-source.1:15
+#, no-wrap
+msgid "SUSPICIOUS-SOURCE"
+msgstr "SUSPICIOUS-SOURCE"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:20
+msgid ""
+"suspicious-source - search for files that do not meet the GPL's definition "
+"of \"source\" for a work"
+msgstr ""
+"suspicious-source - sucht nach Dateien, die nicht die von der GPL "
+"»Quelltext« sind."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:23
+msgid "B<suspicious-source> [I<options>]"
+msgstr "B<suspicious-source> [I<Optionen>]"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:30
+msgid ""
+"B<suspicious-source> outputs a list of files which are probably not the "
+"source form of a work. This should be run in the root of a source tree to "
+"find files which might not be, in the definition from the GNU GPL, the "
+"\"preferred form of the work for making modifications to it\"."
+msgstr ""
+"B<suspicious-source> ist ein Skript, das eine Liste von Dateien ausgibt, bei "
+"denen es sich um keine üblichen Quelldateien handelt. Dies sollte auf der "
+"obersten Ebene des Quellverzeichnisbaums ausgeführt werden, um die Dateien "
+"zu finden, die möglicherweise nicht die »diejenige Form des Werkes, die für "
+"Bearbeitungen vorzugsweise verwendet wird« sind."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:33
+msgid ""
+"The files inside version control system directories (like I<.bzr/> or I<CVS/"
+">) are not considered."
+msgstr ""
+"Die Dateien innerhalb von Verzeichnissen von Versionskontrollsystemen (wie "
+"I<.bzr/> oder I<CVS/>) werden nicht berücksichtigt."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:38 ../doc/wrap-and-sort.1:39
+msgid "Show this help message and exit."
+msgstr "zeigt diese Hilfenachricht und wird beendet."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:41
+msgid "Print more information."
+msgstr "gibt weitere Informationen aus."
+
+#. type: TP
+#: ../doc/suspicious-source.1:41
+#, no-wrap
+msgid "B<-d >I<directory>, B<--directory=>I<directory>"
+msgstr "B<-d >I<Verzeichnis>, B<--directory=>I<Verzeichnis>"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:44
+msgid ""
+"Check the files in the specified I<directory> instead of the current "
+"directory."
+msgstr "prüft die Dateien im angegebenen I<Verzeichnis> statt im aktuellen."
+
+#. type: TP
+#: ../doc/suspicious-source.1:44
+#, no-wrap
+msgid "B<-m >I<mimetype>, B<--mimetype=>I<mimetype>"
+msgstr "B<-m >I<MIME-Typ>, B<--mimetype=>I<MIME-Typ>"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:47
+msgid "Add I<mimetype> to list of white-listed MIME types."
+msgstr ""
+"fügt I<MIME-Typ> der Liste der als erlaubt aufgeführten MIME-Typen hinzu."
+
+#. type: TP
+#: ../doc/suspicious-source.1:47
+#, no-wrap
+msgid "B<-e >I<extension>, B<--extension=>I<extension>"
+msgstr "B<-e >I<Erweiterung>, B<--extension=>I<Erweiterung>"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:50
+msgid "Add I<extension> to list of white-listed extensions."
+msgstr ""
+"fügt I<Erweiterung> der Liste der als erlaubt aufgeführten Erweiterungen "
+"hinzu."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:54
+msgid ""
+"B<suspicious-source> and this manpage have been written by Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+msgstr ""
+"B<suspicious-source> und diese Handbuchseite wurden von Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt> geschrieben."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:55 ../doc/wrap-and-sort.1:102
+msgid "Both are released under the ISC license."
+msgstr "Beide wurden unter der ISC-Lizenz veröffentlicht."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:5
+msgid "svnpath - output svn url with support for tags and branches"
+msgstr ""
+"svnpath - gibt die SVN-URL mit Unterstützung für Markierungen und Zweige aus."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:9
+msgid "B<svnpath>"
+msgstr "B<svnpath>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:11
+msgid "B<svnpath tags>"
+msgstr "B<svnpath tags>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:13
+msgid "B<svnpath branches>"
+msgstr "B<svnpath branches>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:15
+msgid "B<svnpath trunk>"
+msgstr "B<svnpath trunk>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:19
+msgid "B<svnpath> is intended to be run in a Subversion working copy."
+msgstr ""
+"B<svnpath> ist dafür gedacht, in einer Arbeitskopie von Subversion "
+"ausgeführt zu werden."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:21
+msgid ""
+"In its simplest usage, B<svnpath> with no parameters outputs the svn url for "
+"the repository associated with the working copy."
+msgstr ""
+"In der einfachsten Aufrufform gibt B<svnpath> ohne Parameter die SVN-URL für "
+"das zu dieser Arbeitskopie gehörende Depot aus."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:24
+msgid ""
+"If a parameter is given, B<svnpath> attempts to instead output the url that "
+"would be used for the tags, branches, or trunk. This will only work if it's "
+"run in the top-level directory that is subject to tagging or branching."
+msgstr ""
+"Falls ein Parameter angegeben wurde, versucht B<svnpath> stattdessen die URL "
+"auszugeben, die für Markierungen, Zweige oder den Hauptzweig benutzt würde. "
+"Dies wird nur funktionieren, falls es auf der obersten Verzeichnisebene "
+"ausgeführt wird, welche Gegenstand des Markierens oder Verzweigens ist."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:28
+msgid ""
+"For example, if you want to tag what's checked into Subversion as version "
+"1.0, you could use a command like this:"
+msgstr ""
+"Falls Sie zum Beispiel markieren möchten, was in Subversion als Version 1.0 "
+"eingecheckt wurde, könnten Sie einen Befehl wie diesen verwenden:"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:31
+#, no-wrap
+msgid ""
+" svn cp $(svnpath) $(svnpath tags)/1.0\n"
+"\n"
+msgstr ""
+" svn cp $(svnpath) $(svnpath tags)/1.0\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:33
+msgid ""
+"That's much easier than using svn info to look up the repository url and "
+"manually modifying it to derive the url to use for the tag, and typing in "
+"something like this:"
+msgstr ""
+"Dies ist viel einfacher, als »svn info« zu benutzen, um die Depot-URL "
+"nachzuschlagen und sie manuell zu ändern, um die URL abzuleiten, die für die "
+"Markierung verwendet wird und etwas wie das folgende zu tippen:"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:37
+#, no-wrap
+msgid ""
+" svn cp svn+ssh://my.server.example/svn/project/trunk svn+ssh://my.server.example/svn/project/tags/1.0\n"
+"\n"
+msgstr ""
+" svn cp svn+ssh://my.server.example/svn/project/trunk svn+ssh://my.server.example/svn/project/tags/1.0\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:39
+msgid ""
+"svnpath uses a simple heuristic to convert between the trunk, tags, and "
+"branches paths. It replaces the first occurrence of B<trunk>, B<tags>, or "
+"B<branches> with the name of what you're looking for. This will work ok for "
+"most typical Subversion repository layouts."
+msgstr ""
+"svnpath benutzt eine einfache Entscheidungsregel für Konvertierungen "
+"zwischen den Hauptzweig-, Markierungs- und Nebenzweigpfaden. Es ersetzt das "
+"erste Auftreten von B<trunk>, B<tags> oder B<branches> durch den Namen, nach "
+"dem Sie suchen. Dies wird für die Layouts der typischsten Subversion-Depots "
+"gut funktionieren."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:44
+msgid ""
+"If you have an atypical layout and it does not work, you can add a F<~/."
+"svnpath> file. This file is perl code, which can modify the path in $url. "
+"For example, the author uses this file:"
+msgstr ""
+"Falls Sie ein untypisches Layout verwenden und es nicht funktioniert, können "
+"Sie eine F<~/.svnpath>-Datei hinzufügen. Diese Datei ist Perl-Code, der den "
+"Pfad in $url ändern kann. Für diese Datei benutzte der Autor beispielsweise"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:48
+#, no-wrap
+msgid ""
+" #!/usr/bin/perl\n"
+" # svnpath personal override file\n"
+"\n"
+msgstr ""
+" #!/usr/bin/perl\n"
+" # Svnpath persönliche Datei zum Überschreiben\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:51
+#, no-wrap
+msgid ""
+" # For d-i I sometimes work from a full d-i tree branch. Remove that from\n"
+" # the path to get regular tags or branches directories.\n"
+" $url=~s!d-i/(rc|beta)[0-9]+/!!;\n"
+" $url=~s!d-i/sarge/!!;\n"
+" 1\n"
+"\n"
+msgstr ""
+" # Für d-i arbeite ich manchmal an einem vollständigen d-i-Baumzweig.\n"
+" # Entfernen Sie dies vom Pfad, um reguläre Markierungen und\n"
+" # Zweigverzeichnisse zu erhalten.\n"
+" $url=~s!d-i/(rc|beta)[0-9]+/!!;\n"
+" $url=~s!d-i/sarge/!!;\n"
+" 1\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:94
+msgid "GPL version 2 or later"
+msgstr "GPL Version 2 oder später"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:98
+msgid "Joey Hess <joey@kitenet.net>"
+msgstr "Joey Hess <joey@kitenet.net>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:82
+msgid ""
+"tagpending - tags bugs that are to be closed in the latest changelog as "
+"pending"
+msgstr ""
+"tagpending - markiert Fehler, die im neuesten Changelog geschlossen werden "
+"sollen, als anstehend."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:86
+msgid "B<tagpending> [I<options>]"
+msgstr "B<tagpending> [I<Optionen>]"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:90
+msgid ""
+"B<tagpending> parses debian/changelog to determine which bugs would be "
+"closed if the package were uploaded. Each bug is then marked as pending, "
+"using B<bts>(1) if it is not already so."
+msgstr ""
+"B<tagpending> wertet debian/changelog aus, um zu bestimmen, welche Fehler "
+"geschlossen würden, falls das Paket hochgeladen wird. Jeder Fehler wird dann "
+"mittels B<bts>(1) als anstehend (pending) markiert, falls er es nicht "
+"bereits ist."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:100
+msgid "Check whether any bugs require tagging, but do not actually do so."
+msgstr ""
+"prüft, ob irgendwelche Fehler ein Markieren erfordern, markiert dann jedoch "
+"nicht."
+
+#. type: =item
+#: ../scripts/tagpending.pl:102
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:104
+msgid "Do not output any messages."
+msgstr "gibt keine Nachrichten aus."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:108
+msgid "List each bug checked and tagged in turn."
+msgstr "führt der Reihe nach jeden geprüften und markierten Fehler auf."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:112
+msgid "Do not query the BTS, but (re)tag all bugs closed in the changelog."
+msgstr ""
+"fragt nicht die Fehlerdatenbank ab, markiert aber (erneut) alle im Changelog "
+"geschlossenen Fehler."
+
+#. type: =item
+#: ../scripts/tagpending.pl:114
+msgid "B<--comments>"
+msgstr "B<--comments>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:116
+msgid ""
+"Include the changelog header line and the entries relating to the tagged "
+"bugs as comments in the generated mail. This is the default."
+msgstr ""
+"fügt der erzeugten E-Mail die Changelog-Kopfzeile und die Einträge, die sich "
+"auf die markierten Fehler beziehen, als Kommentare hinzu. Dies ist die "
+"Voreinstellung."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:119
+msgid ""
+"Note that when used in combination with B<--to>, the header line output will "
+"always be that of the most recent version."
+msgstr ""
+"Beachten Sie, dass die Kopfzeilenausgabe, wenn sie in Kombination mit B<--"
+"to> benutzt wird, immer die der aktuellsten Version sein wird."
+
+#. type: =item
+#: ../scripts/tagpending.pl:122
+msgid "B<--no-comments>"
+msgstr "B<--no-comments>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:124
+msgid "Do not include changelog entries in the generated mail."
+msgstr "Die erzeugte E-Mail beinhaltet keine Changelog-Einträge."
+
+#. type: =item
+#: ../scripts/tagpending.pl:126
+msgid "B<-c>, B<--confirm>"
+msgstr "B<-c>, B<--confirm>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:128
+msgid "Tag bugs as both confirmed and pending."
+msgstr ""
+"markiert Fehler sowohl als bestätigt (confirmed) als auch als anstehend "
+"(pending)."
+
+#. type: =item
+#: ../scripts/tagpending.pl:130
+msgid "B<-t>, B<--to> I<version>"
+msgstr "B<-t>, B<--to> I<Version>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:132
+msgid "Parse changelogs for all versions strictly greater than I<version>."
+msgstr ""
+"wertet Changelogs für alle Versionen aus, die echt größer als I<Version> "
+"sind."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:134
+msgid "Equivalent to B<dpkg-parsechangelog>'s B<-v> option."
+msgstr "entspricht der Option B<-v> von B<dpkg-parsechangelog>."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:138
+msgid ""
+"Display the message which would be sent to the BTS and, except when B<--"
+"noact> was used, prompt for confirmation before sending it."
+msgstr ""
+"zeigt die Nachricht, die an die Fehlerdatenbank gesandt würde, und fragt, "
+"wenn nicht B<--noact> verwendet wurde, nach einer Bestätigung, bevor sie "
+"versandt wird."
+
+#. type: =item
+#: ../scripts/tagpending.pl:141
+msgid "B<-w>, B<--wnpp>"
+msgstr "B<-w>, B<--wnpp>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:143
+msgid ""
+"For each bug that does not appear to belong to the current package, check "
+"whether it is filed against wnpp. If so, tag it. This allows e.g. ITAs and "
+"ITPs closed in an upload to be tagged."
+msgstr ""
+"prüft für jeden Fehler, der nicht zum aktuellen Paket zu gehören scheint, ob "
+"er gegen WNPP eingereicht wurde. Falls dies so ist, wird er markiert. Dies "
+"ermöglicht z.B., dass ITAs und ITPs markiert werden, die durch ein Hochladen "
+"geschlossen werden."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:151
+msgid "B<bts>(1) and B<dpkg-parsechangelog>(1)"
+msgstr "B<bts>(1) und B<dpkg-parsechangelog>(1)"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:427
+msgid ""
+"This program is Copyright 2008 by Adam D. Barratt <adam@adam-barratt.org.uk>."
+msgstr ""
+"Dieses Programm unterliegt dem Copyright 2008 von Adam D. Barratt <adam@adam-"
+"barratt.org.uk>."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:430
+msgid ""
+"The shell script tagpending, on which this program is based, is Copyright "
+"2004 by Joshua Kwan <joshk@triplehelix.org> with changes copyright 2004-7 by "
+"their respective authors."
+msgstr ""
+"Das Shell-Skript Tagpending, auf dem dieses Programm basiert, unterliegt dem "
+"Copyright 2004 von Joshua Kwan <joshk@triplehelix.org> mit Änderungen, die "
+"dem Copyright 2004-2007 ihrer jeweiligen Autoren unterliegen."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:25
+msgid "transition-check - check a package list for involvement in transitions"
+msgstr ""
+"transition-check - prüft, ob eine Paketliste an Übergängen beteiligt ist"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:29
+msgid "B<transition-check> B<--help>|B<--version>"
+msgstr "B<transition-check> B<--help>|B<--version>"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:31
+msgid ""
+"B<transition-check> [B<-f>|B<--filename=>I<FILENAME>] [I<source package "
+"list>]"
+msgstr ""
+"B<transition-check> [B<-f>|B<--filename=>I<DATEINAME>] [I<Quellpaketliste>]"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:35
+msgid ""
+"B<transition-check> checks whether any of the listed source packages are "
+"involved in a transition for which uploads to unstable are currently blocked."
+msgstr ""
+"B<transition-check> prüft, ob irgendeins der aufgeführten Pakete an einem "
+"Übergang beteiligt ist, aufgrund dessen das Hochladen nach Unstable derzeit "
+"gesperrt ist."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:39
+msgid ""
+"If neither a filename nor a list of packages is supplied, B<transition-"
+"check> will use the source package name from I<debian/control>."
+msgstr ""
+"Falls weder ein Dateiname noch eine Paketliste mitgegeben wurde, wird "
+"B<transition-check> den Quellpaketnamen aus I<debian/control> verwenden."
+
+#. type: =item
+#: ../scripts/transition-check.pl:46
+msgid "B<-f>, B<--filename=>I<filename>"
+msgstr "B<-f>, B<--filename=>I<Dateiname>"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:48
+msgid ""
+"Read a source package name from I<filename>, which should be a Debian "
+"package control file or I<.changes> file, and add that package to the list "
+"of packages to check."
+msgstr ""
+"liest den Quellpaketnamen aus I<Dateiname>, die eine Debian-Paketsteuerdatei "
+"oder eine I<.changes>-Datei sein sollte und fügt dieses Paket der Paketliste "
+"hinzu, die geprüft werden soll."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:56
+msgid ""
+"The exit status indicates whether any of the packages examined were found to "
+"be involved in a transition."
+msgstr ""
+"Der Exit-Status gibt an, ob bei irgendeinem der untersuchten Pakete "
+"herausgefunden wurde, dass es an einem Übergang beteiligt ist."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:63
+msgid ""
+"Either B<--help> or B<--version> was used, or none of the packages examined "
+"was involved in a transition."
+msgstr ""
+"Entweder wurde B<--help> oder B<--version> verwendet oder keines der "
+"untersuchten Pakete war an einem Übergang beteiligt."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:68
+msgid "At least one package examined is involved in a current transition."
+msgstr ""
+"Mindestens eines der untersuchten Pakete ist an einem aktuellen Übergang "
+"beteiligt."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:74
+msgid ""
+"This code is copyright by Adam D. Barratt <I<adam@adam-barratt.org.uk>>, all "
+"rights reserved."
+msgstr ""
+"Dieser Code unterliegt dem Copyright von Adam D. Barratt <I<adam@adam-"
+"barratt.org.uk>>, alle Rechte vorbehalten."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:83
+msgid "Adam D. Barratt <I<adam@adam-barratt.org.uk>>"
+msgstr "Adam D. Barratt <I<adam@adam-barratt.org.uk>>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:36
+msgid "uscan - scan/watch upstream sources for new releases of software"
+msgstr ""
+"uscan - durchsucht/beobachtet Quellen der Ursprungsautoren nach neuen "
+"Veröffentlichungen der Software"
+
+#. type: textblock
+#: ../scripts/uscan.pl:40
+msgid "B<uscan> [I<options>] [I<path>]"
+msgstr "B<uscan> [I<Optionen>] [I<Pfad>]"
+
+#. type: textblock
+#: ../scripts/uscan.pl:44
+#, fuzzy
+#| msgid ""
+#| "For basic usage, B<uscan> is executed without any arguments from the root "
+#| "of the Debianized source tree where you see the F<debian/> directory. "
+#| "Then typically the following happens:"
+msgid ""
+"For basic usage, B<uscan> is executed without any arguments from the root of "
+"the Debianized source tree where you see the F<debian/> directory, or a "
+"directory containing multiple source trees."
+msgstr ""
+"Für den grundlegenden Gebrauch wird B<uscan> ohne jegliche Argumente von der "
+"Wurzel des debianisierten Quellverzeichnisbaums ausgeführt, wo Sie das "
+"F<debian/>-Verzeichnis sehen. Dann geschieht üblicherweise Folgendes:"
+
+#. type: textblock
+#: ../scripts/uscan.pl:48
+msgid ""
+"Unless --watchfile is given, B<uscan> looks recursively for valid source "
+"trees starting from the current directory (see the below section L<Directory "
+"name checking> for details)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:52
+msgid "For each valid source tree found, typically the following happens:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:56
+msgid ""
+"* B<uscan> reads the first entry in F<debian/changelog> to determine the "
+"source package name I<< <spkg> >> and the last upstream version."
+msgstr ""
+"* B<uscan> liest den ersten Eintrag in F<debian/changelog>, um den Namen des "
+"Quellpakets I<< <Quellpaket> >> und die neueste Version der Ursprungsautoren "
+"zu bestimmen."
+
+#. type: =item
+#: ../scripts/uscan.pl:59
+msgid ""
+"* B<uscan> process the watch lines F<debian/watch> from the top to the "
+"bottom in a single pass."
+msgstr ""
+"* B<uscan> verarbeitet die Watch-Zeilen F<debian/watch> von oben nach unten "
+"in einem einzigen Durchlauf."
+
+#. type: =item
+#: ../scripts/uscan.pl:64
+msgid ""
+"* B<uscan> downloads a web page from the specified I<URL> in F<debian/watch>."
+msgstr ""
+"* B<uscan> lädt eine Web-Seite von der in F<debian/watch> angegebenen I<URL> "
+"herunter."
+
+#. type: =item
+#: ../scripts/uscan.pl:67
+msgid ""
+"* B<uscan> extracts hrefs pointing to the upstream tarball(s) from the web "
+"page using the specified I<matching-pattern> in F<debian/watch>."
+msgstr ""
+"* B<uscan> extrahiert Hrefs, die auf Tarbälle der Ursprungsautoren von der "
+"durch I<Suchmuster> in F<debian/watch> angegebenen Web-Seite zeigen."
+
+#. type: =item
+#: ../scripts/uscan.pl:70
+msgid ""
+"* B<uscan> downloads the upstream tarball with the highest version newer "
+"than the last upstream version."
+msgstr ""
+"* B<uscan> lädt den Tarball der Ursprungsautoren mit der höchsten Version, "
+"die neuer ist, als die letzte Version der Ursprungsautoren, herunter."
+
+#. type: =item
+#: ../scripts/uscan.pl:73
+msgid ""
+"* B<uscan> saves the downloaded tarball to the parent B<../> directory: "
+"I<< ../<upkg>-<uversion>.tar.gz >>"
+msgstr ""
+"* B<uscan> speichert den heruntergeladenen Tarball ins übergeordnete B<../> "
+"Verzeichnis: I<< ../<Ursprungsautorenpaket>-<neueste-"
+"Ursprungsautorenversion>.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:76
+msgid ""
+"* B<uscan> invokes B<mk-origtargz> to create the source tarball: I<< ../"
+"<spkg>_<oversion>.orig.tar.gz >>"
+msgstr ""
+"* B<uscan> ruft B<mk-origtargz> auf, um den Quell-Tarball zu erstellen: "
+"I<< ../<Quellpaket>_<Originalversion>.orig.tar.gz >>"
+
+# https://raphaelhertzog.com/2010/09/07/how-to-use-multiple-upstream-
+# tarballs-in-debian-source-packages/
+#. type: =item
+#: ../scripts/uscan.pl:81
+msgid ""
+"* For a multiple upstream tarball (MUT) package, the secondary upstream "
+"tarball will instead be named I<< ../<spkg>_<oversion>.orig-<component>.tar."
+"gz >>."
+msgstr ""
+"* Bei einem Paket aus mehreren Tarbällen der Ursprungsautoren (MUT) wird der "
+"untergeordnete Tarball der Ursprungsautoren stattdessen I<< ../"
+"<Quellpaket>_<Originalversion>.orig-<Komponente>.tar.gz >> genannt."
+
+#. type: =item
+#: ../scripts/uscan.pl:86
+msgid "* Repeat until all lines in F<debian/watch> are processed."
+msgstr ""
+"* Dies wird wiederholt, bis alle Zeilen in F<debian/watch> verarbeitet "
+"wurden."
+
+#. type: =item
+#: ../scripts/uscan.pl:90
+msgid ""
+"* B<uscan> invokes B<uupdate> to create the Debianized source tree: I<< ../"
+"<spkg>-<oversion>/* >>"
+msgstr ""
+"* B<uscan> ruft B<uupdate> auf, um den an Debian angepassten "
+"Quellverzeichnisbaum zu erstellen: I<< ../<Quellpaket>-<Originalversion>/* >>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:95
+msgid "Please note the following."
+msgstr "Bitte beachten Sie Folgendes:"
+
+#. type: =item
+#: ../scripts/uscan.pl:99
+#, fuzzy
+#| msgid ""
+#| "* For simplicity, the compression method used in examples is B<gzip> with "
+#| "B<.gz> suffix. Other methods such as B<xz>, B<bzip2>, and B<lzma> with "
+#| "corresponding B<xz>, B<bz2>, and B<lzma> suffixes may also be used."
+msgid ""
+"* For simplicity, the compression method used in examples is B<gzip> with B<."
+"gz> suffix. Other methods such as B<xz>, B<bzip2>, and B<lzma> with "
+"corresponding B<xz>, B<bz2> and B<lzma> suffixes may also be used."
+msgstr ""
+"Der Einfachheit halber wird in den Beispielen die Komprimierungsmethode "
+"B<gzip> mit der Endung B<.gz> benutzt. Es können ebenso andere Methoden wie "
+"etwa B<xz>, B<bzip2> und B<lzma> mit den entsprechenden Endungen B<xz>, "
+"B<bz2> und B<lzma> verwendet werden."
+
+#. type: =item
+#: ../scripts/uscan.pl:103
+msgid ""
+"* The new B<version=4> enables handling of multiple upstream tarball (MUT) "
+"packages but this is a rare case for Debian packaging. For a single "
+"upstream tarball package, there is only one watch line and no I<< ../"
+"<spkg>_<oversion>.orig-<component>.tar.gz >> ."
+msgstr ""
+"* Die neue B<Version=4> aktiviert die Behandlung von Paketen mit mehreren "
+"Tarbällen der Ursprungsautoren (MUT), dies ist aber ein seltener Fall bei "
+"der Debian-Paketierung. Für ein einzelnes Tarball-Paket der Ursprungsautoren "
+"gibt es nur eine Watch-Zeile und kein I<< ../<Quellpaket>_<Originalversion>."
+"orig-<Komponente>.tar.gz >> ."
+
+#. type: =item
+#: ../scripts/uscan.pl:108
+msgid ""
+"* B<uscan> with the B<--verbose> option produces a human readable report of "
+"B<uscan>'s execution."
+msgstr ""
+"* B<uscan> erzeugt mit der Option B<--verbose> einen für Menschen lesbaren "
+"Bericht über die Ausführung von B<uscan>."
+
+#. type: =item
+#: ../scripts/uscan.pl:111
+msgid ""
+"* B<uscan> with the B<--debug> option produces a human readable report of "
+"B<uscan>'s execution including internal variable states."
+msgstr ""
+"* B<uscan> erzeugt mit der Option B<--debug> einen für Menschen lesbaren "
+"Bericht über die Ausführung von B<uscan> einschließlich der Status interner "
+"Variablen."
+
+#. type: =item
+#: ../scripts/uscan.pl:114
+#, fuzzy
+#| msgid ""
+#| "* B<uscan> with the B<--debug> option produces a human readable report of "
+#| "B<uscan>'s execution including internal variable states."
+msgid ""
+"* B<uscan> with the B<--extra-debug> option produces a human readable report "
+"of B<uscan>'s execution including internal variable states and remote "
+"content during \"search\" step."
+msgstr ""
+"* B<uscan> erzeugt mit der Option B<--debug> einen für Menschen lesbaren "
+"Bericht über die Ausführung von B<uscan> einschließlich der Status interner "
+"Variablen."
+
+#. type: =item
+#: ../scripts/uscan.pl:118
+msgid ""
+"* B<uscan> with the B<--dehs> option produces an upstream package status "
+"report in XML format for other programs such as the Debian External Health "
+"System."
+msgstr ""
+"* B<uscan> erzeugt mit der Option B<--dehs> einen Bericht über den "
+"Paketstatus der Ursprungsautoren im XML-Format für andere Programme, wie das "
+"Debian External Health System."
+
+#. type: =item
+#: ../scripts/uscan.pl:122
+msgid ""
+"* The primary objective of B<uscan> is to help identify if the latest "
+"version upstream tarball is used or not; and to download the latest upstream "
+"tarball. The ordering of versions is decided by B<dpkg --compare-versions>."
+msgstr ""
+"* Der vorrangige Zweck von B<uscan> ist es, festzustellen, ob die neueste "
+"Version des Tarballs der Ursprungsautoren verwendet wird oder nicht und den "
+"neuesten Tarball der Ursprungsautoren herunterzuladen. Die Ordnung der "
+"Versionen wird durch B<dpkg --compare-versions> festgelegt."
+
+#. type: =item
+#: ../scripts/uscan.pl:126
+msgid ""
+"* B<uscan> with the B<--safe> option limits the functionality of B<uscan> to "
+"its primary objective. Both the repacking of downloaded files and updating "
+"of the source tree are skipped to avoid running unsafe scripts. This also "
+"changes the default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+"* B<uscan> beschränkt mit der Option B<--safe> seine Funktionalität auf "
+"seinen vorrangigen Zweck. Sowohl das erneute Packen heruntergeladener "
+"Dateien als auch das Aktualisieren des Quellverzeichnisbaums werden "
+"übersprungen, um die Ausführung unsicherer Skripte zu vermeiden. Dies ändert "
+"außerdem die Voreinstellung auf B<--no-download> und B<--skip-signature>."
+
+#. type: =head1
+#: ../scripts/uscan.pl:133
+msgid "FORMAT OF THE WATCH FILE"
+msgstr "FORMAT DER WATCH-DATEI"
+
+#. type: textblock
+#: ../scripts/uscan.pl:135
+msgid ""
+"The current version 4 format of F<debian/watch> can be summarized as follows:"
+msgstr ""
+"Das derzeitig Format der Version 4 von F<debian/watch> kann wie folgt "
+"zusammengefasst werden"
+
+#. type: =item
+#: ../scripts/uscan.pl:139
+msgid "* Leading spaces and tabs are dropped."
+msgstr "* Führende Leerzeichen und Tabulatoren werden weggelassen."
+
+#. type: =item
+#: ../scripts/uscan.pl:141
+msgid "* Empty lines are dropped."
+msgstr "* Leere Zeilen werden weggelassen."
+
+# http://www.zeichen.tv/
+#. type: =item
+#: ../scripts/uscan.pl:143
+msgid "* A line started by B<#> (hash) is a comment line and dropped."
+msgstr ""
+"* Eine Zeile, die mit B<#> (Doppelkreuz) beginnt, ist eine Kommentarzeile "
+"und wird weggelassen."
+
+#. type: =item
+#: ../scripts/uscan.pl:145
+msgid ""
+"* A single B<\\> (back slash) at the end of a line is dropped and the next "
+"line is concatenated after removing leading spaces and tabs. The "
+"concatenated line is parsed as a single line. (The existence or non-"
+"existence of the space before the tailing single B<\\> is significant.)"
+msgstr ""
+"* Ein einzelner B<\\> (Rückwärtsschrägstrich) am Ende einer Zeile wird "
+"weggelassen und die nächste Zeile wird nach dem Entfernen führender "
+"Leerzeichen und Tabulatoren angehängt. Die verbundene Zeile wird als "
+"einzelne Zeile ausgewertet. (Es ist maßgeblich, ob das Leerzeichen vor dem "
+"einzelnen B<\\> vorhanden ist oder nicht.)"
+
+#. type: =item
+#: ../scripts/uscan.pl:150
+msgid "* The first non-comment line is:"
+msgstr "* Die erste Nichtkommentarzeile ist:"
+
+#. type: =item
+#: ../scripts/uscan.pl:154
+msgid "B<version=4>"
+msgstr "B<version=4>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:158
+msgid "This is a required line and the recommended version number."
+msgstr "Dies ist eine benötigte Zeile und die empfohlene Versionsnummer."
+
+#. type: textblock
+#: ../scripts/uscan.pl:160
+msgid ""
+"If you use \"B<version=3>\" instead here, some features may not work as "
+"documented here. See L<HISTORY AND UPGRADING>."
+msgstr ""
+"Falls Sie hier stattdessen »B<version=3>« benutzen, funktionieren einige "
+"Funktionalitäten möglicherweise nicht wie hier beschrieben. Siehe L<CHRONIK "
+"UND UPGRADES DURCHFÜHREN>."
+
+#. type: =item
+#: ../scripts/uscan.pl:163
+msgid ""
+"* The following non-comment lines (watch lines) specify the rules for the "
+"selection of the candidate upstream tarball URLs and are in one of the "
+"following three formats:"
+msgstr ""
+"* Die folgenden Nichtkommentarzeilen (Watch-Zeilen) geben die Regeln für die "
+"Auswahl der Kandidaten für Tarball-URLs der Ursprungsautoren in einem der "
+"folgenden drei Formate an:"
+
+#. type: =item
+#: ../scripts/uscan.pl:169
+msgid ""
+"* B<opts=\"> I<...> B<\"> B<http://>I<URL> I<matching-pattern> [I<version> "
+"[I<script>]]"
+msgstr ""
+"* B<opts=\"> I<…> B<\"> B<http://>I<URL> I<Suchmuster> [I<Version> "
+"[I<Skript>]]"
+
+#. type: =item
+#: ../scripts/uscan.pl:171
+msgid "* B<http://>I<URL> I<matching-pattern> [I<version> [I<script>]]"
+msgstr "* B<http://>I<URL> I<Suchmuster> [I<Version> [I<Skript>]]"
+
+#. type: =item
+#: ../scripts/uscan.pl:173
+msgid "* B<opts=\"> I<...> B<\">"
+msgstr "* B<opts=\"> I<…> B<\">"
+
+#. type: textblock
+#: ../scripts/uscan.pl:177
+msgid "Here,"
+msgstr "Hier gibt"
+
+#. type: =item
+#: ../scripts/uscan.pl:181
+msgid ""
+"* B<opts=\"> I<...> B<\"> specifies the behavior of B<uscan>. See L<WATCH "
+"FILE OPTIONS>."
+msgstr ""
+"* B<opts=\"> I<…> B<\"> das Verhalten von B<uscan> an. Siehe L<»WATCH«-"
+"DATEIOPTIONEN>."
+
+#. type: =item
+#: ../scripts/uscan.pl:184
+msgid ""
+"* B<http://>I<URL> specifies the web page where upstream publishes the link "
+"to the latest source archive."
+msgstr ""
+"* B<http://>I<URL> gibt die Web-Seite an, auf der die Ursprungsautoren den "
+"Link auf das neueste Quellarchiv veröffentlichen."
+
+#. type: =item
+#: ../scripts/uscan.pl:189
+msgid "* B<https://>I<URL> may also be used, as may"
+msgstr "* B<https://>I<URL> kann ebenfalls verwendet werden sowie"
+
+#. type: =item
+#: ../scripts/uscan.pl:191
+msgid "* B<ftp://>I<URL>"
+msgstr "* B<ftp://>I<URL>"
+
+#. type: =item
+#: ../scripts/uscan.pl:193
+msgid ""
+"* Some parts of I<URL> may be in the regex match pattern surrounded between "
+"B<(> and B<)> such as B</foo/bar-([\\.\\d]+)/>. (If multiple directories "
+"match, the highest version is picked.) Otherwise, the I<URL> is taken as "
+"verbatim."
+msgstr ""
+"* Einige Teile der I<URL> können im Suchmuster des regulären Ausdrucks in "
+"B<(> und B<)> eingeschlossen werden, wie etwa B</foo/bar-([\\.\\d]+)/>. "
+"(Falls mehrere Verzeichnisse passen, wird die höchste Version "
+"herausgegriffen). Andernfalls wird die I<URL> wörtlich genommen."
+
+#. type: =item
+#: ../scripts/uscan.pl:200
+msgid ""
+"* I<matching-pattern> specifies the full string matching pattern for hrefs "
+"in the web page. See L<WATCH FILE EXAMPLES>."
+msgstr ""
+"* I<Suchmuster> gibt die vollständige Zeichenkette des Suchmusters für Hrefs "
+"auf der Web-Seite an. Siehe L<»WATCH«-DATEIBEISPIELE>."
+
+#. type: =item
+#: ../scripts/uscan.pl:205
+msgid ""
+"* All matching parts in B<(> and B<)> are concatenated with B<.> (period) "
+"to form the upstream version."
+msgstr ""
+"* Alle passenden Teile in B<(> und B<)> werden mit B<.> (Punkt) verbunden, "
+"um die Version der Ursprungsautoren zu bilden."
+
+#. type: =item
+#: ../scripts/uscan.pl:208
+msgid ""
+"* If the hrefs do not contain directories, you can combine this with the "
+"previous entry. I.e., B<http://>I<URL>B</>I<matching-pattern> ."
+msgstr ""
+"* Falls die Hrefs keine Verzeichnisse enthalten, können Sie diese mit dem "
+"vorherigen Eintrag kombinieren. D.h., B<http://>I<URL>B</>I<Suchmuster> ."
+
+#. type: =item
+#: ../scripts/uscan.pl:213
+msgid ""
+"* I<version> restricts the upstream tarball which may be downloaded. The "
+"newest available version is chosen in each case."
+msgstr ""
+"* I<version> schränkt ein, welcher Tarball der Ursprungsautoren "
+"heruntergeladen werden kann. Auf jeden Fall wird die neueste verfügbare "
+"Version ausgewählt."
+
+#. type: =item
+#: ../scripts/uscan.pl:218
+msgid ""
+"* B<debian> I<(default)> requires the downloading upstream tarball to be "
+"newer than the version obtained from F<debian/changelog>."
+msgstr ""
+"* B<debian> I<Voreinstellung> erfordert, dass der herunterzuladende Tarball "
+"der Ursprungsautoren neuer als die aus F<debian/changelog> erhaltene Version "
+"ist."
+
+#. type: =item
+#: ../scripts/uscan.pl:221
+msgid ""
+"* I<version-number> such as B<12.5> requires the upstream tarball to be "
+"newer than the I<version-number>."
+msgstr ""
+"* I<Versionsnummer> wie beispielsweise B<12.5> erfordert, dass der Tarball "
+"der Ursprungsautoren neuer als die I<Versionsnummer> ist."
+
+#. type: =item
+#: ../scripts/uscan.pl:224
+msgid ""
+"* B<same> requires the downloaded version of the secondary tarballs to be "
+"exactly the same as the one for the first upstream tarball downloaded. "
+"(Useful only for MUT)"
+msgstr ""
+"* B<same> erfordert, dass die heruntergeladene Version des untergeordneten "
+"Tarballs exakt dieselbe wie die des ersten heruntergeladenen Tarballs der "
+"Ursprungsautoren ist. (nur nützlich bei MUT)"
+
+#. type: =item
+#: ../scripts/uscan.pl:228
+msgid ""
+"* B<previous> restricts the version of the signature file. (Used with "
+"pgpmode=previous)"
+msgstr ""
+"* B<previous> schränkt die Version der Signaturdatei ein. (verwendet mit "
+"pgpmode=previous)"
+
+#. type: =item
+#: ../scripts/uscan.pl:231
+msgid ""
+"* B<ignore> does not restrict the version of the secondary tarballs. (Maybe "
+"useful for MUT)"
+msgstr ""
+"* B<ignore> schränkt die Version des untergeordneten Tarballs nicht ein. "
+"(kann für MUT nützlich sein)"
+
+#. type: =item
+#: ../scripts/uscan.pl:234
+msgid ""
+"* B<group> requires the downloading upstream tarball to be newer than the "
+"version obtained from F<debian/changelog>. Package version is the "
+"concatenation of all \"group\" upstream version."
+msgstr ""
+"* B<group> erfordert, dass der herunterzuladende Tarball der "
+"Ursprungsautoren neuer als die aus F<debian/changelog> erhaltene Version "
+"ist. Die Paketversion ist aus allen »group«-Versionen der Ursprungsautoren "
+"zusammengesetzt."
+
+#. type: =item
+#: ../scripts/uscan.pl:238
+#, fuzzy
+#| msgid ""
+#| "* B<group> requires the downloading upstream tarball to be newer than the "
+#| "version obtained from F<debian/changelog>. Package version is the "
+#| "concatenation of all \"group\" upstream version."
+msgid ""
+"* B<checksum> requires the downloading upstream tarball to be newer than the "
+"version obtained from F<debian/changelog>. Package version is the "
+"concatenation of the version of the main tarball, followed by a checksum of "
+"all the tarballs using the \"checksum\" version system. At least the main "
+"upstream source has to be declared as \"group\"."
+msgstr ""
+"* B<group> erfordert, dass der herunterzuladende Tarball der "
+"Ursprungsautoren neuer als die aus F<debian/changelog> erhaltene Version "
+"ist. Die Paketversion ist aus allen »group«-Versionen der Ursprungsautoren "
+"zusammengesetzt."
+
+#. type: =item
+#: ../scripts/uscan.pl:246
+msgid ""
+"* I<script> is executed at the end of B<uscan> execution with appropriate "
+"arguments provided by B<uscan> I<(default: no action)>."
+msgstr ""
+"* I<Skript> wird am Ende der B<uscan>-Ausführung mit den von B<uscan> "
+"bereitgestellten geeigneten Argumenten ausgeführt I<Voreinstellung: keine "
+"Aktion>."
+
+#. type: =item
+#: ../scripts/uscan.pl:251
+msgid ""
+"* The typical Debian package is a non-native package made from one upstream "
+"tarball. Only a single line of the watch line in one of the first two "
+"formats is usually used with its I<version> set to B<debian> and I<script> "
+"set to B<uupdate>."
+msgstr ""
+"* Das typische Debian-Paket ist ein nichtnatives Paket, das aus einem "
+"Tarball der Ursprungsautoren erstellt wurde. Üblicherweise wird nur eine "
+"einzelne Zeile der Watch-Zeile in einem der beiden ersten Formate benutzt. "
+"Dabei wird I<version> auf B<debian> und I<script> auf B<uupdate> gesetzt."
+
+#. type: =item
+#: ../scripts/uscan.pl:256
+msgid "* A native package should not specify I<script>."
+msgstr "* Ein natives Paket sollte I<script> nicht angeben."
+
+#. type: =item
+#: ../scripts/uscan.pl:258
+msgid ""
+"* A multiple upstream tarball (MUT) package should specify B<uupdate> as "
+"I<script> in the last watch line and should skip specifying I<script> in the "
+"rest of the watch lines."
+msgstr ""
+"* Ein Paket aus mehreren Tarbällen der Ursprungsautoren (MUT) sollte "
+"B<uupdate> als I<script> in der letzten Watch-Zeile angeben und die Angabe "
+"von I<script> in den restlichen Watch-Zeilen überspringen."
+
+#. type: =item
+#: ../scripts/uscan.pl:264
+msgid ""
+"* The last format of the watch line is useful to set the persistent "
+"parameters: B<user-agent>, B<compression>. If this format is used, this "
+"must be followed by the I<URL> defining watch line(s)."
+msgstr ""
+"* Das letzte Format einer Watch-Zeile ist nützlich, um beständige Parameter "
+"zu setzen: B<user-agent>, B<compression>. Falls dieses Format benutzt wird, "
+"muss darauf die I<URL> folgen, die Watch-Zeilen definiert."
+
+#. type: =item
+#: ../scripts/uscan.pl:268
+msgid ""
+"* [ and ] in the above format are there to mark the optional parts and "
+"should not be typed."
+msgstr ""
+"* [ und ] sind im im obigen Format, um die optionalen Teilen zu kennzeichnen "
+"und sollten nicht eingetippt werden."
+
+#. type: textblock
+#: ../scripts/uscan.pl:275
+msgid ""
+"There are a few special strings which are substituted by B<uscan> to make it "
+"easy to write the watch file."
+msgstr ""
+"Es gibt ein paar spezielle Zeichenketten, die durch B<uscan> ersetzt werden, "
+"um das Schreiben der Watch-Datei zu erleichtern."
+
+#. type: =item
+#: ../scripts/uscan.pl:280
+msgid "B<@PACKAGE@>"
+msgstr "B<@PACKAGE@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:282
+msgid ""
+"This is substituted with the source package name found in the first line of "
+"the F<debian/changelog> file."
+msgstr ""
+"Dies wird durch den Quellpaketnamen aus der ersten Zeile der Datei F<debian/"
+"changelog> ersetzt."
+
+#. type: =item
+#: ../scripts/uscan.pl:285
+msgid "B<@ANY_VERSION@>"
+msgstr "B<@ANY_VERSION@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:287
+msgid "This is substituted by the legal upstream version regex (capturing)."
+msgstr ""
+"Dies wird durch den regulären Ausdruck der gültigen Version der "
+"Ursprungsautoren ersetzt. (aufnehmend)"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:289
+#, no-wrap
+msgid ""
+" [-_]?v?(\\d[\\-+\\.:\\~\\da-zA-Z]*)\n"
+"\n"
+msgstr ""
+" [-_]?v?(\\d[\\-+\\.:\\~\\da-zA-Z]*)\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:291
+msgid "B<@ARCHIVE_EXT@>"
+msgstr "B<@ARCHIVE_EXT@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:293
+msgid ""
+"This is substituted by the typical archive file extension regex (non-"
+"capturing)."
+msgstr ""
+"Dies wird durch den regulären Ausdruck der typischen Archiverweiterung "
+"ersetzt. (nicht aufnehmend)"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:295
+#, fuzzy, no-wrap
+#| msgid ""
+#| " (?i)\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|zip|tgz|tbz|txz)\n"
+#| "\n"
+msgid ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))\n"
+"\n"
+msgstr ""
+" (?i)\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|zip|tgz|tbz|txz)\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:297
+msgid "B<@SIGNATURE_EXT@>"
+msgstr "B<@SIGNATURE_EXT@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:299
+msgid ""
+"This is substituted by the typical signature file extension regex (non-"
+"capturing)."
+msgstr ""
+"Dies wird durch den regulären Ausdruck der typischen "
+"Signaturdateierweiterung ersetzt. (nicht aufnehmend)"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:301
+#, fuzzy, no-wrap
+#| msgid ""
+#| " (?i)\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|zip|tgz|tbz|txz)\\.(?:asc|pgp|gpg|sig|sign)\n"
+#| "\n"
+msgid ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))'(?:\\.(?:asc|pgp|gpg|sig|sign))'\n"
+"\n"
+msgstr ""
+" (?i)\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|zip|tgz|tbz|txz)\\.(?:asc|pgp|gpg|sig|sign)\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:303
+msgid "B<@DEB_EXT@>"
+msgstr "B<@DEB_EXT@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:305
+msgid "This is substituted by the typical Debian extension regexp (capturing)."
+msgstr ""
+"Dies wird durch den regulären Ausdruck der typischen Debian-"
+"Dateinamenerweiterung ersetzt. (einfangend)"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:307
+#, no-wrap
+msgid ""
+" [\\+~](debian|dfsg|ds|deb)(\\.)?(\\d+)?$\n"
+"\n"
+msgstr ""
+" [\\+~](debian|dfsg|ds|deb)(\\.)?(\\d+)?$\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:311
+msgid ""
+"Some file extensions are not included in the above intentionally to avoid "
+"false positives. You can still set such file extension patterns manually."
+msgstr ""
+"Einige Dateierweiterungen sind absichtlich nicht enthalten, um falsche "
+"Treffer zu vermeiden. Sie können solche Muster für Dateierweiterungen aber "
+"immer noch manuell setzen."
+
+#. type: =head1
+#: ../scripts/uscan.pl:314
+msgid "WATCH FILE OPTIONS"
+msgstr "»WATCH«-DATEIOPTIONEN"
+
+#. type: textblock
+#: ../scripts/uscan.pl:316
+msgid ""
+"B<uscan> reads the watch options specified in B<opts=\"> I<...> B<\"> to "
+"customize its behavior. Multiple options I<option1>, I<option2>, "
+"I<option3>, ... can be set as B<opts=\">I<option1>B<,> I<option2>B<,> "
+"I<option3>B<,> I< ... >B<\"> . The double quotes are necessary if options "
+"contain any spaces."
+msgstr ""
+"B<uscan> liest die in B<opts=\"> I<…> B<\"> angegebenen Optionen, um sein "
+"Verhalten anzupassen. Mehrere Optionen I<Option1>, I<Option2>, I<Option3>, … "
+"können als B<opts=\">I<Option1>, I<Option2>, I<Option3>B<,> I< … >B<\"> "
+"gesetzt werden. Die doppelten Anführungszeichen werden nötig, falls Optionen "
+"irgendwelche Leerräume enthalten."
+
+#. type: textblock
+#: ../scripts/uscan.pl:321
+msgid ""
+"Unless otherwise noted as persistent, most options are valid only within "
+"their containing watch line."
+msgstr ""
+"Sofern sie nicht als beständig notiert sind, sind die meisten Optionen nur "
+"innerhalb der Watch-Zeile gültig, in der sie stehen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:324
+msgid "The available watch options are:"
+msgstr "Die verfügbaren Watch-Optionen sind:"
+
+#. type: =item
+#: ../scripts/uscan.pl:328
+msgid "B<component=>I<component>"
+msgstr "B<component=>I<Komponente>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:330
+msgid ""
+"Set the name of the secondary source tarball as I<< <spkg>_<oversion>.orig-"
+"<component>.tar.gz >> for a MUT package."
+msgstr ""
+"setzt den Namen des untergeordneten Quell-Tarballs für ein MUT-Paket als I<< "
+"<Quellpaket>_<Originalversion>.orig-<Komponente>.tar.gz >>."
+
+#. type: =item
+#: ../scripts/uscan.pl:333
+#, fuzzy
+#| msgid "B<component=>I<component>"
+msgid "B<ctype=>I<component-type>"
+msgstr "B<component=>I<Komponente>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:335
+msgid ""
+"Set the type of component I<(only \"nodejs\" and \"perl\" are available for "
+"now)>. This will help uscan to find current version if component version is "
+"ignored."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:338
+msgid ""
+"When using B<ctype=nodejs>, uscan tries to find a version in C<package."
+"json>, when using B<ctype=perl>, uscan tries to find a version in C<META."
+"json>. If a version is found, it is used as current version for this "
+"component, regardless version found in Debian version string. This permits a "
+"better change detection when using I<ignore> or I<checksum> as Debian "
+"version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:344
+msgid "B<compression=>I<method>"
+msgstr "B<compression=>I<Methode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:346
+msgid ""
+"Set the compression I<method> when the tarball is repacked (persistent)."
+msgstr ""
+"setzt die Komprimierungs-I<Methode>, wenn ein Tarball erneut gepackt wird "
+"(beständig)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:348
+msgid ""
+"Available I<method> values are what mk-origtargz supports, so B<xz>, B<gzip> "
+"(alias B<gz>), B<bzip2> (alias B<bz2>), B<lzma>, B<default>. The default "
+"method is currently B<xz>. When uscan is launched in a debian source "
+"repository which format is \"1.0\" or undefined, the method switches to "
+"B<gzip>."
+msgstr ""
+"Verfügbare I<Methode>n sind die, die mk-origtargz unterstützt, also B<xz>, "
+"B<gzip> (alias B<gz>), B<bzip2> (alias B<bz2>), B<lzma>, B<default>. Die "
+"Voreinstellung ist derzeit B<xz>. Wenn Uscan in einem Debian-Quelldepot, "
+"dessen Format »1.0« oder nicht definiert ist, gestartet wird, wechselt die "
+"Methode zu B<gzip>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:354
+msgid ""
+"Please note the repacking of the upstream tarballs by B<mk-origtargz> "
+"happens only if one of the following conditions is satisfied:"
+msgstr ""
+"Bitte beachten Sie, dass das erneute Packen des Tarballs der "
+"Ursprungsautoren durch B<mk-origtargz> nur vorkommt, wenn eine der folgenden "
+"Bedingungen erfüllt ist:"
+
+#. type: =item
+#: ../scripts/uscan.pl:359
+msgid ""
+"* B<USCAN_REPACK> is set in the devscript configuration. See L<DEVSCRIPT "
+"CONFIGURATION VARIABLES>."
+msgstr ""
+"* B<USCAN_REPACK> ist in der Devscripts-Konfiguration gesetzt. (Siehe "
+"L<DEVSCRIPT-KONFIGURATIONSVARIABLEN>."
+
+# FIXME missing format character
+#. type: =item
+#: ../scripts/uscan.pl:362
+msgid "* B<--repack> is set on the commandline. See <COMMANDLINE OPTIONS>."
+msgstr ""
+"* B<--repack> wurde auf der Befehlszeile gesetzt. Siehe "
+"<BEFEHLZEILENOPTIONEN>."
+
+#. type: =item
+#: ../scripts/uscan.pl:364
+msgid "* B<repack> is set in the watch line as B<opts=\"repack,>I<...>B<\">."
+msgstr ""
+"* B<repack> wurde in der Watch-Zeile als B<opts=\"repack,>I<…>B<\"> gesetzt."
+
+#. type: =item
+#: ../scripts/uscan.pl:366
+msgid "* The upstream archive is of B<zip> type including B<jar>, B<xpi>, ..."
+msgstr ""
+"* Das Archiv der Ursprungsautoren ist vom Typ B<zip> einschließlich B<jar>, "
+"B<xpi>, …"
+
+#. type: =item
+#: ../scripts/uscan.pl:368
+#, fuzzy
+#| msgid ""
+#| "* The upstream archive is of B<zip> type including B<jar>, B<xpi>, ..."
+msgid "* The upstream archive is of B<zstd> (Zstandard) type."
+msgstr ""
+"* Das Archiv der Ursprungsautoren ist vom Typ B<zip> einschließlich B<jar>, "
+"B<xpi>, …"
+
+#. type: =item
+#: ../scripts/uscan.pl:370
+msgid ""
+"* B<Files-Excluded> or B<Files-Excluded->I<component> stanzas are set in "
+"F<debian/copyright> to make B<mk-origtargz> invoked from B<uscan> remove "
+"files from the upstream tarball and repack it. See L<COPYRIGHT FILE "
+"EXAMPLES> and mk-origtargz(1)."
+msgstr ""
+"* In F<debian/copyright> sind B<Files-Excluded>- oder B<Files-Excluded-"
+">I<Komponente>-Absätze gesetzt, damit das von B<uscan> aufgerufene B<mk-"
+"origtargz> Dateien aus dem Tarball der Ursprungsautoren entfernt und ihn "
+"erneut packt. Siehe L<BEISPIELE FÜR COPYRIGHT-DATEIEN> und mk-origtargz(1)."
+
+#. type: =item
+#: ../scripts/uscan.pl:377
+msgid "B<repack>"
+msgstr "B<repack>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:379
+msgid ""
+"Force repacking of the upstream tarball using the compression I<method>."
+msgstr ""
+"erzwingt das erneute Packen der Tarballs der Ursprungsautoren mittels der "
+"Komprimierungs-I<Methode>."
+
+#. type: =item
+#: ../scripts/uscan.pl:381
+msgid "B<repacksuffix=>I<suffix>"
+msgstr "B<repacksuffix=>I<Endung>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:383
+msgid ""
+"Add I<suffix> to the Debian package upstream version only when the source "
+"tarball is repackaged. This rule should be used only for a single upstream "
+"tarball package."
+msgstr ""
+"fügt der Debian-Paketversion der Ursprungsautoren nur die I<Endung> hinzu, "
+"wenn der Quelltext-Tarball erneut gepackt wird. Diese Regel sollte nur für "
+"einen einzelnen Tarball der Ursprungsautoren verwendet werden."
+
+#. type: =item
+#: ../scripts/uscan.pl:387
+msgid "B<mode=>I<mode>"
+msgstr "B<mode=>I<Modus>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:389
+msgid "Set the archive download I<mode>."
+msgstr "setzt den Herunterlade-I<Modus>."
+
+#. type: =item
+#: ../scripts/uscan.pl:393
+msgid "B<LWP>"
+msgstr "B<LWP>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:395
+msgid ""
+"This mode is the default one which downloads the specified tarball from the "
+"archive URL on the web. Automatically internal B<mode> value is updated to "
+"either B<http> or B<ftp> by URL."
+msgstr ""
+"Dieser Modus ist die Voreinstellung, durch den der angegebene Tarball von "
+"der Archiv-URL im Web heruntergeladen wird. Der interne B<Modus> wird je "
+"nach URL automatisch auf B<http> oder B<ftp> aktualisiert."
+
+#. type: textblock
+#: ../scripts/uscan.pl:401
+msgid ""
+"This mode accesses the upstream git archive directly with the B<git> command "
+"and packs the source tree with the specified tag via I<matching-pattern> "
+"into I<spkg-version>B<.tar.xz>."
+msgstr ""
+"Dieser Modus greift mit dem Befehl B<git> direkt auf das Git-Archiv der "
+"Ursprungsautoren zu und packt den Quelltextverzeichnisbaum mit der "
+"angegebenen Markierung über I<Vergleichsmuster> in I<Quellpaketversion>B<."
+"tar.xz>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:405
+msgid ""
+"If the upstream publishes the released tarball via its web interface, please "
+"use it instead of using this mode. This mode is the last resort method."
+msgstr ""
+"Falls die Ursprungsautoren den veröffentlichten Tarball über ihre Web-"
+"Schnittstelle veröffentlichen, verwenden Sie bitte diese anstelle dieses "
+"Modus. Dieser Modus ist die letzte Rückfalloption."
+
+#. type: textblock
+#: ../scripts/uscan.pl:408
+msgid ""
+"For git mode, I<matching-pattern> specifies the full string matching pattern "
+"for tags instead of hrefs. If I<matching-pattern> is set to B<refs/tags/"
+">I<tag-matching-pattern>, B<uscan> downloads source from the B<refs/tags/"
+">I<matched-tag> of the git repository. The upstream version is extracted "
+"from concatenating the matched parts in B<(> ... B<)> with B<.> . See "
+"L<WATCH FILE EXAMPLES>."
+msgstr ""
+"Für den Git-Modus gibt I<Vergleichsmuster> das vollständige "
+"Zeichenkettenmuster für Markierungen anstelle von Hrefs an. Falls "
+"I<Vergleichsmuster> auf B<refs/tags/>I<Markierungsvergleichsmuster> gesetzt "
+"ist, lädt B<uscan> die Quelle von der B<refs/tags/>I<passenden-Markierung> "
+"des Git-Depots herunter. Die Version der Ursprungsautoren wird aus dem "
+"Zusammenhängen der passenden Teile in B<(> … B<)> mit B<.> extrahiert. Siehe "
+"L<»WATCH«-DATEIBEISPIELE>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:415
+msgid ""
+"If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads source from the "
+"B<HEAD> of the git repository and the pertinent I<version> is automatically "
+"generated with the date and hash of the B<HEAD> of the git repository."
+msgstr ""
+"Falls I<Vergleichsmuster> auf B<HEAD> gesetzt ist, lädt B<uscan> die Quelle "
+"vom B<HEAD> des Git-Depots herunter und die passende I<Version> wird "
+"automatisch mit dem Datum und dem Hash von B<HEAD> des Git-Depots erzeugt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:419
+msgid ""
+"If I<matching-pattern> is set to B<refs/heads/>I<branch>, B<uscan> downloads "
+"source from the named I<branch> of the git repository."
+msgstr ""
+"Falls I<Vergleichsmuster> auf B<refs/heads/>I<Zweig> gesetzt ist, lädt "
+"B<uscan> die Quelle von dem angegebenen I<Zweig> des Git-Depots herunter."
+
+#. type: textblock
+#: ../scripts/uscan.pl:422
+msgid ""
+"The local repository is temporarily created as a bare git repository "
+"directory under the destination directory where the downloaded archive is "
+"generated. This is normally erased after the B<uscan> execution. This "
+"local repository is kept if B<--debug> option is used."
+msgstr ""
+"Das lokale Depot wird vorübergehend als ein Bare-Git-Depotverzeichnis "
+"unterhalb des Zielverzeichnisses erzeugt, in dem das heruntergeladene Archiv "
+"erstellt wird. Dies wird normalerweise nach dem Ausführen von B<Uscan> "
+"gelöscht. Dieses lokale Depot wird aufbewahrt, falls die Option B<--debug> "
+"benutzt wird."
+
+#. type: textblock
+#: ../scripts/uscan.pl:427
+msgid ""
+"If the current directory is a git repository and the searched repository is "
+"listed among the registered \"remotes\", then uscan will use it instead of "
+"cloning separately. The only local change is that uscan will run a "
+"\"fetch\" command to refresh the repository."
+msgstr ""
+"Falls das aktuelle Verzeichnis ein Git-Depot ist und das gesuchte Depot eine "
+"der registrierten »externen« aufgeführt ist, wird Uscan es benutzen, statt "
+"es separat zu klonen. Die einzige lokale Änderung besteht darin, dass Uscan "
+"einen »fetch«-Befehl zum Erneuern des Depots ausführt."
+
+#. type: =item
+#: ../scripts/uscan.pl:432
+msgid "B<svn>"
+msgstr "B<svn>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:434
+#, fuzzy
+#| msgid ""
+#| "This mode accesses the upstream git archive directly with the B<git> "
+#| "command and packs the source tree with the specified tag via I<matching-"
+#| "pattern> into I<spkg-version>B<.tar.xz>."
+msgid ""
+"This mode accesses the upstream Subversion archive directly with the B<svn> "
+"command and packs the source tree."
+msgstr ""
+"Dieser Modus greift mit dem Befehl B<git> direkt auf das Git-Archiv der "
+"Ursprungsautoren zu und packt den Quelltextverzeichnisbaum mit der "
+"angegebenen Markierung über I<Vergleichsmuster> in I<Quellpaketversion>B<."
+"tar.xz>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:437
+#, fuzzy
+#| msgid ""
+#| "For git mode, I<matching-pattern> specifies the full string matching "
+#| "pattern for tags instead of hrefs. If I<matching-pattern> is set to "
+#| "B<refs/tags/>I<tag-matching-pattern>, B<uscan> downloads source from the "
+#| "B<refs/tags/>I<matched-tag> of the git repository. The upstream version "
+#| "is extracted from concatenating the matched parts in B<(> ... B<)> with "
+#| "B<.> . See L<WATCH FILE EXAMPLES>."
+msgid ""
+"For svn mode, I<matching-pattern> specifies the full string matching pattern "
+"for directories under Subversion repository directory, specified via URL. "
+"The upstream version is extracted from concatenating the matched parts in "
+"B<(> ... B<)> with B<.> ."
+msgstr ""
+"Für den Git-Modus gibt I<Vergleichsmuster> das vollständige "
+"Zeichenkettenmuster für Markierungen anstelle von Hrefs an. Falls "
+"I<Vergleichsmuster> auf B<refs/tags/>I<Markierungsvergleichsmuster> gesetzt "
+"ist, lädt B<uscan> die Quelle von der B<refs/tags/I<passenden-Markierung> "
+"des Git-Depots herunter. Die Version der Ursprungsautoren wird aus dem "
+"Zusammenhängen der passenden Teile in B<(> … B<)> mit B<.> extrahiert. Siehe "
+"L<»WATCH«-DATEIBEISPIELE>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:442
+#, fuzzy
+#| msgid ""
+#| "If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads source from "
+#| "the B<HEAD> of the git repository and the pertinent I<version> is "
+#| "automatically generated with the date and hash of the B<HEAD> of the git "
+#| "repository."
+msgid ""
+"If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads the latest "
+"source tree of the URL. The upstream version is then constructed by "
+"appending the last revision of the URL to B<0.0~svn>."
+msgstr ""
+"Falls I<Vergleichsmuster> auf B<HEAD> gesetzt ist, lädt B<uscan> die Quelle "
+"vom B<HEAD> des Git-Depots herunter und die passende I<Version> wird "
+"automatisch mit dem Datum und dem Hash von B<HEAD> des Git-Depots erzeugt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:446
+msgid ""
+"As commit signing is not possible with Subversion, the default B<pgpmode> is "
+"set to B<none> when B<mode=svn>. Settings of B<pgpmode> other than "
+"B<default> and B<none> are reported as errors."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:452
+msgid "B<pretty=>I<rule>"
+msgstr "B<pretty=>I<Regel>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:454
+msgid ""
+"Set the upstream version string to an arbitrary format as an optional "
+"B<opts> argument when the I<matching-pattern> is B<HEAD> or B<heads/"
+">I<branch> for B<git> mode. For the exact syntax, see the B<git-log> "
+"manpage under B<tformat>. The default is B<pretty=0.0~git%cd.%h>. No "
+"B<uversionmangle> rules is applicable for this case."
+msgstr ""
+"setzt die Versionszeichenkette der Ursprungsautoren auf ein beliebiges "
+"Format als optionales B<opts>-Argument, wenn das I<Vergleichsmuster> B<HEAD> "
+"oder B<heads/>I<Zweig> für den B<git>-Modus ist. Die genaue Syntax finden "
+"Sie in der Handbuchseite von B<git-log> unter B<tformat>. Die Voreinstellung "
+"ist B<pretty=0.0~git%cd.%h>. In diesem Fall können keine B<uversionmangle>-"
+"Regeln angewendet werden."
+
+#. type: textblock
+#: ../scripts/uscan.pl:460
+msgid ""
+"When B<pretty=describe> is used, the upstream version string is the output "
+"of the \"B<git describe --tags | sed s/-/./g>\" command instead. For "
+"example, if the commit is the B<5>-th after the last tag B<v2.17.12> and its "
+"short hash is B<ged992511>, then the string is B<v2.17.12.5.ged992511> . "
+"For this case, it is good idea to add B<uversionmangle=s/^/0.0~/> or "
+"B<uversionmangle=s/^v//> to make the upstream version string compatible with "
+"Debian. B<uversionmangle=s/^v//> may work as well. Please note that in "
+"order for B<pretty=describe> to function well, upstream need to avoid "
+"tagging with random alphabetic tags."
+msgstr ""
+"Wenn B<pretty=describe> benutzt wird, ist die Versionszeichenkette der "
+"Ursprungsautoren stattdessen die Ausgabe des Befehls »B<git describe --tags "
+"| sed s/-/./g>«. Falls das Commit zum Beispiel das B<5>. nach der letzten "
+"Markierung B<v2.17.12> und sein Kurz-Hash B<ged992511> ist, dann lautet die "
+"Zeichenkette B<v2.17.12.5.ged992511>. In diesem Fall ist es eine gute Idee, "
+"B<uversionmangle=s/^/0.0~/> oder B<uversionmangle=s/^v//> hinzuzufügen, um "
+"die Versionszeichenkette der Ursprungsautoren mit Debian kompatibel zu "
+"machen. B<uversionmangle=s/^v//> funktioniert möglicherweise ebenfalls. "
+"Bitte beachten Sie, dass, damit B<pretty=describe> gut klappt, die "
+"Ursprungsautoren das Markieren mit zufälligen alphabetischen Markierungen "
+"vermeiden müssen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:469
+msgid ""
+"The B<pretty=describe> forces to set B<gitmode=full> to make a full local "
+"clone of the repository automatically."
+msgstr ""
+"B<pretty=describe> erzwingt die Einstellung B<gitmode=full>, um das Depot "
+"automatisch vollständig lokal zu klonen."
+
+#. type: =item
+#: ../scripts/uscan.pl:472
+msgid "B<date=>I<rule>"
+msgstr "B<date=>I<Regel>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:474
+msgid ""
+"Set the date string used by the B<pretty> option to an arbitrary format as "
+"an optional B<opts> argument when the I<matching-pattern> is B<HEAD> or "
+"B<heads/>I<branch> for B<git> mode. For the exact syntax, see the "
+"B<strftime> manpage. The default is B<date=%Y%m%d>."
+msgstr ""
+"setzt die durch die Option B<pretty> benutzte Datumszeichenkette auf ein "
+"beliebiges Format als ein optionales B<opts>-Argument, wenn "
+"I<Vergleichsmuster> B<HEAD> oder B<heads/>I<Zweig> für den B<git>-Modus ist. "
+"Die genaue Syntax finden Sie in der B<strftime>-Handbuchseite. Die "
+"Voreinstellung ist B<date=%Y%m%d>."
+
+#. type: =item
+#: ../scripts/uscan.pl:479
+#, fuzzy
+#| msgid "B<gitmode=>I<mode>"
+msgid "B<gitexport=>I<mode>"
+msgstr "B<gitmode=>I<Modus>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:481
+msgid ""
+"Set the git archive export operation I<mode>. The default is "
+"B<gitexport=default>. Set this to B<gitexport=all> to include all files in "
+"the .orig.tar archive, ignoring any I<export-ignore> git attributes defined "
+"by the upstream."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:486
+msgid "This option is valid only in git mode."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:488
+msgid "B<gitmode=>I<mode>"
+msgstr "B<gitmode=>I<Modus>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:490
+msgid ""
+"Set the git clone operation I<mode>. The default is B<gitmode=shallow>. For "
+"some dumb git server, you may need to manually set B<gitmode=full> to force "
+"full clone operation."
+msgstr ""
+"setzt den Git-Klonbetriebs-<Modus>. Voreinstellung ist B<gitmode=shallow>. "
+"Für einige dumme Git-Server müssen Sie möglicherweise manuell "
+"B<gitmode=full> setzen, um das vollständige Klonen zu erzwingen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:494
+msgid ""
+"If the current directory is a git repository and the searched repository is "
+"listed among the registered \"remotes\", then uscan will use it instead of "
+"cloning separately."
+msgstr ""
+"Falls das aktuelle Verzeichnis ein Git-Depot ist und das gesuchte Depot "
+"inmitten der registrierten »fernen« aufgeführt ist, wird Uscan es benutzen, "
+"statt es separat zu klonen."
+
+#. type: =item
+#: ../scripts/uscan.pl:498
+msgid "B<pgpmode=>I<mode>"
+msgstr "B<pgpmode=>I<Modus>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:500
+msgid "Set the PGP/GPG signature verification I<mode>."
+msgstr "setzt den I<Modus> zum Prüfen von PGP-/GPG-Signaturen."
+
+#. type: =item
+#: ../scripts/uscan.pl:504
+msgid "B<auto>"
+msgstr "B<auto>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:506
+msgid ""
+"B<uscan> checks possible URLs for the signature file and autogenerates a "
+"B<pgpsigurlmangle> rule to use it."
+msgstr ""
+"B<uscan> prüft, ob mögliche URLs eine Signaturdatei haben und erzeugt "
+"automatisch eine B<pgpsigurlmangle>-Regel, um sie zu verwenden."
+
+#. type: =item
+#: ../scripts/uscan.pl:509
+msgid "B<default>"
+msgstr "B<default>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:511
+msgid ""
+"Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature "
+"file URL string from the upstream tarball URL. (default)"
+msgstr ""
+"verwendet B<pgpsigurlmangle=>I<Regeln>, um die zur Auswahl stehende URL-"
+"Zeichenkette der Signaturdatei für die Tarball-URL der Ursprungsautoren zu "
+"erzeugen. (Voreinstellung)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:514
+msgid ""
+"If the specified B<pgpsigurlmangle> is missing, B<uscan> checks possible "
+"URLs for the signature file and suggests adding a B<pgpsigurlmangle> rule."
+msgstr ""
+"Falls die angegebene B<pgpsigurlmangle> fehlt, überprüft B<uscan> mögliche "
+"URLs auf Signaturdateien und schlägt die Aufnahme einer B<pgpsigurlmangle>-"
+"Regel vor."
+
+#. type: =item
+#: ../scripts/uscan.pl:517
+msgid "B<mangle>"
+msgstr "B<mangle>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:519
+msgid ""
+"Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature "
+"file URL string from the upstream tarball URL."
+msgstr ""
+"verwendet B<pgpsigurlmangle=>I<Regeln>, um die zu Auswahl stehende URL-"
+"Zeichenkette der Signaturdatei für die Tarball-URL der Ursprungsautoren zu "
+"erzeugen."
+
+#. type: =item
+#: ../scripts/uscan.pl:522
+msgid "B<next>"
+msgstr "B<next>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:524
+msgid ""
+"Verify this downloaded tarball file with the signature file specified in the "
+"next watch line. The next watch line must be B<pgpmode=previous>. "
+"Otherwise, no verification occurs."
+msgstr ""
+"prüft diesen heruntergeladenen Tarball mit der Signaturdatei, die in der "
+"nächsten Watch-Zeile angegeben ist. Die nächste Watch-Zeile muss "
+"B<pgpmode=previous> lauten, sonst findet keine Prüfung statt."
+
+#. type: =item
+#: ../scripts/uscan.pl:528
+msgid "B<previous>"
+msgstr "B<previous>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:530
+msgid ""
+"Verify the downloaded tarball file specified in the previous watch line with "
+"this signature file. The previous watch line must be B<pgpmode=next>."
+msgstr ""
+"prüft den in der vorhergehenden Watch-Zeile angegebenen heruntergeladenen "
+"Tarball mit dieser Signaturdatei. Die vorhergehende Watch-Zeile muss "
+"B<pgpmode=next> lauten."
+
+#. type: =item
+#: ../scripts/uscan.pl:533
+msgid "B<self>"
+msgstr "B<self>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:535
+msgid ""
+"Verify the downloaded file I<foo.ext> with its self signature and extract "
+"its content tarball file as I<foo>."
+msgstr ""
+"überprüft die heruntergeladene Datei I<foo.Erw> mit ihrer eigenen Signatur "
+"und extrahiert die darin enthaltene Tarball-Datei als I<foo>."
+
+#. type: =item
+#: ../scripts/uscan.pl:538
+msgid "B<gittag>"
+msgstr "B<gittag>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:540
+msgid "Verify tag signature if B<mode=git>."
+msgstr "prüft die Markierungssignatur, falls B<mode=git>."
+
+#. type: =item
+#: ../scripts/uscan.pl:542
+msgid "B<none>"
+msgstr "B<none>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:544
+msgid "No signature available. (No warning.)"
+msgstr "keine Signatur verfügbar (keine Warnung)"
+
+#. type: =item
+#: ../scripts/uscan.pl:548
+msgid "B<searchmode=>I<mode>"
+msgstr "B<searchmode=>I<Modus>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:550
+msgid "Set the parsing search mode."
+msgstr "setzt den auswertenden Suchmodus."
+
+#. type: =item
+#: ../scripts/uscan.pl:554
+msgid ""
+"B<html> I<(default)>: search pattern in \"href\" parameter of E<lt>aE<gt> "
+"HTML tags"
+msgstr ""
+"B<html> I<(Voreinstellung)>: sucht Muster im »href«-Parameter von "
+"E<lt>aE<gt>-HTML-Markierungen"
+
+#. type: =item
+#: ../scripts/uscan.pl:557
+msgid "B<plain>: search pattern in the full page"
+msgstr "B<plain>: sucht Muster in der gesamten Seite"
+
+# FIXME s/is page/if page/
+#. type: textblock
+#: ../scripts/uscan.pl:559
+msgid ""
+"This is useful if page content is not HTML but JSON. Example with npmjs.com:"
+msgstr ""
+"Dies ist nützlich, falls der Seiteninhalt JSON statt HTML ist. Beispiel mit "
+"npmjs.com:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:562
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-(\\d[\\d\\.]*)@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-(\\d[\\d\\.]*)@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:569
+msgid "B<decompress>"
+msgstr "B<decompress>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:571
+msgid ""
+"Decompress compressed archive before the pgp/gpg signature verification."
+msgstr ""
+"dekomprimiert vor der Prüfung der PGP-/GPG-Signatur komprimierte Archive."
+
+#. type: =item
+#: ../scripts/uscan.pl:573
+msgid "B<bare>"
+msgstr "B<bare>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:575
+msgid ""
+"Disable all site specific special case code such as URL redirector uses and "
+"page content alterations. (persistent)"
+msgstr ""
+"deaktiviert allen Site-spezifischen Kode für Sonderfälle wie den Gebrauch "
+"von URL-Weiterleitungen und Änderungen des Seiteninhalts. (beständig)"
+
+#. type: =item
+#: ../scripts/uscan.pl:578
+msgid "B<user-agent=>I<user-agent-string>"
+msgstr "B<user-agent=>I<User-Agent-Zeichenkette>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:580
+msgid ""
+"Set the user-agent string used to contact the HTTP(S) server as I<user-agent-"
+"string>. (persistent)"
+msgstr ""
+"setzt die verwendete User-Agent-Zeichenkette, um den HTTP(S)-Server als "
+"I<user-agent-string> zu kontaktieren. (beständig)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:583
+msgid ""
+"B<user-agent> option should be specified by itself in the watch line without "
+"I<URL>, to allow using semicolons and commas in it."
+msgstr ""
+"Die Option B<user-agent> sollte allein in der Watch-Zeile ohne I<URL> "
+"angegeben werden, um die Verwendung von Strichpunkten oder Kommas darin zu "
+"ermöglichen."
+
+#. type: =item
+#: ../scripts/uscan.pl:586
+msgid "B<pasv>, B<passive>"
+msgstr "B<pasv>, B<passive>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:588
+msgid "Use PASV mode for the FTP connection."
+msgstr "benutzt bei FTP-Verbindungen den PASV-Modus."
+
+#. type: textblock
+#: ../scripts/uscan.pl:590
+msgid ""
+"If PASV mode is required due to the client side network environment, set "
+"B<uscan> to use PASV mode via L<COMMANDLINE OPTIONS> or L<DEVSCRIPT "
+"CONFIGURATION VARIABLES> instead."
+msgstr ""
+"Falls der PASV-Modus aufgrund der Client-seitigen Netzwerkumgebung benötigt "
+"wird, richten Sie stattdessen B<uscan> per L<BEFEHLSZEILENOPTIONEN> oder "
+"L<DEVSCRIPT-KONFIGURATIONSVARIABLEN> ein, dass es den PASV-Modus benutzt."
+
+#. type: =item
+#: ../scripts/uscan.pl:594
+msgid "B<active>, B<nopasv>"
+msgstr "B<active>, B<nopasv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:596
+msgid "Don't use PASV mode for the FTP connection."
+msgstr "verwendet bei der FTP-Verbindung nicht den PASV-Modus."
+
+#. type: =item
+#: ../scripts/uscan.pl:598
+msgid "B<unzipopt=>I<options>"
+msgstr "B<unzipopt=>I<Optionen>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:600
+msgid ""
+"Add the extra options to use with the B<unzip> command, such as B<-a>, B<-"
+"aa>, and B<-b>, when executed by B<mk-origtargz>."
+msgstr ""
+"fügt die zusätzlichen Optionen hinzu, die mit dem Befehl B<unzip> verwendet "
+"werden, wie beispielsweise B<-a>, B<-aa> und B<-b>, wenn er durch B<mk-"
+"origtargz> ausgeführt wird."
+
+#. type: =item
+#: ../scripts/uscan.pl:603
+msgid "B<dversionmangle=>I<rules>"
+msgstr "B<dversionmangle=>I<Regeln>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:605
+msgid ""
+"Normalize the last upstream version string found in F<debian/changelog> to "
+"compare it to the available upstream tarball version. Removal of the Debian "
+"specific suffix such as B<s/@DEB_EXT@//> is usually done here."
+msgstr ""
+"bringt die letzte in F<debian/changelog> gefundene Versionszeichenkette der "
+"Ursprungsautoren in Normalform, um sie mit der verfügbaren Tarball-Version "
+"der Ursprungsautoren zu vergleichen. Üblicherweise wird hier die Debian-"
+"spezifische Erweiterung wie B<s/@DEB_EXT@//> entfernt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:609
+msgid ""
+"You can also use B<dversionmangle=auto>, this is exactly the same than "
+"B<dversionmangle=s/@DEB_EXT@//>"
+msgstr ""
+"Sie können auch B<dversionmangle=auto> benutzen, dies ist identisch mit "
+"B<dversionmangle=s/@DEB_EXT@//>."
+
+#. type: =item
+#: ../scripts/uscan.pl:612
+msgid "B<dirversionmangle=>I<rules>"
+msgstr "B<dirversionmangle=>I<Regeln>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:614
+msgid ""
+"Normalize the directory path string matching the regex in a set of "
+"parentheses of B<http://>I<URL> as the sortable version index string. This "
+"is used as the directory path sorting index only."
+msgstr ""
+"bringt die Verzeichnispfadzeichenkette, die zum regulären Ausdruck innerhalb "
+"von Klammern von B<http://>I<URL>passt, als sortierbare "
+"Versionsindexzeichenkette in Normalform. Dies wird nur als Index zum "
+"Sortieren des Verzeichnispfads benutzt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:618 ../scripts/uscan.pl:634
+msgid "Substitution such as B<s/PRE/~pre/; s/RC/~rc/> may help."
+msgstr "Ersetzung wie B<s/PRE/~pre/; s/RC/~rc/> kann hilfreich sein."
+
+#. type: =item
+#: ../scripts/uscan.pl:620
+msgid "B<pagemangle=>I<rules>"
+msgstr "B<pagemangle=>I<Regeln>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:622
+msgid ""
+"Normalize the downloaded web page string. (Don't use this unless this is "
+"absolutely needed. Generally, B<g> flag is required for these I<rules>.)"
+msgstr ""
+"bringt die heruntergeladene Webseiten-Zeichenkette in Normalform. (Verwenden "
+"Sie dies nur, wenn es unbedingt nötig ist. Üblicherweise ist für diese "
+"I<Regeln> der Schalter B<g> erforderlich.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:625
+msgid ""
+"This is handy if you wish to access Amazon AWS or Subversion repositories in "
+"which <a href=\"...\"> is not used."
+msgstr ""
+"Dies ist praktisch, falls Sie auf Amazon AWS oder Subversion-Depots "
+"zugreifen wollen, bei denen <a href=\"…\"> nicht verwendet wird."
+
+#. type: =item
+#: ../scripts/uscan.pl:628
+msgid "B<uversionmangle=>I<rules>"
+msgstr "B<uversionmangle=>I<Regeln>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:630
+msgid ""
+"Normalize the candidate upstream version strings extracted from hrefs in the "
+"source of the web page. This is used as the version sorting index when "
+"selecting the latest upstream version."
+msgstr ""
+"bringt die aus den Hrefs in der Quelle der Webseite extrahierten Kandidaten-"
+"Versionszeichenketten der Ursprungsautoren in Normalform. Dies wird als "
+"Sortierindex für Versionen benutzt, wenn die neueste Version der "
+"Ursprungsautoren ausgewählt wird."
+
+#. type: =item
+#: ../scripts/uscan.pl:636
+msgid "B<versionmangle=>I<rules>"
+msgstr "B<versionmangle=>I<Regeln>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:638
+msgid ""
+"Syntactic shorthand for B<uversionmangle=>I<rules>B<, "
+"dversionmangle=>I<rules>"
+msgstr ""
+"syntaktische Kurzschrift für B<uversionmangle=>I<Regeln>B<,"
+"dversionmangle=>I<Regeln>"
+
+#. type: =item
+#: ../scripts/uscan.pl:640
+msgid "B<hrefdecode=percent-encoding>"
+msgstr "B<hrefdecode=percent-encoding>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:642
+msgid ""
+"Convert the selected upstream tarball href string from the percent-encoded "
+"hexadecimal string to the decoded normal URL string for obfuscated web "
+"sites. Only B<percent-encoding> is available and it is decoded with B<s/"
+"%([A-Fa-f\\d]{2})/chr hex $1/eg>."
+msgstr ""
+"wandelt die ausgewählten Href-Zeichenkette zum Tarball der Ursprungsautoren "
+"aus eine prozentkodierten hexadezimalen Zeichenkette in einer dekodierten "
+"URL-Zeichenkette für verschleierte Web-Sites um. Nur B<percent-encoding> ist "
+"verfügbar und es ist mit B<s/%([A-Fa-f\\d]{2})/chr hex $1/eg> dekodiert."
+
+#. type: =item
+#: ../scripts/uscan.pl:647
+msgid "B<downloadurlmangle=>I<rules>"
+msgstr "B<downloadurlmangle=>I<Regeln>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:649
+msgid ""
+"Convert the selected upstream tarball href string into the accessible URL "
+"for obfuscated web sites. This is run after B<hrefdecode>."
+msgstr ""
+"wandelt die Href-Zeichenkette des ausgewählten Tarballs der Ursprungsautoren "
+"in eine barrierefreie URL für verschleierte Websites um. Dies wird nach "
+"B<hrefdecode> ausgeführt."
+
+#. type: =item
+#: ../scripts/uscan.pl:652
+msgid "B<filenamemangle=>I<rules>"
+msgstr "B<filenamemangle=>I<Regeln>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:654
+msgid ""
+"Generate the upstream tarball filename from the selected href string if "
+"I<matching-pattern> can extract the latest upstream version I<< <uversion> "
+">> from the selected href string. Otherwise, generate the upstream tarball "
+"filename from its full URL string and set the missing I<< <uversion> >> from "
+"the generated upstream tarball filename."
+msgstr ""
+"erzeugt aus der ausgewählten Href-Zeichenkette den Tarball-Dateinamen der "
+"Ursprungsautoren, falls I<Suchmuster> die I<< <neueste-"
+"Ursprungsautorenversion> >> aus der ausgewählten Href-Zeichenkette "
+"extrahieren kann. Andernfalls wird der Tarball-Dateiname der "
+"Ursprungsautoren aus seiner vollständigen URL-Zeichenkette erzeugt und die "
+"fehlende I<< <neueste-Ursprungsautorenversion> >> aus dem erzeugten Tarball-"
+"Dateinamen der Ursprungsautoren gesetzt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:660
+msgid ""
+"Without this option, the default upstream tarball filename is generated by "
+"taking the last component of the URL and removing everything after any '?' "
+"or '#'."
+msgstr ""
+"Ohne diese Option wird der Standard-Tarball-Dateiname erzeugt, indem der "
+"letzte Bestandteil der URL genommen und alles nach einem »?« oder »#« "
+"entfernt wird."
+
+#. type: =item
+#: ../scripts/uscan.pl:664
+msgid "B<pgpsigurlmangle=>I<rules>"
+msgstr "B<pgpsigurlmangle=>I<Regeln>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:666
+msgid ""
+"Generate the candidate upstream signature file URL string from the upstream "
+"tarball URL."
+msgstr ""
+"erzeugt die Kandidaten-Signaturdatei-URL-Zeichenkette der Ursprungsautoren "
+"aus der Tarball-URL der Ursprungsautoren."
+
+#. type: =item
+#: ../scripts/uscan.pl:669
+msgid "B<oversionmangle=>I<rules>"
+msgstr "B<oversionmangle=>I<Regeln>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:671
+msgid ""
+"Generate the version string I<< <oversion> >> of the source tarball I<< "
+"<spkg>_<oversion>.orig.tar.gz >> from I<< <uversion> >>. This should be "
+"used to add a suffix such as B<+dfsg> to a MUT package."
+msgstr ""
+"erzeugt die Versionszeichenkette I<< <Originalversion> >> des Quell-Tarballs "
+"I<< <Quellpaket>_<Originalversion>.orig.tar.gz >> aus I<< <neueste-"
+"Ursprungsautorenversion> >>. Dies sollte verwendet werden, um einem MUT-"
+"Paket eine Erweiterung wie B<+dfsg> hinzuzufügen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:677
+msgid ""
+"Here, the mangling rules apply the I<rules> to the pertinent string. "
+"Multiple rules can be specified in a mangling rule string by making a "
+"concatenated string of each mangling I<rule> separated by B<;> (semicolon)."
+msgstr ""
+"Hier werden die Regeln zum Zerlegen die I<Regeln> auf die entsprechende "
+"Zeichenkette anwenden. In einer Zerlegungsregelzeichenkette können mehrere "
+"Regeln angegeben werden, indem die zusammengesetzte Zeichenkette jede "
+"Zerlegungs-I<Regel> durch einen B<;> (Strichpunkt) trennt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:681
+msgid ""
+"Each mangling I<rule> cannot contain B<;> (semicolon), B<,> (comma), or "
+"B<\"> (double quote)."
+msgstr ""
+"Keine Zerlegungs-I<Regel> kann B<;> (Strichpunkt), B<,> (Komma) oder B<\"> "
+"(doppeltes Anführungszeichen) enthalten."
+
+#. type: textblock
+#: ../scripts/uscan.pl:684
+msgid ""
+"Each mangling I<rule> behaves as if a Perl command \"I<$string> B<=~> "
+"I<rule>\" is executed. There are some notable details."
+msgstr ""
+"Jede Zerlegungs-I<Regel> verhält sich, als ob ein Perl-Befehl "
+"»I<$Zeichenkette> B<=~> I<Regel>« ausgeführt würde. Es gibt einige "
+"beachtenswerte Einzelheiten."
+
+#. type: =item
+#: ../scripts/uscan.pl:689
+msgid "* I<rule> may only use the B<s>, B<tr>, and B<y> operations."
+msgstr "* I<Regel> kann nur die Aktionen B<s>, B<tr> und B<y> benutzen."
+
+#. type: =item
+#: ../scripts/uscan.pl:693
+msgid "B<s/>I<regex>B</>I<replacement>B</>I<options>"
+msgstr "B<s/>I<regulärer_Ausdruck>B</>I<Ersatz>B</>I<Optionen>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:695
+msgid ""
+"Regex pattern match and replace the target string. Only the B<g>, B<i> and "
+"B<x> flags are available. Use the B<$1> syntax for back references (No "
+"B<\\1> syntax). Code execution is not allowed (i.e. no B<(?{})> or B<(??"
+"{})> constructs)."
+msgstr ""
+"gleicht Muster eines regulären Ausdrucks ab und ersetzt die "
+"Zielzeichenkette. Nur die Schalter B<g>, B<i> und B<x> sind verfügbar. "
+"Verwenden Sie für Rückwärtsreferenzen die B<$1>-Syntax (nicht die B<\\1>-"
+"Syntax). Das Ausführen von Code ist nicht erlaubt (d.h. keine B<(?{})>- oder "
+"B<(??{})>-Konstrukte)."
+
+#. type: =item
+#: ../scripts/uscan.pl:700
+msgid "B<y/>I<source>B</>I<dest>B</> or B<tr/>I<source>B</>I<dest>B</>"
+msgstr "B<y/>I<Quelle>B</>I<Ziel>B</> oder B<tr/>I<Quelle>B</>I<Ziel>B</>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:702
+msgid "Transliterate the characters in the target string."
+msgstr "kodiert die Zeichen in der Zielzeichenkette um."
+
+#. type: =head1
+#: ../scripts/uscan.pl:708
+msgid "EXAMPLE OF EXECUTION"
+msgstr "AUSFÜHRUNGSBEISPIEL"
+
+#. type: textblock
+#: ../scripts/uscan.pl:710
+msgid ""
+"B<uscan> reads the first entry in F<debian/changelog> to determine the "
+"source package name and the last upstream version."
+msgstr ""
+"B<uscan> liest den ersten Eintrag in F<debian/changelog>, um den Namen des "
+"Quellpakets und die neuste Version der Ursprungsautoren zu bestimmen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:713
+msgid "For example, if the first entry of F<debian/changelog> is:"
+msgstr "Wenn zum Beispiel der erste Eintrag in F<debian/changelog> "
+
+#. type: =item
+#: ../scripts/uscan.pl:717
+msgid "* I<< bar >> (B<3:2.03+dfsg-4>) unstable; urgency=low"
+msgstr "* I<< bar >> (B<3:2.03+dfsg-4>) unstable; urgency=low"
+
+#. type: textblock
+#: ../scripts/uscan.pl:721
+msgid ""
+"then, the source package name is I<< bar >> and the last Debian package "
+"version is B<3:2.03+dfsg-4>."
+msgstr ""
+"lautet, ist der Name des Pakets I<< bar >> und die neuste Paketversion von "
+"Debian B<3:2.03+dfsg-4>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:724
+msgid ""
+"The last upstream version is normalized to B<2.03+dfsg> by removing the "
+"epoch and the Debian revision."
+msgstr ""
+"Die neuste Version der Ursprungsautoren wird auf die Normalform B<2.03+dfsg> "
+"gebracht, indem die Epoche und die Debian-Revision entfernt werden."
+
+#. type: textblock
+#: ../scripts/uscan.pl:727
+msgid ""
+"If the B<dversionmangle> rule exists, the last upstream version is further "
+"normalized by applying this rule to it. For example, if the last upstream "
+"version is B<2.03+dfsg> indicating the source tarball is repackaged, the "
+"suffix B<+dfsg> is removed by the string substitution B<s/\\+dfsg\\d*$//> to "
+"make the (dversionmangled) last upstream version B<2.03> and it is compared "
+"to the candidate upstream tarball versions such as B<2.03>, B<2.04>, ... "
+"found in the remote site. Thus, set this rule as:"
+msgstr ""
+"Falls die Regel B<dversionmangle> existiert, wird die neuste Version der "
+"Ursprungsautoren zusätzlich durch Anwenden dieser Regel darauf in Normalform "
+"gebracht. Falls zum Beispiel die neuste Version der Ursprungsautoren "
+"B<2.03+dfsg> ist, zeigt dies an, dass der Tarball neu gepackt wurde. Die "
+"Endung B<+dfsg> wird durch die Zeichenkettenersetzung B<s/\\+dfsg\\d*$//> "
+"entfernt, um die neuste Version der Ursprungsautoren B<2.03> nach "
+"Dversionmangle zu erzeugen. Sie wird mit den Kandidaten-Tarball-Versionen "
+"der Ursprungsautoren wie B<2.03>, B<2.04>, … verglichen, die auf deren Site "
+"gefunden wurden. Setzen Sie diese Regel daher wie folgt:"
+
+#. type: =item
+#: ../scripts/uscan.pl:737
+msgid "* B<opts=\"dversionmangle=s/\\+dfsg\\d*$//\">"
+msgstr "* B<opts=\"dversionmangle=s/\\+dfsg\\d*$//\">"
+
+#. type: textblock
+#: ../scripts/uscan.pl:741
+msgid ""
+"B<uscan> downloads a web page from B<http://>I<URL> specified in F<debian/"
+"watch>."
+msgstr ""
+"B<uscan> lädt eine in F<debian/watch> angegebene Webseite von B<http://"
+">I<URL> herunter."
+
+#. type: =item
+#: ../scripts/uscan.pl:746
+msgid ""
+"* If the directory name part of I<URL> has no parentheses, B<(> and B<)>, it "
+"is taken as verbatim."
+msgstr ""
+"* Falls der Verzeichnisnamensteil von I<URL> keine Klammern, B<(> und B<)>, "
+"hat, wird er als wortgetreu angesehen."
+
+#. type: =item
+#: ../scripts/uscan.pl:749
+msgid ""
+"* If the directory name part of I<URL> has parentheses, B<(> and B<)>, then "
+"B<uscan> recursively searches all possible directories to find a page for "
+"the newest version. If the B<dirversionmangle> rule exists, the generated "
+"sorting index is used to find the newest version. If a specific version is "
+"specified for the download, the matching version string has priority over "
+"the newest version."
+msgstr ""
+"* Falls der Verzeichnisnamensteil von I<URL> keine Klammern, B<(> und B<)>, "
+"hat, durchsucht B<uscan> rekursiv alle möglichen Verzeichnisse, um eine "
+"Seite mit der neuesten Version zu finden. Wenn die Regel B<dirversionmangle> "
+"existiert, wird der erzeugte Sortierindex zum Finden der neuesten Version "
+"benutzt. Falls eine spezielle Version zum Herunterladen angegeben wurde, hat "
+"die passende Versionszeichenkette eine höhere Priorität als die neueste "
+"Version."
+
+#. type: textblock
+#: ../scripts/uscan.pl:758
+msgid "For example, this B<http://>I<URL> may be specified as:"
+msgstr "Diese B<http://>I<URL> könnte beispielsweise so angegeben werden:"
+
+#. type: =item
+#: ../scripts/uscan.pl:762
+#, fuzzy
+#| msgid "* B<http://www.example.org/([\\d\\.]+)/>"
+msgid "* B<http://www.example.org/@ANY_VERSION@/>"
+msgstr "* B<http://www.example.org/([\\d\\.]+)/>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:766
+#, fuzzy
+#| msgid ""
+#| "Please note the trailing B</> in the above to make B<([\\d\\.]+)> as the "
+#| "directory."
+msgid ""
+"Please note the trailing B</> in the above to make B<@ANY_VERSION@> as the "
+"directory."
+msgstr ""
+"Bitte beachten Sie oben das abschließende B</>, das B<([\\d\\.]+)> zum "
+"Verzeichnis macht."
+
+# FIXME s/is/is a/
+#. type: textblock
+#: ../scripts/uscan.pl:769
+msgid ""
+"If the B<pagemangle> rule exists, the whole downloaded web page as a string "
+"is normalized by applying this rule to it. This is very powerful tool and "
+"needs to be used with caution. If other mangling rules can be used to "
+"address your objective, do not use this rule."
+msgstr ""
+"Falls die Regel B<pagemangle> existiert, wird die ganze heruntergeladene "
+"Webseite als eine Zeichenkette in Normalform gebracht, indem diese Regel "
+"darauf angewendet wird. Dies ist ein sehr mächtiges Werkzeug und sollte mit "
+"Vorsicht benutzt werden. Verwenden Sie diese Regel nicht, falls Sie andere "
+"Zerlegungsregeln zum Erreichen dieses Ziels einsetzen können."
+
+#. type: textblock
+#: ../scripts/uscan.pl:774
+msgid ""
+"The downloaded web page is scanned for hrefs defined in the B<< <a href=\" "
+">> I<...> B<< \"> >> tag to locate the candidate upstream tarball hrefs. "
+"These candidate upstream tarball hrefs are matched by the Perl regex pattern "
+"I<matching-pattern> such as B<< DL-(?:[\\d\\.]+?)/foo-(.+)\\.tar\\.gz >> to "
+"narrow down the candidates. This pattern match needs to be anchored at the "
+"beginning and the end. For example, candidate hrefs may be:"
+msgstr ""
+"Die heruntergeladene Webseite wird nach Hrefs gescannt, die in der "
+"Markierung B<< <a href=\" >> I<…> B<< \"> >> definiert sind, um die "
+"Kandidaten-Tarball-Hrefs der Ursprungsautoren zu orten. Diese Kandidaten-"
+"Tarball-Hrefs der Ursprungsautoren werden mit dem regulären Perl-"
+"Ausdrucksmuster I<Suchmuster> wie B<< DL-(?:[\\d\\.]+?)/foo-(.+)\\.tar\\.gz "
+">> verglichen, um die Auswahl der Kandidaten zu begrenzen. Diese Mustersuche "
+"muss mit dem Anfang und dem Ende verankert werden. Kandidaten-Hrefs können "
+"zum Beispiel wie folgt aussehen:"
+
+#. type: =item
+#: ../scripts/uscan.pl:783
+msgid "* B<< DL-2.02/foo-2.02.tar.gz >>"
+msgstr "* B<< DL-2.02/foo-2.02.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:785
+msgid "* B<< DL-2.03/foo-2.03.tar.gz >>"
+msgstr "* B<< DL-2.03/foo-2.03.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:787
+msgid "* B<< DL-2.04/foo-2.04.tar.gz >>"
+msgstr "* B<< DL-2.04/foo-2.04.tar.gz >>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:791
+msgid ""
+"Here the matching string of B<(.+)> in I<matching-pattern> is considered as "
+"the candidate upstream version. If there are multiple matching strings of "
+"capturing patterns in I<matching-pattern>, they are all concatenated with B<."
+"> (period) to form the candidate upstream version. Make sure to use the non-"
+"capturing regex such as B<(?:[\\d\\.]+?)> instead for the variable text "
+"matching part unrelated to the version."
+msgstr ""
+"Hier wird die passende Zeichenkette von B<(.+)> im I<Suchmuster> als "
+"Kandidatenversion der Ursprungsautoren angesehen. Falls es mehrere passende "
+"Zeichenketten zu Übereinstimmungsmustern in I<Suchmuster> gibt, werden Sie "
+"alle mit B<.> (Punkt) aneinandergehängt, um die Kandidatenversion der "
+"Ursprungsautoren zu bilden. Stellen Sie sicher, dass Sie den nicht "
+"übereinstimmenden regulären Ausdruck wie B<(?:[\\d\\.]+?)> anstelle des "
+"variablen passenden Textteils ohne Bezug zur Version verwenden."
+
+#. type: textblock
+#: ../scripts/uscan.pl:798
+msgid "Then, the candidate upstream versions are:"
+msgstr "Dann sind die Kandidatenversionen der Ursprungsautoren:"
+
+#. type: =item
+#: ../scripts/uscan.pl:802
+msgid "* B<2.02>"
+msgstr "* B<2.02>"
+
+#. type: =item
+#: ../scripts/uscan.pl:804
+msgid "* B<2.03>"
+msgstr "* B<2.03>"
+
+#. type: =item
+#: ../scripts/uscan.pl:806
+msgid "* B<2.04>"
+msgstr "* B<2.04>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:810
+msgid ""
+"The downloaded tarball filename is basically set to the same as the filename "
+"in the remote URL of the selected href."
+msgstr ""
+"Der Dateiname des heruntergeladenen Tarballs wird grundsätzlich auf "
+"denselben Dateinamen gesetzt, wie der in der fernen URL der ausgewählten "
+"Href."
+
+#. type: textblock
+#: ../scripts/uscan.pl:813
+msgid ""
+"If the B<uversionmangle> rule exists, the candidate upstream versions are "
+"normalized by applying this rule to them. (This rule may be useful if the "
+"upstream version scheme doesn't sort correctly to identify the newest "
+"version.)"
+msgstr ""
+"Falls die Regel B<uversionmangle> existiert, werden die Kandidatenversionen "
+"der Ursprungsautoren durch Anwenden dieser Regel in Normalform gebracht. "
+"(Diese Regel kann nützlich sein, falls das Versionsschema der "
+"Ursprungsautoren nicht korrekt sortierbar ist, um die neueste Version zu "
+"identifizieren.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:817
+msgid ""
+"The upstream tarball href corresponding to the newest (uversionmangled) "
+"candidate upstream version newer than the (dversionmangled) last upstream "
+"version is selected."
+msgstr ""
+"Die Tarball-Href der Ursprungsautoren, die zur neuesten (von Uversionmangle) "
+"Kandidatenversion der Ursprungsautoren gehört, die neuer als die neuste (von "
+"Dversionmangle) Version der Ursprungsautoren, wird ausgewählt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:821
+msgid ""
+"If multiple upstream tarball hrefs corresponding to a single version with "
+"different extensions exist, the highest compression one is chosen. "
+"(Priority: B<< tar.xz > tar.lzma > tar.bz2 > tar.gz >>.)"
+msgstr ""
+"Falls mehrere Tarball-Hrefs der Ursprungsautoren zu einer einzigen Version "
+"mit verschiedenen existierenden Erweiterungen gehören, wird die am höchsten "
+"komprimierte ausgewählt. (Priorität: B<< tar.xz > tar.lzma > tar.bz2 > tar."
+"gz >>.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:825
+msgid ""
+"If the selected upstream tarball href is the relative URL, it is converted "
+"to the absolute URL using the base URL of the web page. If the B<< <base "
+"href=\" >> I< ... > B<< \"> >> tag exists in the web page, the selected "
+"upstream tarball href is converted to the absolute URL using the specified "
+"base URL in the base tag, instead."
+msgstr ""
+"Falls die ausgewählte Tarball-Href der Ursprungsautoren eine relative URL "
+"ist, wird sie mittels der Basis-URL der Webseite in eine absolute URL "
+"umgewandelt. Falls die Markierung B<< <base href=\" >> I< … > B<< \"> >> auf "
+"der Webseite existiert, wird die ausgewählte Tarball-Href der "
+"Ursprungsautoren stattdessen mittels der angegebenen Basis-URL in der Basis-"
+"Markierung in eine absolute URL umgewandelt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:831
+msgid ""
+"If the B<downloadurlmangle> rule exists, the selected upstream tarball href "
+"is normalized by applying this rule to it. (This is useful for some sites "
+"with the obfuscated download URL.)"
+msgstr ""
+"Falls die Regel B<downloadurlmangle> existiert, wird die ausgewählte Tarball-"
+"Href der Ursprungsautoren durch Anwenden dieser Regel in Normalform "
+"gebracht. (Dies ist für einige Sites mit verschleierter Herunterlade-URL "
+"nützlich.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:835
+msgid ""
+"If the B<filenamemangle> rule exists, the downloaded tarball filename is "
+"generated by applying this rule to the selected href if I<matching-pattern> "
+"can extract the latest upstream version I<< <uversion> >> from the selected "
+"href string. Otherwise, generate the upstream tarball filename from its full "
+"URL string and set the missing I<< <uversion> >> from the generated upstream "
+"tarball filename."
+msgstr ""
+"Falls die Regel B<filenamemangle> existiert, wird der Dateiname des "
+"heruntergeladenen Tarballs durch Anwenden dieser Regel auf die ausgewählte "
+"Href erzeugt, falls I<Suchmuster> die neueste Version I<< <neueste-"
+"Ursprungsautorenversion> >> der Ursprungsautoren aus der ausgewählten Href-"
+"Zeichenkette extrahieren kann. Andernfalls wird der Tarball-Dateiname der "
+"Ursprungsautoren aus seiner vollständigen URL-Zeichenkette und die fehlende "
+"I<< <neueste-Ursprungsautorenversion> >> aus dem erzeugten Tarball-"
+"Dateinamen der Ursprungsautoren erzeugt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:842
+msgid ""
+"Without the B<filenamemangle> rule, the default upstream tarball filename is "
+"generated by taking the last component of the URL and removing everything "
+"after any '?' or '#'."
+msgstr ""
+"Ohne die Regel B<filenamemangle> wird der Vorgabe-Tarball-Dateiname der "
+"Ursprungsautoren erzeugt, indem vom letzten Bestandteil der URL alles nach "
+"jedem »?« oder »#« entfernt wird."
+
+#. type: textblock
+#: ../scripts/uscan.pl:846
+msgid ""
+"B<uscan> downloads the selected upstream tarball to the parent B<../> "
+"directory. For example, the downloaded file may be:"
+msgstr ""
+"B<uscan> lädt den ausgewählten Tarball der Ursprungsautoren in das "
+"übergeordnete Verzeichnis B<../> herunter. Die heruntergeladene Datei kann "
+"zum Beispiel sein:"
+
+#. type: =item
+#: ../scripts/uscan.pl:851
+msgid "* F<../foo-2.04.tar.gz>"
+msgstr "* F<../foo-2.04.tar.gz>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:855
+msgid ""
+"Let's call this downloaded version B<2.04> in the above example generically "
+"as I<< <uversion> >> in the following."
+msgstr ""
+"Diese heruntergeladene Version im vorhergehenden Beispiel soll B<2.04> "
+"heißen, im Folgenden allgemein I<< <neueste-Ursprungsautorenversion> >> "
+"genannt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:858
+msgid ""
+"If the B<pgpsigurlmangle> rule exists, the upstream signature file URL is "
+"generated by applying this rule to the (downloadurlmangled) selected "
+"upstream tarball href and the signature file is tried to be downloaded from "
+"it."
+msgstr ""
+"Falls die Regel B<pgpsigurlmangle> existiert, wird die Signaturdatei-URL der "
+"Ursprungsautoren durch Anwenden dieser Regel auf die (von Downloadurlmangle) "
+"ausgewählte Tarball-Href der Ursprungsautoren erzeugt und es wird versucht, "
+"die Signatur von dort herunterzuladen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:862
+msgid ""
+"If the B<pgpsigurlmangle> rule doesn't exist, B<uscan> warns user if the "
+"matching upstream signature file is available from the same URL with their "
+"filename being suffixed by the 5 common suffix B<asc>, B<gpg>, B<pgp>, "
+"B<sig> and B<sign>. (You can avoid this warning by setting B<pgpmode=none>.)"
+msgstr ""
+"Falls die Regel B<pgpsigurlmangle> nicht existiert, warnt B<uscan> den "
+"Benutzer, falls die Signaturdatei der Ursprungsautoren unter derselben URL "
+"verfügbar ist und am Dateinamen die fünf üblichen Erweiterungen B<asc>, "
+"B<gpg>, B<pgp>, B<sig> und B<sign> anhängen. (Sie können diese Warnung durch "
+"Setzen von B<pgpmode=none> vermeiden.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:867
+msgid ""
+"If the signature file is downloaded, the downloaded upstream tarball is "
+"checked for its authenticity against the downloaded signature file using the "
+"armored keyring F<debian/upstream/signing-key.asc> (see L<KEYRING FILE "
+"EXAMPLES>). If its signature is not valid, or not made by one of the listed "
+"keys, B<uscan> will report an error."
+msgstr ""
+"Falls die Signaturdatei heruntergeladen wird, wird der Tarball der "
+"Ursprungsautoren anhand dieser Signaturdatei auf seine Echtheit hin "
+"überprüft. Dies geschieht mittels des gehärteten Schlüsselbunds F<debian/"
+"upstream/signing-key.asc> (siehe L<BEISPIELE FÜR SCHLÜSSELBUNDDATEIEN>). "
+"Falls seine Signatur ungültig ist oder nicht durch einen der aufgeführten "
+"Schlüssel erstellt wurde, wird B<uscan> einen Fehler melden."
+
+#. type: textblock
+#: ../scripts/uscan.pl:873
+msgid ""
+"If the B<oversionmangle> rule exists, the source tarball version I<oversion> "
+"is generated from the downloaded upstream version I<uversion> by applying "
+"this rule. This rule is useful to add suffix such as B<+dfsg> to the version "
+"of all the source packages of the MUT package for which the repacksuffix "
+"mechanism doesn't work."
+msgstr ""
+"Falls die Regel B<oversionmangle> existiert, wird die Quellcode-Tarball-"
+"Version I<Originalversion> aus der heruntergeladenen I<neueste-"
+"Ursprungsautorenversion> erzeugt, indem diese Regel angewendet wird. Diese "
+"Regel ist nützlich, um eine Erweiterung wie B<+dfsg> an die Version aller "
+"Quellpakete des MUT-Pakets anzuhängen, bei denen der Mechanismus "
+"»repacksuffix« nicht funktioniert."
+
+#. type: textblock
+#: ../scripts/uscan.pl:879
+msgid ""
+"B<uscan> invokes B<mk-origtargz> to create the source tarball properly named "
+"for the source package with B<.orig.> (or B<< .orig-<component>. >> for the "
+"secondary tarballs) in its filename."
+msgstr ""
+"B<uscan> ruft B<mk-origtargz> auf, um den Quell-Tarball korrekt benannt für "
+"das Quellpaket mit B<.orig.> (oder B<< .orig-<Komponente>. >> für die "
+"untergeordneten Tarbälle) im Dateinamen zu erzeugen."
+
+#. type: =item
+#: ../scripts/uscan.pl:885
+msgid "case A: packaging of the upstream tarball as is"
+msgstr "Fall A: Packen des Quelltext-Tarballs, so wie er ist"
+
+#. type: textblock
+#: ../scripts/uscan.pl:887
+msgid ""
+"B<mk-origtargz> creates a symlink I<< ../bar_<oversion>.orig.tar.gz >> "
+"linked to the downloaded local upstream tarball. Here, I<< bar >> is the "
+"source package name found in F<debian/changelog>. The generated symlink may "
+"be:"
+msgstr ""
+"B<mk-origtargz> erstellt einen symbolischen Verweis I<< ../"
+"bar_<Originalversion>.orig.tar.gz >>, der auf den heruntergeladenen lokalen "
+"Tarball der Ursprungsautoren verweist. I<< bar >> ist hier der in F<debian/"
+"changelog> gefundene Quellpaketname. Der erzeugte symbolische Verweis könnte "
+"lauten:"
+
+#. type: =item
+#: ../scripts/uscan.pl:893
+msgid "* F<../bar_2.04.orig.tar.gz> -> F<foo-2.04.tar.gz> (as is)"
+msgstr ""
+"* F<../bar_2.04.orig.tar.gz> -> F<foo-2.04.tar.gz> (in der vorliegenden Form)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:897
+msgid ""
+"Usually, there is no need to set up B<opts=\"dversionmangle=> I<...> B<\"> "
+"for this case."
+msgstr ""
+"Normalerweise ist es in diesem Fall nicht nötig, B<opts=\"dversionmangle=> "
+"I<…> B<\"> zu setzen."
+
+#. type: =item
+#: ../scripts/uscan.pl:900
+msgid "case B: packaging of the upstream tarball after removing non-DFSG files"
+msgstr ""
+"Fall B: Paketieren des Tarballs der Ursprungsautoren nach den Entfernen der "
+"Nicht-DFSG-Dateien"
+
+#. type: textblock
+#: ../scripts/uscan.pl:902
+msgid ""
+"B<mk-origtargz> checks the filename glob of the B<Files-Excluded> stanza in "
+"the first section of F<debian/copyright>, removes matching files to create a "
+"repacked upstream tarball. Normally, the repacked upstream tarball is "
+"renamed with I<suffix> to I<< ../bar_<oversion><suffix>.orig.tar.gz >> using "
+"the B<repacksuffix> option for the single upstream package. Here I<< "
+"<oversion> >> is updated to be I<< <oversion><suffix> >>."
+msgstr ""
+"B<mk-origtargz> prüft den Dateinamenschnipsel des B<Files-Excluded>-"
+"Abschnitts im ersten Teil von F<debian/copyright> und entfernt entsprechende "
+"Dateien, um einen neu gepackten Tarball der Ursprungsautoren zu erstellen. "
+"Normalerweise wird der neu gepackte Tarball der Ursprungsautoren mit der "
+"I<Endung> in I<< ../bar_<Originalversion><Endung>.orig.tar.gz >> umbenannt. "
+"Für das einzelne Paket der Ursprungsautoren wird die Option B<repacksuffix> "
+"benutzt. I<< <Originalversion> >> wird hier auf I<< "
+"<Originalversion><Endung> >> aktualisiert."
+
+#. type: textblock
+#: ../scripts/uscan.pl:909
+msgid ""
+"The removal of files is required if files are not DFSG-compliant. For such "
+"case, B<+dfsg> is used as I<suffix>."
+msgstr ""
+"Das Entfernen von Dateien ist nötig, falls Dateien nicht DFSG-konform sind. "
+"In diesem Fall wird als I<Endung> B<+dfsg> verwendet."
+
+#. type: textblock
+#: ../scripts/uscan.pl:912
+msgid ""
+"So the combined options are set as B<opts=\"dversionmangle=s/\\+dfsg\\d*$// ,"
+"repacksuffix=+dfsg\">, instead."
+msgstr ""
+"Daher werden die kombinierten Optionen stattdessen als "
+"B<opts=\"dversionmangle=s/\\+dfsg\\d*$// ,repacksuffix=+dfsg\"> gesetzt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:915
+msgid "For example, the repacked upstream tarball may be:"
+msgstr ""
+"Der neu gepackte Tarball der Ursprungsautoren könnte zum Beispiel so heißen:"
+
+#. type: =item
+#: ../scripts/uscan.pl:919
+msgid "* F<../bar_2.04+dfsg.orig.tar.gz> (repackaged)"
+msgstr "* F<../bar_2.04+dfsg.orig.tar.gz> (neu gepackt)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:925
+msgid ""
+"B<uscan> normally invokes \"B<uupdate> B<--find --upstream-version> "
+"I<oversion> \" for the version=4 watch file."
+msgstr ""
+"B<uscan> ruft normalerweise »B<uupdate> B<--find --upstream-version> "
+"I<Originalversion>« für die »version=4«-Watch-Datei auf."
+
+#. type: textblock
+#: ../scripts/uscan.pl:928
+msgid ""
+"Please note that B<--find> option is used here since B<mk-origtargz> has "
+"been invoked to make B<*.orig.tar.gz> file already. B<uscan> picks I<< bar "
+">> from F<debian/changelog>."
+msgstr ""
+"Bitte beachten Sie, dass hier die Option B<--find> benutzt wird, da B<mk-"
+"origtargz> bereits aufgerufen wurde, um die Datei B<*.orig.tar.gz> zu "
+"erstellen. B<uscan> nimmt I<< bar >> aus F<debian/changelog>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:932
+msgid ""
+"It creates the new upstream source tree under the I<< ../bar-<oversion> >> "
+"directory and Debianize it leveraging the last package contents."
+msgstr ""
+"Es erstellt einen neuen Quellverzeichnisbaum der Ursprungsautoren unter dem "
+"Verzeichnis I<< ../bar-<Originalversion> >> und nutzt den Paketinhalt zum "
+"Anpassen an Debian."
+
+#. type: =head1
+#: ../scripts/uscan.pl:935
+msgid "WATCH FILE EXAMPLES"
+msgstr "»WATCH«-DATEIBEISPIELE"
+
+#. type: textblock
+#: ../scripts/uscan.pl:937
+msgid ""
+"When writing the watch file, you should rely on the latest upstream source "
+"announcement web page. You should not try to second guess the upstream "
+"archive structure if possible. Here are the typical F<debian/watch> files."
+msgstr ""
+"Wenn Sie die Watch-Datei schreiben, sollten Sie sich auf die Webseite "
+"verlassen, die zuletzt die Quelle der Ursprungsautoren ankündigte. Sie "
+"sollten wenn möglich nicht versuchen, die Archivstruktur der "
+"Ursprungsautoren vorauszusagen. Es folgen typische F<debian/watch>-Dateien."
+
+#. type: textblock
+#: ../scripts/uscan.pl:941
+msgid ""
+"Please note that executing B<uscan> with B<-v> or B<-vv> reveals what "
+"exactly happens internally."
+msgstr ""
+"Bitte beachten Sie, dass das Ausführen von B<uscan> mit B<-v> oder B<-vv> "
+"offenbart, was intern genau passiert."
+
+# FIXME s/the before/before the/ and s/are/is/
+#. type: textblock
+#: ../scripts/uscan.pl:944
+msgid ""
+"The existence and non-existence of a space the before tailing B<\\> (back "
+"slash) are significant."
+msgstr ""
+"Es ist maßgeblich, ob vor dem abschließenden B<\\> (Rückwärtsschrägstrich) "
+"ein Leerzeichen existiert oder nicht."
+
+#. type: textblock
+#: ../scripts/uscan.pl:947
+msgid ""
+"Some undocumented shorter configuration strings are used in the below "
+"EXAMPLES to help you with typing. These are intentional ones. B<uscan> is "
+"written to accept such common sense abbreviations but don't push the limit."
+msgstr ""
+"In den BEISPIELEN unterhalb werden einige nicht dokumentierte kürzere "
+"Konfigurationszeichenketten benutzt, um Ihnen Tipparbeit zu ersparen. Dies "
+"ist gewollt. B<uscan> wurde so geschrieben, dass es einige häufige "
+"sinngemäße Abkürzungen akzeptiert, aber treiben Sie es nicht auf die Spitze."
+
+#. type: =head2
+#: ../scripts/uscan.pl:951
+msgid "HTTP site (basic)"
+msgstr "HTTP-Site (einfach)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:953
+msgid "Here is an example for the basic single upstream tarball."
+msgstr ""
+"Es folgt ein Beispiel für einen einfachen einzelnen Tarball der "
+"Ursprungsautoren."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:955
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " http://example.com/~user/release/@PACKAGE@.html \\\n"
+#| " files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" http://example.com/~user/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" http://example.com/~user/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:959
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " http://example.com/~user/release/foo.html \\\n"
+#| " files/foo-([\\d\\.]+)\\.tar\\.gz debian uupdate\n"
+#| "\n"
+msgid ""
+"Or without using the substitution strings (not recommended):\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-([\\d\\.]+)\\.tar\\.gz\n"
+"\n"
+msgstr ""
+" version=4\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-([\\d\\.]+)\\.tar\\.gz debian uupdate\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:963
+#, fuzzy, no-wrap
+#| msgid "B<version=4>"
+msgid ""
+" version=4\n"
+"\n"
+msgstr "B<version=4>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:965
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz>, this watch file downloads "
+"and creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+"Diese Watch-Datei lädt für das Quellpaket B<foo-2.0.tar.gz> der "
+"Ursprungsautoren die Debian-B<orig.tar>-Datei B<foo_2.0.orig.tar.gz> "
+"herunter."
+
+#. type: =head2
+#: ../scripts/uscan.pl:968
+msgid "HTTP site (pgpsigurlmangle)"
+msgstr "HTTP-Site (pgpsigurlmangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:970
+msgid ""
+"Here is an example for the basic single upstream tarball with the matching "
+"signature file in the same file path."
+msgstr ""
+"Es folgt ein Beispiel für einen einfachen einzelnen Tarball der "
+"Ursprungsautoren mit der passenden Signaturdatei im selben Dateipfad."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:973
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpsigurlmangle=s%$%.asc%\" http://example.com/release/@PACKAGE@.html \\\n"
+#| " files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.asc%\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.asc%\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:977
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz> and the upstream signature "
+"file B<foo-2.0.tar.gz.asc>, this watch file downloads these files, verifies "
+"the authenticity using the keyring F<debian/upstream/signing-key.asc> and "
+"creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+"Für das Quellpaket B<foo-2.0.tar.gz> der Ursprungsautoren und die "
+"Signaturdatei B<foo-2.0.tar.gz.asc> der Ursprungsautoren lädt diese Watch-"
+"Datei diese Dateien herunter, prüft die Echtheit mittels des Schlüsselbunds "
+"F<debian/upstream/signing-key.asc> und erstellt die Debian-B<orig.tar>-Datei "
+"B<foo_2.0.orig.tar.gz>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:982
+msgid ""
+"Here is another example for the basic single upstream tarball with the "
+"matching signature file on decompressed tarball in the same file path."
+msgstr ""
+"Es folgt ein Beispiel für einen einfachen einzelnen Tarball der "
+"Ursprungsautoren mit der passenden Signaturdatei zum entpackten Tarball im "
+"selben Dateipfad."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:985
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpsigurlmangle=s%@ARCHIVE_EXT@$%.asc%,decompress\" \\\n"
+#| " http://example.com/release/@PACKAGE@.html \\\n"
+#| " files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%@ARCHIVE_EXT@$%.asc%,decompress\" \\\n"
+" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%@ARCHIVE_EXT@$%.asc%,decompress\" \\\n"
+" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:990
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz> and the upstream signature "
+"file B<foo-2.0.tar.asc>, this watch file downloads these files, verifies the "
+"authenticity using the keyring F<debian/upstream/signing-key.asc> and "
+"creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+"Für das Quellpaket B<foo-2.0.tar.gz> der Ursprungsautoren und die "
+"Signaturdatei B<foo-2.0.tar.asc> der Ursprungsautoren lädt diese Watch-Datei "
+"diese Dateien herunter, prüft die Echtheit mittels des Schlüsselbunds "
+"F<debian/upstream/signing-key.asc> und erstellt die Debian-B<orig.tar>-Datei "
+"B<foo_2.0.orig.tar.gz>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:995
+msgid "HTTP site (pgpmode=next/previous)"
+msgstr "HTTP-Site (pgpmode=next/previous)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:997
+msgid ""
+"Here is an example for the basic single upstream tarball with the matching "
+"signature file in the unrelated file path."
+msgstr ""
+"Es folgt ein Beispiel für einen einfachen einzelnen Tarball der "
+"Ursprungsautoren mit der passenden Signaturdatei im nicht zugehörigen "
+"Dateipfad."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1000
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpmode=next\" http://example.com/release/@PACKAGE@.html \\\n"
+#| " files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+#| " opts=\"pgpmode=previous\" http://example.com/release/@PACKAGE@.html \\\n"
+#| " files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ previous uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ previous\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ previous uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1006
+msgid ""
+"B<(?:\\d+)> part can be any random value. The tarball file can have B<53>, "
+"while the signature file can have B<33>."
+msgstr ""
+"Der Teil B<(?:\\d+)> kann ein zufälliger Wert sein, Der Tarball kann B<53> "
+"haben, während die Signaturdatei B<33> haben kann."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1009
+msgid ""
+"B<([\\d\\.]+)> part for the signature file has a strict requirement to match "
+"that for the upstream tarball specified in the previous line by having "
+"B<previous> as I<version> in the watch line."
+msgstr ""
+"Der Teil B<([\\d\\.]+)> für die Signaturdatei hat eine strikte "
+"Voraussetzung, zum in der vorhergehenden Zeile angegebenen Tarball der "
+"Ursprungsautoren zu passen, die in der Watch-Zeile als I<Version> "
+"B<previous> enthält."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1013
+msgid "HTTP site (flexible)"
+msgstr "HTTP-Site (flexibel)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1015
+msgid ""
+"Here is an example for the maximum flexibility of upstream tarball and "
+"signature file extensions."
+msgstr ""
+"Es folgt ein Beispiel für die maximale Flexibilität beim Tarball der "
+"Ursprungsautoren und Signaturdateierweiterungen."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1018
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpmode=next\" http://example.com/DL/ \\\n"
+#| " files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+#| " opts=\"pgpmode=previous\" http://example.com/DL/ \\\n"
+#| " files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ \\\n"
+#| " previous uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ \\\n"
+" previous\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ \\\n"
+" previous uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1025
+msgid "HTTP site (basic MUT)"
+msgstr "HTTP-Site (einfache MUT)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1027
+msgid "Here is an example for the basic multiple upstream tarballs."
+msgstr ""
+"Hier ein Beispiel für die einfachen Pakete mit mehreren Tarbällen der "
+"Ursprungsautoren (»Multiple Upstream Tarballs«/MUT)."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1029
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+#| " http://example.com/release/foo.html \\\n"
+#| " files/foo-([\\d\\.]+)\\.tar\\.gz debian\n"
+#| " opts=\"pgpsigurlmangle=s%$%.sig%, component=bar\" \\\n"
+#| " http://example.com/release/foo.html \\\n"
+#| " files/foobar-([\\d\\.]+)\\.tar\\.gz same\n"
+#| " opts=\"pgpsigurlmangle=s%$%.sig%, component=baz\" \\\n"
+#| " http://example.com/release/foo.html \\\n"
+#| " files/foobaz-([\\d\\.]+)\\.tar\\.gz same uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=bar\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=baz\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobaz-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foo-([\\d\\.]+)\\.tar\\.gz debian\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=bar\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobar-([\\d\\.]+)\\.tar\\.gz same\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=baz\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobaz-([\\d\\.]+)\\.tar\\.gz same uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1040
+msgid ""
+"For the main upstream source package B<foo-2.0.tar.gz> and the secondary "
+"upstream source packages B<foobar-2.0.tar.gz> and B<foobaz-2.0.tar.gz> which "
+"install under F<bar/> and F<baz/>, this watch file downloads and creates the "
+"Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>, B<foo_2.0.orig-bar.tar.gz> "
+"and B<foo_2.0.orig-baz.tar.gz>. Also, these upstream tarballs are verified "
+"by their signature files."
+msgstr ""
+"Für das Hauptquellpaket der Ursprungsautoren B<foo-2.0.tar.gz> und die "
+"untergeordneten Quellpakete der Ursprungsautoren B<foobar-2.0.tar.gz> und "
+"B<foobaz-2.0.tar.gz>, die unter F<bar/> und F<baz/> installiert werden, lädt "
+"diese Watch-Datei die Debian-B<orig.tar>-Dateien B<foo_2.0.orig.tar.gz>, "
+"B<foo_2.0.orig-bar.tar.gz> und B<foo_2.0.orig-baz.tar.gz> herunter und "
+"erstellt sie. Außerdem werden diese Tarbälle der Ursprungsautoren anhand "
+"ihrer Signaturdateien überprüft."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1047
+msgid "HTTP site (recursive directory scanning)"
+msgstr "HTTP-Site (rekursives Durchsuchen des Verzeichnisses)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1049
+msgid ""
+"Here is an example with the recursive directory scanning for the upstream "
+"tarball and its signature files released in a directory named after their "
+"version."
+msgstr ""
+"Es folgt ein Beispiel mit dem rekursiven Durchsuchen des Verzeichnisses nach "
+"dem Tarball der Ursprungsautoren und seiner Signaturdatei, die in einem "
+"Verzeichnis veröffentlicht wurden, das nach seiner Version benannt ist."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1053
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpsigurlmangle=s%$%.sig%, dirversionmangle=s/-PRE/~pre/;s/-RC/~rc/\" \\\n"
+#| " http://tmrc.mit.edu/mirror/twisted/Twisted/([\\d+\\.]+)/ \\\n"
+#| " Twisted-([\\d\\.]+)\\.tar\\.xz debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, dirversionmangle=s/-PRE/~pre/;s/-RC/~rc/\" \\\n"
+" http://tmrc.mit.edu/mirror/twisted/Twisted/@ANY_VERSION@/ \\\n"
+" Twisted-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, dirversionmangle=s/-PRE/~pre/;s/-RC/~rc/\" \\\n"
+" http://tmrc.mit.edu/mirror/twisted/Twisted/([\\d+\\.]+)/ \\\n"
+" Twisted-([\\d\\.]+)\\.tar\\.xz debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1058
+msgid "Here, the web site should be accessible at the following URL:"
+msgstr "Hier sollte die Website unter folgender URL erreichbar sein:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1060
+#, no-wrap
+msgid ""
+" http://tmrc.mit.edu/mirror/twisted/Twisted/\n"
+"\n"
+msgstr ""
+" http://tmrc.mit.edu/mirror/twisted/Twisted/\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1062
+msgid ""
+"Here, B<dirversionmangle> option is used to normalize the sorting order of "
+"the directory names."
+msgstr ""
+"Hier wird die Regel B<dirversionmangle> benutzt, um die Sortierreihenfolge "
+"der Verzeichnisnamen in die Normalform zu bringen."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1065
+msgid "HTTP site (alternative shorthand)"
+msgstr "HTTP-Site (alternative Kurzschreibweise)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1067
+msgid ""
+"For the bare HTTP site where you can directly see archive filenames, the "
+"normal watch file:"
+msgstr ""
+"Für die blanke HTTP-Site, auf der Sie direkt die Archivdateinamen sehen "
+"können, ist die normale Watch-Datei:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1070
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+#| " http://www.cpan.org/modules/by-module/Text/ \\\n"
+#| " Text-CSV_XS-(.+)\\.tar\\.gz \\\n"
+#| " debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/ \\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/ \\\n"
+" Text-CSV_XS-(.+)\\.tar\\.gz \\\n"
+" debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1075
+msgid ""
+"can be rewritten in an alternative shorthand form only with a single string "
+"covering URL and filename:"
+msgstr ""
+"Dies kann in einer alternativen Kurzform neu geschrieben werden, die mit "
+"einer einzelnen Zeichenkette URL und Dateiname abdeckt:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1078
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+#| " http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-(.+)\\.tar\\.gz \\\n"
+#| " debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-(.+)\\.tar\\.gz \\\n"
+" debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1082
+msgid ""
+"In version=4, initial white spaces are dropped. Thus, this alternative "
+"shorthand form can also be written as:"
+msgstr ""
+"In version=4 werden zu Beginn vorhandene Leerräume weggelassen. Daher kann "
+"diese alternative Kurzform auch wie folgt geschrieben werden:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1085
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+#| " http://www.cpan.org/modules/by-module/Text/\\\n"
+#| " Text-CSV_XS-(.+)\\.tar\\.gz \\\n"
+#| " debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/\\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/\\\n"
+" Text-CSV_XS-(.+)\\.tar\\.gz \\\n"
+" debian uupdate\n"
+"\n"
+
+# FIXME s/tailing/trailing/
+#. type: textblock
+#: ../scripts/uscan.pl:1090
+msgid ""
+"Please note the subtle difference of a space before the tailing B<\\> "
+"between the first and the last examples."
+msgstr ""
+"Bitte beachten Sie den feinen Unterschied eines Leerzeichens vor dem "
+"abschließenden B<\\> zwischen den ersten und letzten Beispielen."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1093
+msgid "HTTP site (funny version)"
+msgstr "HTTP-Site (komische Version)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1095
+msgid ""
+"For a site which has funny version numbers, the parenthesized groups will be "
+"joined with B<.> (period) to make a sanitized version number."
+msgstr ""
+"Für eine Site mit komischen Versionsnummern werden die eingeklammerten "
+"Gruppen mit einem B<.> (Punkt) verbunden, um eine saubere Versionsnummer zu "
+"erstellen."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1098
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " http://www.site.com/pub/foobar/foobar_v(\\d+)_(\\d+)\\.tar\\.gz \\\n"
+#| " debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" http://www.site.com/pub/foobar/foobar_v(\\d+)_(\\d+)@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" http://www.site.com/pub/foobar/foobar_v(\\d+)_(\\d+)\\.tar\\.gz \\\n"
+" debian uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1101
+msgid "HTTP site (DFSG)"
+msgstr "HTTP-Site (DFSG)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1103
+msgid ""
+"The upstream part of the Debian version number can be mangled to indicate "
+"the source package was repackaged to clean up non-DFSG files:"
+msgstr ""
+"Der Ursprungsautorenteil der Debian-Versionsnummer kann verarbeitet werden, "
+"um anzuzeigen, dass das Quellpaket zum Entfernen von Nicht-DFSG-Dateien neu "
+"gepackt wurde:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1106
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"dversionmangle=s/\\+dfsg\\d*$//,repacksuffix=+dfsg\" \\\n"
+" http://some.site.org/some/path/foobar-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"dversionmangle=s/\\+dfsg\\d*$//,repacksuffix=+dfsg\" \\\n"
+" http://some.site.org/some/path/foobar-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1110 ../scripts/uscan.pl:1165
+msgid "See L<COPYRIGHT FILE EXAMPLES>."
+msgstr "Siehe L<BEISPIELE FÜR COPYRIGHT-DATEIEN>"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1112
+msgid "HTTP site (filenamemangle)"
+msgstr "HTTP-Site (filenamemangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1114
+msgid ""
+"The upstream tarball filename is found by taking the last component of the "
+"URL and removing everything after any '?' or '#'."
+msgstr ""
+"Der Tarball-Dateiname der Ursprungsautoren wird gefunden, indem der letzte "
+"Bestandteil der URL genommen und alles nach »?« oder »#« entfernt wird."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1117
+msgid ""
+"If this does not fit to you, use B<filenamemangle>. For example, F<< <A "
+"href=\"http://foo.bar.org/dl/?path=&dl=foo-0.1.1.tar.gz\"> >> could be "
+"handled as:"
+msgstr ""
+"Falls dies nicht ihren Bedürfnissen entspricht, benutzen Sie "
+"B<filenamemangle>. F<< <A href=\"http://foo.bar.org/dl/?path=&dl=foo-0.1.1."
+"tar.gz\"> >> könnte zum Beispiel wie folgt gehandhabt werden:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1121
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=filenamemangle=s/.*=(.*)/$1/ \\\n"
+#| " http://foo.bar.org/dl/\\?path=&dl=foo-(.+)\\.tar\\.gz \\\n"
+#| " debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/$1/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl=foo-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/$1/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl=foo-(.+)\\.tar\\.gz \\\n"
+" debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1125
+msgid ""
+"F<< <A href=\"http://foo.bar.org/dl/?path=&dl_version=0.1.1\"> >> could be "
+"handled as:"
+msgstr ""
+"F<< <A href=\"http://foo.bar.org/dl/?path=&dl_version=0.1.1\"> >> könnte wie "
+"folgt gehandhabt werden:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1128
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=filenamemangle=s/.*=(.*)/foo-$1\\.tar\\.gz/ \\\n"
+#| " http://foo.bar.org/dl/\\?path=&dl_version=(.+) \\\n"
+#| " debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/foo-$1\\.tar\\.gz/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl_version=@ANY_VERSION@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/foo-$1\\.tar\\.gz/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl_version=(.+) \\\n"
+" debian uupdate\n"
+"\n"
+
+# FIXME s/<I>matching-pattern>/I<matching-pattern>/
+#. type: textblock
+#: ../scripts/uscan.pl:1132
+msgid ""
+"If the href string has no version using <I>matching-pattern>, the version "
+"can be obtained from the full URL using B<filenamemangle>."
+msgstr ""
+"Falls die Href-Zeichenkette mittels I<Suchmuster> keine Version aufweist, "
+"kann sie anhand der vollständigen URL mittels B<filenamemangle> ermittelt "
+"werden."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1135
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=filenamemangle=s&.*/dl/(.*)/foo\\.tar\\.gz&foo-$1\\.tar\\.gz& \\\n"
+#| " http://foo.bar.org/dl/([\\.\\d]+)/ foo.tar.gz \\\n"
+#| " debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s&.*/dl/(.*)/foo\\.tar\\.gz&foo-$1\\.tar\\.gz& \\\n"
+" http://foo.bar.org/dl/@ANY_VERSION@/ foo.tar.gz\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=filenamemangle=s&.*/dl/(.*)/foo\\.tar\\.gz&foo-$1\\.tar\\.gz& \\\n"
+" http://foo.bar.org/dl/([\\.\\d]+)/ foo.tar.gz \\\n"
+" debian uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1139
+msgid "HTTP site (downloadurlmangle)"
+msgstr "HTTP-Site (downloadurlmangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1141
+msgid ""
+"The option B<downloadurlmangle> can be used to mangle the URL of the file to "
+"download. This can only be used with B<http://> URLs. This may be "
+"necessary if the link given on the web page needs to be transformed in some "
+"way into one which will work automatically, for example:"
+msgstr ""
+"Die Option B<downloadurlmangle> kann benutzt werden, um die URL der Datei zu "
+"verarbeiten, die heruntergeladen werden soll. Dies kann nur mit B<http://>-"
+"URLs benutzt werden. Dies kann nötig sein, falls der auf der Webseite "
+"angegebene Verweis auf irgendeine Weise in einen umgewandelt werden muss, "
+"der automatisch funktioniert, zum Beispiel:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1146
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=downloadurlmangle=s/prdownload/download/ \\\n"
+#| " http://developer.berlios.de/project/showfiles.php?group_id=2051 \\\n"
+#| " http://prdownload.berlios.de/softdevice/vdr-softdevice-(.+).tgz \\\n"
+#| " debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=downloadurlmangle=s/prdownload/download/ \\\n"
+" http://developer.berlios.de/project/showfiles.php?group_id=2051 \\\n"
+" http://prdownload.berlios.de/softdevice/vdr-softdevice-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=downloadurlmangle=s/prdownload/download/ \\\n"
+" http://developer.berlios.de/project/showfiles.php?group_id=2051 \\\n"
+" http://prdownload.berlios.de/softdevice/vdr-softdevice-(.+).tgz \\\n"
+" debian uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1151
+msgid "HTTP site (oversionmangle, MUT)"
+msgstr "HTTP-Site (oversionmangle, MUT)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1153
+msgid ""
+"The option B<oversionmangle> can be used to mangle the version of the source "
+"tarball (B<.orig.tar.gz> and B<.orig-bar.tar.gz>). For example, B<+dfsg> "
+"can be added to the upstream version as:"
+msgstr ""
+"Die Option B<oversionmangle> kann benutzt werden, um die Version des Quell-"
+"Tarballs (B<.orig.tar.gz> und B<.orig-bar.tar.gz>) zu verarbeiten. B<+dfsg> "
+"kann der Version der Ursprungsautoren zum Beispiel wie folgt hinzugefügt "
+"werden:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1157
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=oversionmangle=s/(.*)/$1+dfsg/ \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"component=bar\" \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/bar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=oversionmangle=s/(.*)/$1+dfsg/ \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"component=bar\" \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/bar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1167
+msgid "HTTP site (pagemangle)"
+msgstr "HTTP-Site (pagemangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1169
+msgid ""
+"The option B<pagemangle> can be used to mangle the downloaded web page "
+"before applying other rules. The non-standard web page without proper B<< "
+"<a href=\" >> << ... >> B<< \"> >> entries can be converted. For example, "
+"if F<foo.html> uses B<< <a bogus=\" >> I<< ... >> B<< \"> >>, this can be "
+"converted to the standard page format with:"
+msgstr ""
+"Die Option B<pagemangle> kann benutzt werden, um die heruntergeladene "
+"Webseite vor dem Anwenden anderer Regeln zu verarbeiten. Die Nichtstandard-"
+"Webseite ohne ordnungsgemäße B<< <a href=\" >> << … >> B<< \"> >>-Einträge "
+"kann umgewandelt werden. Falls F<foo.html> zum Beispiel B<< <a bogus=\" >> "
+"I<< … >> B<< \"> >> benutzt, kann dies wie folgt in das Standardseitenformat "
+"umgewandelt werden:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1175
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=pagemangle=\"s/<a\\s+bogus=/<a href=/g\" \\\n"
+#| " http://example.com/release/foo.html \\\n"
+#| " files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=pagemangle=\"s/<a\\s+bogus=/<a href=/g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=pagemangle=\"s/<a\\s+bogus=/<a href=/g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1180
+msgid "Please note the use of B<g> here to replace all occurrences."
+msgstr ""
+"Bitte beachten Sie, dass die Verwendung von B<g> hier jedes Vorkommen "
+"ersetzt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1182
+msgid ""
+"If F<foo.html> uses B<< <Key> >> I<< ... >> B<< </Key> >>, this can be "
+"converted to the standard page format with:"
+msgstr ""
+"Falls F<foo.html> B<< <Key> >> I<< … >> B<< </Key> >> verwendet, kann dies "
+"wie folgt in das Standardseitenformat umgewandelt werden:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1185
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pagemangle=s%<Key>([^<]*)</Key>%<Key><a href=\"$1\">$1</a></Key>%g\" \\\n"
+#| " http://example.com/release/foo.html \\\n"
+#| " (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pagemangle=s%<Key>([^<]*)</Key>%<Key><a href=\"$1\">$1</a></Key>%g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pagemangle=s%<Key>([^<]*)</Key>%<Key><a href=\"$1\">$1</a></Key>%g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1190
+msgid "FTP site (basic):"
+msgstr "FTP-Site (einfach):"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1192
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-(.+)\\.tar\\.gz \\\n"
+#| " debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-(.+)\\.tar\\.gz \\\n"
+" debian uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1195
+msgid "FTP site (regex special characters):"
+msgstr "FTP-Site (Sonderzeichen für reguläre Ausdrücke):"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1197
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " ftp://ftp.worldforge.org/pub/worldforge/libs/\\\n"
+#| " Atlas-C++/transitional/Atlas-C\\+\\+-(.+)\\.tar\\.gz debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" ftp://ftp.worldforge.org/pub/worldforge/libs/\\\n"
+" Atlas-C++/transitional/Atlas-C\\+\\+-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" ftp://ftp.worldforge.org/pub/worldforge/libs/\\\n"
+" Atlas-C++/transitional/Atlas-C\\+\\+-(.+)\\.tar\\.gz debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1201
+msgid ""
+"Please note that this URL is connected to be I< ... >B<libs/Atlas-C++/"
+">I< ... > . For B<++>, the first one in the directory path is verbatim while "
+"the one in the filename is escaped by B<\\>."
+msgstr ""
+"Bitte beachten Sie, dass diese URL mit I< … >B<libs/Atlas-C++/>I< … > "
+"verbunden ist. Das erste B<++> im Verzeichnispfad wird wörtlich verstanden, "
+"während es im Dateinamen durch B<\\> maskiert wird."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1205
+msgid "FTP site (funny version)"
+msgstr "FTP-Site (komische Version)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1207
+msgid ""
+"This is another way of handling site with funny version numbers, this time "
+"using mangling. (Note that multiple groups will be concatenated before "
+"mangling is performed, and that mangling will only be performed on the "
+"basename version number, not any path version numbers.)"
+msgstr ""
+"Dies ist eine weitere Art, eine Site mit komischen Versionsnummern zu "
+"handhaben, diesmal mittels Verarbeiten. (Beachten Sie, dass mehrere Gruppen "
+"vor dem Verarbeiten zusammengefügt werden und dass dieses Verarbeiten nur "
+"für die Versionsnummer des Basispfads und nicht für die Versionsnummern "
+"aller Pfade durchgeführt wird.)"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1213
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"uversionmangle=s/^/0.0./\" \\\n"
+#| " ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/\\\n"
+#| " development/Wine-(.+)\\.tar\\.gz debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"uversionmangle=s/^/0.0./\" \\\n"
+" ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/\\\n"
+" development/Wine-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"uversionmangle=s/^/0.0./\" \\\n"
+" ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/\\\n"
+" development/Wine-(.+)\\.tar\\.gz debian uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1218
+msgid "sf.net"
+msgstr "sf.net"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1220
+msgid ""
+"For SourceForge based projects, qa.debian.org runs a redirector which allows "
+"a simpler form of URL. The format below will automatically be rewritten to "
+"use the redirector with the watch file:"
+msgstr ""
+"qa.debian.org führt eine Weiterleitung aus, die eine einfachere Form für "
+"eine URL von Sourceforge-basierten Projekten bietet. Das nachfolgende Format "
+"wird automatisch umgeschrieben, um den Weiterleitungsdienst mit der Watch-"
+"Datei zu verwenden:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1224
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " https://sf.net/<project>/ <tar-name>-(.+)\\.tar\\.gz debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" https://sf.net/<project>/ <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://sf.net/<Projekt>/ <Tar-Name>-(.+)\\.tar\\.gz debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1227
+msgid "For B<audacity>, set the watch file as:"
+msgstr "Schreiben Sie die Watch-Datei für B<audacity> wie folgt:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1229
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " https://sf.net/audacity/ audacity-minsrc-(.+)\\.tar\\.gz debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" https://sf.net/audacity/ audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://sf.net/audacity/ audacity-minsrc-(.+)\\.tar\\.gz debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1232 ../scripts/uscan.pl:1272
+msgid ""
+"Please note, you can still use normal functionalities of B<uscan> to set up "
+"a watch file for this site without using the redirector."
+msgstr ""
+"Bitte beachten Sie, dass Sie auch weiterhin normale Funktionalitäten von "
+"B<uscan> benutzen können, um eine Watch-Datei für diese Site einrichten zu "
+"können, ohne dabei die Weiterleitung zu verwenden."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1235
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"uversionmangle=s/-pre/~pre/, \\\n"
+#| "\tfilenamemangle=s%(?:.*)audacity-minsrc-(.+)\\.tar\\.xz/download%\\\n"
+#| " audacity-$1.tar.xz%\" \\\n"
+#| "\thttp://sourceforge.net/projects/audacity/files/audacity/(\\d[\\d\\.]+)/ \\\n"
+#| "\t(?:.*)audacity-minsrc-([\\d\\.]+)\\.tar\\.xz/download debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"uversionmangle=s/-pre/~pre/, \\\n"
+" filenamemangle=s%(?:.*)audacity-minsrc-(.+)\\.tar\\.xz/download%\\\n"
+" audacity-$1.tar.xz%\" \\\n"
+" http://sourceforge.net/projects/audacity/files/audacity/@ANY_VERSION@/ \\\n"
+" (?:.*)audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@/download\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"uversionmangle=s/-pre/~pre/, \\\n"
+"\tfilenamemangle=s%(?:.*)audacity-minsrc-(.+)\\.tar\\.xz/download%\\\n"
+" audacity-$1.tar.xz%\" \\\n"
+"\thttp://sourceforge.net/projects/audacity/files/audacity/(\\d[\\d\\.]+)/ \\\n"
+"\t(?:.*)audacity-minsrc-([\\d\\.]+)\\.tar\\.xz/download debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1242
+msgid "Here, B<%> is used as the separator instead of the standard B</>."
+msgstr "B<%> wird hier als Trenner anstelle des vorgegebenen B</> benutzt."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1244
+msgid "github.com"
+msgstr "github.com"
+
+# FIXME from into --> word is missing
+#. type: textblock
+#: ../scripts/uscan.pl:1246
+msgid ""
+"For GitHub based projects, you can use the tags or releases page. The "
+"archive URL uses only the version as the filename. You can rename the "
+"downloaded upstream tarball from into the standard F<< <project>-<version>."
+"tar.gz >> using B<filenamemangle>:"
+msgstr ""
+"Für Projekte, die auf GitHub verwaltet werden, können Sie die Markierungs- "
+"oder Veröffentlichungsseite benutzen. Die Archiv-URL verwendet nur die "
+"Version als Dateiname. Sie können den heruntergeladenen Tarball der "
+"Ursprungsautoren mittels B<filenamemangle> in die Vorgabe F<< <Projekt>-"
+"<Version>.tar.gz >> umbenennen:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1251
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"filenamemangle=s%(?:.*?)?v?(\\d[\\d.]*)\\.tar\\.gz%<project>-$1.tar.gz%\" \\\n"
+#| " https://github.com/<user>/<project>/tags \\\n"
+#| " (?:.*?/)?v?(\\d[\\d.]*)\\.tar\\.gz debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"filenamemangle=s%(?:.*?)?v?@ANY_VERSION@(@ARCHIVE_EXT@)%@PACKAGE@-$1$2%\" \\\n"
+" https://github.com/<user>/<project>/tags \\\n"
+" (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"filenamemangle=s%(?:.*?)?v?(\\d[\\d.]*)\\.tar\\.gz%<project>-$1.tar.gz%\" \\\n"
+" https://github.com/<user>/<project>/tags \\\n"
+" (?:.*?/)?v?(\\d[\\d.]*)\\.tar\\.gz debian uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1256
+msgid "PyPI"
+msgstr "PyPI"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1258
+msgid ""
+"For PyPI based projects, pypi.debian.net runs a redirector which allows a "
+"simpler form of URL. The format below will automatically be rewritten to use "
+"the redirector with the watch file:"
+msgstr ""
+"Für Projekte, die auf PyPI basieren, führt pypi.debian.net einen "
+"Weiterleitungsdienst aus, der eine einfachere Form der URL ermöglicht. Das "
+"nachfolgende Format wird automatisch umgeschrieben, um den "
+"Weiterleitungsdienst mit der Watch-Datei zu verwenden:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1262
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " https://pypi.python.org/packages/source/<initial>/<project>/ \\\n"
+#| " <tar-name>-(.+)\\.tar\\.gz debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" https://pypi.python.org/packages/source/<initial>/<project>/ \\\n"
+" <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://pypi.python.org/packages/source/<initial>/<project>/ \\\n"
+" <tar-name>-(.+)\\.tar\\.gz debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1266
+msgid "For B<cfn-sphere>, set the watch file as:"
+msgstr "Schreiben Sie die Watch-Datei für B<cfn-sphere> wie folgt:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1268
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " https://pypi.python.org/packages/source/c/cfn-sphere/ \\\n"
+#| " cfn-sphere-([\\d\\.]+).tar.gz debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" https://pypi.python.org/packages/source/c/cfn-sphere/ \\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://pypi.python.org/packages/source/c/cfn-sphere/ \\\n"
+" cfn-sphere-([\\d\\.]+).tar.gz debian uupdate\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1275
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"pgpmode=none\" \\\n"
+#| " https://pypi.python.org/pypi/cfn-sphere/ \\\n"
+#| " https://pypi.python.org/packages/.*/.*/.*/\\\n"
+#| " cfn-sphere-([\\d\\.]+).tar.gz#.* debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=none\" \\\n"
+" https://pypi.python.org/pypi/cfn-sphere/ \\\n"
+" https://pypi.python.org/packages/.*/.*/.*/\\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@#.*\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpmode=none\" \\\n"
+" https://pypi.python.org/pypi/cfn-sphere/ \\\n"
+" https://pypi.python.org/packages/.*/.*/.*/\\\n"
+" cfn-sphere-([\\d\\.]+).tar.gz#.* debian uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1281
+msgid "code.google.com"
+msgstr "code.google.com"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1283
+msgid ""
+"Sites which used to be hosted on the Google Code service should have "
+"migrated to elsewhere (github?). Please look for the newer upstream site if "
+"available."
+msgstr ""
+"Sites, die vom Google-Code-Dienst beherbergt wurden, sollten zu einer "
+"anderen Stelle (Github?) migriert worden sein. Bitte halten Sie Ausschau "
+"nach einer neueren Site der Ursprungsautoren, falls verfügbar."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1286
+msgid "npmjs.org (node modules)"
+msgstr "npmjs.org (Knotenmodule)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1288
+msgid ""
+"npmjs.org modules are published in JSON files. Here is a way to read them:"
+msgstr ""
+"npmjs.org-Module werden in JSON-Dateien veröffentlicht. Hier eine "
+"Möglichkeit, sie zu lesen:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1290
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"searchmode=plain\" \\\n"
+#| " https://registry.npmjs.org/aes-js \\\n"
+#| " https://registry.npmjs.org/aes-js/-/aes-js-(\\d[\\d\\.]*)@ARCHIVE_EXT@\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-(\\d[\\d\\.]*)@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1295
+msgid "grouped package"
+msgstr "Gruppiertes Paket"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1297
+msgid ""
+"Some node modules are split into multiple little upstream package. Here is a "
+"way to group them:"
+msgstr ""
+"Einige Knotenmodule werden in mehrere kleine Pakete der Ursprungsautoren "
+"zerteilt. Hier eine Möglichkeit, sie zu gruppieren:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1300
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"searchmode=plain,pgpmode=none\" \\\n"
+#| " https://registry.npmjs.org/mongodb \\\n"
+#| " https://registry.npmjs.org/mongodb/-/mongodb-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+#| " opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+#| " https://registry.npmjs.org/bson \\\n"
+#| " https://registry.npmjs.org/bson/-/bson-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+#| " opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+#| " https://registry.npmjs.org/mongodb-core \\\n"
+#| " https://registry.npmjs.org/mongodb-core/-/mongodb-core-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+#| " opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+#| " https://registry.npmjs.org/require_optional \\\n"
+#| " https://registry.npmjs.org/require_optional/-/require_optional-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1314
+msgid ""
+"Package version is then the concatenation of upstream versions separated by "
+"\"+~\"."
+msgstr ""
+"Die Paketversion ist dann zusammengesetzt aus den Versionen der "
+"Ursprungsautoren, getrennt durch »+~«."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1317
+msgid ""
+"To avoid having a too long version, the \"checksum\" method can be used. In "
+"this case, the main source has to be declared as \"group\":"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1320
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"searchmode=plain,pgpmode=none\" \\\n"
+#| " https://registry.npmjs.org/mongodb \\\n"
+#| " https://registry.npmjs.org/mongodb/-/mongodb-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+#| " opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+#| " https://registry.npmjs.org/bson \\\n"
+#| " https://registry.npmjs.org/bson/-/bson-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+#| " opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+#| " https://registry.npmjs.org/mongodb-core \\\n"
+#| " https://registry.npmjs.org/mongodb-core/-/mongodb-core-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+#| " opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+#| " https://registry.npmjs.org/require_optional \\\n"
+#| " https://registry.npmjs.org/require_optional/-/require_optional-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-(\\d[\\d\\.]*)@ARCHIVE_EXT@ group\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1334
+msgid ""
+"The \"checksum\" is made up of the separate sum of each number composing the "
+"component versions. Following is an example with 3 components whose "
+"versions are \"1.2.4\", \"2.0.1\" and \"10.0\", with the main tarball having "
+"version \"2.0.6\":"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1338
+#, no-wrap
+msgid ""
+" Main: 2.0.6\n"
+" Comp1: 1 . 2 . 4\n"
+" Comp2: 2 . 0 . 1\n"
+" Comp3: 10 . 0\n"
+" ================================\n"
+" Result : 1+2+10 . 2+0+0 . 4+1\n"
+" Checksum: 13 . 2 . 5\n"
+" ================================\n"
+" Final Version: 2.0.6+~cs13.2.5\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1348
+msgid ""
+"uscan will also display the original version string before being encoded "
+"into the checksum, which can for example be used in a debian/changelog entry "
+"to easily follow the changes:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1352
+#, no-wrap
+msgid ""
+" 2.0.6+~1.2.4+~2.0.1+~10.0\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1354
+msgid ""
+"B<Note>: This feature currently accepts only versions composed of digits and "
+"full stops (`.`)."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1357
+msgid "direct access to the git repository (tags)"
+msgstr "direkter Zugriff auf ein Git-Depot (Markierungen)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1359
+msgid ""
+"If the upstream only publishes its code via the git repository and its code "
+"has no web interface to obtain the release tarball, you can use B<uscan> "
+"with the tags of the git repository to track and package the new upstream "
+"release."
+msgstr ""
+"Falls die Ursprungsautoren ihren Code nur über das Git-Depot veröffentlichen "
+"und ihr Code keine Web-Schnittstelle hat, um den Veröffentlichungs-Tarball "
+"zu bekommen, können Sie B<uscan> mit den Markierungen des Git-Depots "
+"benutzen, um die neue Veröffentlichung der Originalautoren nachzuverfolgen "
+"und zu paketieren."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1363
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"mode=git, gitmode=full, pgpmode=none\" \\\n"
+#| " http://git.ao2.it/tweeper.git \\\n"
+#| " refs/tags/v([\\d\\.]+) debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"mode=git, gitmode=full, pgpmode=none\" \\\n"
+" http://git.ao2.it/tweeper.git \\\n"
+" refs/tags/v@ANY_VERSION@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=git, gitmode=full, pgpmode=none\" \\\n"
+" http://git.ao2.it/tweeper.git \\\n"
+" refs/tags/v([\\d\\.]+) debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1368
+msgid "Please note \"B<git ls-remote>\" is used to obtain references for tags."
+msgstr ""
+"Bitte beachten Sie, dass »B<git ls-remote>« benutzt wird, um Bezüge zu "
+"Markierungen zu bekommen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1370
+msgid ""
+"If a tag B<v20.5> is the newest tag, the above example downloads "
+"I<spkg>B<-20.5.tar.xz> after making a full clone of the git repository which "
+"is needed for dumb git server."
+msgstr ""
+"Falls eine Markierung B<v20.5> am neusten ist, lädt das vorhergehende "
+"Beispiel I<spkg>B<-20.5.tar.xz> herunter, nachdem das Git-Depot geklont "
+"wurde, was für dumme Git-Server notwendig ist."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1374
+msgid "If tags are signed, set B<pgpmode=gittag> to verify them."
+msgstr ""
+"Falls Markierungen signiert sind, setzen Sie B<pgpmode=gittag>, um sie zu "
+"prüfen."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1376
+msgid "direct access to the git repository (HEAD)"
+msgstr "direkter Zugriff auf das Git-Depot (HEAD)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1378
+msgid ""
+"If the upstream only publishes its code via the git repository and its code "
+"has no web interface nor the tags to obtain the released tarball, you can "
+"use B<uscan> with the HEAD of the git repository to track and package the "
+"new upstream release with an automatically generated version string."
+msgstr ""
+"Falls die Ursprungsautoren ihren Code nur über das Git-Depot veröffentlichen "
+"und es weder eine Web-Schnittstelle noch Markierungen hat, um den "
+"Veröffentlichungs-Tarball zu bekommen, können Sie B<uscan> mit dem HEAD des "
+"Git-Depots benutzen, um die neue Veröffentlichung der Ursprungsautoren "
+"nachzuverfolgen und mit einer automatisch erstellten Versionszeichenkette zu "
+"paketieren."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1383
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"mode=git, pgpmode=none\" \\\n"
+#| " https://github.com/Debian/dh-make-golang \\\n"
+#| " HEAD debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"mode=git, pgpmode=none\" \\\n"
+" https://github.com/Debian/dh-make-golang \\\n"
+" HEAD\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=git, pgpmode=none\" \\\n"
+" https://github.com/Debian/dh-make-golang \\\n"
+" HEAD debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1388
+msgid ""
+"Please note that a local shallow copy of the git repository is made with "
+"\"B<git clone --bare --depth=1> ...\" normally in the target directory. "
+"B<uscan> generates the new upstream version with \"B<git log --date=format:"
+"%Y%m%d --pretty=0.0~git%cd.%h>\" on this local copy of repository as its "
+"default behavior."
+msgstr ""
+"Bitte beachten Sie, dass eine lokale oberflächlich mit »B<git clone --bare --"
+"depth=1> …« angelegte Kopie des Git-Depots normalerweise im Zielverzeichnis "
+"erstellt wird. B<uscan> erzeugt standardmäßig die neue Version der "
+"Ursprungsautoren mit »B<git log --date=format:%Y%m%d --pretty=0.0~git%cd."
+"%h>« auf dieser lokalen Kopie des Depots."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1394
+msgid ""
+"The generation of the upstream version string may the adjusted to your taste "
+"by adding B<pretty> and B<date> options to the B<opts> arguments."
+msgstr ""
+"Das Erzeugen der Versionszeichenkette der Ursprungsautoren kann nach Ihrem "
+"Geschmack angepasst werden, indem Sie die den B<opts>-Argumenten die "
+"Optionen B<pretty> und B<date> hinzufügen."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1397
+#, fuzzy
+#| msgid "direct access to the git repository (tags)"
+msgid "direct access to the Subversion repository (tags)"
+msgstr "direkter Zugriff auf ein Git-Depot (Markierungen)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1399
+#, fuzzy
+#| msgid ""
+#| "If the upstream only publishes its code via the git repository and its "
+#| "code has no web interface to obtain the release tarball, you can use "
+#| "B<uscan> with the tags of the git repository to track and package the new "
+#| "upstream release."
+msgid ""
+"If the upstream only publishes its code via the Subversion repository and "
+"its code has no web interface to obtain the release tarball, you can use "
+"B<uscan> with the tags of the Subversion repository to track and package the "
+"new upstream release."
+msgstr ""
+"Falls die Ursprungsautoren ihren Code nur über das Git-Depot veröffentlichen "
+"und ihr Code keine Web-Schnittstelle hat, um den Veröffentlichungs-Tarball "
+"zu bekommen, können Sie B<uscan> mit den Markierungen des Git-Depots "
+"benutzen, um die neue Veröffentlichung der Originalautoren nachzuverfolgen "
+"und zu paketieren."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1404
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"mode=git, pgpmode=none\" \\\n"
+#| " https://github.com/Debian/dh-make-golang \\\n"
+#| " HEAD debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/tags/ \\\n"
+" @ANY_VERSION@\\/\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=git, pgpmode=none\" \\\n"
+" https://github.com/Debian/dh-make-golang \\\n"
+" HEAD debian uupdate\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1409
+#, fuzzy
+#| msgid "direct access to the git repository (HEAD)"
+msgid "direct access to the Subversion repository (HEAD)"
+msgstr "direkter Zugriff auf das Git-Depot (HEAD)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1411
+#, fuzzy
+#| msgid ""
+#| "If the upstream only publishes its code via the git repository and its "
+#| "code has no web interface nor the tags to obtain the released tarball, "
+#| "you can use B<uscan> with the HEAD of the git repository to track and "
+#| "package the new upstream release with an automatically generated version "
+#| "string."
+msgid ""
+"If the upstream only publishes its code via the Subversion repository and "
+"its code has no web interface to obtain the release tarball, you can use "
+"B<uscan> to get the most recent source of a subtree in the repository with "
+"an automatically generated version string."
+msgstr ""
+"Falls die Ursprungsautoren ihren Code nur über das Git-Depot veröffentlichen "
+"und es weder eine Web-Schnittstelle noch Markierungen hat, um den "
+"Veröffentlichungs-Tarball zu bekommen, können Sie B<uscan> mit dem HEAD des "
+"Git-Depots benutzen, um die neue Veröffentlichung der Ursprungsautoren "
+"nachzuverfolgen und mit einer automatisch erstellten Versionszeichenkette zu "
+"paketieren."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1416
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"mode=git, pgpmode=none\" \\\n"
+#| " https://github.com/Debian/dh-make-golang \\\n"
+#| " HEAD debian uupdate\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/trunk/ \\\n"
+" HEAD\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=git, pgpmode=none\" \\\n"
+" https://github.com/Debian/dh-make-golang \\\n"
+" HEAD debian uupdate\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1421
+msgid ""
+"By default, B<uscan> generates the new upstream version by appending the "
+"revision number to \"0.0~svn\". This can later be changed using "
+"B<uversionmangle>."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:1424
+msgid "COPYRIGHT FILE EXAMPLES"
+msgstr "BEISPIELE FÜR COPYRIGHT-DATEIEN"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1426
+msgid ""
+"Here is an example for the F<debian/copyright> file which initiates "
+"automatic repackaging of the upstream tarball into I<< <spkg>_<oversion>."
+"orig.tar.gz >> (In F<debian/copyright>, the B<Files-Excluded> and B<Files-"
+"Excluded->I<component> stanzas are a part of the first paragraph and there "
+"is a blank line before the following paragraphs which contain B<Files> and "
+"other stanzas.):"
+msgstr ""
+"Es folgt ein Beispiel für die Datei F<debian/copyright> die ein "
+"automatisches erneutes Packen des Tarballs der Ursprungsautoren in I<< "
+"<Quellpaket>_<Originalversion>.orig.tar.gz >> anstößt (In F<debian/"
+"copyright> sind die Absätze B<Files-Excluded> und B<Files-Excluded-"
+">I<Komponente> ein Teil des ersten Abschnitts und dort ist eine leere Zeile "
+"vor den folgenden Abschnitten, die B<Files> und andere Absätze enthalten.):"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1433
+#, no-wrap
+msgid ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+msgstr ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1440 ../scripts/uscan.pl:1461
+#, no-wrap
+msgid ""
+" Files: *\n"
+" Copyright: ...\n"
+" ...\n"
+"\n"
+msgstr ""
+" Files: *\n"
+" Copyright: …\n"
+" …\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1444
+msgid ""
+"Here is another example for the F<debian/copyright> file which initiates "
+"automatic repackaging of the multiple upstream tarballs into I<< "
+"<spkg>_<oversion>.orig.tar.gz >> and I<< <spkg>_<oversion>.orig-bar.tar.gz "
+">>:"
+msgstr ""
+"Hier ein weiteres Beispiel für die F<debian/copyright>-Datei, die ein "
+"automatisches erneutes Packen der Tarbälle mit mehreren Paketen (MUT) der "
+"Ursprungsautoren in I<< <Quellpaket>_<Originalversion>.orig.tar.gz >> und "
+"I<< <Quellpaket>_<Originalversion>.orig-bar.tar.gz >> anstößt."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1449
+#, no-wrap
+msgid ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+" Files-Excluded-bar: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+msgstr ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+" Files-Excluded-bar: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1465
+msgid "See mk-origtargz(1)."
+msgstr "Siehe mk-origtargz>(1)."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1467
+msgid "KEYRING FILE EXAMPLES"
+msgstr "BEISPIELE FÜR SCHLÜSSELBUNDDATEIEN"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1469
+msgid ""
+"Let's assume that the upstream \"B<< uscan test key (no secret) "
+"<none@debian.org> >>\" signs its package with a secret OpenPGP key and "
+"publishes the corresponding public OpenPGP key. This public OpenPGP key can "
+"be identified in 3 ways using the hexadecimal form."
+msgstr ""
+"Nehmen wir einmal an, dass »B<< Uscan-Testschlüssel (kein Geheimnis) "
+"<none@debian.org> >> der Ursprungsautoren Pakete mit einem geheimen OpenPGP-"
+"Schlüssel signiert und den zugehörigen öffentlichen OpenPGP-Schlüssel "
+"veröffentlicht. Dieser öffentliche OpenPGP-Schlüssel kann mittels der "
+"hexadezimalen Form auf drei Arten identifiziert werden."
+
+#. type: =item
+#: ../scripts/uscan.pl:1476
+msgid ""
+"* The fingerprint as the 20 byte data calculated from the public OpenPGP "
+"key. E. g., 'B<CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF>'"
+msgstr ""
+"* Der Fingerabdruck als die 20 Byte Daten, die vom öffentlichen OpenPGP-"
+"Schlüssel berechnet wurden. Z.B.»B<CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 "
+"7254 3FAF>«"
+
+#. type: =item
+#: ../scripts/uscan.pl:1479
+msgid ""
+"* The long keyid as the last 8 byte data of the fingerprint. E. g., "
+"'B<C77E2D6872543FAF>'"
+msgstr ""
+"* Die lange Schlüsselkennung als die letzten acht Byte des Fingerabdrucks. Z."
+"B. »B<C77E2D6872543FAF>«"
+
+#. type: =item
+#: ../scripts/uscan.pl:1482
+msgid ""
+"* The short keyid is the last 4 byte data of the fingerprint. E. g., "
+"'B<72543FAF>'"
+msgstr ""
+"* Die kurze Schlüsselkennung als die letzten vier Byte des Fingerabdrucks. Z."
+"B. »B<72543FAF>«"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1487
+msgid ""
+"Considering the existence of the collision attack on the short keyid, the "
+"use of the long keyid is recommended for receiving keys from the public key "
+"servers. You must verify the downloaded OpenPGP key using its full "
+"fingerprint value which you know is the trusted one."
+msgstr ""
+"In Anbetracht, dass es Kollisionsangriffe auf die kurze Schlüsselkennung "
+"gibt, wird empfohlen, die lange Schlüsselkennung zum Empfang von Schlüsseln "
+"des öffentlichen Schlüsselservers zu verwenden. Sie müssen den "
+"heruntergeladenen OpenPGP-Schlüssel mittels seines vollständigen und Ihnen "
+"bereits bekanntenFingerabdruckwerts prüfen, um festzustellen, ob es der "
+"vertrauenswürdige ist."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1492
+msgid ""
+"The armored keyring file F<debian/upstream/signing-key.asc> can be created "
+"by using the B<gpg> (or B<gpg2>) command as follows."
+msgstr ""
+"Die ASCII-Hülle der Schlüsselbunddatei F<debian/upstream/signing-key.asc> "
+"kann mit dem Befehl B<gpg> (oder B<gpg2>) wie folgt erstellt werden:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1495
+#, no-wrap
+msgid ""
+" $ gpg --recv-keys \"C77E2D6872543FAF\"\n"
+" ...\n"
+" $ gpg --finger \"C77E2D6872543FAF\"\n"
+" pub 4096R/72543FAF 2015-09-02\n"
+" Key fingerprint = CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF\n"
+" uid uscan test key (no secret) <none@debian.org>\n"
+" sub 4096R/52C6ED39 2015-09-02\n"
+" $ cd path/to/<upkg>-<uversion>\n"
+" $ mkdir -p debian/upstream\n"
+" $ gpg --export --export-options export-minimal --armor \\\n"
+" 'CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF' \\\n"
+" >debian/upstream/signing-key.asc\n"
+"\n"
+msgstr ""
+" $ gpg --recv-keys \"C77E2D6872543FAF\"\n"
+" ...\n"
+" $ gpg --finger \"C77E2D6872543FAF\"\n"
+" pub 4096R/72543FAF 2015-09-02\n"
+" Key fingerprint = CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF\n"
+" uid uscan test key (no secret) <none@debian.org>\n"
+" sub 4096R/52C6ED39 2015-09-02\n"
+" $ cd path/to/<upkg>-<uversion>\n"
+" $ mkdir -p debian/upstream\n"
+" $ gpg --export --export-options export-minimal --armor \\\n"
+" 'CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF' \\\n"
+" >debian/upstream/signing-key.asc\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1508
+msgid ""
+"The binary keyring files, F<debian/upstream/signing-key.pgp> and F<debian/"
+"upstream-signing-key.pgp>, are still supported but deprecated."
+msgstr ""
+"Die binären Schlüsselbunddateien F<debian/upstream/signing-key.pgp> und "
+"F<debian/upstream-signing-key.pgp> werden immer noch unterstützt, sind "
+"jedoch missbilligt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1511
+msgid ""
+"If a group of developers sign the package, you need to list fingerprints of "
+"all of them in the argument for B<gpg --export ...> to make the keyring to "
+"contain all OpenPGP keys of them."
+msgstr ""
+"Falls eine Gruppe von Entwicklern das Paket signiert, müssen Sie die "
+"Fingerabdrücke von ihnen allen im Argument für B<gpg --export …> aufführen, "
+"damit der Schlüsselbund alle ihre OpenPGP-Schlüssel enthält."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1515
+msgid ""
+"Sometimes you may wonder who made a signature file. You can get the public "
+"keyid used to create the detached signature file F<foo-2.0.tar.gz.asc> by "
+"running B<gpg> as:"
+msgstr ""
+"Manchmal fragen Sie sich vielleicht, wer die Signaturdatei erstellt hat. Sie "
+"können die öffentliche Schlüsselkennung erhalten, um die abgetrennte "
+"Signaturdatei F<foo-2.0.tar.gz.asc> zu erstellen, indem Sie B<gpg> wie folgt "
+"ausführen:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1519
+#, no-wrap
+msgid ""
+" $ gpg -vv foo-2.0.tar.gz.asc\n"
+" gpg: armor: BEGIN PGP SIGNATURE\n"
+" gpg: armor header: Version: GnuPG v1\n"
+" :signature packet: algo 1, keyid C77E2D6872543FAF\n"
+" \tversion 4, created 1445177469, md5len 0, sigclass 0x00\n"
+" \tdigest algo 2, begin of digest 7a c7\n"
+" \thashed subpkt 2 len 4 (sig created 2015-10-18)\n"
+" \tsubpkt 16 len 8 (issuer key ID C77E2D6872543FAF)\n"
+" \tdata: [4091 bits]\n"
+" gpg: assuming signed data in `foo-2.0.tar.gz'\n"
+" gpg: Signature made Sun 18 Oct 2015 11:11:09 PM JST using RSA key ID 72543FAF\n"
+" ...\n"
+"\n"
+msgstr ""
+" $ gpg -vv foo-2.0.tar.gz.asc\n"
+" gpg: armor: BEGIN PGP SIGNATURE\n"
+" gpg: armor header: Version: GnuPG v1\n"
+" :signature packet: algo 1, keyid C77E2D6872543FAF\n"
+" \tversion 4, created 1445177469, md5len 0, sigclass 0x00\n"
+" \tdigest algo 2, begin of digest 7a c7\n"
+" \thashed subpkt 2 len 4 (sig created 2015-10-18)\n"
+" \tsubpkt 16 len 8 (issuer key ID C77E2D6872543FAF)\n"
+" \tdata: [4091 bits]\n"
+" gpg: assuming signed data in `foo-2.0.tar.gz'\n"
+" gpg: Signature made Sun 18 Oct 2015 11:11:09 PM JST using RSA key ID 72543FAF\n"
+" ...\n"
+"\n"
+
+#. type: =head1
+#: ../scripts/uscan.pl:1532
+msgid "COMMANDLINE OPTIONS"
+msgstr "BEFEHLZEILENOPTIONEN"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1534
+msgid "For the basic usage, B<uscan> does not require to set these options."
+msgstr "Für die einfache Benutzung benötigt B<uscan> diese Optionen nicht."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1548
+#, no-wrap
+msgid ""
+" uscan --conf-file test.conf --verbose\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1552
+#, no-wrap
+msgid ""
+" uscan --conf-file +test.conf --verbose\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1563
+msgid "B<--no-verbose>"
+msgstr "B<--no-verbose>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1565
+msgid "Don't report verbose information. (default)"
+msgstr "gibt keine detaillierten Informationen aus. (Voreinstellung)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1569
+msgid "Report verbose information."
+msgstr "zeigt detaillierte Informationen an."
+
+#. type: =item
+#: ../scripts/uscan.pl:1571
+msgid "B<--debug>, B<-vv>"
+msgstr "B<--debug>, B<-vv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1573
+#, fuzzy
+#| msgid "Report verbose information."
+msgid "Report verbose information and some internal state values."
+msgstr "zeigt detaillierte Informationen an."
+
+#. type: =item
+#: ../scripts/uscan.pl:1575
+msgid "B<--extra-debug>, B<-vvv>"
+msgstr "B<--extra-debug>, B<-vvv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1577
+msgid ""
+"Report verbose information including the downloaded web pages as processed "
+"to STDERR for debugging."
+msgstr ""
+"berichtet detaillierte Informationen einschließlich heruntergeladener "
+"Webseiten als verarbeitet zur Fehlersuche auf die Standardfehlerausgabe."
+
+#. type: =item
+#: ../scripts/uscan.pl:1580
+msgid "B<--dehs>"
+msgstr "B<--dehs>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1582
+msgid ""
+"Send DEHS style output (XML-type) to STDOUT, while send all other uscan "
+"output to STDERR."
+msgstr ""
+"sendet Ausgaben im DEHS-Stil (XML-Typ) an die Standardausgabe, während alle "
+"anderen Ausgaben von Uscan an die Standardfehlerausgabe gesandt werden."
+
+#. type: =item
+#: ../scripts/uscan.pl:1585
+msgid "B<--no-dehs>"
+msgstr "B<--no-dehs>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1587
+msgid "Use only traditional uscan output format. (default)"
+msgstr "verwendet nur das traditionelle Uscan-Ausgabeformat.(Voreinstellung)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1589
+msgid "B<--download>, B<-d>"
+msgstr "B<--download>, B<-d>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1591
+msgid "Download the new upstream release. (default)"
+msgstr ""
+"lädt die neue Veröffentlichung der Ursprungsautoren herunter. "
+"(Voreinstellung)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1593
+msgid "B<--force-download>, B<-dd>"
+msgstr "B<--force-download>, B<-dd>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1595
+msgid ""
+"Download the new upstream release even if up-to-date. (may not overwrite the "
+"local file)"
+msgstr ""
+"lädt die neue Veröffentlichung der Ursprungsautoren sogar dann herunter, "
+"wenn sie aktuell ist (wird jedoch nicht die lokale Datei überschreiben)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1597
+msgid "B<--overwrite-download>, B<-ddd>"
+msgstr "B<--overwrite-download>, B<-ddd>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1599
+msgid ""
+"Download the new upstream release even if up-to-date. (may overwrite the "
+"local file)"
+msgstr ""
+"lädt die neue Veröffentlichung der Ursprungsautoren sogar dann herunter, "
+"wenn sie aktuell ist (kann die lokale Datei überschreiben)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1601
+msgid "B<--no-download>, B<--nodownload>"
+msgstr "B<--no-download>, B<--nodownload>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1603
+msgid "Don't download and report information."
+msgstr "lädt die Informationen nicht herunter und meldet sie nicht."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1605
+msgid "Previously downloaded tarballs may be used."
+msgstr "Vorher heruntergeladene Tarbälle können verwendet werden."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1607
+msgid "Change default to B<--skip-signature>."
+msgstr "ändert die Voreinstellung in B<--skip-signature>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1609
+msgid "B<--signature>"
+msgstr "B<--signature>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1611
+msgid "Download signature. (default)"
+msgstr "lädt die Signatur herunter. (Voreinstellung)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1613
+msgid "B<--no-signature>"
+msgstr "B<--no-signature>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1615
+msgid "Don't download signature but verify if already downloaded."
+msgstr ""
+"lädt die Signatur nicht herunter, prüft jedoch, ob sie bereits "
+"heruntergeladen wurde."
+
+#. type: =item
+#: ../scripts/uscan.pl:1617
+msgid "B<--skip-signature>"
+msgstr "B<--skip-signature>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1619
+msgid "Don't bother download signature nor verifying signature."
+msgstr ""
+"belästigt weder mit dem Herunterladen noch mit dem Prüfen der Signatur."
+
+#. type: =item
+#: ../scripts/uscan.pl:1621
+msgid "B<--safe>, B<--report>"
+msgstr "B<--safe>, B<--report>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1623
+msgid ""
+"Avoid running unsafe scripts by skipping both the repacking of the "
+"downloaded package and the updating of the new source tree."
+msgstr ""
+"vermeidet die Ausführung unsicherer Skripte, indem sowohl das erneute Packen "
+"des heruntergeladenen Pakets als auch das Aktualisieren des neuen "
+"Quellcodeverzeichnisbaums übersprungen wird."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1626
+msgid "Change default to B<--no-download> and B<--skip-signature>."
+msgstr "ändert die Voreinstellung in B<--no-download> und B<--skip-signature>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1628
+msgid ""
+"When the objective of running B<uscan> is to gather the upstream package "
+"status under the security conscious environment, please make sure to use "
+"this option."
+msgstr ""
+"Wenn B<uscan> mit dem Ziel ausgeführt wird, den Status des Pakets der "
+"Ursprungsautoren in eine sicherheitsbewusste Umgebung aufzunehmen, stellen "
+"Sie sicher, dass Sie diese Option verwenden."
+
+#. type: =item
+#: ../scripts/uscan.pl:1631
+msgid "B<--report-status>"
+msgstr "B<--report-status>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1633
+msgid "This is equivalent of setting \"B<--verbose --safe>\"."
+msgstr "Dies entspricht dem Setzen der Option »B<--verbose --safe>«"
+
+#. type: =item
+#: ../scripts/uscan.pl:1635
+msgid "B<--download-version> I<version>"
+msgstr "B<--download-version> I<Version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1637
+msgid ""
+"Specify the I<version> which the upstream release must match in order to be "
+"considered, rather than using the release with the highest version. (a best "
+"effort feature)"
+msgstr ""
+"gibt die I<Version> an, zu der die Veröffentlichung der Ursprungsautoren "
+"passen muss, um anstelle der Veröffentlichung mit der höchsten "
+"Versionsnummer berücksichtigt zu werden (eine bestmöglich erfüllte "
+"Funktionalität)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1641
+msgid "B<--download-debversion> I<version>"
+msgstr "B<--download-debversion> I<version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1643
+msgid ""
+"Specify the Debian package version to download the corresponding upstream "
+"release version. The B<dversionmangle> and B<uversionmangle> rules are "
+"considered. (a best effort feature)"
+msgstr ""
+"gibt die Debian-Paketversion an, um die entsprechende "
+"Veröffentlichungsversion der Ursprungsautoren herunterzuladen. Die Regeln "
+"B<dversionmangle> und B<uversionmangle> werden berücksichtigt (eine "
+"bestmöglich erfüllte Funktionalität)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1647
+msgid "B<--download-current-version>"
+msgstr "B<--download-current-version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1649
+msgid "Download the currently packaged version. (a best effort feature)"
+msgstr ""
+"lädt die aktuelle paketierte Version herunter (eine bestmöglich erfüllte "
+"Funktionalität)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1654 ../scripts/uscan.pl:1658
+msgid ""
+"See the below section L<Directory name checking> for an explanation of this "
+"option."
+msgstr ""
+"Die Erklärung dieser Option finden Sie im nachfolgenden Abschnitt B<Prüfung "
+"von Verzeichnisnamen>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1660
+msgid ""
+"B<--destdir> I<path> Normally, B<uscan> changes its internal current "
+"directory to the package's source directory where the F<debian/> is "
+"located. Then the destination directory for the downloaded tarball and "
+"other files is set to the parent directory F<../> from this internal current "
+"directory."
+msgstr ""
+"B<--destdir> I<Pfad> Normalerweise ändert B<uscan> sein internes aktuelles "
+"Verzeichnis auf das Quellverzeichnis des Pakets, in dem F<debian/> liegt. "
+"Dann wird das Zielverzeichnis zum Herunterladen des Tarballs und anderer "
+"Dateien auf das übergeordnete Verzeichnis F<../> dieses internen aktuellen "
+"Verzeichnisses gesetzt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1666
+msgid ""
+"This default destination directory can be overridden by setting B<--destdir> "
+"option to a particular I<path>. If this I<path> is a relative path, the "
+"destination directory is determined in relative to the internal current "
+"directory of B<uscan> execution. If this I<path> is a absolute path, the "
+"destination directory is set to I<path> irrespective of the internal current "
+"directory of B<uscan> execution."
+msgstr ""
+"Dieses Standardzielverzeichnis kann durch Setzen der Option B<--destdir> auf "
+"einen bestimmten I<Pfad> außer Kraft gesetzt werden. Falls dieser I<Pfad> "
+"relativ ist, wird das Zielverzeichnis relativ zum internen aktuellen "
+"Verzeichnis bestimmt, in dem B<uscan> ausgeführt wird. Falls dieser I<Pfad> "
+"absolut ist, wird das Zielverzeichnis ungeachtet des internen aktuellen "
+"Verzeichnis, in dem B<uscan> ausgeführt wird, auf I<Pfad> gesetzt."
+
+# FIXME s/sinple/simple/
+#. type: textblock
+#: ../scripts/uscan.pl:1673
+#, fuzzy
+#| msgid ""
+#| "The above is true not only for the sinple B<uscan> run in the single "
+#| "source tree but also for the advanced scanning B<uscan> run with "
+#| "subdirectories holding multiple source trees."
+msgid ""
+"The above is true not only for the simple B<uscan> run in the single source "
+"tree but also for the advanced scanning B<uscan> run with subdirectories "
+"holding multiple source trees."
+msgstr ""
+"Obiges gilt nicht nur für die einfache Ausführung von B<uscan> in einem "
+"einzelnen Quellverzeichnisbaum, sondern auch für erweitertes Scannen durch "
+"B<uscan> mit Unterverzeichnissen, in denen mehrere Quellverzeichnisbäume "
+"liegen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1677
+msgid ""
+"One exception is when B<--watchfile> and B<--package> are used together. "
+"For this case, the internal current directory of B<uscan> execution and the "
+"default destination directory are set to the current directory F<.> where "
+"B<uscan> is started. The default destination directory can be overridden by "
+"setting B<--destdir> option as well."
+msgstr ""
+"Eine Ausnahme liegt vor, wenn B<--watchfile> und B<--package> zusammen "
+"benutzt werden. In diesem Fall werden das interne aktuelle "
+"Ausführungsverzeichnis von B<uscan> und das Standardzielverzeichnis auf das "
+"aktuelle Verzeichnis F<.>, von dem B<uscan> gestartet wird, gesetzt. Das "
+"Standardzielverzeichnis kann auch hier durch Setzen der Option B<--destdir> "
+"außer Kraft gesetzt werden."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1685
+msgid ""
+"Specify the name of the package to check for rather than examining F<debian/"
+"changelog>; this requires the B<--upstream-version> (unless a version is "
+"specified in the F<watch> file) and B<--watchfile> options as well. "
+"Furthermore, no directory scanning will be done and nothing will be "
+"downloaded. This option automatically sets B<--no-download> and B<--skip-"
+"signature>; and probably most useful in conjunction with the DEHS system "
+"(and B<--dehs>)."
+msgstr ""
+"gibt den Namen des zu prüfenden Pakets an, anstatt F<debian/changelog> zu "
+"untersuchen; dies erfordert die Optionen B<--upstream-version> (es sei denn, "
+"in der Datei F<watch> wurde eine Version angegeben) sowie B<--watchfile>. "
+"Zudem wird kein Verzeichnis durchsucht und es wird nichts heruntergeladen. "
+"Diese Option setzt automatisch B<--no-download> and B<--skip-signature>. Sie "
+"ist wahrscheinlich in Verbindung mit dem DEHS-System (und B<--dehs>) an "
+"nützlichsten."
+
+#. type: =item
+#: ../scripts/uscan.pl:1692
+msgid "B<--upstream-version> I<upstream-version>"
+msgstr "B<--upstream-version> I<Version_der_Ursprungsautoren>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1694
+msgid ""
+"Specify the current upstream version rather than examine F<debian/watch> or "
+"F<debian/changelog> to determine it. This is ignored if a directory scan is "
+"being performed and more than one F<debian/watch> file is found."
+msgstr ""
+"gibt die aktuelle Version der Ursprungsautoren an, statt die F<debian/"
+"watch>- oder F<debian/changelog>-Datei zu untersuchen, um sie zu bestimmen. "
+"Dies wird ignoriert, falls ein Verzeichnis-Scan durchgeführt und mehr als "
+"eine F<debian/watch>-Datei gefunden wird."
+
+#. type: =item
+#: ../scripts/uscan.pl:1698
+msgid "B<--watchfile> I<watchfile>"
+msgstr "B<--watchfile> I<watch-Datei>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1700
+msgid ""
+"Specify the I<watchfile> rather than perform a directory scan to determine "
+"it. If this option is used without B<--package>, then B<uscan> must be "
+"called from within the Debian package source tree (so that F<debian/"
+"changelog> can be found simply by stepping up through the tree)."
+msgstr ""
+"gibt die I<Watch-Datei> an, statt eine Verzeichnisdurchsuchung "
+"durchzuführen, um sie zu bestimmen. Falls diese Option ohne B<--package> "
+"benutzt wird, muss B<uscan> aus dem Debian-Paketquellenverzeichnisbaum "
+"aufgerufen werden (so dass F<debian/changelog> einfach beim Hochlaufen des "
+"Verzeichnisbaums gefunden werden kann)."
+
+# FIXME s/anywhare/anywhere/
+#. type: textblock
+#: ../scripts/uscan.pl:1705
+msgid ""
+"One exception is when B<--watchfile> and B<--package> are used together. "
+"B<uscan> can be called from anywhare and the internal current directory of "
+"B<uscan> execution and the default destination directory are set to the "
+"current directory F<.> where B<uscan> is started."
+msgstr ""
+"Eine Ausnahme liegt vor, wenn B<--watchfile> und B<--package> zusammen "
+"benutzt werden. B<uscan> kann von überall aufgerufen werden und das interne "
+"Ausführungsverzeichnis von B<uscan> sowie das Standardzielverzeichnis werden "
+"auf das aktuelle Verzeichnis F<.> gesetzt, von wo B<uscan> gestartet wird."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1710
+msgid "See more in the B<--destdir> explanation."
+msgstr "Weitere Einzelheiten erfahren Sie in der Erläuterung von B<--destdir>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1712
+msgid "B<--bare>"
+msgstr "B<--bare>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1714
+msgid ""
+"Disable all site specific special case codes to perform URL redirections and "
+"page content alterations."
+msgstr ""
+"deaktiviert alle Site-spezifischen Codes für Sonderfälle, die URL-"
+"Weiterleitungen und Änderungen des Seiteninhalts durchführen."
+
+#. type: =item
+#: ../scripts/uscan.pl:1717
+msgid "B<--http-header>"
+msgstr "B<--http-header>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1719
+msgid ""
+"Add specified header in HTTP requests for matching url. This option can be "
+"used more than one time, values must be in the form \"baseUrl@Name=value. "
+"Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1722
+#, no-wrap
+msgid ""
+" uscan --http-header https://example.org@My-Token=qwertyuiop\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1724
+msgid "Security:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1728
+msgid ""
+"The given I<baseUrl> must exactly match the base url before '/'. Examples:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1731
+#, no-wrap
+msgid ""
+" | --http-header value | Good for | Never used |\n"
+" +------------------------------------+-----------------------------+------------+\n"
+" | https://example.org.com@Hdr=Value | https://example.org.com/... | |\n"
+" | https://example.org.com/@Hdr=Value | | X |\n"
+" | https://e.com:1879@Hdr=Value | https://e.com:1879/... | |\n"
+" | https://e.com:1879/dir@Hdr=Value | https://e.com:1879/dir/... | |\n"
+" | https://e.com:1879/dir/@Hdr=Value | | X |\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1739
+msgid ""
+"It is strongly recommended to not use this feature to pass a secret token "
+"over unciphered connection I<(http://)>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1742
+msgid ""
+"You can use C<USCAN_HTTP_HEADER> variable (in C<~/.devscripts>) to hide "
+"secret token from scripts"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1747
+msgid "B<--no-exclusion>"
+msgstr "B<--no-exclusion>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1749
+msgid ""
+"Don't automatically exclude files mentioned in F<debian/copyright> field "
+"B<Files-Excluded>."
+msgstr ""
+"schließt Dateien, die in F<debian/copyright> im Feld B<Files-Excluded> "
+"erwähnt wurden, nicht automatisch aus."
+
+#. type: =item
+#: ../scripts/uscan.pl:1751
+msgid "B<--pasv>"
+msgstr "B<--pasv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1753
+msgid "Force PASV mode for FTP connections."
+msgstr "erzwingt bei FTP-Verbindungen den PASV-Modus."
+
+#. type: =item
+#: ../scripts/uscan.pl:1755
+msgid "B<--no-pasv>"
+msgstr "B<--no-pasv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1757
+msgid "Don't use PASV mode for FTP connections."
+msgstr "verwendet bei FTP-Verbindungen nicht den PASV-Modus."
+
+#. type: TP
+#: ../scripts/uscan.pl:1759 ../scripts/uupdate.1:83
+#, no-wrap
+msgid "B<--no-symlink>"
+msgstr "B<--no-symlink>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1761
+msgid "Don't rename nor repack upstream tarball."
+msgstr "benennt den Original-Tarball weder um, noch wird er neu gepackt."
+
+#. type: =item
+#: ../scripts/uscan.pl:1763
+msgid "B<--timeout> I<N>"
+msgstr "B<--timeout> I<N>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1765
+msgid "Set timeout to I<N> seconds (default 20 seconds)."
+msgstr ""
+"setzt die Zeitüberschreitung auf I<N> Sekunden (Voreinstellung 20 Sekunden)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1767
+msgid "B<--user-agent>, B<--useragent>"
+msgstr "B<--user-agent>, B<--useragent>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1769
+msgid "Override the default user agent header."
+msgstr "setzt die vorgegebene User-Agent-Kopfzeile außer Kraft. "
+
+#. type: textblock
+#: ../scripts/uscan.pl:1773
+msgid "Give brief usage information."
+msgstr "gibt eine kurze Gebrauchsinformation."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1781
+msgid ""
+"B<uscan> also accepts following options and passes them to B<mk-origtargz>:"
+msgstr ""
+"B<uscan> akzeptiert außerdem die folgenden Optionen und leitet sie an B<mk-"
+"origtargz> weiter:"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1787
+msgid ""
+"Make B<orig.tar.gz> (with the appropriate extension) symlink to the "
+"downloaded files. (This is the default behavior.)"
+msgstr ""
+"erstellt symbolische B<orig.tar.gz>-Verweise (mit passender Endung) auf die "
+"heruntergeladenen Dateien. (Dies ist das Standardverhalten.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1792
+msgid "Instead of symlinking as described above, copy the downloaded files."
+msgstr ""
+"kopiert die heruntergeladenen Dateien, statt, wie oben beschrieben, "
+"symbolische Verweise darauf zu erstellen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1796
+msgid "Instead of symlinking as described above, rename the downloaded files."
+msgstr ""
+"benennt die heruntergeladenen Dateien um, statt, wie oben beschrieben, "
+"symbolische Verweise darauf zu erstellen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1800
+#, fuzzy
+#| msgid ""
+#| "After having downloaded an lzma tar, xz tar, bzip tar, gz tar, zip, jar, "
+#| "xpi archive, repack it to the specified compression (see B<--"
+#| "compression>)."
+msgid ""
+"After having downloaded an lzma tar, xz tar, bzip tar, gz tar, zip, jar, "
+"xpi, zstd archive, repack it to the specified compression (see B<--"
+"compression>)."
+msgstr ""
+"Nachdem ein »lzma«-, »tar«,- »xz tar«,- »bzip tar«,- »gz tar«,- »zip«,- "
+"»jar«- oder »xpi«,-Archiv heruntergeladen wurde, wird es mit einer "
+"speziellen Komprimierung neu gepackt (siehe B<--compression>)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1803
+#, fuzzy
+#| msgid ""
+#| "The unzip package must be installed in order to repack zip and jar "
+#| "archives, the mozilla-devscripts package must be installed to repack xpi "
+#| "archives, and the xz-utils package must be installed to repack lzma or xz "
+#| "tar archives."
+msgid ""
+"The unzip package must be installed in order to repack zip and jar archives, "
+"the mozilla-devscripts package must be installed to repack xpi archives, the "
+"xz-utils package must be installed to repack lzma or xz tar archives, and "
+"zstd must be installed to repack zstd archives."
+msgstr ""
+"Das Paket Unzip muss installiert sein, um die Zip- und Jar-Archive neu zu "
+"packen, das Paket Mozilla-Devscripts muss installiert sein, um die Xpi-"
+"Archive neu zu packen und das Paket Xz-Utils muss installiert sein, um die "
+"LZMA- oder Xz-Tar-Archive neu zu packen."
+
+#. type: =item
+#: ../scripts/uscan.pl:1808
+msgid "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> ]"
+msgstr "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> ]"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1810
+msgid ""
+"In the case where the upstream sources are repacked (either because B<--"
+"repack> option is given or F<debian/copyright> contains the field B<Files-"
+"Excluded>), it is possible to control the compression method via the "
+"parameter. The default is B<gzip> for normal tarballs, and B<xz> for "
+"tarballs generated directly from the git repository."
+msgstr ""
+"Falls die Quellen der Originalautoren neu gepackt wurden (entweder weil die "
+"Option B<--repack> angegeben wurde oder F<debian/copyright> das Feld B<Files-"
+"Excluded> enthält), ist es möglich, die Komprimierungsmethode über diesen "
+"Parameter zu steuern. Voreinstellung ist für normale Tarbälle B<gzip> und "
+"B<xz> für Tarbälle, die direkt aus dem Git-Depot erstellt werden."
+
+#. type: =item
+#: ../scripts/uscan.pl:1816
+msgid "B<--copyright-file> I<copyright-file>"
+msgstr "B<--copyright-file> I<Copyright-Datei>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1818
+msgid ""
+"Exclude files mentioned in B<Files-Excluded> in the given I<copyright-"
+"file>. This is useful when running B<uscan> not within a source package "
+"directory."
+msgstr ""
+"schließt Dateien aus, die in B<Files-Excluded> in der angegebenen "
+"I<Copyright-Datei> erwähnt werden. Dies ist nützlich, wenn B<uscan> nicht "
+"innerhalb eines Quellpaketverzeichnisses ausgeführt wird."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1823
+msgid "DEVSCRIPT CONFIGURATION VARIABLES"
+msgstr "DEVSCRIPT-KONFIGURATIONSVARIABLEN"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1825
+msgid ""
+"For the basic usage, B<uscan> does not require to set these configuration "
+"variables."
+msgstr ""
+"Für den einfachen Gebrauch benötigt B<uscan> das Setzen dieser "
+"Konfigurationsvariablen nicht."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1828
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. These may "
+"be overridden by command line options. Environment variable settings are "
+"ignored for this purpose. If the first command line option given is B<--"
+"noconf>, then these files will not be read. The currently recognized "
+"variables are:"
+msgstr ""
+"Die beiden Konfigurationsdateien F</etc/devscripts.conf> und F<~/."
+"devscripts> werden durch eine Shell in dieser Reihenfolge eingelesen, um "
+"Konfigurationsvariablen zu setzen. Diese können durch Befehlszeilenoptionen "
+"außer Kraft gesetzt werden. Zu diesem Zweck werden Umgebungsvariablen "
+"ignoriert. Falls die erste angegebene Befehlszeilenoption B<--noconf> ist, "
+"werden diese Dateien nicht gelesen. Die derzeit bekannten Variablen sind:"
+
+#. type: =item
+#: ../scripts/uscan.pl:1837
+msgid "B<USCAN_DOWNLOAD>"
+msgstr "B<USCAN_DOWNLOAD>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1839
+msgid "Download or report only:"
+msgstr "nur Herunterladen oder melden:"
+
+#. type: =item
+#: ../scripts/uscan.pl:1843
+msgid ""
+"B<no>: equivalent to B<--no-download>, newer upstream files will not be "
+"downloaded."
+msgstr ""
+"B<no>: entspricht B<--no-download>, neuere Dateien der Ursprungsautoren "
+"werden nicht heruntergeladen."
+
+#. type: =item
+#: ../scripts/uscan.pl:1846
+msgid ""
+"B<yes>: equivalent to B<--download>, newer upstream files will be "
+"downloaded. This is the default behavior."
+msgstr ""
+"B<yes>: entspricht B<--download>, neuere Dateien der Ursprungsautoren werden "
+"heruntergeladen. Dies ist das Standardverhalten."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1849
+msgid "See also B<--force-download> and B<--overwrite-download>."
+msgstr "Siehe auch B<--force-download> und B<--overwrite-download>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1853
+msgid "B<USCAN_SAFE>"
+msgstr "B<USCAN_SAFE>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1855
+msgid ""
+"If this is set to B<yes>, then B<uscan> avoids running unsafe scripts by "
+"skipping both the repacking of the downloaded package and the updating of "
+"the new source tree; this is equivalent to the B<--safe> options; this also "
+"sets the default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+"Falls dies auf B<yes> gesetzt ist, verhindert B<uscan> die Ausführung "
+"unsicherer Skripte, indem das erneute Packen heruntergeladener Pakete als "
+"auch das Aktualisieren des Quellverzeichnisbaums übersprungen werden. Dies "
+"entspricht den B<--safe>-Optionen. Außerdem setzt dies die Voreinstellung "
+"auf B<--no-download> und B<--skip-signature>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1860
+msgid "B<USCAN_PASV>"
+msgstr "B<USCAN_PASV>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1862
+msgid ""
+"If this is set to yes or no, this will force FTP connections to use PASV "
+"mode or not to, respectively. If this is set to default, then B<Net::FTP(3)> "
+"makes the choice (primarily based on the B<FTP_PASSIVE> environment "
+"variable)."
+msgstr ""
+"Falls dies auf »yes« oder »no« gesetzt ist, wird dies erzwingen, dass FTP-"
+"Verbindungen den PASV-Modus verwenden beziehungsweise nicht verwenden. Falls "
+"dies auf »default« gesetzt ist, wird B<Net::FTP>(3) eine Auswahl treffen "
+"(basiert hauptsächlich auf der Umgebungsvariable B<FTP_PASSIVE>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1866
+msgid "B<USCAN_TIMEOUT>"
+msgstr "B<USCAN_TIMEOUT>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1868
+msgid ""
+"If set to a number I<N>, then set the timeout to I<N> seconds. This is "
+"equivalent to the B<--timeout> option."
+msgstr ""
+"Falls dies auf eine Zahl I<N> gesetzt ist, wird die Zeitüberschreitung auf "
+"I<N> Sekunden eingestellt. Dies entspricht der Option B<--timeout>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1871
+msgid "B<USCAN_SYMLINK>"
+msgstr "B<USCAN_SYMLINK>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1873
+msgid ""
+"If this is set to no, then a I<pkg>_I<version>B<.orig.tar.{gz|bz2|lzma|xz}> "
+"symlink will not be made (equivalent to the B<--no-symlink> option). If it "
+"is set to B<yes> or B<symlink>, then the symlinks will be made. If it is set "
+"to B<rename>, then the files are renamed (equivalent to the B<--rename> "
+"option)."
+msgstr ""
+"Falls dies auf »no« gesetzt ist, wird kein symbolischer Verweis für "
+"I<Paket>_I<Version>B<.orig.tar.{gz|bz2|lzma|xz}> erstellt (entspricht der "
+"Option B<--no-symlink>). Falls es auf B<yes> oder B<symlink> gesetzt ist, "
+"dann werden symbolische Verweise erstellt. Falls es auf B<rename> gesetzt "
+"ist, werden die Dateien umbenannt (entspricht der Option B<--rename>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1878
+msgid "B<USCAN_DEHS_OUTPUT>"
+msgstr "B<USCAN_DEHS_OUTPUT>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1880
+msgid ""
+"If this is set to B<yes>, then DEHS-style output will be used. This is "
+"equivalent to the B<--dehs> option."
+msgstr ""
+"Falls dies auf B<yes> gesetzt ist, wird eine Ausgabe im DEHS-Stil verwendet. "
+"Dies entspricht der Option B<--dehs>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1883
+msgid "B<USCAN_VERBOSE>"
+msgstr "B<USCAN_VERBOSE>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1885
+msgid ""
+"If this is set to B<yes>, then verbose output will be given. This is "
+"equivalent to the B<--verbose> option."
+msgstr ""
+"Falls dies auf B<yes> gesetzt ist, wird eine detaillierte Ausgabe erzeugt. "
+"Dies entspricht der Option B<--verbose>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1888
+msgid "B<USCAN_USER_AGENT>"
+msgstr "B<USCAN_USER_AGENT>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1890
+msgid ""
+"If set, the specified user agent string will be used in place of the "
+"default. This is equivalent to the B<--user-agent> option."
+msgstr ""
+"Falls gesetzt, wird die angegebene User-Agent-Zeichenkette anstelle der "
+"vorgegebenen benutzt. Dies entspricht der Option B<--user-agent>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1893
+msgid "B<USCAN_DESTDIR>"
+msgstr "B<USCAN_DESTDIR>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1895
+msgid ""
+"If set, the downloaded files will be placed in this directory. This is "
+"equivalent to the B<--destdir> option."
+msgstr ""
+"Falls gesetzt, werden heruntergeladene Dateien in diesem Verzeichnis "
+"abgelegt. Dies entspricht der Option B<--destdir>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1898
+msgid "B<USCAN_REPACK>"
+msgstr "B<USCAN_REPACK>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1900
+#, fuzzy
+#| msgid ""
+#| "If this is set to yes, then after having downloaded a bzip tar, lzma tar, "
+#| "xz tar, or zip archive, uscan will repack it to the specified compression "
+#| "(see B<--compression>). This is equivalent to the B<--repack> option."
+msgid ""
+"If this is set to yes, then after having downloaded a bzip tar, lzma tar, xz "
+"tar, zip or zstd archive, uscan will repack it to the specified compression "
+"(see B<--compression>). This is equivalent to the B<--repack> option."
+msgstr ""
+"Falls dies auf yes gesetzt ist, dann wird Uscan nach dem Herunterladen ein "
+"Bzip-Tar-, LZMA-Tar, Xz-Tar- oder Zip-Archiv neu mit der angegebenen "
+"Komprimierung packen (siehe B<--compression>). Dies entspricht der Option "
+"B<--repack>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1904
+msgid "B<USCAN_EXCLUSION>"
+msgstr "B<USCAN_EXCLUSION>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1906
+msgid ""
+"If this is set to no, files mentioned in the field B<Files-Excluded> of "
+"F<debian/copyright> will be ignored and no exclusion of files will be "
+"tried. This is equivalent to the B<--no-exclusion> option."
+msgstr ""
+"Falls dies auf »no« gesetzt ist, werden im Feld B<Files-Excluded> von "
+"F<debian/copyright> erwähnte Dateien ignoriert und es wird nicht versucht, "
+"Dateien auszuschließen. Dies entspricht der Option B<--no-exclusion>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1910
+msgid "B<USCAN_HTTP_HEADER>"
+msgstr "B<USCAN_HTTP_HEADER>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1912
+#, fuzzy
+#| msgid ""
+#| "If set, the specified user agent string will be used in place of the "
+#| "default. This is equivalent to the B<--user-agent> option."
+msgid ""
+"If set, the specified http header will be used if URL match. This is "
+"equivalent to B<--http-header> option."
+msgstr ""
+"Falls gesetzt, wird die angegebene User-Agent-Zeichenkette anstelle der "
+"vorgegebenen benutzt. Dies entspricht der Option B<--user-agent>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1919
+msgid ""
+"The exit status gives some indication of whether a newer version was found "
+"or not; one is advised to read the output to determine exactly what happened "
+"and whether there were any warnings to be noted."
+msgstr ""
+"Der Exit-Status gibt einige Hinweise, ob eine neuere Version gefunden wurde "
+"oder nicht; es wird geraten, die Ausgabe zu lesen, um genau zu bestimmen, "
+"was geschehen ist und ob irgendwelche Warnungen zu beachten sind."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1927
+msgid ""
+"Either B<--help> or B<--version> was used, or for some F<watch> file which "
+"was examined, a newer upstream version was located."
+msgstr ""
+"Es wurde entweder B<--help> oder B<--version> benutzt oder es wurde für eine "
+"untersuchte F<watch>-Datei eine neuere Version der Ursprungsautoren gefunden."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1932
+msgid ""
+"No newer upstream versions were located for any of the F<watch> files "
+"examined."
+msgstr ""
+"Es wurde für keine der untersuchten F<watch>-Dateien eine neuere Version der "
+"Ursprungsautoren gefunden."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1936
+msgid "ADVANCED FEATURES"
+msgstr "FORTGESCHRITTENE FUNKTIONALITÄTEN"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1938
+msgid ""
+"B<uscan> has many other enhanced features which are skipped in the above "
+"section for the simplicity. Let's check their highlights."
+msgstr ""
+"B<uscan> hat viele weitere verbesserte Funktionalitäten, die im obigen "
+"Abschnitt der Einfachheit halber übersprungen wurden. Schauen wir uns ihre "
+"Glanzlicher an."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1941
+msgid ""
+"B<uscan> can be executed with I<path> as its argument to change the starting "
+"directory of search from the current directory to I<path> ."
+msgstr ""
+"B<uscan> kann mit I<Pfad> als Argument ausgeführt werden, um das "
+"Startverzeichnis der Suche vom aktuellen Verzeichnis auf I<Pfad> zu ändern."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1944
+msgid ""
+"If you are not sure what exactly is happening behind the scene, please "
+"enable the B<--verbose> option. If this is not enough, enable the B<--"
+"debug> option too see all the internal activities."
+msgstr ""
+"Falls Sie nicht genau wissen, was im Hintergrund geschieht, aktivieren Sie "
+"bitte die Option B<--verbose>. Falls dies nicht ausreicht, aktivieren Sie "
+"die Option B<--debug>, um alle internen Aktivitäten zu sehen."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1948
+msgid ""
+"See L<COMMANDLINE OPTIONS> and L<DEVSCRIPT CONFIGURATION VARIABLES> for "
+"other variations."
+msgstr ""
+"Weitere Variationen finden Sie unter L<BEFEHLZEILENOPTIONEN> und L<DEVSCRIPT-"
+"KONFIGURATIONSVARIABLEN>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1951
+msgid "Custom script"
+msgstr "Benutzerdefiniertes Skript"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1953
+msgid ""
+"The optional I<script> parameter in F<debian/watch> means to execute "
+"I<script> with options after processing this line if specified."
+msgstr ""
+"Der optionale Parameter I<Skript> in F<debian/watch> bedeutet, dass "
+"I<Skript> mit Optionen nach der Verarbeitung dieser Zeile ausgeführt wird, "
+"falls angegeben."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1956
+msgid ""
+"See L<HISTORY AND UPGRADING> for how B<uscan> invokes the custom I<script>."
+msgstr ""
+"Wie B<uscan> das benutzerdefinierte I<Skript> aufruft, finden Sie unter "
+"L<CHRONIK UND UPGRADES DURCHFÜHREN>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1958
+msgid ""
+"For compatibility with other tools such as B<git-buildpackage>, it may not "
+"be wise to create custom scripts with random behavior. In general, "
+"B<uupdate> is the best choice for the non-native package and custom scripts, "
+"if created, should behave as if B<uupdate>. For possible use case, see "
+"L<http://bugs.debian.org/748474> as an example."
+msgstr ""
+"Um die Kompatibilität mit anderen Werkzeugen wie B<git-buildpackage> zu "
+"wahren, ist es vermutlich keine gute Idee, benutzerdefinierte Skripte mit "
+"zufälligem Verhalten zu erstellen. Im Allgemeinen ist B<uupdate> die beste "
+"Wahl für das nichtnative Paket und benutzerdefinierte Skripte, falls sie "
+"erstellt wurden, sollten sich wie B<uupdate> verhalten. Einen möglichen "
+"Anwendungsfall finden Sie beispielsweise unter L<http://bugs.debian."
+"org/748474>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1964
+msgid "URL diversion"
+msgstr "URL-Umleitung"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1966
+msgid ""
+"Some popular web sites changed their web page structure causing maintenance "
+"problems to the watch file. There are some redirection services created to "
+"ease maintenance of the watch file. Currently, B<uscan> makes automatic "
+"diversion of URL requests to the following URLs to cope with this situation."
+msgstr ""
+"Einige populären Websites haben ihre Seitenstruktur geändert, was "
+"Wartungsprobleme mit der Watch-Datei verursachte. Es gibt einige "
+"Weiterleitungsdienste, die erstellt wurden, um die Wartung der Watch-Datei "
+"zu erleichtern. Derzeit leitet B<uscan> URL-Anfragen automatisch an die "
+"folgenden URLs weiter, um diese Situation zu bewältigen."
+
+#. type: =item
+#: ../scripts/uscan.pl:1973
+msgid "* L<http://sf.net>"
+msgstr "* L<http://sf.net>"
+
+#. type: =item
+#: ../scripts/uscan.pl:1975
+msgid "* L<http://pypi.python.org>"
+msgstr "* L<http://pypi.python.org>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1981
+msgid ""
+"Similarly to several other scripts in the B<devscripts> package, B<uscan> "
+"explores the requested directory trees looking for F<debian/changelog> and "
+"F<debian/watch> files. As a safeguard against stray files causing potential "
+"problems, and in order to promote efficiency, it will examine the name of "
+"the parent directory once it finds the F<debian/changelog> file, and check "
+"that the directory name corresponds to the package name. It will only "
+"attempt to download newer versions of the package and then perform any "
+"requested action if the directory name matches the package name. Precisely "
+"how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Ähnlich wie viele andere Skripte im Paket B<devscripts>, erkundet B<uscan> "
+"die abgefragten Verzeichnisbäume nach F<debian/changelog>- und F<debian/"
+"watch>-Dateien. Als eine Schutzmaßnahme gegen verirrte Dateien, die "
+"potenziell Probleme bereiten und um die Leistung zu steigern, wird es den "
+"Namen des übergeordneten Verzeichnisses untersuchen, sobald es die F<debian/"
+"changelog>-Datei findet, und prüfen, ob der Verzeichnisname dem Paketnamen "
+"entspricht. Es wird nur versuchen, neuere Versionen des Pakets "
+"herunterzuladen und dann jede angefragte Aktion durchführen, falls der "
+"Verzeichnisname zum Paketnamen passt. Wie dies genau geschieht, wird durch "
+"die beiden Konfigurationsdateivariablen B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> "
+"und B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> sowie ihren entsprechenden "
+"Befehlszeilenoptionen B<--check-dirname-level> und B<--check-dirname-regex> "
+"geregelt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2004
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for F<debian/changelog>, that is, the directory containing F<debian/"
+"changelog> is not the directory from which B<uscan> was invoked. This is "
+"the default behavior."
+msgstr ""
+"prüft nur den Verzeichnisnamen, falls bei der Suche nach F<debian/changelog> "
+"das Verzeichnis geändert werden muss, das heißt, das Verzeichnis, das "
+"F<debian/changelog> enthält, nicht das Verzeichnis ist, aus dem B<uscan> "
+"aufgerufen wurde. Dies ist das Standardverhalten."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2015
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by pwd(1)) matches the regex given by the configuration file "
+"option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option B<--"
+"check-dirname-regex> I<regex>. Here regex is a Perl regex (see "
+"perlre(3perl)), which will be anchored at the beginning and the end. If "
+"regex contains a B</>, then it must match the full directory path. If not, "
+"then it must match the full directory name. If regex contains the string "
+"I<package>, this will be replaced by the source package name, as determined "
+"from the F<debian/changelog>. The default value for the regex is: "
+"I<package>B<(-.+)?>, thus matching directory names such as I<package> and "
+"I<package>-I<version>."
+msgstr ""
+"Der Verzeichnisname wird geprüft, indem getestet wird, ob der aktuelle "
+"Verzeichnisname (wie er durch pwd(1) bestimmt wurde) zum regulären Ausdruck "
+"passt, der durch die Konfigurationsdateioption "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> oder die Befehlszeilenoption B<--check-"
+"dirname-regex> I<regulärer_Ausdruck> angegeben wurde. Hierbei ist "
+"regulärer_Ausdruck ein regulärer Perl-Ausdruck (siehe perlre(3perl)), der an "
+"den Anfang und das Ende verankert wird. Falls regulärer_Ausdruck ein B</> "
+"enthält, muss er auf den vollständigen Verzeichnispfad passen. Falls nicht, "
+"dann muss er auf den vollständigen Verzeichnisnamen passen. Falls "
+"regulärer_Ausdruck die Zeichenkette I<Paket> beinhaltet, wird dies durch den "
+"Namen des Quellpakets ersetzt, wie er aus F<debian/changelog> bestimmt wird. "
+"Der vorgegebene Wert für den regulären_Ausdruck ist: I<Paket>B<(-.+)?>, "
+"daher entspricht er Verzeichnisnamen wie B<Paket> und I<Paket>-I<Version>."
+
+#. type: =head1
+#: ../scripts/uscan.pl:2026
+msgid "HISTORY AND UPGRADING"
+msgstr "CHRONIK UND UPGRADES DURCHFÜHREN"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2028
+msgid ""
+"This section briefly describes the backwards-incompatible F<watch> file "
+"features which have been added in each F<watch> file version, and the first "
+"version of the B<devscripts> package which understood them."
+msgstr ""
+"Dieser Abschnitt beschreibt kurz die rückwärtsinkompatiblen F<watch>-"
+"Dateifunktionalitäten, die in jeder F<watch>-Dateiversion hinzugefügt "
+"wurden, und die erste Version des B<devscripts>-Pakets, das sie verstand."
+
+#. type: =item
+#: ../scripts/uscan.pl:2034
+msgid "Pre-version 2"
+msgstr "Vorversion 2"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2036
+msgid ""
+"The F<watch> file syntax was significantly different in those days. Don't "
+"use it. If you are upgrading from a pre-version 2 F<watch> file, you are "
+"advised to read this manpage and to start from scratch."
+msgstr ""
+"Zu jener Zeit war die F<watch>-Dateisyntax signifikant anders. Verwenden Sie "
+"sie nicht. Falls Sie ein Upgrade von einer F<watch>-Datei einer Version vor "
+"2 durchführen, wird Ihnen empfohlen, diese Handbuchseite zu lesen und von "
+"Grund auf neu zu beginnen."
+
+#. type: =item
+#: ../scripts/uscan.pl:2040
+msgid "Version 2"
+msgstr "Version 2"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2042
+#, fuzzy
+#| msgid ""
+#| "B<devscripts> version 2.6.90: The first incarnation of the current style "
+#| "of F<watch> files."
+msgid ""
+"B<devscripts> version 2.6.90: The first incarnation of the current style of "
+"F<watch> files. This version is also deprecated and will be rejected after "
+"the Debian 11 release."
+msgstr ""
+"B<devscripts>-Version 2.6.90: die erste Verkörperung des aktuellen F<watch>-"
+"Dateistils"
+
+#. type: =item
+#: ../scripts/uscan.pl:2046
+msgid "Version 3"
+msgstr "Version 3"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2048
+msgid ""
+"B<devscripts> version 2.8.12: Introduced the following: correct handling of "
+"regex special characters in the path part, directory/path pattern matching, "
+"version number in several parts, version number mangling. Later versions "
+"have also introduced URL mangling."
+msgstr ""
+"B<devscripts>-Version 2.8.12 führte das Folgende ein: korrekte Handhabung "
+"von Sonderzeichen regulärer Ausdrücke im Pfadteil, Verzeichnis-/"
+"Pfadmusterabgleich, Versionsnummern in mehreren Teilen, "
+"Versionsnummerverarbeitung. Neuere Versionen haben außerden URL-Verarbeitung "
+"eingeführt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2053
+msgid ""
+"If you are upgrading from version 2, the key incompatibility is if you have "
+"multiple groups in the pattern part; whereas only the first one would be "
+"used in version 2, they will all be used in version 3. To avoid this "
+"behavior, change the non-version-number groups to be B<(?:> I< ...> B<)> "
+"instead of a plain B<(> I< ... > B<)> group."
+msgstr ""
+"Falls Sie ein Upgrade von Version 2 durchführen, besteht die "
+"Hauptinkomatibilität, wenn Sie mehrere Gruppen im Musterteil haben; während "
+"nur die erste in Version 2 benutzt würde, werden sie alle in Version 3 "
+"verwendet. Um dieses Verhalten zu vermeiden, ändern Sie die "
+"Nichtversionsnummergruppen so, dass sie B<(?:> I< …> B<)>- anstelle von "
+"einfachen B<(> I< … > B<)>-Gruppen sind."
+
+#. type: =item
+#: ../scripts/uscan.pl:2061
+msgid ""
+"* B<uscan> invokes the custom I<script> as \"I<script> B<--upstream-version> "
+"I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\"."
+msgstr ""
+"* B<uscan> ruft das benutzerdefinierte I<Skript> als »I<Skript> B<--upstream-"
+"version> I<Version> B<../>I<Quellpaket>B<_>I<Version>B<.orig.tar.gz>« auf."
+
+#. type: =item
+#: ../scripts/uscan.pl:2064
+msgid ""
+"* B<uscan> invokes the standard B<uupdate> as \"B<uupdate> B<--no-symlink --"
+"upstream-version> I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\"."
+msgstr ""
+"* B<uscan> ruft das Standard-B<uupdate> als »B<uupdate> B<--no-symlink --"
+"upstream-version> I<Version> B<../>I<Quellpaket>B<_>I<Version>B<.orig.tar."
+"gz> auf."
+
+#. type: =item
+#: ../scripts/uscan.pl:2069
+msgid "Version 4"
+msgstr "Version 4"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2071
+msgid ""
+"B<devscripts> version 2.15.10: The first incarnation of F<watch> files "
+"supporting multiple upstream tarballs."
+msgstr ""
+"B<devscripts>-Version 2.15.10: die erste Verkörperung der F<watch>-Datei, "
+"die mehrere Tarbälle der Ursprungsautoren unterstützt."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2074
+msgid ""
+"The syntax of the watch file is relaxed to allow more spaces for readability."
+msgstr ""
+"Die Syntax der Watch-Datei wurde gelockert, um zur Lesbarkeit den Umgang mit "
+"mehr Leerräumen zu erlauben."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2076
+msgid ""
+"If you have a custom script in place of B<uupdate>, you may also encounter "
+"problems updating from Version 3."
+msgstr ""
+"Falls Sie ein benutzerdefiniertes Skript anstelle von B<uupdate> haben, "
+"stoßen Sie möglicherweise ebenfalls beim Aktualisieren von Version 3 auf "
+"Probleme."
+
+#. type: =item
+#: ../scripts/uscan.pl:2081
+msgid ""
+"* B<uscan> invokes the custom I<script> as \"I<script> B<--upstream-version> "
+"I<version>\"."
+msgstr ""
+"* B<uscan> ruft das benutzerdefinierte I<Skript> als »I<Skript> B<--upstream-"
+"version> I<Version>« auf."
+
+#. type: =item
+#: ../scripts/uscan.pl:2084
+msgid ""
+"* B<uscan> invokes the standard B<uupdate> as \"B<uupdate> B<--find> B<--"
+"upstream-version> I<version>\"."
+msgstr ""
+"* B<uscan> ruft das Standard-B<uupdate> als »B<uupdate> B<--find> B<--"
+"upstream-version> I<Version>« auf."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2089
+msgid ""
+"Restriction for B<--dehs> is lifted by redirecting other output to STDERR "
+"when it is activated."
+msgstr ""
+"Die Beschränkung für B<--dehs> wird aufgehoben, indem andere Ausgaben auf "
+"die Standardfehlerausgabe umgeleitet werden, wenn sie aktiviert ist."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2096
+msgid "dpkg(1), mk-origtargz(1), perlre(1), uupdate(1), devscripts.conf(5)"
+msgstr "dpkg(1), mk-origtargz(1), perlre(1), uupdate(1), devscripts.conf(5)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2100
+msgid ""
+"The original version of uscan was written by Christoph Lameter "
+"<clameter@debian.org>. Significant improvements, changes and bugfixes were "
+"made by Julian Gilbey <jdg@debian.org>. HTTP support was added by Piotr "
+"Roszatycki <dexter@debian.org>. The program was rewritten in Perl by Julian "
+"Gilbey. Xavier Guimard converted it in object-oriented Perl using L<Moo>."
+msgstr ""
+"Die Originalversion wurde von Christoph Lameter <clameter@debian.org> "
+"geschrieben. Bedeutende Verbesserungen, Änderungen und Fehlerbehebungen "
+"wurden von Julian Gilbey <jdg@debian.org> vorgenommen. Piotr Roszatycki "
+"<dexter@debian.org> fügte HTTP-Unterstützung hinzu. Das Programm wurde neu "
+"in Perl von Julian Gilbey geschrieben. Xavier Guimard hat es mittels L<Moo> "
+"in objektorientiertes Perl umgewandelt."
+
+#. type: TH
+#: ../scripts/uupdate.1:1
+#, no-wrap
+msgid "UUPDATE"
+msgstr "UUPDATE"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:4
+msgid "uupdate - upgrade a source code package from an upstream revision"
+msgstr ""
+"uupdate - führt ein Upgrade eines Quellcodepakets von einer Revision der "
+"Ursprungsautoren durch"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:6
+msgid "B<uupdate> [I<options>] I<new_upstream_archive> [I<version>]"
+msgstr ""
+"B<uupdate> [I<Optionen>] I<neues_Archiv_der_Ursprungsautoren> [I<Version>]"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:8
+msgid "B<uupdate> [I<options>] B<--find>|B<-f>"
+msgstr "B<uupdate> [I<Optionen>] B<--find>|B<-f>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:10
+msgid "B<uupdate> [I<options>] B<--patch>|B<-p> I<patch_file>"
+msgstr "B<uupdate> [I<Optionen>] B<--patch>|B<-p> I<Patch-Datei>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:22
+msgid ""
+"B<uupdate> modifies an existing Debian source code archive to reflect an "
+"upstream update supplied as a patch or from a wholly new source code "
+"archive. The utility needs to be invoked from the top directory of the old "
+"source code directory, and if a relative name is given for the new archive "
+"or patch file, it will be looked for first relative to the execution "
+"directory and then relative to the parent of the source tree. (For example, "
+"if the changelog file is I</usr/local/src/foo/foo-1.1/debian/changelog>, "
+"then the archive or patch file will be looked for relative to I</usr/local/"
+"src/foo>.) Note that the patch file or archive cannot be within the source "
+"tree itself. The full details of what the code does are given below."
+msgstr ""
+"B<uupdate> verändert ein existierendes Debian-Quellcodearchiv, um eine "
+"Aktualisierung der Ursprungsautoren widerzuspiegeln, die als Patch eines "
+"vollständigen Quellcodearchivs bereitgestellt wurde, Das Hilfswerkzeug muss "
+"von der obersten Ebene des alten Quellcodeverzeichnisses aufgerufen werden. "
+"Falls ein relativer Name für das neue Archiv angegeben wurde, wird zuerst "
+"relativ zum Ausführungsverzeichnis und dann relativ zum übergeordneten "
+"Verzeichnis des Quellcodeverzeichnisbaums gesucht. (Falls die Changelog-"
+"Datei zum Beispiel I</usr/local/src/foo/foo-1.1/debian/changelog> ist, dann "
+"wird nach der Archiv- oder Patch-Datei relativ zu I</usr/local/src/foo> "
+"gesucht.) Beachten Sie, dass die Patch-Datei oder das Archiv nicht innerhalb "
+"des Quellcodeverzeichnisbaums selbst sein kann. Die vollständigen "
+"Einzelheiten, was der Code tut, werden nachfolgend erläutert."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:32
+msgid ""
+"Currently supported source code file types are I<.tar.gz>, I<.tar.bz2>, I<."
+"tar.Z>, I<.tgz>, I<.tar>, I<.tar.lzma>, I<.tar.xz>, I<.7z> and I<.zip> "
+"archives. Also supported are already unpacked source code archives; simply "
+"give the path of the source code directory. Supported patch file types are "
+"B<gzip>-compressed, B<bzip2>-compressed, B<lzma>-compressed, B<xz>-"
+"compressed and uncompressed patch files. The file types are identified by "
+"the file names, so they must use the standard suffixes."
+msgstr ""
+"Derzeit unterstützte Quellcodedateitypen sind I<.tar.gz>-, I<.tar.bz2>-, I<."
+"tar.Z>-, I<.tgz>-, I<.tar>-, I<.tar.lzma>-, I<.tar.xz>-, I<.7z> und I<.zip>-"
+"Archive. Außerdem werden bereits entpackte Quellcodearchive unterstützt; "
+"geben Sie einfach den Pfad des Quellcodeverzeichnisses an. Unterstützte "
+"Typen von Patch-Dateien sind komprimiert mit B<gzip>, B<bzip2>, B<lzma>, "
+"B<xz> sowie unkomprimierte Patch-Dateien. Die Dateitypen werden durch die "
+"Dateinamen identifiziert, daher müssen sie die Standardendungen verwenden."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:42
+msgid ""
+"Usually B<uupdate> will be able to deduce the version number from the source "
+"archive name (as long as it only contains digits and periods). If that "
+"fails, you need to specify the version number explicitly (without the Debian "
+"release number which will always be initially ``1'', or ``0ubuntu1'' on "
+"Ubuntu-detected systems). This can be done with an initial B<--upstream-"
+"version> or B<-v> option, or in the case of an archive, with a version "
+"number after the filename. (The reason for the latter is so that B<uupdate> "
+"can be called directly from B<uscan>.)"
+msgstr ""
+"Üblicherweise wird B<uupdate> in der Lage sein, die Versionsnummer vom Namen "
+"des Quellarchivs herzuleiten (solange sie nur Zahlen und Punkte enthält). "
+"Falls dies fehlschlägt, müssen Sie die Versionsnummer explizit angeben (ohne "
+"die Debian-Veröffentlichungsnummer, die anfangs immer »1« oder auf "
+"entdeckten Ubuntu-Systemen »0ubuntu1« sein wird). Dies kann durch eine "
+"einleitende B<--upstream-version>- oder B<-v>-Option erledigt werden oder im "
+"Fall eines Archivs, durch eine Versionsnummer nach dem Dateinamen. (Der "
+"Grund für letzteres ist, dass B<uupdate> auch direkt von B<uscan> aufgerufen "
+"werden kann.)"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:47
+msgid ""
+"Since B<uupdate> uses B<debuild> to clean the current archive before trying "
+"to apply a patch file, it accepts a B<--rootcmd> or B<-r> option allowing "
+"the user to specify a gain-root command to be used. The default is to use "
+"B<fakeroot>."
+msgstr ""
+"Da B<uupdate> zum Bereinigen des aktuellen Archivs B<debuild> verwendet, "
+"bevor es die Patch-Datei anwendet, akzeptiert es eine B<--rootcmd>- oder B<-"
+"r>-Option, die es dem Benutzer gestattet, einen Befehl zum Erlangen von Root-"
+"Rechten anzugeben. Standardmäßig wird B<fakeroot> benutzt."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:54
+msgid ""
+"If an archive is being built, the pristine upstream source should be used to "
+"create the I<.orig.tar.gz> file wherever possible. This means that MD5 sums "
+"or other similar methods can be used to easily compare the upstream source "
+"to Debian's copy of the upstream version. This is the default behaviour, "
+"and can be switched off using the B<--no-pristine> option below."
+msgstr ""
+"Falls ein Archiv erstellt wird, sollte die unberührte Quelldatei der "
+"Ursprungsautoren zum Erstellen der I<.orig.tar.gz>-Datei verwendet werden, "
+"wann immer dies möglich ist. Dies bedeutet, dass MD5-Summen oder ähnliche "
+"Methoden einfach zum Vergleichen der Quelldatei der Ursprungsautoren mit der "
+"Debian-Kopie der Version der Ursprungsautoren benutzt werden kann. Dies ist "
+"das Standardverhalten und kann mittels der nachfolgenden Option B<--no-"
+"pristine> ausgeschaltet werden."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:56
+msgid "This is a summary of what was explained above."
+msgstr "Dies ist eine Zusammenfassung dessen, was oben erklärt wurde."
+
+#. type: TP
+#: ../scripts/uupdate.1:60
+#, no-wrap
+msgid "B<--upstream-version >I<version>, B<-v >I<version>"
+msgstr "B<--upstream-version >I<Version>, B<-v >I<Version>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:63
+msgid "Specify the version number of the upstream package explicitly."
+msgstr "gibt die Versionsnummer des Pakets der Ursprungsautoren explizit an."
+
+#. type: TP
+#: ../scripts/uupdate.1:63
+#, no-wrap
+msgid "B<--force-bad-version, -b >"
+msgstr "B<--force-bad-version, -b >"
+
+#. type: TP
+#: ../scripts/uupdate.1:66
+#, no-wrap
+msgid "B<--rootcmd >I<gain-root-command>, B<-r >I<gain-root-command>"
+msgstr "B<--rootcmd >I<Befehl_um_Root_zu_werden>, B<-r >I<Befehl_um_Root_zu_werden>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:70
+msgid ""
+"Specify the command to be used to become root to build the package and is "
+"passed onto B<debuild>(1) if it is specified."
+msgstr ""
+"gibt den Befehl an, der zum Erlangen von Root-Rechten benutzt wird, um das "
+"Paket zu bauen. Er wird an B<debuild>(1) übergeben, falls er angegeben wurde."
+
+#. type: TP
+#: ../scripts/uupdate.1:70
+#, no-wrap
+msgid "B<--pristine>, B<-u>"
+msgstr "B<--pristine>, B<-u>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:75
+msgid ""
+"Treat the source as pristine upstream source and symlink to it from "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> whenever possible. This "
+"option has no meaning for patches. This is the default behaviour."
+msgstr ""
+"betrachtet das Paket als unberührte Quelle der Ursprungsautoren und erstellt "
+"einen symbolischen Verweis von I<E<lt>PaketE<gt>_E<lt>VersionE<gt>.orig.tar."
+"gz> darauf, wann immer dies möglich ist. Diese Option hat für Patches keine "
+"Bedeutung. Dies ist das Standardverhalten."
+
+#. type: TP
+#: ../scripts/uupdate.1:75
+#, no-wrap
+msgid "B<--no-pristine>"
+msgstr "B<--no-pristine>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:78
+msgid ""
+"Do not attempt to make a I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> "
+"symlink."
+msgstr ""
+"versucht nicht, einen symbolischen I<E<lt>PaketE<gt>_E<lt>VersionE<gt>.orig."
+"tar.gz>-Verweis zu erstellen."
+
+#. type: TP
+#: ../scripts/uupdate.1:78
+#, no-wrap
+msgid "B<--symlink>, B<-s>"
+msgstr "B<--symlink>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:83
+msgid ""
+"Simply create a symlink when moving a new upstream I<.tar.gz> archive to the "
+"new I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> location. This is "
+"the default behaviour."
+msgstr ""
+"erstellt einfach einen symbolischen Verweis, wenn ein neues I<.tar.gz>-"
+"Archiv der Ursprungsautoren zu einem neuen "
+"I<E<lt>PaketE<gt>_E<lt>VersionE<gt>.orig.tar.gz>-Speicherort verschoben "
+"wird. Dies ist das Standardverhalten."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:88
+msgid ""
+"Copy the upstream I<.tar.gz> to the new location instead of making a "
+"symlink, if I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> is missing. "
+"Otherwise, do nothing."
+msgstr ""
+"kopiert das I<.tar.gz> der Ursprungsautoren an den neuen Speicherort, statt "
+"einen symbolischen Verweis zu erstellen, falls "
+"I<E<lt>PaketE<gt>_E<lt>VersionE<gt>.orig.tar.gz> fehlt. Andernfalls wird "
+"nichts unternommen."
+
+#. type: TP
+#: ../scripts/uupdate.1:88
+#, no-wrap
+msgid "B<--find, -f>"
+msgstr "B<--find, -f>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:98
+msgid ""
+"Find all upstream tarballs in I<../> which match "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig.tar.{gz|bz2|lzma|xz}> or "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig-E<lt>componentE<gt>.tar.{gz|bz2|lzma|"
+"xz}> ; B<--upstream-version> required; pristine source required; not valid "
+"for B<--patch>; This option uses B<dpkg-source> as the backend to enable "
+"support for the multiple upstream tarballs and to resolve minor bugs "
+"reported previously. The use of this option is highly recommended."
+msgstr ""
+"findet alle Tarbälle der Ursprungsautoren in I<../>, die "
+"I<E<lt>PaketE<gt>_E<lt>VersionE<gt>.orig.tar.{gz|bz2|lzma|xz}> oder "
+"I<E<lt>PaketE<gt>_E<lt>VersionE<gt>.orig-E<lt>KomponenteE<gt>.tar.{gz|bz2|"
+"lzma|xz}> entsprechen. B<--upstream-version> wird benötigt. Unveränderter "
+"Quelltext ist erforderlich. Dies ist nicht für B<--patch> gültig. Diese "
+"Option verwendet B<dpkg-source> als Backend, um Unterstützung für mehrere "
+"Tarbälle der Ursprungsautoren zu aktivieren und früher gemeldete kleine "
+"Fehler zu lösen. Der Gebrauch dieser Option wird nachdrücklich empfohlen."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:101
+msgid "Give verbose output."
+msgstr "erzeugt eine detaillierte Ausgabe."
+
+#. type: TP
+#: ../scripts/uupdate.1:113
+#, no-wrap
+msgid "B<UUPDATE_PRISTINE>"
+msgstr "B<UUPDATE_PRISTINE>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:117
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-pristine> command "
+"line parameter being used."
+msgstr ""
+"Falls dies auf I<no> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--no-pristine> benutzt würde."
+
+#. type: TP
+#: ../scripts/uupdate.1:117
+#, no-wrap
+msgid "B<UUPDATE_SYMLINK_ORIG>"
+msgstr "B<UUPDATE_SYMLINK_ORIG>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:121
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-symlink> command "
+"line parameter being used."
+msgstr ""
+"Falls dies auf I<no> gesetzt ist, ist es so, als ob der "
+"Befehlszeilenparameter B<--no-symlink> benutzt würde."
+
+#. type: TP
+#: ../scripts/uupdate.1:121
+#, no-wrap
+msgid "B<UUPDATE_ROOTCMD>"
+msgstr "B<UUPDATE_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:124
+msgid "This is equivalent to the B<--rootcmd> option."
+msgstr "Dies entspricht der Option B<--rootcmd>."
+
+#. type: SH
+#: ../scripts/uupdate.1:124
+#, no-wrap
+msgid "ACTIONS TAKEN ON AN ARCHIVE"
+msgstr "MAßNAHMEN, DIE FÜR EIN ARCHIV ERGRIFFEN WERDEN"
+
+#. type: TP
+#: ../scripts/uupdate.1:125 ../scripts/uupdate.1:158
+#, no-wrap
+msgid "B<Figure out new version number>"
+msgstr "B<neue Versionsnummer herausfinden>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:131
+msgid ""
+"Unless an explicit version number is provided, the archive name is analyzed "
+"for a sequence of digits separated by dots. If something like that is "
+"found, it is taken to be the new upstream version number. If not, "
+"processing is aborted."
+msgstr ""
+"Falls keine Versionsnummer explizit angegeben wurde, wird der Archivname "
+"nach einer Abfolge von Ziffern durchsucht, die durch Punkte getrennt sind. "
+"Falls diese gefunden wird, wird sie als neue Versionsnummer der "
+"Ursprungsautoren genommen. Falls nicht, wird die Verarbeitung abgebrochen."
+
+#. type: TP
+#: ../scripts/uupdate.1:131
+#, no-wrap
+msgid "B<Create the .orig.tar.gz archive>"
+msgstr "B<neues .orig.tar.gz-Archiv erstellen>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:136
+msgid ""
+"If the B<--pristine> or B<-u> option is specified and the upstream archive "
+"is a I<.tar.gz> or I<.tgz> archive, then this will be copied directly to "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz>."
+msgstr ""
+"Falls die Option B<--pristine> oder B<-u> angegeben wurde und das Archiv der "
+"Ursprungsautoren ein I<.tar.gz>- oder I<.tgz>-Archiv ist, wird dies direkt "
+"nach I<E<lt>PaketE<gt>_E<lt>VersionE<gt>.orig.tar.gz> kopiert."
+
+#. type: TP
+#: ../scripts/uupdate.1:136
+#, no-wrap
+msgid "B<Unpacking>"
+msgstr "B<Entpacken>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:141
+msgid ""
+"The archive is unpacked and placed in a directory with the correct name "
+"according to Debian policy: package-upstream_version.orig. Processing is "
+"aborted if this directory already exists."
+msgstr ""
+"Das Archiv wird in ein Verzeichnis, dessen Namen den Anforderungen der "
+"Debian-Richtlinien genügt, entpackt: Paketversion_der_Ursprungsautoren.orig. "
+"Falls das Verzeichnis bereits existiert, wird die Verarbeitung abgebrochen."
+
+#. type: TP
+#: ../scripts/uupdate.1:141 ../scripts/uupdate.1:169
+#, no-wrap
+msgid "B<Patching>"
+msgstr "B<Patches anwenden>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:149
+msgid ""
+"The I<.diffs.gz> from the current version are applied to the unpackaged "
+"archive. A non-zero exit status and warning message will occur if the "
+"patches did not apply cleanly or if no patch file was found. Also, the list "
+"of rejected patches will be shown. The file I<debian/rules> is made "
+"executable and all of the I<.orig> files created by B<patch> are deleted."
+msgstr ""
+"Die I<.diffs.gz>s der aktuellen Version werden auf das entpackte Archiv "
+"angewendet. Falls der Patch nicht richtig angewendet wurde oder keine Patch-"
+"Datei gefunden wurde, ist der Exit-Status ungleich null und es erscheinen "
+"Warnungen. Außerdem wird die Liste abgewiesener Patches angezeigt. Die Datei "
+"I<debian/rules> wird ausführbar gemacht und alle von B<patch> erstellten I<."
+"orig>-Dateien werden gelöscht."
+
+#. type: TP
+#: ../scripts/uupdate.1:149 ../scripts/uupdate.1:181
+#, no-wrap
+msgid "B<Changelog update>"
+msgstr "B<Changelog-Aktualisierung>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:153 ../scripts/uupdate.1:185
+#, fuzzy
+#| msgid ""
+#| "A changelog entry with the new version number is generated with the text "
+#| "``New upstream release''."
+msgid ""
+"A changelog entry with the new version number is generated with the text "
+"``New upstream release.''."
+msgstr ""
+"Es wird ein neuer Changelog-Eintrag mit dem Text »New upstream release« "
+"erzeugt."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:157 ../scripts/uupdate.1:189
+msgid ""
+"When used on Ubuntu systems, B<dpkg-vendor> detection is used to set the "
+"Debian revision to ``0ubuntu1''. You may change I<debian/changelog> "
+"manually afterwards."
+msgstr ""
+"Auf Ubuntu-Systemen wird die B<dpkg-vendor>-Erkennung verwendet, um die "
+"Debian-Revision auf »0ubuntu1« zu setzen. Sie können I<debian/changelog> "
+"hinterher manuell ändern."
+
+#. type: SH
+#: ../scripts/uupdate.1:157
+#, no-wrap
+msgid "ACTIONS TAKEN ON A PATCH FILE"
+msgstr "MAßNAHMEN, DIE FÜR EINE PATCH-DATEI ERGRIFFEN WERDEN"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:164
+msgid ""
+"Unless an explicit version number is provided, the patch file name is "
+"analyzed for a sequence of digits separated by dots. If something like that "
+"is found, it is taken to be the new upstream version number. If not, "
+"processing is aborted."
+msgstr ""
+"Sofern keine explizite Versionsnummer bereitgestellt wurde, wird die Patch-"
+"Datei nach einer Abfolge von Ziffern durchsucht, die durch Punkte getrennt "
+"sind. Falls diese gefunden wird, wird sie als neue Versionsnummer der "
+"Ursprungsautoren genommen. Falls nicht, wird die Verarbeitung abgebrochen."
+
+#. type: TP
+#: ../scripts/uupdate.1:164
+#, no-wrap
+msgid "B<Clean the current source tree>"
+msgstr "B<den aktuellen Quellverzeichnisbaum bereinigen>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:169
+msgid ""
+"The command B<debuild clean> is executed within the current Debian source "
+"archive to clean it. If a B<-r> option is given to B<uupdate>, it is passed "
+"on to B<debuild>."
+msgstr ""
+"Der Befehl B<debuild clean> wird innerhalb des aktuellen Debian-Quellarchivs "
+"ausgeführt, um es zu bereinigen. Falls eine B<-r>-Option für B<uupdate> "
+"angegeben wurde, wird sie an B<debuild> weitergereicht."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:181
+msgid ""
+"The current source archive (I<.orig.tar.gz>) is unpacked and the patch "
+"applied to the original sources. If this is successful, then the I<.orig> "
+"directory is renamed to reflect the new version number and the current "
+"Debian source directory is copied to a directory with the new version "
+"number, otherwise processing is aborted. The patch is then applied to the "
+"new copy of the Debian source directory. The file I<debian/rules> is made "
+"executable and all of the I<.orig> files created by B<patch> are deleted. "
+"If there was a problem with the patching, a warning is issued and the "
+"program will eventually exit with non-zero exit status."
+msgstr ""
+"Das aktuelle Quellarchiv (I<.orig.tar.gz>) wird entpackt und der Patch auf "
+"die Originalquellen angewendet. Falls dies erfolgreicht ist, wird das I<."
+"orig>-Verzeichnis umbenannt, um die neue Versionsnummer widerzuspiegeln und "
+"das aktuelle Debian-Quellverzeichnis wird in ein Verzeichnis mit der neuen "
+"Versionsnummer kopiert, andernfalls wird die Verarbeitung abgebrochen. Die "
+"Datei I<debian/rules> wird ausführbar gemacht und alle durch den Patch "
+"erstellten I<.orig>-Dateien werden gelöscht. Falls es ein Problem beim "
+"Anwenden der Patches gab, wird eine Warnung ausgegeben und das Programm wird "
+"schließlich mit einem Exit-Status ungleich null beendet."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:194
+msgid "B<debuild>(1), B<fakeroot>(1), B<patch>(1), B<devscripts.conf>(5)"
+msgstr "B<debuild>(1), B<fakeroot>(1), B<patch>(1) und B<devscripts.conf>(5)"
+
+# ist noch nicht übersetzt
+#. type: Plain text
+#: ../scripts/uupdate.1:196
+msgid "B<The Debian Policy Manual>"
+msgstr "B<The Debian Policy Manual>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:199
+msgid ""
+"The original version of B<uupdate> was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. Several changes and improvements have been "
+"made by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Die Originalversion von B<uupdate> wurde von Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt> geschrieben. Mehrere Änderungen und "
+"Verbesserungen stammen von Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../doc/what-patch.1:1
+#, no-wrap
+msgid "WHAT-PATCH"
+msgstr "WHAT-PATCH"
+
+#. type: Plain text
+#: ../doc/what-patch.1:4
+msgid "what-patch - detect which patch system a Debian package uses"
+msgstr "what-patch - ermittelt, welches Patch-System ein Debian-Paket nutzt"
+
+#. type: Plain text
+#: ../doc/what-patch.1:7
+msgid "B<what-patch> [I<options>]"
+msgstr "B<what-patch> [I<Optionen>]"
+
+#. type: Plain text
+#: ../doc/what-patch.1:11
+msgid ""
+"B<what-patch> examines the I<debian/rules> file to determine which patch "
+"system the Debian package is using."
+msgstr ""
+"B<what-patch> untersucht die Datei I<debian/rules>, um zu bestimmen, welches "
+"Patch-System ein Debian-Paket verwendet."
+
+#. type: Plain text
+#: ../doc/what-patch.1:14
+msgid ""
+"B<what-patch> should be run from the root directory of the Debian source "
+"package."
+msgstr ""
+"B<what-patch> sollte aus dem Wurzelverzeichnis des Debian-Quellpakets "
+"ausgeführt werden."
+
+#. type: Plain text
+#: ../doc/what-patch.1:17
+msgid "Listed below are the command line options for B<what-patch>:"
+msgstr ""
+"Nachfolgend sind die Befehlszeilenoptionen für B<what-patch> aufgeführt:"
+
+#. type: Plain text
+#: ../doc/what-patch.1:20
+msgid "Display a help message and exit."
+msgstr "zeigt eine Hilfenachricht und beendet sich."
+
+#. type: TP
+#: ../doc/what-patch.1:20
+#, no-wrap
+msgid "B<-v>"
+msgstr "B<-v>"
+
+#. type: Plain text
+#: ../doc/what-patch.1:26
+msgid ""
+"Enable verbose mode. This will include the listing of any files modified "
+"outside or the I<debian/> directory and report any additional details about "
+"the patch system if available."
+msgstr ""
+"aktiviert den Modus mit detailreicher Ausgabe. Dies wird die Auflistung "
+"aller außerhalb des I<debian/>-Verzeichnisses geänderter Dateien umfassen "
+"und alle zusätzlichen Einzelheiten über das Patch-System melden, falls "
+"verfügbar."
+
+#. type: Plain text
+#: ../doc/what-patch.1:32
+msgid ""
+"B<what-patch> was written by Kees Cook E<lt>kees@ubuntu.comE<gt>, Siegfried-"
+"A. Gevatter E<lt>rainct@ubuntu.comE<gt>, and Daniel Hahler "
+"E<lt>ubuntu@thequod.deE<gt>, among others. This manual page was written by "
+"Jonathan Patrick Davies E<lt>jpds@ubuntu.comE<gt>."
+msgstr ""
+"B<what-patch> wurde unter anderem von Kees Cook E<lt>kees@ubuntu.comE<gt>, "
+"Siegfried-A. Gevatter E<lt>rainct@ubuntu.comE<gt> und Daniel Hahler "
+"E<lt>ubuntu@thequod.deE<gt> geschrieben. Diese Handbuchseite wurde von "
+"Jonathan Patrick Davies E<lt>jpds@ubuntu.comE<gt> verfasst."
+
+#. type: Plain text
+#: ../doc/what-patch.1:38
+msgid ""
+"The Ubuntu MOTU team has some documentation about patch systems at the "
+"Ubuntu wiki: I<https://wiki.ubuntu.com/PackagingGuide/PatchSystems>"
+msgstr ""
+"Das Ubuntu-MOTU-Team hat einige Dokumentation über Patch-System im Ubuntu-"
+"Wiki: I<https://wiki.ubuntu.com/PackagingGuide/PatchSystems>"
+
+#. type: Plain text
+#: ../doc/what-patch.1:42
+msgid "B<cdbs-edit-patch>(1), B<dbs-edit-patch>(1), B<dpatch-edit-patch>(1)"
+msgstr "B<cdbs-edit-patch>(1), B<dbs-edit-patch>(1), B<dpatch-edit-patch>(1)"
+
+#. type: TH
+#: ../scripts/whodepends.1:1
+#, no-wrap
+msgid "WHODEPENDS"
+msgstr "WHODEPENDS"
+
+#. type: Plain text
+#: ../scripts/whodepends.1:4
+msgid "whodepends - check which maintainers' packages depend on a package"
+msgstr "whodepends - prüft, wessen Betreuers Pakete von einem Paket abhängen"
+
+#. type: Plain text
+#: ../scripts/whodepends.1:6
+msgid "B<whodepends> [I<package>] [I<options>]"
+msgstr "B<whodepends> [I<Paket>] [I<Optionen>]"
+
+#. type: Plain text
+#: ../scripts/whodepends.1:10
+msgid ""
+"B<whodepends> gives the names, e-mail addresses and the packages they "
+"maintain of all maintainers who have packages depending on the given package."
+msgstr ""
+"B<whodepends> gibt die Namen, E-Mail-Adressen und Pakete, die sie betreuen "
+"von allen Betreuern aus, die Pakete haben, die vom angegebenen Paket "
+"abhängen."
+
+#. type: Plain text
+#: ../scripts/whodepends.1:19
+msgid "B<whodepends> is not very efficient."
+msgstr "B<whodepends> ist nicht sehr effizient."
+
+#. type: Plain text
+#: ../scripts/whodepends.1:20
+msgid ""
+"B<whodepends> has been written by Moshe Zadka E<lt>moshez@debian.orgE<gt>."
+msgstr ""
+"B<whodepends> wurde von Moshe Zadka E<lt>moshez@debian.orgE<gt> geschrieben."
+
+#. type: TH
+#: ../scripts/who-uploads.1:1
+#, no-wrap
+msgid "WHO-UPLOADS"
+msgstr "WHO-UPLOADS"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:4
+msgid "who-uploads - identify the uploaders of Debian source packages"
+msgstr ""
+"who-uploads - identifiziert die, die das Debian-Quellpaket hochgeladen haben"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:6
+msgid "B<who-uploads> [I<options>] I<source_package> ..."
+msgstr "B<who-uploads> [I<Optionen>] I<Quellpaket> …"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:12
+msgid ""
+"B<who-uploads> uses the Package Tracking System (PTS) to identify the "
+"uploaders of the three most recent versions of the given source packages. "
+"Note that the uploaders are identified using their B<gpg>(1) or B<gpg2>(1) "
+"keys; installing a recent version of the I<debian-keyring> package should "
+"provide most of the required keys."
+msgstr ""
+"B<who-uploads> verwendet das Paketverfolgungssystem (PTS), um diejenigen zu "
+"identifizieren, die die drei jüngsten Versionen des angegebenen Quellpakets "
+"hochgeladen haben. Beachten Sie, dass die, die das Debian-Quellpaket "
+"hochgeladen haben, mittles ihrer B<gpg>(1)- oder B<gpg2>(1)-Schlüssel "
+"identifiziert werden; Installieren einer aktuellen Version des Pakets "
+"I<debian-keyring> sollte die meisten der benötigten Schlüssel bereitstellen."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:15
+msgid ""
+"Note that because the PTS uses source packages, you must give the source "
+"package names, not the binary package names."
+msgstr ""
+"Beachten Sie, dass Sie, da das PTS Quellpakete benutzt, die Quellpaketnamen "
+"und nicht die Binärpaketnamen angeben müssen."
+
+#. type: TP
+#: ../scripts/who-uploads.1:16
+#, no-wrap
+msgid "B<-M>, B<--max-uploads=>I<N>"
+msgstr "B<-M>, B<--max-uploads=>I<N>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:21
+msgid ""
+"Specify the maximum number of uploads to display for each package; the "
+"default is 3. Note that you may not see this many uploads if there are not "
+"this many recorded in the PTS."
+msgstr ""
+"gibt die maximale Anzahl der Uploads an, die für jedes Paket angezeigt "
+"werden; Vorgabe ist 3. Beachten Sie, dass Sie vielleicht nicht so viele "
+"Uploads zu Gesicht bekommen, da nicht so viele Uploads im PTS aufgezeichnet "
+"sind."
+
+#. type: TP
+#: ../scripts/who-uploads.1:21
+#, no-wrap
+msgid "B<--keyring >I<keyring>"
+msgstr "B<--keyring >I<Schlüsselbund>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:25
+msgid ""
+"Add I<keyring> to the list of keyrings to be searched for the uploader's GPG "
+"key."
+msgstr ""
+"fügt I<Schlüsselbund> der Liste der Schlüsselbünde hinzu, die nach dem GPG-"
+"Schlüssel des Hochladenden durchsucht werden."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:34
+#, fuzzy
+#| msgid ""
+#| "By default, B<who-uploads> uses the two Debian keyrings I</usr/share/"
+#| "keyrings/debian-keyring.gpg> and I</usr/share/keyrings/debian-maintainers."
+#| "gpg> (although this default can be changed in the configuration file, see "
+#| "below). Specifying this option means that the default keyrings will not "
+#| "be examined. The B<--keyring> option overrides this one."
+msgid ""
+"By default, B<who-uploads> uses the three Debian keyrings I</usr/share/"
+"keyrings/debian-keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg>, "
+"and I</usr/share/keyrings/debian-maintainers.gpg> (although this default can "
+"be changed in the configuration file, see below). Specifying this option "
+"means that the default keyrings will not be examined. The B<--keyring> "
+"option overrides this one."
+msgstr ""
+"Standardmäßig verwendet B<who-uploads> die beiden Debian-Schlüsselbünde I</"
+"usr/share/keyrings/debian-keyring.gpg> und I</usr/share/keyrings/debian-"
+"maintainers.gpg> (diese Vorgabe kann jedoch in der Konfigurationsdatei "
+"geändert werden, siehe unten). Die Angabe dieser Option bedeutet, dass die "
+"Standardschlüsselbünde nicht untersucht werden. Die Option B<--keyring> "
+"setzt dies außer Kraft."
+
+#. type: TP
+#: ../scripts/who-uploads.1:34
+#, no-wrap
+msgid "B<--date>"
+msgstr "B<--date>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:37
+msgid "Show the date of the upload alongside the uploader's details"
+msgstr ""
+"zeigt das Datum des Hochladens neben den Einzelheiten des Hochladenden."
+
+#. type: TP
+#: ../scripts/who-uploads.1:37
+#, no-wrap
+msgid "B<--nodate>, B<--no-date>"
+msgstr "B<--nodate>, B<--no-date>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:41
+msgid ""
+"Do not show the date of the upload alongside the uploader's details. This "
+"is the default behaviour."
+msgstr ""
+"zeigt nicht das Datum des Hochladens neben den Einzelheiten des "
+"Hochladenden. Dies ist das Standardverhalten."
+
+#. type: TP
+#: ../scripts/who-uploads.1:57
+#, no-wrap
+msgid "B<WHOUPLOADS_DATE>"
+msgstr "B<WHOUPLOADS_DATE>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:61
+msgid ""
+"Show the date of the upload alongside the uploader's details. By default, "
+"this is \"no\"."
+msgstr ""
+"zeigt das Datum des Hochladens neben den Einzelheiten des Hochladenden. "
+"Standardmäßig ist dies auf »no« gesetzt."
+
+#. type: TP
+#: ../scripts/who-uploads.1:61
+#, no-wrap
+msgid "B<WHOUPLOADS_MAXUPLOADS>"
+msgstr "B<WHOUPLOADS_MAXUPLOADS>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:65
+msgid ""
+"The maximum number of uploads to display for each package. By default, this "
+"is 3."
+msgstr ""
+"die maximale Anzahl von Uploads, die für jedes Paket angezeigt wird. "
+"Standardmäßig ist dies 3."
+
+#. type: TP
+#: ../scripts/who-uploads.1:65
+#, no-wrap
+msgid "B<WHOUPLOADS_KEYRINGS>"
+msgstr "B<WHOUPLOADS_KEYRINGS>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:73
+#, fuzzy
+#| msgid ""
+#| "This is a colon-separated list of the default keyrings to be used. By "
+#| "default, it is the two Debian keyrings I</usr/share/keyrings/debian-"
+#| "keyring.gpg> and I</usr/share/keyrings/debian-maintainers.gpg>."
+msgid ""
+"This is a colon-separated list of the default keyrings to be used. By "
+"default, it is the three Debian keyrings I</usr/share/keyrings/debian-"
+"keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg>, and I</usr/share/"
+"keyrings/debian-maintainers.gpg>."
+msgstr ""
+"Dies ist eine durch Doppelpunkte getrennte Liste der Standardschlüsselbünde, "
+"die benutzt werden sollen. Standardmäßig sind das die beiden Debian-"
+"Schlüsselbünde I</usr/share/keyrings/debian-keyring.gpg> und I</usr/share/"
+"keyrings/debian-maintainers.gpg>."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:76
+msgid ""
+"The original version of B<who-uploads> was written by Adeodato Sim\\['o] "
+"E<lt>dato@net.com.org.esE<gt>. The current version is by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Die Originalversion von B<who-uploads> wurde von Adeodato Sim\\['o] "
+"E<lt>dato@net.com.org.esE<gt> geschrieben. Die aktuelle Version stammt von "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:50
+msgid "who-permits-upload - look-up Debian Maintainer access control lists"
+msgstr ""
+"who-permits-upload - schlägt Debian-Paketbetreuer-ACLs "
+"(Zugriffssteuerungslisten) nach"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:54
+msgid ""
+"B<who-permits-upload> [B<-h>] [B<-s> I<keyring>] [B<-d> I<dm_url>] [B<-s> "
+"I<search_type>] I<query> [I<query> ...]"
+msgstr ""
+"B<who-permits-upload> [B<-h>] [B<-s> I<Schlüsselbund>] [B<-d> I<DM_URL>] [B<-"
+"s> I<Suchtyp>] I<Abfrage> [I<Abfrage> …]"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:58
+msgid ""
+"B<who-permits-upload> looks up the given Debian Maintainer (DM) upload "
+"permissions from ftp-master.debian.org and parses them in a human readable "
+"way. The tool can search by DM name, sponsor (the person who granted the "
+"permission) and by package."
+msgstr ""
+"B<who-permits-upload> schlägt die Rechte zum Hochladen des angegebenen "
+"Debian-Paketbetreuers von Debians Ftp-master nach und wertet sie in einer "
+"für Menschen lesbaren Art aus. Das Werkzeug kann anhand von "
+"Paketbetreuername, Sponsor (die Person, die das Recht gewährt) oder Paket "
+"suchen."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:66
+msgid "B<--dmfile=>I<dm_url>, B<-d> I<dm_url>"
+msgstr "B<--dmfile=>I<DM_URL>, B<-d> I<DM_URL>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:68
+msgid ""
+"Retrieve the DM permission file from the supplied URL. When this option is "
+"not present, the default value I<https://ftp-master.debian.org/dm.txt> is "
+"used."
+msgstr ""
+"ruft die Rechtedatei des Debian-Paketbetreuers von der mitgegebenen URL ab. "
+"Wenn diese Option nicht vorhanden ist, wird der Vorgabewert I<https://ftp-"
+"master.debian.org/dm.txt> benutzt."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:73
+msgid "Display a usage summary and exit."
+msgstr "zeigt eine Aufrufinformationen und wird beendet."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:75
+msgid "B<--keyring=>I<keyring>, B<-s> I<keyring>"
+msgstr "B<--keyring=>I<Schlüsselbund>, B<-s> I<Schlüsselbund>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:77
+msgid ""
+"Use the supplied GnuPG keyrings to look-up GPG fingerprints from the DM "
+"permission file. When not present, the default Debian Developer and "
+"Maintainer keyrings are used (I</usr/share/keyrings/debian-keyring.gpg> and "
+"I</usr/share/keyrings/debian-maintainers.gpg>, installed by the I<debian-"
+"keyring> package)."
+msgstr ""
+"verwendet die mitgegebenen GnuPG-Schlüsselbünde, um GPG-Fingerabdrücke in "
+"der Rechtedatei des Debian-Paketbetreuers nachzuschlagen. Wenn sie nicht "
+"vorhanden sind, werden die Standardschlüsselbünde der Debian-Entwickler und -"
+"Paketbetreuer benutzt (I</usr/share/keyrings/debian-keyring.gpg> und I</usr/"
+"share/keyrings/debian-maintainers.gpg>, die durch das Paket I<debian-"
+"keyring> installiert wurden."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:83
+msgid "Separate keyrings with a colon \":\"."
+msgstr "trennt Schlüsselbünde durch einen Doppelpunkt »:«."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:85
+msgid "B<--search=>I<search_type>, B<-s> I<search_type>"
+msgstr "B<--search=>I<Suchtyp>, B<-s> I<Suchtyp>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:87
+msgid ""
+"Modify the look-up behavior. This influences the interpretation of the "
+"I<query> argument. Supported search types are:"
+msgstr ""
+"ändert das Nachschlagverhalten. Dies beeinflusst die Interpretation des "
+"Arguments I<Abfrage>. Folgende Suchtypen werden unterstützt:"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:94
+msgid ""
+"Search for a source package name. This is also the default when B<--search> "
+"is omitted. Since package names are unique, this will return given ACLs - "
+"if any - for a single package."
+msgstr ""
+"sucht nach einem Quellpaketnamen. Dies ist auch die Voreinstellung, wenn B<--"
+"search> weggelassen wird. Da Paketnamen eindeutig sind, wird dies, falls "
+"vorhanden, die gegebenen ACLs eines einzigen Pakets zurückgeben."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:98
+msgid "B<uid>"
+msgstr "B<uid>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:100
+msgid ""
+"Search for a Debian Maintainer. This should be (a fraction of) a name. It "
+"will return all ACLs assigned to matching maintainers."
+msgstr ""
+"sucht nach einem Debian-Paketbetreuer. Dies sollte ein Name (oder ein Teil "
+"davon) sein. Es wird alle zugewiesenen ACLs des zugehörigen Paketbetreuers "
+"zurückgeben."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:103
+msgid "B<sponsor>"
+msgstr "B<sponsor>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:105
+msgid ""
+"Search for a sponsor (i.e. a Debian Developer) who granted DM permissions. "
+"This will return all ACLs given by the supplied developer."
+msgstr ""
+"sucht nach einem Sponsor (d.h. einem Debian-Entwickler) der Debian-"
+"Paketbetreuerrechte gewährt. Dies wird alle angegebene ACLs des "
+"mitgelieferten Paketbetreuers zurückgeben."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:108
+msgid "Note that this is an expensive operation which may take some time."
+msgstr ""
+"Beachten Sie, dass dies eine aufwendige Transaktion ist, die lange dauern "
+"kann."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:112
+msgid "I<query>"
+msgstr "I<Abfrage>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:114
+msgid ""
+"A case sensitive argument to be looked up in the ACL permission file. The "
+"exact interpretation of this argument is dependent by the B<--search> "
+"argument."
+msgstr ""
+"ein Argument zum Nachschlagen der ACL-Rechtedatei, bei dem die Groß- und "
+"Kleinschreibung beachtet wird. Die exakte Interpretation dieses Arguments "
+"ist vom Argument B<--search> abhängig."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:117
+msgid "This argument can be repeated."
+msgstr "Dieses Argument kann wiederholt werden."
+
+#. type: =head1
+#: ../scripts/who-permits-upload.pl:121
+msgid "EXIT VALUE"
+msgstr "RÜCKGABEWERT"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:127
+msgid "Success"
+msgstr "Erfolgreich"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:131
+msgid "An error occurred"
+msgstr "Ein Fehler ist aufgetreten."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:135
+msgid "The command line was not understood"
+msgstr "Die Befehlszeile wurde nicht verstanden."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:143
+msgid "who-permits-upload --search=sponsor arno@debian.org"
+msgstr "who-permits-upload --search=sponsor arno@debian.org"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:145
+msgid ""
+"Search for all DM upload permissions given by the UID \"arno@debian.org\". "
+"Note, that only primary UIDs will match."
+msgstr ""
+"sucht nach allen Rechten von Debian-Paketbetreuern zum Hochladen, die durch "
+"die UID »arno@debian.org« gegeben sind. Beachten Sie, dass nur die erste UID "
+"passen wird."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:148
+msgid "who-permits-upload -s=sponsor \"Arno Töll\""
+msgstr "who-permits-upload -s=sponsor \"Arno Töll\""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:150
+msgid "Same as above, but use a full name instead."
+msgstr ""
+"dasselbe wie oben, nur dass stattdessen ein vollständiger Name benutzt wird"
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:152
+msgid "who-permits-upload apache2"
+msgstr "who-permits-upload apache2"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:154
+msgid "Look up who gave upload permissions for the apache2 source package."
+msgstr ""
+"schlägt nach, wer Rechte zum Hochladen für das Quellpaket »apache2« vergab."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:156
+msgid "who-permits-upload --search=uid \"Paul Tagliamonte\""
+msgstr "who-permits-upload --search=uid \"Paul Tagliamonte\""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:158
+msgid "Look up all DM upload permissions given to \"Paul Tagliamonte\"."
+msgstr ""
+"schlägt alle Debian-Paketbetreuerrechte zum Hochladen nach, die »Paul "
+"Tagliamonte« gegeben wurden."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:164
+msgid ""
+"B<who-permits-upload> was written by Arno Töll <arno@debian.org> and is "
+"licensed under the terms of the General Public License (GPL) version 2 or "
+"later."
+msgstr ""
+"B<who-permits-upload> wurde von Arno Töll <arno@debian.org> geschrieben und "
+"ist unter den Bedingungnen der General Public License (GPL), Version 2 oder "
+"später, lizensiert."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:169
+msgid "B<gpg>(1), B<gpg2>(1), B<who-uploads>(1)"
+msgstr "B<gpg>(1), B<gpg2>(1), B<who-uploads>(1)"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:171
+msgid ""
+"S<I<https://lists.debian.org/debian-devel-announce/2012/09/msg00008.html>>"
+msgstr ""
+"S<I<https://lists.debian.org/debian-devel-announce/2012/09/msg00008.html>>"
+
+#. type: TH
+#: ../scripts/wnpp-alert.1:1
+#, no-wrap
+msgid "WNPP-ALERT"
+msgstr "WNPP-ALERT"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:4
+msgid "wnpp-alert - check for installed packages up for adoption or orphaned"
+msgstr ""
+"wnpp-alert - prüft, ob installierte Pakete zur Adoption stehen oder verwaist "
+"sind"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:6
+msgid "B<wnpp-alert >[B<--diff>] [I<package> ...]"
+msgstr "B<wnpp-alert >[B<--diff>] [I<Paket> …]"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:8
+msgid "B<wnpp-alert --help>|B<--version>"
+msgstr "B<wnpp-alert --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:14
+msgid ""
+"B<wnpp-alert> downloads the lists of packages which have been orphaned (O), "
+"are up for adoption (RFA), or the maintainer has asked for help (RFH) from "
+"the WNPP webpages, and then outputs a list of packages installed on the "
+"system, or matching the listed packages, which are in those lists."
+msgstr ""
+"B<wnpp-alert> lädt die Liste der Pakete von den WNPP-Webseiten herunter, die "
+"verwaist wurden (O), zur Adoption bereitstehen (RFA) oder deren Betreuer um "
+"Hilfe bittet (RFH) und gibt dann eine Liste der Pakete aus, die auf dem "
+"System installiert sind oder zu den aufgelisteten Paketen passen, die auf "
+"diesen Listen stehen."
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:17
+msgid ""
+"Note that WNPP, and therefore B<wnpp-alert>'s output, is source package "
+"based."
+msgstr ""
+"Beachten Sie, dass WNPP und deshalb auch die Ausgabe von B<wnpp-alert> "
+"quellpaketbasiert ist."
+
+#. type: TP
+#: ../scripts/wnpp-alert.1:18
+#, no-wrap
+msgid "B<--diff>, B<-d>"
+msgstr "B<--diff>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:23
+msgid ""
+"If the I<$XDG_CACHE_HOME/devscripts> directory exists, compare the output of "
+"B<wnpp-alert> to the previous output (cached in the file I<wnpp-diff>) and "
+"output the differences."
+msgstr ""
+"vergleicht die Ausgabe von B<wnpp-alert>, falls das Verzeichnis "
+"I<$XDG_CACHE_HOME/devscripts> existiert, mit der vorherigen Ausgabe (in der "
+"Datei I<wnpp-diff> zwischengespeichert) und gibt die Unterschiede aus."
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:31 ../scripts/wnpp-check.1:28
+msgid "https://www.debian.org/devel/wnpp"
+msgstr "https://www.debian.org/devel/wnpp"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:34
+msgid ""
+"B<wnpp-alert> was written by Arthur Korn E<lt>arthur@korn.chE<gt> and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt> for the devscripts "
+"package. It is in the public domain."
+msgstr ""
+"B<wnpp-alert> wurde von Arthur Korn E<lt>arthur@korn.chE<gt> geschrieben und "
+"von Julian Gilbey E<lt>jdg@debian.orgE<gt> für das Paket Devscripts "
+"angepasst. Es ist Public Domain."
+
+#. type: TH
+#: ../scripts/wnpp-check.1:1
+#, no-wrap
+msgid "WNPP-CHECK"
+msgstr "WNPP-CHECK"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:4
+msgid ""
+"wnpp-check - check if a package is being packaged or if this has been "
+"requested"
+msgstr ""
+"wnpp-check - prüft, ob ein Paket paketiert oder dies angefordert wurde."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:6
+msgid "B<wnpp-check> [B<--exact>] I<package> ..."
+msgstr "B<wnpp-check> [B<--exact>] I<Paket> …"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:8
+msgid "B<wnpp-check --help>|B<--version>"
+msgstr "B<wnpp-check --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:13
+msgid ""
+"B<wnpp-check> downloads the lists of packages which are listed as being "
+"packaged (ITPed) or for which a package has been requested (RFPed) from the "
+"WNPP website and lists any packages supplied on the command line which "
+"appear in those lists."
+msgstr ""
+"B<wnpp-check> lädt von der WNPP-Website die Liste der Pakete herunter, die "
+"als zu paketieren (ITP) aufgeführt sind oder für die ein Paket angefordert "
+"wurde (RFP) und listet alle auf der Befehlszeile mitgegebenen Pakete auf, "
+"die auf diesen Listen erscheinen."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:16
+msgid ""
+"Note that WNPP, and therefore B<wnpp-check>'s output, is source package "
+"based."
+msgstr ""
+"Beachten Sie, dass WNPP und deshalb auch die Ausgabe von B<wnpp-check> "
+"quellpaketbasiert ist."
+
+#. type: TP
+#: ../scripts/wnpp-check.1:17
+#, no-wrap
+msgid "B<--exact>, B<-e>"
+msgstr "B<--exact>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:20
+msgid ""
+"Require an exact package name match, rather than the default substring match."
+msgstr ""
+"erfordert einen exakt passenden Paketnamen, anstelle des voreingestellten "
+"Teilzeichenkettentreffers."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:32
+msgid "None of the packages supplied has an open ITP or RFP"
+msgstr "Keines der angegebenen Pakete hat ein offenes ITP oder RFP."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:36
+msgid ""
+"Either an error occurred or at least one package supplied has an open ITP or "
+"RFP"
+msgstr ""
+"Entweder ist ein Fehler aufgetreten oder mindestens eines der angegebenen "
+"Pakete hat ein offenes ITP oder RFP."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:42
+msgid ""
+"B<wnpp-check> was written by David Paleino E<lt>d.paleino@gmail.comE<gt>; "
+"this man page was written by Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt> for the devscripts package. B<wnpp-check> was originally based on "
+"B<wnpp-alert>, which was written by Arthur Korn E<lt>arthur@korn.chE<gt> and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt> for the devscripts "
+"package. Both scripts are in the public domain."
+msgstr ""
+"B<wnpp-check> wurde von David Paleino E<lt>d.paleino@gmail.comE<gt> "
+"geschrieben; diese Handbuchseite wurde von Adam D. Barratt E<lt>adam@adam-"
+"barratt.org.ukE<gt> für das Paket Devscripts verfasst. B<wnpp-check> basiert "
+"ursprünglich auf B<wnpp-alert>, das von Arthur Korn E<lt>arthur@korn.chE<gt> "
+"geschrieben und von Julian Gilbey für das Paket Devscripts angepasst wurde. "
+"Beide Skripte sind Public Domain."
+
+#. type: TH
+#: ../doc/wrap-and-sort.1:15
+#, no-wrap
+msgid "WRAP-AND-SORT"
+msgstr "WRAP-AND-SORT"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:18
+msgid ""
+"wrap-and-sort - wrap long lines and sort items in Debian packaging files"
+msgstr ""
+"wrap-and-sort - bricht lange Zeilen um und sortiert Elemente in Debian-"
+"Paketierungsdateien"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:21
+msgid "B<wrap-and-sort> [I<options>]"
+msgstr "B<wrap-and-sort> [I<Optionen>]"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:30
+msgid ""
+"B<wrap-and-sort> wraps the package lists in Debian control files. By default "
+"the lists will only split into multiple lines if the entries are longer than "
+"the maximum line length limit of 79 characters. B<wrap-and-sort> sorts the "
+"package lists in Debian control files and all I<.dirs>, I<.docs>, I<."
+"examples>, I<.info>, I<.install>, I<.links>, I<.maintscript>, and I<."
+"manpages> files. Beside that B<wrap-and-sort> removes trailing spaces in "
+"these files."
+msgstr ""
+"B<wrap-and-sort> bricht die Paketlisten in Debian-Steuerdateien um. "
+"Standardmäßig werden die Listen nur in mehrere Zeilen aufgeteilt, falls die "
+"Einträge länger als die maximale Längenbeschränkung von 79 Zeichen sind. "
+"B<wrap-and-sort> sortiert die Paketlisten in Debian-Steuerdateien und allen "
+"I<.dirs>-, I<.docs>-, I<.examples>-, I<.info>-, I<.install>-, I<.links>-, I<."
+"maintscript> und I<.manpages>-Dateien. Daneben entfernt B<wrap-and-sort> "
+"abschließende Leerräume in diesen Dateien."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:34
+msgid ""
+"This script should be run in the root of a Debian package tree. It searches "
+"for I<control>, I<control*.in>, I<copyright>, I<copyright.in>, I<install>, "
+"and I<*.install> in the I<debian> directory."
+msgstr ""
+"Dieses Skript sollte im Wurzelverzeichnis eines Debian-Paketverzeichnisbaums "
+"ausgeführt werden. Es sucht im I<debian>-Verzeichnis nach I<control>, "
+"I<control*.in>, I<copyright>, I<copyright.in>, I<install> und I<*.install>."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:39
+#, no-wrap
+msgid "B<-a>, B<--wrap-always>"
+msgstr "B<-a>, B<--wrap-always>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:43
+msgid ""
+"Wrap all package lists in the Debian I<control> file even if they do not "
+"exceed the line length limit and could fit in one line."
+msgstr ""
+"bricht alle Paketlisten in der Debian-Datei I<control> um, sogar dann, wenn "
+"sie die Zeilenlängenbeschränkung nicht überschreiten und in eine Zeile "
+"passen würden."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:43
+#, no-wrap
+msgid "B<-s>, B<--short-indent>"
+msgstr "B<-s>, B<--short-indent>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:47
+msgid ""
+"Only indent wrapped lines by one space (default is in-line with the field "
+"name)."
+msgstr ""
+"rückt umgebrochene Zeilen nur um ein Leerzeichen ein (standardmäßig wird um "
+"die Breite des Feldnamens eingerückt)."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:47
+#, no-wrap
+msgid "B<-b>, B<--sort-binary-packages>"
+msgstr "B<-b>, B<--sort-binary-packages>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:50
+msgid "Sort binary package paragraphs by name."
+msgstr "sortiert Binärpaketabsätze nach Namen."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:50
+#, no-wrap
+msgid "B<-k>, B<--keep-first>"
+msgstr "B<-k>, B<--keep-first>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:53
+msgid "When sorting binary package paragraphs, leave the first one at the top."
+msgstr "Belässt, wenn Binärpaketabsätze sortiert werden, den ersten oben."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:57
+msgid ""
+"Unqualified B<debhelper>(7) configuration files are applied to the first "
+"package."
+msgstr ""
+"Nicht spezifizierte B<debhelper>(7)-Konfigurationsdateien werden auf das "
+"erste Paket angewendet."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:57
+#, no-wrap
+msgid "B<-n>, B<--no-cleanup>"
+msgstr "B<-n>, B<--no-cleanup>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:60
+msgid "Do not remove trailing whitespaces."
+msgstr "entfernt nicht die abschließenden Leerräume."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:60
+#, no-wrap
+msgid "B<-t>, B<--trailing-comma>"
+msgstr "B<-t>, B<--trailing-comma>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:65
+msgid ""
+"Add a trailing comma at the end of the sorted fields. This minimizes future "
+"differences in the VCS commits when additional dependencies are appended or "
+"removed."
+msgstr ""
+"fügt am Ende der sortierten Felder ein abschließendes Komma hinzu. Dies "
+"minimiert zukünftige Unterschiede in den VCS-Commits, wenn zusätzliche "
+"Abhängigkeiten angehängt oder entfernt werden."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:65
+#, no-wrap
+msgid "B<-d >I<path>, B<--debian-directory=>I<path>"
+msgstr "B<-d >I<Pfad>, B<--debian-directory=>I<Pfad>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:68
+msgid "Location of the I<debian> directory (default: I<./debian>)."
+msgstr "Speicherort des I<debian>-Verzeichnisses (Vorgabe: I<./debian>)."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:68
+#, no-wrap
+msgid "B<-f >I<file>, B<--file=>I<file>"
+msgstr "B<-f >I<Datei>, B<--file=>I<Datei>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:73
+msgid ""
+"Wrap and sort only the specified I<file>. You can specify this parameter "
+"multiple times. All supported files will be processed if no files are "
+"specified."
+msgstr ""
+"bricht nur die angegebene I<Datei> um und sortiert sie. Sie können diesen "
+"Parameter mehrfach angeben. Falls keine Dateien angegeben wurden, werden "
+"alle unterstützten Dateien verarbeitet."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:76
+msgid "Print all files that are touched."
+msgstr "gibt alle Dateien aus, die angefasst wurden."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:76
+#, no-wrap
+msgid "B<--max-line-length=>I<max_line_length>"
+msgstr "B<--max-line-length=>I<maximale_Zeilenlänge>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:80
+msgid ""
+"Set the maximum allowed line length. Package lists in the Debian I<control> "
+"file that exceed this length limit will be wrapped."
+msgstr ""
+"setzt die maximal erlaubte Zeilenlänge. Paketlisten in der Debian-I<control>-"
+"Datei, die diese Längenbeschränkung überschreiten, werden umgebrochen."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:82
+msgid "The default maximum line length is 79 characters."
+msgstr "Die voreingestellte maximale Zeilenlänge ist 79 Zeichen."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:82
+#, no-wrap
+msgid "B<-N>, B<--dry-run>"
+msgstr "B<-N>, B<--dry-run>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:85
+msgid ""
+"Do not modify any file, instead only print the files that would be modified."
+msgstr ""
+"verändert keine Datei, gibt stattdessen nur die Dateien aus, die verändert "
+"würden."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:86
+#, no-wrap
+msgid "B<--experimental-rts-parser>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:90
+msgid ""
+"Enable the experimental round-trip safe parser. When enabled, most comments "
+"in deb822 control will be preserved."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:94
+msgid ""
+"The option is a temporary means to enable users to opt-in to this new "
+"experimental feature. The option will be removed once the new parser is "
+"mature enough and is ready to unconditionally replace the previous parser."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:97
+msgid ""
+"This option requires python-debian version 0.1.43 or later to work. "
+"However, some features will require 0.1.44 or later."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:101
+msgid ""
+"B<wrap-and-sort> and this manpage have been written by Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+msgstr ""
+"B<wrap-and-sort> und diese Handbuchseite wurden von Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt> geschrieben."
+
+#. type: TH
+#: ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "DEVSCRIPTS.CONF"
+msgstr "DEVSCRIPTS.CONF"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:4
+msgid "devscripts.conf - configuration file for the devscripts package"
+msgstr "devscripts.conf - Konfigurationsdatei für das Paket Devscripts"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:9
+msgid ""
+"The B<devscripts> package provides a collection of scripts which may be of "
+"use to Debian developers and others wishing to build Debian packages. Many "
+"of these have options which can be configured on a system-wide and per-user "
+"basis."
+msgstr ""
+"Das Paket B<devscripts> stellt eine Sammlung von Skripten bereit, die für "
+"Debian-Entwickler und andere nützlich sein können, die Debian-Pakete bauen "
+"möchten. Viele davon haben Optionen, die systemweit und auf Benutzerebene "
+"konfiguriert werden können."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:15
+msgid ""
+"Every script in the B<devscripts> package which makes use of values from "
+"these configuration files describes the specific settings recognised in its "
+"own manpage. (For a list of the scripts, either see I</usr/share/doc/"
+"devscripts/README.gz> or look at the output of I<dpkg -L devscripts | grep /"
+"usr/bin>.)"
+msgstr ""
+"Jedes Skript im B<devscripts>-Paket, das von Werten dieser "
+"Konfigurationsdateien Gebrauch macht, beschreibt die speziellen "
+"Einstellungen, die es kennt, in seiner eigenen Handbuchseite. (Eine Liste "
+"der Skripte finden Sie entweder in I</usr/share/doc/devscripts/README.gz> "
+"oder sehen Sie in die Ausgabe von I<dpkg -L devscripts | grep /usr/bin>.)"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:24
+msgid ""
+"The two configuration files are I</etc/devscripts.conf> for system-wide "
+"defaults and I<~/.devscripts> for per-user settings. They are written with "
+"B<bash>(1) syntax, but should only have comments and simple variable "
+"assignments in them; they are both sourced (if present) by many of the "
+"B<devscripts> scripts. Variables corresponding to simple switches should "
+"have one of the values I<yes> and I<no>; any other setting is regarded as "
+"equivalent to the default setting."
+msgstr ""
+"Die beiden Konfigurationsdateien sind I</etc/devscripts.conf> für "
+"systemweite Vorgaben und I<~/.devscripts> für Einstellungen auf "
+"Benutzerebene. Sie sind in B<bash>(1)-Syntax geschrieben, sollten aber nur "
+"Kommentare und einfache Zuweisungen zu Variablen beinhalten; sie werden "
+"(falls vorhanden) durch viele der B<devscripts>-Skripte eingelesen. "
+"Variablen, die zu einfachen Schaltern gehören, sollten einen der Werte "
+"I<yes> oder I<no> enthalten; alle anderen Einstellungen werden als "
+"Entsprechung zur Standardeinstellung betrachtet."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:28
+msgid ""
+"All variable names are written in uppercase, and begin with the script "
+"name. Package-wide variables begin with \"DEVSCRIPTS\", and are listed "
+"below, as well as in the relevant manpages."
+msgstr ""
+"Alle Variablennamen werden groß geschrieben und beginnen mit dem "
+"Skriptnamen. Paketweite Variablen beginnen mit »DEVSCRIPTS« und werden "
+"nachfolgend ebenso wie in den einschlägigen Handbuchseiten aufgeführt."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:36
+msgid ""
+"For a list of all of the available options variables, along with their "
+"default settings, see the example configuration file I</usr/share/doc/"
+"devscripts/devscripts.conf.ex>. This is copied to I</etc/devscripts.conf> "
+"when the B<devscripts> package is first installed. Information about "
+"configuration options introduced in newer versions of the package will be "
+"appended to I</etc/devscripts.conf> when the package is upgraded."
+msgstr ""
+"Ein Liste aller verfügbarer Optionsvariablen finden Sie zusammen mit ihren "
+"Standardeinstellungen in der Beispielkonfigurationsdatei I</usr/share/doc/"
+"devscripts/devscripts.conf.ex>. Diese wird bei der ersten Installation des "
+"Pakets nach I</etc/devscripts.conf> kopiert. Informationen über "
+"Konfigurationsoptionen, die in neueren Versionen des Pakets eingeführt "
+"wurden, werden beim Upgrade des Pakets an I</etc/devscripts.conf> angehängt."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:40
+msgid ""
+"Every script which reads the configuration files can be forced to ignore "
+"them by using B<--no-conf> as the I<first> command-line option."
+msgstr ""
+"Jedes Skript, das die Konfigurationsdateien liest, kann mittels B<--no-conf> "
+"als I<erste> Befehlszeilenoption gezwungen werden, sie zu ignorieren."
+
+#. type: SH
+#: ../doc/devscripts.conf.5:40
+#, no-wrap
+msgid "PACKAGE-WIDE VARIABLES"
+msgstr "PAKETWEITE VARIABLEN"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:42
+msgid "The currently recognised package-wide variables are:"
+msgstr "Die derzeit erkannten paketweiten Variablen sind:"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:54
+msgid ""
+"These variables control scripts which change directory to find a I<debian/"
+"changelog> file or suchlike, and some other miscellaneous cases. In order "
+"to prevent unwanted, even possibly dangerous, behaviour, these variables "
+"control when actions will be performed. The scripts which currently make "
+"use of these variables are: B<debc>, B<debchange>/B<dch>, B<debclean>, "
+"B<debi>, B<debrelease>, B<debuild> and B<uscan>, but this list may change "
+"with time (and I may not remember to update this manpage). Please see the "
+"manpages of individual scripts for details of the specific behaviour for "
+"each script."
+msgstr ""
+"Diese Variablen steuern Skripte, die das Verzeichnis ändern, um eine "
+"I<debian/changelog>-Datei oder dergleichen zu finden und in verschiedenen "
+"anderen Fällen. Um unerwünschtes und möglicherweise sogar gefährliches "
+"Verhalten zu verhindern, steuern diese Variablen, wann Aktionen durchgeführt "
+"werden. Derzeit werden diese Variablen von folgenden Skripten verwendet: "
+"B<debc>, B<debchange>/B<dch>, B<debclean>, B<debi>, B<debrelease>, "
+"B<debuild> und B<uscan>, aber diese Liste kann sich im Lauf der Zeit ändern "
+"(und die Aktualisierung dieser Handbuchseite könnte vergessen werden). Bitte "
+"lesen Sie die Handbuchseiten der jeweiligen Skripte, um Einzelheiten über "
+"das spezielle Verhalten für jedes Skript zu erfahren."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:58
+msgid "B<devscripts>(1) and I</usr/share/doc/devscripts/README.gz.>"
+msgstr "B<devscripts>(1) und I</usr/share/doc/devscripts/README.gz>"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:60
+msgid ""
+"This manpage was written for the B<devscripts> package by the package "
+"maintainer Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Diese Handbuchseite wurde für das Paket B<devscripts> durch den "
+"Paketbetreuer Julian Gilbey E<lt>jdg@debian.orgE<gt> geschrieben."
diff --git a/po4a/po/devscripts.pot b/po4a/po/devscripts.pot
new file mode 100644
index 0000000..83b4f9b
--- /dev/null
+++ b/po4a/po/devscripts.pot
@@ -0,0 +1,24568 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2023-04-05 11:18+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1
+#, no-wrap
+msgid "ANNOTATE-OUTPUT"
+msgstr ""
+
+#. type: TH
+#: ../scripts/annotate-output.1:1 ../scripts/archpath.1:1
+#: ../scripts/checkbashisms.1:1 ../scripts/cvs-debc.1:1 ../scripts/cvs-debi.1:1
+#: ../scripts/cvs-debrelease.1:1 ../scripts/cvs-debuild.1:1 ../scripts/dcmd.1:1
+#: ../scripts/debc.1:1 ../scripts/debchange.1:1 ../scripts/debclean.1:1
+#: ../scripts/debdiff.1:1 ../scripts/debdiff-apply.1:15 ../scripts/debi.1:1
+#: ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1
+#: ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/dep3changelog.1:1
+#: ../doc/devscripts.1:1 ../scripts/dpkg-genbuilddeps.1:1 ../doc/edit-patch.1:1
+#: ../scripts/dscextract.1:1 ../scripts/dscverify.1:1
+#: ../scripts/getbuildlog.1:1 ../scripts/grep-excuses.1:1
+#: ../scripts/list-unreleased.1:1 ../scripts/manpage-alert.1:1
+#: ../scripts/mergechanges.1:1 ../scripts/nmudiff.1:1
+#: ../scripts/plotchangelog.1:1 ../scripts/pts-subscribe.1:1
+#: ../scripts/rc-alert.1:1 ../doc/suspicious-source.1:15 ../scripts/uupdate.1:1
+#: ../doc/what-patch.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../doc/wrap-and-sort.1:15 ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "Debian Utilities"
+msgstr ""
+
+#. type: TH
+#: ../scripts/annotate-output.1:1 ../scripts/archpath.1:1
+#: ../scripts/checkbashisms.1:1 ../scripts/cvs-debc.1:1 ../scripts/cvs-debi.1:1
+#: ../scripts/cvs-debrelease.1:1 ../scripts/cvs-debuild.1:1 ../scripts/dcmd.1:1
+#: ../scripts/debc.1:1 ../scripts/debchange.1:1 ../scripts/debclean.1:1
+#: ../scripts/debdiff.1:1 ../scripts/debdiff-apply.1:15 ../scripts/debi.1:1
+#: ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1
+#: ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/dep3changelog.1:1
+#: ../doc/devscripts.1:1 ../scripts/dpkg-depcheck.1:1
+#: ../scripts/dpkg-genbuilddeps.1:1 ../doc/edit-patch.1:1
+#: ../scripts/dscextract.1:1 ../scripts/dscverify.1:1
+#: ../scripts/getbuildlog.1:1 ../scripts/grep-excuses.1:1
+#: ../scripts/list-unreleased.1:1 ../scripts/manpage-alert.1:1
+#: ../scripts/mergechanges.1:1 ../scripts/nmudiff.1:1
+#: ../scripts/plotchangelog.1:1 ../scripts/pts-subscribe.1:1
+#: ../scripts/rc-alert.1:1 ../doc/suspicious-source.1:15 ../scripts/uupdate.1:1
+#: ../doc/what-patch.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../doc/wrap-and-sort.1:15 ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "DEBIAN"
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:2 ../scripts/archpath.1:2 ../scripts/bts.pl:39
+#: ../scripts/build-rdeps.pl:22 ../scripts/chdist.pl:18
+#: ../scripts/checkbashisms.1:2 ../scripts/cowpoke.1:18 ../scripts/cvs-debc.1:2
+#: ../scripts/cvs-debi.1:2 ../scripts/cvs-debrelease.1:2
+#: ../scripts/cvs-debuild.1:2 ../scripts/dcmd.1:2 ../scripts/dd-list.1:18
+#: ../scripts/debc.1:2 ../scripts/debchange.1:2 ../scripts/debcheckout.pl:24
+#: ../scripts/debclean.1:2 ../scripts/debcommit.pl:3 ../scripts/debdiff.1:2
+#: ../scripts/debdiff-apply.1:17 ../scripts/debi.1:2 ../scripts/debpkg.1:2
+#: ../scripts/debrepro.pod:1 ../scripts/debrelease.1:2
+#: ../scripts/deb-why-removed.pl:196 ../scripts/debrsign.1:2
+#: ../scripts/debsign.1:2 ../scripts/debsnap.1:3 ../scripts/debuild.1:2
+#: ../scripts/desktop2menu.pl:24 ../scripts/dep3changelog.1:2
+#: ../doc/devscripts.1:2 ../scripts/dget.pl:565 ../scripts/diff2patches.1:2
+#: ../scripts/dpkg-depcheck.1:2 ../scripts/dpkg-genbuilddeps.1:2
+#: ../doc/edit-patch.1:2 ../scripts/dscextract.1:2 ../scripts/dscverify.1:2
+#: ../scripts/getbuildlog.1:2 ../scripts/git-deborig.pl:20
+#: ../scripts/grep-excuses.1:2 ../scripts/hardening-check.pl:521
+#: ../scripts/list-unreleased.1:2 ../scripts/ltnu.pod:1
+#: ../scripts/manpage-alert.1:2 ../scripts/mass-bug.pl:21
+#: ../scripts/mergechanges.1:2 ../scripts/mk-build-deps.pl:24
+#: ../scripts/mk-origtargz.pl:25 ../scripts/namecheck.pl:3
+#: ../scripts/nmudiff.1:2 ../scripts/origtargz.pl:20
+#: ../scripts/plotchangelog.1:2 ../scripts/pts-subscribe.1:2
+#: ../scripts/rc-alert.1:2 ../scripts/rmadison.pl:260 ../scripts/sadt.pod:17
+#: ../scripts/salsa.pl:3 ../doc/suspicious-source.1:17 ../scripts/svnpath.pl:3
+#: ../scripts/tagpending.pl:80 ../scripts/transition-check.pl:23
+#: ../scripts/uscan.pl:34 ../scripts/uupdate.1:2 ../doc/what-patch.1:2
+#: ../scripts/whodepends.1:2 ../scripts/who-uploads.1:2
+#: ../scripts/who-permits-upload.pl:48 ../scripts/wnpp-alert.1:2
+#: ../scripts/wnpp-check.1:2 ../doc/wrap-and-sort.1:16
+#: ../doc/devscripts.conf.5:2
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:4
+msgid "annotate-output - annotate program output with time and stream"
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:4 ../scripts/archpath.1:4 ../scripts/bts.pl:191
+#: ../scripts/build-rdeps.pl:26 ../scripts/chdist.pl:22
+#: ../scripts/checkbashisms.1:4 ../scripts/cowpoke.1:20 ../scripts/cvs-debc.1:4
+#: ../scripts/cvs-debi.1:4 ../scripts/cvs-debrelease.1:4
+#: ../scripts/cvs-debuild.1:4 ../scripts/dcmd.1:4 ../scripts/dd-list.1:21
+#: ../scripts/debc.1:4 ../scripts/debchange.1:4 ../scripts/debcheckout.pl:28
+#: ../scripts/debclean.1:4 ../scripts/debcommit.pl:7 ../scripts/debdiff.1:4
+#: ../scripts/debdiff-apply.1:20 ../scripts/debi.1:4 ../scripts/debpkg.1:4
+#: ../scripts/debrepro.pod:5 ../scripts/debrelease.1:4
+#: ../scripts/deb-why-removed.pl:200 ../scripts/debrsign.1:4
+#: ../scripts/debsign.1:4 ../scripts/debsnap.1:6 ../scripts/debuild.1:4
+#: ../scripts/desktop2menu.pl:28 ../scripts/dep3changelog.1:4
+#: ../scripts/dget.pl:569 ../scripts/dpkg-depcheck.1:4
+#: ../scripts/dpkg-genbuilddeps.1:4 ../doc/edit-patch.1:6
+#: ../scripts/dscextract.1:4 ../scripts/dscverify.1:4
+#: ../scripts/getbuildlog.1:4 ../scripts/git-deborig.pl:24
+#: ../scripts/grep-excuses.1:4 ../scripts/hardening-check.pl:525
+#: ../scripts/list-unreleased.1:4 ../scripts/ltnu.pod:5
+#: ../scripts/manpage-alert.1:4 ../scripts/mass-bug.pl:25
+#: ../scripts/mergechanges.1:4 ../scripts/mk-build-deps.pl:28
+#: ../scripts/mk-origtargz.pl:29 ../scripts/nmudiff.1:4
+#: ../scripts/origtargz.pl:24 ../scripts/plotchangelog.1:4
+#: ../scripts/pts-subscribe.1:4 ../scripts/rc-alert.1:4
+#: ../scripts/rmadison.pl:264 ../scripts/sadt.pod:21 ../scripts/salsa.pl:7
+#: ../doc/suspicious-source.1:21 ../scripts/svnpath.pl:7
+#: ../scripts/tagpending.pl:84 ../scripts/transition-check.pl:27
+#: ../scripts/uscan.pl:38 ../scripts/uupdate.1:4 ../doc/what-patch.1:5
+#: ../scripts/whodepends.1:4 ../scripts/who-uploads.1:4
+#: ../scripts/who-permits-upload.pl:52 ../scripts/wnpp-alert.1:4
+#: ../scripts/wnpp-check.1:4 ../doc/wrap-and-sort.1:18
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:6
+msgid "B<annotate-output> [I<options>] I<program> [I<args> ...]"
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:6 ../scripts/archpath.1:12
+#: ../scripts/bts.pl:195 ../scripts/build-rdeps.pl:30 ../scripts/chdist.pl:26
+#: ../scripts/checkbashisms.1:8 ../scripts/cowpoke.1:24 ../scripts/cvs-debc.1:6
+#: ../scripts/cvs-debi.1:6 ../scripts/cvs-debrelease.1:7
+#: ../scripts/cvs-debuild.1:7 ../scripts/dcmd.1:6 ../scripts/dd-list.1:26
+#: ../scripts/debc.1:6 ../scripts/debchange.1:8 ../scripts/debcheckout.pl:40
+#: ../scripts/debclean.1:6 ../scripts/debcommit.pl:11 ../scripts/debdiff.1:15
+#: ../scripts/debdiff-apply.1:27 ../scripts/debi.1:6 ../scripts/debpkg.1:6
+#: ../scripts/debrepro.pod:9 ../scripts/debrelease.1:6
+#: ../scripts/deb-reversion.dbk:82 ../scripts/deb-why-removed.pl:204
+#: ../scripts/debrsign.1:7 ../scripts/debsign.1:6 ../scripts/debsnap.1:14
+#: ../scripts/debuild.1:10 ../scripts/desktop2menu.pl:34
+#: ../scripts/dep3changelog.1:6 ../doc/devscripts.1:4 ../scripts/dget.pl:579
+#: ../scripts/diff2patches.1:10 ../scripts/dpkg-depcheck.1:6
+#: ../scripts/dpkg-genbuilddeps.1:6 ../doc/edit-patch.1:11
+#: ../scripts/dscextract.1:6 ../scripts/dscverify.1:6
+#: ../scripts/getbuildlog.1:8 ../scripts/git-deborig.pl:28
+#: ../scripts/grep-excuses.1:6 ../scripts/hardening-check.pl:532
+#: ../scripts/list-unreleased.1:6 ../scripts/ltnu.pod:13
+#: ../scripts/manpage-alert.1:6 ../scripts/mass-bug.pl:29
+#: ../scripts/mergechanges.1:6 ../scripts/mk-build-deps.pl:34
+#: ../scripts/mk-origtargz.pl:39 ../scripts/nmudiff.1:6
+#: ../scripts/origtargz.pl:34 ../scripts/plotchangelog.1:7
+#: ../scripts/pts-subscribe.1:8 ../scripts/rc-alert.1:8
+#: ../scripts/rmadison.pl:272 ../scripts/sadt.pod:25 ../scripts/salsa.pl:30
+#: ../doc/suspicious-source.1:24 ../scripts/svnpath.pl:17
+#: ../scripts/tagpending.pl:88 ../scripts/transition-check.pl:33
+#: ../scripts/uscan.pl:42 ../scripts/uupdate.1:10 ../doc/what-patch.1:8
+#: ../scripts/whodepends.1:6 ../scripts/who-uploads.1:6
+#: ../scripts/who-permits-upload.pl:56 ../scripts/wnpp-alert.1:8
+#: ../scripts/wnpp-check.1:8 ../doc/wrap-and-sort.1:22
+#: ../doc/devscripts.conf.5:4
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:10
+msgid ""
+"B<annotate-output> will execute the specified program, while prepending "
+"every line with the current time and O for stdout and E for stderr."
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:11 ../scripts/bts.pl:247
+#: ../scripts/build-rdeps.pl:46 ../scripts/chdist.pl:33
+#: ../scripts/checkbashisms.1:23 ../scripts/cowpoke.1:29
+#: ../scripts/cvs-debc.1:24 ../scripts/cvs-debi.1:28
+#: ../scripts/cvs-debrelease.1:21 ../scripts/cvs-debuild.1:32
+#: ../scripts/dcmd.1:15 ../scripts/dd-list.1:58 ../scripts/debc.1:64
+#: ../scripts/debchange.1:149 ../scripts/debcheckout.pl:68
+#: ../scripts/debclean.1:63 ../scripts/debcommit.pl:19 ../scripts/debdiff.1:52
+#: ../scripts/debdiff-apply.1:61 ../scripts/debi.1:65
+#: ../scripts/debrepro.pod:92 ../scripts/debrelease.1:56
+#: ../scripts/deb-reversion.dbk:128 ../scripts/deb-why-removed.pl:209
+#: ../scripts/debrsign.1:30 ../scripts/debsign.1:39 ../scripts/debsnap.1:26
+#: ../scripts/debuild.1:256 ../scripts/dep3changelog.1:15
+#: ../scripts/dget.pl:620 ../scripts/diff2patches.1:16
+#: ../scripts/dpkg-depcheck.1:15 ../scripts/dscextract.1:14
+#: ../scripts/dscverify.1:17 ../scripts/getbuildlog.1:24
+#: ../scripts/git-deborig.pl:47 ../scripts/grep-excuses.1:14
+#: ../scripts/hardening-check.pl:593 ../scripts/list-unreleased.1:12
+#: ../scripts/ltnu.pod:27 ../scripts/manpage-alert.1:12
+#: ../scripts/mass-bug.pl:59 ../scripts/mk-build-deps.pl:44
+#: ../scripts/mk-origtargz.pl:64 ../scripts/nmudiff.1:24
+#: ../scripts/origtargz.pl:100 ../scripts/plotchangelog.1:43
+#: ../scripts/pts-subscribe.1:18 ../scripts/rc-alert.1:17
+#: ../scripts/rmadison.pl:281 ../scripts/sadt.pod:42 ../scripts/salsa.pl:437
+#: ../doc/suspicious-source.1:34 ../scripts/tagpending.pl:94
+#: ../scripts/transition-check.pl:42 ../scripts/uupdate.1:54
+#: ../doc/what-patch.1:15 ../scripts/whodepends.1:10
+#: ../scripts/who-uploads.1:15 ../scripts/who-permits-upload.pl:62
+#: ../scripts/wnpp-alert.1:17 ../scripts/wnpp-check.1:16
+#: ../doc/wrap-and-sort.1:35
+#, no-wrap
+msgid "OPTIONS"
+msgstr ""
+
+#. type: TP
+#: ../scripts/annotate-output.1:12
+#, no-wrap
+msgid "B<+FORMAT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:16
+msgid "Controls the timestamp format, as per B<date>(1). Defaults to \"%H:%M:%S\"."
+msgstr ""
+
+#. type: TP
+#: ../scripts/annotate-output.1:16 ../scripts/chdist.pl:37
+#: ../scripts/dd-list.1:59 ../scripts/debcheckout.pl:96
+#: ../scripts/debdiff-apply.1:62 ../scripts/debsnap.1:73 ../scripts/dget.pl:680
+#: ../scripts/dpkg-depcheck.1:96 ../scripts/getbuildlog.1:25
+#: ../scripts/mk-build-deps.pl:111 ../scripts/rmadison.pl:305
+#: ../scripts/sadt.pod:64 ../doc/suspicious-source.1:35 ../doc/what-patch.1:17
+#: ../doc/wrap-and-sort.1:36
+#, no-wrap
+msgid "B<-h>, B<--help>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:19 ../scripts/debchange.1:402
+#: ../scripts/debclean.1:90 ../scripts/debrelease.1:102
+#: ../scripts/debsign.1:102 ../scripts/dep3changelog.1:19
+#: ../scripts/dscverify.1:40 ../scripts/nmudiff.1:89
+#: ../scripts/pts-subscribe.1:31 ../scripts/uupdate.1:104
+#: ../scripts/who-uploads.1:48
+msgid "Display a help message and exit successfully."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/annotate-output.1:20 ../scripts/dscextract.1:30
+#: ../scripts/ltnu.pod:84
+#, no-wrap
+msgid "EXAMPLE"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:30
+#, no-wrap
+msgid ""
+"$ annotate-output make\n"
+"21:41:21 I: Started make\n"
+"21:41:21 O: gcc -Wall program.c\n"
+"21:43:18 E: program.c: Couldn't compile, and took me ages to find out\n"
+"21:43:19 E: collect2: ld returned 1 exit status\n"
+"21:43:19 E: make: *** [all] Error 1\n"
+"21:43:19 I: Finished with exitcode 2\n"
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:32 ../scripts/debsnap.1:156
+#: ../scripts/rc-alert.1:119 ../scripts/whodepends.1:17
+#, no-wrap
+msgid "BUGS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:36
+msgid ""
+"Since stdout and stderr are processed in parallel, it can happen that some "
+"lines received on stdout will show up before later-printed stderr lines (and "
+"vice-versa)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:41
+msgid ""
+"This is unfortunately very hard to fix with the current annotation "
+"strategy. A fix would involve switching to PTRACE'ing the process. Giving "
+"nice a (much) higher priority over the executed program could however cause "
+"this behaviour to show up less frequently."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:46
+msgid ""
+"The program does not work as well when the output is not linewise. In "
+"particular, when an interactive program asks for input, the question might "
+"not be shown until after you have answered it. This will give the "
+"impression that the annotated program has hung, while it has not."
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:47 ../scripts/bts.pl:4316
+#: ../scripts/checkbashisms.1:72 ../scripts/cowpoke.1:379
+#: ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62
+#: ../scripts/cvs-debrelease.1:64 ../scripts/cvs-debuild.1:53
+#: ../scripts/dcmd.1:107 ../scripts/debc.1:125 ../scripts/debchange.1:482
+#: ../scripts/debcheckout.pl:231 ../scripts/debclean.1:110
+#: ../scripts/debcommit.pl:954 ../scripts/debdiff.1:251
+#: ../scripts/debdiff-apply.1:111 ../scripts/debi.1:132
+#: ../scripts/debrepro.pod:171 ../scripts/debrelease.1:132
+#: ../scripts/deb-reversion.dbk:247 ../scripts/deb-why-removed.pl:247
+#: ../scripts/debrsign.1:66 ../scripts/debsign.1:132 ../scripts/debsnap.1:138
+#: ../scripts/debuild.1:447 ../scripts/dep3changelog.1:28
+#: ../scripts/dget.pl:742 ../scripts/diff2patches.1:45
+#: ../scripts/dpkg-depcheck.1:118 ../scripts/dpkg-genbuilddeps.1:30
+#: ../scripts/dscverify.1:78 ../scripts/git-deborig.pl:79
+#: ../scripts/grep-excuses.1:61 ../scripts/hardening-check.pl:680
+#: ../scripts/list-unreleased.1:19 ../scripts/ltnu.pod:105
+#: ../scripts/mk-origtargz.pl:210 ../scripts/nmudiff.1:121
+#: ../scripts/origtargz.pl:162 ../scripts/plotchangelog.1:124
+#: ../scripts/pts-subscribe.1:51 ../scripts/rc-alert.1:121
+#: ../scripts/rmadison.pl:404 ../scripts/sadt.pod:74 ../scripts/salsa.pl:1029
+#: ../scripts/tagpending.pl:149 ../scripts/uscan.pl:2094
+#: ../scripts/uupdate.1:189 ../doc/what-patch.1:35
+#: ../scripts/who-permits-upload.pl:167 ../scripts/wnpp-alert.1:29
+#: ../scripts/wnpp-check.1:26 ../doc/devscripts.conf.5:54
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:49
+msgid "B<date>(1)"
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:50
+#, no-wrap
+msgid "SUPPORT"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:54
+msgid ""
+"This program is community-supported (meaning: you'll need to fix it "
+"yourself). Patches are however appreciated, as is any feedback (positive or "
+"negative)."
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:55 ../scripts/archpath.1:54
+#: ../scripts/build-rdeps.pl:547 ../scripts/checkbashisms.1:74
+#: ../scripts/cowpoke.1:385 ../scripts/cvs-debc.1:63 ../scripts/cvs-debi.1:67
+#: ../scripts/cvs-debrelease.1:68 ../scripts/cvs-debuild.1:58
+#: ../scripts/dcmd.1:110 ../scripts/dd-list.1:107 ../scripts/debc.1:129
+#: ../scripts/debchange.1:488 ../scripts/debcheckout.pl:236
+#: ../scripts/debclean.1:113 ../scripts/debcommit.pl:950
+#: ../scripts/debdiff.1:259 ../scripts/debi.1:135 ../scripts/debpkg.1:23
+#: ../scripts/debrepro.pod:175 ../scripts/debrelease.1:136
+#: ../scripts/deb-reversion.dbk:292 ../scripts/debrsign.1:70
+#: ../scripts/debsign.1:144 ../scripts/debuild.1:459
+#: ../scripts/desktop2menu.pl:52 ../scripts/dep3changelog.1:26
+#: ../scripts/dget.pl:734 ../scripts/diff2patches.1:48
+#: ../scripts/dpkg-genbuilddeps.1:36 ../scripts/dscextract.1:32
+#: ../scripts/dscverify.1:83 ../scripts/getbuildlog.1:41
+#: ../scripts/git-deborig.pl:83 ../scripts/grep-excuses.1:63
+#: ../scripts/hardening-check.pl:668 ../scripts/list-unreleased.1:21
+#: ../scripts/manpage-alert.1:28 ../scripts/mass-bug.pl:566
+#: ../scripts/mergechanges.1:28 ../scripts/mk-build-deps.pl:141
+#: ../scripts/mk-origtargz.pl:214 ../scripts/namecheck.pl:24
+#: ../scripts/nmudiff.1:125 ../scripts/origtargz.pl:166
+#: ../scripts/plotchangelog.1:126 ../scripts/pts-subscribe.1:56
+#: ../scripts/rc-alert.1:125 ../scripts/rmadison.pl:408
+#: ../scripts/salsa.pl:1033 ../scripts/svnpath.pl:96
+#: ../scripts/transition-check.pl:81 ../scripts/uscan.pl:2098
+#: ../scripts/uupdate.1:196 ../scripts/whodepends.1:19
+#: ../scripts/who-uploads.1:73 ../scripts/who-permits-upload.pl:162
+#: ../scripts/wnpp-alert.1:31 ../scripts/wnpp-check.1:36
+#: ../doc/devscripts.conf.5:58
+#, no-wrap
+msgid "AUTHOR"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:59
+msgid ""
+"B<annotate-output> was written by Jeroen van Wolffelaar "
+"E<lt>jeroen@wolffelaar.nlE<gt>. This manpage comes under the same copyright "
+"as annotate-output itself, read /usr/bin/annotate-output (or wherever you "
+"install it) for the details."
+msgstr ""
+
+#. type: TH
+#: ../scripts/archpath.1:1
+#, no-wrap
+msgid "ARCHPATH"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:4
+msgid "archpath - output arch (tla/Bazaar) archive names, with support for branches"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:6
+msgid "B<archpath>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:9
+msgid "B<archpath> I<branch>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:12
+msgid "B<archpath> I<branch>B<-->I<version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:15
+msgid "B<archpath> is intended to be run in an arch (tla or Bazaar) working copy."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:20
+msgid ""
+"In its simplest usage, B<archpath> with no parameters outputs the package "
+"name (archive/category--branch--version) associated with the working copy."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:28
+msgid ""
+"If a parameter is given, it may either be a branch--version, in which case "
+"B<archpath> will output a corresponding package name in the current archive "
+"and category, or a plain branch name (without \\(oq--\"), in which case "
+"B<archpath> will output a corresponding package name in the current archive "
+"and category and with the same version as the current working copy."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:32
+msgid ""
+"This is useful for branching. For example, if you're using Bazaar and you "
+"want to create a branch for a new feature, you might use a command like "
+"this:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:37
+#, no-wrap
+msgid "CW<baz branch $(archpath) $(archpath new-feature)>\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:43
+msgid ""
+"Or if you want to tag your current code onto a \\(oqreleases\\(cq branch as "
+"version 1.0, you might use a command like this:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:48
+#, no-wrap
+msgid "CW<baz branch $(archpath) $(archpath releases--1.0)>\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:54
+msgid ""
+"That's much easier than using \\(oqbaz tree-version\\(cq to look up the "
+"package name and manually modifying the result."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:57
+msgid "B<archpath> was written by"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:59
+msgid "Colin Watson E<lt>cjwatson@debian.orgE<gt>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/archpath.1:63
+msgid ""
+"Like B<archpath>, this manual page is released under the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:41
+msgid "bts - developers' command line interface to the Debian Bug Tracking System"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:193
+msgid ""
+"B<bts> [I<options>] I<command> [I<args>] [B<#>I<comment>] [B<.>|B<,> "
+"I<command> [I<args>] [B<#>I<comment>]] ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:197
+msgid ""
+"This is a command line interface to the Debian Bug Tracking System (BTS), "
+"intended mainly for use by developers. It lets the BTS be manipulated using "
+"simple commands that can be run at the prompt or in a script, does various "
+"sanity checks on the input, and constructs and sends a mail to the BTS "
+"control address for you. A local cache of web pages and e-mails from the BTS "
+"may also be created and updated."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:205
+msgid ""
+"In general, the command line interface is the same as what you would write "
+"in a mail to control@bugs.debian.org, just prefixed with \"bts\". For "
+"example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:209
+#, no-wrap
+msgid ""
+" % bts severity 69042 normal\n"
+" % bts merge 69042 43233\n"
+" % bts retitle 69042 blah blah\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:213
+msgid ""
+"A few additional commands have been added for your convenience, and this "
+"program is less strict about what constitutes a valid bug number. For "
+"example, \"severity Bug#85942 normal\" is understood, as is \"severity "
+"#85942 normal\". (Of course, your shell may regard \"#\" as a comment "
+"character though, so you may need to quote it!)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:219
+msgid ""
+"Also, for your convenience, this program allows you to abbreviate commands "
+"to the shortest unique substring (similar to how cvs lets you abbreviate "
+"commands). So it understands things like \"bts cl 85942\"."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:223
+msgid ""
+"It is also possible to include a comment in the mail sent to the BTS. If "
+"your shell does not strip out the comment in a command like \"bts severity "
+"30321 normal #inflated severity\", then this program is smart enough to "
+"figure out where the comment is, and include it in the email. Note that "
+"most shells do strip out such comments before they get to the program, "
+"unless the comment is quoted. (Something like \"bts severity #85942 "
+"normal\" will not be treated as a comment!)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:231
+msgid ""
+"You can specify multiple commands by separating them with a single dot, "
+"rather like B<update-rc.d>; a single comma may also be used; all the "
+"commands will then be sent in a single mail. It is important the dot/comma "
+"is surrounded by whitespace so it is not mistaken for part of a command. "
+"For example (quoting where necessary so that B<bts> sees the comment):"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:237
+#, no-wrap
+msgid ""
+" % bts severity 95672 normal , merge 95672 95673 \\#they are the same!\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:239
+msgid ""
+"The abbreviation \"it\" may be used to refer to the last mentioned bug "
+"number, so you could write:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:242
+#, no-wrap
+msgid ""
+" % bts severity 95672 wishlist , retitle it \"bts: please add a --foo "
+"option\"\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:244
+msgid ""
+"Please use this program responsibly, and do take our users into "
+"consideration."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:249
+msgid ""
+"B<bts> examines the B<devscripts> configuration files as described below. "
+"Command line options override the configuration file settings, though."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:255
+msgid "B<-o>, B<--offline>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:257
+msgid ""
+"Make B<bts> use cached bugs for the B<show> and B<bugs> commands, if a cache "
+"is available for the requested data. See the B<cache> command, below for "
+"information on setting up a cache."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:261
+msgid "B<--online>, B<--no-offline>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:263
+msgid ""
+"Opposite of B<--offline>; overrides any configuration file directive to work "
+"offline."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:266
+msgid "B<-n>, B<--no-action>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:268
+msgid "Do not send emails but print them to standard output."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:270
+msgid "B<--cache>, B<--no-cache>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:272
+msgid ""
+"Should we attempt to cache new versions of BTS pages when performing "
+"B<show>/B<bugs> commands? Default is to cache."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:275
+msgid "B<--cache-mode=>{B<min>|B<mbox>|B<full>}"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:277
+msgid ""
+"When running a B<bts cache> command, should we only mirror the basic bug "
+"(B<min>), or should we also mirror the mbox version (B<mbox>), or should we "
+"mirror the whole thing, including the mbox and the boring attachments to the "
+"BTS bug pages and the acknowledgement emails (B<full>)? Default is B<min>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:283
+msgid "B<--cache-delay=>I<seconds>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:285
+msgid ""
+"Time in seconds to delay between each download, to avoid hammering the BTS "
+"web server. Default is 5 seconds."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:288
+msgid "B<--mbox>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:290
+msgid ""
+"Open a mail reader to read the mbox corresponding to a given bug number for "
+"B<show> and B<bugs> commands."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:293
+msgid "B<--mailreader=>I<READER>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:295
+msgid ""
+"Specify the command to read the mbox. Must contain a \"B<%s>\" string "
+"(unquoted!), which will be replaced by the name of the mbox file. The "
+"command will be split on white space and will not be passed to a shell. "
+"Default is 'B<mutt -f %s>'. (Also, B<%%> will be substituted by a single "
+"B<%> if this is needed.)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:301
+msgid "B<--cc-addr=>I<CC_EMAIL_ADDRESS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:303
+msgid ""
+"Send carbon copies to a list of users. I<CC_EMAIL_ADDRESS> should be a "
+"comma-separated list of email addresses. Multiple options add more CCs."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:306
+msgid "B<--use-default-cc>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:308
+msgid ""
+"Add the addresses specified in the configuration file option "
+"B<BTS_DEFAULT_CC> to the list specified using B<--cc-addr>. This is the "
+"default."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:312
+msgid "B<--no-use-default-cc>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:314
+msgid "Do not add addresses specified in B<BTS_DEFAULT_CC> to the carbon copy list."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:317 ../scripts/mass-bug.pl:112
+msgid "B<--sendmail=>I<SENDMAILCMD>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:319
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will not be passed to a shell. Default is F</usr/sbin/sendmail>. The "
+"B<-t> option will be automatically added if the command is "
+"F</usr/sbin/sendmail> or F</usr/sbin/exim*>. For other mailers, if they "
+"require a B<-t> option, this must be included in the I<SENDMAILCMD>, for "
+"example: B<--sendmail=\"/usr/sbin/mymailer -t\">."
+msgstr ""
+
+#. type: TP
+#: ../scripts/bts.pl:326 ../scripts/nmudiff.1:34
+#, no-wrap
+msgid "B<--mutt>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:328
+msgid ""
+"Use B<mutt> for sending of mails. Default is not to use B<mutt>, except for "
+"some commands."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:331
+msgid ""
+"Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in "
+"order to use B<mutt> to send emails."
+msgstr ""
+
+#. type: TP
+#: ../scripts/bts.pl:334 ../scripts/nmudiff.1:39
+#, no-wrap
+msgid "B<--no-mutt>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:336
+msgid "Don't use B<mutt> for sending of mails."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:338
+msgid "B<--soap-timeout=>I<SECONDS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:340
+msgid ""
+"Specify a timeout for SOAP calls as used by the B<select> and B<status> "
+"commands."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:342
+msgid "B<--smtp-host=>I<SMTPHOST>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:344
+msgid ""
+"Specify an SMTP host. If given, B<bts> will send mail by talking directly "
+"to this SMTP host rather than by invoking a B<sendmail> command."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:347
+msgid ""
+"The host name may be followed by a colon (\":\") and a port number in order "
+"to use a port other than the default. It may also begin with \"ssmtp://\" "
+"or \"smtps://\" to indicate that SMTPS should be used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:351
+msgid ""
+"If SMTPS not specified, B<bts> will still try to use STARTTLS if it's "
+"advertised by the SMTP host."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:354
+msgid ""
+"Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in "
+"order to use direct SMTP connections to send emails."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:357
+msgid ""
+"Note that when sending directly via an SMTP host, specifying addresses in "
+"B<--cc-addr> or B<BTS_DEFAULT_CC> that the SMTP host will not relay will "
+"cause the SMTP host to reject the entire mail."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:361
+msgid ""
+"Note also that the use of the B<reassign> command may, when either B<--mutt> "
+"or B<--force-interactive> mode is enabled, lead to the automatic addition of "
+"a Cc to I<$newpackage>@packages.debian.org. In these cases, the note above "
+"regarding relaying applies. The submission interface (port 587) on "
+"reportbug.debian.org does not support relaying and, as such, should not be "
+"used as an SMTP server for B<bts> under the circumstances described in this "
+"paragraph."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:368
+msgid "B<--smtp-username=>I<USERNAME>, B<--smtp-password=>I<PASSWORD>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:370
+msgid ""
+"Specify the credentials to use when connecting to the SMTP server specified "
+"by B<--smtp-host>. If the server does not require authentication then these "
+"options should not be used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:374
+msgid ""
+"If a username is specified but not a password, B<bts> will prompt for the "
+"password before sending the mail."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:377
+msgid "B<--smtp-helo=>I<HELO>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:379
+msgid ""
+"Specify the name to use in the I<HELO> command when connecting to the SMTP "
+"server; defaults to the contents of the file F</etc/mailname>, if it exists."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:383
+msgid ""
+"Note that some SMTP servers may reject the use of a I<HELO> which either "
+"does not resolve or does not appear to belong to the host using it."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:386
+msgid "B<--bts-server>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:388
+msgid "Use a debbugs server other than https://bugs.debian.org."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:390
+msgid "B<-f>, B<--force-refresh>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:392
+msgid ""
+"Download a bug report again, even if it does not appear to have changed "
+"since the last B<cache> command. Useful if a B<--cache-mode=full> is "
+"requested for the first time (otherwise unchanged bug reports will not be "
+"downloaded again, even if the boring bits have not been downloaded)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:398
+msgid "B<--no-force-refresh>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:400
+msgid "Suppress any configuration file B<--force-refresh> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:402
+msgid "B<--only-new>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:404
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:407
+msgid "B<--include-resolved>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:409
+msgid ""
+"When caching bug reports, include those that are marked as resolved. This "
+"is the default behaviour."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:412
+msgid "B<--no-include-resolved>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:414
+msgid ""
+"Reverse the behaviour of the previous option. That is, do not cache bugs "
+"that are marked as resolved."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:417
+msgid "B<--no-ack>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:419
+msgid ""
+"Suppress acknowledgment mails from the BTS. Note that this will only affect "
+"the copies of messages CCed to bugs, not those sent to the control bot."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:423
+msgid "B<--ack>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:425
+msgid "Do not suppress acknowledgement mails. This is the default behaviour."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:427 ../scripts/tagpending.pl:136
+msgid "B<-i>, B<--interactive>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:429
+msgid ""
+"Before sending an e-mail to the control bot, display the content and allow "
+"it to be edited, or the sending cancelled."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:432
+msgid "B<--force-interactive>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:434
+msgid ""
+"Similar to B<--interactive>, with the exception that an editor is spawned "
+"before prompting for confirmation of the message to be sent."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:437
+msgid "B<--no-interactive>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:439
+msgid "Send control e-mails without confirmation. This is the default behaviour."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:441 ../scripts/build-rdeps.pl:105 ../scripts/dget.pl:635
+msgid "B<-q>, B<--quiet>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:443
+msgid ""
+"When running B<bts cache>, only display information about newly cached "
+"pages, not messages saying already cached. If this option is specified "
+"twice, only output error messages (to stderr)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/bts.pl:447 ../scripts/cvs-debrelease.1:57
+#: ../scripts/cvs-debuild.1:38 ../scripts/debc.1:95 ../scripts/debchange.1:390
+#: ../scripts/debclean.1:80 ../scripts/debdiff.1:166 ../scripts/debi.1:102
+#: ../scripts/debrelease.1:95 ../scripts/debsign.1:95 ../scripts/debuild.1:258
+#: ../scripts/dpkg-depcheck.1:92 ../scripts/dscverify.1:24
+#: ../scripts/grep-excuses.1:15 ../scripts/mass-bug.pl:121
+#: ../scripts/nmudiff.1:72 ../scripts/rmadison.pl:346 ../scripts/salsa.pl:482
+#: ../scripts/uscan.pl:1558 ../scripts/uupdate.1:56 ../scripts/who-uploads.1:41
+#, no-wrap
+msgid "B<--no-conf>, B<--noconf>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/bts.pl:449 ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:99
+#: ../scripts/debchange.1:394 ../scripts/debclean.1:84 ../scripts/debdiff.1:170
+#: ../scripts/debi.1:106 ../scripts/debrelease.1:99 ../scripts/debsign.1:99
+#: ../scripts/debuild.1:262 ../scripts/dpkg-depcheck.1:96
+#: ../scripts/dscverify.1:28 ../scripts/grep-excuses.1:19
+#: ../scripts/mass-bug.pl:123 ../scripts/nmudiff.1:76 ../scripts/uupdate.1:60
+#: ../scripts/who-uploads.1:45
+msgid ""
+"Do not read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/bts.pl:813 ../scripts/chdist.pl:55 ../scripts/salsa.pl:59
+msgid "COMMANDS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:815
+msgid ""
+"For full details about the commands, see the BTS documentation. "
+"L<https://www.debian.org/Bugs/server-control>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:820
+msgid ""
+"B<show> [I<options>] [I<bug number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:822
+msgid ""
+"B<show> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:824
+msgid ""
+"B<show> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] [I<opt>B<=>I<val> "
+"...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:826
+msgid "B<show> [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:828
+msgid "This is a synonym for B<bts bugs>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:836
+msgid ""
+"B<bugs> [I<options>] [I<bug_number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:838
+msgid ""
+"B<bugs> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:840
+msgid ""
+"B<bugs> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] [I<opt>B<=>I<val> "
+"...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:842
+msgid "B<bugs> [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:844
+msgid ""
+"Display the page listing the requested bugs in a web browser using "
+"sensible-browser(1)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:847
+msgid ""
+"Options may be specified after the B<bugs> command in addition to or instead "
+"of options at the start of the command line: recognised options at this "
+"point are: B<-o>/B<--offline>/B<--online>, B<-m>/B<--mbox>, B<--mailreader> "
+"and B<-->[B<no->]B<cache>. These are described earlier in this manpage. If "
+"either the B<-o> or B<--offline> option is used, or there is already an "
+"up-to-date copy in the local cache, the cached version will be used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:854
+msgid "The meanings of the possible arguments are as follows:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:858
+msgid "(none)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:860
+msgid ""
+"If nothing is specified, B<bts bugs> will display your bugs, assuming that "
+"either B<DEBEMAIL> or B<EMAIL> (examined in that order) is set to the "
+"appropriate email address."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:864
+msgid "I<bug_number>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:866
+msgid "Display bug number I<bug_number>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:868
+msgid "I<package>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:870
+msgid "Display the bugs for the package I<package>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:872
+msgid "B<src:>I<package>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:874
+msgid "Display the bugs for the source package I<package>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:876
+msgid "I<maintainer>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:878
+msgid "Display the bugs for the maintainer email address I<maintainer>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:880
+msgid "B<from:>I<submitter>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:882
+msgid "Display the bugs for the submitter email address I<submitter>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:884
+msgid "B<tag:>I<tag>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:886
+msgid "Display the bugs which are tagged with I<tag>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:888
+msgid "B<usertag:>I<tag>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:890
+msgid ""
+"Display the bugs which are tagged with usertag I<tag>. See the BTS "
+"documentation for more information on usertags. This will require the use "
+"of a B<users=>I<email> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:894
+msgid "B<:>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:896
+msgid ""
+"Details of the bug tracking system itself, along with a bug-request page "
+"with more options than this script, can be found on "
+"https://bugs.debian.org/. This page itself will be opened if the command "
+"'bts bugs :' is used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:901
+msgid "B<release-critical>, B<RC>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:903
+msgid ""
+"Display the front page of the release-critical pages on the BTS. This is a "
+"synonym for https://bugs.debian.org/release-critical/index.html. It is also "
+"possible to say release-critical/debian/main.html and the like. RC is a "
+"synonym for release-critical/other/all.html."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:910
+msgid ""
+"After the argument specifying what to display, you can optionally specify "
+"options to use to format the page or change what it displayed. These are "
+"passed to the BTS in the URL downloaded. For example, pass dist=stable to "
+"see bugs affecting the stable version of a package, version=1.0 to see bugs "
+"affecting that version of a package, or reverse=yes to display newest "
+"messages first in a bug log."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:917
+msgid ""
+"If caching has been enabled (that is, B<--no-cache> has not been used, and "
+"B<BTS_CACHE> has not been set to B<no>), then any page requested by B<bts "
+"show> will automatically be cached, and be available offline thereafter. "
+"Pages which are automatically cached in this way will be deleted on "
+"subsequent \"B<bts show>|B<bugs>|B<cache>\" invocations if they have not "
+"been accessed in 30 days. Warning: on a filesystem mounted with the "
+"\"noatime\" option, running \"B<bts show>|B<bugs>\" does not update the "
+"cache files' access times; a cached bug will then be subject to "
+"auto-cleaning 30 days after its initial download, even if it has been "
+"accessed in the meantime."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:928
+msgid ""
+"Any other B<bts> commands following this on the command line will be "
+"executed after the browser has been exited."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:931
+msgid ""
+"The desired browser can be specified and configured by setting the "
+"B<BROWSER> environment variable. The conventions follow those defined by "
+"Eric Raymond at http://www.catb.org/~esr/BROWSER/; we here reproduce the "
+"relevant part."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:936
+msgid ""
+"The value of B<BROWSER> may consist of a colon-separated series of browser "
+"command parts. These should be tried in order until one succeeds. Each "
+"command part may optionally contain the string B<%s>; if it does, the URL to "
+"be viewed is substituted there. If a command part does not contain B<%s>, "
+"the browser is to be launched as if the URL had been supplied as its first "
+"argument. The string B<%%> must be substituted as a single %."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:944
+msgid ""
+"Rationale: We need to be able to specify multiple browser commands so "
+"programs obeying this convention can do the right thing in either X or "
+"console environments, trying X first. Specifying multiple commands may also "
+"be useful for people who share files like F<.profile> across multiple "
+"systems. We need B<%s> because some popular browsers have remote-invocation "
+"syntax that requires it. Unless B<%%> reduces to %, it won't be possible to "
+"have a literal B<%s> in the string."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:952
+msgid "For example, on most Linux systems a good thing to do would be:"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:954
+msgid "BROWSER='mozilla -raise -remote \"openURL(%s,new-window)\":links'"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1031
+msgid "B<select> [I<key>B<:>I<value> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1033
+msgid ""
+"Uses the SOAP interface to output a list of bugs which match the given "
+"selection requirements."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1036
+msgid "The following keys are allowed, and may be given multiple times."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1040 ../scripts/bts.pl:1915
+#: ../scripts/who-permits-upload.pl:92
+msgid "B<package>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1042 ../scripts/bts.pl:1917
+msgid "Binary package name."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1044 ../scripts/bts.pl:1919
+msgid "B<source>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1046 ../scripts/bts.pl:1921
+msgid "Source package name."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1048
+msgid "B<maintainer>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1050
+msgid "E-mail address of the maintainer."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1052 ../scripts/bts.pl:1899
+msgid "B<submitter>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1054 ../scripts/bts.pl:1901
+msgid "E-mail address of the submitter."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1056 ../scripts/bts.pl:1927
+msgid "B<severity>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1058 ../scripts/bts.pl:1929
+msgid "Bug severity."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1060
+msgid "B<status>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1062
+msgid "Status of the bug. One of B<open>, B<done>, or B<forwarded>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1064 ../scripts/bts.pl:1923
+msgid "B<tag>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1066
+msgid ""
+"Tags applied to the bug. If B<users> is specified, may include usertags in "
+"addition to the standard tags."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1069 ../scripts/bts.pl:1931
+msgid "B<owner>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1071 ../scripts/bts.pl:1933
+msgid "Bug's owner."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1073
+msgid "B<correspondent>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1075
+msgid "Address of someone who sent mail to the log."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1077 ../scripts/bts.pl:1935
+msgid "B<affects>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1079
+msgid "Bugs which affect this package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1081
+msgid "B<bugs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1083
+msgid "List of bugs to search within."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1085
+msgid "B<users>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1087
+msgid "Users to use when looking up usertags."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1089 ../scripts/bts.pl:1939
+msgid "B<archive>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1091 ../scripts/bts.pl:1941
+msgid ""
+"Whether to search archived bugs or normal bugs; defaults to B<0> (i.e. only "
+"search normal bugs). As a special case, if archive is B<both>, both archived "
+"and unarchived bugs are returned."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1097
+msgid ""
+"For example, to select the set of bugs submitted by "
+"jrandomdeveloper@example.com and tagged B<wontfix>, one would use"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1100
+msgid "bts select submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1102 ../scripts/bts.pl:1953
+msgid ""
+"If a key is used multiple times then the set of bugs selected includes those "
+"matching any of the supplied values; for example"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1105
+msgid "bts select package:foo severity:wishlist severity:minor"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1107
+msgid "returns all bugs of package foo with either wishlist or minor severity."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1120
+msgid ""
+"B<status> [I<bug> | B<file:>I<file> | B<fields:>I<field>[B<,>I<field> ...] | "
+"B<verbose>] ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1122
+msgid ""
+"Uses the SOAP interface to output status information for the given bugs (or "
+"as read from the listed files -- use B<-> to indicate STDIN)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1125
+msgid "By default, all populated fields for a bug are displayed."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1127
+msgid "If B<verbose> is given, empty fields will also be displayed."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1129
+msgid ""
+"If B<fields> is given, only those fields will be displayed. No validity "
+"checking is performed on any specified fields."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1201
+msgid "B<clone> I<bug> I<new_ID> [I<new_ID> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1203
+msgid ""
+"The B<clone> control command allows you to duplicate a I<bug> report. It is "
+"useful in the case where a single report actually indicates that multiple "
+"distinct bugs have occurred. \"New IDs\" are negative numbers, separated by "
+"spaces, which may be used in subsequent control commands to refer to the "
+"newly duplicated bugs. A new report is generated for each new ID."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1253
+msgid "B<done> I<bug> [I<version>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1255
+msgid ""
+"Mark a I<bug> as Done. This forces interactive mode since done messages "
+"should include an explanation why the bug is being closed. You should "
+"specify which I<version> of the package closed the bug, if possible."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1273
+msgid "B<reopen> I<bug> [I<submitter>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1275
+msgid "Reopen a I<bug>, with optional I<submitter>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1286
+msgid "B<archive> I<bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1288
+msgid ""
+"Archive a I<bug> that has previously been archived but is currently not. "
+"The I<bug> must fulfill all of the requirements for archiving with the "
+"exception of those that are time-based."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1300
+msgid "B<unarchive> I<bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1302
+msgid "Unarchive a I<bug> that is currently archived."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1312
+msgid "B<retitle> I<bug> I<title>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1314
+msgid "Change the I<title> of the I<bug>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1327
+msgid "B<summary> I<bug> [I<messagenum>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1329
+msgid "Select a message number that should be used as the summary of a I<bug>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1332
+msgid "If no message number is given, the summary is cleared."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1343
+msgid "B<submitter> I<bug> [I<bug> ...] I<submitter-email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1345
+msgid ""
+"Change the submitter address of a I<bug> or a number of bugs, with B<!> "
+"meaning `use the address on the current email as the new submitter address'."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1363
+msgid "B<reassign> I<bug> [I<bug> ...] I<package> [I<version>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1365
+msgid ""
+"Reassign a I<bug> or a number of bugs to a different I<package>. The "
+"I<version> field is optional; see the explanation at "
+"L<https://www.debian.org/Bugs/server-control>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1397
+msgid "B<found> I<bug> [I<version>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1399
+msgid ""
+"Indicate that a I<bug> was found to exist in a particular package version. "
+"Without I<version>, the list of fixed versions is cleared and the bug is "
+"reopened."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1417
+msgid "B<notfound> I<bug> I<version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1419
+msgid ""
+"Remove the record that I<bug> was encountered in the given version of the "
+"package to which it is assigned."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1432
+msgid "B<fixed> I<bug> I<version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1434
+msgid ""
+"Indicate that a I<bug> was fixed in a particular package version, without "
+"affecting the I<bug>'s open/closed status."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1446
+msgid "B<notfixed> I<bug> I<version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1448
+msgid ""
+"Remove the record that a I<bug> was fixed in the given version of the "
+"package to which it is assigned."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1451
+msgid ""
+"This is equivalent to the sequence of commands \"B<found> I<bug> "
+"I<version>\", \"B<notfound> I<bug> I<version>\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1464
+msgid "B<block> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1466
+msgid "Note that a I<bug> is blocked from being fixed by a set of other bugs."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1486
+msgid "B<unblock> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1488
+msgid ""
+"Note that a I<bug> is no longer blocked from being fixed by a set of other "
+"bugs."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1508
+msgid "B<merge> I<bug> I<bug> [I<bug> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1510
+msgid "Merge a set of bugs together."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1527
+msgid "B<forcemerge> I<bug> I<bug> [I<bug> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1529
+msgid ""
+"Forcibly merge a set of bugs together. The first I<bug> listed is the master "
+"bug, and its settings (those which must be equal in a normal B<merge>) are "
+"assigned to the bugs listed next."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1548
+msgid "B<unmerge> I<bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1550
+msgid "Unmerge a I<bug>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1560
+msgid "B<tag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1562
+msgid "B<tags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1564
+msgid ""
+"Set or unset a I<tag> on a I<bug>. The tag may either be the exact tag name "
+"or it may be abbreviated to any unique tag substring. (So using B<fixed> "
+"will set the tag B<fixed>, not B<fixed-upstream>, for example, but B<fix> "
+"would not be acceptable.) Multiple tags may be specified as well. The two "
+"commands (tag and tags) are identical. At least one tag must be specified, "
+"unless the B<=> flag is used, where the command"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:1571
+#, no-wrap
+msgid ""
+" bts tags <bug> =\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1573
+msgid "will remove all tags from the specified I<bug>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1575
+msgid ""
+"Adding/removing the B<security> tag will add \"team\\@security.debian.org\" "
+"to the Cc list of the control email."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1578
+msgid ""
+"The list of valid tags and their significance is available at "
+"L<https://www.debian.org/Bugs/Developer#tags>. The current valid tags are:"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1582
+msgid ""
+"patch, wontfix, moreinfo, unreproducible, fixed, help, security, upstream, "
+"pending, d-i, confirmed, ipv6, lfs, fixed-upstream, l10n, newcomer, a11y, "
+"ftbfs"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1586
+msgid ""
+"There is also a tag for each release of Debian since \"potato\". Note that "
+"this list may be out of date, see the website for the most up to date "
+"source."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1671
+msgid "B<affects> I<bug> [B<+>|B<->|B<=>] I<package> [I<package> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1673
+msgid ""
+"Indicates that a I<bug> affects a I<package> other than that against which "
+"it is filed, causing the I<bug> to be listed by default in the I<package> "
+"list of the other I<package>. This should generally be used where the "
+"I<bug> is severe enough to cause multiple reports from users to be assigned "
+"to the wrong package. At least one I<package> must be specified, unless the "
+"B<=> flag is used, where the command"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:1679
+#, no-wrap
+msgid ""
+" bts affects <bug> =\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1681
+msgid "will remove all indications that I<bug> affects other packages."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1715
+msgid "B<user> I<email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1717
+msgid "Specify a user I<email> address before using the B<usertags> command."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1734
+msgid "B<usertag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1736
+msgid "B<usertags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1738
+msgid ""
+"Set or unset a user tag on a I<bug>. The I<tag> must be the exact tag name "
+"wanted; there are no defaults or checking of tag names. Multiple tags may "
+"be specified as well. The two commands (B<usertag> and B<usertags>) are "
+"identical. At least one I<tag> must be specified, unless the B<=> flag is "
+"used, where the command"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:1744
+#, no-wrap
+msgid ""
+" bts usertags <bug> =\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1746
+msgid "will remove all user tags from the specified I<bug>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1776
+msgid "B<claim> I<bug> [I<claim>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1778
+msgid ""
+"Record that you have claimed a I<bug> (e.g. for a bug squashing party). "
+"I<claim> should be a unique token allowing the bugs you have claimed to be "
+"identified; an e-mail address is often used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1782 ../scripts/bts.pl:1802
+msgid ""
+"If no I<claim> is specified, the environment variable B<DEBEMAIL> or "
+"B<EMAIL> (checked in that order) is used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1798
+msgid "B<unclaim> I<bug> [I<claim>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1800
+msgid "Remove the record that you have claimed a bug."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1818
+msgid "B<severity> I<bug> I<severity>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1820
+msgid ""
+"Change the I<severity> of a I<bug>. Available severities are: B<wishlist>, "
+"B<minor>, B<normal>, B<important>, B<serious>, B<grave>, B<critical>. The "
+"severity may be abbreviated to any unique substring."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1840
+msgid "B<forwarded> I<bug> I<address>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1842
+msgid ""
+"Mark the I<bug> as forwarded to the given I<address> (usually an email "
+"address or a URL for an upstream bug tracker)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1862
+msgid "B<notforwarded> I<bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1864
+msgid "Mark a I<bug> as not forwarded."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1874
+msgid "B<package> [I<package> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1876
+msgid ""
+"The following commands will only apply to bugs against the listed "
+"I<package>s; this acts as a safety mechanism for the BTS. If no packages "
+"are listed, this check is turned off again."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1890
+msgid "B<limit> [I<key>[B<:>I<value>]] ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1892
+msgid ""
+"The following commands will only apply to bugs which meet the specified "
+"criterion; this acts as a safety mechanism for the BTS. If no I<value>s are "
+"listed, the limits for that I<key> are turned off again. If no I<key>s are "
+"specified, all limits are reset."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1903
+msgid "B<date>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1905
+msgid "Date the bug was submitted."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1907
+msgid "B<subject>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1909
+msgid "Subject of the bug."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1911
+msgid "B<msgid>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1913
+msgid "Message-id of the initial bug report."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1925
+msgid "Tags applied to the bug."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1937
+msgid "Bugs affecting this package."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1947
+msgid ""
+"For example, to limit the set of bugs affected by the subsequent control "
+"commands to those submitted by jrandomdeveloper@example.com and tagged "
+"B<wontfix>, one would use"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1951
+msgid "bts limit submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1956
+msgid "bts limit package:foo severity:wishlist severity:minor"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1958
+msgid ""
+"only applies the subsequent control commands to bugs of package foo with "
+"either B<wishlist> or B<minor> severity."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2033
+msgid "B<owner> I<bug> I<owner-email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2035
+msgid ""
+"Change the \"owner\" address of a I<bug>, with B<!> meaning `use the address "
+"on the current email as the new owner address'."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2038
+msgid "The owner of a bug accepts responsibility for dealing with it."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2050
+msgid "B<noowner> I<bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2052
+msgid "Mark a bug as having no \"owner\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2062
+msgid "B<subscribe> I<bug> [I<email>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2064
+msgid ""
+"Subscribe the given I<email> address to the specified I<bug> report. If no "
+"email address is specified, the environment variable B<DEBEMAIL> or B<EMAIL> "
+"(in that order) is used. If those are not set, or B<!> is given as email "
+"address, your default address will be used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2069
+msgid ""
+"After executing this command, you will be sent a subscription confirmation "
+"to which you have to reply. When subscribed to a bug report, you receive "
+"all relevant emails and notifications. Use the unsubscribe command to "
+"unsubscribe."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2092
+msgid "B<unsubscribe> I<bug> [I<email>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2094
+msgid ""
+"Unsubscribe the given email address from the specified bug report. As with "
+"subscribe above, if no email address is specified, the environment variables "
+"B<DEBEMAIL> or B<EMAIL> (in that order) is used. If those are not set, or "
+"B<!> is given as email address, your default address will be used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2099
+msgid ""
+"After executing this command, you will be sent an unsubscription "
+"confirmation to which you have to reply. Use the B<subscribe> command to, "
+"well, subscribe."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2122
+msgid "B<reportspam> I<bug> ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2124
+msgid ""
+"The B<reportspam> command allows you to report a I<bug> report as containing "
+"spam. It saves one from having to go to the bug web page to do so."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2161
+msgid "B<spamreport> I<bug> ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2163
+msgid "B<spamreport> is a synonym for B<reportspam>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2171
+msgid ""
+"B<cache> [I<options>] [I<maint_email> | I<pkg> | B<src:>I<pkg> | "
+"B<from:>I<submitter>]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2173
+msgid ""
+"B<cache> [I<options>] [B<release-critical> | B<release-critical/>... | "
+"B<RC>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2175
+msgid ""
+"Generate or update a cache of bug reports for the given email address or "
+"package. By default it downloads all bugs belonging to the email address in "
+"the B<DEBEMAIL> environment variable (or the B<EMAIL> environment variable "
+"if B<DEBEMAIL> is unset). This command may be repeated to cache bugs "
+"belonging to several people or packages. If multiple packages or addresses "
+"are supplied, bugs belonging to any of the arguments will be cached; those "
+"belonging to more than one of the arguments will only be downloaded "
+"once. The cached bugs are stored in F<$XDG_CACHE_HOME/devscripts/bts/> or, "
+"if B<XDG_CACHE_HOME> is not set, in F<~/.cache/devscripts/bts/>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2186
+msgid "You can use the cached bugs with the B<-o> switch. For example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:2188
+#, no-wrap
+msgid ""
+" bts -o bugs\n"
+" bts -o show 12345\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2191
+msgid ""
+"Also, B<bts> will update the files in it in a piecemeal fashion as it "
+"downloads information from the BTS using the B<show> command. You might thus "
+"set up the cache, and update the whole thing once a week, while letting the "
+"automatic cache updates update the bugs you frequently refer to during the "
+"week."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2197
+msgid ""
+"Some options affect the behaviour of the B<cache> command. The first is the "
+"setting of B<--cache-mode>, which controls how much B<bts> downloads of the "
+"referenced links from the bug page, including boring bits such as the "
+"acknowledgement emails, emails to the control bot, and the mbox version of "
+"the bug report. It can take three values: B<min> (the minimum), B<mbox> "
+"(download the minimum plus the mbox version of the bug report) or B<full> "
+"(the whole works). The second is B<--force-refresh> or B<-f>, which forces "
+"the download, even if the cached bug report is up-to-date. The "
+"B<--include-resolved> option indicates whether bug reports marked as "
+"resolved should be downloaded during caching."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2208
+msgid ""
+"Each of these is configurable from the configuration file, as described "
+"below. They may also be specified after the B<cache> command as well as at "
+"the start of the command line."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2212
+msgid ""
+"Finally, B<-q> or B<--quiet> will suppress messages about caches being "
+"up-to-date, and giving the option twice will suppress all cache messages "
+"(except for error messages)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2216
+msgid ""
+"Beware of caching RC, though: it will take a LONG time! (With 1000+ RC bugs "
+"and a delay of 5 seconds between bugs, you're looking at a minimum of 1.5 "
+"hours, and probably significantly more than that.)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2351
+msgid "B<cleancache> I<package> | B<src:>I<package> | I<maintainer>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2353
+msgid ""
+"B<cleancache from:>I<submitter> | B<tag:>I<tag> | B<usertag:>I<tag> | "
+"I<number> | B<ALL>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2355
+msgid ""
+"Clean the cache for the specified I<package>, I<maintainer>, etc., as "
+"described above for the B<bugs> command, or clean the entire cache if B<ALL> "
+"is specified. This is useful if you are going to have permanent network "
+"access or if the database has become corrupted for some reason. Note that "
+"for safety, this command does not default to the value of B<DEBEMAIL> or "
+"B<EMAIL>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2403
+msgid "B<listcachedbugs> [I<number>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2405
+msgid ""
+"List cached bug ids (intended to support bash completion). The optional "
+"number argument restricts the list to those bug ids that start with that "
+"number."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2437
+msgid "B<version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2439
+msgid "Display version and copyright information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2454
+msgid "B<help>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2456
+msgid ""
+"Display a short summary of commands, suspiciously similar to parts of this "
+"man page."
+msgstr ""
+
+#. type: SH
+#: ../scripts/bts.pl:4190 ../scripts/debuild.1:88 ../scripts/diff2patches.1:40
+#: ../scripts/pts-subscribe.1:34
+#, no-wrap
+msgid "ENVIRONMENT VARIABLES"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4194
+msgid "B<DEBEMAIL>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4196
+msgid ""
+"If this is set, the From: line in the email will be set to use this email "
+"address instead of your normal email address (as would be determined by "
+"B<mail>)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4200
+msgid "B<DEBFULLNAME>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4202
+msgid ""
+"If B<DEBEMAIL> is set, B<DEBFULLNAME> is examined to determine the full name "
+"to use; if this is not set, B<bts> attempts to determine a name from your "
+"F<passwd> entry."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4206
+msgid "B<BROWSER>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4208
+msgid ""
+"If set, it specifies the browser to use for the B<show> and B<bugs> "
+"options. See the description above."
+msgstr ""
+
+#. type: SH
+#: ../scripts/bts.pl:4213 ../scripts/debc.1:102 ../scripts/debchange.1:405
+#: ../scripts/debcheckout.pl:180 ../scripts/debclean.1:93
+#: ../scripts/debcommit.pl:104 ../scripts/debdiff.1:188 ../scripts/debi.1:109
+#: ../scripts/debrelease.1:105 ../scripts/debrsign.1:57
+#: ../scripts/debsign.1:105 ../scripts/debuild.1:327 ../scripts/dget.pl:690
+#: ../scripts/dpkg-depcheck.1:102 ../scripts/dscverify.1:43
+#: ../scripts/grep-excuses.1:46 ../scripts/mass-bug.pl:141
+#: ../scripts/nmudiff.1:92 ../scripts/plotchangelog.1:106
+#: ../scripts/pts-subscribe.1:42 ../scripts/rmadison.pl:355
+#: ../scripts/uupdate.1:107 ../scripts/who-uploads.1:51
+#, no-wrap
+msgid "CONFIGURATION VARIABLES"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4215 ../scripts/debcommit.pl:106
+#: ../scripts/mass-bug.pl:143
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4223
+msgid "B<BTS_OFFLINE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4225
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--offline> command "
+"line parameter being used. Only has an effect on the B<show> and B<bugs> "
+"commands. The default is B<no>. See the description of the B<show> command "
+"above for more information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4230
+msgid "B<BTS_CACHE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4232
+msgid ""
+"If this is set to B<no>, then it is the same as the B<--no-cache> command "
+"line parameter being used. Only has an effect on the B<show> and B<bug> "
+"commands. The default is B<yes>. Again, see the B<show> command above for "
+"more information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4237
+msgid "B<BTS_CACHE_MODE=>{B<min>,B<mbox>,B<full>}"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4239
+msgid ""
+"How much of the BTS should we mirror when we are asked to cache something? "
+"Just the minimum, or also the mbox or the whole thing? The default is "
+"B<min>, and it has the same meaning as the B<--cache-mode> command line "
+"parameter. Only has an effect on the cache. See the B<cache> command for "
+"more information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4245
+msgid "B<BTS_FORCE_REFRESH>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4247
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--force-refresh> "
+"command line parameter being used. Only has an effect on the B<cache> "
+"command. The default is B<no>. See the B<cache> command for more "
+"information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4252
+msgid "B<BTS_MAIL_READER>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4254
+msgid ""
+"If this is set, specifies a mail reader to use instead of B<mutt>. Same as "
+"the B<--mailreader> command line option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/bts.pl:4257 ../scripts/mass-bug.pl:151 ../scripts/nmudiff.1:117
+#, no-wrap
+msgid "B<BTS_SENDMAIL_COMMAND>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4259 ../scripts/mass-bug.pl:153
+msgid ""
+"If this is set, specifies a B<sendmail> command to use instead of "
+"F</usr/sbin/sendmail>. Same as the B<--sendmail> command line option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4262
+msgid "B<BTS_ONLY_NEW>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4264
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have. The default is B<no>. Same as the B<--only-new> command line "
+"option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4268
+msgid "B<BTS_SMTP_HOST>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4270
+msgid ""
+"If this is set, specifies an SMTP host to use for sending mail rather than "
+"using the B<sendmail> command. Same as the B<--smtp-host> command line "
+"option."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4274
+msgid ""
+"Note that this option takes priority over B<BTS_SENDMAIL_COMMAND> if both "
+"are set, unless the B<--sendmail> option is used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4277
+msgid "B<BTS_SMTP_AUTH_USERNAME>, B<BTS_SMTP_AUTH_PASSWORD>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4279
+msgid ""
+"If these options are set, then it is the same as the B<--smtp-username> and "
+"B<--smtp-password> options being used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4282
+msgid "B<BTS_SMTP_HELO>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4284
+msgid "Same as the B<--smtp-helo> command line option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4286
+msgid "B<BTS_INCLUDE_RESOLVED>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4288
+msgid ""
+"If this is set to B<no>, then it is the same as the B<--no-include-resolved> "
+"command line parameter being used. Only has an effect on the B<cache> "
+"command. The default is B<yes>. See the B<cache> command for more "
+"information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4293
+msgid "B<BTS_SUPPRESS_ACKS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4295
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--no-ack> command "
+"line parameter being used. The default is B<no>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4298
+msgid "B<BTS_INTERACTIVE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4300
+msgid ""
+"If this is set to B<yes> or B<force>, then it is the same as the "
+"B<--interactive> or B<--force-interactive> command line parameter being "
+"used. The default is B<no>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4304
+msgid "B<BTS_DEFAULT_CC>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4306
+msgid ""
+"Specify a list of e-mail addresses to which a carbon copy of the generated "
+"e-mail to the control bot should automatically be sent."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4309
+msgid "B<BTS_SERVER>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4311
+msgid ""
+"Specify the name of a debbugs server which should be used instead of "
+"https://bugs.debian.org."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4318
+msgid ""
+"Please see L<https://www.debian.org/Bugs/server-control> for more details on "
+"how to control the BTS using emails and L<https://www.debian.org/Bugs/> for "
+"more information about the BTS."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4322
+msgid "querybts(1), reportbug(1), pts-subscribe(1), devscripts.conf(5)"
+msgstr ""
+
+#. type: =head1
+#: ../scripts/bts.pl:4324 ../scripts/chdist.pl:131 ../scripts/debsnap.1:146
+#: ../scripts/mass-bug.pl:559 ../scripts/tagpending.pl:425
+#, no-wrap
+msgid "COPYRIGHT"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4326
+msgid ""
+"This program is Copyright (C) 2001-2003 by Joey Hess <joeyh@debian.org>. "
+"Many modifications have been made, Copyright (C) 2002-2005 Julian Gilbey "
+"<jdg@debian.org> and Copyright (C) 2007 Josh Triplett "
+"<josh@freedesktop.org>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4331 ../scripts/chdist.pl:136 ../scripts/mass-bug.pl:563
+msgid ""
+"It is licensed under the terms of the GPL, either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:24
+msgid ""
+"build-rdeps - find packages that depend on a specific package to build "
+"(reverse build depends)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:28
+msgid "B<build-rdeps> I<package>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:32
+msgid ""
+"B<build-rdeps> searches for all packages that build-depend on the specified "
+"package."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:34
+msgid ""
+"The default behaviour is to just `grep` for the given dependency in the "
+"Build-Depends field of apt's Sources files."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:37
+msgid ""
+"If the package dose-extra >= 4.0 is installed, then a more complete reverse "
+"build dependency computation is carried out. In particular, with that "
+"package installed, build-rdeps will find transitive reverse dependencies, "
+"respect architecture and build profile restrictions, take Provides "
+"relationships, Conflicts, Pre-Depends, Build-Depends-Arch and versioned "
+"dependencies into account and correctly resolve multiarch relationships for "
+"crossbuild reverse dependency resolution. (This tends to be a slow process "
+"due to the complexity of the package interdependencies.)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:50
+msgid "B<-u>, B<--update>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:52
+msgid "Run apt-get update before searching for build-depends."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:54
+msgid "B<-s>, B<--sudo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:56
+msgid "Use sudo when running apt-get update. Has no effect if -u is omitted."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:58
+msgid "B<--distribution>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:60
+msgid "Select another distribution, which is searched for build-depends."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:62
+msgid "B<--only-main>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:64
+msgid "Ignore contrib and non-free"
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:66
+msgid "B<--exclude-component>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:68
+msgid "Ignore the given component (e.g. main, contrib, non-free)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:70
+msgid "B<--origin>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:72
+msgid "Restrict the search to only the specified origin (such as \"Debian\")."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:74
+msgid "B<-m>, B<--print-maintainer>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:76
+msgid "Print the value of the maintainer field for each package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:78
+msgid "B<--host-arch>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:80
+msgid ""
+"Explicitly set the host architecture. The default is the value of "
+"`dpkg-architecture -qDEB_HOST_ARCH`. This option only works if dose-extra >= "
+"4.0 is installed."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:84
+msgid "B<--build-arch>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:86
+msgid ""
+"Explicitly set the build architecture. The default is the value of "
+"`dpkg-architecture -qDEB_BUILD_ARCH`. This option only works if dose-extra "
+">= 4.0 is installed."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:90
+msgid "B<--no-arch-all>, B<--no-arch-any>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:92
+msgid ""
+"Ignore Build-Depends-Indep or Build-Depends-Arch while looking for reverse "
+"dependencies."
+msgstr ""
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:95 ../scripts/nmudiff.1:29
+#, no-wrap
+msgid "B<--old>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:97
+msgid ""
+"Force the old simple behaviour without dose-ceve support even if dose-extra "
+">= 4.0 is installed. (This tends to be faster.)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:100
+msgid ""
+"Notice, that the old behaviour only finds direct dependencies, ignores "
+"virtual dependencies, does not find transitive dependencies and does not "
+"take version relationships, architecture restrictions, build profiles or "
+"multiarch relationships into account."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:107
+msgid ""
+"Don't print meta information (header, counter). Making it easier to use in "
+"scripts."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:110
+msgid "B<-d>, B<--debug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:112
+msgid "Run the debug mode"
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:114 ../scripts/cowpoke.1:131
+#: ../scripts/debclean.1:87 ../scripts/diff2patches.1:22
+#: ../scripts/grep-excuses.1:23 ../scripts/mass-bug.pl:126
+#: ../scripts/nmudiff.1:86 ../scripts/plotchangelog.1:92
+#: ../scripts/uscan.pl:1771
+#, no-wrap
+msgid "B<--help>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:116
+msgid "Show the usage information."
+msgstr ""
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:118 ../scripts/chdist.pl:49
+#: ../scripts/cowpoke.1:135 ../scripts/debchange.1:402 ../scripts/debclean.1:90
+#: ../scripts/debrelease.1:102 ../scripts/deb-why-removed.pl:229
+#: ../scripts/debsign.1:102 ../scripts/debsnap.1:77
+#: ../scripts/dep3changelog.1:19 ../scripts/diff2patches.1:25
+#: ../scripts/dscverify.1:40 ../scripts/grep-excuses.1:26
+#: ../scripts/mass-bug.pl:130 ../scripts/nmudiff.1:89
+#: ../scripts/plotchangelog.1:95 ../scripts/pts-subscribe.1:31
+#: ../scripts/rmadison.pl:342 ../scripts/uscan.pl:1775 ../scripts/uupdate.1:104
+#: ../scripts/who-uploads.1:48
+#, no-wrap
+msgid "B<--version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:120
+msgid "Show the version information."
+msgstr ""
+
+#. type: SH
+#: ../scripts/build-rdeps.pl:124 ../scripts/debpkg.1:12
+#, no-wrap
+msgid "REQUIREMENTS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:126
+msgid ""
+"The tool requires apt Sources files to be around for the checked "
+"components. In the default case this means that in /var/lib/apt/lists files "
+"need to be around for main, contrib and non-free."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:130
+msgid ""
+"In practice this means one needs to add one deb-src line for each component, "
+"e.g."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:133
+msgid "deb-src http://<mirror>/debian <dist> main contrib non-free"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:135
+msgid "and run apt-get update afterwards or use the update option of this tool."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/build-rdeps.pl:539 ../scripts/debcommit.pl:943
+#: ../scripts/desktop2menu.pl:43 ../scripts/namecheck.pl:30
+#: ../scripts/svnpath.pl:92 ../scripts/transition-check.pl:72
+msgid "LICENSE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:541
+msgid ""
+"This code is copyright by Patrick Schoenfeld <schoenfeld@debian.org>, all "
+"rights reserved. This program comes with ABSOLUTELEY NO WARRANTY. You are "
+"free to redistribute this code under the terms of the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:549
+msgid "Patrick Schoenfeld <schoenfeld@debian.org>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:20
+msgid "chdist - script to easily play with several distributions"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:24
+msgid "B<chdist> [I<options>] [I<command>] [I<command parameters>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:28
+msgid ""
+"B<chdist> is a rewrite of what used to be known as 'MultiDistroTools' (or "
+"mdt). Its use is to create 'APT trees' for several distributions, making it "
+"easy to query the status of packages in other distribution without using "
+"chroots, for instance."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:39 ../scripts/mass-bug.pl:128
+msgid "Provide a usage message."
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:41
+msgid "B<-d>, B<--data-dir> I<DIR>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:43
+msgid "Choose data directory (default: F<~/.chdist/>)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:45
+msgid "B<-a>, B<--arch> I<ARCH>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:47
+msgid "Choose architecture (default: `B<dpkg --print-architecture>`)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:51 ../scripts/deb-reversion.dbk:239
+#: ../scripts/mass-bug.pl:132 ../scripts/uscan.pl:1777
+msgid "Display version information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:59
+msgid "B<create> I<DIST> [I<URL> I<RELEASE> I<SECTIONS>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:61
+msgid "Prepare a new tree named I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:63
+msgid "B<apt> I<DIST> <B<update>|B<source>|B<show>|B<showsrc>|...>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:65
+msgid "Run B<apt> inside I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:67
+msgid "B<apt-get> I<DIST> <B<update>|B<source>|...>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:69
+msgid "Run B<apt-get> inside I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:71
+msgid "B<apt-cache> I<DIST> <B<show>|B<showsrc>|...>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:73
+msgid "Run B<apt-cache> inside I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:75
+msgid "B<apt-file> I<DIST> <B<update>|B<search>|...>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:77
+msgid "Run B<apt-file> inside I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:79
+msgid "B<apt-rdepends> I<DIST> [...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:81
+msgid "Run B<apt-rdepends> inside I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:83
+msgid "B<aptitude> I<DIST> [...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:85
+msgid "Run B<aptitude> inside I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:87
+msgid "B<src2bin> I<DIST SRCPKG>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:89
+msgid "List binary packages for I<SRCPKG> in I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:91
+msgid "B<bin2src> I<DIST BINPKG>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:93
+msgid "List source package for I<BINPKG> in I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:95
+msgid "B<compare-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:97
+msgid "B<compare-bin-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:99
+msgid "List versions of packages in several I<DIST>ributions"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:101
+msgid "B<compare-versions> I<DIST1 DIST2>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:103
+msgid "B<compare-bin-versions> I<DIST1 DIST2>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:105
+msgid ""
+"Same as B<compare-packages>/B<compare-bin-packages>, but also runs B<dpkg "
+"--compare-versions> and display where the package is newer."
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:108
+msgid "B<compare-src-bin-packages> I<DIST>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:110
+msgid "Compare sources and binaries for I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:112
+msgid "B<compare-src-bin-versions> I<DIST>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:114
+msgid ""
+"Same as B<compare-src-bin-packages>, but also run B<dpkg --compare-versions> "
+"and display where the package is newer"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:117
+msgid "B<grep-dctrl-packages> I<DIST> [...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:119
+msgid "Run B<grep-dctrl> on F<*_Packages> inside I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:121
+msgid "B<grep-dctrl-sources> I<DIST> [...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:123
+msgid "Run B<grep-dctrl> on F<*_Sources> inside I<DIST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:125
+msgid "B<list>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:127
+msgid "List available I<DIST>s"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:133
+msgid ""
+"This program is copyright 2007 by Lucas Nussbaum and Luk Claes. This program "
+"comes with ABSOLUTELY NO WARRANTY."
+msgstr ""
+
+#. type: TH
+#: ../scripts/checkbashisms.1:1
+#, no-wrap
+msgid "CHECKBASHISMS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:4
+msgid "checkbashisms - check for bashisms in /bin/sh scripts"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:6
+msgid "B<checkbashisms> I<script> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:8
+msgid "B<checkbashisms --help>|B<--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:14
+msgid ""
+"B<checkbashisms>, based on one of the checks from the B<lintian> system, "
+"performs basic checks on I</bin/sh> shell scripts for the possible presence "
+"of bashisms. It takes the names of the shell scripts on the command line, "
+"and outputs warnings if possible bashisms are detected."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:19
+msgid ""
+"Note that the definition of a bashism in this context roughly equates to \"a "
+"shell feature that is not required to be supported by POSIX\"; this means "
+"that some issues flagged may be permitted under optional sections of POSIX, "
+"such as XSI or User Portability."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:23
+msgid ""
+"In cases where POSIX and Debian Policy disagree, B<checkbashisms> by default "
+"allows extensions permitted by Policy but may also provide options for "
+"stricter checking."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:24 ../scripts/debchange.1:399
+#: ../scripts/debdiff.1:176 ../scripts/debrelease.1:99 ../scripts/debsign.1:99
+#: ../scripts/dep3changelog.1:16 ../scripts/dscverify.1:37
+#: ../scripts/pts-subscribe.1:28 ../scripts/rc-alert.1:21
+#: ../scripts/uupdate.1:101 ../scripts/whodepends.1:11
+#: ../scripts/who-uploads.1:45 ../scripts/who-permits-upload.pl:71
+#: ../scripts/wnpp-alert.1:23 ../scripts/wnpp-check.1:20
+#, no-wrap
+msgid "B<--help>, B<-h>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:27 ../scripts/debdiff.1:179
+#: ../scripts/manpage-alert.1:16 ../scripts/mk-build-deps.pl:113
+#: ../scripts/rc-alert.1:24 ../scripts/wnpp-alert.1:26
+#: ../scripts/wnpp-check.1:23
+msgid "Show a summary of options."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:27
+#, no-wrap
+msgid "B<--newline>, B<-n>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:30
+msgid ""
+"Check for \"B<echo -n>\" usage (non POSIX but required by Debian Policy "
+"10.4.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:30
+#, no-wrap
+msgid "B<--posix>, B<-p>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:34
+msgid ""
+"Check for issues which are non POSIX but required to be supported by Debian "
+"Policy 10.4 (implies B<-n>)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:34
+#, no-wrap
+msgid "B<--force>, B<-f>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:39
+msgid ""
+"Force each script to be checked, even if it would normally not be (for "
+"instance, it has a bash or non POSIX shell shebang or appears to be a shell "
+"wrapper)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:39
+#, no-wrap
+msgid "B<--lint>, B<-l>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:43
+msgid ""
+"Act like a linter, for integration into a text editor. Possible bashisms "
+"will be printed in stdout, like so:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:45
+msgid "I<{filename}:{lineno}:1: warning: possible bashism; {explanation}>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:45
+#, no-wrap
+msgid "B<--extra>, B<-x>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:52
+msgid ""
+"Highlight lines which, whilst they do not contain bashisms, may be useful in "
+"determining whether a particular issue is a false positive which may be "
+"ignored. For example, the use of \"B<$BASH_ENV>\" may be preceded by "
+"checking whether \"B<$BASH>\" is set."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:52
+#, no-wrap
+msgid "B<--early-fail>, B<-e>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:55
+msgid "Exit right after a first error is seen."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:55 ../scripts/debdiff.1:179
+#: ../scripts/rc-alert.1:24 ../scripts/whodepends.1:14
+#: ../scripts/wnpp-alert.1:26 ../scripts/wnpp-check.1:23
+#, no-wrap
+msgid "B<--version>, B<-v>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:58 ../scripts/debdiff.1:182
+#: ../scripts/getbuildlog.1:31 ../scripts/grep-excuses.1:29
+#: ../scripts/manpage-alert.1:19 ../scripts/mk-build-deps.pl:117
+#: ../scripts/rc-alert.1:27 ../scripts/whodepends.1:17
+#: ../scripts/wnpp-alert.1:29 ../scripts/wnpp-check.1:26
+msgid "Show version and copyright information."
+msgstr ""
+
+#. type: SH
+#: ../scripts/checkbashisms.1:58 ../scripts/debdiff.1:247
+#, no-wrap
+msgid "EXIT VALUES"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:62
+msgid ""
+"The exit value will be 0 if no possible bashisms or other problems were "
+"detected. Otherwise it will be the sum of the following error values:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:62 ../scripts/dscextract.1:24
+#: ../scripts/wnpp-check.1:32
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:65
+msgid "A possible bashism was detected."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:65 ../scripts/dscextract.1:27
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:69
+msgid ""
+"A file was skipped for some reason, for example, because it was unreadable "
+"or not found. The warning message will give details."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:69
+#, no-wrap
+msgid "4"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:72
+msgid "No bashisms were detected in a bash script."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:74
+msgid "B<lintian>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:77
+msgid ""
+"B<checkbashisms> was originally written as a shell script by Yann Dirson "
+"E<lt>I<dirson@debian.org>E<gt> and rewritten in Perl with many more features "
+"by Julian Gilbey E<lt>I<jdg@debian.org>E<gt>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/cowpoke.1:5
+#, no-wrap
+msgid "COWPOKE"
+msgstr ""
+
+#. type: TH
+#: ../scripts/cowpoke.1:5
+#, no-wrap
+msgid "April 28, 2008"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:20
+msgid "cowpoke - Build a Debian source package in a remote cowbuilder instance"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:23
+msgid "B<cowpoke> [I<options>]I< packagename.dsc>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:27
+msgid ""
+"Uploads a Debian source package to a B<cowbuilder> host and builds it, "
+"optionally also signing and uploading the result to an incoming queue."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:31 ../scripts/debsnap.1:28
+msgid "The following options are available:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:32
+#, no-wrap
+msgid "B<--arch=>I<architecture>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:38
+msgid ""
+"Specify the Debian architecture(s) to build for. A space separated list of "
+"architectures may be used to build for all of them in a single pass. Valid "
+"arch names are those returned by B<dpkg-architecture>(1) for "
+"B<DEB_BUILD_ARCH>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:39
+#, no-wrap
+msgid "B<--dist=>I<distribution>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:47
+msgid ""
+"Specify the Debian distribution(s) to build for. A space separated list of "
+"distributions may be used to build for all of them in a single pass. Either "
+"codenames (such as B<sid>, or B<squeeze>) or distribution names (such as "
+"B<unstable>, or B<experimental>) may be used, but you should usually stick "
+"to using one or the other consistently as this name may be used in file "
+"paths and to locate old packages for comparison reporting."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:55
+msgid ""
+"It is now also possible to use locally defined names with this option, when "
+"used in conjunction with the B<BASE_DIST> option in a configuration file. "
+"This permits the maintenance and use of specially configured build chroots, "
+"which can source package dependencies from the backports archives or a local "
+"repository, or have other unusual configuration options set, without "
+"polluting the chroots you use for clean package builds intended for upload "
+"to the main repositories. See the description of B<BASE_DIST> below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:56
+#, no-wrap
+msgid "B<--buildd=>I<host>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:59
+msgid "Specify the remote host to build on."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:60
+#, no-wrap
+msgid "B<--buildd-user=>I<name>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:63
+msgid "Specify the remote user to build as."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:64 ../scripts/debchange.1:199
+#, no-wrap
+msgid "B<--create>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:69
+msgid ""
+"Create the remote B<cowbuilder> root if it does not already exist. If this "
+"option is not passed it is an error for the specified B<--dist> or B<--arch> "
+"to not have an existing B<cowbuilder> root in the expected location."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:74
+msgid ""
+"The B<--buildd-user> must have permission to create the B<RESULT_DIR> on the "
+"build host, or an admin with the necessary permission must first create it "
+"and give that user (or some group they are in) write access to it, for this "
+"option to succeed."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:75
+#, no-wrap
+msgid "B<--return=>[I<path>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:79
+msgid ""
+"Copy results of the build to I<path>. If I<path> is not specified, then "
+"return them to the current directory. The given I<path> must exist, it will "
+"not be created."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:80
+#, no-wrap
+msgid "B<--no-return>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:84
+msgid ""
+"Do not copy results of the build to B<RETURN_DIR> (overriding a path set for "
+"it in the configuration files)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:85
+#, no-wrap
+msgid "B<--dpkg-opts=>I<'opt1 opt2 ...'>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:90
+msgid ""
+"Specify additional options to be passed to B<dpkg-buildpackage>(1). "
+"Multiple options are delimited with spaces. This will override any options "
+"specified in B<DEBBUILDOPTS> in the build host's I<pbuilderrc>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:91
+#, no-wrap
+msgid "B<--create-opts=>I<'cowbuilder option'>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:97
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> when a "
+"chroot is first created (using the B<--create> option above). If multiple "
+"arguments need to be passed, this option should be specified separately for "
+"each of them."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:99
+msgid "E.g., B<--create-opts \"--othermirror\" --create-opts \"deb http:// ...\">"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:102
+msgid ""
+"This option will override any B<CREATE_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:103
+#, no-wrap
+msgid "B<--update-opts=>I<'cowbuilder option'>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:108
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> if the "
+"base of the chroot is updated. If multiple arguments need to be passed, "
+"this option should be specified separately for each of them."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:111
+msgid ""
+"This option will override any B<UPDATE_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:112
+#, no-wrap
+msgid "B<--build-opts=>I<'cowbuilder option'>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:117
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> when a "
+"package build is performed. If multiple arguments need to be passed, this "
+"option should be specified separately for each of them."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:120
+msgid ""
+"This option will override any B<BUILD_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:121
+#, no-wrap
+msgid "B<--sign=>I<keyid>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:125
+msgid ""
+"Specify the key to sign packages with. This will override any B<SIGN_KEYID> "
+"specified for a chroot in the cowpoke configuration files."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:126
+#, no-wrap
+msgid "B<--upload=>I<queue>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:130
+msgid ""
+"Specify the dput queue to upload signed packages to. This will override any "
+"B<UPLOAD_QUEUE> specified for a chroot in the cowpoke configuration files."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:134
+msgid "Display a brief summary of the available options and current configuration."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:138
+msgid "Display the current version information."
+msgstr ""
+
+#. type: SH
+#: ../scripts/cowpoke.1:140 ../scripts/debsnap.1:82
+#, no-wrap
+msgid "CONFIGURATION OPTIONS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:146
+msgid ""
+"When B<cowpoke> is run the following configuration options are read from "
+"global, per-user, and per-project configuration files if present. File "
+"paths may be absolute or relative, the latter being relative to the "
+"B<BUILDD_USER>'s home directory. Since the paths are typically quoted when "
+"used, tilde expansion will B<not> be performed on them."
+msgstr ""
+
+#. type: SS
+#: ../scripts/cowpoke.1:147
+#, no-wrap
+msgid "Global defaults"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:149
+msgid "These apply to every I<arch> and I<dist> in a single cowpoke invocation."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:150
+#, no-wrap
+msgid "B<BUILDD_HOST>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:154
+msgid ""
+"The network address or fqdn of the build machine where B<cowbuilder> is "
+"configured. This may be overridden by the B<--buildd> command line option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:154
+#, no-wrap
+msgid "B<BUILDD_USER>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:160
+msgid ""
+"The unprivileged user name for operations on the build machine. This "
+"defaults to the local name of the user executing B<cowpoke> (or to a "
+"username that is specified in your SSH configuration for B<BUILDD_HOST>), "
+"and may be overridden by the B<--buildd-user> command line option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:160
+#, no-wrap
+msgid "B<BUILDD_ARCH>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:167
+msgid ""
+"The Debian architecture(s) to build for. This must match the "
+"B<DEB_BUILD_ARCH> of the build chroot being used. It defaults to the local "
+"machine architecture where B<cowpoke> is executed, and may be overridden by "
+"the B<--arch> command line option. A (quoted) space separated list of "
+"architectures may be used here to build for all of them in a single pass."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:167
+#, no-wrap
+msgid "B<BUILDD_DIST>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:172
+msgid ""
+"The Debian distribution(s) to build for. A (quoted) space separated list of "
+"distributions may be used to build for all of them in a single pass. This "
+"may be overridden by the B<--dist> command line option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:173
+#, no-wrap
+msgid "B<INCOMING_DIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:177
+msgid ""
+"The directory path on the build machine where the source package will "
+"initially be placed. This must be writable by the B<BUILDD_USER>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:177
+#, no-wrap
+msgid "B<PBUILDER_BASE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:182
+msgid ""
+"The filesystem root for all pbuilder CoW and result files. I<Arch> and "
+"I<dist> specific subdirectories will normally be created under this. The "
+"apt cache and temporary build directory will also be located under this "
+"path."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:183
+#, no-wrap
+msgid "B<SIGN_KEYID>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:194
+msgid ""
+"If this option is set, it is expected to contain the gpg key ID to pass to "
+"B<debsign>(1) if the packages are to be remotely signed. You will be "
+"prompted to confirm whether you wish to sign the packages after all builds "
+"are complete. If this option is unset or an empty string, no attempt to "
+"sign packages will be made. It may be overridden on an I<arch> and I<dist> "
+"specific basis using the I<arch>B<_>I<dist>B<_SIGN_KEYID> option described "
+"below, or per-invocation with the B<--sign> command line option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:195
+#, no-wrap
+msgid "B<UPLOAD_QUEUE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:206
+msgid ""
+"If this option is set, it is expected to contain a 'host' specification for "
+"B<dput>(1) which will be used to upload them after they are signed. You "
+"will be prompted to confirm whether you wish to upload the packages after "
+"they are signed. If this option is unset or an empty string, no attempt to "
+"upload packages will be made. If B<SIGN_KEYID> is not set, this option will "
+"be ignored entirely. It may be overridden on an I<arch> and I<dist> "
+"specific basis using the I<arch>B<_>I<dist>B<_UPLOAD_QUEUE> option described "
+"below, or per-invocation with the B<--upload> command line option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:208
+#, no-wrap
+msgid "B<BUILDD_ROOTCMD>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:216
+msgid ""
+"The command to use to gain root privileges on the remote build machine. If "
+"unset the default is B<sudo>(8). This is only required to invoke "
+"B<cowbuilder> and allow it to enter its chroot, so you may restrict this "
+"user to only being able to run that command with escalated privileges. "
+"Something like this in sudoers will enable invoking B<cowbuilder> without an "
+"additional password entry required:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:220
+msgid "youruser ALL = NOPASSWD: /usr/sbin/cowbuilder"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:227
+msgid ""
+"Alternatively you could use SSH with a forwarded key, or whatever other "
+"mechanism suits your local access policy. Using B<su -c> isn't really "
+"suitable here due to its quoting requirements being somewhat different to "
+"the rest."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:228
+#, no-wrap
+msgid "B<DEBOOTSTRAP>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:232
+msgid ""
+"The utility to use when creating a new build root. Alternatives are "
+"B<debootstrap> or B<cdebootstrap>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:233
+#, no-wrap
+msgid "B<RETURN_DIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:239
+msgid ""
+"If set, package files resulting from the build will be copied to the path "
+"(local or remote) that this is set to, after the build completes. The path "
+"must exist, it will not be created. This option is unset by default and can "
+"be overridden with B<--return> or B<--no-return>."
+msgstr ""
+
+#. type: SS
+#: ../scripts/cowpoke.1:241
+#, no-wrap
+msgid "Arch and dist specific options"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:244
+msgid ""
+"These are variables of the form: $arch_$distB<_VAR> which apply only for a "
+"particular target arch/dist build."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:245
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_RESULT_DIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:256
+msgid ""
+"The directory path on the build machine where the resulting packages (source "
+"and binary) will be found, and where older versions of the package that were "
+"built previously may be found. If any such older packages exist, B<debdiff> "
+"will be used to compare the new package with the previous version after the "
+"build is complete, and the result will be included in the build log. Files "
+"in it must be readable by the B<BUILDD_USER> for sanity checking with "
+"B<lintian>(1) and B<debdiff>(1), and for upload with B<dput>(1). If this "
+"option is not specified for some arch and dist combination then it will "
+"default to I<$PBUILDER_BASE/$arch/$dist/result>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:257
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BASE_PATH>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:263
+msgid ""
+"The directory where the CoW master files are to be found (or created if the "
+"B<--create> command line option was passed). If this option is not "
+"specified for some arch or dist then it will default to "
+"I<$PBUILDER_BASE/$arch/$dist/base.cow>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:264
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BASE_DIST>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:274
+msgid ""
+"The code name to pass as the B<--distribution> option for cowbuilder instead "
+"of I<dist>. This is necessary when I<dist> is a locally significant name "
+"assigned to some specially configured build chroot, such as "
+"'wheezy_backports', and not the formal suite name of a distro release known "
+"to debootstrap. This option cannot be overridden on the command line, since "
+"it would rarely, if ever, make any sense to change it for individual "
+"invocations of B<cowpoke>. If this option is not specified for an arch and "
+"dist combination then it will default to I<dist>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:275
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_CREATE_OPTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:283
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"when this chroot is created for the first time (using the B<--create> "
+"option). This is useful when options like B<--othermirror> are wanted to "
+"create specialised chroot configurations such as 'wheezy_backports'. By "
+"default this is unset. All values set in it will be overridden if the "
+"B<--create-opts> option is passed on the command line."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:288
+msgid ""
+"Each element in this array corresponds to a single argument (in the ARGV "
+"sense) that will be passed to cowbuilder. This ensures that arguments "
+"which may contain whitespace or have strange quoting requirements or other "
+"special characters will not be mangled before they get to cowbuilder."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:290
+msgid "Bash arrays are initialised using the following form:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:292
+#, no-wrap
+msgid ""
+" OPTS=( \"arg1\" \"arg 2\" \"--option\" \"value\" \"--opt=val\" "
+"\"etc. etc.\" )\n"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:293
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_UPDATE_OPTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:298
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"each time the base of this chroot is updated. It behaves similarly to the "
+"B<CREATE_OPTS> option above, except for acting when the chroot is updated."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:299
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BUILD_OPTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:306
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"each time a package build is performed in this chroot. This is useful when "
+"you want to use some option like B<--twice> which cowpoke does not directly "
+"need to care about. It otherwise behaves similarly to B<UPDATE_OPTS> above "
+"except that it acts during the build phase of B<cowbuilder>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:307
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_SIGN_KEYID>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:311
+msgid ""
+"An optional arch and dist specific override for the global B<SIGN_KEYID> "
+"option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:312
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_UPLOAD_QUEUE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:316
+msgid ""
+"An optional arch and dist specific override for the global B<UPLOAD_QUEUE> "
+"option."
+msgstr ""
+
+#. type: SH
+#: ../scripts/cowpoke.1:318
+#, no-wrap
+msgid "CONFIGURATION FILES"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:319
+#, no-wrap
+msgid "I</etc/cowpoke.conf>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:322
+msgid "Global configuration options. Will override hardcoded defaults."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:322
+#, no-wrap
+msgid "I<~/.cowpoke>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:325 ../scripts/debsnap.1:137
+msgid "Per-user configuration options. Will override any global configuration."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:325
+#, no-wrap
+msgid "I<.cowpoke>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:329
+msgid ""
+"Per-project configuration options. Will override any per-user or global "
+"configuration if B<cowpoke> is called from the directory where they exist."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:333
+msgid ""
+"If the environment variable B<COWPOKE_CONF> is set, it specifies an "
+"additional configuration file which will override all of those above. "
+"Options specified explicitly on the command line override all configuration "
+"files."
+msgstr ""
+
+#. type: SH
+#: ../scripts/cowpoke.1:335
+#, no-wrap
+msgid "COWBUILDER CONFIGURATION"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:344
+msgid ""
+"There is nothing particularly special required to configure a B<cowbuilder> "
+"instance for use with B<cowpoke>. Simply create them in the flavour you "
+"require with `B<cowbuilder --create>` according to the B<cowbuilder> "
+"documentation, then configure B<cowpoke> with the user, arch, and path "
+"information required to access it, on the machines you wish to invoke it "
+"from (or alternatively configure B<cowpoke> with the path, arch and "
+"distribution information and pass the B<--create> option to it on the first "
+"invocation). The build host running B<cowbuilder> does not require "
+"B<cowpoke> installed locally."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:354
+msgid ""
+"The build machine should have the B<lintian> and B<devscripts> packages "
+"installed for post-build sanity checking. Upon completion, the build log "
+"and the results of automated checks will be recorded in the "
+"B<INCOMING_DIR>. If you wish to upload signed packages the build machine "
+"will also need B<dput>(1) installed and configured to use the 'I<host>' "
+"alias specified by B<UPLOAD_QUEUE>. If B<rsync>(1) is available on both the "
+"local and build machine, then it will be used to transfer the source package "
+"(this may save on some transfers of the I<orig.tar.*> when building "
+"subsequent Debian revisions)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:360
+msgid ""
+"The user executing B<cowpoke> must have SSH access to the build machine as "
+"the B<BUILDD_USER>. That user must be able to invoke B<cowbuilder> as root "
+"by using the B<BUILDD_ROOTCMD>. Signing keys are not required to be "
+"installed on the build machine (and will be ignored there if they are). If "
+"the package is signed, keys will be expected on the machine that executes "
+"B<cowpoke>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:367
+msgid ""
+"When B<cowpoke> is invoked, it will first attempt to update the "
+"B<cowbuilder> image if that has not already been done on the same day. This "
+"is checked by the presence or absence of a "
+"I<cowbuilder-$arch-$dist-update-log-$date> file in the B<INCOMING_DIR>. You "
+"may move, remove, or touch this file if you wish the image to be updated "
+"more or less often than that. Its contents log the output of B<cowbuilder> "
+"during the update (or creation) of the build root."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/cowpoke.1:369 ../scripts/origtargz.pl:85
+#: ../scripts/rmadison.pl:396
+#, no-wrap
+msgid "NOTES"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:378
+msgid ""
+"Since B<cowbuilder> creates a chroot, and to do that you need root, "
+"B<cowpoke> also requires some degree of root access. So all the horrible "
+"things that can go wrong with that may well one day rain down upon you. "
+"B<cowbuilder> has been known to accidentally wipe out bind-mounted "
+"filesystems outside the chroot, and worse than that can easily happen. So "
+"be careful, keep good backups of things you don't want to lose on your build "
+"machine, and use B<cowpoke> to keep all that on a machine that isn't your "
+"bleeding edge dev box with your last few hours of uncommitted work."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:384
+msgid "B<cowbuilder>(1), B<pbuilder>(1), B<ssh-agent>(1), B<sudoers>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:388
+msgid "B<cowpoke> was written by Ron E<lt>I<ron@debian.org>E<gt>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/cvs-debc.1:1 ../scripts/cvs-debrelease.1:1
+#, no-wrap
+msgid "CVS-DEBC"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:4
+msgid "cvs-debc - view contents of a cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:6
+msgid "B<cvs-debc> [I<options>] [I<package> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:17
+msgid ""
+"B<cvs-debc> is run from the CVS working directory after B<cvs-buildpackage> "
+"or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to locate the "
+"I<.changes> file generated in that run. It then displays information about "
+"the I<.deb> files which were generated in that run, by running B<dpkg-deb "
+"-I> and B<dpkg-deb -c> on every I<.deb> archive listed in the I<.changes> "
+"file, assuming that all of the I<.deb> archives live in the same directory "
+"as the I<.changes> file. It is useful for ensuring that the expected files "
+"have ended up in the Debian package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:20
+msgid ""
+"If a list of packages is given on the command line, then only those debs "
+"with names in this list of packages will be processed."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:24 ../scripts/cvs-debi.1:23
+#: ../scripts/cvs-debrelease.1:21
+msgid ""
+"Note that unlike B<cvs-buildpackage>, the only way to specify the source "
+"package name is with the B<-P> option; you cannot simply have it as the last "
+"command-line parameter."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:28 ../scripts/cvs-debi.1:32
+msgid ""
+"All current B<cvs-buildpackage> options are silently accepted; however, only "
+"the ones listed below have any effect. For more details on all of them, see "
+"the B<cvs-buildpackage>(1) manpage."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debc.1:28 ../scripts/cvs-debi.1:32
+#: ../scripts/cvs-debrelease.1:30 ../scripts/debc.1:65 ../scripts/debi.1:66
+#: ../scripts/debrelease.1:67 ../scripts/debrsign.1:35 ../scripts/debsign.1:72
+#, no-wrap
+msgid "B<-a>I<debian-architecture>, B<-t>I<GNU-system-type>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:34 ../scripts/cvs-debi.1:38
+#: ../scripts/cvs-debrelease.1:36 ../scripts/debc.1:71 ../scripts/debi.1:72
+#: ../scripts/debrsign.1:41 ../scripts/debsign.1:78
+msgid ""
+"See B<dpkg-architecture>(1) for a description of these options. They affect "
+"the search for the I<.changes> file. They are provided to mimic the "
+"behaviour of B<dpkg-buildpackage> when determining the name of the "
+"I<.changes> file."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debc.1:34 ../scripts/cvs-debi.1:38
+#: ../scripts/cvs-debrelease.1:36
+#, no-wrap
+msgid "B<-M>I<module>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:37 ../scripts/cvs-debi.1:41
+#: ../scripts/cvs-debrelease.1:39
+msgid "The name of the CVS module."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debc.1:37 ../scripts/cvs-debi.1:41
+#: ../scripts/cvs-debrelease.1:39
+#, no-wrap
+msgid "B<-P>I<package>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:40 ../scripts/cvs-debi.1:44
+#: ../scripts/cvs-debrelease.1:42
+msgid "The name of the package."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debc.1:40 ../scripts/cvs-debi.1:44
+#: ../scripts/cvs-debrelease.1:42
+#, no-wrap
+msgid "B<-V>I<version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:43 ../scripts/cvs-debi.1:47
+#: ../scripts/cvs-debrelease.1:45
+msgid "The version number of the package."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debc.1:43 ../scripts/cvs-debi.1:47
+#: ../scripts/cvs-debrelease.1:45
+#, no-wrap
+msgid "B<-T>I<tag>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:46 ../scripts/cvs-debi.1:50
+#: ../scripts/cvs-debrelease.1:48
+msgid "The CVS tag to use for exporting sources."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debc.1:46 ../scripts/cvs-debi.1:50
+#: ../scripts/cvs-debrelease.1:48
+#, no-wrap
+msgid "B<-R>I<root\\ directory>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:49 ../scripts/cvs-debi.1:53
+#: ../scripts/cvs-debrelease.1:51
+msgid "Root of the original sources archive."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debc.1:49 ../scripts/cvs-debi.1:53
+#: ../scripts/cvs-debrelease.1:51
+#, no-wrap
+msgid "B<-W>I<work directory>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:52 ../scripts/cvs-debi.1:56
+#: ../scripts/cvs-debrelease.1:54
+msgid "The full path name for the cvs-buildpackage working directory."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debc.1:52 ../scripts/cvs-debi.1:56
+#: ../scripts/cvs-debrelease.1:54
+#, no-wrap
+msgid "B<-x>I<prefix>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:55 ../scripts/cvs-debi.1:59
+#: ../scripts/cvs-debrelease.1:57
+msgid "This option provides the CVS default module prefix."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debc.1:55 ../scripts/cvs-debi.1:59
+#: ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:99 ../scripts/debi.1:106
+#: ../scripts/debrsign.1:50
+#, no-wrap
+msgid "B<--help>, B<--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62
+#: ../scripts/cvs-debrelease.1:64 ../scripts/debc.1:102 ../scripts/debi.1:109
+#: ../scripts/debrsign.1:53
+msgid "Show help message and version information respectively."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:63
+msgid "B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1), B<debc>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:67 ../scripts/cvs-debi.1:71
+msgid ""
+"B<cvs-buildpackage> was written by Manoj Srivastava, and the current version "
+"of B<debi> was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>. They have "
+"been combined into this program by Julian Gilbey."
+msgstr ""
+
+#. type: TH
+#: ../scripts/cvs-debi.1:1
+#, no-wrap
+msgid "CVS-DEBI"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:4
+msgid "cvs-debi - install cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:6
+msgid "B<cvs-debi> [I<options>] [I<package> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:16
+msgid ""
+"B<cvs-debi> is run from the CVS working directory after B<cvs-buildpackage> "
+"or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to locate the "
+"I<.changes> file generated in that run. It then runs B<debpkg -i> on every "
+"I<.deb> archive listed in the I<.changes> file to install them, assuming "
+"that all of the I<.deb> archives live in the same directory as the "
+"I<.changes> file. Note that you probably don't want to run this program on "
+"a I<.changes> file relating to a different architecture after "
+"cross-compiling the package!"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:19 ../scripts/debi.1:24
+msgid ""
+"If a list of packages is given on the command line, then only those debs "
+"with names in this list of packages will be installed."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:28 ../scripts/debi.1:29
+msgid ""
+"Since installing a package requires root privileges, B<debi> calls B<debpkg> "
+"rather than B<dpkg> directly. Thus B<debi> will only be useful if it is "
+"either being run as root or B<debpkg> can be run as root. See B<debpkg>(1) "
+"for more details."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:67
+msgid "B<cvs-buildpackage>(1), B<cvs-debc>(1), B<cvs-debuild>(1), B<debi>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:4
+msgid "cvs-debrelease - upload a cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:7
+msgid ""
+"B<cvs-debrelease> [I<cvs-debrelease options>] [B<--dopts> [I<dupload/dput "
+"options>]]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:17
+msgid ""
+"B<cvs-debrelease> is run from the CVS working directory after "
+"B<cvs-buildpackage> or B<cvs-debuild>. It uses the B<cvs-buildpackage> "
+"system to locate the I<.changes> file generated in that run. It then "
+"uploads the package using B<debrelease>(1), which in turn calls either "
+"B<dupload> or B<dput>. Note that the B<--dopts> option must be specified to "
+"distinguish the B<cvs-debrelease> options from the B<dupload> or B<dput> "
+"options. Also, the B<devscripts> configuration files will be read, as "
+"described in the B<debrelease>(1) manpage."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:26
+msgid ""
+"All current B<cvs-buildpackage> options are silently accepted; however, only "
+"the ones listed below have any effect. For more details on all of them, see "
+"the B<cvs-buildpackage>(1) manpage. All B<debrelease> options (as listed "
+"below) are also accepted."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debrelease.1:26 ../scripts/debrelease.1:57
+#, no-wrap
+msgid "B<--dupload>, B<--dput>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:30 ../scripts/debrelease.1:61
+msgid "This specifies which uploader program to use; the default is B<dupload>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:68
+msgid "B<cvs-buildpackage>(1), B<cvs-debuild>(1), B<debrelease>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:72
+msgid ""
+"B<cvs-buildpackage> was written by Manoj Srivastava, and the current version "
+"of B<debrelease> was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>. "
+"They have been combined into this program by Julian Gilbey."
+msgstr ""
+
+#. type: TH
+#: ../scripts/cvs-debuild.1:1
+#, no-wrap
+msgid "CVS-DEBUILD"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:4
+msgid "cvs-debuild - build a Debian package using cvs-buildpackage and debuild"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:7
+msgid ""
+"B<cvs-debuild> [I<debuild options>] [I<cvs-buildpackage options>] "
+"[B<--lintian-opts> I<lintian options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:13
+msgid ""
+"B<cvs-debuild> is a wrapper around B<cvs-buildpackage> to run it with "
+"B<debuild> as the package-building program. (This cannot simply be "
+"accomplished using the B<-C> option of B<cvs-buildpackage>, as it does not "
+"know how to handle all of the special B<debuild> options.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:22
+msgid ""
+"The program simply stashes the B<debuild> and B<lintian> options, and passes "
+"them to B<debuild> when it is called by B<cvs-buildpackage>. All of the "
+"standard B<debuild> options may be used (as listed below), but note that the "
+"root command specified by any B<--rootcmd> or B<-r> command-line option will "
+"be passed as an option to B<cvs-buildpackage>. The first non-B<debuild> "
+"option detected will signal the start of the B<cvs-buildpackage> options."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:29
+msgid ""
+"The selection of the root command is slightly subtle: if there are any "
+"command-line options, these will be used. If not, then if "
+"B<cvs-buildpackage> is set up to use a default root command, that will be "
+"used. Finally, if neither of these are the case, then B<debuild> will use "
+"its procedures to determine an appropriate command, as described in its "
+"documentation."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:32
+msgid ""
+"See the manpages for B<debuild>(1) and B<cvs-buildpackage> for more "
+"information about the behaviour of each."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:38
+msgid ""
+"The following are the B<debuild> options recognised by B<cvs-debuild>. All "
+"B<cvs-buildpackage> and B<lintian> options are simply passed to the "
+"appropriate program. For explanations of the meanings of these variables, "
+"see B<debuild>(1)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:40 ../scripts/debuild.1:262
+#, no-wrap
+msgid "B<--rootcmd=>I<gain-root-command>, B<-r>I<gain-root-command>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:42 ../scripts/debuild.1:265
+#, no-wrap
+msgid "B<--preserve-env>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:44 ../scripts/debuild.1:268
+#, no-wrap
+msgid "B<--preserve-envvar=>I<var>, B<-e>I<var>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:46 ../scripts/debuild.1:275
+#, no-wrap
+msgid "B<--set-envvar=>I<var>B<=>I<value>, B<-e>I<var>B<=>I<value>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:48
+#, no-wrap
+msgid "B<--lintian>, B<--no-lintian>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:50
+#, no-wrap
+msgid "B<--ignore-dirname>, B<--check-dirname>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:53
+msgid "These should not be needed, but it is provided nevertheless."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:58
+msgid ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1), "
+"B<lintian>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:59
+msgid "This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/dcmd.1:1
+#, no-wrap
+msgid "DCMD"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:4
+msgid "dcmd - expand file lists of .dsc/.changes files in the command line"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:6
+msgid "B<dcmd> [I<options>] [I<command>] [I<changes-file>|I<dsc-file>] ..."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:11
+msgid ""
+"B<dcmd> replaces any reference to a I<.dsc> or I<.changes> file in the "
+"command line with the list of files in its 'Files' section, plus the file "
+"itself. It allows easy manipulation of all the files involved in an upload "
+"(for I<.changes> files) or a source package (for I<.dsc> files)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:15
+msgid ""
+"If I<command> is omitted (that is the first argument is an existing I<.dsc> "
+"or I<.changes> file), the expanded list of files is printed to stdout, one "
+"file by line. Useful for usage in backticks."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:19
+msgid ""
+"There are a number of options which may be used in order to select only a "
+"subset of the files listed in the I<.dsc> or I<.changes> file. If a "
+"requested file is not found, an error message will be printed."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:19
+#, no-wrap
+msgid "B<--dsc>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:22
+msgid "Select the I<.dsc> file."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:22
+#, no-wrap
+msgid "B<--schanges>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:25
+msgid "Select I<.changes> files for the 'source' architecture."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:25
+#, no-wrap
+msgid "B<--bchanges>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:28
+msgid "Select I<.changes> files for binary architectures."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:28
+#, no-wrap
+msgid "B<--changes>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:31
+msgid "Select I<.changes> files. Implies B<--schanges> and B<--bchanges>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:31
+#, no-wrap
+msgid "B<--archdeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:34
+msgid "Select architecture-dependent binary packages (I<.deb> files)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:34
+#, no-wrap
+msgid "B<--indepdeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:37
+msgid "Select architecture-independent binary packages (I<.deb> files)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:37
+#, no-wrap
+msgid "B<--deb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:40
+msgid ""
+"Select binary packages (I<.deb> files). Implies B<--archdeb> and "
+"B<--indepdeb>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:40
+#, no-wrap
+msgid "B<--archudeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:43
+msgid "Select architecture-dependent I<.udeb> binary packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:43
+#, no-wrap
+msgid "B<--indepudeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:46
+msgid "Select architecture-independent I<.udeb> binary packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:46
+#, no-wrap
+msgid "B<--udeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:49
+msgid "Select I<.udeb> binary packages. Implies B<--archudeb> and B<--indepudeb>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:49
+#, no-wrap
+msgid "B<--tar>,\\ B<--orig>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:52
+msgid "Select the upstream I<.tar> file."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:52
+#, no-wrap
+msgid "B<--diff>,\\ B<--debtar>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:55
+msgid "Select the Debian I<.debian.tar> or I<.diff> file."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:58
+msgid ""
+"Each option may be prefixed by B<--no> to indicate that all files I<not> "
+"matching the specification should be selected."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:62
+msgid ""
+"It is not possible to combine positive filtering options (e.g. B<--dsc>) "
+"and negative filtering options (e.g. B<--no-changes>) in the same B<dcmd> "
+"invocation."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:62
+#, no-wrap
+msgid "B<--no-fail-on-missing>, B<-r>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:65
+msgid "If any of the requested files were not found, do not output an error."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:65
+#, no-wrap
+msgid "B<--package>, B<-p>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:68
+msgid "Output package name part only."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:68
+#, no-wrap
+msgid "B<--sort>, B<-s>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:71
+msgid "Sort output alphabetically."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:71
+#, no-wrap
+msgid "B<--tac>, B<-t>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:74
+msgid "Reverse output order."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/dcmd.1:75 ../scripts/debsnap.1:109 ../scripts/debuild.1:404
+#: ../scripts/dget.pl:719 ../scripts/getbuildlog.1:31 ../scripts/rc-alert.1:96
+#: ../scripts/who-permits-upload.pl:139
+#, no-wrap
+msgid "EXAMPLES"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:77
+msgid "Copy the result of a build to another machine:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:85
+#, no-wrap
+msgid ""
+"$ dcmd scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.dsc 100% 490 0.5KB/s 00:00\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.changes 100% 1095 1.1KB/s 00:00\n"
+"$\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:90
+#, no-wrap
+msgid ""
+"$ dcmd --diff --deb scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"$\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:93
+msgid "Check the contents of a source package:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:100
+#, no-wrap
+msgid ""
+"$ dcmd md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"f0ceeae96603e823eacba6721a30b5c7 rcs_5.7-23.diff.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:105
+#, no-wrap
+msgid ""
+"$ dcmd --no-diff md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:110
+msgid "B<dpkg-genchanges>(1), B<dpkg-source>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:112
+msgid ""
+"This program was written by Romain Francoise E<lt>rfrancoise@debian.orgE<gt> "
+"and is released under the GPL, version 2 or later."
+msgstr ""
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "DD-LIST"
+msgstr ""
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "2011-10-27"
+msgstr ""
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "Debian"
+msgstr ""
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:21
+msgid "dd-list - nicely list .deb packages and their maintainers"
+msgstr ""
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:26
+msgid ""
+"B<dd-list> [B<-hiusV>] [B<--help>] [B<--stdin>] [B<--sources "
+">I<Sources_file>] [B<--dctrl>] [B<--version>] [B<--uploaders>] [I<package> "
+"...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:30
+msgid ""
+"B<dd-list> produces nicely formatted lists of Debian (.deb) packages and "
+"their maintainers."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:37
+msgid ""
+"Input is a list of source or binary package names on the command line (or "
+"the standard input if B<--stdin> is given). Output is a list of the "
+"following format, where package names are source packages by default:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:41
+#, no-wrap
+msgid "J. Random Developer E<lt>jrandom@debian.orgE<gt>\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:44
+#, no-wrap
+msgid ""
+"j-random-package\n"
+"j-random-other\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:47
+#, no-wrap
+msgid "Diana Hacker E<lt>diana@example.orgE<gt>\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:50
+#, no-wrap
+msgid ""
+"fun-package\n"
+"more-fun-package\n"
+msgstr ""
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:58
+msgid ""
+"This is useful when you want, for example, to produce a list of packages "
+"that need to attention from their maintainers, e.g., to be rebuilt when a "
+"library version transition happens."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:62
+msgid "Print brief help message."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dd-list.1:62
+#, no-wrap
+msgid "B<-i>, B<--stdin>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:66
+msgid ""
+"Read package names from the standard input, instead of taking them from the "
+"command line. Package names are whitespace delimited."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dd-list.1:66
+#, no-wrap
+msgid "B<-d>, B<--dctrl>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:73
+msgid ""
+"Read package list from standard input in the format of a Debian package "
+"control file. This includes the status file, or output of apt-cache. This is "
+"the fastest way to use dd-list, as it uses the maintainer information from "
+"the input instead of looking up the maintainer of each listed package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:76
+msgid ""
+"If no I<Source:> line is given, the I<Package:> name is used for output, "
+"which might be a binary package name."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dd-list.1:76
+#, no-wrap
+msgid "B<-z>, B<--uncompress>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:80
+msgid ""
+"Try to uncompress the --dctrl input before parsing. Supported compression "
+"formats are gz, bzip2 or xz."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dd-list.1:80
+#, no-wrap
+msgid "B<-s>, B<--sources> I<Sources_file>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:86
+msgid ""
+"Read package information from the specified I<Sources_file>s. This can be "
+"given multiple times. The files can be gz, bzip2 or xz compressed. If the "
+"filename does not end in I<.gz>, I<.bz2> or I<.xz>, then the B<-z> option "
+"must be used."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:90
+msgid ""
+"If no I<Sources_file>s are specified, dd-list will ask apt-get for an "
+"appropriate set of sources (if I<apt> is at version greater than 1.1.8), "
+"else any files matching I</var/lib/apt/lists/*_source_Sources> will be used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dd-list.1:90
+#, no-wrap
+msgid "B<-u>, B<--uploaders>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:95
+msgid ""
+"Also list developers who are named as uploaders of packages, not only the "
+"maintainers; this is the default behaviour, use --nouploaders to prevent "
+"it. Uploaders are indicated with \"(U)\" appended to the package name."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dd-list.1:95
+#, no-wrap
+msgid "B<-nou>, B<--nouploaders>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:98
+msgid "Only list package Maintainers, do not list Uploaders."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dd-list.1:98
+#, no-wrap
+msgid "B<-b>, B<--print-binary>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:103
+msgid ""
+"Use binary package names in the output instead of source package names (has "
+"no effect with B<--dctrl> if the I<Package:> line contains source package "
+"names)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dd-list.1:103 ../scripts/dget.pl:684 ../scripts/getbuildlog.1:28
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr ""
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:107
+msgid "Print the version."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:109
+msgid "Lars Wirzenius E<lt>liw@iki.fiE<gt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:110
+msgid "Joey Hess E<lt>joeyh@debian.orgE<gt>"
+msgstr ""
+
+#. type: TH
+#: ../scripts/debc.1:1
+#, no-wrap
+msgid "DEBC"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:4
+msgid "debc - view contents of a generated Debian package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:6
+msgid "B<debc> [I<options>] [I<changes file>] [I<package> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:25
+msgid ""
+"B<debc> figures out the current version of a package and displays "
+"information about the I<.deb> and I<.udeb> files which have been generated "
+"in the current build process. If a I<.changes> file is specified on the "
+"command line, the filename must end with I<.changes>, as this is how the "
+"program distinguishes it from package names. If not, then B<debc> has to be "
+"called from within the source code directory tree. In this case, it will "
+"look for the I<.changes> file corresponding to the current package version "
+"(by determining the name and version number from the changelog, and the "
+"architecture in the same way as B<dpkg-buildpackage>(1) does). It then runs "
+"B<dpkg-deb -I> and B<dpkg-deb -c> on every I<.deb> and I<.udeb> archive "
+"listed in the I<.changes> file to display information about the contents of "
+"the I<.deb> / I<.udeb> files. It precedes every I<.deb> or I<.udeb> file "
+"with the name of the file. It assumes that all of the I<.deb> / I<.udeb> "
+"archives live in the same directory as the I<.changes> file. It is useful "
+"for ensuring that the expected files have ended up in the Debian package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:28
+msgid ""
+"If a list of packages is given on the command line, then only those debs or "
+"udebs with names in this list of packages will be processed."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/debc.1:28 ../scripts/debchange.1:109 ../scripts/debclean.1:27
+#: ../scripts/debi.1:29 ../scripts/debrelease.1:20 ../scripts/debuild.1:51
+#: ../scripts/uscan.pl:1979
+#, no-wrap
+msgid "Directory name checking"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:39
+msgid ""
+"In common with several other scripts in the B<devscripts> package, B<debc> "
+"will climb the directory tree until it finds a I<debian/changelog> file. As "
+"a safeguard against stray files causing potential problems, it will examine "
+"the name of the parent directory once it finds the I<debian/changelog> file, "
+"and check that the directory name corresponds to the package name. "
+"Precisely how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and "
+"B<--check-dirname-regex>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debc.1:41 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:65
+#: ../scripts/uscan.pl:1994
+msgid "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> can take the following values:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debc.1:41 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:65
+#: ../scripts/uscan.pl:1925 ../scripts/uscan.pl:1998
+#, no-wrap
+msgid "B<0>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debc.1:44 ../scripts/debchange.1:125 ../scripts/debclean.1:43
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:68
+#: ../scripts/uscan.pl:2000
+msgid "Never check the directory name."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debc.1:44 ../scripts/debchange.1:125 ../scripts/debclean.1:43
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:68
+#: ../scripts/uscan.pl:1930 ../scripts/uscan.pl:2002
+#, no-wrap
+msgid "B<1>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:48 ../scripts/debchange.1:129 ../scripts/debclean.1:47
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:72
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for I<debian/changelog>. This is the default behaviour."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debc.1:48 ../scripts/debchange.1:129 ../scripts/debclean.1:47
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:72
+#: ../scripts/uscan.pl:2009
+#, no-wrap
+msgid "B<2>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debc.1:51 ../scripts/debchange.1:132 ../scripts/debclean.1:50
+#: ../scripts/debi.1:52 ../scripts/debrelease.1:43 ../scripts/debuild.1:75
+#: ../scripts/uscan.pl:2011
+msgid "Always check the directory name."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:64 ../scripts/debclean.1:63 ../scripts/debi.1:65
+#: ../scripts/debrelease.1:56
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a '/', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'PACKAGE', this will be replaced by the source package name, as "
+"determined from the changelog. The default value for the regex is: "
+"\\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and "
+"PACKAGE-version."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debc.1:71 ../scripts/debdiff.1:170 ../scripts/debi.1:72
+#: ../scripts/debrelease.1:81
+#, no-wrap
+msgid "B<--debs-dir> I<directory>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:77
+msgid ""
+"Look for the I<.changes>, I<.deb> and I<.udeb> files in I<directory> instead "
+"of the parent of the source directory. This should either be an absolute "
+"path or relative to the top of the source directory."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debc.1:77 ../scripts/debchange.1:382 ../scripts/debclean.1:72
+#: ../scripts/debi.1:87 ../scripts/debrelease.1:87 ../scripts/debuild.1:313
+#: ../scripts/uscan.pl:1652
+#, no-wrap
+msgid "B<--check-dirname-level> I<N>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:81 ../scripts/debc.1:85 ../scripts/debclean.1:76
+#: ../scripts/debclean.1:80 ../scripts/debi.1:91 ../scripts/debi.1:95
+#: ../scripts/debrelease.1:91 ../scripts/debrelease.1:95
+#: ../scripts/debuild.1:317 ../scripts/debuild.1:321
+msgid ""
+"See the above section B<Directory name checking> for an explanation of this "
+"option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debc.1:81 ../scripts/debchange.1:386 ../scripts/debclean.1:76
+#: ../scripts/debi.1:91 ../scripts/debrelease.1:91 ../scripts/debuild.1:317
+#: ../scripts/uscan.pl:1656
+#, no-wrap
+msgid "B<--check-dirname-regex> I<regex>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debc.1:85
+#, no-wrap
+msgid "B<--list-changes>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:92
+msgid ""
+"List the filename of the .changes file, and do not display anything "
+"else. This option only makes sense if a .changes file is NOT passed "
+"explicitly in the command line. This can be used for example in a script "
+"that needs to reference the .changes file, without having to duplicate the "
+"heuristics for finding it that debc already implements."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debc.1:92
+#, no-wrap
+msgid "B<--list-debs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:95
+msgid "List the filenames of the .deb packages, and do not display their contents."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:108 ../scripts/debchange.1:411 ../scripts/debclean.1:99
+#: ../scripts/debi.1:115 ../scripts/debrelease.1:111 ../scripts/debrsign.1:63
+#: ../scripts/debsign.1:111 ../scripts/nmudiff.1:98
+#: ../scripts/pts-subscribe.1:48 ../scripts/uupdate.1:113
+#: ../scripts/who-uploads.1:57
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced in that order to set configuration variables. Command line options "
+"can be used to override configuration file settings. Environment variable "
+"settings are ignored for this purpose. The currently recognised variables "
+"are:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debc.1:108 ../scripts/debdiff.1:237 ../scripts/debi.1:115
+#: ../scripts/debrelease.1:116 ../scripts/debsign.1:123
+#, no-wrap
+msgid "B<DEBRELEASE_DEBS_DIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:118
+msgid ""
+"This specifies the directory in which to look for the I<.changes>, I<.deb> "
+"and I<.udeb> files, and is either an absolute path or relative to the top of "
+"the source tree. This corresponds to the B<--debs-dir> command line "
+"option. This directive could be used, for example, if you always use "
+"B<pbuilder> or B<svn-buildpackage> to build your packages. Note that it "
+"also affects B<debrelease>(1) in the same way, hence the strange name of the "
+"option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debc.1:118 ../scripts/debchange.1:419 ../scripts/debclean.1:103
+#: ../scripts/debi.1:125 ../scripts/debrelease.1:125 ../scripts/debuild.1:397
+#: ../doc/devscripts.conf.5:42
+#, no-wrap
+msgid "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL>, B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:125 ../scripts/debclean.1:110 ../scripts/debi.1:132
+#: ../scripts/debrelease.1:132 ../scripts/debuild.1:404
+msgid ""
+"See the above section B<Directory name checking> for an explanation of these "
+"variables. Note that these are package-wide configuration variables, and "
+"will therefore affect all B<devscripts> scripts which check their value, as "
+"described in their respective manpages and in B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:129
+msgid "B<debdiff>(1), B<dpkg-deb>(1), B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:131
+msgid ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, based on an original script by "
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/debchange.1:1
+#, no-wrap
+msgid "DEBCHANGE"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:4
+msgid ""
+"debchange - Tool for maintenance of the debian/changelog file in a source "
+"package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:6
+msgid "B<debchange> [I<options>] [I<text> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:8
+msgid "B<dch> [I<options>] [I<text> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:33
+msgid ""
+"B<debchange> or its alias B<dch> will add a new comment line to the Debian "
+"changelog in the current source tree. This command must be run from within "
+"that tree. If the text of the change is given on the command line, "
+"B<debchange> will run in batch mode and simply add the text, with line "
+"breaks as necessary, at the appropriate place in I<debian/changelog> (or the "
+"changelog specified by options, as described below). If the text given on "
+"the command line is a null string, B<debchange> will run in batch mode "
+"without adding any text. If the text given on the command line is a space "
+"string, B<debchange> will run in batch mode and add a blank changelog "
+"entry. If no text is specified then B<debchange> will run the editor as "
+"determined by B<sensible-editor> for you to edit the file. (The environment "
+"variables B<VISUAL> and B<EDITOR> are used in this order to determine which "
+"editor to use.) Editors which understand the I<+n> option for starting the "
+"editing on a specified line will use this to move to the correct line of the "
+"file for editing. If the editor is quit without modifying the temporary "
+"file, B<debchange> will exit without touching the existing changelog. "
+"B<Note that the changelog is assumed to be encoded with the UTF-8 encoding. "
+"If it is not, problems may occur.> Please see the B<iconv>(1) manpage to "
+"find out how to convert changelogs from legacy encodings. Finally, a "
+"I<changelog> or I<NEWS> file can be created from scratch using the "
+"B<--create> option described below."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:46
+msgid ""
+"B<debchange> also supports automatically producing bug-closing changelog "
+"entries, using the B<--closes> option. This will usually query the BTS, the "
+"Debian Bug Tracking System (see https://bugs.debian.org/) to determine the "
+"title of the bug and the package in which it occurs. This behaviour can be "
+"stopped by giving a B<--noquery> option or by setting the configuration "
+"variable B<DEBCHANGE_QUERY_BTS> to I<no>, as described below. In either "
+"case, the editor (as described above) will always be invoked to give an "
+"opportunity to modify the entries, and the changelog will be accepted "
+"whether or not modifications are made. An extra changelog entry can be "
+"given on the command line in addition to the closes entries."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:53
+msgid ""
+"At most one of B<--append>, B<--increment>, B<--edit>, B<--release>, and "
+"B<--newversion> may be specified as listed below. If no options are "
+"specified, B<debchange> will use heuristics to guess whether or not the "
+"package has been successfully released, and behave as if B<--increment> had "
+"been specified if the package has been released, or otherwise as if "
+"B<--append> has been specified."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:68
+msgid ""
+"Two different sets of heuristics can be used, as controlled by the "
+"B<--release-heuristic> option or the B<DEBCHANGE_RELEASE_HEURISTIC> "
+"configuration variable. The default I<changelog> heuristic assumes the "
+"package has been released unless its changelog contains B<UNRELEASED> in the "
+"distribution field. If this heuristic is enabled then the distribution will "
+"default to B<UNRELEASED> in new changelog entries, and the B<--mainttrailer> "
+"option described below will be automatically enabled. This can be useful if "
+"a package can be released by different maintainers, or if you do not keep "
+"the upload logs. The alternate I<log> heuristic determines if a package has "
+"been released by looking for an appropriate B<dupload>(1) or B<dput>(1) log "
+"file in the parent directory. A warning will be issued if the log file is "
+"found but a successful upload is not recorded. This may be because the "
+"previous upload was performed with a version of B<dupload> prior to 2.1 or "
+"because the upload failed."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:86
+msgid ""
+"If either B<--increment> or B<--newversion> is used, the name and email for "
+"the new version will be determined as follows. If the environment variable "
+"B<DEBFULLNAME> is set, this will be used for the maintainer full name; if "
+"not, then B<NAME> will be checked. If the environment variable B<DEBEMAIL> "
+"is set, this will be used for the email address. If this variable has the "
+"form \"name E<lt>emailE<gt>\", then the maintainer name will also be taken "
+"from here if neither B<DEBFULLNAME> nor B<NAME> is set. If this variable is "
+"not set, the same test is performed on the environment variable B<EMAIL>. "
+"Next, if the full name has still not been determined, then use "
+"B<getpwuid>(3) to determine the name from the password file. If this fails, "
+"use the previous changelog entry. For the email address, if it has not been "
+"set from B<DEBEMAIL> or B<EMAIL>, then look in I</etc/mailname>, then "
+"attempt to build it from the username and FQDN, otherwise use the email "
+"address in the previous changelog entry. In other words, it's a good idea "
+"to set B<DEBEMAIL> and B<DEBFULLNAME> when using this script."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:99
+msgid ""
+"Support is included for changelogs that record changes by multiple "
+"co-maintainers of a package. If an entry is appended to the current "
+"version's entries, and the maintainer is different from the maintainer who "
+"is listed as having done the previous entries, then lines will be added to "
+"the changelog to tell which maintainers made which changes. Currently only "
+"one of the several such styles of recording this information is supported, "
+"in which the name of the maintainer who made a set of changes appears on a "
+"line before the changes, inside square brackets. This can be switched on and "
+"off using the B<-->[B<no>]B<multimaint> option or the "
+"B<DEBCHANGE_MULTIMAINT> configuration file option; the default is to enable "
+"it. Note that if an entry has already been marked in this way, then this "
+"option will be silently ignored."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:105
+msgid ""
+"If the directory name of the source tree has the form I<package>-I<version>, "
+"then B<debchange> will also attempt to rename it if the (upstream) version "
+"number changes. This can be prevented by using the B<--preserve> command "
+"line or configuration file option as described below."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:109
+msgid ""
+"If B<--force-bad-version> or B<--allow-lower-version> is used, B<debchange> "
+"will not stop if the new version is less than the current one. This is "
+"especially useful while doing backports."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:120
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debchange> will climb the directory tree until it finds a "
+"I<debian/changelog> file. As a safeguard against stray files causing "
+"potential problems, it will examine the name of the parent directory once it "
+"finds the I<debian/changelog> file, and check that the directory name "
+"corresponds to the package name. Precisely how it does this is controlled "
+"by two configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:145
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a 'B</>', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'B<PACKAGE>', this will be replaced by the source package name, as "
+"determined from the changelog. The default value for the regex is: "
+"\\'B<PACKAGE(-.+)?>', thus matching directory names such as B<PACKAGE> and "
+"B<PACKAGE->I<version>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:149
+msgid ""
+"The default changelog to be edited is I<debian/changelog>; however, this can "
+"be changed using the B<--changelog> or B<--news> options or the B<CHANGELOG> "
+"environment variable, as described below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:150
+#, no-wrap
+msgid "B<--append>, B<-a>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:153
+msgid "Add a new changelog entry at the end of the current version's entries."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:153
+#, no-wrap
+msgid "B<--increment>, B<-i>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:166
+msgid ""
+"Increment either the final component of the Debian release number or, if "
+"this is a native Debian package, the version number. On Ubuntu or Tanglu, "
+"this will also change the suffix from buildX to ubuntu1/tanglu1. Use B<-R>, "
+"B<--rebuild> for a no change rebuild increment. This creates a new section "
+"at the beginning of the changelog with appropriate headers and footers. "
+"Also, if this is a new version of a native Debian package, the directory "
+"name is changed to reflect this. If B<DEBCHANGE_RELEASE_HEURISTIC> is "
+"I<changelog> (default) and the current release is I<UNRELEASED>, this will "
+"only change the version of the current changelog stanza. Otherwise, this "
+"will create a new changelog stanza with the new version."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:166
+#, no-wrap
+msgid "B<--newversion >I<version>, B<-v >I<version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:176
+msgid ""
+"This specifies the version number (including the Debian release part) "
+"explicitly and behaves as the B<--increment> option in other respects. It "
+"will also change the directory name if the upstream version number has "
+"changed. If B<DEBCHANGE_RELEASE_HEURISTIC> is I<changelog> (default) and "
+"the current release is I<UNRELEASED>, this will only change the version of "
+"the current changelog stanza. Otherwise, this will create a new changelog "
+"stanza with the new version."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:176
+#, no-wrap
+msgid "B<--edit>, B<-e>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:179
+msgid "Edit the changelog in an editor."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:179
+#, no-wrap
+msgid "B<--release>, B<-r>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:188
+msgid ""
+"Finalize the changelog for a release. Update the changelog timestamp. If "
+"the distribution is set to B<UNRELEASED>, change it to the distribution from "
+"the previous changelog entry (or another distribution as specified by "
+"B<--distribution>). If there are no previous changelog entries and an "
+"explicit distribution has not been specified, B<unstable> will be used (or "
+"the name of the current development release when run under Ubuntu)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:188
+#, no-wrap
+msgid "B<--force-save-on-release>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:193
+msgid ""
+"When B<--release> is used, an editor is opened to allow inspection of the "
+"changelog. The user is required to save the file to accept the modified "
+"changelog, otherwise the original will be kept (default)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:193
+#, no-wrap
+msgid "B<--no-force-save-on-release>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:199
+msgid ""
+"Do not do so. Note that a dummy changelog entry may be supplied in order to "
+"achieve the same effect - e.g. B<debchange --release \"\">. The entry will "
+"not be added to the changelog but its presence will suppress the editor."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:211
+msgid ""
+"This will create a new I<debian/changelog> file (or I<NEWS> if the B<--news> "
+"option is used). You must be in the top-level directory to use this; no "
+"directory name checking will be performed. The package name and version can "
+"either be specified using the B<--package> and B<--newversion> options, "
+"determined from the directory name using the B<--fromdirname> option or "
+"entered manually into the generated I<changelog> file. The maintainer name "
+"is determined from the environment if this is possible, and the distribution "
+"is specified either using the B<--distribution> option or in the generated "
+"I<changelog> file."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:211
+#, no-wrap
+msgid "B<--empty>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:218
+msgid ""
+"When used in combination with B<--create>, suppress the automatic addition "
+"of an \"B<initial release>\" changelog entry (so that the next invocation of "
+"B<debchange> adds the first entry). Note that this will cause a "
+"B<dpkg-parsechangelog> warning on the next invocation due to the lack of "
+"changes."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debchange.1:218 ../scripts/mk-origtargz.pl:72
+#: ../scripts/uscan.pl:1683
+#, no-wrap
+msgid "B<--package> I<package>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:223
+msgid ""
+"This specifies the package name to be used in the new changelog; this may "
+"only be used in conjunction with the B<--create>, B<--increment> and "
+"B<--newversion> options."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:223
+#, no-wrap
+msgid "B<--nmu>, B<-n>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:232
+msgid ""
+"Increment the Debian release number for a non-maintainer upload by either "
+"appending a \"B<.1>\" to a non-NMU version number (unless the package is "
+"Debian native, in which case \"B<+nmu1>\" is appended) or by incrementing an "
+"NMU version number, and add an NMU changelog comment. This happens "
+"automatically if the packager is neither in the B<Maintainer> nor the "
+"B<Uploaders> field in I<debian/control>, unless B<DEBCHANGE_AUTO_NMU> is set "
+"to I<no> or the B<--no-auto-nmu> option is used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:232
+#, no-wrap
+msgid "B<--bin-nmu>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:237
+msgid ""
+"Increment the Debian release number for a binary non-maintainer upload by "
+"either appending a \"B<+b1>\" to a non-binNMU version number or by "
+"incrementing a binNMU version number, and add a binNMU changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:237
+#, no-wrap
+msgid "B<--qa>, B<-q>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:241
+msgid ""
+"Increment the Debian release number for a Debian QA Team upload, and add a "
+"B<QA upload> changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:241
+#, no-wrap
+msgid "B<--rebuild>, B<-R>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:245
+msgid ""
+"Increment the Debian release number for a no-change rebuild by appending a "
+"\"build1\" or by incrementing a rebuild version number."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:245
+#, no-wrap
+msgid "B<--security>, B<-s>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:249
+msgid ""
+"Increment the Debian release number for a Debian Security Team "
+"non-maintainer upload, and add a B<Security Team upload> changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:249
+#, no-wrap
+msgid "B<--lts>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:253
+msgid ""
+"Increment the Debian release number for a LTS Security Team non-maintainer "
+"upload, and add a B<LTS Security Team upload> changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:253
+#, no-wrap
+msgid "B<--team>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:257
+msgid ""
+"Increment the Debian release number for a team upload, and add a B<Team "
+"upload> changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:257
+#, no-wrap
+msgid "B<--upstream>, B<-U>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:261
+msgid ""
+"Don't append B<distro-name1> to the version on a derived "
+"distribution. Increment the Debian version."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:261
+#, no-wrap
+msgid "B<--bpo>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:265
+msgid ""
+"Increment the Debian release number for an upload to bullseye-backports, and "
+"add a backport upload changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:265
+#, no-wrap
+msgid "B<--stable>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:269
+msgid ""
+"Increment the Debian release number for an upload to the current stable "
+"release."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:269
+#, no-wrap
+msgid "B<--local>, B<-l>I<suffix>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:272
+#, no-wrap
+msgid " Add a suffix to the Debian version number for a local build.\n"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:272
+#, no-wrap
+msgid "B<--force-bad-version>, B<-b>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:276 ../scripts/uupdate.1:66
+msgid ""
+"Force a version number to be less than the current one (e.g., when "
+"backporting)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:276
+#, no-wrap
+msgid "B<--allow-lower-version >I<pattern>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:280
+msgid ""
+"Allow a version number to be less than the current one if the new version "
+"matches the specified pattern."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:280
+#, no-wrap
+msgid "B<--force-distribution>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:284
+msgid ""
+"Force the provided distribution to be used, even if it doesn't match the "
+"list of known distributions (e.g. for unofficial distributions)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:284
+#, no-wrap
+msgid "B<--auto-nmu>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:288
+msgid ""
+"Attempt to automatically determine whether a change to the changelog "
+"represents a Non Maintainer Upload. This is the default."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:288
+#, no-wrap
+msgid "B<--no-auto-nmu>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:292
+msgid ""
+"Disable automatic NMU detection. Equivalent to setting "
+"B<DEBCHANGE_AUTO_NMU> to I<no>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:292
+#, no-wrap
+msgid "B<--fromdirname>, B<-d>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:302
+msgid ""
+"This will take the upstream version number from the directory name, which "
+"should be of the form I<package>B<->I<version>. If the upstream version "
+"number has increased from the most recent changelog entry, then a new entry "
+"will be made with version number I<version>B<-1> (or I<version> if the "
+"package is Debian native), with the same epoch as the previous package "
+"version. If the upstream version number is the same, this option will "
+"behave in the same way as B<-i>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:302
+#, no-wrap
+msgid "B<--closes>I< nnnnn>[B<,>I<nnnnn >...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:308
+msgid ""
+"Add changelog entries to close the specified bug numbers. Also invoke the "
+"editor after adding these entries. Will generate warnings if the BTS cannot "
+"be contacted (and B<--noquery> has not been specified), or if there are "
+"problems with the bug report located."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:308
+#, no-wrap
+msgid "B<-->[B<no>]B<query>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:311
+msgid "Should we attempt to query the BTS when generating closes entries?"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:311
+#, no-wrap
+msgid "B<--preserve>, B<-p>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:316
+msgid ""
+"Preserve the source tree directory name if the upstream version number (or "
+"the version number of a Debian native package) changes. See also the "
+"configuration variables section below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:316
+#, no-wrap
+msgid "B<--no-preserve>, B<--nopreserve>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:319
+msgid "Do not preserve the source tree directory name (default)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:319
+#, no-wrap
+msgid "B<--vendor >I<vendor>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:324
+msgid ""
+"Override the distributor ID over the default returned by dpkg-vendor. This "
+"name is used for heuristics applied to new package versions and for sanity "
+"checking of the target distribution."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:324
+#, no-wrap
+msgid "B<--distribution >I<dist>, B<-D >I<dist>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:329
+msgid ""
+"Use the specified distribution in the changelog entry being edited, instead "
+"of using the previous changelog entry's distribution for new entries or the "
+"existing value for existing entries."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:329
+#, no-wrap
+msgid "B<--urgency >I<urgency>, B<-u >I<urgency>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:334
+msgid ""
+"Use the specified urgency in the changelog entry being edited, instead of "
+"using the default \"B<medium>\" for new entries or the existing value for "
+"existing entries."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:334
+#, no-wrap
+msgid "B<--changelog >I<file>, B<-c >I<file>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:340
+msgid ""
+"This will edit the changelog I<file> instead of the standard "
+"I<debian/changelog>. This option overrides any B<CHANGELOG> environment "
+"variable setting. Also, no directory traversing or checking will be "
+"performed when this option is used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:340
+#, no-wrap
+msgid "B<--news> [I<newsfile>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:346
+msgid ""
+"This will edit I<newsfile> (by default, I<debian/NEWS>) instead of the "
+"regular changelog. Directory searching will be performed. The changelog "
+"will be examined in order to determine the current package version."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:346
+#, no-wrap
+msgid "B<-->[B<no>]B<multimaint>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:351
+msgid ""
+"Should we indicate that parts of a changelog entry have been made by "
+"different maintainers? Default is yes; see the discussion above and also the "
+"B<DEBCHANGE_MULTIMAINT> configuration file option below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:351
+#, no-wrap
+msgid "B<-->[B<no>]B<multimaint-merge>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:356
+msgid ""
+"Should all changes made by the same author be merged into the same changelog "
+"section? Default is no; see the discussion above and also the "
+"B<DEBCHANGE_MULTIMAINT_MERGE> configuration file option below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:356
+#, no-wrap
+msgid "B<--maintmaint>, B<-m>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:364
+msgid ""
+"Do not modify the maintainer details previously listed in the changelog. "
+"This is useful particularly for sponsors wanting to automatically add a "
+"sponsorship message without disrupting the other changelog details. Note "
+"that there may be some interesting interactions if multi-maintainer mode is "
+"in use; you will probably wish to check the changelog manually before "
+"uploading it in such cases."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:364
+#, no-wrap
+msgid "B<--controlmaint>, B<-M>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:372
+msgid ""
+"Use maintainer details from the I<debian/control> B<Maintainer> field rather "
+"than relevant environment variables (B<DEBFULLNAME>, B<DEBEMAIL>, etc.). "
+"This option might be useful to restore details of the main maintainer in the "
+"changelog trailer after a bogus edit (e.g. when B<-m> was intended but "
+"forgot) or when releasing a package in the name of the main maintainer "
+"(e.g. the team)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:372
+#, no-wrap
+msgid "B<-->[B<no>]B<mainttrailer>, B<-t>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:382
+msgid ""
+"If B<mainttrailer> is set, it will avoid modifying the existing changelog "
+"trailer line (i.e. the maintainer and date-stamp details), unless used with "
+"options that require the trailer to be modified (e.g. B<--create>, "
+"B<--release>, B<-i>, B<--qa>, etc.) This option differs from "
+"B<--maintmaint> in that it will use multi-maintainer mode if appropriate, "
+"with the exception of editing the trailer. See also the "
+"B<DEBCHANGE_MAINTTRAILER> configuration file option below."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:386 ../scripts/debchange.1:390
+msgid ""
+"See the above section \"B<Directory name checking>\" for an explanation of "
+"this option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:394
+#, no-wrap
+msgid "B<--release-heuristic> I<log>|I<changelog>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:399
+msgid ""
+"Controls how B<debchange> determines if a package has been released, when "
+"deciding whether to create a new changelog entry or append to an existing "
+"changelog entry."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:405 ../scripts/debclean.1:93
+#: ../scripts/debrelease.1:105 ../scripts/debsign.1:105
+#: ../scripts/dep3changelog.1:22 ../scripts/dscverify.1:43
+#: ../scripts/nmudiff.1:92 ../scripts/pts-subscribe.1:34
+#: ../scripts/uupdate.1:107 ../scripts/who-uploads.1:51
+msgid "Display version and copyright information and exit successfully."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:411
+#, no-wrap
+msgid "B<DEBCHANGE_PRESERVE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:415
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve> command "
+"line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:415
+#, no-wrap
+msgid "B<DEBCHANGE_QUERY_BTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:419
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--noquery> command "
+"line parameter being used."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:426
+msgid ""
+"See the above section \"B<Directory name checking>\" for an explanation of "
+"these variables. Note that these are package-wide configuration variables, "
+"and will therefore affect all B<devscripts> scripts which check their value, "
+"as described in their respective manpages and in B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:426
+#, no-wrap
+msgid "B<DEBCHANGE_RELEASE_HEURISTIC>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:431
+msgid ""
+"Controls how B<debchange> determines if a package has been released, when "
+"deciding whether to create a new changelog entry or append to an existing "
+"changelog entry. Can be either I<log> or I<changelog>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:431
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:436
+msgid ""
+"If set to I<no>, B<debchange> will not introduce multiple-maintainer "
+"distinctions when a different maintainer appends an entry to an existing "
+"changelog. See the discussion above. Default is I<yes>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:436
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT_MERGE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:442
+msgid ""
+"If set to I<yes>, when adding changes in multiple-maintainer mode "
+"B<debchange> will check whether previous changes by the current maintainer "
+"exist and add the new changes to the existing block rather than creating a "
+"new block. Default is I<no>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:442
+#, no-wrap
+msgid "B<DEBCHANGE_MAINTTRAILER>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:446
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--nomainttrailer> "
+"command line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:446
+#, no-wrap
+msgid "B<DEBCHANGE_TZ>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:450
+msgid ""
+"Use this timezone for changelog entries. Default is the user/system "
+"timezone as shown by `B<date -R>` and affected by the environment variable "
+"B<TZ>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:450
+#, no-wrap
+msgid "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:454
+msgid ""
+"If this is set, then it is the same as the B<--allow-lower-version> command "
+"line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:454
+#, no-wrap
+msgid "B<DEBCHANGE_AUTO_NMU>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:460
+msgid ""
+"If this is set to I<no> then B<debchange> will not attempt to automatically "
+"determine whether the current changelog stanza represents an NMU. The "
+"default is I<yes>. See the discussion of the B<--nmu> option above."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:460
+#, no-wrap
+msgid "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:464
+msgid ""
+"If this is set to I<no>, then it is the same as the "
+"B<--no-force-save-on-release> command line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:464
+#, no-wrap
+msgid "B<DEBCHANGE_VENDOR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:468
+msgid ""
+"Use this vendor instead of the default (dpkg-vendor output). See "
+"B<--vendor> for details."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/debchange.1:468 ../scripts/dep3changelog.1:22
+#: ../doc/devscripts.1:16 ../doc/devscripts.1:20 ../scripts/ltnu.pod:68
+#: ../scripts/mass-bug.pl:136 ../scripts/mk-build-deps.pl:126
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:469 ../scripts/dep3changelog.1:23
+#, no-wrap
+msgid "B<DEBEMAIL>, B<EMAIL>, B<DEBFULLNAME>, B<NAME>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:472 ../scripts/dep3changelog.1:26
+msgid "See the above description of the use of these environment variables."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:472
+#, no-wrap
+msgid "B<CHANGELOG>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:478
+msgid ""
+"This variable specifies the changelog to edit in place of "
+"I<debian/changelog>. No directory traversal or checking is performed when "
+"this variable is set. This variable is overridden by the B<--changelog> "
+"command-line setting."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:478
+#, no-wrap
+msgid "B<VISUAL>, B<EDITOR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:482
+msgid ""
+"These environment variables (in this order) determine the editor used by "
+"B<sensible-editor>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:488
+msgid "B<debc>(1), B<debclean>(1), B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:491
+msgid ""
+"The original author was Christoph Lameter E<lt>clameter@debian.orgE<gt>. "
+"Many substantial changes and improvements were made by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:26
+msgid "debcheckout - checkout the development repository of a Debian package"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:32
+msgid "B<debcheckout> [I<OPTIONS>] I<PACKAGE> [I<DESTDIR>]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:34
+msgid "B<debcheckout> [I<OPTIONS>] I<REPOSITORY_URL> [I<DESTDIR>]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:36
+msgid "B<debcheckout> B<--help>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:42
+msgid ""
+"B<debcheckout> retrieves the information about the Version Control System "
+"used to maintain a given Debian package (the I<PACKAGE> argument), and then "
+"checks out the latest (potentially unreleased) version of the package from "
+"its repository. By default the repository is checked out to the I<PACKAGE> "
+"directory; this can be overridden by providing the I<DESTDIR> argument."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:48
+msgid ""
+"The information about where the repository is available is expected to be "
+"found in B<Vcs-*> fields available in the source package record. For "
+"example, the B<vim> package exposes such information with a field like "
+"S<B<Vcs-Hg: http://hg.debian.org/hg/pkg-vim/vim>>, you can see it by "
+"grepping through B<apt-cache showsrc vim>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:54
+msgid ""
+"If more than one source package record containing B<Vcs-*> fields is "
+"available, B<debcheckout> will select the record with the highest version "
+"number. Alternatively, a particular version may be selected from those "
+"available by specifying the package name as I<PACKAGE>=I<VERSION>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:59
+msgid ""
+"If you already know the URL of a given repository you can invoke "
+"B<debcheckout> directly on it, but you will probably need to pass the "
+"appropriate B<-t> flag. That is, some heuristics are in use to guess the "
+"repository type from the URL; if they fail, you might want to override the "
+"guessed type using B<-t>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:65
+msgid ""
+"The currently supported version control systems are: Arch (arch), Bazaar "
+"(bzr), CVS (cvs), Darcs (darcs), Git (git), Mercurial (hg) and Subversion "
+"(svn)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:70
+msgid "B<GENERAL OPTIONS>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:74
+msgid "B<-a>, B<--auth>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:76
+msgid ""
+"Work in authenticated mode; this means that for known repositories (mainly "
+"those hosted on S<I<https://salsa.debian.org>>) URL rewriting is attempted "
+"before checking out, to ensure that the repository can be committed to. For "
+"example, for Git repositories hosted on Salsa this means that "
+"S<I<git@salsa.debian.org:...git>> will be used instead of "
+"S<I<https://salsa.debian.org/...git>>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:83
+msgid ""
+"There are built-in rules for salsa.debian.org and github.com. Other hosts "
+"can be configured using B<DEBCHECKOUT_AUTH_URLS>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:86
+msgid "B<-d>, B<--details>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:88
+msgid ""
+"Only print a list of detailed information about the package repository, "
+"without checking it out; the output format is a list of fields, each field "
+"being a pair of TAB-separated field name and field value. The actual fields "
+"depend on the repository type. This action might require a network "
+"connection to the remote repository."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:94
+msgid "Also see B<-p>. This option and B<-p> are mutually exclusive."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:98
+msgid "Print a detailed help message and exit."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:100
+msgid "B<-p>, B<--print>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:102
+msgid ""
+"Only print a summary about package repository information, without checking "
+"it out; the output format is TAB-separated with two fields: repository type, "
+"repository URL. This action works offline, it only uses \"static\" "
+"information as known by APT's cache."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:107
+msgid "Also see B<-d>. This option and B<-d> are mutually exclusive."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:109
+msgid "B<-P> I<package>, B<--package> I<package>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:111
+msgid ""
+"When checking out a repository URL, instead of trying to guess the package "
+"name from the URL, use this package name."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:114
+msgid "B<-t> I<TYPE>, B<--type> I<TYPE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:116
+msgid ""
+"Override the repository type (which defaults to some heuristics based on the "
+"URL or, in case of heuristic failure, the fallback \"git\"); should be one "
+"of the currently supported repository types."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:120
+msgid "B<-u> I<USERNAME>, B<--user> I<USERNAME>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:122
+msgid ""
+"Specify the login name to be used in authenticated mode (see B<-a>). This "
+"option implies B<-a>: you don't need to specify both."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:125
+msgid "B<-f> I<FILE>, B<--file> I<FILE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:127
+msgid ""
+"Specify that the named file should be extracted from the repository and "
+"placed in the destination directory. May be used more than once to extract "
+"multiple files."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:131
+msgid "B<--source=never>|B<auto>|B<download-only>|B<always>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:133
+msgid ""
+"Some packages only place the F<debian> directory in version control. "
+"B<debcheckout> can retrieve the remaining parts of the source using "
+"B<apt-get source> and move the files into the checkout."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:139
+msgid "B<never>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:141
+msgid "Only use the repository."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:143
+msgid "B<auto> (default)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:145
+msgid ""
+"If the repository only contains the F<debian> directory, retrieve the source "
+"package, unpack it, and also place the F<.orig.tar.gz> file into the current "
+"directory. Else, do nothing."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:149
+msgid "B<download-only>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:151
+msgid "Always retrieve the I<.orig.tar.gz> file, but do not unpack it."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:153
+msgid "B<always>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:155
+msgid ""
+"Always retrieve the I<.orig.tar.gz> file, and if the repository only "
+"contains the F<debian> directory, unpack it."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:162
+msgid "B<VCS-SPECIFIC OPTIONS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:164
+msgid "I<GIT-SPECIFIC OPTIONS>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:168
+msgid "B<--git-track> I<BRANCHES>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:170
+msgid ""
+"Specify a list of remote branches which will be set up for tracking (as in "
+"S<B<git branch --track>>, see B<git-branch>(1)) after the remote Git "
+"repository has been cloned. The list should be given as a space-separated "
+"list of branch names."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:175
+msgid ""
+"As a shorthand, the string \"B<*>\" can be given to require tracking of all "
+"remote branches."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:182 ../scripts/rmadison.pl:357
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file "
+"settings. Environment variable settings are ignored for this purpose. The "
+"currently recognised variables are:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:190
+msgid "B<DEBCHECKOUT_AUTH_URLS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:192
+msgid ""
+"This variable should be a space separated list of Perl regular expressions "
+"and replacement texts, which must come in pairs: I<REGEXP> I<TEXT> I<REGEXP> "
+"I<TEXT> ... and so on. Each pair denotes a substitution which is applied to "
+"repository URLs if other built-in means of building URLs for authenticated "
+"mode (see B<-a>) have failed."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:198
+msgid ""
+"References to matching substrings in the replacement texts are allowed as "
+"usual in Perl by the means of B<$1>, B<$2>, ... and so on."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:201
+msgid ""
+"This setting is used to configure the \"authenticated mode\" location for "
+"repositories. The Debian repositories on S<salsa.debian.org> are implicitly "
+"defined, as is S<github.com>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:205
+msgid "Here is a sample snippet suitable for the configuration files:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/debcheckout.pl:207
+#, no-wrap
+msgid ""
+" DEBCHECKOUT_AUTH_URLS='\n"
+" ^\\w+://(svn\\.example\\.com)/(.*) svn+ssh://$1/srv/svn/$2\n"
+" ^\\w+://(git\\.example\\.com)/(.*) git+ssh://$1/home/git/$2\n"
+" '\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:212
+msgid ""
+"Note that whitespace is not allowed in either regexps or replacement "
+"texts. Also, given that configuration files are sourced by a shell, you "
+"probably want to use single quotes around the value of this variable."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:217
+msgid "B<DEBCHECKOUT_SOURCE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:219
+msgid ""
+"This variable determines under what scenarios the associated orig.tar.gz for "
+"a package will be downloaded. See the B<--source> option for a description "
+"of the values."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:223
+msgid "B<DEBCHECKOUT_USER>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:225
+msgid ""
+"This variable sets the username for authenticated mode. It can be overridden "
+"with the B<--user> option. Setting this variable does not imply the use of "
+"authenticated mode, it still has to be activated with B<--auth>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:233
+msgid ""
+"B<apt-cache>(8), Section 6.2.5 of the Debian Developer's Reference (for more "
+"information about B<Vcs-*> fields): "
+"S<I<https://www.debian.org/doc/developers-reference/best-pkging-practices.html#bpp-vcs>>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:238
+msgid ""
+"B<debcheckout> and this manpage have been written by Stefano Zacchiroli "
+"<I<zack@debian.org>>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/debclean.1:1
+#, no-wrap
+msgid "DEBCLEAN"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:4
+msgid "debclean - clean up a sourcecode tree"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:6
+msgid "B<debclean> [I<options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:13
+msgid ""
+"B<debclean> walks through the directory tree starting at the directory tree "
+"in which it was invoked, and executes I<debuild -- clean> for each Debian "
+"source directory encountered. These directories are recognised by "
+"containing a debian/changelog file for a package whose name matches that of "
+"the directory. Name matching is described below."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:16
+msgid ""
+"If B<debclean> is invoked from a directory that is already a Debian source "
+"package, it will not descend into its subdirectories."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:25
+msgid ""
+"Also, if the B<--cleandebs> option is given, then in every directory "
+"containing a Debian source tree, all files named *.deb, *.changes and "
+"*.build are removed. The .dsc, .diff.gz and the (.orig).tar.gz files are "
+"not touched so that the release can be reconstructed if necessary, and the "
+".upload files are left so that B<debchange> functions correctly. The "
+"B<--nocleandebs> option prevents this extra cleaning behaviour and the "
+"B<--cleandebs> option forces it. The default is not to clean these files."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:27
+msgid "B<debclean> uses B<debuild>(1) to clean the source tree."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:38
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debclean> will walk through the directory tree searching for "
+"I<debian/changelog> files. As a safeguard against stray files causing "
+"potential problems, it will examine the name of the parent directory once it "
+"finds a I<debian/changelog> file, and check that the directory name "
+"corresponds to the package name. Precisely how it does this is controlled "
+"by two configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debclean.1:64
+#, no-wrap
+msgid "B<--cleandebs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:68
+msgid "Also remove all .deb, .changes and .build files from the parent directory."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debclean.1:68
+#, no-wrap
+msgid "B<--nocleandebs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:72
+msgid ""
+"Do not remove the .deb, .changes and .build files from the parent directory; "
+"this is the default behaviour."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debclean.1:84 ../scripts/debuild.1:321
+#, no-wrap
+msgid "B<-d>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:87
+msgid "Do not run dpkg-checkbuilddeps to check build dependencies."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debclean.1:99
+#, no-wrap
+msgid "B<DEBCLEAN_CLEANDEBS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:103
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--cleandebs> command "
+"line parameter being used."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:113
+msgid "B<debuild>(1), B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:115
+msgid ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; modifications by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:5
+msgid "debcommit - commit changes to a package"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:9
+msgid "B<debcommit> [I<options>] [B<--all> | I<files to commit>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:13
+msgid ""
+"B<debcommit> generates a commit message based on new text in "
+"B<debian/changelog>, and commits the change to a package's repository. It "
+"must be run in a working copy for the package. Supported version control "
+"systems are: B<cvs>, B<git>, B<hg> (mercurial), B<svk>, B<svn> (Subversion), "
+"B<baz>, B<bzr>, B<tla> (arch), B<darcs>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:23
+msgid "B<-c>, B<--changelog> I<path>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:25
+msgid ""
+"Specify an alternate location for the changelog. By default debian/changelog "
+"is used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:28
+msgid "B<-r>, B<--release>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:30
+msgid ""
+"Commit a release of the package. The version number is determined from "
+"debian/changelog, and is used to tag the package in the repository."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:33
+msgid ""
+"Note that svn/svk tagging conventions vary, so debcommit uses svnpath(1) to "
+"determine where the tag should be placed in the repository."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:37
+msgid "B<-R>, B<--release-use-changelog>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:39
+msgid ""
+"When used in conjunction with B<--release>, if there are uncommitted changes "
+"to the changelog then derive the commit message from those changes rather "
+"than using the default message."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:43
+msgid "B<-m> I<text>, B<--message> I<text>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:45
+msgid ""
+"Specify a commit message to use. Useful if the program cannot determine a "
+"commit message on its own based on debian/changelog, or if you want to "
+"override the default message."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:49 ../scripts/tagpending.pl:98
+msgid "B<-n>, B<--noact>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:51
+msgid "Do not actually do anything, but do print the commands that would be run."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:53
+msgid "B<-d>, B<--diff>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:55
+msgid ""
+"Instead of committing, do print the diff of what would have been committed "
+"if this option were not given. A typical usage scenario of this option is "
+"the generation of patches against the current working copy (e.g. when you "
+"don't have commit access right)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:60
+msgid "B<-C>, B<--confirm>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:62
+msgid ""
+"Display the generated commit message and ask for confirmation before "
+"committing it. It is also possible to edit the message at this stage; in "
+"this case, the confirmation prompt will be re-displayed after the editing "
+"has been performed."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:66
+msgid "B<-e>, B<--edit>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:68
+msgid ""
+"Edit the generated commit message in your favorite editor before committing "
+"it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debcommit.pl:71 ../scripts/dget.pl:624
+#: ../scripts/dpkg-depcheck.1:16
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:73
+msgid ""
+"Commit all files. This is the default operation when using a VCS other than "
+"git."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:76
+msgid "B<-s>, B<--strip-message>, B<--no-strip-message>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:78
+msgid ""
+"If this option is set and the commit message has been derived from the "
+"changelog, the characters \"* \" will be stripped from the beginning of the "
+"message."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:82
+msgid ""
+"This option is set by default and ignored if more than one line of the "
+"message begins with \"[*+-] \"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:85
+msgid "B<--sign-commit>, B<--no-sign-commit>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:87
+msgid ""
+"If this option is set, then the commits that debcommit creates will be "
+"signed using gnupg. Currently this is only supported by git, hg, and bzr."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:90
+msgid "B<--sign-tags>, B<--no-sign-tags>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:92
+msgid ""
+"If this option is set, then tags that debcommit creates will be signed using "
+"gnupg. Currently this is only supported by git."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:95
+msgid "B<--changelog-info>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:97
+msgid ""
+"If this option is set, the commit author and date will be determined from "
+"the Maintainer and Date field of the first paragraph in "
+"F<debian/changelog>. This is mainly useful when using B<debchange>(1) with "
+"the B<--no-mainttrailer> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:114
+msgid "B<DEBCOMMIT_STRIP_MESSAGE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:116
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-strip-message> "
+"command line parameter being used. The default is I<yes>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:119
+msgid "B<DEBCOMMIT_SIGN_TAGS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:121
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--sign-tags> command "
+"line parameter being used. The default is I<no>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:124
+msgid "B<DEBCOMMIT_SIGN_COMMITS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:126
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--sign-commit> "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:129
+msgid "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:131
+msgid ""
+"If this is set to I<yes>, then it is the same as the "
+"B<--release-use-changelog> command line parameter being used. The default is "
+"I<no>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debcommit.pl:134 ../scripts/debsign.1:117
+#, no-wrap
+msgid "B<DEBSIGN_KEYID>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:136
+msgid ""
+"This is the key id used for signing tags. If not set, a default will be "
+"chosen by the revision control system."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/debcommit.pl:141
+msgid "VCS SPECIFIC FEATURES"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:145
+msgid "B<tla> / B<baz>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:147
+msgid ""
+"If the commit message contains more than 72 characters, a summary will be "
+"created containing as many full words from the message as will fit within 72 "
+"characters, followed by an ellipsis."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:153
+msgid ""
+"Each of the features described below is applicable only if the commit "
+"message has been automatically determined from the changelog."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:158 ../scripts/uscan.pl:399
+msgid "B<git>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:160
+msgid ""
+"If only a single change is detected in the changelog, B<debcommit> will "
+"unfold it to a single line and behave as if B<--strip-message> was used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:163
+msgid ""
+"Otherwise, the first change will be unfolded and stripped to form a summary "
+"line and a commit message formed using the summary line followed by a blank "
+"line and the changes as extracted from the changelog. B<debcommit> will then "
+"spawn an editor so that the message may be fine-tuned before committing."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:168
+msgid "B<hg> / B<darcs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:170
+msgid ""
+"The first change detected in the changelog will be unfolded to form a single "
+"line summary. If multiple changes were detected then an editor will be "
+"spawned to allow the message to be fine-tuned."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:174
+msgid "B<bzr>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:176
+msgid ""
+"If the changelog entry used for the commit message closes any bugs then "
+"B<--fixes> options to \"bzr commit\" will be generated to associate the "
+"revision and the bugs."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:945
+msgid ""
+"This code is copyright by Joey Hess <joeyh@debian.org>, all rights "
+"reserved. This program comes with ABSOLUTELY NO WARRANTY. You are free to "
+"redistribute this code under the terms of the GNU General Public License, "
+"version 2 or later."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:952 ../scripts/mass-bug.pl:568
+msgid "Joey Hess <joeyh@debian.org>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:956
+msgid "B<debchange>(1), B<svnpath>(1)"
+msgstr ""
+
+#. type: TH
+#: ../scripts/debdiff.1:1
+#, no-wrap
+msgid "DEBDIFF"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:4
+msgid "debdiff - compare file lists in two Debian packages"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:6
+msgid "B<debdiff> [I<options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:8
+msgid "B<debdiff> [I<options>] ... I<deb1 deb2>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:10
+msgid "B<debdiff> [I<options>] ... I<changes1 changes2>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:13
+msgid ""
+"B<debdiff> [I<options>] ... B<--from >I<deb1a deb1b ... >B<--to >I<deb2a "
+"deb2b ...>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:15
+msgid "B<debdiff> [I<options>] ... I<dsc1 dsc2>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:26
+msgid ""
+"B<debdiff> takes the names of two Debian package files (I<.deb>s or "
+"I<.udeb>s) on the command line and compares their contents (considering only "
+"the files in the main package, not the maintenance scripts). It shows which "
+"files have been introduced and which removed between the two package files, "
+"and is therefore useful for spotting files which may have been inadvertently "
+"lost between revisions of the package. It also checks the file owners and "
+"permissions, and compares the control files of the two packages using the "
+"B<wdiff> program. If you want a deeper comparison of two Debian package "
+"files you can use the B<diffoscope> tool."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:29
+msgid ""
+"If no arguments are given, B<debdiff> tries to compare the content of the "
+"current source directory with the last version of the package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:40
+msgid ""
+"B<debdiff> can also handle changes between groups of I<.deb> files in two "
+"ways. The first is to specify two I<.changes> files. In this case, the "
+"I<.deb> files listed in the I<.changes> file will be compared, by taking the "
+"contents of all of the listed I<.deb> files together. (The I<.deb> files "
+"listed are assumed to be in the same directory as the I<.changes> file.) "
+"The second way is to list the I<.deb> files of interest specifically using "
+"the B<--from> ... B<--to> syntax. These both help if a package is broken up "
+"into smaller packages and one wishes to ensure that nothing is lost in the "
+"interim."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:44
+msgid ""
+"B<debdiff> examines the B<devscripts> configuration files as described "
+"below. Command line options override the configuration file settings, "
+"though."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:52
+msgid ""
+"If B<debdiff> is passed two source packages (I<.dsc> files) it will compare "
+"the contents of the source packages. If the source packages differ only in "
+"Debian revision number (that is, the I<.orig.tar.gz> files are the same in "
+"the two I<.dsc> files), then B<interdiff>(1) will be used to compare the two "
+"patch files if this program is available on the system, otherwise a B<diff> "
+"will be performed between the two source trees."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:53
+#, no-wrap
+msgid "B<--dirs>, B<-d>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:58
+msgid ""
+"The default mode of operation is to ignore directory names which appear in "
+"the file list, but they, too, will be considered if this option is given."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:58
+#, no-wrap
+msgid "B<--nodirs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:62
+msgid ""
+"Ignore directory names which appear in the file list. This is the default "
+"and it can be used to override a configuration file setting."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:62
+#, no-wrap
+msgid "B<--move>I< FROM TO>,B< -m>I< FROM TO>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:73
+msgid ""
+"It sometimes occurs that various files or directories are moved around "
+"between revisions. This can be handled using this option. There are two "
+"arguments, the first giving the location of the directory or file in the "
+"first package, and the second in the second. Any files in the first listing "
+"whose names begin with the first argument are treated as having that "
+"substituted for the second argument when the file lists are compared. Any "
+"number of B<--move> arguments may be given; they are processed in the order "
+"in which they appear. This only affects comparing binary packages, not "
+"source packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:73
+#, no-wrap
+msgid "B<--move-regex>I< FROM TO>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:79
+msgid ""
+"This is the same as B<--move>, except that I<FROM> is treated as a regular "
+"expression and the B<perl> substitution command I<s/^FROM/TO/> is applied to "
+"the files. In particular, TO can make use of backreferences such as $1."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:79
+#, no-wrap
+msgid "B<--nocontrol>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:84
+msgid ""
+"B<debdiff> will usually compare the respective control files of the packages "
+"using B<wdiff>(1). This option suppresses this part of the processing."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:84
+#, no-wrap
+msgid "B<--control>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:88
+msgid ""
+"Compare the respective control files; this is the default, and it can be "
+"used to override a configuration file setting."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:88
+#, no-wrap
+msgid "B<--controlfiles>I< FILE>[B<,>I<FILE> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:96
+msgid ""
+"Specify which control files to compare; by default this is just I<control>, "
+"but could include I<postinst>, I<config> and so on. Files will only be "
+"compared if they are present in both I<.debs> being compared. The special "
+"value I<ALL> compares all control files present in both packages, except for "
+"md5sums. This option can be used to override a configuration file setting."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:96
+#, no-wrap
+msgid "B<--wdiff-source-control>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:100
+msgid ""
+"When processing source packages, compare control files using B<wdiff>. "
+"Equivalent to the B<--control> option for binary packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:100
+#, no-wrap
+msgid "B<--no-wdiff-source-control>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:104
+msgid ""
+"Do not compare control files in source packages using B<wdiff>. This is the "
+"default."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:104
+#, no-wrap
+msgid "B<--wp>, B<--wl>, B<--wt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:109
+msgid ""
+"Pass a B<-p>, B<-l> or B<-t> option to B<wdiff> respectively. (This yields "
+"the whole B<wdiff> output rather than just the lines with any changes.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:109
+#, no-wrap
+msgid "B<--show-moved>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:116
+msgid ""
+"If multiple I<.deb> files are specified on the command line, either using "
+"I<.changes> files or the B<--from>/B<--to> syntax, then this option will "
+"also show which files (if any) have moved between packages. (The package "
+"names are simply determined from the names of the I<.deb> files.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:116
+#, no-wrap
+msgid "B<--noshow-moved>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:120 ../scripts/debdiff.1:141
+msgid "The default behaviour; can be used to override a configuration file setting."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:120
+#, no-wrap
+msgid "B<--renamed>I< FROM TO>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:126
+msgid ""
+"If B<--show-moved> is being used and a package has been renamed in the "
+"process, this command instructs B<debdiff> to treat the package in the first "
+"list called I<FROM> as if it were called I<TO>. Multiple uses of this "
+"option are permitted."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:126
+#, no-wrap
+msgid "B<--exclude>I< PATTERN>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:134
+msgid ""
+"Exclude files whose basenames match I<PATTERN>. Multiple uses of this "
+"option are permitted. Note that this option is passed on to B<diff> and has "
+"the same behaviour, so only the basename of the file is considered: in "
+"particular, B<--exclude='*.patch'> will work, but "
+"B<--exclude='debian/patches/*'> will have no practical effect."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:134
+#, no-wrap
+msgid "B<--diffstat>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:137
+msgid "Include the result of B<diffstat> before the generated diff."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:137
+#, no-wrap
+msgid "B<--no-diffstat>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:141
+#, no-wrap
+msgid "B<--auto-ver-sort>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:144
+msgid "When comparing source packages, do so in version order."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:144
+#, no-wrap
+msgid "B<--no-auto-ver-sort>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:150
+msgid ""
+"Compare source packages in the order they were passed on the command-line, "
+"even if that means comparing a package with a higher version against one "
+"with a lower version. This is the default behaviour."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:150
+#, no-wrap
+msgid "B<--unpack-tarballs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:155
+msgid ""
+"When comparing source packages, also unpack tarballs found in the top level "
+"source directory to compare their contents along with the other files. This "
+"is the default behaviour."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:155
+#, no-wrap
+msgid "B<--no-unpack-tarballs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:158
+msgid "Do not unpack tarballs inside source packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:158
+#, no-wrap
+msgid "B<--apply-patches>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:162
+msgid ""
+"If the old and/or new package is in 3.0 (quilt) format, apply the quilt "
+"patches (and remove B<.pc/>) before comparison."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:162
+#, no-wrap
+msgid "B<--no-apply-patches, --noapply-patches>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:166
+msgid ""
+"If the old and/or new package is in 3.0 (quilt) format, do not apply the "
+"quilt patches before comparison. This is the default behaviour."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:176
+msgid ""
+"Look for the I<.dsc> files in I<directory> instead of the parent of the "
+"source directory. This should either be an absolute path or relative to the "
+"top of the source directory."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debdiff.1:182 ../scripts/hardening-check.pl:621
+#, no-wrap
+msgid "B<--quiet>, B<-q>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:185
+msgid "Be quiet if no differences were found."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:185
+#, no-wrap
+msgid "B<--ignore-space>, B<-w>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:188
+msgid "Ignore whitespace in diffs."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:194
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:194
+#, no-wrap
+msgid "B<DEBDIFF_DIRS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:198
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--dirs> command line "
+"parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:198
+#, no-wrap
+msgid "B<DEBDIFF_CONTROL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:203
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--nocontrol> command "
+"line parameter being used. The default is I<yes>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:203
+#, no-wrap
+msgid "B<DEBDIFF_CONTROLFILES>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:208
+msgid ""
+"Which control files to compare, corresponding to the B<--controlfiles> "
+"command line option. The default is I<control>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:208
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_MOVED>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:212
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--show-moved> command "
+"line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:212
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_OPT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:216
+msgid ""
+"This option will be passed to B<wdiff>; it should be one of B<-p>, B<-l> or "
+"B<-t>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:216
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_DIFFSTAT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:220
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--diffstat> command "
+"line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:220
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:224
+msgid ""
+"If this is set to I<yes>, then it is the same as the "
+"B<--wdiff-source-control> command line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:224
+#, no-wrap
+msgid "B<DEBDIFF_AUTO_VER_SORT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:228
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--auto-ver-sort> "
+"command line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:228
+#, no-wrap
+msgid "B<DEBDIFF_UNPACK_TARBALLS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:232
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-unpack-tarballs> "
+"command line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:232
+#, no-wrap
+msgid "B<DEBDIFF_APPLY_PATCHES>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:237
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--apply-patches> "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:247
+msgid ""
+"This specifies the directory in which to look for the I<.dsc> and files, and "
+"is either an absolute path or relative to the top of the source tree. This "
+"corresponds to the B<--debs-dir> command line option. This directive could "
+"be used, for example, if you always use B<pbuilder> or B<svn-buildpackage> "
+"to build your packages. Note that it also affects B<debrelease>(1) in the "
+"same way, hence the strange name of the option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:251
+msgid ""
+"Normally the exit value will be 0 if no differences are reported and 1 if "
+"any are reported. If there is some fatal error, the exit code will be 255."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:259
+msgid ""
+"B<debdiff-apply>(1), B<diffstat>(1), B<dpkg-deb>(1), B<interdiff>(1), "
+"B<wdiff>(1), B<devscripts.conf>(5), B<diffoscope>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:264
+msgid ""
+"B<debdiff> was originally written as a shell script by Yann Dirson "
+"E<lt>dirson@debian.orgE<gt> and rewritten in Perl with many more features by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>. The software may be freely "
+"redistributed under the terms and conditions of the GNU General Public "
+"License, version 2."
+msgstr ""
+
+#. type: TH
+#: ../scripts/debdiff-apply.1:15
+#, no-wrap
+msgid "DEBDIFF-APPLY"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:19
+msgid "debdiff-apply - apply a debdiff to a Debian source package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:23
+msgid "B<debdiff-apply> [options] [orig_dsc_or_dir] [patch_file]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:26
+msgid "B<debdiff-apply> [options] E<lt> [patch_file]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:32
+msgid ""
+"B<debdiff-apply> takes a I<patchfile> that describes the differences between "
+"two Debian source packages I<old> and I<new>, and applies it to a target "
+"Debian source package I<orig>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:38
+msgid ""
+"I<orig> could either be the same as I<old> or it could be different. "
+"I<patchfile> is expected to be a unified diff between two Debian source "
+"trees, as what B<debdiff>(1) normally generates."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:42
+msgid ""
+"Any changes to I<debian/changelog> are dealt with specially, to avoid the "
+"conflicts that changelog diffs typically produce when applied naively. The "
+"exact behaviour may be tweaked in the future, so one should not rely on it."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:47
+msgid ""
+"If I<patchfile> does not apply to I<orig>, even after the special-casing of "
+"I<debian/changelog>, no changes are made and B<debdiff-apply>(1) will exit "
+"with a non-zero error code."
+msgstr ""
+
+#. type: SH
+#: ../scripts/debdiff-apply.1:48
+#, no-wrap
+msgid "ARGUMENTS"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:49
+#, no-wrap
+msgid "orig_dsc_or_dir"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:54
+msgid ""
+"Target to apply the patch to. This can either be an unpacked source tree, or "
+"a \\[char46]dsc file. In the former case, the directory is modified "
+"in-place; in the latter case, a second .dsc is created. Default: I<.>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:54
+#, no-wrap
+msgid "patch_file"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:60
+msgid ""
+"Patch file to apply, in the format output by B<debdiff>(1). Default: "
+"I<\\,/dev/stdin\\/>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:65
+msgid "show this help message and exit"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:65 ../scripts/debsnap.1:42 ../scripts/sadt.pod:46
+#: ../doc/suspicious-source.1:38 ../scripts/tagpending.pl:106
+#: ../doc/wrap-and-sort.1:73
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:68
+msgid "Output more information"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:68
+#, no-wrap
+msgid "B<-c> CHANGELOG, B<--changelog> CHANGELOG"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:71
+msgid "Path to debian/changelog; default: debian/changelog"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:71
+#, no-wrap
+msgid "B<-D> DISTRIBUTION, B<--distribution> DISTRIBUTION"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:75
+msgid ""
+"Distribution to use, if the patch doesn't already contain a changelog; "
+"default: experimental"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:75
+#, no-wrap
+msgid "B<--repl>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:78
+msgid "Run the python REPL after processing."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:78
+#, no-wrap
+msgid "B<--source-version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:83
+msgid ""
+"Don't apply the patch; instead print out the version of the package that it "
+"is supposed to be applied to, or nothing if the patch does not specify a "
+"source version."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:83
+#, no-wrap
+msgid "B<--target-version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:89
+msgid ""
+"Don't apply the patch; instead print out the new version of the package "
+"B<debdiff-apply>(1) would generate, when the patch is applied to the the "
+"given target package, as specified by the other arguments."
+msgstr ""
+
+#. type: SS
+#: ../scripts/debdiff-apply.1:89
+#, no-wrap
+msgid "For .dsc patch targets:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:90
+#, no-wrap
+msgid "B<--no-clean>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:94
+msgid ""
+"Don't clean temporary directories after a failure, so you can examine what "
+"failed."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:94
+#, no-wrap
+msgid "B<--quilt-refresh>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:99
+msgid ""
+"If the building of the new source package fails, try to refresh patches "
+"using B<quilt>(1) then try building it again."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:99
+#, no-wrap
+msgid "B<-d> DIRECTORY, B<--directory> DIRECTORY"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:104
+msgid ""
+"Extract the .dsc into this directory, which won't be cleaned up after "
+"B<debdiff-apply>(1) exits. If not given, then it will be extracted to a "
+"temporary directory."
+msgstr ""
+
+#. type: SH
+#: ../scripts/debdiff-apply.1:105 ../scripts/debsnap.1:143
+#: ../doc/edit-patch.1:37 ../doc/suspicious-source.1:51 ../doc/what-patch.1:27
+#: ../doc/wrap-and-sort.1:98
+#, no-wrap
+msgid "AUTHORS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:108
+msgid ""
+"B<debdiff-apply> and this manual page were written by Ximin Luo "
+"E<lt>infinity0@debian.orgE<gt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:110 ../doc/what-patch.1:34
+msgid "Both are released under the GNU General Public License, version 3 or later."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:112
+msgid "B<debdiff>(1)"
+msgstr ""
+
+#. type: TH
+#: ../scripts/debi.1:1
+#, no-wrap
+msgid "DEBI"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:4
+msgid "debi - install current version of generated Debian package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:6
+msgid "B<debi> [I<options>] [I<changes file>] [I<package> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:21
+msgid ""
+"B<debi> figures out the current version of a package and installs it. If a "
+"I<.changes> file is specified on the command line, the filename must end "
+"with I<.changes>, as this is how the program distinguishes it from package "
+"names. If not, then B<debi> has to be called from within the source code "
+"directory tree. In this case, it will look for the I<.changes> file "
+"corresponding to the current package version (by determining the name and "
+"version number from the changelog, and the architecture in the same way as "
+"B<dpkg-buildpackage>(1) does). It then runs B<debpkg -i> on every I<.deb> "
+"archive listed in the I<.changes> file to install them, assuming that all of "
+"the I<.deb> archives live in the same directory as the I<.changes> file. "
+"Note that you probably don't want to run this program on a I<.changes> file "
+"relating to a different architecture after cross-compiling the package!"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:40
+msgid ""
+"In common with several other scripts in the B<devscripts> package, B<debi> "
+"will climb the directory tree until it finds a I<debian/changelog> file. As "
+"a safeguard against stray files causing potential problems, it will examine "
+"the name of the parent directory once it finds the I<debian/changelog> file, "
+"and check that the directory name corresponds to the package name. "
+"Precisely how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and "
+"B<--check-dirname-regex>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:78 ../scripts/debrelease.1:87
+msgid ""
+"Look for the I<.changes> and I<.deb> files in I<directory> instead of the "
+"parent of the source directory. This should either be an absolute path or "
+"relative to the top of the source directory."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debi.1:78
+#, no-wrap
+msgid "B<-m>, B<--multi>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:81
+msgid "Search for a multiarch I<.changes> file, as created by B<dpkg-cross>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debi.1:81
+#, no-wrap
+msgid "B<-u>, B<--upgrade>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:87
+msgid ""
+"Only upgrade packages already installed on the system, rather than "
+"installing all packages listed in the I<.changes> file. Useful for "
+"multi-binary packages when you don't want to have all the binaries installed "
+"at once."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debi.1:95
+#, no-wrap
+msgid "B<--with-depends>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:98
+msgid "Attempt to satisfy the I<Depends> of a package when installing it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debi.1:98
+#, no-wrap
+msgid "B<--tool> I<tool>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:102
+msgid ""
+"Use the specified I<tool> for installing the dependencies of the package(s) "
+"to be installed. By default, B<apt-get> is used."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:125
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and "
+"I<.deb> files, and is either an absolute path or relative to the top of the "
+"source tree. This corresponds to the B<--debs-dir> command line option. "
+"This directive could be used, for example, if you always use B<pbuilder> or "
+"B<svn-buildpackage> to build your packages. Note that it also affects "
+"B<debrelease>(1) in the same way, hence the strange name of the option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:135
+msgid "B<debpkg>(1), B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:140
+msgid ""
+"B<debi> was originally written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. The now-defunct script B<debit> was "
+"originally written by James R. Van Zandt E<lt>jrv@vanzandt.mv.comE<gt>. "
+"They have been moulded into one script together with B<debc>(1) and parts "
+"extensively modified by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/debpkg.1:1
+#, no-wrap
+msgid "DEBPKG"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debpkg.1:4
+msgid "debpkg - wrapper for dpkg"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debpkg.1:6
+msgid "B<debpkg> I<dpkg-options>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debpkg.1:12
+msgid ""
+"B<debpkg> simply invokes B<dpkg>(1) but first becomes superuser so that "
+"B<dpkg> is able to install and remove packages. It also cleans the "
+"environment and resets PATH to a sane default: "
+"\"/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11\" so that local versions of "
+"programs are not run by accident."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debpkg.1:17
+msgid ""
+"B<debpkg> must be given superuser privileges in some way to function "
+"properly. B<Access to debpkg with those privileges is the same as having "
+"superuser access to your machine.> B<debpkg> will abort if it finds that it "
+"neither being run by root nor setuid root."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debpkg.1:23
+msgid ""
+"The B<devscripts> package has been designed to allow B<debpkg> to be made "
+"setuid root. This works by using a compiled wrapper script, which means "
+"that B<suidperl> is not required. See B<dpkg-statoverride>(8) if you wish "
+"to make this program setuid root. B<sudo> or B<super> could also "
+"conceivably be used."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debpkg.1:25
+msgid ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; minor modifications made by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:3
+msgid "debrepro - reproducibility tester for Debian packages"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:7
+msgid "B<debrepro> [I<OPTIONS>] [I<SOURCEDIR>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:11
+msgid ""
+"B<debrepro> will build a given source directory twice, with a set of "
+"variations between the first and the second build, and compare the produced "
+"binary packages. If B<diffoscope> is installed, it is used to compare "
+"non-matching binaries. If B<disorderfs> is installed, it is used during the "
+"build to inject non-determinism in filesystem listing operations."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:18
+msgid ""
+"I<SOURCEDIR> must be a directory containing an unpacked Debian source "
+"package. If I<SOURCEDIR> is omitted, the current directory is assumed."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/debrepro.pod:21
+msgid "OUTPUT DIRECTORY"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:23
+msgid ""
+"At the very end of a build, B<debrepro> will inform the location of the "
+"output directory where the build artifacts can be found. In that directory, "
+"you will find:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:29
+msgid "I<$OUTPUTDIR/first>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:31
+msgid ""
+"Contains the results of the first build, including a copy of the source "
+"tree, and the resulting binary packages."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:34
+msgid "I<$OUTPUTDIR/first/build.sh>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:36
+msgid "Contains the exact build script that was used in the first build."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:38
+msgid "I<$OUTPUTDIR/second>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:40
+msgid ""
+"Contains the results of the second build, including a copy of the source "
+"tree, and the resulting binary packages."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:43
+msgid "I<$OUTPUTDIR/second/build.sh>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:45
+msgid "Contains the exact build script that was used in the second build."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:49
+msgid ""
+"Taking a B<diff(1)> between I<$OUTPUTDIR/first/build.sh> and "
+"I<$OUTPUTDIR/second/build.sh> is an excellent way of figuring out exactly "
+"what changed between the two builds."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/debrepro.pod:53
+msgid "SUPPORTED VARIATIONS"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:57
+msgid "B<user>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:59
+msgid ""
+"The I<$USER> environment variable will contain different values between the "
+"first and second builds."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:62
+msgid "B<path>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:64
+msgid ""
+"During the second build, a fake, non-existing directory will be appended to "
+"the I<$PATH> environment variable."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:67
+msgid "B<umask>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:69
+msgid "The builds will use different umask settings."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:71
+msgid "B<locale>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:73
+msgid "Both I<$LC_ALL> and I<$LANG> will be different across the two builds."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:75
+msgid "B<timezone>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:77
+msgid "I<$TZ> will be different across builds."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:79
+msgid "B<filesystem-ordering>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:81
+msgid ""
+"If B<disorderfs> is installed, both builds will be done under a disorderfs "
+"overlay directory. This will cause filesystem listing operations to be "
+"return items in a non-deterministic order."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:85
+msgid "B<time>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:87
+msgid ""
+"The second build will be executed 213 days, 7 hours and 13 minutes in the "
+"future with regards to the current time (using B<faketime(1)>)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:96
+msgid "-s VARIATION, --skip VARIATION"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:98
+msgid ""
+"Don't perform the named VARIATION. Variation names are the ones used in "
+"their description in section B<SUPPORTED VARIATIONS>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:101
+msgid "-b COMMAND, --before-second-build COMMAND"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:103
+msgid ""
+"Run COMMAND before performing the second build. This can be used for example "
+"to apply a patch to a source tree for the second build, and check whether "
+"(or how) the resulting binaries are affected."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:107 ../scripts/salsa.pl:381
+msgid "Examples:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/debrepro.pod:109
+#, no-wrap
+msgid ""
+" $ debrepro --before-second-build \"git checkout branch-with-changes\"\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/debrepro.pod:111
+#, no-wrap
+msgid ""
+" $ debrepro --before-second-build \"patch -p1 < /path/to/patch\"\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:113
+msgid "-B COMMAND, --build-command COMMAND"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:115
+msgid "Use custom build command. Default: I<dpkg-buildpackage -b -us -uc>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:117
+msgid ""
+"If a custom build command is specified, the restriction of only running "
+"against a Debian source tree is relaxed and you can run debrepro against any "
+"source directory."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:121
+msgid "-a PATTERN, --artifact-pattern PATTERN"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:123
+msgid ""
+"Define a file glob pattern to determine which artifacts need to be compared "
+"across the builds. Default: I<../*.deb>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:126
+msgid "-n, --no-copy"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:128
+msgid ""
+"Do not copy the source directory to the temporary work directory before each "
+"build. Use this to run debrepro against the source directory directly."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:132
+msgid "-t TIME, --timeout TIME"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:134
+msgid ""
+"Apply a timeout to all builds. I<TIME> must be a time specification "
+"compatible with GNU timeout(1)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:138
+msgid "-h, --help"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:140
+msgid "Display this help message and exit."
+msgstr ""
+
+#. type: SH
+#: ../scripts/debrepro.pod:144 ../scripts/debsnap.1:102
+#: ../scripts/dscextract.1:20 ../scripts/transition-check.pl:54
+#: ../scripts/uscan.pl:1917 ../scripts/wnpp-check.1:28
+#, no-wrap
+msgid "EXIT STATUS"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:148 ../scripts/transition-check.pl:61
+#: ../scripts/who-permits-upload.pl:125
+msgid "0Z<>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:150
+msgid "Package is reproducible."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:152
+msgid ""
+"Reproducible here means that the two builds produced the exactly the same "
+"binaries, under the set of variations that B<debrepro> tests. Other sources "
+"of non-determinism in builds that are not yet tested might still affect "
+"builds in the wild."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:157 ../scripts/transition-check.pl:66
+#: ../scripts/who-permits-upload.pl:129
+msgid "1Z<>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:159
+msgid "Package is not reproducible."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:161 ../scripts/who-permits-upload.pl:133
+msgid "2Z<>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:163
+msgid "The given input is not a valid Debian source package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debrepro.pod:165
+msgid "3Z<>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:167
+msgid "Required programs are missing."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:173
+msgid "diffoscope (1), disorderfs (1), timeout(1)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debrepro.pod:177
+msgid "Antonio Terceiro <terceiro@debian.org>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/debrelease.1:1
+#, no-wrap
+msgid "DEBRELEASE"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:4
+msgid "debrelease - a wrapper around dupload or dput"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:6
+msgid "B<debrelease> [I<debrelease options>] [I<dupload/dput options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:15
+msgid ""
+"B<debrelease> is a simple wrapper around B<dupload> or B<dput>. It is "
+"called from within the source code tree of a package, and figures out the "
+"current version of a package. It then looks for the corresponding "
+"I<.changes> file (which lists the files needed to upload in order to release "
+"the package) in the parent directory of the source code tree and calls "
+"B<dupload> or B<dput> with the I<.changes> file as parameter in order to "
+"perform the actual uploading."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:20
+msgid ""
+"Options may be given to B<debrelease>; except for the ones listed below, "
+"they are passed on unchanged to B<dupload> or B<dput>. The B<devscripts> "
+"configuration files are also read by B<debrelease> as described below."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:31
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debrelease> will climb the directory tree until it finds a "
+"I<debian/changelog> file. As a safeguard against stray files causing "
+"potential problems, it will examine the name of the parent directory once it "
+"finds the I<debian/changelog> file, and check that the directory name "
+"corresponds to the package name. Precisely how it does this is controlled "
+"by two configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debrelease.1:61 ../scripts/debrsign.1:31 ../scripts/debsign.1:68
+#, no-wrap
+msgid "B<-S>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:67
+msgid ""
+"If this option is used, or the default I<.changes> file is not found but a "
+"source-only I<.changes> file is present, then this source-only I<.changes> "
+"file will be uploaded instead of an arch-specific one."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:75
+msgid ""
+"See B<dpkg-architecture>(1) for a description of these options. They affect "
+"the search for the I<.changes> file. They are provided to mimic the "
+"behaviour of B<dpkg-buildpackage> when determining the name of the "
+"I<.changes> file. If a plain B<-t> is given, it is taken to be the "
+"B<dupload> host-specifying option, and therefore signifies the end of the "
+"B<debrelease>-specific options."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debrelease.1:75 ../scripts/debrsign.1:41 ../scripts/debsign.1:78
+#, no-wrap
+msgid "B<--multi>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:81
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debrelease> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by "
+"B<dpkg-cross>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debrelease.1:111
+#, no-wrap
+msgid "B<DEBRELEASE_UPLOADER>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:116
+msgid ""
+"The currently recognised values are I<dupload> and I<dput>, and it specifies "
+"which uploader program should be used. It corresponds to the B<--dupload> "
+"and B<--dput> command line options."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:125
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and "
+"I<.deb> files, and is either an absolute path or relative to the top of the "
+"source tree. This corresponds to the B<--debs-dir> command line option. "
+"This directive could be used, for example, if you always use B<pbuilder> or "
+"B<svn-buildpackage> to build your packages. Note that it also affects "
+"B<debc>(1) and B<debi>(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:136
+msgid "B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:138
+msgid ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, based on the original B<release> "
+"script by Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+msgstr ""
+
+#. type: Content of the dhfirstname entity
+#: ../scripts/deb-reversion.dbk:30
+msgid "<firstname>martin f.</firstname>"
+msgstr ""
+
+#. type: Content of the dhsurname entity
+#: ../scripts/deb-reversion.dbk:31
+msgid "<surname>krafft</surname>"
+msgstr ""
+
+#. type: Content of the dhmaintfirstname entity
+#: ../scripts/deb-reversion.dbk:32
+msgid "<firstname>Julian</firstname>"
+msgstr ""
+
+#. type: Content of the dhmaintsurname entity
+#: ../scripts/deb-reversion.dbk:33
+msgid "<surname>Gilbey</surname>"
+msgstr ""
+
+#. type: Content of the dhdate entity
+#: ../scripts/deb-reversion.dbk:35
+msgid "<date>Feb 13, 2006</date>"
+msgstr ""
+
+#. type: Content of the dhsection entity
+#: ../scripts/deb-reversion.dbk:38
+msgid "<manvolnum>1</manvolnum>"
+msgstr ""
+
+#. type: Content of the dhemail entity
+#: ../scripts/deb-reversion.dbk:39
+msgid "<email>madduck@debian.org</email>"
+msgstr ""
+
+#. type: Content of the dhmaintemail entity
+#: ../scripts/deb-reversion.dbk:40
+msgid "<email>jdg@debian.org</email>"
+msgstr ""
+
+#. type: Content of the dhusername entity
+#: ../scripts/deb-reversion.dbk:41
+msgid "martin f. krafft"
+msgstr ""
+
+#. type: Content of the dhmaintusername entity
+#: ../scripts/deb-reversion.dbk:42
+msgid "Julian Gilbey"
+msgstr ""
+
+#. type: Content of the dhucpackage entity
+#: ../scripts/deb-reversion.dbk:43
+msgid "<refentrytitle>deb-reversion</refentrytitle>"
+msgstr ""
+
+#. type: Content of the dhcommand entity
+#: ../scripts/deb-reversion.dbk:44 ../scripts/deb-reversion.dbk:45
+msgid "deb-reversion"
+msgstr ""
+
+#. type: Content of the debian entity
+#: ../scripts/deb-reversion.dbk:47
+msgid "<productname>Debian</productname>"
+msgstr ""
+
+#. type: Content of the gnu entity
+#: ../scripts/deb-reversion.dbk:48
+msgid "<acronym>GNU</acronym>"
+msgstr ""
+
+#. type: Content of the gpl entity
+#: ../scripts/deb-reversion.dbk:49
+msgid "&gnu; <acronym>GPL</acronym>"
+msgstr ""
+
+#. type: Content of: <refentry><refentryinfo><address>
+#: ../scripts/deb-reversion.dbk:55
+#, no-wrap
+msgid ""
+" &dhemail;\n"
+" "
+msgstr ""
+
+#. type: Content of: <refentry><refentryinfo>
+#: ../scripts/deb-reversion.dbk:54
+msgid "<placeholder type=\"address\" id=\"0\"/> &dhdate;"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refname>
+#: ../scripts/deb-reversion.dbk:65
+msgid "&dhcommand;"
+msgstr ""
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: ../scripts/deb-reversion.dbk:67
+msgid "simple script to change the version of a .deb file"
+msgstr ""
+
+#. type: Content of: <refentry><refsynopsisdiv><cmdsynopsis>
+#: ../scripts/deb-reversion.dbk:72
+msgid ""
+"<command>&dhcommand;</command> <arg choice=\"opt\"> "
+"<replaceable>options</replaceable> </arg> <replaceable> "
+".deb-file</replaceable> <arg choice=\"opt\" rep=\"repeat\"><replaceable>log "
+"message</replaceable></arg>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:85
+msgid ""
+"<command>&dhcommand;</command> unpacks the specified "
+"<filename>.deb</filename> file, changes the version number in the relevant "
+"locations, appends a Debian <filename>changelog</filename> entry with the "
+"specified contents, and creates a new <filename>.deb</filename> file with "
+"the updated version."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:92
+msgid ""
+"By default, the tool creates a new version number suitable for local "
+"changes, such that the new package will be greater than the current one, but "
+"lesser than any future, official Debian packages. With <option>-v "
+"<replaceable class=\"parameter\">version</replaceable></option>, the version "
+"number can be specified directly. On the other hand, the "
+"<option>-c</option> simply calculates the new version number but does not "
+"generate a new package."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:103
+msgid ""
+"When building a <filename>.deb</filename> file, root privileges are required "
+"in order to have the correct permissions and ownerships in the resulting "
+"<filename>.deb</filename> file. This can be achieved either by running "
+"<command>&dhcommand;</command> as root or running under "
+"<citerefentry><refentrytitle>fakeroot</refentrytitle> "
+"<manvolnum>1</manvolnum></citerefentry>, as 'fakeroot &dhcommand; foo.deb'."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:113
+msgid ""
+"With <option>-k <replaceable "
+"class=\"parameter\">hook</replaceable></option>, a hook script may be "
+"specified, which is run on the unpacked binary packages just before it is "
+"repacked. If you want to write changelog entries from within the hook, use "
+"'<command>dch -a -- <replaceable class=\"parameter\">your "
+"message</replaceable></command>'. (Alternatively, do not give a changelog "
+"entry on the <command>&dhcommand;</command> command line and "
+"<command>dch</command> will be called automatically.) The hook command must "
+"be placed in quotes if it has more than one word; it is called via "
+"<command>sh -c</command>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:131
+msgid ""
+"<option>-v</option> <replaceable "
+"class=\"parameter\">new-version</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:132
+msgid ""
+"<option>--new-version</option> <replaceable "
+"class=\"parameter\">new-version</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:135
+msgid ""
+"Specifies the version number to be used for the new version. Passed to "
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> "
+"</citerefentry>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:145
+msgid ""
+"<option>-o</option> <replaceable "
+"class=\"parameter\">old-version</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:146
+msgid ""
+"<option>--old-version</option> <replaceable "
+"class=\"parameter\">old-version</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:149
+msgid ""
+"Specifies the version number to be used as the old version instead of the "
+"version stored in the <filename>.deb</filename>'s "
+"<filename>control</filename> file."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:157
+msgid "<option>-c</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:158
+msgid "<option>--calculate-only</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:161
+msgid ""
+"Only calculate and display the new version number which would be used; do "
+"not build a new <filename>.deb</filename> file. Cannot be used in "
+"conjunction with <option>-v</option>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:169
+msgid "<option>-s</option> <replaceable class=\"parameter\">string</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:170
+msgid ""
+"<option>--string</option> <replaceable "
+"class=\"parameter\">string</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:173
+msgid ""
+"Instead of using 'LOCAL.' as the version string to append to the old version "
+"number, use <replaceable class=\"parameter\">string</replaceable> instead."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:181
+msgid ""
+"<option>-k</option> <replaceable "
+"class=\"parameter\">hook-command</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:182
+msgid ""
+"<option>--hook</option> <replaceable "
+"class=\"parameter\">hook-command</replaceable>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:185
+msgid ""
+"A hook command to run after unpacking the old <filename>.deb</filename> file "
+"and modifying the <filename>changelog</filename>, and before packing up the "
+"new <filename>.deb</filename> file. Must be in quotes if it is more than "
+"one (shell) word. Only one hook command may be specified; if you want to "
+"perform more than this, you could specify 'bash' as the hook command, and "
+"you will then be given a shell to work in."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:197
+msgid "<option>-D</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:198
+msgid "<option>--debug</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:201
+msgid ""
+"Pass <option>--debug</option> to <citerefentry> "
+"<refentrytitle>dpkg-deb</refentrytitle> <manvolnum>1</manvolnum> "
+"</citerefentry>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:211
+msgid "<option>-b</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:212
+msgid "<option>--force-bad-version</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:215
+msgid ""
+"Pass <option>--force-bad-version</option> to <citerefentry> "
+"<refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:225
+msgid "<option>-h</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:226
+msgid "<option>--help</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:229
+msgid "Display usage information."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:235
+msgid "<option>-V</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:236
+msgid "<option>--version</option>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:249
+msgid ""
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> "
+"</citerefentry>, <citerefentry> <refentrytitle>dpkg-deb</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> "
+"<refentrytitle>fakeroot</refentrytitle> <manvolnum>1</manvolnum> "
+"</citerefentry>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><title>
+#: ../scripts/deb-reversion.dbk:265
+msgid "DISCLAIMER"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:267
+msgid ""
+"&dhpackage; is a tool intended to help porters with modifying packages for "
+"other architectures, and to augment deb-repack, which creates modified "
+"packages with identical version numbers as the official packages. Chaos will "
+"ensue! With &dhpackage;, a proper version number can be selected, which does "
+"not obstruct the next official release but can be specifically pinned with "
+"APT or held with dpkg."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:276
+msgid ""
+"Please take note that &dhpackage; does not come without problems. While it "
+"works fine in most cases, it may just not in yours. Especially, please "
+"consider that it changes binary packages (only!) and hence can break strict "
+"versioned dependencies between binary packages generated from the same "
+"source."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:283
+msgid ""
+"You are using this tool at your own risk and I shall not shed a tear if your "
+"gerbil goes up in flames, your microwave attacks the stereo, or the angry "
+"slamming of your fist spills your coffee into the keyboard, which sets off a "
+"chain reaction resulting in a vast amount of money transferred from your "
+"account to mine."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:295
+msgid ""
+"&dhpackage; is Copyright 2004-5 by &dhusername; &dhemail; and modifications "
+"are Copyright 2006 by &dhmaintusername; &dhmaintemail;."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:300
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the Artistic License: "
+"<ulink>http://www.opensource.org/licenses/artistic-license.php</ulink>. On "
+"Debian systems, the complete text of the Artistic License can be found in "
+"<filename>/usr/share/common-licenses/Artistic</filename>."
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:309
+msgid ""
+"This manual page was written by &dhusername; &dhemail; and modified by "
+"&dhmaintusername; &dhmaintemail;."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:198
+msgid "deb-why-removed - shows the reason a package was removed from the archive"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:202
+msgid "B<deb-why-removed> [I<option>...] I<package>..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:206
+msgid ""
+"This program will download the removals metadata from the archive, search "
+"and print the entries within for a source or binary package name match."
+msgstr ""
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:213
+msgid "B<-u>, B<--url> I<URL>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:215
+msgid ""
+"URL to the archive removals deb822-formatted file list. This can be either "
+"an actual URL (https://, http://, file://), an pathname or an origin name. "
+"Currently the only origin name known is B<debian>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:220
+msgid "B<--no-refresh>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:222
+msgid ""
+"Do not refresh the cached removals file even if there is a newer version in "
+"the archive."
+msgstr ""
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:225
+msgid "B<-h>, B<-?>, B<--help>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:227 ../scripts/sadt.pod:66
+msgid "Show a help message and exit."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:231
+msgid "Show the program version."
+msgstr ""
+
+#. type: SH
+#: ../scripts/deb-why-removed.pl:235 ../scripts/debsnap.1:130
+#: ../scripts/diff2patches.1:28
+#, no-wrap
+msgid "FILES"
+msgstr ""
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:239
+msgid "I<cachedir>B</devscripts/deb-why-removed/>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:241
+msgid ""
+"This directory contains the cached removal files downloaded from the "
+"archive. I<cachedir> will be either B<$XDG_CACHE_HOME> or if that is not "
+"defined B<$HOME/.cache/>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:249
+msgid "L<https://ftp-master.debian.org/#removed>"
+msgstr ""
+
+#. type: TH
+#: ../scripts/debrsign.1:1
+#, no-wrap
+msgid "DEBRSIGN"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:4
+msgid "debrsign - remotely sign a Debian .changes and .dsc file pair using SSH"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:7
+msgid ""
+"B<debrsign> [I<options>] [I<user>B<@>]I<remotehost> "
+"[I<changes-file>|I<dsc-file>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:15
+msgid ""
+"B<debrsign> takes either an unsigned I<.dsc> file or an unsigned I<.changes> "
+"file and the associated unsigned I<.dsc> file (found by replacing the "
+"architecture name and I<.changes> by I<.dsc>) if it appears in the "
+"I<.changes> file and signs them by copying them to the remote machine using "
+"B<ssh>(1) and remotely running B<debsign>(1) on that machine. All options "
+"not listed below are passed to the B<debsign> program on the remote machine."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:19
+msgid ""
+"If a I<.changes> or I<.dsc> file is specified, it is signed, otherwise, "
+"I<debian/changelog> is parsed to determine the name of the I<.changes> file "
+"to look for in the parent directory."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:25
+msgid ""
+"This utility is useful if a developer must build a package on one machine "
+"where it is unsafe to sign it; they need then only transfer the small "
+"I<.dsc> and I<.changes> files to a safe machine and then use the B<debsign> "
+"program to sign them before transferring them back. This program automates "
+"this process."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:30
+msgid ""
+"To do it the other way round, that is to connect to an unsafe machine to "
+"download the I<.dsc> and I<.changes> files, to sign them locally and then to "
+"transfer them back, see the B<debsign>(1) program, which can do this task."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:35 ../scripts/debsign.1:72
+msgid ""
+"Look for a source-only I<.changes> file instead of a binary-build "
+"I<.changes> file."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:47
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debrsign> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by "
+"B<dpkg-cross>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debrsign.1:47
+#, no-wrap
+msgid "B<--path >I<remote-path>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:50
+msgid "Specify a path to the GPG binary on the remote host."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debrsign.1:53
+#, no-wrap
+msgid "B<Other options>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:57
+msgid "All other options are passed on to B<debsign> on the remote machine."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debrsign.1:63
+#, no-wrap
+msgid "B<DEBRSIGN_PGP_PATH>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:66
+msgid "Equivalent to passing B<--path> on the command line (see above.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:70
+msgid "B<debsign>(1), B<dpkg-architecture>(1), B<ssh>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:72 ../scripts/debsign.1:146
+msgid ""
+"This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt> and is "
+"copyright under the GPL, version 2 or later."
+msgstr ""
+
+#. type: TH
+#: ../scripts/debsign.1:1
+#, no-wrap
+msgid "DEBSIGN"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:4
+msgid "debsign - sign a Debian .changes and .dsc file pair using GPG"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:6
+msgid "B<debsign> [I<options>] [I<changes-file>|I<dsc-file>|I<commands-file> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:14
+msgid ""
+"B<debsign> mimics the signing aspects (and bugs) of "
+"B<dpkg-buildpackage>(1). It takes a I<.dsc>, I<.buildinfo>, or I<.changes> "
+"file and signs it, and any child I<.dsc>, I<.buildinfo>, or I<.changes> "
+"files directly or indirectly referenced by it, using the GNU Privacy "
+"Guard. It is careful to calculate the size and checksums of any newly signed "
+"child files and replace the original values in the parent file."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:18
+msgid ""
+"If no file is specified, I<debian/changelog> is parsed to determine the name "
+"of the I<.changes> file to look for in the parent directory."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:22
+msgid ""
+"If a I<.commands> file is specified it is first validated (see the details "
+"at I<ftp://ftp.upload.debian.org/pub/UploadQueue/README>), and the name "
+"specified in the Uploader field is used for signing."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:36
+msgid ""
+"This utility is useful if a developer must build a package on one machine "
+"where it is unsafe to sign it; they need then only transfer the small "
+"I<.dsc>, I<.buildinfo> and I<.changes> files to a safe machine and then use "
+"the B<debsign> program to sign them before transferring them back. This "
+"process can be automated in two ways. If the files to be signed live on the "
+"B<remote> machine, the B<-r> option may be used to copy them to the local "
+"machine and back again after signing. If the files live on the B<local> "
+"machine, then they may be transferred to the remote machine for signing "
+"using B<debrsign>(1). However note that it is probably safer to have your "
+"trusted signing machine use B<debsign> to connect to the untrusted "
+"non-signing machine, rather than using B<debrsign> to make the connection in "
+"the reverse direction."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:39
+msgid ""
+"This program can take default settings from the B<devscripts> configuration "
+"files, as described below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:40
+#, no-wrap
+msgid "B<-r >[I<username>B<@>]I<remotehost>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:48
+msgid ""
+"The files to be signed live on the specified remote host. In this case, a "
+"I<.dsc>, I<.buildinfo> or I<.changes> file must be explicitly named, with an "
+"absolute directory or one relative to the remote home directory. B<scp> "
+"will be used for the copying. The "
+"[I<username>B<@>]I<remotehost>B<:>I<filename> syntax is permitted as an "
+"alternative. Wildcards (B<*> etc.) are allowed."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:48
+#, no-wrap
+msgid "B<-p>I<progname>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:52
+msgid ""
+"When B<debsign> needs to execute GPG to sign it will run I<progname> "
+"(searching the B<PATH> if necessary), instead of B<gpg>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:52
+#, no-wrap
+msgid "B<-m>I<maintainer>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:61
+msgid ""
+"Specify the maintainer name to be used for signing. (See "
+"B<dpkg-buildpackage>(1) for more information about the differences between "
+"B<-m>, B<-e> and B<-k> when building packages; B<debsign> makes no use of "
+"these distinctions except with respect to the precedence of the various "
+"options. These multiple options are provided so that the program will "
+"behave as expected when called by B<debuild>(1).)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:61
+#, no-wrap
+msgid "B<-e>I<maintainer>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:64
+msgid "Same as B<-m> but takes precedence over it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:64
+#, no-wrap
+msgid "B<-k>I<keyid>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:68
+msgid ""
+"Specify the key ID to be used for signing; overrides any B<-m> and B<-e> "
+"options."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:84
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debsign> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by "
+"B<dpkg-cross>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:84
+#, no-wrap
+msgid "B<--re-sign>, B<--no-re-sign>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:90
+msgid ""
+"Recreate signature, respectively use the existing signature, if the file has "
+"been signed already. If neither option is given and an already signed file "
+"is found the user is asked if he or she likes to use the current signature."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:90
+#, no-wrap
+msgid "B<--debs-dir> I<DIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:95
+msgid ""
+"Look for the files to be signed in directory I<DIR> instead of the parent of "
+"the source directory. This should either be an absolute path or relative to "
+"the top of the source directory."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:111
+#, no-wrap
+msgid "B<DEBSIGN_PROGRAM>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:114
+msgid "Setting this is equivalent to giving a B<-p> option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:114
+#, no-wrap
+msgid "B<DEBSIGN_MAINT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:117
+msgid "This is the B<-m> option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:120
+msgid "And this is the B<-k> option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:120
+#, no-wrap
+msgid "B<DEBSIGN_ALWAYS_RESIGN>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:123
+msgid "Always re-sign files even if they are already signed, without prompting."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:132
+msgid ""
+"This specifies the directory in which to look for the files to be signed, "
+"and is either an absolute path or relative to the top of the source tree. "
+"This corresponds to the B<--debs-dir> command line option. This directive "
+"could be used, for example, if you always use B<pbuilder> or "
+"B<svn-buildpackage> to build your packages. Note that it also affects "
+"B<debrelease>(1) in the same way, hence the strange name of the option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:144
+msgid ""
+"B<debrsign>(1), B<debuild>(1), B<dpkg-architecture>(1), "
+"B<dpkg-buildpackage>(1), B<gpg>(1), B<gpg2>(1), B<md5sum>(1), B<sha1sum>(1), "
+"B<sha256sum>(1), B<scp>(1), B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "DEBSNAP"
+msgstr ""
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "July 3, 2010"
+msgstr ""
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "Debian devscripts"
+msgstr ""
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "DebSnap User Manual"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:5
+msgid "debsnap - retrieve old snapshots of Debian packages"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:9
+msgid "B<debsnap> [I<options>]I< package >[I<version>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:12
+msgid "B<debsnap> [B<-h> | B<--help>]B< >[B<--version>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:17
+msgid ""
+"B<debsnap> is a tool to help with retrieving snapshots of old packages from "
+"a daily archive repository."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:20
+msgid ""
+"The only publicly available snapshot archive is currently located at "
+"I<https://snapshot.debian.org>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:24
+msgid ""
+"By default, debsnap will download all the available versions for I<package> "
+"that are found in the snapshot archive. If a I<version> is specified, only "
+"that particular version will be downloaded, if available."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:29
+#, no-wrap
+msgid "B<-d>I< destination>,I< >B<--destdir>I< destination>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:32
+msgid "Directory to place retrieved packages."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debsnap.1:33 ../scripts/tagpending.pl:110
+#, no-wrap
+msgid "B<-f>, B<--force>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:41
+msgid ""
+"Force writing into an existing I<destination>. By default B<debsnap> will "
+"insist the destination directory does not exist yet unless it is explicitly "
+"specified to be 'B<.>' (the current working directory). This is to avoid "
+"files being accidentally overwritten by what is fetched from the archive and "
+"to provide a guarantee for other scripts that only the files fetched will be "
+"present there upon completion."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:46
+msgid ""
+"Report on the B<debsnap> configuration being used and progress during the "
+"download operation. Please always use this option when reporting bugs."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:47
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:50
+msgid "Don't download but just list versions."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:51
+#, no-wrap
+msgid "B<--binary>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:54
+msgid "Download binary packages instead of source packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:55
+#, no-wrap
+msgid "B<-a>, B<--architecture>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:60
+msgid ""
+"Specify architecture of downloaded binary packages. Implies B<--binary>. "
+"This can be given multiple times in order to download binary packages for "
+"multiple architectures."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:61
+#, no-wrap
+msgid "B<--first>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:66
+msgid ""
+"Specify the minimum version of a package which will be downloaded. Any "
+"versions which compare larger than this, according to B<dpkg>, will be "
+"considered for download. May be used in combination with B<--last>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:67
+#, no-wrap
+msgid "B<--last>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:72
+msgid ""
+"Specify the maximum version of a package which will be downloaded. Any "
+"package versions which compare less than this, according to B<dpkg>, will be "
+"considered for download. May be used in combination with B<--first>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:76
+msgid "Show a summary of these options."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:80
+msgid "Show the version of B<debsnap>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:85
+msgid ""
+"B<debsnap> may also be configured through the use of the following options "
+"in the devscripts configuration files:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:86
+#, no-wrap
+msgid "B<DEBSNAP_VERBOSE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:89
+msgid "Same as the command line option B<--verbose>. Set to I<yes> to enable."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:90
+#, no-wrap
+msgid "B<DEBSNAP_DESTDIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:95
+msgid ""
+"Set a default path for the destination directory. If unset "
+"I<./source-E<lt>package_nameE<gt>> will be used. The command line option "
+"B<--destdir> will override this."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:96
+#, no-wrap
+msgid "B<DEBSNAP_BASE_URL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:99
+msgid "The base url for the snapshots archive."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:101
+msgid "If unset this defaults to I<https://snapshot.debian.org>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:108
+msgid ""
+"B<debsnap> will return an exit status of 0 if all operations succeeded, 1 if "
+"a fatal error occurred, and 2 if some packages failed to be downloaded but "
+"operations otherwise succeeded as expected. In some cases packages may fail "
+"to be downloaded because they are no longer available on the snapshot "
+"mirror, so any caller should expect this may occur in normal use."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:110
+#, no-wrap
+msgid "B<debsnap -a amd64 xterm 256-1>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:113
+msgid ""
+"Download the binary package of a specific xterm version for amd64 "
+"architecture."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:113
+#, no-wrap
+msgid "B<debsnap -a armel xterm>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:116
+msgid "Download binary packages for all versions of xterm for armel architecture."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:116
+#, no-wrap
+msgid "B<debsnap --binary xterm 256-1>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:119
+msgid ""
+"Download binary packages for a specific xterm version but for all "
+"architectures."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:119
+#, no-wrap
+msgid "B<debsnap --binary xterm>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:122
+msgid "Download binary packages for all versions of xterm for all architectures."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:122
+#, no-wrap
+msgid "B<debsnap -v --first 347-1 --last 348-2 xterm>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:126
+msgid ""
+"Download source packages for local architecture of xterm, between 347-1 and "
+"348-2 revisions, inclusive, showing the progress when doing it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:126
+#, no-wrap
+msgid ""
+"B<aptitude search '~i' -F '%p %V' | while read pkg ver; do debsnap -a "
+"$(dpkg-architecture -qDEB_HOST_ARCH) -a all $pkg $ver; done>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:129
+msgid "Download binary packages of all packages that are installed on the system."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:131
+#, no-wrap
+msgid "I</etc/devscripts.conf>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:134
+msgid "Global devscripts configuration options. Will override hardcoded defaults."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:134
+#, no-wrap
+msgid "I<~/.devscripts>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:142
+msgid "B<devscripts>(1), B<devscripts.conf>(5), B<git-debimport>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:145
+msgid "David Paleino E<lt>dapal@debian.orgE<gt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:148
+msgid "Copyright \\(co 2010 David Paleino"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:152
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU General Public License, Version 3 or (at your option) "
+"any later version published by the Free Software Foundation."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:155
+msgid ""
+"On Debian systems, the complete text of the GNU General Public License can "
+"be found in I</usr/share/common-licenses/GPL>."
+msgstr ""
+
+#. type: SS
+#: ../scripts/debsnap.1:157
+#, no-wrap
+msgid "Reporting bugs"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:160
+msgid ""
+"The program is part of the devscripts package. Please report bugs using "
+"`B<reportbug devscripts>`"
+msgstr ""
+
+#. type: TH
+#: ../scripts/debuild.1:1
+#, no-wrap
+msgid "DEBUILD"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:4
+msgid "debuild - build a Debian package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:7
+msgid ""
+"B<debuild> [I<debuild options>] [I<dpkg-buildpackage options>] "
+"[B<--lintian-opts> I<lintian options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:10
+msgid ""
+"B<debuild> [I<debuild options>] -- "
+"B<binary>|B<binary-arch>|B<binary-indep>|B<clean> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:31
+msgid ""
+"B<debuild> creates all the files necessary for uploading a Debian package. "
+"It first runs B<dpkg-buildpackage>, then runs B<lintian> on the I<.changes> "
+"file created (assuming that B<lintian> is installed), and finally signs the "
+"appropriate files (using B<debsign>(1) to do this instead of "
+"B<dpkg-buildpackage>(1) itself; all relevant key-signing options are passed "
+"on). Signing will be skipped if the distribution is I<UNRELEASED>, unless "
+"B<dpkg-buildpackage>'s B<--force-sign> option is used. Parameters can be "
+"passed to B<dpkg-buildpackage> and B<lintian>, where the parameters to the "
+"latter are indicated with the B<--lintian-opts> option. The allowable "
+"options in this case are B<--lintian> and B<--no-lintian> to force or skip "
+"the B<lintian> step, respectively. The default is to run B<lintian>. There "
+"are also various options available for setting and preserving environment "
+"variables, as described below in the Environment Variables section. In this "
+"method of running B<debuild>, we also save a build log to the file "
+"I<../E<lt>packageE<gt>_E<lt>versionE<gt>_E<lt>archE<gt>.build>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:48
+msgid ""
+"An alternative way of using B<debuild> is to use one or more of the "
+"parameters B<binary>, B<binary-arch>, B<binary-indep> and B<clean>, in which "
+"case B<debuild> will attempt to gain root privileges and then run "
+"I<debian/rules> with the given parameters. A "
+"B<--rootcmd=>I<gain-root-command> or B<-r>I<gain-root-command> option may be "
+"used to specify a method of gaining root privileges. The "
+"I<gain-root-command> is likely to be one of I<fakeroot>, I<sudo> or "
+"I<super>. See below for further discussion of this point. Again, the "
+"environment preservation options may be used. In this case, B<debuild> will "
+"also attempt to run B<dpkg-checkbuilddeps> first; this can be explicitly "
+"requested or switched off using the options B<-D> and B<-d> respectively. "
+"Note also that if either of these or a B<-r> option is specified in the "
+"configuration file option B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>, then it will be "
+"recognised even in this method of invocation of B<debuild>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:51
+msgid ""
+"B<debuild> also reads the B<devscripts> configuration files as described "
+"below. This allows default options to be given."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:63
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debuild> will climb the directory tree until it finds a "
+"I<debian/changelog> file before attempting to build the package. As a "
+"safeguard against stray files causing potential problems, it will examine "
+"the name of the parent directory once it finds the I<debian/changelog> file, "
+"and check that the directory name corresponds to the package name. "
+"Precisely how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and "
+"B<--check-dirname-regex>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:88
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a '/', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'PACKAGE', this will be replaced by the source package name, as "
+"determined from the I<changelog>. The default value for the regex is: "
+"\\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and "
+"PACKAGE-version."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:98
+msgid ""
+"As environment variables can affect the building of a package, often "
+"unintentionally, B<debuild> sanitises the environment by removing all "
+"environment variables except for B<TERM>, B<HOME>, B<LOGNAME>, B<GNUPGHOME>, "
+"B<PGPPATH>, B<GPG_AGENT_INFO>, B<GPG_TTY>, B<DBUS_SESSION_BUS_ADDRESS>, "
+"B<FAKEROOTKEY>, B<DEBEMAIL>, B<DEB_>I<*>, the (B<C>, B<CPP>, B<CXX>, B<LD> "
+"and B<F>)B<FLAGS> variables and their B<_APPEND> counterparts and the locale "
+"variables B<LANG> and B<LC_>I<*>. B<TERM> is set to `dumb' if it is unset, "
+"and B<PATH> is set to \"/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11\"."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:109
+msgid ""
+"If a particular environment variable is required to be passed through "
+"untouched to the build process, this may be specified by using a "
+"B<--preserve-envvar> I<envvar> (which can also be written as B<-e> I<envvar> "
+"option). The environment may be left untouched by using the "
+"B<--preserve-env> option. However, even in this case, the B<PATH> will be "
+"set to the sane value described above. The B<only> way to prevent B<PATH> "
+"from being reset is to specify a B<--preserve-envvar PATH> option. But you "
+"are warned that using programs from non-standard locations can easily result "
+"in the package being broken, as it will not be able to be built on standard "
+"systems."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:113
+msgid ""
+"Note that one may add directories to the beginning of the sanitised B<PATH>, "
+"using the B<--prepend-path> option. This is useful when one wishes to use "
+"tools such as B<ccache> or B<distcc> for building."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:118
+msgid ""
+"It is also possible to avoid having to type something like I<FOO>B<=>I<bar "
+">B<debuild -e >I<FOO> by writing B<debuild -e >I<FOO>B<=>I<bar> or the long "
+"form B<debuild --set-envvar >I<FOO>B<=>I<bar>."
+msgstr ""
+
+#. type: SH
+#: ../scripts/debuild.1:118
+#, no-wrap
+msgid "SUPERUSER REQUIREMENTS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:128
+msgid ""
+"B<debuild> needs to be run as superuser to function properly. There are "
+"three fundamentally different ways to do this. The first, and preferable, "
+"method is to use some root-gaining command. The best one to use is probably "
+"B<fakeroot>(1), since it does not involve granting any genuine privileges. "
+"B<super>(1) and B<sudo>(1) are also possibilities. If no B<-r> (or "
+"B<--rootcmd>) option is given (and recall that B<dpkg-buildpackage> also "
+"accepts a B<-r> option) and neither of the following methods is used, then "
+"B<-rfakeroot> will silently be assumed."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:134
+msgid ""
+"The second method is to use some command such as B<su>(1) to become root, "
+"and then to do everything as root. Note, though, that B<lintian> will abort "
+"if it is run as root or setuid root; this can be overcome using the "
+"B<--allow-root> option of B<lintian> if you know what you are doing."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:150
+msgid ""
+"The third possible method is to have B<debuild> installed as setuid root. "
+"This is not the default method, and will have to be installed as such by the "
+"system administrator. It must also be realised that anyone who can run "
+"B<debuild> as root or setuid root has B<full access to the whole machine>. "
+"This method is therefore not recommended, but will work. B<debuild> could "
+"be installed with mode 4754, so that only members of the owning group could "
+"run it. A disadvantage of this method would be that other users would then "
+"not be able to use the program. There are many other variants of this "
+"option involving multiple copies of B<debuild>, or the use of programs such "
+"as B<sudo> or B<super> to grant root privileges to users selectively. If "
+"the sysadmin wishes to do this, she should use the B<dpkg-statoverride> "
+"program to change the permissions of I</usr/bin/debuild>. This will ensure "
+"that these permissions are preserved across upgrades."
+msgstr ""
+
+#. type: SH
+#: ../scripts/debuild.1:150
+#, no-wrap
+msgid "HOOKS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:156
+msgid ""
+"B<debuild> supports a number of hooks when running B<dpkg-buildpackage>. "
+"Note that the hooks B<dpkg-buildpackage> to B<lintian> (inclusive) are "
+"passed through to B<dpkg-buildpackage> using its corresponding "
+"B<--hook->I<name> option. The available hooks are as follows:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:156
+#, no-wrap
+msgid "B<dpkg-buildpackage-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:159
+msgid "Run before B<dpkg-buildpackage> begins by calling B<dpkg-checkbuilddeps>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:161 ../scripts/debuild.1:170 ../scripts/debuild.1:178
+#: ../scripts/debuild.1:187 ../scripts/debuild.1:195 ../scripts/debuild.1:203
+#: ../scripts/debuild.1:212
+msgid "Hook is run inside the unpacked source."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:163
+msgid "Corresponds to B<dpkg>'s B<init> hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:163
+#, no-wrap
+msgid "B<clean-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:168
+msgid ""
+"Run before B<dpkg-buildpackage> runs B<debian/rules clean> to clean the "
+"source tree. (Run even if the tree is not being cleaned because B<-nc> is "
+"used.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:172
+msgid "Corresponds to B<dpkg>'s B<preclean> hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:172
+#, no-wrap
+msgid "B<dpkg-source-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:176
+msgid ""
+"Run after cleaning the tree and before running B<dpkg-source>. (Run even if "
+"B<dpkg-source> is not being called because B<-b>, B<-B>, or B<-A> is used.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:180
+msgid "Corresponds to B<dpkg>'s B<source> hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:180
+#, no-wrap
+msgid "B<dpkg-build-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:185
+msgid ""
+"Run after B<dpkg-source> and before calling B<debian/rules build>. (Run "
+"even if this is a source-only build, so B<debian/rules build> is not being "
+"called.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:189
+msgid "Corresponds to B<dpkg>'s B<build> hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:189
+#, no-wrap
+msgid "B<dpkg-binary-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:193
+msgid ""
+"Run between B<debian/rules build> and B<debian/rules binary>(B<-arch>). Run "
+"B<only> if a binary package is being built."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:197
+msgid "Corresponds to B<dpkg>'s B<binary> hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:197
+#, no-wrap
+msgid "B<dpkg-genchanges-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:201
+msgid "Run after the binary package is built and before calling B<dpkg-genchanges>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:205
+msgid "Corresponds to B<dpkg>'s B<changes> hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:205
+#, no-wrap
+msgid "B<final-clean-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:210
+msgid ""
+"Run after B<dpkg-genchanges> and before the final B<debian/rules clean>. "
+"(Run even if we are not cleaning the tree post-build, which is the default.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:214
+msgid "Corresponds to B<dpkg>'s B<postclean> hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:214
+#, no-wrap
+msgid "B<lintian-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:218
+msgid ""
+"Run (once) before calling B<lintian>. (Run even if we are not calling "
+"B<lintian>.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:220 ../scripts/debuild.1:228 ../scripts/debuild.1:235
+msgid "Hook is run from parent directory of unpacked source."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:222
+msgid "Corresponds to B<dpkg>'s B<check> hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:222
+#, no-wrap
+msgid "B<signing-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:226
+msgid ""
+"Run after calling B<lintian> before any signing takes place. (Run even if "
+"we are not signing anything.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:230
+msgid "Corresponds to B<dpkg>'s B<sign> hook, but is run by B<debuild>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:230
+#, no-wrap
+msgid "B<post-dpkg-buildpackage-hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:233
+msgid "Run after everything has finished."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:237
+msgid "Corresponds to B<dpkg>'s B<done> hook, but is run by B<debuild>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:252
+msgid ""
+"A hook command can be specified either in the configuration file as, for "
+"example, DEBUILD_SIGNING_HOOK='foo' (note the hyphens change into "
+"underscores!) or as a command line option B<--signing-hook-foo>. The "
+"command will have certain percent substitutions made on it: B<%%> will be "
+"replaced by a single B<%> sign, B<%p> will be replaced by the package name, "
+"B<%v> by the package version number, B<%s> by the source version number, "
+"B<%u> by the upstream version number. Neither B<%s> nor B<%u> will contain "
+"an epoch. B<%a> will be B<1> if the immediately following action is to be "
+"performed and B<0> if not (for example, in the B<dpkg-source> hook, B<%a> "
+"will become B<1> if B<dpkg-source> is to be run and B<0> if not). Then it "
+"will be handed to the shell to deal with, so it can include redirections and "
+"stuff. For example, to only run the B<dpkg-source> hook if B<dpkg-source> "
+"is to be run, the hook could be something like: \"if [ %a -eq 1 ]; then ...; "
+"fi\"."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:256
+msgid ""
+"B<Please take care with hooks>, as misuse of them can lead to packages which "
+"FTBFS (fail to build from source). They can be useful for taking snapshots "
+"of things or the like."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:258
+msgid "For details, see above."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:265
+msgid "Command to gain root (or fake root) privileges."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:268
+msgid "Do not clean the environment, except for PATH."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:271
+msgid "Do not clean the I<var> variable from the environment."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:275
+msgid ""
+"If I<var> ends in an asterisk (\"*\") then all variables with names that "
+"match the portion of I<var> before the asterisk will be preserved."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:279
+msgid ""
+"Set the environment variable I<var> to I<value> and do not remove it from "
+"the environment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:279
+#, no-wrap
+msgid "B<--prepend-path=>I<value >"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:283
+msgid "Once the normalized PATH has been set, prepend I<value> to it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:283
+#, no-wrap
+msgid "B<--lintian>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:288
+msgid ""
+"Run B<lintian> after B<dpkg-buildpackage>. This is the default behaviour, "
+"and it overrides any configuration file directive to the contrary."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:288
+#, no-wrap
+msgid "B<--no-lintian>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:291
+msgid "Do not run B<lintian> after B<dpkg-buildpackage>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:291
+#, no-wrap
+msgid "B<--no-tgz-check>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:296
+msgid ""
+"Even if we're running B<dpkg-buildpackage> and the version number has a "
+"Debian revision, do not check that the I<.orig.tar.gz> file or I<.orig> "
+"directory exists before starting the build."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:296
+#, no-wrap
+msgid "B<--tgz-check>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:301
+msgid ""
+"If we're running B<dpkg-buildpackage> and the version number has a Debian "
+"revision, check that the I<.orig.tar.gz> file or I<.orig> directory exists "
+"before starting the build. This is the default behaviour."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:301
+#, no-wrap
+msgid "B<--username> I<username>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:305
+msgid ""
+"When signing, use B<debrsign> instead of B<debsign>. I<username> specifies "
+"the credentials to be used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:305
+#, no-wrap
+msgid "B<-->I<foo>B<-hook>=I<hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:309
+msgid "Set a hook as described above. If I<hook> is blank, this unsets the hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:309
+#, no-wrap
+msgid "B<--clear-hooks>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:313
+msgid "Clears all hooks. They may be reinstated by later command line options."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:324
+msgid "Do not run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:324
+#, no-wrap
+msgid "B<-D>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:327
+msgid "Run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:335
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override some of these configuration file "
+"settings, otherwise the B<--no-conf> option can be used to prevent reading "
+"these files. Environment variable settings are ignored when these "
+"configuration files are read. The currently recognised variables are:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:335
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENV>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:339
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve-env> "
+"command line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:339
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENVVARS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:344
+msgid ""
+"Which environment variables to preserve. This should be a comma-separated "
+"list of variables. This corresponds to using possibly multiple "
+"B<--preserve-envvar> or B<-e> options."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:344
+#, no-wrap
+msgid "B<DEBUILD_SET_ENVVAR_>I<var>B<=>I<value>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:347
+msgid "This corresponds to B<--set-envvar=>I<var>B<=>I<value>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:347
+#, no-wrap
+msgid "B<DEBUILD_PREPEND_PATH>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:350
+msgid "This corresponds to B<--prepend-path>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:350
+#, no-wrap
+msgid "B<DEBUILD_ROOTCMD>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:354
+msgid "Setting this variable to I<prog> is the equivalent of B<-r>I<prog>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:354
+#, no-wrap
+msgid "B<DEBUILD_TGZ_CHECK>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:358
+msgid ""
+"Setting this variable to I<no> is the same as the B<--no-tgz-check> command "
+"line option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:358
+#, no-wrap
+msgid "B<DEBUILD_SIGNING_USERNAME>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:362
+msgid ""
+"Setting this variable is the same as using the B<--username> command line "
+"option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:362
+#, no-wrap
+msgid "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:370
+msgid ""
+"These are options which should be passed to the invocation of "
+"B<dpkg-buildpackage>. They are given before any command-line options. Due "
+"to issues of shell quoting, if a word containing spaces is required as a "
+"single option, extra quotes will be required. For example, to ensure that "
+"your own GPG key is always used, even for sponsored uploads, the "
+"configuration file might contain the line:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:373
+#, no-wrap
+msgid ""
+"DEBUILD_DPKG_BUILDPACKAGE_OPTS=\"-k'Julian Gilbey E<lt>jdg@debian.orgE<gt>' "
+"-sa\"\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:378
+msgid ""
+"which gives precisely two options. Without the extra single quotes, "
+"B<dpkg-buildpackage> would reasonably complain that I<Gilbey> is an "
+"unrecognised option (it doesn't start with a B<-> sign)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:383
+msgid ""
+"Also, if this option contains any B<-r>, B<-d> or B<-D> options, these will "
+"always be taken account of by B<debuild>. Note that a B<-r> option in this "
+"variable will override the setting in B<DEBUILD_ROOTCMD>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:383
+#, no-wrap
+msgid "B<DEBUILD_>I<FOO>B<_HOOK>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:387
+msgid ""
+"The hook variable for the I<foo> hook. See the section on hooks above for "
+"more details. By default, this is empty."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:387
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:391
+msgid ""
+"Should we run B<lintian>? If this is set to I<no>, then B<lintian> will not "
+"be run."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:391
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN_OPTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:397
+msgid ""
+"These are options which should be passed to the invocation of B<lintian>. "
+"They are given before any command-line options, and the usage of this "
+"variable is as described for the B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> variable."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:408
+msgid ""
+"To build your own package, simply run B<debuild> from inside the source "
+"tree. B<dpkg-buildpackage>(1) options may be given on the command line."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:411
+msgid ""
+"The typical command line options to build only the binary package(s) "
+"without signing the .changes file (or the non-existent .dsc file):"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:414
+#, no-wrap
+msgid "debuild -i -us -uc -b\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:417
+msgid "Change the B<-b> to B<-S> to build only a source package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:420
+msgid ""
+"An example using B<lintian> to check the resulting packages and passing "
+"options to it:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:423
+#, no-wrap
+msgid "debuild --lintian-opts -i\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:431
+msgid ""
+"Note the order of options here: the B<debuild> options come first, then the "
+"B<dpkg-buildpackage> ones, then finally the checker options. (And "
+"B<lintian> is called by default.) If you find yourself using the same "
+"B<dpkg-buildpackage> options repeatedly, consider using the "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> configuration file option as described "
+"above."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:435
+msgid ""
+"To build a package for a sponsored upload, given I<foobar_1.0-1.dsc> and the "
+"respective source files, run something like the following commands:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:440
+#, no-wrap
+msgid ""
+"dpkg-source -x foobar_1.0-1.dsc\n"
+"cd foobar-1.0\n"
+"debuild -k0x12345678\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:447
+msgid ""
+"where 0x12345678 is replaced by your GPG key ID or other key identifier such "
+"as your email address. Again, you could also use the "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> configuration file option as described "
+"above to avoid having to type the B<-k> option each time you do a sponsored "
+"upload."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:459
+msgid ""
+"B<chmod>(1), B<debsign>(1), B<dpkg-buildpackage>(1), "
+"B<dpkg-checkbuilddeps>(1), B<fakeroot>(1), B<lintian>(1), B<su>(1), "
+"B<sudo>(1), B<super>(1), B<devscripts.conf>(5), B<dpkg-statoverride>(8)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:462
+msgid ""
+"The original B<debuild> program was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. The current version has been written by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:26
+msgid "desktop2menu - create a menu file skeleton from a desktop file"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:30
+msgid "B<desktop2menu> B<--help>|B<--version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:32
+msgid "B<desktop2menu> I<desktop file> [I<package name>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:36
+msgid ""
+"B<desktop2menu> generates a skeleton menu file from the supplied "
+"freedesktop.org desktop file."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:39
+msgid ""
+"The package name to be used in the menu file may be passed as an additional "
+"argument. If it is not supplied then B<desktop2menu> will attempt to derive "
+"the package name from the data in the desktop file."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:45
+msgid ""
+"This program is Copyright (C) 2007 by Sune Vuorela <debian@pusling.com>. It "
+"was modified by Adam D. Barratt <adam@adam-barratt.org.uk> for the "
+"devscripts package. This program comes with ABSOLUTELY NO WARRANTY. You "
+"are free to redistribute this code under the terms of the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:54
+msgid ""
+"Sune Vuorela <debian@pusling.com> with modifications by Adam D. Barratt "
+"<adam@adam-barratt.org.uk>"
+msgstr ""
+
+#. type: TH
+#: ../scripts/dep3changelog.1:1
+#, no-wrap
+msgid "DEP3CHANGELOG"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:4
+msgid "dep3changelog - generate a changelog entry from a DEP3-style patch header"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:6
+msgid "B<dep3changelog> I<patch> [I<patch> ...] [I<options>] [-- [I<dch_options>]]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:15
+msgid ""
+"B<dep3changelog> extracts the DEP3 patch headers from the given I<patch> "
+"files and builds a changelog entry for each patch. If the patch author "
+"differs from the one detected from the B<DEBEMAIL>, B<NAME>, B<DEBEMAIL>, or "
+"B<EMAIL> environment variables, ``Thanks to I<author> E<lt>I<email>E<gt>'' "
+"is added to the changelog entry for that patch. Any B<bug-debian> or "
+"B<bug-ubuntu> fields are added as ``Closes'' to the changelog entry. The "
+"generated changelog entries are passed to B<debchange> as an argument along "
+"with the given I<dch_options>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:28
+msgid "Steve Langasek E<lt>vorlon@debian.orgE<gt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:29 ../scripts/list-unreleased.1:21
+msgid "B<debchange>(1)"
+msgstr ""
+
+#. type: TH
+#: ../doc/devscripts.1:1
+#, no-wrap
+msgid "DEVSCRIPTS"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:4
+msgid "devscripts - scripts to ease the lives of Debian developers"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:12
+msgid ""
+"The B<devscripts> package provides a collection of scripts which may be of "
+"use to Debian developers and others wishing to build Debian packages. For a "
+"summary of the available scripts, please see the file "
+"I</usr/share/doc/devscripts/README.gz>, and for full details, please see the "
+"individual manpages. They are contributed by multiple developers; for "
+"details of the authors, please see the code or manpages."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:16
+msgid ""
+"Also, the directory I</usr/share/doc/devscripts/examples> contains an "
+"example B<exim> script for sorting mail arriving to Debian mailing lists."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:20
+msgid ""
+"Several scripts of the devscripts suite use the following environment "
+"variables. Check the man pages of individual scripts for more details on how "
+"the variables are used."
+msgstr ""
+
+#. type: IX
+#: ../doc/devscripts.1:20
+#, no-wrap
+msgid "Header"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:21
+#, no-wrap
+msgid "\\s-1DEBEMAIL\\s0"
+msgstr ""
+
+#. type: IX
+#: ../doc/devscripts.1:22 ../doc/devscripts.1:25
+#, no-wrap
+msgid "Item"
+msgstr ""
+
+#. type: =item
+#: ../doc/devscripts.1:22 ../scripts/ltnu.pod:74
+#, no-wrap
+msgid "DEBEMAIL"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:24
+msgid "Email of the person acting on a given Debian package via devscripts."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:24
+#, no-wrap
+msgid "\\s-1DEBFULLNAME\\s0"
+msgstr ""
+
+#. type: IX
+#: ../doc/devscripts.1:25
+#, no-wrap
+msgid "DEBFULLNAME"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:28
+msgid ""
+"Full name (first + family) of the person acting on a given Debian package "
+"via devscripts."
+msgstr ""
+
+#. type: SH
+#: ../doc/devscripts.1:28
+#, no-wrap
+msgid "SCRIPTS"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:31
+msgid ""
+"Here is the complete list of available devscripts. See their man pages for "
+"additional documentation."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:31
+#, no-wrap
+msgid "I<annotate-output>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:33
+msgid ""
+"run a command and prepend time and stream (O for stdout, E for stderr) for "
+"every line of output."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:33
+#, no-wrap
+msgid "I<archpath>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:35
+msgid ""
+"Prints arch (tla/Bazaar 1.x) package names. Also supports calculating the "
+"package names for other branches. [tla]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:35
+#, no-wrap
+msgid "I<bts>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:37
+msgid ""
+"A command-line tool for accessing the Debian Bug Tracking System, both to "
+"send mails to control@bts.debian.org and to access the web pages and SOAP "
+"interface of the BTS. [www-browser, libauthen-sasl-perl, libsoap-lite-perl, "
+"liburi-perl, libwww-perl, bsd-mailx | mailx]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:37
+#, no-wrap
+msgid "I<build-rdeps>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:39
+msgid ""
+"Searches for all packages that build-depend on a given "
+"package. [dctrl-tools, dose-extra, libdpkg-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:39
+#, no-wrap
+msgid "I<chdist>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:41
+msgid "tool to easily play with several distributions. [dctrl-tools]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:41
+#, no-wrap
+msgid "I<checkbashisms>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:43
+msgid "check whether a /bin/sh script contains any common bash-specific constructs."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:43
+#, no-wrap
+msgid "I<cowpoke>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:45
+msgid ""
+"upload a Debian source package to a cowbuilder host and build it, optionally "
+"also signing and uploading the result to an incoming queue. [ssh-client]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:45
+#, no-wrap
+msgid "I<cvs-debi, cvs-debc>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:47
+msgid ""
+"wrappers around debi and debc respectively (see below) which allow them to "
+"be called from the CVS working directory. [cvs-buildpackage]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:47
+#, no-wrap
+msgid "I<cvs-debrelease>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:49
+msgid ""
+"wrapper around debrelease which allows it to be called from the CVS working "
+"directory. [cvs-buildpackage, dupload | dput, ssh-client]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:49
+#, no-wrap
+msgid "I<cvs-debuild>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:51
+msgid ""
+"A wrapper for cvs-buildpackage to use debuild as its package building "
+"program. [cvs-buildpackage, fakeroot, lintian, gnupg |gnupg2]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:51
+#, no-wrap
+msgid "I<dcmd>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:53
+msgid ""
+"run a given command replacing the name of a .changes or .dsc file with each "
+"of the files referenced therein. *"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:53
+#, no-wrap
+msgid "I<dd-list>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:55
+msgid "given a list of packages, pretty-print it ordered by maintainer. *"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:55
+#, no-wrap
+msgid "I<debbisect>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:57
+msgid ""
+"bisect snapshot.debian.org to find which change in the archive introduced a "
+"certain problem. [mmdebstrap, python3-debian]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:57
+#, no-wrap
+msgid "I<debc>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:59
+msgid ""
+"List contents of current package. Do this after a successful \"debuild\" to "
+"see if the package looks all right."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:59
+#, no-wrap
+msgid "I<debchange (abbreviation dch)>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:61
+msgid ""
+"Modifies debian/changelog and manages version numbers for you. It will "
+"either increment the version number or add an entry for the current version, "
+"depending upon the options given to it. [libdistro-info-perl, "
+"libsoap-lite-perl]*"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:61
+#, no-wrap
+msgid "I<debcheckout>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:63
+msgid "checkout the development repository of a Debian package. *"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:63
+#, no-wrap
+msgid "I<debclean>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:65
+msgid ""
+"Clean a Debian source tree. Debclean will clean all Debian source trees "
+"below the current directory, and if requested, also remove all files that "
+"were generated from these source trees (that is .deb, .dsc and .changes "
+"files). It will keep the .diffs and original files, though, so that the "
+"binaries and other files can be rebuilt if necessary. [fakeroot]*"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:65
+#, no-wrap
+msgid "I<debcommit>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:67
+msgid ""
+"Commits changes to cvs, darcs, svn, svk, tla, bzr, git, or hg, using new "
+"entries in debian/changelog as the commit message. Also supports tagging "
+"Debian package releases. [cvs | darcs | subversion | svk | tla | bzr | "
+"git-core | mercurial, libtimedate-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:67
+#, no-wrap
+msgid "I<debdiff>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:69
+msgid ""
+"A program which examines two .deb files or two .changes files and reports on "
+"any difference found in their file lists. Useful for ensuring that no files "
+"were inadvertently lost between versions. Can also examine two .dsc files "
+"and report on the changes between source versions. For a deeper comparison "
+"one can use the diffoscope package. [wdiff, patchutils]*"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:69
+#, no-wrap
+msgid "I<debdiff-apply>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:71
+msgid ""
+"Apply unified diffs of two Debian source packages, such as those generated "
+"by debdiff, to a target Debian source package. Any changes to "
+"debian/changelog are dealt with specially, to avoid the conflicts that "
+"changelog diffs typically produce when applied naively. May be used to check "
+"that old patches still apply to newer versions of those "
+"packages. [python3-debian, python3-unidiff, quilt]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:71
+#, no-wrap
+msgid "I<debi>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:73
+msgid ""
+"Installs the current package by using the setuid root debpkg script "
+"described below. It assumes that the current package has just been built "
+"(for example by debuild), and the .deb lives in the parent directory, and "
+"will effectively run dpkg -i on the .deb. The ability to install the "
+"package with a very short command is very useful when troubleshooting "
+"packages."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:73
+#, no-wrap
+msgid "I<debootsnap>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:75
+msgid ""
+"Combines debootstrap and snapshot.debian.org to create a chroot containing "
+"exactly the requested selection of packages. This can be used to re-create a "
+"chroot from the past, for example to reproduce a bug. The tool is also used "
+"by debrebuild to build a package in a chroot with build dependencies in the "
+"same version as recorded in the buildinfo file. [apt-utils, dpkg-dev, "
+"equivs, mmdebstrap, python3-pycurl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:75
+#, no-wrap
+msgid "I<debpkg>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:77
+msgid ""
+"A wrapper for dpkg used by debi to allow convenient testing of packages. "
+"For debpkg to work, it needs to be made setuid root, and this needs to be "
+"performed by the sysadmin -- it is not installed as setuid root by default. "
+"(Note that being able to run a setuid root debpkg is effectively the same as "
+"having root access to the system, so this should be done with caution.) "
+"Having debpkg as a wrapper for dpkg can be a Good Thing (TM), as it "
+"decreases the potential for damage by accidental wrong use of commands in "
+"superuser mode (e.g., an inadvertent rm -rf * in the wrong directory is "
+"disastrous as many can attest to)."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:77
+#, no-wrap
+msgid "I<debrelease>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:79
+msgid ""
+"A wrapper around dupload or dput which figures out which version to upload, "
+"and then calls dupload or dput to actually perform the upload. [dupload | "
+"dput, ssh-client]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:79
+#, no-wrap
+msgid "I<debrebuild>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:81
+msgid ""
+"A script that provided a .buildinfo file reports the instructions on how to "
+"try to reproduce the reported build. [sbuild | mmdebstrap, python3-pycurl, "
+"libdpkg-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:81
+#, no-wrap
+msgid "I<debrepro>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:83
+msgid ""
+"A script that tests reproducibility of Debian packages. It will build a "
+"given source directory twice, with a set of variation between the first and "
+"second build, and compare the binary packages produced. If diffoscope is "
+"installed, it is used to compare non-matching binaries. If disorderfs is "
+"installed, it is used during the build to inject non-determinism in "
+"filesystem listing operations. [faketime, diffoscope, disorderfs]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:83
+#, no-wrap
+msgid "I<debrsign>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:85
+msgid ""
+"This transfers a .changes/.dsc pair to a remote machine for signing, and "
+"runs debsign on the remote machine over an SSH connection. [gnupg | gnupg2, "
+"debian-keyring, ssh-client]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:85
+#, no-wrap
+msgid "I<debsign>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:87
+msgid ""
+"Use GNU Privacy Guard to sign the changes (and possibly dsc) files created "
+"by running dpkg-buildpackage with no-sign options. Useful if you are "
+"building a package on a remote machine and wish to sign it on a local one. "
+"This script is capable of automatically downloading the .changes and .dsc "
+"files from a remote machine. [gnupg |gnupg2, debian-keyring, ssh-client]*"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:87
+#, no-wrap
+msgid "I<debsnap>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:89
+msgid "grab packages from https://snapshot.debian.org [libwww-perl, libjson-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:89
+#, no-wrap
+msgid "I<debuild>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:91
+msgid ""
+"A wrapper for building a package (i.e., dpkg-buildpackage) to avoid problems "
+"with insufficient permissions and wrong paths etc. Debuild will set up the "
+"proper environment for building a package. Debuild will use the fakeroot "
+"program to build the package by default, but can be instructed to use any "
+"other gain-root command, or can even be installed setuid root. Debuild can "
+"also be used to run various of the debian/rules operations with the same "
+"root-gaining procedure. Debuild will also run lintian to check that the "
+"package does not have any major policy violations. [fakeroot, lintian, gnupg "
+"| gnupg2]*"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:91
+#, no-wrap
+msgid "I<deb-janitor>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:93
+msgid "command-line client for interacting with the Debian Janitor."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:93
+#, no-wrap
+msgid "I<deb-reversion>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:95
+msgid ""
+"increases a binary package version number and repacks the package, useful "
+"for porters and the like."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:95
+#, no-wrap
+msgid "I<deb-why-removed>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:97
+msgid "shows the reason a package was removed from the archive. [libdpkg-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:97
+#, no-wrap
+msgid "I<dep3changelog>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:99
+msgid "generate a changelog entry from a DEP3-style patch header."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:99
+#, no-wrap
+msgid "I<desktop2menu>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:101
+msgid ""
+"given a freedesktop.org desktop file, generate a skeleton for a menu "
+"file. [libfile-desktopentry-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:101
+#, no-wrap
+msgid "I<dget>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:103
+msgid ""
+"Downloads Debian source and binary packages. Point at a .changes or .dsc to "
+"download all references files. Specify a package name to download it from "
+"the configured apt repository. [wget | curl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:103
+#, no-wrap
+msgid "I<diff2patches>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:105
+msgid ""
+"extracts patches from a .diff.gz file placing them under debian/ or, if "
+"present, debian/patches. [patchutils]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:105
+#, no-wrap
+msgid "I<dpkg-depcheck, dpkg-genbuilddeps>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:107
+msgid ""
+"Runs a specified command (such as debian/rules build) or dpkg-buildpackage, "
+"respectively, to determine the packages used during the build process. This "
+"information can be helpful when trying to determine the packages needed in "
+"the Build-Depends etc. lines in the debian/control file. [build-essential, "
+"strace]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:107
+#, no-wrap
+msgid "I<dscextract>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:109
+msgid "extract a single file from a Debian source package. [patchutils]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:109
+#, no-wrap
+msgid "I<dscverify>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:111
+msgid ""
+"check the signature and MD5 sums of a dsc file against the most current "
+"Debian keyring on your system. [gnupg | gnupg2, debian-keyring]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:111
+#, no-wrap
+msgid "I<edit-patch>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:113
+msgid ""
+"add/edit a patch for a source package and commit the changes. [quilt | "
+"dpatch | cdbs]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:113
+#, no-wrap
+msgid "I<getbuildlog>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:115
+msgid "download package build logs from Debian auto-builders. [wget]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:115
+#, no-wrap
+msgid "I<git-deborig>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:117
+msgid ""
+"try to produce Debian orig.tar using git-archive(1). [libdpkg-perl, "
+"libgit-wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, "
+"libtry-tiny-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:117
+#, no-wrap
+msgid "I<grep-excuses>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:119
+msgid ""
+"grep britney's excuses to find out what is happening to your "
+"packages. [libdbd-pg-perl, libterm-size-perl, libyaml-syck-perl, wget, w3m]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:119
+#, no-wrap
+msgid "I<hardening-check>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:121
+msgid "report the hardening characteristics of a set of binaries."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:121
+#, no-wrap
+msgid "I<list-unreleased>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:123
+msgid "searches for packages marked UNRELEASED in their changelog."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:123
+#, no-wrap
+msgid "I<ltnu (Long Time No Upload)>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:125
+msgid ""
+"List all uploads of packages by the given uploader or maintainer and display "
+"them ordered by the last upload of that package, oldest uploads first."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:125
+#, no-wrap
+msgid "I<manpage-alert>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:127
+msgid "locate binaries without corresponding manpages. [man-db]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:127
+#, no-wrap
+msgid "I<mass-bug>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:129
+msgid "mass-file bug reports. [bsd-mailx | mailx]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:129
+#, no-wrap
+msgid "I<mergechanges>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:131
+msgid ""
+"merge .changes files from the same release but built on different "
+"architectures."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:131
+#, no-wrap
+msgid "I<mk-build-deps>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:133
+msgid ""
+"Given a package name and/or control file, generate a binary package which "
+"may be installed to satisfy the build-dependencies of the given "
+"package. [equivs]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:133
+#, no-wrap
+msgid "I<mk-origtargz>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:135
+msgid ""
+"Rename upstream tarball, optionally changing the compression and removing "
+"unwanted files. [libfile-which-perl, unzip, xz-utils, file]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:135
+#, no-wrap
+msgid "I<namecheck>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:137
+msgid "Check project names are not already taken."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:137
+#, no-wrap
+msgid "I<nmudiff>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:139
+msgid ""
+"prepare a diff of this version (presumably an NMU against the previously "
+"released version (as per the changelog) and submit the diff to the "
+"BTS. [patchutils, mutt]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:139
+#, no-wrap
+msgid "I<origtargz>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:141
+msgid ""
+"fetch the orig tarball of a Debian package from various sources, and unpack "
+"it. [pristine-tar, pristine-lfs]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:141
+#, no-wrap
+msgid "I<plotchangelog>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:143
+msgid ""
+"display information from a changelog graphically using "
+"gnuplot. [libtimedate-perl, gnuplot]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:143
+#, no-wrap
+msgid "I<pts-subscribe>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:145
+msgid ""
+"subscribe to the PTS (Package Tracking System) for a limited period of "
+"time. [bsd-mailx | mailx, at]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:145
+#, no-wrap
+msgid "I<rc-alert>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:147
+msgid "list installed packages which have release-critical bugs. [wget | curl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:147
+#, no-wrap
+msgid "I<reproducible-check>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:149
+msgid ""
+"reports on the reproducible status of installed packages. For more details "
+"please see E<lt>https://reproducible-builds.orgE<gt>."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:149
+#, no-wrap
+msgid "I<rmadison>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:151
+msgid ""
+"remotely query the Debian archive database about packages. [liburi-perl, "
+"wget | curl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:151
+#, no-wrap
+msgid "I<sadt>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:153
+msgid "run DEP-8 tests. [python3-debian, autodep8]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:153
+#, no-wrap
+msgid "I<salsa>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:155
+msgid "manipulates salsa.debian.org repositories and users [libgitlab-api-v4-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:155
+#, no-wrap
+msgid "I<suspicious-source>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:157
+msgid "output a list of files which are not common source files. [python3-magic]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:157
+#, no-wrap
+msgid "I<svnpath>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:159
+msgid ""
+"Prints the path to the Subversion repository of a Subversion checkout. Also "
+"supports calculating the paths for branches and tags in a repository "
+"independent fashion. Used by debcommit to generate svn tags. [subversion]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:159
+#, no-wrap
+msgid "I<tagpending>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:161
+msgid ""
+"runs from a Debian source tree and tags bugs that are to be closed in the "
+"latest changelog as pending. [libsoap-lite-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:161
+#, no-wrap
+msgid "I<transition-check>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:163
+msgid ""
+"Check a list of source packages for involvement in transitions for which "
+"uploads to unstable are currently blocked. [libwww-perl, libyaml-syck-perl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:163
+#, no-wrap
+msgid "I<uscan>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:165
+msgid ""
+"Automatically scan for and download upstream updates. Uscan can also call a "
+"program such as uupdate to attempt to update the Debianised version based on "
+"the new update. Whilst uscan could be used to release the updated version "
+"automatically, it is probably better not to without testing it first. Uscan "
+"can also verify detached OpenPGP signatures if upstream's signing key is "
+"known. [file, gpgv | gpgv2, gnupg | gnupg2, libfile-dirlist-perl, "
+"libfile-touch-perl, libfile-which-perl, liblwp-protocol-https-perl, "
+"libmoo-perl, libwww-perl, unzip, xz-utils]*"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:165
+#, no-wrap
+msgid "I<uupdate>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:167
+msgid ""
+"Update the package with an archive or patches from an upstream author. This "
+"will be of help if you have to update your package. It will try to apply "
+"the latest diffs to your package and tell you how successful it was. [patch]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:167
+#, no-wrap
+msgid "I<what-patch>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:169
+msgid "determine what patch system, if any, a source package is using. [patchutils]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:169
+#, no-wrap
+msgid "I<whodepends>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:171
+msgid "check which maintainers' packages depend on a package."
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:171
+#, no-wrap
+msgid "I<who-permits-upload>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:173
+msgid ""
+"Retrieve information about Debian Maintainer access control lists. [gnupg | "
+"gnupg2, libencode-locale-perl, libwww-perl, debian-keyring]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:173
+#, no-wrap
+msgid "I<who-uploads>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:175
+msgid ""
+"determine the most recent uploaders of a package to the Debian "
+"archive. [gnupg | gnupg2, debian-keyring, debian-maintainers, wget]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:175
+#, no-wrap
+msgid "I<wnpp-alert>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:177
+msgid "list installed packages which are orphaned or up for adoption. [wget | curl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:177
+#, no-wrap
+msgid "I<wnpp-check>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:179
+msgid ""
+"check whether there is an open request for packaging or intention to package "
+"bug for a package. [wget | curl]"
+msgstr ""
+
+#. type: IP
+#: ../doc/devscripts.1:179
+#, no-wrap
+msgid "I<wrap-and-sort>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.1:180
+msgid "wrap long lines and sort items in packaging files. [python3-debian]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:567
+msgid "dget - Download Debian source and binary packages"
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:573
+msgid "B<dget> [I<options>] I<URL> ..."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:575
+msgid "B<dget> [I<options>] [B<--all>] I<package>[B<=>I<version>] ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:581
+msgid ""
+"B<dget> downloads Debian packages. In the first form, B<dget> fetches the "
+"requested URLs. If this is a .dsc or .changes file, then B<dget> acts as a "
+"source-package aware form of B<wget>: it also fetches any files referenced "
+"in the .dsc/.changes file. The downloaded source is then checked with "
+"B<dscverify> and, if successful, unpacked by B<dpkg-source>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:588
+msgid ""
+"In the second form, B<dget> downloads a I<binary> package (i.e., a I<.deb> "
+"file) from the Debian mirror configured in /etc/apt/sources.list(.d). "
+"Unlike B<apt-get install -d>, it does not require root privileges, writes to "
+"the current directory, and does not download dependencies. If a version "
+"number is specified, this version of the package is requested. With "
+"B<--all>, the list of all binaries for the source package I<package> is "
+"extracted from the output of C<apt-cache showsrc package>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:597
+msgid ""
+"In both cases dget is capable of getting several packages and/or URLs at "
+"once."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:600
+msgid ""
+"(Note that I<.udeb> packages used by debian-installer are located in "
+"separate packages files from I<.deb> packages. In order to use I<.udebs> "
+"with B<dget>, you will need to have configured B<apt> to use a packages file "
+"for I<component>/I<debian-installer>)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:605
+msgid ""
+"Before downloading files listed in .dsc and .changes files, and before "
+"downloading binary packages, B<dget> checks to see whether any of these "
+"files already exist. If they do, then their md5sums are compared to avoid "
+"downloading them again unnecessarily. B<dget> also looks for matching files "
+"in I</var/cache/apt/archives> and directories given by the B<--path> option "
+"or specified in the configuration files (see below). Finally, if "
+"downloading (.orig).tar.gz or .diff.gz files fails, dget consults B<apt-get "
+"source --print-uris>. Download backends used are B<curl> and B<wget>, "
+"looked for in that order."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:615
+msgid ""
+"B<dget> was written to make it easier to retrieve source packages from the "
+"web for sponsor uploads. For checking the package with B<debdiff>, the last "
+"binary version is available via B<dget> I<package>, the last source version "
+"via B<apt-get source> I<package>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:626
+msgid ""
+"Interpret I<package> as a source package name, and download all binaries as "
+"found in the output of \"apt-cache showsrc I<package>\". If I<package> is "
+"arch-qualified, then only binary packages which are \"Arch: all\", \"Arch: "
+"any\", or \"Arch: $arch\" will be downloaded."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:631
+msgid "B<-b>, B<--backup>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:633
+msgid "Move files that would be overwritten to I<./backup>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:637
+msgid "Suppress B<wget>/B<curl> non-error output."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:639 ../scripts/origtargz.pl:134
+msgid "B<-d>, B<--download-only>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:641
+msgid ""
+"Do not run B<dpkg-source -x> on the downloaded source package. This can "
+"only be used with the first method of calling B<dget>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:644
+msgid "B<-x>, B<--extract>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:646
+msgid ""
+"Run B<dpkg-source -x> on the downloaded source package to unpack it. This "
+"option is the default and can only be used with the first method of calling "
+"B<dget>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:650
+msgid "B<-u>, B<--allow-unauthenticated>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:652
+msgid ""
+"Do not attempt to verify the integrity of downloaded source packages using "
+"B<dscverify>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:655
+msgid "B<--build>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:657
+msgid "Run B<dpkg-buildpackage -b -uc> on the downloaded source package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:659
+msgid "B<--path> I<DIR>[B<:>I<DIR> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:661
+msgid ""
+"In addition to I</var/cache/apt/archives>, B<dget> uses the colon-separated "
+"list given as argument to B<--path> to find files with a matching md5sum. "
+"For example: \"--path /srv/pbuilder/result:/home/cb/UploadQueue\". If DIR "
+"is empty (i.e., \"--path ''\" is specified), then any previously listed "
+"directories or directories specified in the configuration files will be "
+"ignored. This option may be specified multiple times, and all of the "
+"directories listed will be searched; hence, the above example could have "
+"been written as: \"--path /srv/pbuilder/result --path "
+"/home/cb/UploadQueue\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:672
+msgid "B<-k>, B<--insecure>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:674
+msgid "Allow SSL connections to untrusted hosts."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:676 ../scripts/salsa.pl:456
+msgid "B<--no-cache>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:678
+msgid "Bypass server-side HTTP caches by sending a B<Pragma: no-cache> header."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:682
+msgid "Show a help message."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:686
+msgid "Show version information."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:692
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variable is:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:700
+msgid "B<DGET_PATH>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:702
+msgid ""
+"This can be set to a colon-separated list of directories in which to search "
+"for files in addition to the default I</var/cache/apt/archives>. It has the "
+"same effect as the B<--path> command line option. It is not set by default."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:707
+msgid "B<DGET_UNPACK>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:709
+msgid ""
+"Set to 'no' to disable extracting downloaded source packages. Default is "
+"'yes'."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:712
+msgid "B<DGET_VERIFY>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:714
+msgid ""
+"Set to 'no' to disable checking signatures of downloaded source packages. "
+"Default is 'yes'."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:721
+msgid ""
+"Download all I<.deb> files for the previous version of a package and run "
+"B<debdiff> on them:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/dget.pl:724
+#, no-wrap
+msgid ""
+" dget --all mypackage=1.2-1\n"
+" debdiff --from *_1.2-1_*.deb --to *_1.2-2_*.deb\n"
+"\n"
+msgstr ""
+
+#. type: =head1
+#: ../scripts/dget.pl:727
+msgid "BUGS AND COMPATIBILITY"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:729
+msgid "B<dget> I<package> should be implemented in B<apt-get install -d>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:731
+msgid ""
+"Before devscripts version 2.10.17, the default was not to extract the "
+"downloaded source. Set DGET_UNPACK=no to revert to the old behaviour."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:736
+msgid ""
+"This program is Copyright (C) 2005-2013 by Christoph Berg "
+"<myon@debian.org>. Modifications are Copyright (C) 2005-06 by Julian Gilbey "
+"<jdg@debian.org>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:739 ../scripts/tagpending.pl:434
+msgid ""
+"This program is licensed under the terms of the GPL, either version 2 of the "
+"License, or (at your option) any later version."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:744
+msgid ""
+"B<apt-get>(1), B<curl>(1), B<debcheckout>(1), B<debdiff>(1), "
+"B<dpkg-source>(1), B<wget>(1)"
+msgstr ""
+
+#. type: TH
+#: ../scripts/diff2patches.1:1
+#, no-wrap
+msgid "diff2patches"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:1 ../scripts/diff2patches.1:50
+#, no-wrap
+msgid "Raphael Geissert E<lt>atomo64@gmail.comE<gt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:5
+msgid "diff2patches - Extract non-debian/ patches from .diff.gz files"
+msgstr ""
+
+#. type: SH
+#: ../scripts/diff2patches.1:5
+#, no-wrap
+msgid "SYNTAX"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:8
+msgid "B<diff2patches >I<filename>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:10
+msgid "B<diff2patches --help>|B<--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:16
+msgid ""
+"Extracts patches from .diff.gz which apply to files outside the ``debian/'' "
+"directory scope. A patch is created for each modified file. Each patch is "
+"named according to the path of the modified file, with ``/'' replaced by "
+"``___'', and an extension of ``.patch''."
+msgstr ""
+
+#. type: TP
+#: ../scripts/diff2patches.1:18
+#, no-wrap
+msgid "I<filename>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:22
+msgid ""
+"Extract patches from I<filename> which apply outside the ``debian/'' "
+"directory."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:25
+msgid "Output help information and exit."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:28
+msgid "Output version information and exit."
+msgstr ""
+
+#. type: TP
+#: ../scripts/diff2patches.1:29
+#, no-wrap
+msgid "I<debian/control>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:32
+msgid "Existence of this file is tested before any patch is extracted."
+msgstr ""
+
+#. type: TP
+#: ../scripts/diff2patches.1:32
+#, no-wrap
+msgid "I<debian/>"
+msgstr ""
+
+#. type: TQ
+#: ../scripts/diff2patches.1:34
+#, no-wrap
+msgid "I<debian/patches/>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:40
+msgid ""
+"Patches are extracted to one of these directories. ``debian/patches/'' is "
+"preferred, if it exists. If I<DEB_PATCHES> is present in the environment, "
+"it will override this behavior (see ``ENVIRONMENT VARIABLES'' section "
+"below)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/diff2patches.1:41
+#, no-wrap
+msgid "B<DEB_PATCHES>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:45
+msgid ""
+"When defined and points to an existing directory, patches are extracted in "
+"that directory and not under ``debian/'' nor ``debian/patches/''."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:48
+msgid "B<combinediff>(1)"
+msgstr ""
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "DPKG-DEPCHECK"
+msgstr ""
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "March 2002"
+msgstr ""
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "dpkg-depcheck"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:4
+msgid "dpkg-depcheck - determine packages used to execute a command"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:6
+msgid "B<dpkg-depcheck> [I<options>] I<command>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:15
+msgid ""
+"This program runs the specified command under B<strace> and then determines "
+"and outputs the packages used in the process. The list can be trimmed in "
+"various ways as described in the options below. A good example of this "
+"program would be the command B<dpkg-depcheck -b debian/rules build>, which "
+"would give a good first approximation to the Build-Depends line needed by a "
+"Debian package. Note, however, that this does I<not> give any direct "
+"information on versions required or architecture-specific packages."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:22
+msgid ""
+"Report all packages used to run I<command>. This is the default behaviour. "
+"If used in conjunction with B<-b>, B<-d> or B<-m>, gives additional "
+"information on those packages skipped by these options."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:22
+#, no-wrap
+msgid "B<-b>, B<--build-depends>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:26
+msgid ""
+"Do not report any build-essential or essential packages used, or any of "
+"their (direct or indirect) dependencies."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:26
+#, no-wrap
+msgid "B<-d>, B<--ignore-dev-deps>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:30
+msgid ""
+"Do not show packages used which are direct dependencies of I<-dev> packages "
+"used. This implies B<-b>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:30
+#, no-wrap
+msgid "B<-m>, B<--min-deps>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:34
+msgid ""
+"Output a minimal set of packages needed, taking into account direct "
+"dependencies. Using B<-m> implies B<-d> and also B<-b>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:34
+#, no-wrap
+msgid "B<-C>, B<--C-locale>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:37
+msgid "Run I<command> with the C locale."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:37
+#, no-wrap
+msgid "B<--no-C-locale>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:40
+msgid "Don't change locale when running I<command>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:40
+#, no-wrap
+msgid "B<-l>, B<--list-files>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:43
+msgid "Also report the list of files used in each package."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:43
+#, no-wrap
+msgid "B<--no-list-files>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:47
+msgid "Do not report the files used in each package. Cancels a B<-l> option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:47
+#, no-wrap
+msgid "B<-o>, B<--output=>I<FILE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:50
+msgid "Output the package diagnostics to I<FILE> instead of stdout."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:50
+#, no-wrap
+msgid "B<-O>, B<--strace-output=>I<FILE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:54
+msgid ""
+"Write the B<strace> output to I<FILE> when tracing I<command> instead of "
+"using a temporary file."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:54
+#, no-wrap
+msgid "B<-I>, B<--strace-input=>I<FILE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:59
+msgid ""
+"Get B<strace> output from I<FILE> instead of tracing I<command>; B<strace> "
+"must have be run with the B<-f -q> options for this to work."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:59
+#, no-wrap
+msgid "B<-f>, B<--features=>I<LIST>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:65
+msgid ""
+"Enable or disabled features given in the comma-separated I<LIST> as "
+"follows. A feature is enabled with I<+feature> or just I<feature> and "
+"disabled with I<-feature>. The currently recognised features are:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:67
+#, no-wrap
+msgid "B<warn-local>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:71
+msgid ""
+"Warn if files in I</usr/local> or I</var/local> are used. Enabled by "
+"default."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:71
+#, no-wrap
+msgid "B<discard-check-version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:76
+msgid ""
+"Discards I<execve> when only a I<--version> argument is given to the "
+"program; this works around some configure scripts that check for binaries "
+"they don't actually use. Enabled by default."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:76
+#, no-wrap
+msgid "B<trace-local>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:81
+msgid ""
+"Also try to identify files which are accessed in I</usr/local> and "
+"I</var/local>. Not usually very useful, as Debian does not place files in "
+"these directories. Disabled by default."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:81
+#, no-wrap
+msgid "B<catch-alternatives>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:85
+msgid ""
+"Warn about access to files controlled by the Debian I<alternatives> "
+"mechanism. Enabled by default."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:85
+#, no-wrap
+msgid "B<discard-sgml-catalogs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:90
+msgid ""
+"Discards access to SGML catalogs; some SGML tools read all the registered "
+"catalogs at startup. Files matching the regexp /usr/share/sgml/.*\\e.cat "
+"are recognised as catalogs. Enabled by default."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:99
+msgid "Display usage information and exit."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dpkg-depcheck.1:99 ../scripts/mk-build-deps.pl:115
+#, no-wrap
+msgid "B<-v>, B<--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:102
+msgid "Display version and copyright information and exit."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:108 ../scripts/grep-excuses.1:52
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced in that order to set configuration variables. Command line options "
+"can be used to override configuration file settings. Environment variable "
+"settings are ignored for this purpose. The currently recognised variable "
+"is:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:108
+#, no-wrap
+msgid "B<DPKG_DEPCHECK_OPTIONS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:112
+msgid ""
+"These are options which are parsed before the command-line options. For "
+"example,"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:114
+msgid "DPKG_DEPCHECK_OPTIONS=\"-b -f-catch-alternatives\""
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:118
+msgid ""
+"which passes these options to B<dpkg-depcheck> before any command-line "
+"options are processed. You are advised not to try tricky quoting, because "
+"of the vagaries of shell quoting!"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:123
+msgid "B<dpkg>(1), B<strace>(1), B<devscripts.conf>(5), B<update-alternatives>(8)"
+msgstr ""
+
+#. type: SH
+#: ../scripts/dpkg-depcheck.1:123
+#, no-wrap
+msgid "COPYING"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:130
+msgid ""
+"Copyright 2001 Bill Allombert E<lt>ballombe@debian.orgE<gt>. Modifications "
+"copyright 2002,2003 Julian Gilbey E<lt>jdg@debian.orgE<gt>. "
+"B<dpkg-depcheck> is free software, covered by the GNU General Public "
+"License, version 2 or (at your option) any later version, and you are "
+"welcome to change it and/or distribute copies of it under certain "
+"conditions. There is absolutely no warranty for B<dpkg-depcheck>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/dpkg-genbuilddeps.1:1
+#, no-wrap
+msgid "DPKG-GENBUILDDEPS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:4
+msgid "dpkg-genbuilddeps - generate a list of packages used to build this package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:6
+msgid "B<dpkg-genbuilddeps> [I<arg> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:19
+msgid ""
+"This program is a wrapper around B<dpkg-depcheck>(1). It should be run from "
+"the top of a Debian build tree. It calls B<dpkg-buildpackage> with any "
+"arguments given on the command line, and by tracing the execution of this, "
+"it determines which non-essential packages were used during the package "
+"building. This can be useful in determining what the I<Build-Depends> "
+"control fields should contain. It does not determine which packages were "
+"used for the arch independent parts of the build and which for the arch "
+"dependent parts, not does it attempt to determine which versions of packages "
+"are required. It should be able to run under B<fakeroot> rather than being "
+"run as root, as B<fakeroot dpkg-genbuilddeps>, or B<dpkg-genbuilddeps "
+"-rfakeroot>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:23
+msgid ""
+"This program requires the build-essential package to be installed. If it is "
+"not, please use B<dpkg-depcheck> directly, with a command such as"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:25
+#, no-wrap
+msgid " dpkg-depcheck --all dpkg-buildpackage -us -uc -b -rfakeroot ...\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:27
+msgid "All this program itself does is essentially to run the command:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:29
+#, no-wrap
+msgid " dpkg-depcheck -b dpkg-buildpackage -us -uc -b -rfakeroot [arg ...]\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:33
+msgid "B<dpkg-depcheck>(1), B<fakeroot>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:36
+msgid "B<The Debian Policy Manual,> sections on Build-Depends etc."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:40
+msgid ""
+"The original B<dpkg-genbuilddeps> was written by Ben Collins "
+"E<lt>bcollins@debian.orgE<gt>. The current version is a simple wrapper "
+"around B<dpkg-depcheck> written by Bill Allombert "
+"E<lt>ballombe@debian.orgE<gt>. This manual page was written by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: TH
+#: ../doc/edit-patch.1:1
+#, no-wrap
+msgid "EDIT-PATCH"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:5
+msgid ""
+"B<edit-patch>, B<add-patch> - tool for preparing patches for Debian source "
+"packages"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:8
+msgid "B<edit-patch> I<path/to/patch>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:10
+msgid "B<add-patch> I<path/to/patch>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:18
+msgid ""
+"B<edit-patch> is a wrapper script around the Quilt, CDBS, and dpatch patch "
+"systems. It simplifies the process of preparing and editing patches to "
+"Debian source packages and allows the user to not have to be concerned with "
+"which patch system is in use. Run from inside the root directory of the "
+"source package, B<edit-patch> can be used to edit existing patches located "
+"in I<debian/patches>."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:25
+msgid ""
+"It can also be used to incorporate new patches. If pointed at a patch not "
+"already present, it will copy the patch to I<debian/patches> in the correct "
+"format for the patch system in use. Next, the patch is applied and a "
+"subshell is opened in order to edit the patch. Typing B<exit> or pressing "
+"Ctrl-d will close the subshell and launch an editor to record the "
+"I<debian/changelog> entry."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:29
+msgid ""
+"B<edit-patch> is integrated with the Bazaar and Git version control "
+"systems. The patch will be automatically added to the tree, and the "
+"I<debian/changelog> entry will be used as the commit message."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:32
+msgid ""
+"If no patch system is present, the patch is applied inline, and a copy is "
+"stored in I<debian/patches-applied>."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:36
+msgid ""
+"B<add-patch> is the non-interactive version of B<edit-patch>. The patch "
+"will be incorporated but no editor or subshell will be spawned."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:40
+msgid ""
+"B<edit-patch> was written by Daniel Holbach "
+"E<lt>daniel.holbach@canonical.comE<gt>, Michael Vogt "
+"E<lt>michael.vogt@canonical.comE<gt>, and David Futcher "
+"E<lt>bobbo@ubuntu.comE<gt>."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:42
+msgid ""
+"This manual page was written by Andrew Starr-Bochicchio "
+"E<lt>a.starr.b@gmail.comE<gt>."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/edit-patch.1:43
+msgid ""
+"Both are released under the terms of the GNU General Public License, version "
+"3."
+msgstr ""
+
+#. type: TH
+#: ../scripts/dscextract.1:1
+#, no-wrap
+msgid "DSCEXTRACT"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:4
+msgid "dscextract - extract a single file from a Debian source package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:6
+msgid "B<dscextract> [I<options>] I<dscfile> I<file>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:11
+msgid ""
+"B<dscextract> reads a single file from a Debian source package. The idea is "
+"to only look into I<.diff.gz> files (source format 1.0) or "
+"I<.debian.tar.gz/bz2> files (source format 3.0) where possible, hence "
+"avoiding to unpack large tarballs. It is most useful for files in the "
+"I<debian/> subdirectory."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:14
+msgid ""
+"I<file> is relative to the first level directory contained in the package, "
+"i.e. with the first component stripped."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dscextract.1:15
+#, no-wrap
+msgid "B<-f>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:20
+msgid ""
+"\"Fast\" mode. For source format 1.0, avoid to fall back scanning the "
+"I<.orig.tar.gz> file if I<file> was not found in the I<.diff.gz>. (For 3.0 "
+"packages, it is assumed that I<debian/*> are exactly the contents of "
+"I<debian.tar.gz/bz2>.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/dscextract.1:21 ../scripts/wnpp-check.1:29
+#, no-wrap
+msgid "0"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:24
+msgid "I<file> was extracted."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:27
+msgid "I<file> was not found in the source package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:30
+msgid "An error occurred, like I<dscfile> was not found."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:32
+msgid "dscextract dds_2.1.1+ddd105-2.dsc debian/watch || test $? = 1"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscextract.1:33
+msgid "B<dscextract> was written by Christoph Berg E<lt>myon@debian.orgE<gt>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/dscverify.1:1
+#, no-wrap
+msgid "DSCVERIFY"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:4
+msgid "dscverify - verify the validity of a Debian package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:6
+msgid ""
+"B<dscverify> [B<--keyring >I<keyring>] "
+"... I<changes_or_buildinfo_or_dsc_filename> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:17
+msgid ""
+"B<dscverify> checks that the GPG signatures on the given I<.changes>, "
+"I<.buildinfo> or I<.dsc> files are good signatures made by keys in the "
+"current Debian keyrings, found in the I<debian-keyring> package. "
+"(Additional keyrings can be specified using the B<--keyring> option any "
+"number of times.) It then checks that the other files listed in the "
+"I<.changes>, I<.buildinfo> or I<.dsc> files have the correct sizes and "
+"checksums (MD5 plus SHA1 and SHA256 if the latter are present). The exit "
+"status is 0 if there are no problems and non-zero otherwise."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dscverify.1:18
+#, no-wrap
+msgid "B<--keyring>I< >I<keyring>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:21
+msgid "Add I<keyring> to the list of keyrings to be used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dscverify.1:21 ../scripts/who-uploads.1:25
+#, no-wrap
+msgid "B<--no-default-keyrings>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:24
+msgid "Do not use the default set of keyrings."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dscverify.1:28
+#, no-wrap
+msgid "B<--nosigcheck>, B<--no-sig-check>, B<-u>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:33
+msgid ""
+"Skip the signature verification step. That is, only verify the sizes and "
+"checksums of the files listed in the I<.changes>, I<.buildinfo> or I<.dsc> "
+"files."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dscverify.1:33 ../scripts/plotchangelog.1:78
+#: ../scripts/salsa.pl:579 ../scripts/uupdate.1:98
+#, no-wrap
+msgid "B<--verbose>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:36
+msgid "Do not suppress GPG output."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:50
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. "
+"Environment variable settings are ignored for this purpose. If the first "
+"command line option given is B<--noconf> or B<--no-conf>, then these files "
+"will not be read. The currently recognised variable is:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/dscverify.1:50
+#, no-wrap
+msgid "B<DSCVERIFY_KEYRINGS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:54
+msgid ""
+"This is a colon-separated list of extra keyrings to use in addition to any "
+"specified on the command line."
+msgstr ""
+
+#. type: SH
+#: ../scripts/dscverify.1:54
+#, no-wrap
+msgid "KEYRING"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:61
+msgid ""
+"Please note that the keyring provided by the debian-keyring package can be "
+"slightly out of date. The latest version can be obtained with rsync, as "
+"documented in the README that comes with debian-keyring. If you sync the "
+"keyring to a non-standard location (see below), you can use the "
+"possibilities to specify extra keyrings, by either using the above mentioned "
+"configuration option or the --keyring option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:63
+msgid "Below is an example for an alias:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:65
+msgid "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+msgstr ""
+
+#. type: SH
+#: ../scripts/dscverify.1:65
+#, no-wrap
+msgid "STANDARD KEYRING LOCATIONS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:68
+msgid ""
+"By default dscverify searches for the debian-keyring in the following "
+"locations:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:70
+msgid "- ~/.gnupg/trustedkeys.gpg"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:72
+msgid "- /srv/keyring.debian.org/keyrings/debian-keyring.gpg"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:74
+msgid "- /usr/share/keyrings/debian-keyring.gpg"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:76
+msgid "- /usr/share/keyrings/debian-maintainers.gpg"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:78
+msgid "- /usr/share/keyrings/debian-nonupload.gpg"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:82
+msgid "B<gpg>(1), B<gpg2>(1), B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:86
+msgid ""
+"B<dscverify> was written by Roderick Schertler E<lt>roderick@argon.orgE<gt> "
+"and posted on the debian-devel@lists.debian.org mailing list, with several "
+"modifications by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/getbuildlog.1:1
+#, no-wrap
+msgid "GETBUILDLOG"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:4
+msgid "getbuildlog - download build logs from Debian auto-builders"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:8
+msgid "B<getbuildlog> I<package> [I<version-pattern>] [I<architecture-pattern>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:17
+msgid ""
+"B<getbuildlog> downloads build logs of I<package> from Debian "
+"auto-builders. It downloads build logs of all versions and for all "
+"architectures if I<version-pattern> and I<architecture-pattern> are not "
+"specified or empty, otherwise only build logs whose versions match "
+"I<version-pattern> and build logs whose architectures match "
+"I<architecture-pattern> will be downloaded. The version and architecture "
+"patterns are interpreted as extended regular expressions as described in "
+"B<grep>(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:21
+msgid ""
+"If I<version-pattern> is \"last\" then only the logs for the most recent "
+"version of I<package> found on buildd.debian.org will be downloaded."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:24
+msgid ""
+"If I<version-pattern> is \"last-all\" then the logs for the most recent "
+"version found on each build log index will be downloaded."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:28
+msgid "Show usage information and examples."
+msgstr ""
+
+#. type: TP
+#: ../scripts/getbuildlog.1:32
+#, no-wrap
+msgid "getbuildlog hello 2\\e.2-1 amd64"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:35
+msgid "Download amd64 build log for hello version 2.2-1."
+msgstr ""
+
+#. type: TP
+#: ../scripts/getbuildlog.1:35
+#, no-wrap
+msgid "getbuildlog glibc \"\" mips.*"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:38
+msgid "Download mips(el) build logs of all glibc versions."
+msgstr ""
+
+#. type: TP
+#: ../scripts/getbuildlog.1:38
+#, no-wrap
+msgid "getbuildlog wesnoth .*bpo.*"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:41
+msgid "Download all build logs of backported wesnoth versions."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:42
+msgid "Written by Frank S. Thomas E<lt>fst@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:22
+msgid "git-deborig - try to produce Debian orig.tar using git-archive(1)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:26
+msgid ""
+"B<git deborig> [B<--force>|B<-f>] "
+"[B<--just-print>|B<--just-print-tag-names>] [B<--version=>I<VERSION>] "
+"[I<COMMITTISH>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:30
+msgid ""
+"B<git-deborig> tries to produce the orig.tar you need for your upload by "
+"calling git-archive(1) on an existing git tag or branch head. It was "
+"written with the dgit-maint-merge(7) workflow in mind, but can be used with "
+"other workflows."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:35
+msgid ""
+"B<git-deborig> will try several common tag names. If this fails, or if more "
+"than one of those common tags are present, you can specify the tag or branch "
+"head to archive on the command line (I<COMMITTISH> above)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:39
+msgid ""
+"B<git-deborig> will override gitattributes(5) that would cause the contents "
+"of the tarball generated by git-archive(1) not to be identical with the "
+"commitish archived: the B<export-subst> and B<export-ignore> attributes."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:44
+msgid ""
+"B<git-deborig> should be invoked from the root of the git repository, which "
+"should contain I<debian/changelog>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/git-deborig.pl:51
+msgid "B<-f>|B<--force>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:53
+msgid "Overwrite any existing orig.tar in the parent directory."
+msgstr ""
+
+#. type: =item
+#: ../scripts/git-deborig.pl:55
+msgid "B<--just-print>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:57
+msgid ""
+"Instead of actually invoking git-archive(1), output information about how it "
+"would be invoked. Ignores I<--force>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:60
+msgid ""
+"Note that running the git-archive(1) invocation outputted with this option "
+"may not produce the same output. This is because B<git-deborig> takes care "
+"to disables git attributes otherwise heeded by git-archive(1), as detailed "
+"above."
+msgstr ""
+
+#. type: =item
+#: ../scripts/git-deborig.pl:65
+msgid "B<--just-print-tag-names>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:67
+msgid ""
+"Instead of actually invoking git-archive(1), or even checking which tags "
+"exist, print the tag names we would consider for the upstream version number "
+"in the first entry in the Debian changelog, or that supplied with "
+"B<--version>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/git-deborig.pl:72
+msgid "B<--version=>I<VERSION>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:74
+msgid ""
+"Instead of reading the new upstream version from the first entry in the "
+"Debian changelog, use I<VERSION>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:81
+msgid "git-archive(1), dgit-maint-merge(7), dgit-maint-debrebase(7)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:85
+msgid "B<git-deborig> was written by Sean Whitton <spwhitton@spwhitton.name>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/grep-excuses.1:1
+#, no-wrap
+msgid "GREP-EXCUSES"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:4
+msgid "grep-excuses - search the testing excuses files for a specific maintainer"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:6
+msgid "B<grep-excuses> [I<options>] [I<maintainer>|I<package>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:14
+msgid ""
+"B<grep-excuses> downloads the autoremovals and update_excuses.html files and "
+"greps them for the specified maintainer or package name. The B<wget> "
+"package is required for this script. If no name is given on the command "
+"line, first the environment variable B<DEBFULLNAME> is used if it is "
+"defined, and failing that, the configuration variable described below is "
+"used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/grep-excuses.1:19
+#, no-wrap
+msgid "B<--wipnity>, B<-w>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:23
+msgid ""
+"Get information from E<lt>https://qa.debian.org/excuses.phpE<gt>. One or "
+"more package names must be given when using this option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:26 ../scripts/whodepends.1:14
+msgid "Show a brief usage message."
+msgstr ""
+
+#. type: TP
+#: ../scripts/grep-excuses.1:29
+#, no-wrap
+msgid "B<--autopkgtests>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:37
+msgid ""
+"Investigate and show autopkgtest (ci.debian.net) failures in your packages "
+"but apparently caused by new versions of other packages trying to migrate. "
+"(B<--no-autopkgtests> can be used to override GREP_EXCUSES_AUTOPKGTESTS.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/grep-excuses.1:37
+#, no-wrap
+msgid "B<--no-autoremovals>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:40
+msgid "Investigate and show only testing propagation excuses, not autoremovals."
+msgstr ""
+
+#. type: TP
+#: ../scripts/grep-excuses.1:40
+#, no-wrap
+msgid "B<--experimental>, B<-e>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:43
+msgid "Print pseudo-excuses for manual migration from experimental to unstable."
+msgstr ""
+
+#. type: =item
+#: ../scripts/grep-excuses.1:43 ../scripts/hardening-check.pl:647
+#: ../scripts/salsa.pl:487
+#, no-wrap
+msgid "B<--debug>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:46
+msgid "Print debugging output to stderr (including url(s) fetched)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/grep-excuses.1:52
+#, no-wrap
+msgid "B<GREP_EXCUSES_MAINTAINER>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:56
+msgid ""
+"The default maintainer, email or package to grep for if none is specified on "
+"the command line."
+msgstr ""
+
+#. type: TP
+#: ../scripts/grep-excuses.1:56
+#, no-wrap
+msgid "B<GREP_EXCUSES_AUTOPKGTESTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:61
+msgid ""
+"Boolean: whether to show autopkgtest failures in other packages. See "
+"B<--autopkgtests>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:63 ../scripts/plotchangelog.1:126
+msgid "B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:65
+msgid ""
+"Joey Hess E<lt>joeyh@debian.orgE<gt>; modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:523
+msgid "hardening-check - check binaries for security hardening features"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:527
+msgid "hardening-check [options] [ELF ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:529
+msgid ""
+"Examine a given set of ELF binaries and check for several security hardening "
+"features, failing if they are not all found."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:534
+msgid ""
+"This utility checks a given list of ELF binaries for several security "
+"hardening features that can be compiled into an executable. These features "
+"are:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:540
+msgid "B<Position Independent Executable>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:542
+msgid ""
+"This indicates that the executable was built in such a way (PIE) that the "
+"\"text\" section of the program can be relocated in memory. To take full "
+"advantage of this feature, the executing kernel must support text Address "
+"Space Layout Randomization (ASLR)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:547
+msgid "B<Stack Protected>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:549
+msgid ""
+"This indicates that there is evidence that the ELF was compiled with the "
+"L<gcc(1)> option B<-fstack-protector> (e.g. uses B<__stack_chk_fail>). The "
+"program will be resistant to having its stack overflowed."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:553
+msgid ""
+"When an executable was built without any character arrays being allocated on "
+"the stack, this check will lead to false alarms (since there is no use of "
+"B<__stack_chk_fail>), even though it was compiled with the correct options."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:558
+msgid "B<Fortify Source functions>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:560
+msgid ""
+"This indicates that the executable was compiled with B<-D_FORTIFY_SOURCE=2> "
+"and B<-O1> or higher. This causes certain unsafe glibc functions with their "
+"safer counterparts (e.g. B<strncpy> instead of B<strcpy>), or replaces calls "
+"that are verifiable at runtime with the runtime-check version "
+"(e.g. B<__memcpy_chk> insteade of B<memcpy>)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:566
+msgid ""
+"When an executable was built such that the fortified versions of the glibc "
+"functions are not useful (e.g. use is verified as safe at compile time, or "
+"use cannot be verified at runtime), this check will lead to false alarms. "
+"In an effort to mitigate this, the check will pass if any fortified function "
+"is found, and will fail if only unfortified functions are found. Uncheckable "
+"conditions also pass (e.g. no functions that could be fortified are found, "
+"or not linked against glibc)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:574
+msgid "B<Read-only relocations>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:576
+msgid ""
+"This indicates that the executable was build with B<-Wl,-z,relro> to have "
+"ELF markings (RELRO) that ask the runtime linker to mark any regions of the "
+"relocation table as \"read-only\" if they were resolved before execution "
+"begins. This reduces the possible areas of memory in a program that can be "
+"used by an attacker that performs a successful memory corruption exploit."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:583
+msgid "B<Immediate binding>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:585
+msgid ""
+"This indicates that the executable was built with B<-Wl,-z,now> to have ELF "
+"markings (BIND_NOW) that ask the runtime linker to resolve all relocations "
+"before starting program execution. When combined with RELRO above, this "
+"further reduces the regions of memory available to memory corruption "
+"attacks."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:597
+msgid "B<--nopie>, B<-p>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:599
+msgid "Do not require that the checked binaries be built as PIE."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:601
+msgid "B<--nostackprotector>, B<-s>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:603
+msgid "Do not require that the checked binaries be built with the stack protector."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:605
+msgid "B<--nofortify>, B<-f>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:607
+msgid "Do not require that the checked binaries be built with Fortify Source."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:609
+msgid "B<--norelro>, B<-r>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:611
+msgid "Do not require that the checked binaries be built with RELRO."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:613
+msgid "B<--nobindnow>, B<-b>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:615
+msgid "Do not require that the checked binaries be built with BIND_NOW."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:617
+msgid "B<--nocfprotection>, B<-b>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:619
+msgid ""
+"Do not require that the checked binaries be built with control flow "
+"protection."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:623
+msgid "Only report failures."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:625 ../scripts/uscan.pl:1567
+msgid "B<--verbose>, B<-v>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:627
+msgid "Report verbosely on failures."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:629
+msgid "B<--report-functions>, B<-R>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:631
+msgid "After the report, display all external functions needed by the ELF."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:633
+msgid "B<--find-libc-functions>, B<-F>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:635
+msgid ""
+"Instead of the regular report, locate the libc for the first ELF on the "
+"command line and report all the known \"fortified\" functions exported by "
+"libc."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:639
+msgid "B<--color>, B<-c>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:641
+msgid "Enable colorized status output."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:643
+msgid "B<--lintian>, B<-l>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:645
+msgid "Switch reporting to lintian-check-parsable output."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:649
+msgid "Report some debugging during processing."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:651
+msgid "B<--help>, B<-h>, B<-?>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:653
+msgid "Print a brief help message and exit."
+msgstr ""
+
+#. type: =item
+#: ../scripts/hardening-check.pl:655
+msgid "B<--man>, B<-H>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:657
+msgid "Print the manual page and exit."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/hardening-check.pl:661
+msgid "RETURN VALUE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:663
+msgid ""
+"When all checked binaries have all checkable hardening features detected, "
+"this program will finish with an exit code of 0. If any check fails, the "
+"exit code with be 1. Individual checks can be disabled via command line "
+"options."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:670
+msgid "Kees Cook <kees@debian.org>"
+msgstr ""
+
+#. type: =head1
+#: ../scripts/hardening-check.pl:672 ../scripts/salsa.pl:1037
+msgid "COPYRIGHT AND LICENSE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:674
+msgid "Copyright 2009-2013 Kees Cook <kees@debian.org>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:676
+msgid ""
+"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; version 2 or later."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:682
+msgid "L<gcc(1)>, L<hardening-wrapper(1)>"
+msgstr ""
+
+#. type: TH
+#: ../scripts/list-unreleased.1:1
+#, no-wrap
+msgid "LIST-UNRELEASED"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:4
+msgid "list-unreleased - display UNRELEASED packages"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:6
+msgid "B<list-unreleased> [I<arg> ...] [I<path> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:9
+msgid ""
+"Searches for packages whose changelogs indicate there are pending changes "
+"(UNRELEASED) and either lists them or displays the relevant changelog entry."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:12
+msgid ""
+"By default it searches for packages under the current directory. If a path "
+"is specified it will look for packages under that directory instead."
+msgstr ""
+
+#. type: TP
+#: ../scripts/list-unreleased.1:13
+#, no-wrap
+msgid "B<-c>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:16
+msgid "Display pending changes."
+msgstr ""
+
+#. type: TP
+#: ../scripts/list-unreleased.1:16
+#, no-wrap
+msgid "B<-R>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:19
+msgid "Don't recurse into subdirectories looking for packages."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:23
+msgid ""
+"B<list-unreleased> was written by Frans Pop E<lt>elendil@planet.nlE<gt>. "
+"This manual page was written by Joey Hess E<lt>joeyh@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:3
+msgid "ltnu - lists packages of a maintainer ordered by last upload"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:7
+msgid "B<env> DEBEMAIL=I<maintainer> B<ltnu> [-m]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:9
+msgid "B<ltnu> [-m] I<maintainer>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:11
+msgid "B<ltnu> --help"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:15
+msgid ""
+"B<ltnu> (Long Time No Upload) queries the public mirror of the Ultimate "
+"Debian Database (udd-mirror.debian.net) for all uploads of packages by the "
+"given uploader or maintainer and displays them ordered by the last upload of "
+"that package to Debian Unstable, oldest uploads first."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:21
+msgid ""
+"Its primary purpose is to check which of your own or your team's packages "
+"haven't been uploaded for a long time and likely need a packaging "
+"revamp. It's less suitable for MIA team purposes as it doesn't make a "
+"difference with regards to who actually uploaded a package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/ltnu.pod:31
+msgid "-m"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:33
+msgid "Only search in the Maintainer field and ignore the Uploaders field."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/ltnu.pod:37
+msgid "PARAMETERS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:39
+msgid ""
+"The maintainer/uploader to query can be given either by setting C<$DEBEMAIL> "
+"as environment variable or as single commandline parameter."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:42
+msgid ""
+"If a commandline parameter does not contain an C<@>, C<@debian.org> is "
+"appended, e.g. C<ltnu abe> queries for C<abe@debian.org>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:45
+msgid ""
+"Exceptions are some shortcuts for common, long e-mail addresses. So far "
+"implemented shortcuts:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/ltnu.pod:50
+msgid "pkg-gnustep"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:52
+msgid "pkg-gnustep-maintainers@lists.alioth.debian.org"
+msgstr ""
+
+#. type: =item
+#: ../scripts/ltnu.pod:54
+msgid "pkg-perl"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:56
+msgid "pkg-perl-maintainers@lists.alioth.debian.org"
+msgstr ""
+
+#. type: =item
+#: ../scripts/ltnu.pod:58
+msgid "pkg-zsh"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:60
+msgid "pkg-zsh-devel@lists.alioth.debian.org"
+msgstr ""
+
+#. type: =item
+#: ../scripts/ltnu.pod:62
+msgid "qa"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:64
+msgid "packages@qa.debian.org"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:70
+msgid "The following environment variables are honoured:"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:76
+msgid "Used for querying if no parameter is given."
+msgstr ""
+
+#. type: =item
+#: ../scripts/ltnu.pod:78
+msgid "PAGER"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:80
+msgid "Used by B<psql> as pager."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/ltnu.pod:86
+#, no-wrap
+msgid ""
+" $ ltnu pkg-zsh\n"
+" source | ver | uploaded\n"
+" -------------------------+--------------+------------------------\n"
+" zgen | 0~20150919-3 | 2016-08-24 04:55:31+00\n"
+" zplug | 2.4.1-1 | 2017-01-13 09:51:26+00\n"
+" zsh-syntax-highlighting | 0.6.0-1 | 2017-08-30 09:06:26+00\n"
+" zsh | 5.4.2-2 | 2017-11-02 20:56:55+00\n"
+" (4 rows)\n"
+"\n"
+msgstr ""
+
+#. type: =head1
+#: ../scripts/ltnu.pod:95
+msgid "DEPENDENCIES"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:97
+msgid ""
+"B<ltnu> uses the PostgreSQL client command B<psql> and hence needs Debian's "
+"B<postgresql-client> package to be installed."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/ltnu.pod:100
+msgid "AUTHOR, COPYRIGHT, LICENSE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:102
+msgid ""
+"Copyright 2017 Axel Beckert <abe@debian.org>. Licensed under the GNU General "
+"Public License, version 2 or later."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/ltnu.pod:107
+msgid ""
+"L<https://udd-mirror.debian.net/>, L<https://udd.debian.org/>, "
+"L<https://wiki.debian.org/UltimateDebianDatabase>"
+msgstr ""
+
+#. type: TH
+#: ../scripts/manpage-alert.1:1
+#, no-wrap
+msgid "MANPAGE-ALERT"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:4
+msgid "manpage-alert - check for binaries without corresponding manpages"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:6
+msgid "B<manpage-alert> [I<options>] [I<paths>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:9
+msgid ""
+"B<manpage-alert> searches the given list of paths for binaries without "
+"corresponding manpages."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:12
+msgid ""
+"If no I<paths> are specified on the command line, the path list I</bin /sbin "
+"/usr/bin /usr/sbin /usr/games> will be assumed."
+msgstr ""
+
+#. type: TP
+#: ../scripts/manpage-alert.1:13
+#, no-wrap
+msgid "B<-h>,B<--help>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/manpage-alert.1:16
+#, no-wrap
+msgid "B<-V>,B<--version>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/manpage-alert.1:19
+#, no-wrap
+msgid "B<-f>,B<--file>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:22
+msgid "Show filenames of missing manpages without any leading text."
+msgstr ""
+
+#. type: TP
+#: ../scripts/manpage-alert.1:22
+#, no-wrap
+msgid "B<-p>,B<--package>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:25
+msgid "Show filenames of missing manpages with their package name."
+msgstr ""
+
+#. type: TP
+#: ../scripts/manpage-alert.1:25
+#, no-wrap
+msgid "B<-n>,B<--no-stat>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:28
+msgid "Do not show statistics at the end."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:33
+msgid ""
+"B<manpage-alert> was written by Branden Robinson and modified by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt> and Adam D. Barratt "
+"E<lt>debian-bts@adam-barratt.org.ukE<gt> (who also wrote this manpage) for "
+"the devscripts package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:35
+msgid ""
+"This manpage and the associated program are licensed under the terms of the "
+"GPL, version 2 or later."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:23
+msgid "mass-bug - mass-file a bug report against a list of packages"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:27
+msgid ""
+"B<mass-bug> [I<options>] B<--subject=\">I<bug subject>B<\"> I<template "
+"package-list>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:31
+msgid ""
+"mass-bug assists in filing a mass bug report in the Debian BTS on a set of "
+"packages. For each package in the package-list file (which should list one "
+"package per line together with an optional version number separated from the "
+"package name by an underscore), it fills out the template, adds BTS "
+"pseudo-headers, and either displays or sends the bug report."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:37
+msgid ""
+"Warning: Some care has been taken to avoid unpleasant and common mistakes, "
+"but this is still a power tool that can generate massive amounts of bug "
+"report mails. Use it with care, and read the documentation in the "
+"Developer's Reference about mass filing of bug reports first."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/mass-bug.pl:42
+msgid "TEMPLATE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:44
+msgid ""
+"The template file is the body of the message that will be sent for each bug "
+"report, excluding the BTS pseudo-headers. In the template, #PACKAGE# is "
+"replaced with the name of the package. If a version was specified for the "
+"package, #VERSION# will be replaced by that version."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:49
+msgid ""
+"The components of the version number may be specified using #EPOCH#, "
+"#UPSTREAM_VERSION# and #REVISION#. #EPOCH# includes the trailing colon and "
+"#REVISION# the leading dash so that #EPOCH#UPSTREAM_VERSION##REVISION# is "
+"always the same as #VERSION#."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:54
+msgid ""
+"Note that text in the template will be automatically word-wrapped to 70 "
+"columns, up to the start of a signature (indicated by S<'-- '> at the start "
+"of a line on its own). This is another reason to avoid including BTS "
+"pseudo-headers in your template."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:61
+msgid ""
+"B<mass-bug> examines the B<devscripts> configuration files as described "
+"below. Command line options override the configuration file settings, "
+"though."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:67
+msgid "B<--severity=>(B<wishlist>|B<minor>|B<normal>|B<important>|B<serious>|B<grave>|B<critical>)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:69
+msgid "Specify the severity with which bugs should be filed. Default is B<normal>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:72
+msgid "B<--display>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:74
+msgid ""
+"Fill out the templates for each package and display them all for "
+"verification. This is the default behavior."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:77
+msgid "B<--send>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:79
+msgid "Actually send the bug reports."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:81
+msgid "B<--subject=\">I<bug subject>B<\">"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:83
+msgid ""
+"Specify the subject of the bug report. The subject will be automatically "
+"prefixed with the name of the package that the bug is filed against."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:86
+msgid "B<--tags>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:88
+msgid "Set the BTS pseudo-header for tags."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:90 ../scripts/salsa.pl:566
+msgid "B<--user>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:92
+msgid "Set the BTS pseudo-header for a usertags' user."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:94
+msgid "B<--usertags>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:96
+msgid "Set the BTS pseudo-header for usertags."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:98
+msgid "B<--control=>I<COMMAND>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:100
+msgid ""
+"Add a BTS control command. This option may be repeated to add multiple "
+"control commands. For example, if you are mass-bug-filing \"please stop "
+"depending on this deprecated package\", and bug 123456 represents removal of "
+"the deprecated package, you could use:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/mass-bug.pl:105
+#, no-wrap
+msgid ""
+" mass-bug --control='block 123456 by -1' ...\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:107
+msgid "B<--source>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:109
+msgid ""
+"Specify that package names refer to source packages rather than binary "
+"packages."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:114
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will not be passed to a shell. Default is F</usr/sbin/sendmail>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:117
+msgid "B<--no-wrap>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:119
+msgid "Do not wrap the template to lines of 70 characters."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:138
+msgid ""
+"B<DEBEMAIL> and B<EMAIL> can be set in the environment to control the email "
+"address that the bugs are sent from."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:561
+msgid "This program is Copyright (C) 2006 by Joey Hess <joeyh@debian.org>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/mergechanges.1:1
+#, no-wrap
+msgid "MERGECHANGES"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:4
+msgid "mergechanges - merge multiple changes files"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:6
+msgid "B<mergechanges> [B<-d>] [B<-f>] [B<-S>] [B<-i>] I<file1 file2> [I<file>...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:13
+msgid ""
+"B<mergechanges> merges two or more I<.changes> files, merging the "
+"Architecture, Description and Files (and Checksums-*, if present) fields of "
+"the two. There are checks made to ensure that the changes files are from "
+"the same source package and version and use the same changes file Format. "
+"The first changes file is used as the basis and the information from the "
+"later ones is merged into it."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:18
+msgid ""
+"The output is normally written to I<stdout>. If the B<-f> option is given, "
+"the output is written to I<package>_I<version>_multi.changes instead, in the "
+"same directory as the first changes file listed."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:21
+msgid ""
+"If the B<-d> option is given and the output is generated successfully, the "
+"input files will be deleted."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:25
+msgid ""
+"If the B<-i> or B<--indep> option is given, source packages and "
+"architecture-independent (Architecture: all) packages are included in the "
+"output, but architecture-dependent packages are not."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:28
+msgid ""
+"If the B<-S> or B<--source> option is given, only source packages are "
+"included in the output."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:33
+msgid ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>, Mark Hymers E<lt>mhy@debian.orgE<gt>, Adam "
+"D. Barratt E<lt>adam@adam-barratt.org.ukE<gt>, and Simon McVittie "
+"E<lt>smcv@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:26
+msgid "mk-build-deps - build a package satisfying a package's build-dependencies"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:30
+msgid "B<mk-build-deps> B<--help>|B<--version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:32
+msgid "B<mk-build-deps> [I<options>] I<control file> | I<package name> ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:36
+msgid ""
+"Given a I<package name> and/or I<control file>, B<mk-build-deps> will use "
+"B<equivs> to generate a binary package which may be installed to satisfy all "
+"the build dependencies of the given package."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:40
+msgid ""
+"If B<--build-dep> and/or B<--build-indep> are given, then the resulting "
+"binary package(s) will depend solely on the "
+"Build-Depends/Build-Depends-Indep dependencies, respectively."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:48
+msgid "B<-i>, B<--install>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:50
+msgid "Install the generated packages and its build-dependencies."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:52
+msgid "B<-t>, B<--tool>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:54
+msgid ""
+"When installing the generated package use the specified tool. (default: "
+"B<apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends>)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:57
+msgid "B<-r>, B<--remove>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:59
+msgid ""
+"Remove the package file after installing it. Ignored if used without the "
+"B<--install> switch."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:62
+msgid "B<-a> I<foo>, B<--arch> I<foo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:64
+msgid ""
+"Set the architecture of the produced binary package to I<foo>. If this "
+"option is not given, fall back to the value given by B<--host-arch>. If "
+"neither this option nor B<--host-arch> are given but the Build-Depends "
+"contain architecture restrictions, use the value printed by "
+"`dpkg-architecture -qDEB_HOST_ARCH`. Otherwise, use I<all>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:70
+msgid ""
+"The package architecture must be equal to the host architecture except if "
+"the package architecture is I<all>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:73
+msgid ""
+"The package architecture cannot be I<all> if the build and host architecture "
+"differ."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:76
+msgid "B<--host-arch> I<foo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:78
+msgid ""
+"Set the host architecture the binary package is built for. This defaults to "
+"the value printed by `dpkg-architecture -qDEB_HOST_ARCH`. Use this option to "
+"create a binary package that is able to satisfy crossbuild dependencies."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:82
+msgid ""
+"If this option is used together with B<--arch>, then they must be equal "
+"except if the value of B<--arch> is I<all>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:85
+msgid ""
+"If B<--arch> is not given, then this option also sets the package "
+"architecture."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:87
+msgid "B<--build-arch> I<foo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:89
+msgid ""
+"Set the build architecture the binary package is built for. This defaults to "
+"the value printed by `dpkg-architecture -qDEB_BUILD_ARCH`. Use this option "
+"to create a binary package that is able to satisfy crossbuild dependencies."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:93
+msgid "B<-B>, B<--build-dep>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:95
+msgid ""
+"Generate a package which only depends on the source package's Build-Depends "
+"dependencies."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:98
+msgid "B<-A>, B<--build-indep>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:100
+msgid ""
+"Generate a package which only depends on the source package's "
+"Build-Depends-Indep dependencies."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:103
+msgid "B<-P>, B<--build-profiles> I<profile[,...]>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:105
+msgid ""
+"Generate a package which only depends on build dependencies with the build "
+"profile(s), given as a comma-separated list. The default behavior is to use "
+"no specific profile. Setting this option will override the "
+"B<DEB_BUILD_PROFILES> environment variable."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:119
+msgid "B<-s>, B<--root-cmd>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:121
+msgid ""
+"Use the specified tool to gain root privileges before installing. Ignored "
+"if used without the B<--install> switch."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/mk-build-deps.pl:128
+msgid "External environment"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:132
+msgid "B<DEB_BUILD_PROFILES>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:134
+msgid ""
+"If set, it will be used as the active build profile(s) for the build "
+"dependencies to be installed. It is a space separated list of profile "
+"names. Overridden by the B<-P> option."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:143
+msgid ""
+"B<mk-build-deps> is copyright by Vincent Fourmond and was modified for the "
+"devscripts package by Adam D. Barratt <adam@adam-barratt.org.uk>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:146 ../scripts/transition-check.pl:77
+msgid ""
+"This program comes with ABSOLUTELY NO WARRANTY. You are free to "
+"redistribute this code under the terms of the GNU General Public License, "
+"version 2 or later."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:27
+msgid ""
+"mk-origtargz - rename upstream tarball, optionally changing the compression "
+"and removing unwanted files"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:33
+msgid "B<mk-origtargz> [I<options>] F<foo-1.0.tar.gz>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:35
+msgid "B<mk-origtargz> B<--help>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:41
+msgid ""
+"B<mk-origtargz> renames the given file to match what is expected by "
+"B<dpkg-buildpackage>, based on the source package name and version in "
+"F<debian/changelog>. It can convert B<zip> to B<tar>, optionally change the "
+"compression scheme and remove files according to B<Files-Excluded> and "
+"B<Files-Excluded->I<component> in F<debian/copyright>. The resulting file is "
+"placed in F<debian/../..>. (In F<debian/copyright>, the B<Files-Excluded> "
+"and B<Files-Excluded->I<component> stanzas are a part of the first paragraph "
+"and there is a blank line before the following paragraphs which contain "
+"B<Files> and other stanzas. The B<Files-Included> stanza may be used to "
+"ignore parts of subdirectories specified by the B<Files-Excluded> stanza See "
+"B<uscan>(1) \"COPYRIGHT FILE EXAMPLE\".)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:53
+msgid ""
+"The archive type for B<zip> is detected by \"B<file --dereference --brief "
+"--mime-type>\" command. So any B<zip> type archives such as B<jar> are "
+"treated in the same way. The B<xpi> archive is detected by its extension "
+"and is handled properly using the B<xpi-unpack> command."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:58
+msgid ""
+"If the package name is given via the B<--package> option, no information is "
+"read from F<debian/>, and the result file is placed in the current "
+"directory."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:61
+msgid ""
+"B<mk-origtargz> is commonly called via B<uscan>, which first obtains the "
+"upstream tarball."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/mk-origtargz.pl:66
+msgid "Metadata options"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:68
+msgid "The following options extend or replace information taken from F<debian/>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:74
+msgid ""
+"Use I<package> as the name of the Debian source package, and do not require "
+"or use a F<debian/> directory. This option can only be used together with "
+"B<--version>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:78
+msgid ""
+"The default is to use the package name of the first entry in "
+"F<debian/changelog>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:80
+msgid "B<-v>, B<--version> I<version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:82
+msgid ""
+"Use I<version> as the version of the package. This needs to be the upstream "
+"version portion of a full Debian version, i.e. no Debian revision, no epoch."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:85
+msgid ""
+"The default is to use the upstream portion of the version of the first entry "
+"in F<debian/changelog>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:88
+msgid "B<--exclude-file> I<glob>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:90
+msgid ""
+"Remove files matching the given I<glob> from the tarball, as if it was "
+"listed in B<Files-Excluded>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:93
+msgid "B<--copyright-file> I<filename>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:95
+msgid ""
+"Remove files matching the patterns found in I<filename>, which should have "
+"the format of a Debian F<copyright> file (B<Format: "
+"https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/> to be "
+"precise). Errors parsing that file are silently ignored, exactly as is the "
+"case with F<debian/copyright>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:101
+msgid ""
+"Unmatched patterns will emit a warning so the user can verify whether it is "
+"correct. If there are multiple patterns which match a file, only the last "
+"one will count as being matched."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:105
+msgid ""
+"Both the B<--exclude-file> and B<--copyright-file> options amend the list of "
+"patterns found in F<debian/copyright>. If you do not want to read that file, "
+"you will have to use B<--package>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:109
+msgid "B<--signature> I<signature-mode>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:111
+msgid "Set I<signature-mode>:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:115
+msgid "0 for no signature"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:117
+msgid "1 for normal detached signature"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:119
+msgid "2 for signature on decompressed"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:121
+msgid "3 for self signature"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:125
+msgid "B<--signature-file> I<signature-file>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:127
+msgid ""
+"Use I<signature-file> as the signature file corresponding to the Debian "
+"source package to create a B<dpkg-source> (post-stretch) compatible "
+"signature file. (optional)"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/mk-origtargz.pl:133
+msgid "Action options"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:135
+msgid ""
+"These options specify what exactly B<mk-origtargz> should do. The options "
+"B<--copy>, B<--rename> and B<--symlink> are mutually exclusive."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:140 ../scripts/uscan.pl:1785
+msgid "B<--symlink>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:142
+msgid ""
+"Make the resulting file a symlink to the given original file. (This is the "
+"default behaviour.)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:145
+msgid ""
+"If the file has to be modified (because it is a B<zip>, B<xpi> or B<zst> "
+"file, because of B<--repack> or B<Files-Excluded>), this option behaves like "
+"B<--copy>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:149 ../scripts/uscan.pl:1790
+msgid "B<--copy>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:151
+msgid ""
+"Make the resulting file a copy of the original file (unless it has to be "
+"modified, of course)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:154 ../scripts/uscan.pl:1794
+msgid "B<--rename>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:156
+msgid "Rename the original file."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:158
+msgid ""
+"If the file has to be modified (because it is a B<zip>, B<xpi>, B<zst> file, "
+"because of B<--repack> or B<Files-Excluded>), this implies that the original "
+"file is deleted afterwards."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:162 ../scripts/uscan.pl:1798
+msgid "B<--repack>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:164
+msgid ""
+"If the given file is not compressed using the desired format (see "
+"B<--compression>), recompress it."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:167
+msgid "B<-S>, B<--repack-suffix> I<suffix>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:169
+msgid ""
+"If the file has to be modified, because of B<Files-Excluded>, append "
+"I<suffix> to the upstream version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:172
+msgid "B<--force-repack>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:174
+msgid ""
+"Recompress even if file is compressed using the desired format and no files "
+"were deleted."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:177
+msgid "B<-c>, B<--component> I<componentname>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:179
+msgid ""
+"Use <componentname> as the component name for the secondary upstream "
+"tarball. Set I<componentname> as the component name. This is used only for "
+"the secondary upstream tarball of the Debian source package. Then "
+"I<packagename_version.orig-componentname.tar.gz> is created."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:184
+msgid "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> | B<default> ]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:186
+msgid ""
+"The default method is B<xz>. When mk-origtargz is launched in a debian "
+"source repository which format is \"1.0\" or undefined, the method switches "
+"to B<gzip>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:189
+msgid "B<-C>, B<--directory> I<directory>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:191
+msgid "Put the resulting file in the given directory."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:193
+msgid "B<--unzipopt> I<options>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:195
+msgid ""
+"Add the extra options to use with the B<unzip> command such as B<-a>, "
+"B<-aa>, and B<-b>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:212
+msgid "B<uscan>(1), B<uupdate>(1)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:216
+msgid ""
+"B<mk-origtargz> and this manpage have been written by Joachim Breitner "
+"<I<nomeata@debian.org>>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:5
+msgid "namecheck - Check project names are not already taken."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/namecheck.pl:7
+msgid "ABOUT"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:9
+msgid ""
+"This is a simple tool to automate the testing of project names at the most "
+"common Open Source / Free Software hosting environments."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:12
+msgid ""
+"Each new project requires a name, and those names are ideally unique. To "
+"come up with names is hard, and testing to ensure they're not already in use "
+"is time-consuming - unless you have a tool such as this one."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/namecheck.pl:16
+msgid "CUSTOMIZATION"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:18
+msgid "The script, as is, contains a list of sites, and patterns, to test against."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:20
+msgid ""
+"If those patterns aren't sufficient then you may create your own additions "
+"and add them to the script. If you wish to have your own version of the "
+"patterns you may save them into the file ~/.namecheckrc"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:26
+msgid "Steve -- http://www.steve.org.uk/"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:32
+msgid "Copyright (c) 2008 by Steve Kemp. All rights reserved."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:34
+msgid ""
+"This module is free software; you can redistribute it and/or modify it under "
+"the same terms as Perl itself."
+msgstr ""
+
+#. type: TH
+#: ../scripts/nmudiff.1:1
+#, no-wrap
+msgid "NMUDIFF"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:4
+msgid "nmudiff - email an NMU diff to the Debian BTS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:6
+msgid "B<nmudiff> [I<options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:9
+msgid ""
+"B<nmudiff> is the tool to be used while preparing a Non-Maintainer Upload "
+"(NMU) to notify the maintainer about the work being done."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:19
+msgid ""
+"B<nmudiff> should be run in the source tree of the package being NMUed, "
+"after the NMU is built. It assumes that the source packages (specifically, "
+"the I<.dsc> and any corresponding I<tar> and I<diff> files) for both the "
+"previous version of the package and the newly built NMU version are in the "
+"parent directory. It then uses B<debdiff> to generate a diff between the "
+"previous version and the current NMU, and either runs mutt or an editor "
+"(using B<sensible-editor>) so that the mail message (including the diff) can "
+"be examined and modified; once you exit the editor the diff will be mailed "
+"to the Debian BTS."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:24
+msgid ""
+"The default behaviour is that if exactly one bug is closed by this NMU, then "
+"that bug will be mailed, otherwise a new bug will be submitted. This "
+"behaviour may be changed by command line options and configuration file "
+"options."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:25
+#, no-wrap
+msgid "B<--new>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:29
+msgid ""
+"Instead of mailing the bug reports which are to be closed by this NMU, a new "
+"bug report is submitted directly to the BTS."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:34
+msgid ""
+"Send the bug report to all of the bugs which are being closed by this NMU, "
+"rather than opening a new bug report. This option has no effect if no bugs "
+"are being closed by this NMU."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:39
+msgid ""
+"Use B<mutt>(1) (or B<neomutt>(1)) for editing and sending the message to the "
+"BTS (default behaviour). This can be controlled using a configuration file "
+"option (see below)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:44
+msgid ""
+"Use B<sensible-editor>(1) to edit the message and then mail it directly "
+"using I</usr/bin/sendmail>. This can be controlled using a configuration "
+"file option (see below)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:44
+#, no-wrap
+msgid "B<--sendmail> I<SENDMAILCMD>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:54
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will be interpreted by the shell. Default is I</usr/sbin/sendmail>. "
+"The B<-t> option will be automatically added if the command is "
+"I</usr/sbin/sendmail> or I</usr/sbin/exim*>. For other mailers, if they "
+"require a B<-t> option, this must be included in the I<SENDMAILCMD>, for "
+"example: B<--sendmail=\"/usr/sbin/mymailer -t\">. This can also be set "
+"using the devscripts configuration files; see below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:54
+#, no-wrap
+msgid "B<--from> I<EMAIL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:62
+msgid ""
+"If using the B<sendmail> (B<--no-mutt>) option, then the email to the BTS "
+"will be sent using the name and address in the environment variables "
+"B<DEBEMAIL> and B<DEBFULLNAME>. If these are not set, then the variables "
+"B<EMAIL> and B<NAME> will be used instead. These can be overridden using "
+"the B<--from> option. The program will not work in this case if an email "
+"address cannot be determined."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:62
+#, no-wrap
+msgid "B<--delay> I<DELAY>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:69
+msgid ""
+"Indicate in the generated mail that the NMU has been uploaded to the DELAYED "
+"queue, with a delay of I<DELAY> days. The default value is I<XX> which adds "
+"a placeholder to the e-mail. A value of B<0> indicates that the upload has "
+"not been sent to a delayed queue. This can also be set using the devscripts "
+"configuration files; see below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:69
+#, no-wrap
+msgid "B<--no-delay>, B<--nodelay>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:72
+msgid "Equivalent to B<--delay 0>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:76
+#, no-wrap
+msgid "B<--no-pending>, B<--nopending>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:79
+msgid "Do not add the I<pending> tag."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:79
+#, no-wrap
+msgid "B<--non-dd>, B<--nondd>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:82
+msgid "Mention in the email that you require sponsorship."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:82
+#, no-wrap
+msgid "B<--template> I<TEMPLATEFILE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:86
+msgid ""
+"Use content of TEMPLATEFILE for message body instead of default template. "
+"If TEMPLATEFILE does not exist, default template is applied."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:98
+#, no-wrap
+msgid "B<NMUDIFF_DELAY>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:104
+msgid ""
+"If this is set to a number, e-mails generated by B<nmudiff> will by default "
+"mention an upload to the DELAYED queue, delayed for the specified number of "
+"days. The value B<0> indicates that the DELAYED queue has not been used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:104
+#, no-wrap
+msgid "B<NMUDIFF_MUTT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:109
+msgid ""
+"Can be I<yes> (default) or I<no>, and specifies whether to use B<mutt> (or "
+"B<neomutt>)to compose and send the message or not, as described above."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:109
+#, no-wrap
+msgid "B<NMUDIFF_NEWREPORT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:117
+msgid ""
+"This option controls whether a new bug report is made, or whether the diff "
+"is sent to the bugs closed by this NMU. Can be I<maybe> (default), which "
+"sends to the existing bug reports if exactly one bug is being closed; "
+"I<yes>, which always creates a new report, or I<no>, which always sends to "
+"the reports of the bugs being closed (unless no bugs are being closed, in "
+"which case a new report is always made)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:121
+msgid ""
+"If this is set, specifies a B<sendmail> command to use instead of "
+"I</usr/sbin/sendmail>. Same as the B<--sendmail> command line option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:125
+msgid "B<debdiff>(1), B<sensible-editor>(1), B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:129
+msgid ""
+"B<nmudiff> was written and is copyright 2006 by Steinar H. Gunderson and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt>. The software may be "
+"freely redistributed under the terms and conditions of the GNU General "
+"Public License, version 2."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:22
+msgid ""
+"origtargz - fetch the orig tarball of a Debian package from various sources, "
+"and unpack it"
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:28
+msgid "B<origtargz> [I<OPTIONS>] [B<--unpack>[=B<no>|B<once>|B<yes>]]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:30
+msgid "B<origtargz> B<--help>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:36
+msgid ""
+"B<origtargz> downloads the orig tarball of a Debian package, and also "
+"unpacks it into the current directory, if it just contains a F<debian> "
+"directory. The main use for B<origtargz> is with debian-dir-only repository "
+"checkouts, but it is useful as a general tarball download wrapper. The "
+"version number for the tarball to be downloaded is determined from "
+"F<debian/changelog>. It should be invoked from the top level directory of an "
+"unpacked Debian source package."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:43
+msgid "Various download locations are tried:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:47 ../scripts/origtargz.pl:51
+#: ../scripts/origtargz.pl:55 ../scripts/origtargz.pl:59
+#: ../scripts/origtargz.pl:63 ../scripts/origtargz.pl:67
+msgid "*"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:49
+msgid "First, an existing file is looked for."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:53
+msgid "Directories given with B<--path> are searched."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:57
+msgid "B<pristine-tar> is tried."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:61
+msgid "B<pristine-lfs> is tried."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:65
+msgid ""
+"B<apt-get source> is tried when B<apt-cache showsrc> reports a matching "
+"version."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:69
+msgid "Finally, B<uscan --download --download-current-version> is tried."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:73
+msgid ""
+"When asked to unpack the orig tarball, B<origtargz> will remove all files "
+"and directories from the current directory, except the debian directory, and "
+"the VCS repository directories. I<Note that this will drop all non-committed "
+"changes> for the patch system in use (e.g. source format \"3.0 (quilt)\"), "
+"and will even remove all patches from the package when no patch system is in "
+"use (the original \"1.0\" source format). Some VCS control files outside "
+"F<debian/> preserved (F<.bzr-builddeb>, F<.bzr-ignore>, F<.gitignore>, "
+"F<.hgignore>), if stored in VCS."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:82
+msgid ""
+"The default behavior is to unpack the orig tarball if the current directory "
+"is empty except for a F<debian> directory and the VCS files mentioned above."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:87
+msgid ""
+"Despite B<origtargz> being called \"targz\", it will work with any "
+"compression scheme used for the tarball."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:90
+msgid ""
+"A similar tool to unpack orig tarballs is B<uupdate>(1). B<uupdate> creates "
+"a new working directory, unpacks the tarball, and applies the Debian "
+"F<.diff.gz> changes. In contrast, B<origtargz> uses the current directory, "
+"keeping VCS metadata."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:95
+msgid ""
+"For Debian package repositories that keep the full upstream source, other "
+"tools should be used to upgrade the repository from the new tarball. See "
+"B<gbp-import-orig>(1) and B<svn-upgrade>(1) for examples. B<origtargz> is "
+"still useful for downloading the current tarball."
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:104
+msgid "B<-p>, B<--path> I<directory>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:106
+msgid ""
+"Add I<directory> to the list of locations to search for an existing "
+"tarball. When found, a hardlink is created if possible, otherwise a "
+"symlink."
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:109
+msgid "B<-u>, B<--unpack>[=B<no>|B<once>|B<yes>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:111
+msgid ""
+"Unpack the downloaded orig tarball to the current directory, replacing "
+"everything except the debian directory. Existing files are removed, except "
+"for F<debian/> and VCS files. Preserved are: F<.bzr>, F<.bzrignore>, "
+"F<.bzr-builddeb>, F<.git>, F<.gitignore>, F<.hg>, F<.hgignore>, F<_darcs> "
+"and F<.svn>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:119
+msgid "B<no>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:121
+msgid "Do not unpack the orig tarball."
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:123
+msgid "B<once> (default when B<--unpack> is not used)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:125
+msgid ""
+"If the current directory contains only a F<debian> directory (and possibly "
+"some dotfiles), unpack the orig tarball. This is the default behavior."
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:128
+msgid "B<yes> (default for B<--unpack> without argument)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:130
+msgid "Always unpack the orig tarball."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:136
+msgid "Alias for B<--unpack=no>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:138
+msgid "B<-t>, B<--tar-only>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:140
+msgid ""
+"When using B<apt-get source>, pass B<--tar-only> to it. The default is to "
+"download the full source package including F<.dsc> and F<.diff.gz> or "
+"F<.debian.tar.gz> components so B<debdiff> can be used to diff the last "
+"upload to the next one. With B<--tar-only>, only download the F<.orig.tar.*> "
+"file."
+msgstr ""
+
+#. type: =item
+#: ../scripts/origtargz.pl:145
+msgid "B<--clean>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:147
+msgid ""
+"Remove existing files as with B<--unpack>. Note that like B<--unpack>, this "
+"will remove upstream files even if they are stored in VCS."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:164
+msgid ""
+"B<debcheckout>(1), B<gbp-import-orig>(1), B<pristine-tar>(1), "
+"B<svn-upgrade>(1), B<uupdate>(1)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/origtargz.pl:168
+msgid ""
+"B<origtargz> and this manpage have been written by Christoph Berg "
+"<I<myon@debian.org>>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/plotchangelog.1:1
+#, no-wrap
+msgid "PLOTCHANGELOG"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:4
+msgid "plotchangelog - graph Debian changelogs"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:7
+msgid "B<plotchangelog> [I<options>]I< changelog >..."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:17
+msgid ""
+"B<plotchangelog> is a tool to aid in visualizing a Debian I<changelog>. The "
+"changelogs are graphed with B<gnuplot>(1) , with the X axis of the graph "
+"denoting time of release and the Y axis denoting the Debian version number "
+"of the package. Each individual release of the package is represented by a "
+"point, and the points are color coded to indicate who released that version "
+"of the package. The upstream version number of the package can also be "
+"labeled on the graph."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:21
+msgid ""
+"Alternatively, the Y axis can be configured to display the size of the "
+"changelog entry for each new version. Or it can be configured to display "
+"approximately how many bugs were fixed for each new version."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:24
+msgid ""
+"Note that if the package is a Debian-specific package, the entire package "
+"version will be used for the Y axis. This does not always work perfectly."
+msgstr ""
+
+#. type: SH
+#: ../scripts/plotchangelog.1:25
+#, no-wrap
+msgid "READING THE GRAPH"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:33
+msgid ""
+"The general outline of a package's graph is typically a series of peaks, "
+"starting at 1, going up to n, and then returning abruptly to 1. The higher "
+"the peaks, the more releases the maintainer made between new upstream "
+"versions of the package. If a package is Debian-only, it's graph will just "
+"grow upwards without ever falling (although a bug in this program may cause "
+"it to fall sometimes, if the version number goes from say, 0.9 to say, 0.10 "
+"- this is interpreted wrong...)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:40
+msgid ""
+"If the graph dips below 1, someone made a NMU of the package and upgraded it "
+"to a new upstream version, thus setting the Debian version to 0. NMU's in "
+"general appear as fractional points like 1.1, 2.1, etc. A NMU can also be "
+"easily detected by looking at the points that represent which maintainer "
+"uploaded the package -- a solitary point of a different type than the points "
+"before and after it is typically a NMU."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:43
+msgid ""
+"It's also easy to tell by looking at the points when a package changes "
+"maintainers."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:44
+#, no-wrap
+msgid "B<-l>, B<--linecount>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:50
+msgid ""
+"Instead of using the Debian version number as the Y axis, use the number of "
+"lines in the changelog entry for each version. Cannot be used together with "
+"B<--bugcount>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:50
+#, no-wrap
+msgid "B<-b>, B<--bugcount>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:57
+msgid ""
+"Instead of using the Debian version number as the Y axis, use the number of "
+"bugs that were closed by each changelog entry. Note that this number is "
+"obtained by searching for \"#dddd\" in the changelog, and so it may be "
+"inaccurate. Cannot be used together with B<--linecount>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:57
+#, no-wrap
+msgid "B<-c>, B<--cumulative>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:65
+msgid ""
+"When used together with either B<--bugcount> or B<--linecount>, graphs the "
+"cumulative count rather than the count in each individual changelog entry."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:65
+#, no-wrap
+msgid "B<-v>, B<--no-version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:68
+msgid "Do not show upstream version labels. Useful if the graph gets too crowded."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:68
+#, no-wrap
+msgid "B<-m, --no-maint>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:71
+msgid "Do not differentiate between different maintainers of the package."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:71
+#, no-wrap
+msgid "B<-s file>, B<--save=>I<file>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:75
+msgid ""
+"Save the graph to I<file> in PostScript format instead of immediately "
+"displaying it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:75
+#, no-wrap
+msgid "B<-u>, B<--urgency>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:78
+msgid "Use larger points when displaying higher-urgency package uploads."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:81
+msgid "Output the gnuplot script that is fed into gnuplot (for debugging purposes)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:81
+#, no-wrap
+msgid "B<-g>I<commands>, B<--gnuplot=>I<commands>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:92
+msgid ""
+"This allows you to insert B<gnuplot>(1) commands into the gnuplot script "
+"that is used to generate the graph. The commands are placed after all "
+"initialization but before the final B<plot> command. This can be used to "
+"override the default look provided by this program in arbitrary ways. You "
+"can also use things like \"set terminal png color\" to change the output "
+"file type, which is useful in conjunction with the -s option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:95
+msgid "Show a usage summary."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:98
+msgid "Display version, author and copyright information."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:98
+#, no-wrap
+msgid "B<--noconf>, B<--no-conf>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:101
+msgid "Do not read any configuration files (see below)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:101
+#, no-wrap
+msgid "I<changelog >..."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:106
+msgid ""
+"The I<changelog> files to graph. If multiple files are specified they will "
+"all be displayed on the same graph. The files may be compressed with "
+"gzip. Any text in them that is not in Debian changelog format will be "
+"ignored."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:113
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. The "
+"B<--no-conf> option can be used to prevent reading these files. Environment "
+"variable settings are ignored when these configuration files are read. The "
+"currently recognised variables are:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:113
+#, no-wrap
+msgid "B<PLOTCHANGELOG_OPTIONS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:118
+msgid ""
+"This is a space-separated list of options to always use, for example B<-l "
+"-b>. Do not include B<-g> or B<--gnuplot> among this list as it may be "
+"ignored; see the next variable instead."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:118
+#, no-wrap
+msgid "B<PLOTCHANGELOG_GNUPLOT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:124
+msgid ""
+"These are B<gnuplot> commands which will be prepended to any such commands "
+"given on the command line."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:127
+msgid "Joey Hess E<lt>joey@kitenet.netE<gt>"
+msgstr ""
+
+#. type: TH
+#: ../scripts/pts-subscribe.1:1
+#, no-wrap
+msgid "PTS-SUBSCRIBE"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:4
+msgid "pts-subscribe - time-limited subscription to the PTS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:6
+msgid "B<pts-subscribe> [I<options>] I<package>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:8
+msgid "B<pts-unsubscribe> [I<options>] I<package>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:12
+msgid ""
+"B<pts-subscribe> sends a subscription request for I<package> to the Package "
+"Tracking System at pts@qa.debian.org, and cancels the subscription 30 days "
+"later."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:15
+msgid ""
+"If called as B<pts-unsubscribe>, send an unsubscription request for "
+"I<package> to the Package Tracking System."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:18
+msgid ""
+"This utility is useful if a developer has made an NMU and wants to track the "
+"package for a limited period of time."
+msgstr ""
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:19
+#, no-wrap
+msgid "B<--until >I<time>, B<-u> I<time>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:24
+msgid ""
+"When B<at>(1) should cancel the subscription. I<time> must be specified "
+"using B<at>'s syntax. Default is 'now + 30 days'. This option will "
+"probably require quoting!"
+msgstr ""
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:24
+#, no-wrap
+msgid "B<--forever>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:28
+msgid ""
+"Don't cancel the subscription automatically. This can also be specified as "
+"B<--until forever>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:35
+#, no-wrap
+msgid "B<DEBEMAIL>, B<EMAIL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:42
+msgid ""
+"If one of these is set (with preference give to B<DEBEMAIL>), then this will "
+"be used for the subscription address. If neither is set, then the email "
+"will be sent without a specified subscription address, and the email's From: "
+"line will be used to determine the sender's address. This will be "
+"determined by B<mail>(1)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:48
+#, no-wrap
+msgid "B<PTS_UNTIL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:51
+msgid "Setting this is equivalent to giving a B<--until> option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:56
+msgid ""
+"B<at>(1), information about the Package Tracking System in the Developer's "
+"Reference at "
+"https://www.debian.org/doc/developers-reference/resources.html#pkg-tracking-system"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:59
+msgid ""
+"This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt> based on "
+"a public domain prototype by Raphael Hertzog E<lt>hertzog@debian.orgE<gt> "
+"and is copyright under the GPL, version 2 or later."
+msgstr ""
+
+#. type: TH
+#: ../scripts/rc-alert.1:1
+#, no-wrap
+msgid "RC-ALERT"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:4
+msgid "rc-alert - check for installed packages with release-critical bugs"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:6
+msgid ""
+"B<rc-alert> [I<inclusion options>] [B<--debtags> [I<tag>[B<,>I<tag> ...]]] "
+"[B<--popcon>] [I<package> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:8
+msgid "B<rc-alert --help>|B<--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:12
+msgid ""
+"B<rc-alert> downloads the list of release-critical bugs from the Debian BTS "
+"webpages, and then outputs a list of packages installed on the system, or "
+"given on the command-line, which are in that list."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:17
+msgid ""
+"If the directory I<$XDG_CACHE_HOME/devscripts/rc-alert> exists or the "
+"B<--cache> option is given, then the (sizable) downloaded list will be "
+"cached, and will only be downloaded again on a second invocation if it has "
+"changed."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:18
+#, no-wrap
+msgid "B<--cache>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:21
+msgid ""
+"Force the creation of the I<$XDG_CACHE_HOME/devscripts/rc-alert> cache "
+"directory."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:31
+msgid ""
+"It is also possible to filter the list of bugs reported based on the tags "
+"and distributions associated with the package. The filtering options are:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:31
+#, no-wrap
+msgid "B<--include-tags>, B<-f>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:35
+msgid ""
+"A list of tags which the bug must have, in the format used for output. For "
+"example, to include bugs tagged security or help wanted, use \"SH\"."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:35
+#, no-wrap
+msgid "B<--include-tag-op>, B<-t>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:39
+msgid ""
+"If set to I<and>, a bug must have all of the tags specified by "
+"B<--include-tags>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:39
+#, no-wrap
+msgid "B<--exclude-tags>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:43
+msgid ""
+"A list of tags which the bug must not have, in the same format as "
+"B<--include-tags>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:43
+#, no-wrap
+msgid "B<--exclude-tag-op>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:48
+msgid ""
+"If set to I<and>, a bug must have none of the tags specified by "
+"B<--exclude-tags>. By default, the bug will be excluded if any tag matches."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:48
+#, no-wrap
+msgid "B<--include-dists>, B<-d>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:52
+msgid ""
+"A list of distributions which the bug must apply to, in the format used for "
+"output. For example, to include bugs affecting testing or unstable, use "
+"\"TU\"."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:52
+#, no-wrap
+msgid "B<--include-dist-op>, B<-o>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:56
+msgid ""
+"If set to I<and>, a bug must apply to all of the specified distributions in "
+"order to be included."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:56
+#, no-wrap
+msgid "B<--exclude-dists>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:60
+msgid ""
+"A list of distributions to which the bug must not apply, in the same format "
+"as B<--include-dists>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:60
+#, no-wrap
+msgid "B<--exclude-dist-op>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:65
+msgid ""
+"If set to I<and>, a bug must apply to all of the specified distributions in "
+"order to be excluded. By default the bug will be excluded if it applies to "
+"any of the listed distributions."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:70
+msgid ""
+"It is also possible to only list bugs which have specific debtags set. Note "
+"that you need to have debtags installed and also that it's not mandatory for "
+"maintainers to set proper debtags. The produced list will thus probably be "
+"incomplete."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:70
+#, no-wrap
+msgid "B<--debtags>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:75
+msgid ""
+"Match packages based on the listed tags. Each package is matched only if it "
+"has all the listed tags; in the case of multiple tags within the same facet, "
+"a package is matched if it has any of the listed tags within the facet."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:75
+#, no-wrap
+msgid "B<--debtags-database>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:79
+msgid ""
+"Use a non-standard debtags database. The default is "
+"I</var/lib/debtags/packages-tags>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:83
+msgid ""
+"Popularity-contest collects data about installation and usage of Debian "
+"packages. You can additionally sort the bugs by the popcon rank of the "
+"related packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:83
+#, no-wrap
+msgid "B<--popcon>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:86
+msgid "Sort bugs by the popcon rank of the package the bug belongs to."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:86
+#, no-wrap
+msgid "B<--pc-vote>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:92
+msgid ""
+"By default, packages are sorted according to the number of people who have "
+"the package installed. This option enables sorting by the number of people "
+"regularly using the package instead. This option has no effect in "
+"combination with --pc-local."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:92
+#, no-wrap
+msgid "B<--pc-local>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:96
+msgid ""
+"Instead of requesting remote data the information from the last popcon run "
+"is used (I</var/log/popularity-contest>)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:97
+#, no-wrap
+msgid "B<--include-dists> OS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:100
+msgid "The bug must apply to at least one of oldstable or stable"
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:100
+#, no-wrap
+msgid "B<--include-dists> TUB< --include-dist-op> and"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:103
+msgid "The bug must apply to both testing and unstable"
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:103
+#, no-wrap
+msgid "B<--include-dists> OB< --include-tags> SB< --exclude-tags> +"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:106
+msgid "The bug must apply to oldstable and be tagged security but not patch"
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:106
+#, no-wrap
+msgid "B<--exclude-dists> SOTB< --include-tags> R"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:110
+msgid ""
+"The bug must apply to only unstable or experimental (or both) and be tagged "
+"unreproducible"
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:110
+#, no-wrap
+msgid "B<--debtags> implemented-in::perl,role::plugin,implemented-in::python"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:115
+msgid ""
+"The bug must apply to packages matching the specified debtags, i.e. the "
+"match will only include packages that have the 'role::plugin' tag and that "
+"have either of the tags 'implemented-in::perl' or 'implemented-in::python'."
+msgstr ""
+
+#. type: TP
+#: ../scripts/rc-alert.1:115
+#, no-wrap
+msgid "B<--popcon> B<--pc-local>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:119
+msgid ""
+"Read I</var/log/popularity-contest> and sort bugs by your personal popcon "
+"ranking (which is basically the atime of your packages' binaries)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:121
+msgid "It is not possible to say \"does not apply only to unstable\""
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:125
+msgid "B<debtags(1)> B<popbugs(1)> B<popularity-contest(8)>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:129
+msgid ""
+"B<rc-alert> was written by Anthony DeRobertis and modified by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> and Adam D. Barratt "
+"E<lt>adam@adam-barratt.org.ukE<gt> for the devscripts package. Debtags and "
+"popcon functionality was added by Jan Hauke Rahm "
+"E<lt>info@jhr-online.deE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:262
+msgid "rmadison -- Remotely query the Debian archive database about packages"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:268
+msgid "B<rmadison> [I<OPTIONS>] I<PACKAGE> ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:274
+msgid ""
+"B<dak ls> queries the Debian archive database (\"projectb\") and displays "
+"which package version is registered per architecture/component/suite. The "
+"CGI at B<https://qa.debian.org/madison.php> provides that service without "
+"requiring SSH access to ftp-master.debian.org or the mirror on "
+"mirror.ftp-master.debian.org. This script, B<rmadison>, is a command line "
+"frontend to this CGI."
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:285
+msgid "B<-a>, B<--architecture=>I<ARCH>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:287
+msgid "only show info for ARCH(s)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:289
+msgid "B<-b>, B<--binary-type=>I<TYPE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:291
+msgid "only show info for binary TYPE"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:293
+msgid "B<-c>, B<--component=>I<COMPONENT>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:295
+msgid "only show info for COMPONENT(s)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:297
+msgid "B<-g>, B<--greaterorequal>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:299
+msgid "show buildd 'dep-wait pkg >= {highest version}' info"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:301
+msgid "B<-G>, B<--greaterthan>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:303
+msgid "show buildd 'dep-wait pkg >> {highest version}' info"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:307
+msgid "show this help and exit"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:309
+msgid "B<-s>, B<--suite=>I<SUITE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:311
+msgid "only show info for this suite"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:313
+msgid "B<-r>, B<--regex>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:315
+msgid "treat PACKAGE as a regex"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:317
+msgid ""
+"B<Note:> Since B<-r> can easily DoS the database (\"-r .\"), this option is "
+"not supported by the CGI on qa.debian.org and most other installations."
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:320
+msgid "B<-S>, B<--source-and-binary>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:322
+msgid "show info for the binary children of source pkgs"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:324
+msgid "B<-t>, B<--time>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:326
+msgid "show projectb snapshot and reload time (not supported by all archives)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:328
+msgid "B<-u>, B<--url=>I<URL>[B<,>I<URL> ...]"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/rmadison.pl:330
+#, no-wrap
+msgid ""
+"use I<URL> for the query. Supported shorthands are\n"
+" B<debian> https://api.ftp-master.debian.org/madison\n"
+" B<new> https://api.ftp-master.debian.org/madison?s=new\n"
+" B<qa> https://qa.debian.org/madison.php\n"
+" B<ubuntu> https://people.canonical.com/~ubuntu-archive/madison.cgi\n"
+" B<udd> https://qa.debian.org/cgi-bin/madison.cgi\n"
+" B<archive> https://qa.debian.org/cgi-bin/madison.cgi?table=archived\n"
+" B<ports> https://qa.debian.org/cgi-bin/madison.cgi?table=ports\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:339
+msgid ""
+"See the B<RMADISON_URL_MAP_> variable below for a method to add new "
+"shorthands."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:344
+msgid "show version and exit"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:348
+msgid "don't read the devscripts configuration files"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:352
+msgid ""
+"ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g. "
+"--architecture=amd64,i386"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:365
+msgid "B<RMADISON_URL_MAP_>I<SHORTHAND>=I<URL>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:367
+msgid ""
+"Add an entry to the set of shorthand URLs listed above. I<SHORTHAND> should "
+"be replaced with the shorthand form to be used to refer to I<URL>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:370
+msgid ""
+"Multiple shorthand entries may be specified by using multiple "
+"B<RMADISON_URL_MAP_*> variables."
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:373
+msgid "B<RMADISON_DEFAULT_URL>=I<URL>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:375
+msgid ""
+"Set the default URL to use unless overridden by a command line option. For "
+"Debian this defaults to debian. For Ubuntu this defaults to ubuntu."
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:378
+msgid "B<RMADISON_ARCHITECTURE>=I<ARCH>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:380
+msgid ""
+"Set the default architecture to use unless overridden by a command line "
+"option. To run an unrestricted query when B<RMADISON_ARCHITECTURE> is set, "
+"use B<--architecture='*'>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:384
+msgid "B<RMADISON_SSL_CA_FILE>=I<FILE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:386
+msgid ""
+"Use the specified CA file instead of the default CA bundle for curl/wget, "
+"passed as --cacert to curl, and as --ca-certificate to wget."
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:389
+msgid "B<RMADISON_SSL_CA_PATH>=I<PATH>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:391
+msgid ""
+"Use the specified CA directory instead of the default CA bundle for "
+"curl/wget, passed as --capath to curl, and as --ca-directory to wget."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:398
+msgid "B<dak ls> was formerly called B<madison>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:400
+msgid ""
+"The protocol used by rmadison is fairly simple, the CGI accepts query the "
+"parameters a, b, c, g, G, r, s, S, t, and package. The parameter text is "
+"passed to enable plain-text output."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:406
+msgid "B<dak>(1), B<madison-lite>(1)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:410
+msgid ""
+"rmadison and https://qa.debian.org/madison.php were written by Christoph "
+"Berg <myon@debian.org>. dak was written by James Troup <james@nocrew.org>, "
+"Anthony Towns <ajt@debian.org>, and others."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:19
+msgid "sadt - simple DEP-8 test runner"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:23
+msgid "B<sadt> [I<options>] [I<test-name>...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:27
+msgid ""
+"B<sadt> is a simple implementation of DEP-8 (“automatic as-installed package "
+"testing”) test runner."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:30
+msgid ""
+"It is your responsibility to satisfy tests' dependencies. B<sadt> won't "
+"attempt to install any missing packages. If a test's dependencies cannot be "
+"satisfied by packages that are currently installed, the test will be "
+"skipped."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:34
+msgid ""
+"B<sadt> won't build the package even if a test declares the B<build-needed> "
+"restriction. Instead, such a test will be skipped. However, you can build "
+"the package manually, and then tell B<sadt> to assume that the package is "
+"already built using the B<-b>/B<--built-source-tree>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:39
+msgid ""
+"B<sadt> doesn't implement any virtualisation arrangements, therefore it "
+"skips tests that declare the B<breaks-testbed> restriction."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:48
+msgid "Make the output more verbose."
+msgstr ""
+
+#. type: =item
+#: ../scripts/sadt.pod:50
+msgid "B<-b>, B<--built-source-tree>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:52
+msgid ""
+"Assume that the source tree is already built. This is equivalent to "
+"B<--ignore-restriction=build-needed>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/sadt.pod:55
+msgid "B<--run-autodep8>, B<--no-run-autodep8>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:57
+msgid ""
+"Control whether to run autodep8(1) to determine the tests to run. By "
+"default, autodep8 will be run."
+msgstr ""
+
+#. type: =item
+#: ../scripts/sadt.pod:60
+msgid "B<--ignore-restriction>=I<restriction>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:62
+msgid "Don't skip tests that declare the I<restriction>."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/sadt.pod:70
+msgid "CONFORMING TO"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:72
+msgid "README.package-tests shipped by autopkgtest 2.7.2"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/sadt.pod:76
+msgid "B<adt-run>(1)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:5
+msgid "salsa - tool to manipulate salsa repositories and group members"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:9
+#, no-wrap
+msgid ""
+" # salsa <command> <args>\n"
+" salsa whoami\n"
+" salsa search_project devscripts\n"
+" salsa search_project qa/qa\n"
+" salsa search_group js-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_user yadd\n"
+" salsa push_repo . --group js-team --kgb --irc devscripts --tagpending\n"
+" salsa update_repo node-mongodb --group js-team --disable-kgb --desc \\\n"
+" --desc-pattern \"Package %p\"\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+" salsa update_safe --all --desc --desc-pattern \"Debian package %p\" \\\n"
+" --group js-team\n"
+" salsa checkout node-mongodb --group js-team\n"
+" salsa checkout js-team/node-mongodb\n"
+" salsa add_user developer foobar --group-id 2665\n"
+" salsa update_user maintainer foobar --group js-team\n"
+" salsa del_user foobar --group js-team\n"
+" salsa last_ci_status js-team/nodejs\n"
+" salsa pipelines js-team/nodejs\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:32
+msgid ""
+"B<salsa> is designed to create and configure repositories on "
+"L<https://salsa.debian.org> and manage users of groups."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:35
+msgid ""
+"A Salsa token is required, except for search* commands, and must be set in "
+"command line I<(see below)>, or in your configuration file "
+"I<(~/.devscripts)>:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:38
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=abcdefghi\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:40 ../scripts/salsa.pl:44 ../scripts/salsa.pl:509
+#: ../scripts/salsa.pl:538
+msgid "or"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:42
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=`cat ~/.token`\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:46
+#, no-wrap
+msgid ""
+" SALSA_TOKEN_FILE=~/.dpt.conf\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:48
+msgid ""
+"If you choose to link another file using SALSA_TOKEN_FILE, it must contain a "
+"line with one of (no differences):"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:51
+#, no-wrap
+msgid ""
+" <anything>SALSA_PRIVATE_TOKEN=xxxx\n"
+" <anything>SALSA_TOKEN=xxxx\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:54
+msgid ""
+"This allows for example to use dpt(1) configuration file (~/.dpt.conf) which "
+"contains:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:57
+#, no-wrap
+msgid ""
+" DPT_SALSA_PRIVATE_TOKEN=abcdefghi\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:61
+msgid "Managing users and groups"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:65
+msgid "B<join>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:67
+msgid "Request access to a group."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:69
+#, no-wrap
+msgid ""
+" salsa join js-team\n"
+" salsa join --group js-team\n"
+" salsa join --group-id 1234\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:73
+msgid "B<add_user>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:75
+msgid "Add a user to a group."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:77
+#, no-wrap
+msgid ""
+" salsa --group js-group add_user guest foouser\n"
+" salsa --group-id 1234 add_user guest foouser\n"
+" salsa --group-id 1234 add_user maintainer 1245\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:81 ../scripts/salsa.pl:125
+msgid ""
+"First argument is the GitLab's access levels: guest, reporter, developer, "
+"maintainer, owner."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:84
+msgid "B<del_user>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:86
+msgid "Remove a user from a group"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:88
+#, no-wrap
+msgid ""
+" salsa --group js-team del_user foouser\n"
+" salsa --group-id=1234 del_user foouser\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:91
+msgid "B<list_groups>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:93
+msgid "List sub groups of current one if group is set, groups of current user else."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:96
+msgid "B<group>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:98
+msgid "Show group members."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:100
+#, no-wrap
+msgid ""
+" salsa --group js-team group\n"
+" salsa --group-id 1234 group\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:103
+msgid "B<search_group>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:105
+msgid "Search for a group using given string. Shows group id and other information."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:108
+#, no-wrap
+msgid ""
+" salsa search_group perl-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_group 2666\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:112
+msgid "B<search_user>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:114
+msgid "Search for a user using given string. Shows user id and other information."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:116
+#, no-wrap
+msgid ""
+" salsa search_user yadd\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:118
+msgid "B<update_user>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:120
+msgid "Update user role in a group."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:122
+#, no-wrap
+msgid ""
+" salsa --group-id 1234 update_user guest foouser\n"
+" salsa --group js-team update_user maintainer 1245\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:128
+msgid "B<whoami>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:130
+msgid "Gives information on the token owner"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:132
+#, no-wrap
+msgid ""
+" salsa whoami\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:136
+msgid "Managing repositories"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:138
+msgid ""
+"One of C<--group>, C<--group-id>, C<--user> or C<--user-id> is required to "
+"manage repositories. If both are set, salsa warns and only "
+"C<--user>/C<--user-id> is used. If none is given, salsa uses current user id "
+"I<(token owner)>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:145
+msgid "B<check_repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:147
+msgid ""
+"Verify that repo(s) are well configured. It works exactly like "
+"B<update_repo> except that it does not modify anything but just lists "
+"projects not well configured with found errors."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:151
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts check_repo test\n"
+" salsa --group js-team check_repo --all\n"
+" salsa --group js-team --rename-head check_repo test1 test2 test3\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:155
+msgid "B<checkout> or B<co>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:157
+msgid "Clone repo in current dir. If directory already exists, update local repo."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:160
+#, no-wrap
+msgid ""
+" salsa --user yadd co devscripts\n"
+" salsa --group js-team co node-mongodb\n"
+" salsa co js-team/node-mongodb\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:164
+msgid ""
+"You can clone more than one repository or all repositories of a group or a "
+"user:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:167
+#, no-wrap
+msgid ""
+" salsa --user yadd co devscripts autodep8\n"
+" salsa co yadd/devscripts js-team/npm\n"
+" salsa --group js-team co --all # All js-team active repos\n"
+" salsa co --all-archived # All your repos including "
+"archived\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:172
+msgid "B<create_repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:174
+msgid ""
+"Create public empty project. If C<--group>/C<--group-id> is set, project is "
+"created in group directory, else in user directory."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:177
+#, no-wrap
+msgid ""
+" salsa --user yadd create_repo test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts create_repo test\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:180
+msgid "B<del_repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:182
+msgid "Delete a repository."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:184
+msgid "B<fork>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:186
+msgid ""
+"Forks a project in group/user repository and set \"upstream\" to original "
+"project. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:189
+#, no-wrap
+msgid ""
+" $ salsa fork js-team/node-mongodb --verbose\n"
+" ...\n"
+" salsa.pl info: node-mongodb ready in node-mongodb/\n"
+" $ cd node-mongodb\n"
+" $ git remote --verbose show\n"
+" origin git@salsa.debian.org:me/node-mongodb (fetch)\n"
+" origin git@salsa.debian.org:me/node-mongodb (push)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (fetch)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (push)\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:199
+msgid "For a group:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:201
+#, no-wrap
+msgid ""
+" salsa fork --group js-team user/node-foo\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:203
+msgid "B<forks>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:205
+msgid "List forks of project(s)."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:207
+#, no-wrap
+msgid ""
+" salsa forks qa/qa debian/devscripts\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:209 ../scripts/salsa.pl:320
+msgid ""
+"Project can be set using full path or using B<--group>/B<--group-id> or "
+"B<--user>/B<--user-id>, else it is searched in current user namespace."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:212
+msgid "B<push>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:214
+msgid ""
+"Push relevant packaging refs to origin Git remote. To be run from packaging "
+"working directory."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:217
+#, no-wrap
+msgid ""
+" salsa push\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:219
+msgid ""
+"It pushes the following refs to the configured remote for the debian-branch "
+"or, falling back, to the \"origin\" remote:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:224
+msgid "\"master\" branch (or whatever is set to debian-branch in gbp.conf)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:226
+msgid "\"upstream\" branch (or whatever is set to upstream-branch in gbp.conf)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:228
+msgid "\"pristine-tar\" branch"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:230
+msgid "tags named \"debian/*\" (or whatever is set to debian-tag in gbp.conf)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:232
+msgid "tags named \"upstream/*\" (or whatever is set to upstream-tag in gbp.conf)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:234
+msgid "all tags, if the package's source format is \"3.0 (native)\""
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:238
+msgid "B<ls> or B<list_repos>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:240
+msgid ""
+"Shows projects owned by user or group. If second argument exists, search "
+"only matching projects"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:243
+#, no-wrap
+msgid ""
+" salsa --group js-team list_repos\n"
+" salsa --user yadd list_repos foo*\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:246
+msgid "B<last_ci_status> or B<ci>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:248
+msgid ""
+"Displays last continuous integration result. Use B<--verbose> to see URL of "
+"pipeline when result isn't B<success>. Unless B<--no-fail> is set, B<salsa "
+"last_ci_status> will stop on first \"failed\" status."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:252
+#, no-wrap
+msgid ""
+" salsa --group js-team last_ci_status --all --no-fail\n"
+" salsa --user yadd last_ci_status foo\n"
+" salsa last_ci_status js-team/nodejs\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:256
+msgid ""
+"This commands returns the number of \"failed\" status found. \"success\" "
+"entries are displayed using STDOUT while other are displayed I<(with "
+"details)> using STDERR. Then you can easily see only failures using:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:260
+#, no-wrap
+msgid ""
+" salsa --group js-team last_ci_status --all --no-fail >/dev/null\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:262
+msgid "B<pipeline>, B<schedule>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:264
+msgid "Control pipeline schedule"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:266
+msgid "B<pipelines>, B<schedules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:268
+msgid "Lists current pipeline schedule items."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:270
+msgid "You can use B<--no-fail> and B<--all> options here."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:272
+msgid "B<merge_request>, B<mr>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:274
+msgid "Creates a merge request."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:276
+msgid ""
+"Suppose you created a fork using B<salsa fork>, modify some things in a new "
+"branch using one commit and want to propose it to original project I<(branch "
+"\"master\")>. You just have to launch this in source directory:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:280
+#, no-wrap
+msgid ""
+" salsa mr\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:282
+msgid "Other example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:284
+#, no-wrap
+msgid ""
+" salsa mr --mr-dst-project debian/foo --mr-dst-branch debian/master\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:286
+msgid "or simply"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:288
+#, no-wrap
+msgid ""
+" salsa mr debian/foo debian/master\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:290
+msgid ""
+"Note that unless destination project has been set using command line, "
+"B<salsa merge_request> will search it in the following order:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:295
+msgid "using GitLab API: salsa will detect from where this project was forked"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:297
+msgid "using \"upstream\" origin"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:299
+msgid "else salsa will use source project as destination project"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:303
+msgid ""
+"To force salsa to use source project as destination project, you can use "
+"\"same\":"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:306
+#, no-wrap
+msgid ""
+" salsa mr --mr-dst-project same\n"
+" # or\n"
+" salsa mr same\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:310
+msgid "New merge request will be created using last commit title and description."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:312
+msgid "See B<--mr-*> options for more."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:314
+msgid "B<merge_requests>, B<mrs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:316
+msgid "List opened merge requests for project(s)"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:318
+#, no-wrap
+msgid ""
+" salsa mrs qa/qa debian/devscripts\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:323
+msgid "B<protect_branch>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:325
+msgid "Protect/unprotect a branch."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:329
+msgid "Set protection"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:331
+#, no-wrap
+msgid ""
+" # project branch merge push\n"
+" salsa --group js-team protect_branch node-mongodb master m d\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:334
+msgid "\"merge\" and \"push\" can be one of:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:338
+msgid "B<o>, B<owner>: owner only"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:340
+msgid "B<m>, B<maintainer>: B<o> + maintainers allowed"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:342
+msgid "B<d>, B<developer>: B<m> + developers allowed"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:344
+msgid "B<r>, B<reporter>: B<d> + reporters allowed"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:346
+msgid "B<g>, B<guest>: B<r> + guest allowed"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:350
+msgid "Unprotect"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:352
+#, no-wrap
+msgid ""
+" salsa --group js-team protect_branch node-mongodb master no\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:356
+msgid "B<protected_branches>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:358
+msgid "List protected branches"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:360
+#, no-wrap
+msgid ""
+" salsa --group js-team protected_branches node-mongodb\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:362
+msgid "B<push_repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:364
+msgid ""
+"Create a new project from a local Debian source directory configured with "
+"git."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:367
+msgid "B<push_repo> executes the following steps:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:371
+msgid "gets project name using debian/changelog file;"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:373
+msgid "launches B<git remote add upstream ...>;"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:375
+msgid "launches B<create_repo>;"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:377
+msgid "pushes local repo."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:383
+#, no-wrap
+msgid ""
+" salsa --user yadd push_repo ./test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts push_repo .\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:386
+msgid "B<rename_branch>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:388
+msgid ""
+"Rename branch given in B<--source-branch> with name given in "
+"B<--dest-branch>. You can use B<--no-fail>, B<--all> and B<--all-archived> "
+"options here."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:391
+msgid "B<search>, B<search_project>, B<search_repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:393
+msgid ""
+"Search for a project using given string. Shows name, owner id and other "
+"information."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:396
+#, no-wrap
+msgid ""
+" salsa search devscripts\n"
+" salsa search debian/devscripts\n"
+" salsa search 18475\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:400
+msgid "B<update_repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:402
+msgid ""
+"Configure repo(s) using parameters given to command line. A repo name has "
+"to be given unless B<--all> or B<--all-archived> is set. Prefer to use "
+"B<update_safe>."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:406
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_repo test\n"
+" salsa --group js-team update_repo --all\n"
+" salsa --group js-team --rename-head update_repo test1 test2 test3\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:411
+msgid ""
+"By default when using B<--all>, salsa will fail on first error. If you want "
+"to continue, set B<--no-fail>. In this case, salsa will display a warning "
+"for each project that has fail but continue with next project. Then to see "
+"full errors, set B<--verbose>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:416
+msgid "B<update_safe>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:418
+msgid ""
+"Launch B<check_repo> and ask before launching B<update_repo> (unless "
+"B<--yes>)."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:420
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_safe test\n"
+" salsa --group js-team update_safe --all\n"
+" salsa --group js-team --rename-head update_safe test1 test2 test3\n"
+" salsa update_safe js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:427
+msgid "Other"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:431
+msgid "B<purge_cache>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:433
+msgid "Empty local cache."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:439
+msgid "General options"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:443
+msgid "B<-C>, B<--chdir>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:445
+msgid "Change directory before launching command"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:447
+#, no-wrap
+msgid ""
+" salsa -C ~/debian co debian/libapache2-mod-fcgid\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:449
+msgid "B<--cache-file>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:451
+msgid ""
+"File to store cached values. Default to B<~/.cache/salsa.json>. An empty "
+"value disables cache."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:454
+msgid "C<.devscripts> value: B<SALSA_CACHE_FILE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:458
+msgid "Disable cache usage. Same as B<--cache-file ''>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:460 ../scripts/uscan.pl:1538
+msgid "B<--conffile>, B<--conf-file>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:462 ../scripts/uscan.pl:1540
+msgid ""
+"Add or replace default configuration files (C</etc/devscripts.conf> and "
+"C<~/.devscripts>). This can only be used as the first option given on the "
+"command-line."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:468 ../scripts/uscan.pl:1546
+msgid "replace:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:470
+#, no-wrap
+msgid ""
+" salsa --conf-file test.conf <command>...\n"
+" salsa --conf-file test.conf --conf-file test2.conf <command>...\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:473 ../scripts/uscan.pl:1550
+msgid "add:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:475
+#, no-wrap
+msgid ""
+" salsa --conf-file +test.conf <command>...\n"
+" salsa --conf-file +test.conf --conf-file +test2.conf <command>...\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:478 ../scripts/uscan.pl:1554
+msgid "If one B<--conf-file> has no C<+>, default configuration files are ignored."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:484 ../scripts/uscan.pl:1560
+msgid ""
+"Don't read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:489
+msgid "Enable debugging output"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:491
+msgid "B<--group>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:493
+msgid "Team to use. Use C<salsa search_group name> to find it."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:495
+msgid "If you want to use a subgroup, you have to set its full path:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:497
+#, no-wrap
+msgid ""
+" salsa --group perl-team/modules/packages check_repo lemonldap-ng\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:499
+msgid "C<.devscripts> value: B<SALSA_GROUP>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:501
+msgid ""
+"Be careful when you use B<SALSA_GROUP> in your C<.devscripts> file. Every "
+"B<salsa> command will be executed in group space, for example if you want to "
+"propose a little change in a project using B<salsa fork> + B<salsa mr>, this "
+"\"fork\" will be done in group space unless you set a "
+"B<--user>/B<--user-id>. Prefer to use an alias in your C<.bashrc> "
+"file. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:507
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --group js-team\"\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:511 ../scripts/salsa.pl:540
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --conf-file ~/.js.conf\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:513
+msgid "or to use both .devscripts and .js.conf:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:515
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --conf-file +~/.js.conf\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:517
+msgid "then you can fix B<SALSA_GROUP> in C<~/.js.conf>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:519
+msgid "To enable bash completion for your alias, add this in your .bashrc file:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:521
+#, no-wrap
+msgid ""
+" _completion_loader salsa\n"
+" complete -F _salsa_completion jsteam_admin\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:524
+msgid "B<--group-id>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:526
+msgid "Group id to use. Use C<salsa search_group name> to find it."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:528
+msgid "C<.devscripts> value: B<SALSA_GROUP_ID>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:530
+msgid ""
+"Be careful when you use B<SALSA_GROUP_ID> in your C<.devscripts> file. Every "
+"B<salsa> command will be executed in group space, for example if you want to "
+"propose a little change in a project using B<salsa fork> + B<salsa mr>, this "
+"\"fork\" will be done in group space unless you set a "
+"B<--user>/B<--user-id>. Prefer to use an alias in your C<.bashrc> "
+"file. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:536
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --group-id 2666\"\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:542
+msgid "then you can fix B<SALSA_GROUP_ID> in C<~/.js.conf>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:544
+msgid "B<--help>: displays this manpage"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:546
+msgid "B<-i>, B<--info>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:548
+msgid "Prompt before sensible changes."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:550
+msgid "C<.devscripts> value: B<SALSA_INFO> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:552
+msgid "B<--path>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:554
+msgid "Repo path. Default to group or user path."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:556
+msgid "C<.devscripts> value: B<SALSA_REPO_PATH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:558
+msgid "B<--token>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:560
+msgid "Token value (see above)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:562
+msgid "B<--token-file>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:564
+msgid "File to find token (see above)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:568
+msgid ""
+"Username to use. If neither B<--group>, B<--group-id>, B<--user> or "
+"B<--user-id> is set, salsa uses current user id (corresponding to salsa "
+"private token)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:571
+msgid "B<--user-id>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:573
+msgid ""
+"User id to use. Use C<salsa search_user name> to find one. If neither "
+"B<--group>, B<--group-id>, B<--user> or B<--user-id> is set, salsa uses "
+"current user id (corresponding to salsa private token)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:577
+msgid "C<.devscripts> value: B<SALSA_USER_ID>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:581
+msgid "Enable verbose output."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:583
+msgid "B<--yes>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:585
+msgid "Never ask for consent."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:587
+msgid "C<.devscripts> value: B<SALSA_YES> (yes/no)"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:591
+msgid "List/search repo options"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:595
+msgid "B<--archived>, B<--no-archived>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:597
+msgid ""
+"Instead of looking to active projects, list or search in archived projects. "
+"Note that you can't have both archived and unarchived projects in the same "
+"request. Default: no I<(ie --no-archived)>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:601
+msgid "C<.devscripts> value: B<SALSA_ARCHIVED> (yes/no)"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:605
+msgid "Update/create repo options"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:609
+msgid "B<--all>, B<--all-archived>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:611
+msgid ""
+"When set, all projects of group/user are affected by command. B<--all> will "
+"filter all active projects, whereas B<--all-archived> will include active "
+"and archived projects."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:617
+msgid "B<--skip>: ignore project with B<--all> or B<--all-achived>. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:619
+#, no-wrap
+msgid ""
+" salsa update_repo --tagpending --all --skip qa --skip devscripts\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:621
+msgid ""
+"C<.devscripts> value: B<SALSA_SKIP>. To set multiples values, use spaces. "
+"Example"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:624
+#, no-wrap
+msgid ""
+" SALSA_SKIP=qa devscripts\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:626
+msgid "B<--skip-file>: ignore projects in this file (1 project per line)"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:628
+#, no-wrap
+msgid ""
+" salsa update_repo --tagpending --all --skip-file ~/.skip\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:630
+msgid "C<.devscripts> value: B<SALSA_SKIP_FILE>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:634
+msgid "B<--build-timeout>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:636
+msgid "The maximum amount of time, in seconds, that a job can run."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:638
+msgid "Default: 3600 (60 minutes)"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:640
+#, no-wrap
+msgid ""
+" salsa update_safe myrepo --build-timeout 3600\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:642
+msgid "C<.devscripts> value: B<SALSA_BUILD_TIMEOUT>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:644
+msgid "B<--avatar-path>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:646
+msgid ""
+"Path to an image for the project's avatar. If path value contains \"%p\", "
+"it is replaced by project name."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:649
+msgid "C<.devscripts> value: B<SALSA_AVATAR_PATH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:651
+msgid "B<--ci-config-path>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:653
+msgid "Configure configuration file path of GitLab CI. Default: empty. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:655
+#, no-wrap
+msgid ""
+" salsa update_safe --ci-config-path "
+"recipes/debian.yml@salsa-ci-team/pipeline debian/devscripts\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:657
+msgid "C<.devscripts> value: B<SALSA_CI_CONFIG_PATH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:659
+msgid "B<--desc>, B<--no-desc>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:661
+msgid "Configure repo description using pattern given in B<desc-pattern>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:663
+msgid "C<.devscripts> value: B<SALSA_DESC> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:665
+msgid "B<--desc-pattern>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:667
+msgid ""
+"Repo description pattern. Default to \"Debian package %p\". \"%p\" is "
+"replaced by repo name, while \"%P\" is replaced by repo name given in "
+"command (may contains full path)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:671
+msgid "C<.devscripts> value: B<SALSA_DESC_PATTERN>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:673
+msgid "B<--email>, B<--no-email>, B<--disable-email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:675
+msgid "Enable, ignore or disable email-on-push."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:677
+msgid "C<.devscripts> value: B<SALSA_EMAIL> (yes/ignore/no, default: ignore)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:679
+msgid "B<--email-recipient>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:681
+msgid "Email-on-push recipient. Can be multi valued:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:683
+#, no-wrap
+msgid ""
+" $ salsa update_safe myrepo \\\n"
+" --email-recipient foo@foobar.org \\\n"
+" --email-recipient bar@foobar.org\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:687
+msgid "If recipient value contains \"%p\", it is replaced by project name."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:689
+msgid ""
+"C<.devscripts> value: B<SALSA_EMAIL_RECIPIENTS> (use spaces to separate "
+"multiples recipients)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:692
+msgid "B<--issues>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:694
+msgid "Set issues feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:696
+msgid "C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:698
+msgid "B<--repo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:700
+msgid "Set repository feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:702
+msgid "C<.devscripts> values: B<SALSA_ENABLE_REPO> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:704
+msgid "B<--mr>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:706
+msgid "Set merge requests feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:708
+msgid "C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:710
+msgid "B<--forks>, B<--forks-mr>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:712
+msgid "Set forking a repository feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:714
+msgid "C<.devscripts> values: B<SALSA_ENABLE_FORKS> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:716
+msgid "B<--lfs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:718
+msgid "Set Large File Storage (LFS) feature."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:720
+msgid "C<.devscripts> values: B<SALSA_ENABLE_LFS> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:722
+msgid "B<--packages>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:724
+msgid "Set packages feature."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:726
+msgid "C<.devscripts> values: B<SALSA_ENABLE_PACKAGING> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:728
+msgid "B<--jobs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:730
+msgid "Set jobs feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:732
+msgid "C<.devscripts> values: B<SALSA_ENABLE_JOBS> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:734
+msgid "B<--container>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:736
+msgid "Set container feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:738
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_CONTAINER> (yes/private/no, default: "
+"yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:740
+msgid "B<--analytics>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:742
+msgid "Set analytics feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:744
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_ANALYTICS> (yes/private/no, default: "
+"yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:746
+msgid "B<--requirements>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:748
+msgid "Set requirements feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:750
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REQUIREMENTS> (yes/private/no, "
+"default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:752
+msgid "B<--wiki>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:754
+msgid "Set wiki feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:756
+msgid "C<.devscripts> values: B<SALSA_ENABLE_WIKI> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:758
+msgid "B<--snippets>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:760
+msgid "Set snippets feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:762
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_SNIPPETS> (yes/private/no, default: "
+"yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:764
+msgid "B<--pages>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:766
+msgid "Set pages feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:768
+msgid "C<.devscripts> values: B<SALSA_ENABLE_PAGES> (yes/private/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:770
+msgid "B<--releases>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:772
+msgid "Set releases feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:774
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_RELEASES> (yes/private/no, default: "
+"yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:776
+msgid "B<--auto-devops>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:778
+msgid "Set auto devops feature."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:780
+msgid "C<.devscripts> values: B<SALSA_ENABLE_AUTO_DEVOPS> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:782
+msgid "B<--request-acc>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:784
+msgid "Set request access feature."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:786
+msgid "C<.devscripts> values: B<SALSA_ENABLE_REQUEST_ACC> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:788
+msgid "B<--enable-remove-source-branch>, B<--disable-remove-source-branch>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:790
+msgid ""
+"Enable or disable deleting source branch option by default for all new merge "
+"requests."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:793
+msgid "C<.devscripts> values: B<SALSA_REMOVE_SOURCE_BRANCH> (yes/no, default: yes)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:795
+msgid "B<--irc-channel>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:797
+msgid ""
+"IRC channel for KGB or Irker. Can be used more than one time only with "
+"B<--irker>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:800
+msgid ""
+"B<Important>: channel must not include the first \"#\". If salsa finds a "
+"channel starting with \"#\", it will consider that the channel starts with 2 "
+"\"#\"!"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:803
+msgid "C<.devscript> value: B<SALSA_IRC_CHANNEL>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:805
+msgid "Multiple values must be space separated."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:807
+msgid ""
+"Since configuration files are read using B<sh>, be careful when using \"#\": "
+"you must enclose the channel with quotes, else B<sh> will consider it as a "
+"comment and will ignore this value."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:811
+msgid "B<--irker>, B<--no-irker>, B<--disable-irker>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:813
+msgid "Enable, ignore or disable Irker service"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:815
+msgid "C<.devscripts> values: B<SALSA_IRKER> (yes/ignore/no, default: ignore)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:817
+msgid "B<--irker-host>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:819
+msgid "Irker host. Default: ruprecht.snow-crash.org"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:821
+msgid "C<.devscripts> value: B<SALSA_IRKER_HOST>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:823
+msgid "B<--irker-port>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:825
+msgid "Irker port. Default: empty (default value)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:827
+msgid "C<.devscripts> value: B<SALSA_IRKER_PORT>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:829
+msgid "B<--kgb>, B<--no-kgb>, B<--disable-kgb>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:831
+msgid "Enable, ignore or disable KGB webhook."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:833
+msgid "C<.devscripts> value: B<SALSA_KGB> (yes/ignore/no, default: ignore)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:835
+msgid "B<--kgb-options>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:837
+msgid ""
+"List of KGB enabled options (comma separated). Default: issues_events, "
+"merge_requests_events, note_events, pipeline_events, push_events, "
+"tag_push_events, wiki_page_events, enable_ssl_verification"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:841
+#, no-wrap
+msgid ""
+" $ salsa update_safe debian/devscripts --kgb --irc-channel devscripts \\\n"
+" --kgb-options "
+"'merge_requests_events,issues_events,enable_ssl_verification'\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:844
+msgid ""
+"List of available options: confidential_comments_events, "
+"confidential_issues_events, confidential_note_events, "
+"enable_ssl_verification, issues_events, job_events, merge_requests_events, "
+"note_events, pipeline_events, tag_push_events, wiki_page_events"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:849
+msgid "C<.devscripts> value: B<SALSA_KGB_OPTIONS>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:851
+msgid "B<--no-fail>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:853
+msgid ""
+"Don't stop on error when using B<update_repo> with B<--all> or "
+"B<--all-archived>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:855
+msgid "C<.devscripts> value: B<SALSA_NO_FAIL> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:857
+msgid "B<--request-access>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:859
+msgid "Allow users to request member access."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:861
+msgid "C<.devscripts> value: B<SALSA_REQUEST_ACCESS> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:863
+msgid "B<--rename-head>, B<--no-rename-head>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:865
+msgid ""
+"Rename HEAD branch given by B<--source-branch> into B<--dest-branch> and "
+"change \"default branch\" of project. Works only with B<update_repo>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:868
+msgid "C<.devscripts> value: B<SALSA_RENAME_HEAD> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:872
+msgid "B<--source-branch>: default \"master\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:874
+msgid "C<.devscripts> value: B<SALSA_SOURCE_BRANCH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:876
+msgid "B<--dest-branch>: default \"debian/master\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:878
+msgid "C<.devscripts> value: B<SALSA_DEST_BRANCH>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:882
+msgid "B<--tagpending>, B<--no-tagpending>, B<--disable-tagpending>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:884
+msgid "Enable, ignore or disable \"tagpending\" webhook."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:886
+msgid "C<.devscripts> value: B<SALSA_TAGPENDING> (yes/ignore/no, default: ignore)"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:890
+msgid "Pipeline schedules"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:894
+msgid "B<--schedule-desc>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:896
+msgid "Description of the pipeline schedule."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:898
+msgid "B<--schedule-ref>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:900
+msgid "Branch or tag name that is triggered."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:902
+msgid "B<--schedule-cron>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:904
+msgid "Cron schedule, for example: 0 1 * * *."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:906
+msgid "B<--schedule-tz>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:908
+msgid "Time zone to run cron schedule. Default: UTC"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:910
+msgid "B<--schedule-enable>, B<--schedule-disable>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:912
+msgid "Enable/disable the pipeline schedule to run. Default: disabled"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:914
+msgid "B<--schedule-run>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:916
+msgid "Trigger B<--schedule-desc> scheduled pipeline to run immediately. Default:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:918
+msgid "B<--schedule-delete>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:920
+msgid "Delete B<--schedule-desc> pipeline schedule"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:924
+msgid "Merge requests options"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:928
+msgid "B<--mr-title>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:930
+msgid "Title for merge request. Default: last commit title."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:932
+msgid "B<--mr-desc>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:934
+msgid "Description of new MR. Default:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:938
+msgid "empty if B<--mr-title> is set"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:940
+msgid "last commit description if any"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:944
+msgid "B<--mr-dst-branch> (or second command line argument)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:946
+msgid "Destination branch. Default to \"master\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:948
+msgid "B<--mr-dst-project> (or first command line argument)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:950
+msgid ""
+"Destination project. Default: project from which the current project was "
+"forked; or, if not found, \"upstream\" value found using B<git remote "
+"--verbose show>; or using source project."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:954
+msgid ""
+"If B<--mr-dst-project> is set to B<same>, salsa will use source project as "
+"destination."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:957
+msgid "B<--mr-src-branch>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:959
+msgid "Source branch. Default: current branch."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:961
+msgid "B<--mr-src-project>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:963
+msgid ""
+"Source project. Default: current project found using B<git remote --verbose "
+"show>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:966
+msgid "B<--mr-allow-squash>, B<--no-mr-allow-squash>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:968
+msgid "Allow upstream project to squash your commits, this is the default."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:970
+msgid "C<.devscripts> value: B<SALSA_MR_ALLOW_SQUASH> (yes/no)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:972
+msgid "B<--mr-remove-source-branch>, B<--no-mr-remove-source-branch>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:974
+msgid "Remove source branch if merge request is accepted. Default: no."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:976
+msgid "C<.devscripts> value: B<SALSA_MR_REMOVE_SOURCE_BRANCH> (yes/no)"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:980
+msgid "Options to manage other Gitlab instances"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:984
+msgid "B<--api-url>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:986
+msgid "GitLab API. Default: L<https://salsa.debian.org/api/v4>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:988
+msgid "C<.devscripts> value: B<SALSA_API_URL>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:990
+msgid "B<--git-server-url>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:992
+msgid "Default to \"git@salsa.debian.org:\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:994
+msgid "C<.devscripts> value: B<SALSA_GIT_SERVER_URL>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:996
+msgid "B<--irker-server-url>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:998
+msgid "Default to \"ircs://irc.oftc.net:6697/\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1000
+msgid "C<.devscripts> value: B<SALSA_IRKER_SERVER_URL>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:1002
+msgid "B<--kgb-server-url>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1004
+msgid "Default to L<http://kgb.debian.net:9418/webhook/?channel=>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1006
+msgid "C<.devscripts> value: B<SALSA_KGB_SERVER_URL>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:1008
+msgid "B<--tagpending-server-url>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1010
+msgid "Default to L<https://webhook.salsa.debian.org/tagpending/>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1012
+msgid "C<.devscripts> value: B<SALSA_TAGPENDING_SERVER_URL>"
+msgstr ""
+
+#. type: =head3
+#: ../scripts/salsa.pl:1016
+msgid "Configuration file example"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1018
+msgid ""
+"Example to use salsa with L<https://gitlab.ow2.org> (group "
+"\"lemonldap-ng\"):"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:1020
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=`cat ~/.ow2-gitlab-token`\n"
+" SALSA_API_URL=https://gitlab.ow2.org/api/v4\n"
+" SALSA_GIT_SERVER_URL=git@gitlab.ow2.org:\n"
+" SALSA_GROUP_ID=34\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1025
+msgid "Then to use it, add something like this in your C<.bashrc> file:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:1027
+#, no-wrap
+msgid ""
+" alias llng_admin='salsa --conffile ~/.salsa-ow2.conf'\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1031
+msgid "B<dpt-salsa>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1035
+msgid "Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1039
+msgid "Copyright (C) 2018, Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1041
+msgid ""
+"It contains code formerly found in L<dpt-salsa> I<(pkg-perl-tools)> "
+"copyright 2018, gregor herrmann E<lt>gregoa@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1044
+msgid ""
+"This library 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."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1049
+msgid ""
+"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."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1054
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see L<http://www.gnu.org/licenses/>."
+msgstr ""
+
+#. type: TH
+#: ../doc/suspicious-source.1:15
+#, no-wrap
+msgid "SUSPICIOUS-SOURCE"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:20
+msgid ""
+"suspicious-source - search for files that do not meet the GPL's definition "
+"of \"source\" for a work"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:23
+msgid "B<suspicious-source> [I<options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:30
+msgid ""
+"B<suspicious-source> outputs a list of files which are probably not the "
+"source form of a work. This should be run in the root of a source tree to "
+"find files which might not be, in the definition from the GNU GPL, the "
+"\"preferred form of the work for making modifications to it\"."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:33
+msgid ""
+"The files inside version control system directories (like I<.bzr/> or "
+"I<CVS/>) are not considered."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:38 ../doc/wrap-and-sort.1:39
+msgid "Show this help message and exit."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:41
+msgid "Print more information."
+msgstr ""
+
+#. type: TP
+#: ../doc/suspicious-source.1:41
+#, no-wrap
+msgid "B<-d >I<directory>, B<--directory=>I<directory>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:44
+msgid ""
+"Check the files in the specified I<directory> instead of the current "
+"directory."
+msgstr ""
+
+#. type: TP
+#: ../doc/suspicious-source.1:44
+#, no-wrap
+msgid "B<-m >I<mimetype>, B<--mimetype=>I<mimetype>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:47
+msgid "Add I<mimetype> to list of white-listed MIME types."
+msgstr ""
+
+#. type: TP
+#: ../doc/suspicious-source.1:47
+#, no-wrap
+msgid "B<-e >I<extension>, B<--extension=>I<extension>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:50
+msgid "Add I<extension> to list of white-listed extensions."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:54
+msgid ""
+"B<suspicious-source> and this manpage have been written by Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:55 ../doc/wrap-and-sort.1:102
+msgid "Both are released under the ISC license."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:5
+msgid "svnpath - output svn url with support for tags and branches"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:9
+msgid "B<svnpath>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:11
+msgid "B<svnpath tags>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:13
+msgid "B<svnpath branches>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:15
+msgid "B<svnpath trunk>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:19
+msgid "B<svnpath> is intended to be run in a Subversion working copy."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:21
+msgid ""
+"In its simplest usage, B<svnpath> with no parameters outputs the svn url for "
+"the repository associated with the working copy."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:24
+msgid ""
+"If a parameter is given, B<svnpath> attempts to instead output the url that "
+"would be used for the tags, branches, or trunk. This will only work if it's "
+"run in the top-level directory that is subject to tagging or branching."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:28
+msgid ""
+"For example, if you want to tag what's checked into Subversion as version "
+"1.0, you could use a command like this:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:31
+#, no-wrap
+msgid ""
+" svn cp $(svnpath) $(svnpath tags)/1.0\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:33
+msgid ""
+"That's much easier than using svn info to look up the repository url and "
+"manually modifying it to derive the url to use for the tag, and typing in "
+"something like this:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:37
+#, no-wrap
+msgid ""
+" svn cp svn+ssh://my.server.example/svn/project/trunk "
+"svn+ssh://my.server.example/svn/project/tags/1.0\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:39
+msgid ""
+"svnpath uses a simple heuristic to convert between the trunk, tags, and "
+"branches paths. It replaces the first occurrence of B<trunk>, B<tags>, or "
+"B<branches> with the name of what you're looking for. This will work ok for "
+"most typical Subversion repository layouts."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:44
+msgid ""
+"If you have an atypical layout and it does not work, you can add a "
+"F<~/.svnpath> file. This file is perl code, which can modify the path in "
+"$url. For example, the author uses this file:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:48
+#, no-wrap
+msgid ""
+" #!/usr/bin/perl\n"
+" # svnpath personal override file\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:51
+#, no-wrap
+msgid ""
+" # For d-i I sometimes work from a full d-i tree branch. Remove that from\n"
+" # the path to get regular tags or branches directories.\n"
+" $url=~s!d-i/(rc|beta)[0-9]+/!!;\n"
+" $url=~s!d-i/sarge/!!;\n"
+" 1\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:94
+msgid "GPL version 2 or later"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:98
+msgid "Joey Hess <joey@kitenet.net>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:82
+msgid ""
+"tagpending - tags bugs that are to be closed in the latest changelog as "
+"pending"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:86
+msgid "B<tagpending> [I<options>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:90
+msgid ""
+"B<tagpending> parses debian/changelog to determine which bugs would be "
+"closed if the package were uploaded. Each bug is then marked as pending, "
+"using B<bts>(1) if it is not already so."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:100
+msgid "Check whether any bugs require tagging, but do not actually do so."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:102
+msgid "B<-s>, B<--silent>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:104
+msgid "Do not output any messages."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:108
+msgid "List each bug checked and tagged in turn."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:112
+msgid "Do not query the BTS, but (re)tag all bugs closed in the changelog."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:114
+msgid "B<--comments>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:116
+msgid ""
+"Include the changelog header line and the entries relating to the tagged "
+"bugs as comments in the generated mail. This is the default."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:119
+msgid ""
+"Note that when used in combination with B<--to>, the header line output will "
+"always be that of the most recent version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:122
+msgid "B<--no-comments>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:124
+msgid "Do not include changelog entries in the generated mail."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:126
+msgid "B<-c>, B<--confirm>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:128
+msgid "Tag bugs as both confirmed and pending."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:130
+msgid "B<-t>, B<--to> I<version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:132
+msgid "Parse changelogs for all versions strictly greater than I<version>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:134
+msgid "Equivalent to B<dpkg-parsechangelog>'s B<-v> option."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:138
+msgid ""
+"Display the message which would be sent to the BTS and, except when "
+"B<--noact> was used, prompt for confirmation before sending it."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:141
+msgid "B<-w>, B<--wnpp>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:143
+msgid ""
+"For each bug that does not appear to belong to the current package, check "
+"whether it is filed against wnpp. If so, tag it. This allows e.g. ITAs and "
+"ITPs closed in an upload to be tagged."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:151
+msgid "B<bts>(1) and B<dpkg-parsechangelog>(1)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:427
+msgid ""
+"This program is Copyright 2008 by Adam D. Barratt "
+"<adam@adam-barratt.org.uk>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:430
+msgid ""
+"The shell script tagpending, on which this program is based, is Copyright "
+"2004 by Joshua Kwan <joshk@triplehelix.org> with changes copyright 2004-7 by "
+"their respective authors."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:25
+msgid "transition-check - check a package list for involvement in transitions"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:29
+msgid "B<transition-check> B<--help>|B<--version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:31
+msgid ""
+"B<transition-check> [B<-f>|B<--filename=>I<FILENAME>] [I<source package "
+"list>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:35
+msgid ""
+"B<transition-check> checks whether any of the listed source packages are "
+"involved in a transition for which uploads to unstable are currently "
+"blocked."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:39
+msgid ""
+"If neither a filename nor a list of packages is supplied, "
+"B<transition-check> will use the source package name from I<debian/control>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/transition-check.pl:46
+msgid "B<-f>, B<--filename=>I<filename>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:48
+msgid ""
+"Read a source package name from I<filename>, which should be a Debian "
+"package control file or I<.changes> file, and add that package to the list "
+"of packages to check."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:56
+msgid ""
+"The exit status indicates whether any of the packages examined were found to "
+"be involved in a transition."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:63
+msgid ""
+"Either B<--help> or B<--version> was used, or none of the packages examined "
+"was involved in a transition."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:68
+msgid "At least one package examined is involved in a current transition."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:74
+msgid ""
+"This code is copyright by Adam D. Barratt <I<adam@adam-barratt.org.uk>>, all "
+"rights reserved."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:83
+msgid "Adam D. Barratt <I<adam@adam-barratt.org.uk>>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:36
+msgid "uscan - scan/watch upstream sources for new releases of software"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:40
+msgid "B<uscan> [I<options>] [I<path>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:44
+msgid ""
+"For basic usage, B<uscan> is executed without any arguments from the root of "
+"the Debianized source tree where you see the F<debian/> directory, or a "
+"directory containing multiple source trees."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:48
+msgid ""
+"Unless --watchfile is given, B<uscan> looks recursively for valid source "
+"trees starting from the current directory (see the below section L<Directory "
+"name checking> for details)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:52
+msgid "For each valid source tree found, typically the following happens:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:56
+msgid ""
+"* B<uscan> reads the first entry in F<debian/changelog> to determine the "
+"source package name I<< <spkg> >> and the last upstream version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:59
+msgid ""
+"* B<uscan> process the watch lines F<debian/watch> from the top to the "
+"bottom in a single pass."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:64
+msgid ""
+"* B<uscan> downloads a web page from the specified I<URL> in "
+"F<debian/watch>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:67
+msgid ""
+"* B<uscan> extracts hrefs pointing to the upstream tarball(s) from the web "
+"page using the specified I<matching-pattern> in F<debian/watch>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:70
+msgid ""
+"* B<uscan> downloads the upstream tarball with the highest version newer "
+"than the last upstream version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:73
+msgid ""
+"* B<uscan> saves the downloaded tarball to the parent B<../> directory: I<< "
+"../<upkg>-<uversion>.tar.gz >>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:76
+msgid ""
+"* B<uscan> invokes B<mk-origtargz> to create the source tarball: I<< "
+"../<spkg>_<oversion>.orig.tar.gz >>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:81
+msgid ""
+"* For a multiple upstream tarball (MUT) package, the secondary upstream "
+"tarball will instead be named I<< "
+"../<spkg>_<oversion>.orig-<component>.tar.gz >>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:86
+msgid "* Repeat until all lines in F<debian/watch> are processed."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:90
+msgid ""
+"* B<uscan> invokes B<uupdate> to create the Debianized source tree: I<< "
+"../<spkg>-<oversion>/* >>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:95
+msgid "Please note the following."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:99
+msgid ""
+"* For simplicity, the compression method used in examples is B<gzip> with "
+"B<.gz> suffix. Other methods such as B<xz>, B<bzip2>, and B<lzma> with "
+"corresponding B<xz>, B<bz2> and B<lzma> suffixes may also be used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:103
+msgid ""
+"* The new B<version=4> enables handling of multiple upstream tarball (MUT) "
+"packages but this is a rare case for Debian packaging. For a single "
+"upstream tarball package, there is only one watch line and no I<< "
+"../<spkg>_<oversion>.orig-<component>.tar.gz >> ."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:108
+msgid ""
+"* B<uscan> with the B<--verbose> option produces a human readable report of "
+"B<uscan>'s execution."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:111
+msgid ""
+"* B<uscan> with the B<--debug> option produces a human readable report of "
+"B<uscan>'s execution including internal variable states."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:114
+msgid ""
+"* B<uscan> with the B<--extra-debug> option produces a human readable report "
+"of B<uscan>'s execution including internal variable states and remote "
+"content during \"search\" step."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:118
+msgid ""
+"* B<uscan> with the B<--dehs> option produces an upstream package status "
+"report in XML format for other programs such as the Debian External Health "
+"System."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:122
+msgid ""
+"* The primary objective of B<uscan> is to help identify if the latest "
+"version upstream tarball is used or not; and to download the latest upstream "
+"tarball. The ordering of versions is decided by B<dpkg --compare-versions>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:126
+msgid ""
+"* B<uscan> with the B<--safe> option limits the functionality of B<uscan> to "
+"its primary objective. Both the repacking of downloaded files and updating "
+"of the source tree are skipped to avoid running unsafe scripts. This also "
+"changes the default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:133
+msgid "FORMAT OF THE WATCH FILE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:135
+msgid ""
+"The current version 4 format of F<debian/watch> can be summarized as "
+"follows:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:139
+msgid "* Leading spaces and tabs are dropped."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:141
+msgid "* Empty lines are dropped."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:143
+msgid "* A line started by B<#> (hash) is a comment line and dropped."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:145
+msgid ""
+"* A single B<\\> (back slash) at the end of a line is dropped and the next "
+"line is concatenated after removing leading spaces and tabs. The "
+"concatenated line is parsed as a single line. (The existence or "
+"non-existence of the space before the tailing single B<\\> is significant.)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:150
+msgid "* The first non-comment line is:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:154
+msgid "B<version=4>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:158
+msgid "This is a required line and the recommended version number."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:160
+msgid ""
+"If you use \"B<version=3>\" instead here, some features may not work as "
+"documented here. See L<HISTORY AND UPGRADING>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:163
+msgid ""
+"* The following non-comment lines (watch lines) specify the rules for the "
+"selection of the candidate upstream tarball URLs and are in one of the "
+"following three formats:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:169
+msgid ""
+"* B<opts=\"> I<...> B<\"> B<http://>I<URL> I<matching-pattern> [I<version> "
+"[I<script>]]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:171
+msgid "* B<http://>I<URL> I<matching-pattern> [I<version> [I<script>]]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:173
+msgid "* B<opts=\"> I<...> B<\">"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:177
+msgid "Here,"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:181
+msgid ""
+"* B<opts=\"> I<...> B<\"> specifies the behavior of B<uscan>. See L<WATCH "
+"FILE OPTIONS>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:184
+msgid ""
+"* B<http://>I<URL> specifies the web page where upstream publishes the link "
+"to the latest source archive."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:189
+msgid "* B<https://>I<URL> may also be used, as may"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:191
+msgid "* B<ftp://>I<URL>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:193
+msgid ""
+"* Some parts of I<URL> may be in the regex match pattern surrounded between "
+"B<(> and B<)> such as B</foo/bar-([\\.\\d]+)/>. (If multiple directories "
+"match, the highest version is picked.) Otherwise, the I<URL> is taken as "
+"verbatim."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:200
+msgid ""
+"* I<matching-pattern> specifies the full string matching pattern for hrefs "
+"in the web page. See L<WATCH FILE EXAMPLES>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:205
+msgid ""
+"* All matching parts in B<(> and B<)> are concatenated with B<.> (period) "
+"to form the upstream version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:208
+msgid ""
+"* If the hrefs do not contain directories, you can combine this with the "
+"previous entry. I.e., B<http://>I<URL>B</>I<matching-pattern> ."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:213
+msgid ""
+"* I<version> restricts the upstream tarball which may be downloaded. The "
+"newest available version is chosen in each case."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:218
+msgid ""
+"* B<debian> I<(default)> requires the downloading upstream tarball to be "
+"newer than the version obtained from F<debian/changelog>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:221
+msgid ""
+"* I<version-number> such as B<12.5> requires the upstream tarball to be "
+"newer than the I<version-number>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:224
+msgid ""
+"* B<same> requires the downloaded version of the secondary tarballs to be "
+"exactly the same as the one for the first upstream tarball "
+"downloaded. (Useful only for MUT)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:228
+msgid ""
+"* B<previous> restricts the version of the signature file. (Used with "
+"pgpmode=previous)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:231
+msgid ""
+"* B<ignore> does not restrict the version of the secondary tarballs. (Maybe "
+"useful for MUT)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:234
+msgid ""
+"* B<group> requires the downloading upstream tarball to be newer than the "
+"version obtained from F<debian/changelog>. Package version is the "
+"concatenation of all \"group\" upstream version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:238
+msgid ""
+"* B<checksum> requires the downloading upstream tarball to be newer than the "
+"version obtained from F<debian/changelog>. Package version is the "
+"concatenation of the version of the main tarball, followed by a checksum of "
+"all the tarballs using the \"checksum\" version system. At least the main "
+"upstream source has to be declared as \"group\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:246
+msgid ""
+"* I<script> is executed at the end of B<uscan> execution with appropriate "
+"arguments provided by B<uscan> I<(default: no action)>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:251
+msgid ""
+"* The typical Debian package is a non-native package made from one upstream "
+"tarball. Only a single line of the watch line in one of the first two "
+"formats is usually used with its I<version> set to B<debian> and I<script> "
+"set to B<uupdate>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:256
+msgid "* A native package should not specify I<script>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:258
+msgid ""
+"* A multiple upstream tarball (MUT) package should specify B<uupdate> as "
+"I<script> in the last watch line and should skip specifying I<script> in the "
+"rest of the watch lines."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:264
+msgid ""
+"* The last format of the watch line is useful to set the persistent "
+"parameters: B<user-agent>, B<compression>. If this format is used, this "
+"must be followed by the I<URL> defining watch line(s)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:268
+msgid ""
+"* [ and ] in the above format are there to mark the optional parts and "
+"should not be typed."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:275
+msgid ""
+"There are a few special strings which are substituted by B<uscan> to make it "
+"easy to write the watch file."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:280
+msgid "B<@PACKAGE@>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:282
+msgid ""
+"This is substituted with the source package name found in the first line of "
+"the F<debian/changelog> file."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:285
+msgid "B<@ANY_VERSION@>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:287
+msgid "This is substituted by the legal upstream version regex (capturing)."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:289
+#, no-wrap
+msgid ""
+" [-_]?v?(\\d[\\-+\\.:\\~\\da-zA-Z]*)\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:291
+msgid "B<@ARCHIVE_EXT@>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:293
+msgid ""
+"This is substituted by the typical archive file extension regex "
+"(non-capturing)."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:295
+#, no-wrap
+msgid ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:297
+msgid "B<@SIGNATURE_EXT@>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:299
+msgid ""
+"This is substituted by the typical signature file extension regex "
+"(non-capturing)."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:301
+#, no-wrap
+msgid ""
+" "
+"(?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))'(?:\\.(?:asc|pgp|gpg|sig|sign))'\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:303
+msgid "B<@DEB_EXT@>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:305
+msgid "This is substituted by the typical Debian extension regexp (capturing)."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:307
+#, no-wrap
+msgid ""
+" [\\+~](debian|dfsg|ds|deb)(\\.)?(\\d+)?$\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:311
+msgid ""
+"Some file extensions are not included in the above intentionally to avoid "
+"false positives. You can still set such file extension patterns manually."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:314
+msgid "WATCH FILE OPTIONS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:316
+msgid ""
+"B<uscan> reads the watch options specified in B<opts=\"> I<...> B<\"> to "
+"customize its behavior. Multiple options I<option1>, I<option2>, I<option3>, "
+"... can be set as B<opts=\">I<option1>B<,> I<option2>B<,> I<option3>B<,> I< "
+"... >B<\"> . The double quotes are necessary if options contain any "
+"spaces."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:321
+msgid ""
+"Unless otherwise noted as persistent, most options are valid only within "
+"their containing watch line."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:324
+msgid "The available watch options are:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:328
+msgid "B<component=>I<component>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:330
+msgid ""
+"Set the name of the secondary source tarball as I<< "
+"<spkg>_<oversion>.orig-<component>.tar.gz >> for a MUT package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:333
+msgid "B<ctype=>I<component-type>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:335
+msgid ""
+"Set the type of component I<(only \"nodejs\" and \"perl\" are available for "
+"now)>. This will help uscan to find current version if component version is "
+"ignored."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:338
+msgid ""
+"When using B<ctype=nodejs>, uscan tries to find a version in "
+"C<package.json>, when using B<ctype=perl>, uscan tries to find a version in "
+"C<META.json>. If a version is found, it is used as current version for this "
+"component, regardless version found in Debian version string. This permits a "
+"better change detection when using I<ignore> or I<checksum> as Debian "
+"version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:344
+msgid "B<compression=>I<method>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:346
+msgid "Set the compression I<method> when the tarball is repacked (persistent)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:348
+msgid ""
+"Available I<method> values are what mk-origtargz supports, so B<xz>, B<gzip> "
+"(alias B<gz>), B<bzip2> (alias B<bz2>), B<lzma>, B<default>. The default "
+"method is currently B<xz>. When uscan is launched in a debian source "
+"repository which format is \"1.0\" or undefined, the method switches to "
+"B<gzip>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:354
+msgid ""
+"Please note the repacking of the upstream tarballs by B<mk-origtargz> "
+"happens only if one of the following conditions is satisfied:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:359
+msgid ""
+"* B<USCAN_REPACK> is set in the devscript configuration. See L<DEVSCRIPT "
+"CONFIGURATION VARIABLES>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:362
+msgid "* B<--repack> is set on the commandline. See <COMMANDLINE OPTIONS>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:364
+msgid "* B<repack> is set in the watch line as B<opts=\"repack,>I<...>B<\">."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:366
+msgid "* The upstream archive is of B<zip> type including B<jar>, B<xpi>, ..."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:368
+msgid "* The upstream archive is of B<zstd> (Zstandard) type."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:370
+msgid ""
+"* B<Files-Excluded> or B<Files-Excluded->I<component> stanzas are set in "
+"F<debian/copyright> to make B<mk-origtargz> invoked from B<uscan> remove "
+"files from the upstream tarball and repack it. See L<COPYRIGHT FILE "
+"EXAMPLES> and mk-origtargz(1)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:377
+msgid "B<repack>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:379
+msgid "Force repacking of the upstream tarball using the compression I<method>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:381
+msgid "B<repacksuffix=>I<suffix>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:383
+msgid ""
+"Add I<suffix> to the Debian package upstream version only when the source "
+"tarball is repackaged. This rule should be used only for a single upstream "
+"tarball package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:387
+msgid "B<mode=>I<mode>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:389
+msgid "Set the archive download I<mode>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:393
+msgid "B<LWP>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:395
+msgid ""
+"This mode is the default one which downloads the specified tarball from the "
+"archive URL on the web. Automatically internal B<mode> value is updated to "
+"either B<http> or B<ftp> by URL."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:401
+msgid ""
+"This mode accesses the upstream git archive directly with the B<git> command "
+"and packs the source tree with the specified tag via I<matching-pattern> "
+"into I<spkg-version>B<.tar.xz>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:405
+msgid ""
+"If the upstream publishes the released tarball via its web interface, please "
+"use it instead of using this mode. This mode is the last resort method."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:408
+msgid ""
+"For git mode, I<matching-pattern> specifies the full string matching pattern "
+"for tags instead of hrefs. If I<matching-pattern> is set to "
+"B<refs/tags/>I<tag-matching-pattern>, B<uscan> downloads source from the "
+"B<refs/tags/>I<matched-tag> of the git repository. The upstream version is "
+"extracted from concatenating the matched parts in B<(> ... B<)> with B<.> . "
+"See L<WATCH FILE EXAMPLES>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:415
+msgid ""
+"If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads source from the "
+"B<HEAD> of the git repository and the pertinent I<version> is automatically "
+"generated with the date and hash of the B<HEAD> of the git repository."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:419
+msgid ""
+"If I<matching-pattern> is set to B<refs/heads/>I<branch>, B<uscan> downloads "
+"source from the named I<branch> of the git repository."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:422
+msgid ""
+"The local repository is temporarily created as a bare git repository "
+"directory under the destination directory where the downloaded archive is "
+"generated. This is normally erased after the B<uscan> execution. This "
+"local repository is kept if B<--debug> option is used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:427
+msgid ""
+"If the current directory is a git repository and the searched repository is "
+"listed among the registered \"remotes\", then uscan will use it instead of "
+"cloning separately. The only local change is that uscan will run a "
+"\"fetch\" command to refresh the repository."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:432
+msgid "B<svn>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:434
+msgid ""
+"This mode accesses the upstream Subversion archive directly with the B<svn> "
+"command and packs the source tree."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:437
+msgid ""
+"For svn mode, I<matching-pattern> specifies the full string matching pattern "
+"for directories under Subversion repository directory, specified via URL. "
+"The upstream version is extracted from concatenating the matched parts in "
+"B<(> ... B<)> with B<.> ."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:442
+msgid ""
+"If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads the latest "
+"source tree of the URL. The upstream version is then constructed by "
+"appending the last revision of the URL to B<0.0~svn>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:446
+msgid ""
+"As commit signing is not possible with Subversion, the default B<pgpmode> is "
+"set to B<none> when B<mode=svn>. Settings of B<pgpmode> other than "
+"B<default> and B<none> are reported as errors."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:452
+msgid "B<pretty=>I<rule>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:454
+msgid ""
+"Set the upstream version string to an arbitrary format as an optional "
+"B<opts> argument when the I<matching-pattern> is B<HEAD> or "
+"B<heads/>I<branch> for B<git> mode. For the exact syntax, see the "
+"B<git-log> manpage under B<tformat>. The default is "
+"B<pretty=0.0~git%cd.%h>. No B<uversionmangle> rules is applicable for this "
+"case."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:460
+msgid ""
+"When B<pretty=describe> is used, the upstream version string is the output "
+"of the \"B<git describe --tags | sed s/-/./g>\" command instead. For "
+"example, if the commit is the B<5>-th after the last tag B<v2.17.12> and its "
+"short hash is B<ged992511>, then the string is B<v2.17.12.5.ged992511> . "
+"For this case, it is good idea to add B<uversionmangle=s/^/0.0~/> or "
+"B<uversionmangle=s/^v//> to make the upstream version string compatible with "
+"Debian. B<uversionmangle=s/^v//> may work as well. Please note that in "
+"order for B<pretty=describe> to function well, upstream need to avoid "
+"tagging with random alphabetic tags."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:469
+msgid ""
+"The B<pretty=describe> forces to set B<gitmode=full> to make a full local "
+"clone of the repository automatically."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:472
+msgid "B<date=>I<rule>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:474
+msgid ""
+"Set the date string used by the B<pretty> option to an arbitrary format as "
+"an optional B<opts> argument when the I<matching-pattern> is B<HEAD> or "
+"B<heads/>I<branch> for B<git> mode. For the exact syntax, see the "
+"B<strftime> manpage. The default is B<date=%Y%m%d>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:479
+msgid "B<gitexport=>I<mode>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:481
+msgid ""
+"Set the git archive export operation I<mode>. The default is "
+"B<gitexport=default>. Set this to B<gitexport=all> to include all files in "
+"the .orig.tar archive, ignoring any I<export-ignore> git attributes defined "
+"by the upstream."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:486
+msgid "This option is valid only in git mode."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:488
+msgid "B<gitmode=>I<mode>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:490
+msgid ""
+"Set the git clone operation I<mode>. The default is B<gitmode=shallow>. For "
+"some dumb git server, you may need to manually set B<gitmode=full> to force "
+"full clone operation."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:494
+msgid ""
+"If the current directory is a git repository and the searched repository is "
+"listed among the registered \"remotes\", then uscan will use it instead of "
+"cloning separately."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:498
+msgid "B<pgpmode=>I<mode>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:500
+msgid "Set the PGP/GPG signature verification I<mode>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:504
+msgid "B<auto>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:506
+msgid ""
+"B<uscan> checks possible URLs for the signature file and autogenerates a "
+"B<pgpsigurlmangle> rule to use it."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:509
+msgid "B<default>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:511
+msgid ""
+"Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature "
+"file URL string from the upstream tarball URL. (default)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:514
+msgid ""
+"If the specified B<pgpsigurlmangle> is missing, B<uscan> checks possible "
+"URLs for the signature file and suggests adding a B<pgpsigurlmangle> rule."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:517
+msgid "B<mangle>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:519
+msgid ""
+"Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature "
+"file URL string from the upstream tarball URL."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:522
+msgid "B<next>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:524
+msgid ""
+"Verify this downloaded tarball file with the signature file specified in the "
+"next watch line. The next watch line must be B<pgpmode=previous>. "
+"Otherwise, no verification occurs."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:528
+msgid "B<previous>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:530
+msgid ""
+"Verify the downloaded tarball file specified in the previous watch line with "
+"this signature file. The previous watch line must be B<pgpmode=next>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:533
+msgid "B<self>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:535
+msgid ""
+"Verify the downloaded file I<foo.ext> with its self signature and extract "
+"its content tarball file as I<foo>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:538
+msgid "B<gittag>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:540
+msgid "Verify tag signature if B<mode=git>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:542
+msgid "B<none>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:544
+msgid "No signature available. (No warning.)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:548
+msgid "B<searchmode=>I<mode>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:550
+msgid "Set the parsing search mode."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:554
+msgid ""
+"B<html> I<(default)>: search pattern in \"href\" parameter of E<lt>aE<gt> "
+"HTML tags"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:557
+msgid "B<plain>: search pattern in the full page"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:559
+msgid "This is useful if page content is not HTML but JSON. Example with npmjs.com:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:562
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-(\\d[\\d\\.]*)@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:569
+msgid "B<decompress>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:571
+msgid "Decompress compressed archive before the pgp/gpg signature verification."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:573
+msgid "B<bare>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:575
+msgid ""
+"Disable all site specific special case code such as URL redirector uses and "
+"page content alterations. (persistent)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:578
+msgid "B<user-agent=>I<user-agent-string>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:580
+msgid ""
+"Set the user-agent string used to contact the HTTP(S) server as "
+"I<user-agent-string>. (persistent)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:583
+msgid ""
+"B<user-agent> option should be specified by itself in the watch line without "
+"I<URL>, to allow using semicolons and commas in it."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:586
+msgid "B<pasv>, B<passive>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:588
+msgid "Use PASV mode for the FTP connection."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:590
+msgid ""
+"If PASV mode is required due to the client side network environment, set "
+"B<uscan> to use PASV mode via L<COMMANDLINE OPTIONS> or L<DEVSCRIPT "
+"CONFIGURATION VARIABLES> instead."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:594
+msgid "B<active>, B<nopasv>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:596
+msgid "Don't use PASV mode for the FTP connection."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:598
+msgid "B<unzipopt=>I<options>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:600
+msgid ""
+"Add the extra options to use with the B<unzip> command, such as B<-a>, "
+"B<-aa>, and B<-b>, when executed by B<mk-origtargz>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:603
+msgid "B<dversionmangle=>I<rules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:605
+msgid ""
+"Normalize the last upstream version string found in F<debian/changelog> to "
+"compare it to the available upstream tarball version. Removal of the Debian "
+"specific suffix such as B<s/@DEB_EXT@//> is usually done here."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:609
+msgid ""
+"You can also use B<dversionmangle=auto>, this is exactly the same than "
+"B<dversionmangle=s/@DEB_EXT@//>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:612
+msgid "B<dirversionmangle=>I<rules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:614
+msgid ""
+"Normalize the directory path string matching the regex in a set of "
+"parentheses of B<http://>I<URL> as the sortable version index string. This "
+"is used as the directory path sorting index only."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:618 ../scripts/uscan.pl:634
+msgid "Substitution such as B<s/PRE/~pre/; s/RC/~rc/> may help."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:620
+msgid "B<pagemangle=>I<rules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:622
+msgid ""
+"Normalize the downloaded web page string. (Don't use this unless this is "
+"absolutely needed. Generally, B<g> flag is required for these I<rules>.)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:625
+msgid ""
+"This is handy if you wish to access Amazon AWS or Subversion repositories in "
+"which <a href=\"...\"> is not used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:628
+msgid "B<uversionmangle=>I<rules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:630
+msgid ""
+"Normalize the candidate upstream version strings extracted from hrefs in the "
+"source of the web page. This is used as the version sorting index when "
+"selecting the latest upstream version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:636
+msgid "B<versionmangle=>I<rules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:638
+msgid ""
+"Syntactic shorthand for B<uversionmangle=>I<rules>B<, "
+"dversionmangle=>I<rules>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:640
+msgid "B<hrefdecode=percent-encoding>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:642
+msgid ""
+"Convert the selected upstream tarball href string from the percent-encoded "
+"hexadecimal string to the decoded normal URL string for obfuscated web "
+"sites. Only B<percent-encoding> is available and it is decoded with "
+"B<s/%([A-Fa-f\\d]{2})/chr hex $1/eg>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:647
+msgid "B<downloadurlmangle=>I<rules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:649
+msgid ""
+"Convert the selected upstream tarball href string into the accessible URL "
+"for obfuscated web sites. This is run after B<hrefdecode>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:652
+msgid "B<filenamemangle=>I<rules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:654
+msgid ""
+"Generate the upstream tarball filename from the selected href string if "
+"I<matching-pattern> can extract the latest upstream version I<< <uversion> "
+">> from the selected href string. Otherwise, generate the upstream tarball "
+"filename from its full URL string and set the missing I<< <uversion> >> from "
+"the generated upstream tarball filename."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:660
+msgid ""
+"Without this option, the default upstream tarball filename is generated by "
+"taking the last component of the URL and removing everything after any '?' "
+"or '#'."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:664
+msgid "B<pgpsigurlmangle=>I<rules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:666
+msgid ""
+"Generate the candidate upstream signature file URL string from the upstream "
+"tarball URL."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:669
+msgid "B<oversionmangle=>I<rules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:671
+msgid ""
+"Generate the version string I<< <oversion> >> of the source tarball I<< "
+"<spkg>_<oversion>.orig.tar.gz >> from I<< <uversion> >>. This should be "
+"used to add a suffix such as B<+dfsg> to a MUT package."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:677
+msgid ""
+"Here, the mangling rules apply the I<rules> to the pertinent string. "
+"Multiple rules can be specified in a mangling rule string by making a "
+"concatenated string of each mangling I<rule> separated by B<;> (semicolon)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:681
+msgid ""
+"Each mangling I<rule> cannot contain B<;> (semicolon), B<,> (comma), or "
+"B<\"> (double quote)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:684
+msgid ""
+"Each mangling I<rule> behaves as if a Perl command \"I<$string> B<=~> "
+"I<rule>\" is executed. There are some notable details."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:689
+msgid "* I<rule> may only use the B<s>, B<tr>, and B<y> operations."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:693
+msgid "B<s/>I<regex>B</>I<replacement>B</>I<options>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:695
+msgid ""
+"Regex pattern match and replace the target string. Only the B<g>, B<i> and "
+"B<x> flags are available. Use the B<$1> syntax for back references (No "
+"B<\\1> syntax). Code execution is not allowed (i.e. no B<(?{})> or "
+"B<(??{})> constructs)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:700
+msgid "B<y/>I<source>B</>I<dest>B</> or B<tr/>I<source>B</>I<dest>B</>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:702
+msgid "Transliterate the characters in the target string."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:708
+msgid "EXAMPLE OF EXECUTION"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:710
+msgid ""
+"B<uscan> reads the first entry in F<debian/changelog> to determine the "
+"source package name and the last upstream version."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:713
+msgid "For example, if the first entry of F<debian/changelog> is:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:717
+msgid "* I<< bar >> (B<3:2.03+dfsg-4>) unstable; urgency=low"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:721
+msgid ""
+"then, the source package name is I<< bar >> and the last Debian package "
+"version is B<3:2.03+dfsg-4>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:724
+msgid ""
+"The last upstream version is normalized to B<2.03+dfsg> by removing the "
+"epoch and the Debian revision."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:727
+msgid ""
+"If the B<dversionmangle> rule exists, the last upstream version is further "
+"normalized by applying this rule to it. For example, if the last upstream "
+"version is B<2.03+dfsg> indicating the source tarball is repackaged, the "
+"suffix B<+dfsg> is removed by the string substitution B<s/\\+dfsg\\d*$//> to "
+"make the (dversionmangled) last upstream version B<2.03> and it is compared "
+"to the candidate upstream tarball versions such as B<2.03>, B<2.04>, "
+"... found in the remote site. Thus, set this rule as:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:737
+msgid "* B<opts=\"dversionmangle=s/\\+dfsg\\d*$//\">"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:741
+msgid ""
+"B<uscan> downloads a web page from B<http://>I<URL> specified in "
+"F<debian/watch>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:746
+msgid ""
+"* If the directory name part of I<URL> has no parentheses, B<(> and B<)>, it "
+"is taken as verbatim."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:749
+msgid ""
+"* If the directory name part of I<URL> has parentheses, B<(> and B<)>, then "
+"B<uscan> recursively searches all possible directories to find a page for "
+"the newest version. If the B<dirversionmangle> rule exists, the generated "
+"sorting index is used to find the newest version. If a specific version is "
+"specified for the download, the matching version string has priority over "
+"the newest version."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:758
+msgid "For example, this B<http://>I<URL> may be specified as:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:762
+msgid "* B<http://www.example.org/@ANY_VERSION@/>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:766
+msgid ""
+"Please note the trailing B</> in the above to make B<@ANY_VERSION@> as the "
+"directory."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:769
+msgid ""
+"If the B<pagemangle> rule exists, the whole downloaded web page as a string "
+"is normalized by applying this rule to it. This is very powerful tool and "
+"needs to be used with caution. If other mangling rules can be used to "
+"address your objective, do not use this rule."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:774
+msgid ""
+"The downloaded web page is scanned for hrefs defined in the B<< <a href=\" "
+">> I<...> B<< \"> >> tag to locate the candidate upstream tarball hrefs. "
+"These candidate upstream tarball hrefs are matched by the Perl regex pattern "
+"I<matching-pattern> such as B<< DL-(?:[\\d\\.]+?)/foo-(.+)\\.tar\\.gz >> to "
+"narrow down the candidates. This pattern match needs to be anchored at the "
+"beginning and the end. For example, candidate hrefs may be:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:783
+msgid "* B<< DL-2.02/foo-2.02.tar.gz >>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:785
+msgid "* B<< DL-2.03/foo-2.03.tar.gz >>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:787
+msgid "* B<< DL-2.04/foo-2.04.tar.gz >>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:791
+msgid ""
+"Here the matching string of B<(.+)> in I<matching-pattern> is considered as "
+"the candidate upstream version. If there are multiple matching strings of "
+"capturing patterns in I<matching-pattern>, they are all concatenated with "
+"B<.> (period) to form the candidate upstream version. Make sure to use the "
+"non-capturing regex such as B<(?:[\\d\\.]+?)> instead for the variable text "
+"matching part unrelated to the version."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:798
+msgid "Then, the candidate upstream versions are:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:802
+msgid "* B<2.02>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:804
+msgid "* B<2.03>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:806
+msgid "* B<2.04>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:810
+msgid ""
+"The downloaded tarball filename is basically set to the same as the filename "
+"in the remote URL of the selected href."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:813
+msgid ""
+"If the B<uversionmangle> rule exists, the candidate upstream versions are "
+"normalized by applying this rule to them. (This rule may be useful if the "
+"upstream version scheme doesn't sort correctly to identify the newest "
+"version.)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:817
+msgid ""
+"The upstream tarball href corresponding to the newest (uversionmangled) "
+"candidate upstream version newer than the (dversionmangled) last upstream "
+"version is selected."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:821
+msgid ""
+"If multiple upstream tarball hrefs corresponding to a single version with "
+"different extensions exist, the highest compression one is "
+"chosen. (Priority: B<< tar.xz > tar.lzma > tar.bz2 > tar.gz >>.)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:825
+msgid ""
+"If the selected upstream tarball href is the relative URL, it is converted "
+"to the absolute URL using the base URL of the web page. If the B<< <base "
+"href=\" >> I< ... > B<< \"> >> tag exists in the web page, the selected "
+"upstream tarball href is converted to the absolute URL using the specified "
+"base URL in the base tag, instead."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:831
+msgid ""
+"If the B<downloadurlmangle> rule exists, the selected upstream tarball href "
+"is normalized by applying this rule to it. (This is useful for some sites "
+"with the obfuscated download URL.)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:835
+msgid ""
+"If the B<filenamemangle> rule exists, the downloaded tarball filename is "
+"generated by applying this rule to the selected href if I<matching-pattern> "
+"can extract the latest upstream version I<< <uversion> >> from the selected "
+"href string. Otherwise, generate the upstream tarball filename from its full "
+"URL string and set the missing I<< <uversion> >> from the generated upstream "
+"tarball filename."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:842
+msgid ""
+"Without the B<filenamemangle> rule, the default upstream tarball filename is "
+"generated by taking the last component of the URL and removing everything "
+"after any '?' or '#'."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:846
+msgid ""
+"B<uscan> downloads the selected upstream tarball to the parent B<../> "
+"directory. For example, the downloaded file may be:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:851
+msgid "* F<../foo-2.04.tar.gz>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:855
+msgid ""
+"Let's call this downloaded version B<2.04> in the above example generically "
+"as I<< <uversion> >> in the following."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:858
+msgid ""
+"If the B<pgpsigurlmangle> rule exists, the upstream signature file URL is "
+"generated by applying this rule to the (downloadurlmangled) selected "
+"upstream tarball href and the signature file is tried to be downloaded from "
+"it."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:862
+msgid ""
+"If the B<pgpsigurlmangle> rule doesn't exist, B<uscan> warns user if the "
+"matching upstream signature file is available from the same URL with their "
+"filename being suffixed by the 5 common suffix B<asc>, B<gpg>, B<pgp>, "
+"B<sig> and B<sign>. (You can avoid this warning by setting B<pgpmode=none>.)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:867
+msgid ""
+"If the signature file is downloaded, the downloaded upstream tarball is "
+"checked for its authenticity against the downloaded signature file using the "
+"armored keyring F<debian/upstream/signing-key.asc> (see L<KEYRING FILE "
+"EXAMPLES>). If its signature is not valid, or not made by one of the listed "
+"keys, B<uscan> will report an error."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:873
+msgid ""
+"If the B<oversionmangle> rule exists, the source tarball version I<oversion> "
+"is generated from the downloaded upstream version I<uversion> by applying "
+"this rule. This rule is useful to add suffix such as B<+dfsg> to the version "
+"of all the source packages of the MUT package for which the repacksuffix "
+"mechanism doesn't work."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:879
+msgid ""
+"B<uscan> invokes B<mk-origtargz> to create the source tarball properly named "
+"for the source package with B<.orig.> (or B<< .orig-<component>. >> for the "
+"secondary tarballs) in its filename."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:885
+msgid "case A: packaging of the upstream tarball as is"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:887
+msgid ""
+"B<mk-origtargz> creates a symlink I<< ../bar_<oversion>.orig.tar.gz >> "
+"linked to the downloaded local upstream tarball. Here, I<< bar >> is the "
+"source package name found in F<debian/changelog>. The generated symlink may "
+"be:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:893
+msgid "* F<../bar_2.04.orig.tar.gz> -> F<foo-2.04.tar.gz> (as is)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:897
+msgid ""
+"Usually, there is no need to set up B<opts=\"dversionmangle=> I<...> B<\"> "
+"for this case."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:900
+msgid "case B: packaging of the upstream tarball after removing non-DFSG files"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:902
+msgid ""
+"B<mk-origtargz> checks the filename glob of the B<Files-Excluded> stanza in "
+"the first section of F<debian/copyright>, removes matching files to create a "
+"repacked upstream tarball. Normally, the repacked upstream tarball is "
+"renamed with I<suffix> to I<< ../bar_<oversion><suffix>.orig.tar.gz >> using "
+"the B<repacksuffix> option for the single upstream package. Here I<< "
+"<oversion> >> is updated to be I<< <oversion><suffix> >>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:909
+msgid ""
+"The removal of files is required if files are not DFSG-compliant. For such "
+"case, B<+dfsg> is used as I<suffix>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:912
+msgid ""
+"So the combined options are set as B<opts=\"dversionmangle=s/\\+dfsg\\d*$// "
+",repacksuffix=+dfsg\">, instead."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:915
+msgid "For example, the repacked upstream tarball may be:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:919
+msgid "* F<../bar_2.04+dfsg.orig.tar.gz> (repackaged)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:925
+msgid ""
+"B<uscan> normally invokes \"B<uupdate> B<--find --upstream-version> "
+"I<oversion> \" for the version=4 watch file."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:928
+msgid ""
+"Please note that B<--find> option is used here since B<mk-origtargz> has "
+"been invoked to make B<*.orig.tar.gz> file already. B<uscan> picks I<< bar "
+">> from F<debian/changelog>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:932
+msgid ""
+"It creates the new upstream source tree under the I<< ../bar-<oversion> >> "
+"directory and Debianize it leveraging the last package contents."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:935
+msgid "WATCH FILE EXAMPLES"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:937
+msgid ""
+"When writing the watch file, you should rely on the latest upstream source "
+"announcement web page. You should not try to second guess the upstream "
+"archive structure if possible. Here are the typical F<debian/watch> files."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:941
+msgid ""
+"Please note that executing B<uscan> with B<-v> or B<-vv> reveals what "
+"exactly happens internally."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:944
+msgid ""
+"The existence and non-existence of a space the before tailing B<\\> (back "
+"slash) are significant."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:947
+msgid ""
+"Some undocumented shorter configuration strings are used in the below "
+"EXAMPLES to help you with typing. These are intentional ones. B<uscan> is "
+"written to accept such common sense abbreviations but don't push the limit."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:951
+msgid "HTTP site (basic)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:953
+msgid "Here is an example for the basic single upstream tarball."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:955
+#, no-wrap
+msgid ""
+" version=4\n"
+" http://example.com/~user/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:959
+#, no-wrap
+msgid ""
+"Or without using the substitution strings (not recommended):\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-([\\d\\.]+)\\.tar\\.gz\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:963
+#, no-wrap
+msgid ""
+" version=4\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:965
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz>, this watch file downloads "
+"and creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:968
+msgid "HTTP site (pgpsigurlmangle)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:970
+msgid ""
+"Here is an example for the basic single upstream tarball with the matching "
+"signature file in the same file path."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:973
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.asc%\" "
+"http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:977
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz> and the upstream signature "
+"file B<foo-2.0.tar.gz.asc>, this watch file downloads these files, verifies "
+"the authenticity using the keyring F<debian/upstream/signing-key.asc> and "
+"creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:982
+msgid ""
+"Here is another example for the basic single upstream tarball with the "
+"matching signature file on decompressed tarball in the same file path."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:985
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%@ARCHIVE_EXT@$%.asc%,decompress\" \\\n"
+" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:990
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz> and the upstream signature "
+"file B<foo-2.0.tar.asc>, this watch file downloads these files, verifies the "
+"authenticity using the keyring F<debian/upstream/signing-key.asc> and "
+"creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:995
+msgid "HTTP site (pgpmode=next/previous)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:997
+msgid ""
+"Here is an example for the basic single upstream tarball with the matching "
+"signature file in the unrelated file path."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1000
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ previous\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1006
+msgid ""
+"B<(?:\\d+)> part can be any random value. The tarball file can have B<53>, "
+"while the signature file can have B<33>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1009
+msgid ""
+"B<([\\d\\.]+)> part for the signature file has a strict requirement to match "
+"that for the upstream tarball specified in the previous line by having "
+"B<previous> as I<version> in the watch line."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1013
+msgid "HTTP site (flexible)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1015
+msgid ""
+"Here is an example for the maximum flexibility of upstream tarball and "
+"signature file extensions."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1018
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ \\\n"
+" previous\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1025
+msgid "HTTP site (basic MUT)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1027
+msgid "Here is an example for the basic multiple upstream tarballs."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1029
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=bar\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=baz\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobaz-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1040
+msgid ""
+"For the main upstream source package B<foo-2.0.tar.gz> and the secondary "
+"upstream source packages B<foobar-2.0.tar.gz> and B<foobaz-2.0.tar.gz> which "
+"install under F<bar/> and F<baz/>, this watch file downloads and creates the "
+"Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>, B<foo_2.0.orig-bar.tar.gz> "
+"and B<foo_2.0.orig-baz.tar.gz>. Also, these upstream tarballs are verified "
+"by their signature files."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1047
+msgid "HTTP site (recursive directory scanning)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1049
+msgid ""
+"Here is an example with the recursive directory scanning for the upstream "
+"tarball and its signature files released in a directory named after their "
+"version."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1053
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, "
+"dirversionmangle=s/-PRE/~pre/;s/-RC/~rc/\" \\\n"
+" http://tmrc.mit.edu/mirror/twisted/Twisted/@ANY_VERSION@/ \\\n"
+" Twisted-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1058
+msgid "Here, the web site should be accessible at the following URL:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1060
+#, no-wrap
+msgid ""
+" http://tmrc.mit.edu/mirror/twisted/Twisted/\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1062
+msgid ""
+"Here, B<dirversionmangle> option is used to normalize the sorting order of "
+"the directory names."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1065
+msgid "HTTP site (alternative shorthand)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1067
+msgid ""
+"For the bare HTTP site where you can directly see archive filenames, the "
+"normal watch file:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1070
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/ \\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1075
+msgid ""
+"can be rewritten in an alternative shorthand form only with a single string "
+"covering URL and filename:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1078
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" "
+"http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1082
+msgid ""
+"In version=4, initial white spaces are dropped. Thus, this alternative "
+"shorthand form can also be written as:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1085
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/\\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1090
+msgid ""
+"Please note the subtle difference of a space before the tailing B<\\> "
+"between the first and the last examples."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1093
+msgid "HTTP site (funny version)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1095
+msgid ""
+"For a site which has funny version numbers, the parenthesized groups will be "
+"joined with B<.> (period) to make a sanitized version number."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1098
+#, no-wrap
+msgid ""
+" version=4\n"
+" http://www.site.com/pub/foobar/foobar_v(\\d+)_(\\d+)@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1101
+msgid "HTTP site (DFSG)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1103
+msgid ""
+"The upstream part of the Debian version number can be mangled to indicate "
+"the source package was repackaged to clean up non-DFSG files:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1106
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"dversionmangle=s/\\+dfsg\\d*$//,repacksuffix=+dfsg\" \\\n"
+" http://some.site.org/some/path/foobar-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1110 ../scripts/uscan.pl:1165
+msgid "See L<COPYRIGHT FILE EXAMPLES>."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1112
+msgid "HTTP site (filenamemangle)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1114
+msgid ""
+"The upstream tarball filename is found by taking the last component of the "
+"URL and removing everything after any '?' or '#'."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1117
+msgid ""
+"If this does not fit to you, use B<filenamemangle>. For example, F<< <A "
+"href=\"http://foo.bar.org/dl/?path=&dl=foo-0.1.1.tar.gz\"> >> could be "
+"handled as:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1121
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/$1/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl=foo-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1125
+msgid ""
+"F<< <A href=\"http://foo.bar.org/dl/?path=&dl_version=0.1.1\"> >> could be "
+"handled as:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1128
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/foo-$1\\.tar\\.gz/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl_version=@ANY_VERSION@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1132
+msgid ""
+"If the href string has no version using <I>matching-pattern>, the version "
+"can be obtained from the full URL using B<filenamemangle>."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1135
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s&.*/dl/(.*)/foo\\.tar\\.gz&foo-$1\\.tar\\.gz& \\\n"
+" http://foo.bar.org/dl/@ANY_VERSION@/ foo.tar.gz\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1139
+msgid "HTTP site (downloadurlmangle)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1141
+msgid ""
+"The option B<downloadurlmangle> can be used to mangle the URL of the file to "
+"download. This can only be used with B<http://> URLs. This may be "
+"necessary if the link given on the web page needs to be transformed in some "
+"way into one which will work automatically, for example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1146
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=downloadurlmangle=s/prdownload/download/ \\\n"
+" http://developer.berlios.de/project/showfiles.php?group_id=2051 \\\n"
+" "
+"http://prdownload.berlios.de/softdevice/vdr-softdevice-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1151
+msgid "HTTP site (oversionmangle, MUT)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1153
+msgid ""
+"The option B<oversionmangle> can be used to mangle the version of the source "
+"tarball (B<.orig.tar.gz> and B<.orig-bar.tar.gz>). For example, B<+dfsg> "
+"can be added to the upstream version as:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1157
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=oversionmangle=s/(.*)/$1+dfsg/ \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"component=bar\" \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/bar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1167
+msgid "HTTP site (pagemangle)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1169
+msgid ""
+"The option B<pagemangle> can be used to mangle the downloaded web page "
+"before applying other rules. The non-standard web page without proper B<< "
+"<a href=\" >> << ... >> B<< \"> >> entries can be converted. For example, "
+"if F<foo.html> uses B<< <a bogus=\" >> I<< ... >> B<< \"> >>, this can be "
+"converted to the standard page format with:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1175
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=pagemangle=\"s/<a\\s+bogus=/<a href=/g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1180
+msgid "Please note the use of B<g> here to replace all occurrences."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1182
+msgid ""
+"If F<foo.html> uses B<< <Key> >> I<< ... >> B<< </Key> >>, this can be "
+"converted to the standard page format with:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1185
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pagemangle=s%<Key>([^<]*)</Key>%<Key><a "
+"href=\"$1\">$1</a></Key>%g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1190
+msgid "FTP site (basic):"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1192
+#, no-wrap
+msgid ""
+" version=4\n"
+" "
+"ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1195
+msgid "FTP site (regex special characters):"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1197
+#, no-wrap
+msgid ""
+" version=4\n"
+" ftp://ftp.worldforge.org/pub/worldforge/libs/\\\n"
+" Atlas-C++/transitional/Atlas-C\\+\\+-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1201
+msgid ""
+"Please note that this URL is connected to be I< ... >B<libs/Atlas-C++/>I< "
+"... > . For B<++>, the first one in the directory path is verbatim while the "
+"one in the filename is escaped by B<\\>."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1205
+msgid "FTP site (funny version)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1207
+msgid ""
+"This is another way of handling site with funny version numbers, this time "
+"using mangling. (Note that multiple groups will be concatenated before "
+"mangling is performed, and that mangling will only be performed on the "
+"basename version number, not any path version numbers.)"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1213
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"uversionmangle=s/^/0.0./\" \\\n"
+" ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/\\\n"
+" development/Wine-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1218
+msgid "sf.net"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1220
+msgid ""
+"For SourceForge based projects, qa.debian.org runs a redirector which allows "
+"a simpler form of URL. The format below will automatically be rewritten to "
+"use the redirector with the watch file:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1224
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://sf.net/<project>/ <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1227
+msgid "For B<audacity>, set the watch file as:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1229
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://sf.net/audacity/ audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1232 ../scripts/uscan.pl:1272
+msgid ""
+"Please note, you can still use normal functionalities of B<uscan> to set up "
+"a watch file for this site without using the redirector."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1235
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"uversionmangle=s/-pre/~pre/, \\\n"
+" filenamemangle=s%(?:.*)audacity-minsrc-(.+)\\.tar\\.xz/download%\\\n"
+" audacity-$1.tar.xz%\" \\\n"
+" http://sourceforge.net/projects/audacity/files/audacity/@ANY_VERSION@/ "
+"\\\n"
+" (?:.*)audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@/download\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1242
+msgid "Here, B<%> is used as the separator instead of the standard B</>."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1244
+msgid "github.com"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1246
+msgid ""
+"For GitHub based projects, you can use the tags or releases page. The "
+"archive URL uses only the version as the filename. You can rename the "
+"downloaded upstream tarball from into the standard F<< "
+"<project>-<version>.tar.gz >> using B<filenamemangle>:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1251
+#, no-wrap
+msgid ""
+" version=4\n"
+" "
+"opts=\"filenamemangle=s%(?:.*?)?v?@ANY_VERSION@(@ARCHIVE_EXT@)%@PACKAGE@-$1$2%\" "
+"\\\n"
+" https://github.com/<user>/<project>/tags \\\n"
+" (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1256
+msgid "PyPI"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1258
+msgid ""
+"For PyPI based projects, pypi.debian.net runs a redirector which allows a "
+"simpler form of URL. The format below will automatically be rewritten to use "
+"the redirector with the watch file:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1262
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://pypi.python.org/packages/source/<initial>/<project>/ \\\n"
+" <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1266
+msgid "For B<cfn-sphere>, set the watch file as:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1268
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://pypi.python.org/packages/source/c/cfn-sphere/ \\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1275
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=none\" \\\n"
+" https://pypi.python.org/pypi/cfn-sphere/ \\\n"
+" https://pypi.python.org/packages/.*/.*/.*/\\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@#.*\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1281
+msgid "code.google.com"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1283
+msgid ""
+"Sites which used to be hosted on the Google Code service should have "
+"migrated to elsewhere (github?). Please look for the newer upstream site if "
+"available."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1286
+msgid "npmjs.org (node modules)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1288
+msgid "npmjs.org modules are published in JSON files. Here is a way to read them:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1290
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1295
+msgid "grouped package"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1297
+msgid ""
+"Some node modules are split into multiple little upstream package. Here is a "
+"way to group them:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1300
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ "
+"group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ "
+"group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" "
+"https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ "
+"group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" "
+"https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ "
+"group\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1314
+msgid ""
+"Package version is then the concatenation of upstream versions separated by "
+"\"+~\"."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1317
+msgid ""
+"To avoid having a too long version, the \"checksum\" method can be used. In "
+"this case, the main source has to be declared as \"group\":"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1320
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ "
+"group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ "
+"checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" "
+"https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ "
+"checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" "
+"https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ "
+"checksum\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1334
+msgid ""
+"The \"checksum\" is made up of the separate sum of each number composing the "
+"component versions. Following is an example with 3 components whose "
+"versions are \"1.2.4\", \"2.0.1\" and \"10.0\", with the main tarball having "
+"version \"2.0.6\":"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1338
+#, no-wrap
+msgid ""
+" Main: 2.0.6\n"
+" Comp1: 1 . 2 . 4\n"
+" Comp2: 2 . 0 . 1\n"
+" Comp3: 10 . 0\n"
+" ================================\n"
+" Result : 1+2+10 . 2+0+0 . 4+1\n"
+" Checksum: 13 . 2 . 5\n"
+" ================================\n"
+" Final Version: 2.0.6+~cs13.2.5\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1348
+msgid ""
+"uscan will also display the original version string before being encoded "
+"into the checksum, which can for example be used in a debian/changelog entry "
+"to easily follow the changes:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1352
+#, no-wrap
+msgid ""
+" 2.0.6+~1.2.4+~2.0.1+~10.0\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1354
+msgid ""
+"B<Note>: This feature currently accepts only versions composed of digits and "
+"full stops (`.`)."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1357
+msgid "direct access to the git repository (tags)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1359
+msgid ""
+"If the upstream only publishes its code via the git repository and its code "
+"has no web interface to obtain the release tarball, you can use B<uscan> "
+"with the tags of the git repository to track and package the new upstream "
+"release."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1363
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=git, gitmode=full, pgpmode=none\" \\\n"
+" http://git.ao2.it/tweeper.git \\\n"
+" refs/tags/v@ANY_VERSION@\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1368
+msgid "Please note \"B<git ls-remote>\" is used to obtain references for tags."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1370
+msgid ""
+"If a tag B<v20.5> is the newest tag, the above example downloads "
+"I<spkg>B<-20.5.tar.xz> after making a full clone of the git repository which "
+"is needed for dumb git server."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1374
+msgid "If tags are signed, set B<pgpmode=gittag> to verify them."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1376
+msgid "direct access to the git repository (HEAD)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1378
+msgid ""
+"If the upstream only publishes its code via the git repository and its code "
+"has no web interface nor the tags to obtain the released tarball, you can "
+"use B<uscan> with the HEAD of the git repository to track and package the "
+"new upstream release with an automatically generated version string."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1383
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=git, pgpmode=none\" \\\n"
+" https://github.com/Debian/dh-make-golang \\\n"
+" HEAD\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1388
+msgid ""
+"Please note that a local shallow copy of the git repository is made with "
+"\"B<git clone --bare --depth=1> ...\" normally in the target directory. "
+"B<uscan> generates the new upstream version with \"B<git log "
+"--date=format:%Y%m%d --pretty=0.0~git%cd.%h>\" on this local copy of "
+"repository as its default behavior."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1394
+msgid ""
+"The generation of the upstream version string may the adjusted to your taste "
+"by adding B<pretty> and B<date> options to the B<opts> arguments."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1397
+msgid "direct access to the Subversion repository (tags)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1399
+msgid ""
+"If the upstream only publishes its code via the Subversion repository and "
+"its code has no web interface to obtain the release tarball, you can use "
+"B<uscan> with the tags of the Subversion repository to track and package the "
+"new upstream release."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1404
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/tags/ \\\n"
+" @ANY_VERSION@\\/\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1409
+msgid "direct access to the Subversion repository (HEAD)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1411
+msgid ""
+"If the upstream only publishes its code via the Subversion repository and "
+"its code has no web interface to obtain the release tarball, you can use "
+"B<uscan> to get the most recent source of a subtree in the repository with "
+"an automatically generated version string."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1416
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/trunk/ \\\n"
+" HEAD\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1421
+msgid ""
+"By default, B<uscan> generates the new upstream version by appending the "
+"revision number to \"0.0~svn\". This can later be changed using "
+"B<uversionmangle>."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:1424
+msgid "COPYRIGHT FILE EXAMPLES"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1426
+msgid ""
+"Here is an example for the F<debian/copyright> file which initiates "
+"automatic repackaging of the upstream tarball into I<< "
+"<spkg>_<oversion>.orig.tar.gz >> (In F<debian/copyright>, the "
+"B<Files-Excluded> and B<Files-Excluded->I<component> stanzas are a part of "
+"the first paragraph and there is a blank line before the following "
+"paragraphs which contain B<Files> and other stanzas.):"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1433
+#, no-wrap
+msgid ""
+" Format: "
+"http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1440 ../scripts/uscan.pl:1461
+#, no-wrap
+msgid ""
+" Files: *\n"
+" Copyright: ...\n"
+" ...\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1444
+msgid ""
+"Here is another example for the F<debian/copyright> file which initiates "
+"automatic repackaging of the multiple upstream tarballs into I<< "
+"<spkg>_<oversion>.orig.tar.gz >> and I<< <spkg>_<oversion>.orig-bar.tar.gz "
+">>:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1449
+#, no-wrap
+msgid ""
+" Format: "
+"http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+" Files-Excluded-bar: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1465
+msgid "See mk-origtargz(1)."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:1467
+msgid "KEYRING FILE EXAMPLES"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1469
+msgid ""
+"Let's assume that the upstream \"B<< uscan test key (no secret) "
+"<none@debian.org> >>\" signs its package with a secret OpenPGP key and "
+"publishes the corresponding public OpenPGP key. This public OpenPGP key can "
+"be identified in 3 ways using the hexadecimal form."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1476
+msgid ""
+"* The fingerprint as the 20 byte data calculated from the public OpenPGP "
+"key. E. g., 'B<CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF>'"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1479
+msgid ""
+"* The long keyid as the last 8 byte data of the fingerprint. E. g., "
+"'B<C77E2D6872543FAF>'"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1482
+msgid ""
+"* The short keyid is the last 4 byte data of the fingerprint. E. g., "
+"'B<72543FAF>'"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1487
+msgid ""
+"Considering the existence of the collision attack on the short keyid, the "
+"use of the long keyid is recommended for receiving keys from the public key "
+"servers. You must verify the downloaded OpenPGP key using its full "
+"fingerprint value which you know is the trusted one."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1492
+msgid ""
+"The armored keyring file F<debian/upstream/signing-key.asc> can be created "
+"by using the B<gpg> (or B<gpg2>) command as follows."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1495
+#, no-wrap
+msgid ""
+" $ gpg --recv-keys \"C77E2D6872543FAF\"\n"
+" ...\n"
+" $ gpg --finger \"C77E2D6872543FAF\"\n"
+" pub 4096R/72543FAF 2015-09-02\n"
+" Key fingerprint = CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 "
+"3FAF\n"
+" uid uscan test key (no secret) <none@debian.org>\n"
+" sub 4096R/52C6ED39 2015-09-02\n"
+" $ cd path/to/<upkg>-<uversion>\n"
+" $ mkdir -p debian/upstream\n"
+" $ gpg --export --export-options export-minimal --armor \\\n"
+" 'CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF' \\\n"
+" >debian/upstream/signing-key.asc\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1508
+msgid ""
+"The binary keyring files, F<debian/upstream/signing-key.pgp> and "
+"F<debian/upstream-signing-key.pgp>, are still supported but deprecated."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1511
+msgid ""
+"If a group of developers sign the package, you need to list fingerprints of "
+"all of them in the argument for B<gpg --export ...> to make the keyring to "
+"contain all OpenPGP keys of them."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1515
+msgid ""
+"Sometimes you may wonder who made a signature file. You can get the public "
+"keyid used to create the detached signature file F<foo-2.0.tar.gz.asc> by "
+"running B<gpg> as:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1519
+#, no-wrap
+msgid ""
+" $ gpg -vv foo-2.0.tar.gz.asc\n"
+" gpg: armor: BEGIN PGP SIGNATURE\n"
+" gpg: armor header: Version: GnuPG v1\n"
+" :signature packet: algo 1, keyid C77E2D6872543FAF\n"
+" \tversion 4, created 1445177469, md5len 0, sigclass 0x00\n"
+" \tdigest algo 2, begin of digest 7a c7\n"
+" \thashed subpkt 2 len 4 (sig created 2015-10-18)\n"
+" \tsubpkt 16 len 8 (issuer key ID C77E2D6872543FAF)\n"
+" \tdata: [4091 bits]\n"
+" gpg: assuming signed data in `foo-2.0.tar.gz'\n"
+" gpg: Signature made Sun 18 Oct 2015 11:11:09 PM JST using RSA key ID "
+"72543FAF\n"
+" ...\n"
+"\n"
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:1532
+msgid "COMMANDLINE OPTIONS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1534
+msgid "For the basic usage, B<uscan> does not require to set these options."
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1548
+#, no-wrap
+msgid ""
+" uscan --conf-file test.conf --verbose\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1552
+#, no-wrap
+msgid ""
+" uscan --conf-file +test.conf --verbose\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1563
+msgid "B<--no-verbose>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1565
+msgid "Don't report verbose information. (default)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1569
+msgid "Report verbose information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1571
+msgid "B<--debug>, B<-vv>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1573
+msgid "Report verbose information and some internal state values."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1575
+msgid "B<--extra-debug>, B<-vvv>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1577
+msgid ""
+"Report verbose information including the downloaded web pages as processed "
+"to STDERR for debugging."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1580
+msgid "B<--dehs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1582
+msgid ""
+"Send DEHS style output (XML-type) to STDOUT, while send all other uscan "
+"output to STDERR."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1585
+msgid "B<--no-dehs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1587
+msgid "Use only traditional uscan output format. (default)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1589
+msgid "B<--download>, B<-d>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1591
+msgid "Download the new upstream release. (default)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1593
+msgid "B<--force-download>, B<-dd>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1595
+msgid ""
+"Download the new upstream release even if up-to-date. (may not overwrite the "
+"local file)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1597
+msgid "B<--overwrite-download>, B<-ddd>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1599
+msgid ""
+"Download the new upstream release even if up-to-date. (may overwrite the "
+"local file)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1601
+msgid "B<--no-download>, B<--nodownload>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1603
+msgid "Don't download and report information."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1605
+msgid "Previously downloaded tarballs may be used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1607
+msgid "Change default to B<--skip-signature>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1609
+msgid "B<--signature>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1611
+msgid "Download signature. (default)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1613
+msgid "B<--no-signature>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1615
+msgid "Don't download signature but verify if already downloaded."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1617
+msgid "B<--skip-signature>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1619
+msgid "Don't bother download signature nor verifying signature."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1621
+msgid "B<--safe>, B<--report>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1623
+msgid ""
+"Avoid running unsafe scripts by skipping both the repacking of the "
+"downloaded package and the updating of the new source tree."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1626
+msgid "Change default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1628
+msgid ""
+"When the objective of running B<uscan> is to gather the upstream package "
+"status under the security conscious environment, please make sure to use "
+"this option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1631
+msgid "B<--report-status>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1633
+msgid "This is equivalent of setting \"B<--verbose --safe>\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1635
+msgid "B<--download-version> I<version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1637
+msgid ""
+"Specify the I<version> which the upstream release must match in order to be "
+"considered, rather than using the release with the highest version. (a best "
+"effort feature)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1641
+msgid "B<--download-debversion> I<version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1643
+msgid ""
+"Specify the Debian package version to download the corresponding upstream "
+"release version. The B<dversionmangle> and B<uversionmangle> rules are "
+"considered. (a best effort feature)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1647
+msgid "B<--download-current-version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1649
+msgid "Download the currently packaged version. (a best effort feature)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1654 ../scripts/uscan.pl:1658
+msgid ""
+"See the below section L<Directory name checking> for an explanation of this "
+"option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1660
+msgid ""
+"B<--destdir> I<path> Normally, B<uscan> changes its internal current "
+"directory to the package's source directory where the F<debian/> is "
+"located. Then the destination directory for the downloaded tarball and "
+"other files is set to the parent directory F<../> from this internal current "
+"directory."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1666
+msgid ""
+"This default destination directory can be overridden by setting B<--destdir> "
+"option to a particular I<path>. If this I<path> is a relative path, the "
+"destination directory is determined in relative to the internal current "
+"directory of B<uscan> execution. If this I<path> is a absolute path, the "
+"destination directory is set to I<path> irrespective of the internal current "
+"directory of B<uscan> execution."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1673
+msgid ""
+"The above is true not only for the simple B<uscan> run in the single source "
+"tree but also for the advanced scanning B<uscan> run with subdirectories "
+"holding multiple source trees."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1677
+msgid ""
+"One exception is when B<--watchfile> and B<--package> are used together. "
+"For this case, the internal current directory of B<uscan> execution and the "
+"default destination directory are set to the current directory F<.> where "
+"B<uscan> is started. The default destination directory can be overridden by "
+"setting B<--destdir> option as well."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1685
+msgid ""
+"Specify the name of the package to check for rather than examining "
+"F<debian/changelog>; this requires the B<--upstream-version> (unless a "
+"version is specified in the F<watch> file) and B<--watchfile> options as "
+"well. Furthermore, no directory scanning will be done and nothing will be "
+"downloaded. This option automatically sets B<--no-download> and "
+"B<--skip-signature>; and probably most useful in conjunction with the DEHS "
+"system (and B<--dehs>)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1692
+msgid "B<--upstream-version> I<upstream-version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1694
+msgid ""
+"Specify the current upstream version rather than examine F<debian/watch> or "
+"F<debian/changelog> to determine it. This is ignored if a directory scan is "
+"being performed and more than one F<debian/watch> file is found."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1698
+msgid "B<--watchfile> I<watchfile>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1700
+msgid ""
+"Specify the I<watchfile> rather than perform a directory scan to determine "
+"it. If this option is used without B<--package>, then B<uscan> must be "
+"called from within the Debian package source tree (so that "
+"F<debian/changelog> can be found simply by stepping up through the tree)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1705
+msgid ""
+"One exception is when B<--watchfile> and B<--package> are used together. "
+"B<uscan> can be called from anywhare and the internal current directory of "
+"B<uscan> execution and the default destination directory are set to the "
+"current directory F<.> where B<uscan> is started."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1710
+msgid "See more in the B<--destdir> explanation."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1712
+msgid "B<--bare>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1714
+msgid ""
+"Disable all site specific special case codes to perform URL redirections and "
+"page content alterations."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1717
+msgid "B<--http-header>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1719
+msgid ""
+"Add specified header in HTTP requests for matching url. This option can be "
+"used more than one time, values must be in the form "
+"\"baseUrl@Name=value. Example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1722
+#, no-wrap
+msgid ""
+" uscan --http-header https://example.org@My-Token=qwertyuiop\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1724
+msgid "Security:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1728
+msgid "The given I<baseUrl> must exactly match the base url before '/'. Examples:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1731
+#, no-wrap
+msgid ""
+" | --http-header value | Good for | Never "
+"used |\n"
+" "
+"+------------------------------------+-----------------------------+------------+\n"
+" | https://example.org.com@Hdr=Value | https://example.org.com/... | "
+"|\n"
+" | https://example.org.com/@Hdr=Value | | X "
+"|\n"
+" | https://e.com:1879@Hdr=Value | https://e.com:1879/... | "
+"|\n"
+" | https://e.com:1879/dir@Hdr=Value | https://e.com:1879/dir/... | "
+"|\n"
+" | https://e.com:1879/dir/@Hdr=Value | | X "
+"|\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1739
+msgid ""
+"It is strongly recommended to not use this feature to pass a secret token "
+"over unciphered connection I<(http://)>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1742
+msgid ""
+"You can use C<USCAN_HTTP_HEADER> variable (in C<~/.devscripts>) to hide "
+"secret token from scripts"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1747
+msgid "B<--no-exclusion>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1749
+msgid ""
+"Don't automatically exclude files mentioned in F<debian/copyright> field "
+"B<Files-Excluded>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1751
+msgid "B<--pasv>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1753
+msgid "Force PASV mode for FTP connections."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1755
+msgid "B<--no-pasv>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1757
+msgid "Don't use PASV mode for FTP connections."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.pl:1759 ../scripts/uupdate.1:83
+#, no-wrap
+msgid "B<--no-symlink>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1761
+msgid "Don't rename nor repack upstream tarball."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1763
+msgid "B<--timeout> I<N>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1765
+msgid "Set timeout to I<N> seconds (default 20 seconds)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1767
+msgid "B<--user-agent>, B<--useragent>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1769
+msgid "Override the default user agent header."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1773
+msgid "Give brief usage information."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1781
+msgid "B<uscan> also accepts following options and passes them to B<mk-origtargz>:"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1787
+msgid ""
+"Make B<orig.tar.gz> (with the appropriate extension) symlink to the "
+"downloaded files. (This is the default behavior.)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1792
+msgid "Instead of symlinking as described above, copy the downloaded files."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1796
+msgid "Instead of symlinking as described above, rename the downloaded files."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1800
+msgid ""
+"After having downloaded an lzma tar, xz tar, bzip tar, gz tar, zip, jar, "
+"xpi, zstd archive, repack it to the specified compression (see "
+"B<--compression>)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1803
+msgid ""
+"The unzip package must be installed in order to repack zip and jar archives, "
+"the mozilla-devscripts package must be installed to repack xpi archives, the "
+"xz-utils package must be installed to repack lzma or xz tar archives, and "
+"zstd must be installed to repack zstd archives."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1808
+msgid "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> ]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1810
+msgid ""
+"In the case where the upstream sources are repacked (either because "
+"B<--repack> option is given or F<debian/copyright> contains the field "
+"B<Files-Excluded>), it is possible to control the compression method via the "
+"parameter. The default is B<gzip> for normal tarballs, and B<xz> for "
+"tarballs generated directly from the git repository."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1816
+msgid "B<--copyright-file> I<copyright-file>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1818
+msgid ""
+"Exclude files mentioned in B<Files-Excluded> in the given "
+"I<copyright-file>. This is useful when running B<uscan> not within a source "
+"package directory."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:1823
+msgid "DEVSCRIPT CONFIGURATION VARIABLES"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1825
+msgid ""
+"For the basic usage, B<uscan> does not require to set these configuration "
+"variables."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1828
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. These may "
+"be overridden by command line options. Environment variable settings are "
+"ignored for this purpose. If the first command line option given is "
+"B<--noconf>, then these files will not be read. The currently recognized "
+"variables are:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1837
+msgid "B<USCAN_DOWNLOAD>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1839
+msgid "Download or report only:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1843
+msgid ""
+"B<no>: equivalent to B<--no-download>, newer upstream files will not be "
+"downloaded."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1846
+msgid ""
+"B<yes>: equivalent to B<--download>, newer upstream files will be "
+"downloaded. This is the default behavior."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1849
+msgid "See also B<--force-download> and B<--overwrite-download>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1853
+msgid "B<USCAN_SAFE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1855
+msgid ""
+"If this is set to B<yes>, then B<uscan> avoids running unsafe scripts by "
+"skipping both the repacking of the downloaded package and the updating of "
+"the new source tree; this is equivalent to the B<--safe> options; this also "
+"sets the default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1860
+msgid "B<USCAN_PASV>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1862
+msgid ""
+"If this is set to yes or no, this will force FTP connections to use PASV "
+"mode or not to, respectively. If this is set to default, then B<Net::FTP(3)> "
+"makes the choice (primarily based on the B<FTP_PASSIVE> environment "
+"variable)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1866
+msgid "B<USCAN_TIMEOUT>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1868
+msgid ""
+"If set to a number I<N>, then set the timeout to I<N> seconds. This is "
+"equivalent to the B<--timeout> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1871
+msgid "B<USCAN_SYMLINK>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1873
+msgid ""
+"If this is set to no, then a I<pkg>_I<version>B<.orig.tar.{gz|bz2|lzma|xz}> "
+"symlink will not be made (equivalent to the B<--no-symlink> option). If it "
+"is set to B<yes> or B<symlink>, then the symlinks will be made. If it is set "
+"to B<rename>, then the files are renamed (equivalent to the B<--rename> "
+"option)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1878
+msgid "B<USCAN_DEHS_OUTPUT>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1880
+msgid ""
+"If this is set to B<yes>, then DEHS-style output will be used. This is "
+"equivalent to the B<--dehs> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1883
+msgid "B<USCAN_VERBOSE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1885
+msgid ""
+"If this is set to B<yes>, then verbose output will be given. This is "
+"equivalent to the B<--verbose> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1888
+msgid "B<USCAN_USER_AGENT>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1890
+msgid ""
+"If set, the specified user agent string will be used in place of the "
+"default. This is equivalent to the B<--user-agent> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1893
+msgid "B<USCAN_DESTDIR>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1895
+msgid ""
+"If set, the downloaded files will be placed in this directory. This is "
+"equivalent to the B<--destdir> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1898
+msgid "B<USCAN_REPACK>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1900
+msgid ""
+"If this is set to yes, then after having downloaded a bzip tar, lzma tar, xz "
+"tar, zip or zstd archive, uscan will repack it to the specified compression "
+"(see B<--compression>). This is equivalent to the B<--repack> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1904
+msgid "B<USCAN_EXCLUSION>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1906
+msgid ""
+"If this is set to no, files mentioned in the field B<Files-Excluded> of "
+"F<debian/copyright> will be ignored and no exclusion of files will be "
+"tried. This is equivalent to the B<--no-exclusion> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1910
+msgid "B<USCAN_HTTP_HEADER>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1912
+msgid ""
+"If set, the specified http header will be used if URL match. This is "
+"equivalent to B<--http-header> option."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1919
+msgid ""
+"The exit status gives some indication of whether a newer version was found "
+"or not; one is advised to read the output to determine exactly what happened "
+"and whether there were any warnings to be noted."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1927
+msgid ""
+"Either B<--help> or B<--version> was used, or for some F<watch> file which "
+"was examined, a newer upstream version was located."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1932
+msgid ""
+"No newer upstream versions were located for any of the F<watch> files "
+"examined."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:1936
+msgid "ADVANCED FEATURES"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1938
+msgid ""
+"B<uscan> has many other enhanced features which are skipped in the above "
+"section for the simplicity. Let's check their highlights."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1941
+msgid ""
+"B<uscan> can be executed with I<path> as its argument to change the starting "
+"directory of search from the current directory to I<path> ."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1944
+msgid ""
+"If you are not sure what exactly is happening behind the scene, please "
+"enable the B<--verbose> option. If this is not enough, enable the "
+"B<--debug> option too see all the internal activities."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1948
+msgid ""
+"See L<COMMANDLINE OPTIONS> and L<DEVSCRIPT CONFIGURATION VARIABLES> for "
+"other variations."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1951
+msgid "Custom script"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1953
+msgid ""
+"The optional I<script> parameter in F<debian/watch> means to execute "
+"I<script> with options after processing this line if specified."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1956
+msgid "See L<HISTORY AND UPGRADING> for how B<uscan> invokes the custom I<script>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1958
+msgid ""
+"For compatibility with other tools such as B<git-buildpackage>, it may not "
+"be wise to create custom scripts with random behavior. In general, "
+"B<uupdate> is the best choice for the non-native package and custom scripts, "
+"if created, should behave as if B<uupdate>. For possible use case, see "
+"L<http://bugs.debian.org/748474> as an example."
+msgstr ""
+
+#. type: =head2
+#: ../scripts/uscan.pl:1964
+msgid "URL diversion"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1966
+msgid ""
+"Some popular web sites changed their web page structure causing maintenance "
+"problems to the watch file. There are some redirection services created to "
+"ease maintenance of the watch file. Currently, B<uscan> makes automatic "
+"diversion of URL requests to the following URLs to cope with this situation."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1973
+msgid "* L<http://sf.net>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:1975
+msgid "* L<http://pypi.python.org>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1981
+msgid ""
+"Similarly to several other scripts in the B<devscripts> package, B<uscan> "
+"explores the requested directory trees looking for F<debian/changelog> and "
+"F<debian/watch> files. As a safeguard against stray files causing potential "
+"problems, and in order to promote efficiency, it will examine the name of "
+"the parent directory once it finds the F<debian/changelog> file, and check "
+"that the directory name corresponds to the package name. It will only "
+"attempt to download newer versions of the package and then perform any "
+"requested action if the directory name matches the package name. Precisely "
+"how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and "
+"B<--check-dirname-regex>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2004
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for F<debian/changelog>, that is, the directory containing "
+"F<debian/changelog> is not the directory from which B<uscan> was invoked. "
+"This is the default behavior."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2015
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by pwd(1)) matches the regex given by the configuration file "
+"option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here regex is a Perl regex (see "
+"perlre(3perl)), which will be anchored at the beginning and the end. If "
+"regex contains a B</>, then it must match the full directory path. If not, "
+"then it must match the full directory name. If regex contains the string "
+"I<package>, this will be replaced by the source package name, as determined "
+"from the F<debian/changelog>. The default value for the regex is: "
+"I<package>B<(-.+)?>, thus matching directory names such as I<package> and "
+"I<package>-I<version>."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/uscan.pl:2026
+msgid "HISTORY AND UPGRADING"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2028
+msgid ""
+"This section briefly describes the backwards-incompatible F<watch> file "
+"features which have been added in each F<watch> file version, and the first "
+"version of the B<devscripts> package which understood them."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:2034
+msgid "Pre-version 2"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2036
+msgid ""
+"The F<watch> file syntax was significantly different in those days. Don't "
+"use it. If you are upgrading from a pre-version 2 F<watch> file, you are "
+"advised to read this manpage and to start from scratch."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:2040
+msgid "Version 2"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2042
+msgid ""
+"B<devscripts> version 2.6.90: The first incarnation of the current style of "
+"F<watch> files. This version is also deprecated and will be rejected after "
+"the Debian 11 release."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:2046
+msgid "Version 3"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2048
+msgid ""
+"B<devscripts> version 2.8.12: Introduced the following: correct handling of "
+"regex special characters in the path part, directory/path pattern matching, "
+"version number in several parts, version number mangling. Later versions "
+"have also introduced URL mangling."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2053
+msgid ""
+"If you are upgrading from version 2, the key incompatibility is if you have "
+"multiple groups in the pattern part; whereas only the first one would be "
+"used in version 2, they will all be used in version 3. To avoid this "
+"behavior, change the non-version-number groups to be B<(?:> I< ...> B<)> "
+"instead of a plain B<(> I< ... > B<)> group."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:2061
+msgid ""
+"* B<uscan> invokes the custom I<script> as \"I<script> B<--upstream-version> "
+"I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:2064
+msgid ""
+"* B<uscan> invokes the standard B<uupdate> as \"B<uupdate> B<--no-symlink "
+"--upstream-version> I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:2069
+msgid "Version 4"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2071
+msgid ""
+"B<devscripts> version 2.15.10: The first incarnation of F<watch> files "
+"supporting multiple upstream tarballs."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2074
+msgid ""
+"The syntax of the watch file is relaxed to allow more spaces for "
+"readability."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2076
+msgid ""
+"If you have a custom script in place of B<uupdate>, you may also encounter "
+"problems updating from Version 3."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:2081
+msgid ""
+"* B<uscan> invokes the custom I<script> as \"I<script> B<--upstream-version> "
+"I<version>\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/uscan.pl:2084
+msgid ""
+"* B<uscan> invokes the standard B<uupdate> as \"B<uupdate> B<--find> "
+"B<--upstream-version> I<version>\"."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2089
+msgid ""
+"Restriction for B<--dehs> is lifted by redirecting other output to STDERR "
+"when it is activated."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2096
+msgid "dpkg(1), mk-origtargz(1), perlre(1), uupdate(1), devscripts.conf(5)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/uscan.pl:2100
+msgid ""
+"The original version of uscan was written by Christoph Lameter "
+"<clameter@debian.org>. Significant improvements, changes and bugfixes were "
+"made by Julian Gilbey <jdg@debian.org>. HTTP support was added by Piotr "
+"Roszatycki <dexter@debian.org>. The program was rewritten in Perl by Julian "
+"Gilbey. Xavier Guimard converted it in object-oriented Perl using L<Moo>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/uupdate.1:1
+#, no-wrap
+msgid "UUPDATE"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:4
+msgid "uupdate - upgrade a source code package from an upstream revision"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:6
+msgid "B<uupdate> [I<options>] I<new_upstream_archive> [I<version>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:8
+msgid "B<uupdate> [I<options>] B<--find>|B<-f>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:10
+msgid "B<uupdate> [I<options>] B<--patch>|B<-p> I<patch_file>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:22
+msgid ""
+"B<uupdate> modifies an existing Debian source code archive to reflect an "
+"upstream update supplied as a patch or from a wholly new source code "
+"archive. The utility needs to be invoked from the top directory of the old "
+"source code directory, and if a relative name is given for the new archive "
+"or patch file, it will be looked for first relative to the execution "
+"directory and then relative to the parent of the source tree. (For example, "
+"if the changelog file is I</usr/local/src/foo/foo-1.1/debian/changelog>, "
+"then the archive or patch file will be looked for relative to "
+"I</usr/local/src/foo>.) Note that the patch file or archive cannot be "
+"within the source tree itself. The full details of what the code does are "
+"given below."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:32
+msgid ""
+"Currently supported source code file types are I<.tar.gz>, I<.tar.bz2>, "
+"I<.tar.Z>, I<.tgz>, I<.tar>, I<.tar.lzma>, I<.tar.xz>, I<.7z> and I<.zip> "
+"archives. Also supported are already unpacked source code archives; simply "
+"give the path of the source code directory. Supported patch file types are "
+"B<gzip>-compressed, B<bzip2>-compressed, B<lzma>-compressed, "
+"B<xz>-compressed and uncompressed patch files. The file types are "
+"identified by the file names, so they must use the standard suffixes."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:42
+msgid ""
+"Usually B<uupdate> will be able to deduce the version number from the source "
+"archive name (as long as it only contains digits and periods). If that "
+"fails, you need to specify the version number explicitly (without the Debian "
+"release number which will always be initially ``1'', or ``0ubuntu1'' on "
+"Ubuntu-detected systems). This can be done with an initial "
+"B<--upstream-version> or B<-v> option, or in the case of an archive, with a "
+"version number after the filename. (The reason for the latter is so that "
+"B<uupdate> can be called directly from B<uscan>.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:47
+msgid ""
+"Since B<uupdate> uses B<debuild> to clean the current archive before trying "
+"to apply a patch file, it accepts a B<--rootcmd> or B<-r> option allowing "
+"the user to specify a gain-root command to be used. The default is to use "
+"B<fakeroot>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:54
+msgid ""
+"If an archive is being built, the pristine upstream source should be used to "
+"create the I<.orig.tar.gz> file wherever possible. This means that MD5 sums "
+"or other similar methods can be used to easily compare the upstream source "
+"to Debian's copy of the upstream version. This is the default behaviour, "
+"and can be switched off using the B<--no-pristine> option below."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:56
+msgid "This is a summary of what was explained above."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:60
+#, no-wrap
+msgid "B<--upstream-version >I<version>, B<-v >I<version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:63
+msgid "Specify the version number of the upstream package explicitly."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:63
+#, no-wrap
+msgid "B<--force-bad-version, -b >"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:66
+#, no-wrap
+msgid "B<--rootcmd >I<gain-root-command>, B<-r >I<gain-root-command>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:70
+msgid ""
+"Specify the command to be used to become root to build the package and is "
+"passed onto B<debuild>(1) if it is specified."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:70
+#, no-wrap
+msgid "B<--pristine>, B<-u>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:75
+msgid ""
+"Treat the source as pristine upstream source and symlink to it from "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> whenever possible. This "
+"option has no meaning for patches. This is the default behaviour."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:75
+#, no-wrap
+msgid "B<--no-pristine>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:78
+msgid ""
+"Do not attempt to make a I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> "
+"symlink."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:78
+#, no-wrap
+msgid "B<--symlink>, B<-s>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:83
+msgid ""
+"Simply create a symlink when moving a new upstream I<.tar.gz> archive to the "
+"new I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> location. This is "
+"the default behaviour."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:88
+msgid ""
+"Copy the upstream I<.tar.gz> to the new location instead of making a "
+"symlink, if I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> is missing. "
+"Otherwise, do nothing."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:88
+#, no-wrap
+msgid "B<--find, -f>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:98
+msgid ""
+"Find all upstream tarballs in I<../> which match "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig.tar.{gz|bz2|lzma|xz}> or "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig-E<lt>componentE<gt>.tar.{gz|bz2|lzma|xz}> "
+"; B<--upstream-version> required; pristine source required; not valid for "
+"B<--patch>; This option uses B<dpkg-source> as the backend to enable support "
+"for the multiple upstream tarballs and to resolve minor bugs reported "
+"previously. The use of this option is highly recommended."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:101
+msgid "Give verbose output."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:113
+#, no-wrap
+msgid "B<UUPDATE_PRISTINE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:117
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-pristine> command "
+"line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:117
+#, no-wrap
+msgid "B<UUPDATE_SYMLINK_ORIG>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:121
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-symlink> command "
+"line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:121
+#, no-wrap
+msgid "B<UUPDATE_ROOTCMD>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:124
+msgid "This is equivalent to the B<--rootcmd> option."
+msgstr ""
+
+#. type: SH
+#: ../scripts/uupdate.1:124
+#, no-wrap
+msgid "ACTIONS TAKEN ON AN ARCHIVE"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:125 ../scripts/uupdate.1:158
+#, no-wrap
+msgid "B<Figure out new version number>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:131
+msgid ""
+"Unless an explicit version number is provided, the archive name is analyzed "
+"for a sequence of digits separated by dots. If something like that is "
+"found, it is taken to be the new upstream version number. If not, "
+"processing is aborted."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:131
+#, no-wrap
+msgid "B<Create the .orig.tar.gz archive>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:136
+msgid ""
+"If the B<--pristine> or B<-u> option is specified and the upstream archive "
+"is a I<.tar.gz> or I<.tgz> archive, then this will be copied directly to "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:136
+#, no-wrap
+msgid "B<Unpacking>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:141
+msgid ""
+"The archive is unpacked and placed in a directory with the correct name "
+"according to Debian policy: package-upstream_version.orig. Processing is "
+"aborted if this directory already exists."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:141 ../scripts/uupdate.1:169
+#, no-wrap
+msgid "B<Patching>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:149
+msgid ""
+"The I<.diffs.gz> from the current version are applied to the unpackaged "
+"archive. A non-zero exit status and warning message will occur if the "
+"patches did not apply cleanly or if no patch file was found. Also, the list "
+"of rejected patches will be shown. The file I<debian/rules> is made "
+"executable and all of the I<.orig> files created by B<patch> are deleted."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:149 ../scripts/uupdate.1:181
+#, no-wrap
+msgid "B<Changelog update>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:153 ../scripts/uupdate.1:185
+msgid ""
+"A changelog entry with the new version number is generated with the text "
+"``New upstream release.''."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:157 ../scripts/uupdate.1:189
+msgid ""
+"When used on Ubuntu systems, B<dpkg-vendor> detection is used to set the "
+"Debian revision to ``0ubuntu1''. You may change I<debian/changelog> "
+"manually afterwards."
+msgstr ""
+
+#. type: SH
+#: ../scripts/uupdate.1:157
+#, no-wrap
+msgid "ACTIONS TAKEN ON A PATCH FILE"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:164
+msgid ""
+"Unless an explicit version number is provided, the patch file name is "
+"analyzed for a sequence of digits separated by dots. If something like that "
+"is found, it is taken to be the new upstream version number. If not, "
+"processing is aborted."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:164
+#, no-wrap
+msgid "B<Clean the current source tree>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:169
+msgid ""
+"The command B<debuild clean> is executed within the current Debian source "
+"archive to clean it. If a B<-r> option is given to B<uupdate>, it is passed "
+"on to B<debuild>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:181
+msgid ""
+"The current source archive (I<.orig.tar.gz>) is unpacked and the patch "
+"applied to the original sources. If this is successful, then the I<.orig> "
+"directory is renamed to reflect the new version number and the current "
+"Debian source directory is copied to a directory with the new version "
+"number, otherwise processing is aborted. The patch is then applied to the "
+"new copy of the Debian source directory. The file I<debian/rules> is made "
+"executable and all of the I<.orig> files created by B<patch> are deleted. "
+"If there was a problem with the patching, a warning is issued and the "
+"program will eventually exit with non-zero exit status."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:194
+msgid "B<debuild>(1), B<fakeroot>(1), B<patch>(1), B<devscripts.conf>(5)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:196
+msgid "B<The Debian Policy Manual>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:199
+msgid ""
+"The original version of B<uupdate> was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. Several changes and improvements have been "
+"made by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: TH
+#: ../doc/what-patch.1:1
+#, no-wrap
+msgid "WHAT-PATCH"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:4
+msgid "what-patch - detect which patch system a Debian package uses"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:7
+msgid "B<what-patch> [I<options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:11
+msgid ""
+"B<what-patch> examines the I<debian/rules> file to determine which patch "
+"system the Debian package is using."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:14
+msgid ""
+"B<what-patch> should be run from the root directory of the Debian source "
+"package."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:17
+msgid "Listed below are the command line options for B<what-patch>:"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:20
+msgid "Display a help message and exit."
+msgstr ""
+
+#. type: TP
+#: ../doc/what-patch.1:20
+#, no-wrap
+msgid "B<-v>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:26
+msgid ""
+"Enable verbose mode. This will include the listing of any files modified "
+"outside or the I<debian/> directory and report any additional details about "
+"the patch system if available."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:32
+msgid ""
+"B<what-patch> was written by Kees Cook E<lt>kees@ubuntu.comE<gt>, "
+"Siegfried-A. Gevatter E<lt>rainct@ubuntu.comE<gt>, and Daniel Hahler "
+"E<lt>ubuntu@thequod.deE<gt>, among others. This manual page was written by "
+"Jonathan Patrick Davies E<lt>jpds@ubuntu.comE<gt>."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:38
+msgid ""
+"The Ubuntu MOTU team has some documentation about patch systems at the "
+"Ubuntu wiki: I<https://wiki.ubuntu.com/PackagingGuide/PatchSystems>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/what-patch.1:42
+msgid "B<cdbs-edit-patch>(1), B<dbs-edit-patch>(1), B<dpatch-edit-patch>(1)"
+msgstr ""
+
+#. type: TH
+#: ../scripts/whodepends.1:1
+#, no-wrap
+msgid "WHODEPENDS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/whodepends.1:4
+msgid "whodepends - check which maintainers' packages depend on a package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/whodepends.1:6
+msgid "B<whodepends> [I<package>] [I<options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/whodepends.1:10
+msgid ""
+"B<whodepends> gives the names, e-mail addresses and the packages they "
+"maintain of all maintainers who have packages depending on the given "
+"package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/whodepends.1:19
+msgid "B<whodepends> is not very efficient."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/whodepends.1:20
+msgid "B<whodepends> has been written by Moshe Zadka E<lt>moshez@debian.orgE<gt>."
+msgstr ""
+
+#. type: TH
+#: ../scripts/who-uploads.1:1
+#, no-wrap
+msgid "WHO-UPLOADS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:4
+msgid "who-uploads - identify the uploaders of Debian source packages"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:6
+msgid "B<who-uploads> [I<options>] I<source_package> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:12
+msgid ""
+"B<who-uploads> uses the Package Tracking System (PTS) to identify the "
+"uploaders of the three most recent versions of the given source packages. "
+"Note that the uploaders are identified using their B<gpg>(1) or B<gpg2>(1) "
+"keys; installing a recent version of the I<debian-keyring> package should "
+"provide most of the required keys."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:15
+msgid ""
+"Note that because the PTS uses source packages, you must give the source "
+"package names, not the binary package names."
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:16
+#, no-wrap
+msgid "B<-M>, B<--max-uploads=>I<N>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:21
+msgid ""
+"Specify the maximum number of uploads to display for each package; the "
+"default is 3. Note that you may not see this many uploads if there are not "
+"this many recorded in the PTS."
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:21
+#, no-wrap
+msgid "B<--keyring >I<keyring>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:25
+msgid ""
+"Add I<keyring> to the list of keyrings to be searched for the uploader's GPG "
+"key."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:34
+msgid ""
+"By default, B<who-uploads> uses the three Debian keyrings "
+"I</usr/share/keyrings/debian-keyring.gpg>, "
+"I</usr/share/keyrings/debian-nonupload.gpg>, and "
+"I</usr/share/keyrings/debian-maintainers.gpg> (although this default can be "
+"changed in the configuration file, see below). Specifying this option means "
+"that the default keyrings will not be examined. The B<--keyring> option "
+"overrides this one."
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:34
+#, no-wrap
+msgid "B<--date>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:37
+msgid "Show the date of the upload alongside the uploader's details"
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:37
+#, no-wrap
+msgid "B<--nodate>, B<--no-date>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:41
+msgid ""
+"Do not show the date of the upload alongside the uploader's details. This "
+"is the default behaviour."
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:57
+#, no-wrap
+msgid "B<WHOUPLOADS_DATE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:61
+msgid ""
+"Show the date of the upload alongside the uploader's details. By default, "
+"this is \"no\"."
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:61
+#, no-wrap
+msgid "B<WHOUPLOADS_MAXUPLOADS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:65
+msgid ""
+"The maximum number of uploads to display for each package. By default, this "
+"is 3."
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:65
+#, no-wrap
+msgid "B<WHOUPLOADS_KEYRINGS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:73
+msgid ""
+"This is a colon-separated list of the default keyrings to be used. By "
+"default, it is the three Debian keyrings "
+"I</usr/share/keyrings/debian-keyring.gpg>, "
+"I</usr/share/keyrings/debian-nonupload.gpg>, and "
+"I</usr/share/keyrings/debian-maintainers.gpg>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:76
+msgid ""
+"The original version of B<who-uploads> was written by Adeodato Sim\\['o] "
+"E<lt>dato@net.com.org.esE<gt>. The current version is by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:50
+msgid "who-permits-upload - look-up Debian Maintainer access control lists"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:54
+msgid ""
+"B<who-permits-upload> [B<-h>] [B<-s> I<keyring>] [B<-d> I<dm_url>] [B<-s> "
+"I<search_type>] I<query> [I<query> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:58
+msgid ""
+"B<who-permits-upload> looks up the given Debian Maintainer (DM) upload "
+"permissions from ftp-master.debian.org and parses them in a human readable "
+"way. The tool can search by DM name, sponsor (the person who granted the "
+"permission) and by package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:66
+msgid "B<--dmfile=>I<dm_url>, B<-d> I<dm_url>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:68
+msgid ""
+"Retrieve the DM permission file from the supplied URL. When this option is "
+"not present, the default value I<https://ftp-master.debian.org/dm.txt> is "
+"used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:73
+msgid "Display a usage summary and exit."
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:75
+msgid "B<--keyring=>I<keyring>, B<-s> I<keyring>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:77
+msgid ""
+"Use the supplied GnuPG keyrings to look-up GPG fingerprints from the DM "
+"permission file. When not present, the default Debian Developer and "
+"Maintainer keyrings are used (I</usr/share/keyrings/debian-keyring.gpg> and "
+"I</usr/share/keyrings/debian-maintainers.gpg>, installed by the "
+"I<debian-keyring> package)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:83
+msgid "Separate keyrings with a colon \":\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:85
+msgid "B<--search=>I<search_type>, B<-s> I<search_type>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:87
+msgid ""
+"Modify the look-up behavior. This influences the interpretation of the "
+"I<query> argument. Supported search types are:"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:94
+msgid ""
+"Search for a source package name. This is also the default when B<--search> "
+"is omitted. Since package names are unique, this will return given ACLs - "
+"if any - for a single package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:98
+msgid "B<uid>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:100
+msgid ""
+"Search for a Debian Maintainer. This should be (a fraction of) a name. It "
+"will return all ACLs assigned to matching maintainers."
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:103
+msgid "B<sponsor>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:105
+msgid ""
+"Search for a sponsor (i.e. a Debian Developer) who granted DM "
+"permissions. This will return all ACLs given by the supplied developer."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:108
+msgid "Note that this is an expensive operation which may take some time."
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:112
+msgid "I<query>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:114
+msgid ""
+"A case sensitive argument to be looked up in the ACL permission file. The "
+"exact interpretation of this argument is dependent by the B<--search> "
+"argument."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:117
+msgid "This argument can be repeated."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/who-permits-upload.pl:121
+msgid "EXIT VALUE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:127
+msgid "Success"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:131
+msgid "An error occurred"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:135
+msgid "The command line was not understood"
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:143
+msgid "who-permits-upload --search=sponsor arno@debian.org"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:145
+msgid ""
+"Search for all DM upload permissions given by the UID "
+"\"arno@debian.org\". Note, that only primary UIDs will match."
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:148
+msgid "who-permits-upload -s=sponsor \"Arno Töll\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:150
+msgid "Same as above, but use a full name instead."
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:152
+msgid "who-permits-upload apache2"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:154
+msgid "Look up who gave upload permissions for the apache2 source package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:156
+msgid "who-permits-upload --search=uid \"Paul Tagliamonte\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:158
+msgid "Look up all DM upload permissions given to \"Paul Tagliamonte\"."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:164
+msgid ""
+"B<who-permits-upload> was written by Arno Töll <arno@debian.org> and is "
+"licensed under the terms of the General Public License (GPL) version 2 or "
+"later."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:169
+msgid "B<gpg>(1), B<gpg2>(1), B<who-uploads>(1)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:171
+msgid "S<I<https://lists.debian.org/debian-devel-announce/2012/09/msg00008.html>>"
+msgstr ""
+
+#. type: TH
+#: ../scripts/wnpp-alert.1:1
+#, no-wrap
+msgid "WNPP-ALERT"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:4
+msgid "wnpp-alert - check for installed packages up for adoption or orphaned"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:6
+msgid "B<wnpp-alert >[B<--diff>] [I<package> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:8
+msgid "B<wnpp-alert --help>|B<--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:14
+msgid ""
+"B<wnpp-alert> downloads the lists of packages which have been orphaned (O), "
+"are up for adoption (RFA), or the maintainer has asked for help (RFH) from "
+"the WNPP webpages, and then outputs a list of packages installed on the "
+"system, or matching the listed packages, which are in those lists."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:17
+msgid ""
+"Note that WNPP, and therefore B<wnpp-alert>'s output, is source package "
+"based."
+msgstr ""
+
+#. type: TP
+#: ../scripts/wnpp-alert.1:18
+#, no-wrap
+msgid "B<--diff>, B<-d>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:23
+msgid ""
+"If the I<$XDG_CACHE_HOME/devscripts> directory exists, compare the output of "
+"B<wnpp-alert> to the previous output (cached in the file I<wnpp-diff>) and "
+"output the differences."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:31 ../scripts/wnpp-check.1:28
+msgid "https://www.debian.org/devel/wnpp"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:34
+msgid ""
+"B<wnpp-alert> was written by Arthur Korn E<lt>arthur@korn.chE<gt> and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt> for the devscripts "
+"package. It is in the public domain."
+msgstr ""
+
+#. type: TH
+#: ../scripts/wnpp-check.1:1
+#, no-wrap
+msgid "WNPP-CHECK"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:4
+msgid ""
+"wnpp-check - check if a package is being packaged or if this has been "
+"requested"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:6
+msgid "B<wnpp-check> [B<--exact>] I<package> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:8
+msgid "B<wnpp-check --help>|B<--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:13
+msgid ""
+"B<wnpp-check> downloads the lists of packages which are listed as being "
+"packaged (ITPed) or for which a package has been requested (RFPed) from the "
+"WNPP website and lists any packages supplied on the command line which "
+"appear in those lists."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:16
+msgid ""
+"Note that WNPP, and therefore B<wnpp-check>'s output, is source package "
+"based."
+msgstr ""
+
+#. type: TP
+#: ../scripts/wnpp-check.1:17
+#, no-wrap
+msgid "B<--exact>, B<-e>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:20
+msgid ""
+"Require an exact package name match, rather than the default substring "
+"match."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:32
+msgid "None of the packages supplied has an open ITP or RFP"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:36
+msgid ""
+"Either an error occurred or at least one package supplied has an open ITP or "
+"RFP"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:42
+msgid ""
+"B<wnpp-check> was written by David Paleino E<lt>d.paleino@gmail.comE<gt>; "
+"this man page was written by Adam D. Barratt "
+"E<lt>adam@adam-barratt.org.ukE<gt> for the devscripts package. "
+"B<wnpp-check> was originally based on B<wnpp-alert>, which was written by "
+"Arthur Korn E<lt>arthur@korn.chE<gt> and modified by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> for the devscripts package. Both scripts are in "
+"the public domain."
+msgstr ""
+
+#. type: TH
+#: ../doc/wrap-and-sort.1:15
+#, no-wrap
+msgid "WRAP-AND-SORT"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:18
+msgid "wrap-and-sort - wrap long lines and sort items in Debian packaging files"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:21
+msgid "B<wrap-and-sort> [I<options>]"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:30
+msgid ""
+"B<wrap-and-sort> wraps the package lists in Debian control files. By default "
+"the lists will only split into multiple lines if the entries are longer than "
+"the maximum line length limit of 79 characters. B<wrap-and-sort> sorts the "
+"package lists in Debian control files and all I<.dirs>, I<.docs>, "
+"I<.examples>, I<.info>, I<.install>, I<.links>, I<.maintscript>, and "
+"I<.manpages> files. Beside that B<wrap-and-sort> removes trailing spaces in "
+"these files."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:34
+msgid ""
+"This script should be run in the root of a Debian package tree. It searches "
+"for I<control>, I<control*.in>, I<copyright>, I<copyright.in>, I<install>, "
+"and I<*.install> in the I<debian> directory."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:39
+#, no-wrap
+msgid "B<-a>, B<--wrap-always>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:43
+msgid ""
+"Wrap all package lists in the Debian I<control> file even if they do not "
+"exceed the line length limit and could fit in one line."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:43
+#, no-wrap
+msgid "B<-s>, B<--short-indent>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:47
+msgid ""
+"Only indent wrapped lines by one space (default is in-line with the field "
+"name)."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:47
+#, no-wrap
+msgid "B<-b>, B<--sort-binary-packages>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:50
+msgid "Sort binary package paragraphs by name."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:50
+#, no-wrap
+msgid "B<-k>, B<--keep-first>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:53
+msgid "When sorting binary package paragraphs, leave the first one at the top."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:57
+msgid ""
+"Unqualified B<debhelper>(7) configuration files are applied to the first "
+"package."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:57
+#, no-wrap
+msgid "B<-n>, B<--no-cleanup>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:60
+msgid "Do not remove trailing whitespaces."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:60
+#, no-wrap
+msgid "B<-t>, B<--trailing-comma>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:65
+msgid ""
+"Add a trailing comma at the end of the sorted fields. This minimizes future "
+"differences in the VCS commits when additional dependencies are appended or "
+"removed."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:65
+#, no-wrap
+msgid "B<-d >I<path>, B<--debian-directory=>I<path>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:68
+msgid "Location of the I<debian> directory (default: I<./debian>)."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:68
+#, no-wrap
+msgid "B<-f >I<file>, B<--file=>I<file>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:73
+msgid ""
+"Wrap and sort only the specified I<file>. You can specify this parameter "
+"multiple times. All supported files will be processed if no files are "
+"specified."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:76
+msgid "Print all files that are touched."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:76
+#, no-wrap
+msgid "B<--max-line-length=>I<max_line_length>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:80
+msgid ""
+"Set the maximum allowed line length. Package lists in the Debian I<control> "
+"file that exceed this length limit will be wrapped."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:82
+msgid "The default maximum line length is 79 characters."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:82
+#, no-wrap
+msgid "B<-N>, B<--dry-run>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:85
+msgid "Do not modify any file, instead only print the files that would be modified."
+msgstr ""
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:86
+#, no-wrap
+msgid "B<--experimental-rts-parser>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:90
+msgid ""
+"Enable the experimental round-trip safe parser. When enabled, most comments "
+"in deb822 control will be preserved."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:94
+msgid ""
+"The option is a temporary means to enable users to opt-in to this new "
+"experimental feature. The option will be removed once the new parser is "
+"mature enough and is ready to unconditionally replace the previous parser."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:97
+msgid ""
+"This option requires python-debian version 0.1.43 or later to work. "
+"However, some features will require 0.1.44 or later."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:101
+msgid ""
+"B<wrap-and-sort> and this manpage have been written by Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+msgstr ""
+
+#. type: TH
+#: ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "DEVSCRIPTS.CONF"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:4
+msgid "devscripts.conf - configuration file for the devscripts package"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:9
+msgid ""
+"The B<devscripts> package provides a collection of scripts which may be of "
+"use to Debian developers and others wishing to build Debian packages. Many "
+"of these have options which can be configured on a system-wide and per-user "
+"basis."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:15
+msgid ""
+"Every script in the B<devscripts> package which makes use of values from "
+"these configuration files describes the specific settings recognised in its "
+"own manpage. (For a list of the scripts, either see "
+"I</usr/share/doc/devscripts/README.gz> or look at the output of I<dpkg -L "
+"devscripts | grep /usr/bin>.)"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:24
+msgid ""
+"The two configuration files are I</etc/devscripts.conf> for system-wide "
+"defaults and I<~/.devscripts> for per-user settings. They are written with "
+"B<bash>(1) syntax, but should only have comments and simple variable "
+"assignments in them; they are both sourced (if present) by many of the "
+"B<devscripts> scripts. Variables corresponding to simple switches should "
+"have one of the values I<yes> and I<no>; any other setting is regarded as "
+"equivalent to the default setting."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:28
+msgid ""
+"All variable names are written in uppercase, and begin with the script "
+"name. Package-wide variables begin with \"DEVSCRIPTS\", and are listed "
+"below, as well as in the relevant manpages."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:36
+msgid ""
+"For a list of all of the available options variables, along with their "
+"default settings, see the example configuration file "
+"I</usr/share/doc/devscripts/devscripts.conf.ex>. This is copied to "
+"I</etc/devscripts.conf> when the B<devscripts> package is first installed. "
+"Information about configuration options introduced in newer versions of the "
+"package will be appended to I</etc/devscripts.conf> when the package is "
+"upgraded."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:40
+msgid ""
+"Every script which reads the configuration files can be forced to ignore "
+"them by using B<--no-conf> as the I<first> command-line option."
+msgstr ""
+
+#. type: SH
+#: ../doc/devscripts.conf.5:40
+#, no-wrap
+msgid "PACKAGE-WIDE VARIABLES"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:42
+msgid "The currently recognised package-wide variables are:"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:54
+msgid ""
+"These variables control scripts which change directory to find a "
+"I<debian/changelog> file or suchlike, and some other miscellaneous cases. "
+"In order to prevent unwanted, even possibly dangerous, behaviour, these "
+"variables control when actions will be performed. The scripts which "
+"currently make use of these variables are: B<debc>, B<debchange>/B<dch>, "
+"B<debclean>, B<debi>, B<debrelease>, B<debuild> and B<uscan>, but this list "
+"may change with time (and I may not remember to update this manpage). "
+"Please see the manpages of individual scripts for details of the specific "
+"behaviour for each script."
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:58
+msgid "B<devscripts>(1) and I</usr/share/doc/devscripts/README.gz.>"
+msgstr ""
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:60
+msgid ""
+"This manpage was written for the B<devscripts> package by the package "
+"maintainer Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
diff --git a/po4a/po/fr.po b/po4a/po/fr.po
new file mode 100644
index 0000000..05af1af
--- /dev/null
+++ b/po4a/po/fr.po
@@ -0,0 +1,30665 @@
+# French translation of devscripts manual pages.
+# Copyright (C) 2004-2018 Debian French l10n team <debian-l10n-french@lists.debian.org>.
+# This file is distributed under the same license as the devscripts package.
+#
+# Nicolas François <nicolas.francois@centraliens.net>, 2004-2009.
+# DELACOUR Guillaume <guillaume.delacour@gmail.com>, 2005.
+# Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>, 2006.
+# Thomas Huriaux <thomas.huriaux@gmail.com>, 2006.
+# Julien Cristau <jcristau@debian.org>, 2006-2007.
+# PHAN Thi Thanh <pthanh2003@hotmail.com>, 2009.
+# David Prévot <david@tilapin.org>, 2010-2014.
+# Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>, 2017-2018.
+# Xavier Guimard <yadd@debian.org>, 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: devscripts\n"
+"POT-Creation-Date: 2023-04-05 11:18+0200\n"
+"PO-Revision-Date: 2023-02-10 18:09+0400\n"
+"Last-Translator: Xavier Guimard <yadd@debian.org>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\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"
+"X-Generator: Poedit 3.2.2\n"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1
+#, no-wrap
+msgid "ANNOTATE-OUTPUT"
+msgstr "ANNOTATE-OUTPUT"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1 ../scripts/archpath.1:1
+#: ../scripts/checkbashisms.1:1 ../scripts/cvs-debc.1:1 ../scripts/cvs-debi.1:1
+#: ../scripts/cvs-debrelease.1:1 ../scripts/cvs-debuild.1:1 ../scripts/dcmd.1:1
+#: ../scripts/debc.1:1 ../scripts/debchange.1:1 ../scripts/debclean.1:1
+#: ../scripts/debdiff.1:1 ../scripts/debdiff-apply.1:15 ../scripts/debi.1:1
+#: ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1
+#: ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/dep3changelog.1:1
+#: ../doc/devscripts.1:1 ../scripts/dpkg-genbuilddeps.1:1 ../doc/edit-patch.1:1
+#: ../scripts/dscextract.1:1 ../scripts/dscverify.1:1
+#: ../scripts/getbuildlog.1:1 ../scripts/grep-excuses.1:1
+#: ../scripts/list-unreleased.1:1 ../scripts/manpage-alert.1:1
+#: ../scripts/mergechanges.1:1 ../scripts/nmudiff.1:1
+#: ../scripts/plotchangelog.1:1 ../scripts/pts-subscribe.1:1
+#: ../scripts/rc-alert.1:1 ../doc/suspicious-source.1:15 ../scripts/uupdate.1:1
+#: ../doc/what-patch.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../doc/wrap-and-sort.1:15 ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "Debian Utilities"
+msgstr "Utilitaires Debian"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1 ../scripts/archpath.1:1
+#: ../scripts/checkbashisms.1:1 ../scripts/cvs-debc.1:1 ../scripts/cvs-debi.1:1
+#: ../scripts/cvs-debrelease.1:1 ../scripts/cvs-debuild.1:1 ../scripts/dcmd.1:1
+#: ../scripts/debc.1:1 ../scripts/debchange.1:1 ../scripts/debclean.1:1
+#: ../scripts/debdiff.1:1 ../scripts/debdiff-apply.1:15 ../scripts/debi.1:1
+#: ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1
+#: ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/dep3changelog.1:1
+#: ../doc/devscripts.1:1 ../scripts/dpkg-depcheck.1:1
+#: ../scripts/dpkg-genbuilddeps.1:1 ../doc/edit-patch.1:1
+#: ../scripts/dscextract.1:1 ../scripts/dscverify.1:1
+#: ../scripts/getbuildlog.1:1 ../scripts/grep-excuses.1:1
+#: ../scripts/list-unreleased.1:1 ../scripts/manpage-alert.1:1
+#: ../scripts/mergechanges.1:1 ../scripts/nmudiff.1:1
+#: ../scripts/plotchangelog.1:1 ../scripts/pts-subscribe.1:1
+#: ../scripts/rc-alert.1:1 ../doc/suspicious-source.1:15 ../scripts/uupdate.1:1
+#: ../doc/what-patch.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../doc/wrap-and-sort.1:15 ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "DEBIAN"
+msgstr "DEBIAN"
+
+#. type: SH
+#: ../scripts/annotate-output.1:2 ../scripts/archpath.1:2 ../scripts/bts.pl:39
+#: ../scripts/build-rdeps.pl:22 ../scripts/chdist.pl:18
+#: ../scripts/checkbashisms.1:2 ../scripts/cowpoke.1:18 ../scripts/cvs-debc.1:2
+#: ../scripts/cvs-debi.1:2 ../scripts/cvs-debrelease.1:2
+#: ../scripts/cvs-debuild.1:2 ../scripts/dcmd.1:2 ../scripts/dd-list.1:18
+#: ../scripts/debc.1:2 ../scripts/debchange.1:2 ../scripts/debcheckout.pl:24
+#: ../scripts/debclean.1:2 ../scripts/debcommit.pl:3 ../scripts/debdiff.1:2
+#: ../scripts/debdiff-apply.1:17 ../scripts/debi.1:2 ../scripts/debpkg.1:2
+#: ../scripts/debrepro.pod:1 ../scripts/debrelease.1:2
+#: ../scripts/deb-why-removed.pl:196 ../scripts/debrsign.1:2
+#: ../scripts/debsign.1:2 ../scripts/debsnap.1:3 ../scripts/debuild.1:2
+#: ../scripts/desktop2menu.pl:24 ../scripts/dep3changelog.1:2
+#: ../doc/devscripts.1:2 ../scripts/dget.pl:565 ../scripts/diff2patches.1:2
+#: ../scripts/dpkg-depcheck.1:2 ../scripts/dpkg-genbuilddeps.1:2
+#: ../doc/edit-patch.1:2 ../scripts/dscextract.1:2 ../scripts/dscverify.1:2
+#: ../scripts/getbuildlog.1:2 ../scripts/git-deborig.pl:20
+#: ../scripts/grep-excuses.1:2 ../scripts/hardening-check.pl:521
+#: ../scripts/list-unreleased.1:2 ../scripts/ltnu.pod:1
+#: ../scripts/manpage-alert.1:2 ../scripts/mass-bug.pl:21
+#: ../scripts/mergechanges.1:2 ../scripts/mk-build-deps.pl:24
+#: ../scripts/mk-origtargz.pl:25 ../scripts/namecheck.pl:3
+#: ../scripts/nmudiff.1:2 ../scripts/origtargz.pl:20
+#: ../scripts/plotchangelog.1:2 ../scripts/pts-subscribe.1:2
+#: ../scripts/rc-alert.1:2 ../scripts/rmadison.pl:260 ../scripts/sadt.pod:17
+#: ../scripts/salsa.pl:3 ../doc/suspicious-source.1:17 ../scripts/svnpath.pl:3
+#: ../scripts/tagpending.pl:80 ../scripts/transition-check.pl:23
+#: ../scripts/uscan.pl:34 ../scripts/uupdate.1:2 ../doc/what-patch.1:2
+#: ../scripts/whodepends.1:2 ../scripts/who-uploads.1:2
+#: ../scripts/who-permits-upload.pl:48 ../scripts/wnpp-alert.1:2
+#: ../scripts/wnpp-check.1:2 ../doc/wrap-and-sort.1:16
+#: ../doc/devscripts.conf.5:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOM"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:4
+msgid "annotate-output - annotate program output with time and stream"
+msgstr ""
+"annotate-output - Annoter la sortie d'un programme avec la date et les flux"
+
+#. type: SH
+#: ../scripts/annotate-output.1:4 ../scripts/archpath.1:4 ../scripts/bts.pl:191
+#: ../scripts/build-rdeps.pl:26 ../scripts/chdist.pl:22
+#: ../scripts/checkbashisms.1:4 ../scripts/cowpoke.1:20 ../scripts/cvs-debc.1:4
+#: ../scripts/cvs-debi.1:4 ../scripts/cvs-debrelease.1:4
+#: ../scripts/cvs-debuild.1:4 ../scripts/dcmd.1:4 ../scripts/dd-list.1:21
+#: ../scripts/debc.1:4 ../scripts/debchange.1:4 ../scripts/debcheckout.pl:28
+#: ../scripts/debclean.1:4 ../scripts/debcommit.pl:7 ../scripts/debdiff.1:4
+#: ../scripts/debdiff-apply.1:20 ../scripts/debi.1:4 ../scripts/debpkg.1:4
+#: ../scripts/debrepro.pod:5 ../scripts/debrelease.1:4
+#: ../scripts/deb-why-removed.pl:200 ../scripts/debrsign.1:4
+#: ../scripts/debsign.1:4 ../scripts/debsnap.1:6 ../scripts/debuild.1:4
+#: ../scripts/desktop2menu.pl:28 ../scripts/dep3changelog.1:4
+#: ../scripts/dget.pl:569 ../scripts/dpkg-depcheck.1:4
+#: ../scripts/dpkg-genbuilddeps.1:4 ../doc/edit-patch.1:6
+#: ../scripts/dscextract.1:4 ../scripts/dscverify.1:4
+#: ../scripts/getbuildlog.1:4 ../scripts/git-deborig.pl:24
+#: ../scripts/grep-excuses.1:4 ../scripts/hardening-check.pl:525
+#: ../scripts/list-unreleased.1:4 ../scripts/ltnu.pod:5
+#: ../scripts/manpage-alert.1:4 ../scripts/mass-bug.pl:25
+#: ../scripts/mergechanges.1:4 ../scripts/mk-build-deps.pl:28
+#: ../scripts/mk-origtargz.pl:29 ../scripts/nmudiff.1:4
+#: ../scripts/origtargz.pl:24 ../scripts/plotchangelog.1:4
+#: ../scripts/pts-subscribe.1:4 ../scripts/rc-alert.1:4
+#: ../scripts/rmadison.pl:264 ../scripts/sadt.pod:21 ../scripts/salsa.pl:7
+#: ../doc/suspicious-source.1:21 ../scripts/svnpath.pl:7
+#: ../scripts/tagpending.pl:84 ../scripts/transition-check.pl:27
+#: ../scripts/uscan.pl:38 ../scripts/uupdate.1:4 ../doc/what-patch.1:5
+#: ../scripts/whodepends.1:4 ../scripts/who-uploads.1:4
+#: ../scripts/who-permits-upload.pl:52 ../scripts/wnpp-alert.1:4
+#: ../scripts/wnpp-check.1:4 ../doc/wrap-and-sort.1:18
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "SYNOPSIS"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:6
+msgid "B<annotate-output> [I<options>] I<program> [I<args> ...]"
+msgstr "B<annotate-output> [I<options>] I<programme> [I<paramètres> ...]"
+
+#. type: SH
+#: ../scripts/annotate-output.1:6 ../scripts/archpath.1:12
+#: ../scripts/bts.pl:195 ../scripts/build-rdeps.pl:30 ../scripts/chdist.pl:26
+#: ../scripts/checkbashisms.1:8 ../scripts/cowpoke.1:24 ../scripts/cvs-debc.1:6
+#: ../scripts/cvs-debi.1:6 ../scripts/cvs-debrelease.1:7
+#: ../scripts/cvs-debuild.1:7 ../scripts/dcmd.1:6 ../scripts/dd-list.1:26
+#: ../scripts/debc.1:6 ../scripts/debchange.1:8 ../scripts/debcheckout.pl:40
+#: ../scripts/debclean.1:6 ../scripts/debcommit.pl:11 ../scripts/debdiff.1:15
+#: ../scripts/debdiff-apply.1:27 ../scripts/debi.1:6 ../scripts/debpkg.1:6
+#: ../scripts/debrepro.pod:9 ../scripts/debrelease.1:6
+#: ../scripts/deb-reversion.dbk:82 ../scripts/deb-why-removed.pl:204
+#: ../scripts/debrsign.1:7 ../scripts/debsign.1:6 ../scripts/debsnap.1:14
+#: ../scripts/debuild.1:10 ../scripts/desktop2menu.pl:34
+#: ../scripts/dep3changelog.1:6 ../doc/devscripts.1:4 ../scripts/dget.pl:579
+#: ../scripts/diff2patches.1:10 ../scripts/dpkg-depcheck.1:6
+#: ../scripts/dpkg-genbuilddeps.1:6 ../doc/edit-patch.1:11
+#: ../scripts/dscextract.1:6 ../scripts/dscverify.1:6
+#: ../scripts/getbuildlog.1:8 ../scripts/git-deborig.pl:28
+#: ../scripts/grep-excuses.1:6 ../scripts/hardening-check.pl:532
+#: ../scripts/list-unreleased.1:6 ../scripts/ltnu.pod:13
+#: ../scripts/manpage-alert.1:6 ../scripts/mass-bug.pl:29
+#: ../scripts/mergechanges.1:6 ../scripts/mk-build-deps.pl:34
+#: ../scripts/mk-origtargz.pl:39 ../scripts/nmudiff.1:6
+#: ../scripts/origtargz.pl:34 ../scripts/plotchangelog.1:7
+#: ../scripts/pts-subscribe.1:8 ../scripts/rc-alert.1:8
+#: ../scripts/rmadison.pl:272 ../scripts/sadt.pod:25 ../scripts/salsa.pl:30
+#: ../doc/suspicious-source.1:24 ../scripts/svnpath.pl:17
+#: ../scripts/tagpending.pl:88 ../scripts/transition-check.pl:33
+#: ../scripts/uscan.pl:42 ../scripts/uupdate.1:10 ../doc/what-patch.1:8
+#: ../scripts/whodepends.1:6 ../scripts/who-uploads.1:6
+#: ../scripts/who-permits-upload.pl:56 ../scripts/wnpp-alert.1:8
+#: ../scripts/wnpp-check.1:8 ../doc/wrap-and-sort.1:22
+#: ../doc/devscripts.conf.5:4
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "DESCRIPTION"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:10
+msgid ""
+"B<annotate-output> will execute the specified program, while prepending "
+"every line with the current time and O for stdout and E for stderr."
+msgstr ""
+"B<annotate-output> va lancer le programme indiqué en ajoutant au début de "
+"chaque ligne l'heure actuelle ainsi qu'un O pour la sortie standard "
+"(\"stdout\") et un E pour la sortie d'erreur (\"stderr\")."
+
+#. type: SH
+#: ../scripts/annotate-output.1:11 ../scripts/bts.pl:247
+#: ../scripts/build-rdeps.pl:46 ../scripts/chdist.pl:33
+#: ../scripts/checkbashisms.1:23 ../scripts/cowpoke.1:29
+#: ../scripts/cvs-debc.1:24 ../scripts/cvs-debi.1:28
+#: ../scripts/cvs-debrelease.1:21 ../scripts/cvs-debuild.1:32
+#: ../scripts/dcmd.1:15 ../scripts/dd-list.1:58 ../scripts/debc.1:64
+#: ../scripts/debchange.1:149 ../scripts/debcheckout.pl:68
+#: ../scripts/debclean.1:63 ../scripts/debcommit.pl:19 ../scripts/debdiff.1:52
+#: ../scripts/debdiff-apply.1:61 ../scripts/debi.1:65
+#: ../scripts/debrepro.pod:92 ../scripts/debrelease.1:56
+#: ../scripts/deb-reversion.dbk:128 ../scripts/deb-why-removed.pl:209
+#: ../scripts/debrsign.1:30 ../scripts/debsign.1:39 ../scripts/debsnap.1:26
+#: ../scripts/debuild.1:256 ../scripts/dep3changelog.1:15
+#: ../scripts/dget.pl:620 ../scripts/diff2patches.1:16
+#: ../scripts/dpkg-depcheck.1:15 ../scripts/dscextract.1:14
+#: ../scripts/dscverify.1:17 ../scripts/getbuildlog.1:24
+#: ../scripts/git-deborig.pl:47 ../scripts/grep-excuses.1:14
+#: ../scripts/hardening-check.pl:593 ../scripts/list-unreleased.1:12
+#: ../scripts/ltnu.pod:27 ../scripts/manpage-alert.1:12
+#: ../scripts/mass-bug.pl:59 ../scripts/mk-build-deps.pl:44
+#: ../scripts/mk-origtargz.pl:64 ../scripts/nmudiff.1:24
+#: ../scripts/origtargz.pl:100 ../scripts/plotchangelog.1:43
+#: ../scripts/pts-subscribe.1:18 ../scripts/rc-alert.1:17
+#: ../scripts/rmadison.pl:281 ../scripts/sadt.pod:42 ../scripts/salsa.pl:437
+#: ../doc/suspicious-source.1:34 ../scripts/tagpending.pl:94
+#: ../scripts/transition-check.pl:42 ../scripts/uupdate.1:54
+#: ../doc/what-patch.1:15 ../scripts/whodepends.1:10
+#: ../scripts/who-uploads.1:15 ../scripts/who-permits-upload.pl:62
+#: ../scripts/wnpp-alert.1:17 ../scripts/wnpp-check.1:16
+#: ../doc/wrap-and-sort.1:35
+#, no-wrap
+msgid "OPTIONS"
+msgstr "OPTIONS"
+
+#. type: TP
+#: ../scripts/annotate-output.1:12
+#, no-wrap
+msgid "B<+FORMAT>"
+msgstr "B<+FORMAT>"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:16
+msgid ""
+"Controls the timestamp format, as per B<date>(1). Defaults to \"%H:%M:%S\"."
+msgstr ""
+"Contrôler le format d'horodatage, comme pour B<date>(1). \"%H:%M:%S\" par "
+"défaut."
+
+#. type: TP
+#: ../scripts/annotate-output.1:16 ../scripts/chdist.pl:37
+#: ../scripts/dd-list.1:59 ../scripts/debcheckout.pl:96
+#: ../scripts/debdiff-apply.1:62 ../scripts/debsnap.1:73 ../scripts/dget.pl:680
+#: ../scripts/dpkg-depcheck.1:96 ../scripts/getbuildlog.1:25
+#: ../scripts/mk-build-deps.pl:111 ../scripts/rmadison.pl:305
+#: ../scripts/sadt.pod:64 ../doc/suspicious-source.1:35 ../doc/what-patch.1:17
+#: ../doc/wrap-and-sort.1:36
+#, no-wrap
+msgid "B<-h>, B<--help>"
+msgstr "B<-h>, B<--help>"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:19 ../scripts/debchange.1:402
+#: ../scripts/debclean.1:90 ../scripts/debrelease.1:102
+#: ../scripts/debsign.1:102 ../scripts/dep3changelog.1:19
+#: ../scripts/dscverify.1:40 ../scripts/nmudiff.1:89
+#: ../scripts/pts-subscribe.1:31 ../scripts/uupdate.1:104
+#: ../scripts/who-uploads.1:48
+msgid "Display a help message and exit successfully."
+msgstr "Afficher un message d'aide et quitter avec succès."
+
+#. type: =head1
+#: ../scripts/annotate-output.1:20 ../scripts/dscextract.1:30
+#: ../scripts/ltnu.pod:84
+#, no-wrap
+msgid "EXAMPLE"
+msgstr "EXEMPLE"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:30
+#, no-wrap
+msgid ""
+"$ annotate-output make\n"
+"21:41:21 I: Started make\n"
+"21:41:21 O: gcc -Wall program.c\n"
+"21:43:18 E: program.c: Couldn't compile, and took me ages to find out\n"
+"21:43:19 E: collect2: ld returned 1 exit status\n"
+"21:43:19 E: make: *** [all] Error 1\n"
+"21:43:19 I: Finished with exitcode 2\n"
+msgstr ""
+"$ annotate-output make\n"
+"21:41:21 I: make démarré\n"
+"21:41:21 O: gcc -Wall programme.c\n"
+"21:43:18 E: programme.c: n'a pas compilé et durée de diagnostic dépassée\n"
+"21:43:19 E: collect2: ld a retourné un code de sortie 1\n"
+"21:43:19 E: make: *** [all] Erreur 1\n"
+"21:43:19 I: terminé avec un code de sortie 2\n"
+
+#. type: SH
+#: ../scripts/annotate-output.1:32 ../scripts/debsnap.1:156
+#: ../scripts/rc-alert.1:119 ../scripts/whodepends.1:17
+#, no-wrap
+msgid "BUGS"
+msgstr "BOGUES"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:36
+msgid ""
+"Since stdout and stderr are processed in parallel, it can happen that some "
+"lines received on stdout will show up before later-printed stderr lines (and "
+"vice-versa)."
+msgstr ""
+"Puisque stdout et stderr sont traitées en parallèle, il peut arriver que "
+"quelques lignes reçues sur stdout soient affichées avant des lignes de "
+"stderr (et inversement)."
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:41
+msgid ""
+"This is unfortunately very hard to fix with the current annotation "
+"strategy. A fix would involve switching to PTRACE'ing the process. Giving "
+"nice a (much) higher priority over the executed program could however cause "
+"this behaviour to show up less frequently."
+msgstr ""
+"C'est malheureusement très difficile à corriger avec la stratégie "
+"d'annotation choisie. Une solution serait de passer à un suivi par PTRACE. "
+"Donner à nice une (bien) plus grande priorité par rapport au programme "
+"exécuté pourrait cependant éviter que ce comportement n'arrive trop "
+"fréquemment."
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:46
+msgid ""
+"The program does not work as well when the output is not linewise. In "
+"particular, when an interactive program asks for input, the question might "
+"not be shown until after you have answered it. This will give the "
+"impression that the annotated program has hung, while it has not."
+msgstr ""
+"Ce programme ne fonctionne pas non plus très bien si la sortie n'est pas "
+"faite ligne par ligne. En particulier, quand un programme interactif attend "
+"une entrée, la question peut ne pas être affichée tant que vous n'y avez pas "
+"répondu. Cela peut donner l'impression que le programme ainsi lancé a gelé, "
+"alors que ce n'est pas le cas."
+
+#. type: SH
+#: ../scripts/annotate-output.1:47 ../scripts/bts.pl:4316
+#: ../scripts/checkbashisms.1:72 ../scripts/cowpoke.1:379
+#: ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62
+#: ../scripts/cvs-debrelease.1:64 ../scripts/cvs-debuild.1:53
+#: ../scripts/dcmd.1:107 ../scripts/debc.1:125 ../scripts/debchange.1:482
+#: ../scripts/debcheckout.pl:231 ../scripts/debclean.1:110
+#: ../scripts/debcommit.pl:954 ../scripts/debdiff.1:251
+#: ../scripts/debdiff-apply.1:111 ../scripts/debi.1:132
+#: ../scripts/debrepro.pod:171 ../scripts/debrelease.1:132
+#: ../scripts/deb-reversion.dbk:247 ../scripts/deb-why-removed.pl:247
+#: ../scripts/debrsign.1:66 ../scripts/debsign.1:132 ../scripts/debsnap.1:138
+#: ../scripts/debuild.1:447 ../scripts/dep3changelog.1:28
+#: ../scripts/dget.pl:742 ../scripts/diff2patches.1:45
+#: ../scripts/dpkg-depcheck.1:118 ../scripts/dpkg-genbuilddeps.1:30
+#: ../scripts/dscverify.1:78 ../scripts/git-deborig.pl:79
+#: ../scripts/grep-excuses.1:61 ../scripts/hardening-check.pl:680
+#: ../scripts/list-unreleased.1:19 ../scripts/ltnu.pod:105
+#: ../scripts/mk-origtargz.pl:210 ../scripts/nmudiff.1:121
+#: ../scripts/origtargz.pl:162 ../scripts/plotchangelog.1:124
+#: ../scripts/pts-subscribe.1:51 ../scripts/rc-alert.1:121
+#: ../scripts/rmadison.pl:404 ../scripts/sadt.pod:74 ../scripts/salsa.pl:1029
+#: ../scripts/tagpending.pl:149 ../scripts/uscan.pl:2094
+#: ../scripts/uupdate.1:189 ../doc/what-patch.1:35
+#: ../scripts/who-permits-upload.pl:167 ../scripts/wnpp-alert.1:29
+#: ../scripts/wnpp-check.1:26 ../doc/devscripts.conf.5:54
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "VOIR AUSSI"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:49
+msgid "B<date>(1)"
+msgstr "B<date>(1)"
+
+#. type: SH
+#: ../scripts/annotate-output.1:50
+#, no-wrap
+msgid "SUPPORT"
+msgstr "AIDE"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:54
+msgid ""
+"This program is community-supported (meaning: you'll need to fix it "
+"yourself). Patches are however appreciated, as is any feedback (positive or "
+"negative)."
+msgstr ""
+"Ce programme est maintenu par la communauté (comprendre : vous allez devoir "
+"le corriger vous-même). Les rustines sont toutefois appréciées, ainsi que "
+"toute sorte de retour (positif ou non)."
+
+#. type: SH
+#: ../scripts/annotate-output.1:55 ../scripts/archpath.1:54
+#: ../scripts/build-rdeps.pl:547 ../scripts/checkbashisms.1:74
+#: ../scripts/cowpoke.1:385 ../scripts/cvs-debc.1:63 ../scripts/cvs-debi.1:67
+#: ../scripts/cvs-debrelease.1:68 ../scripts/cvs-debuild.1:58
+#: ../scripts/dcmd.1:110 ../scripts/dd-list.1:107 ../scripts/debc.1:129
+#: ../scripts/debchange.1:488 ../scripts/debcheckout.pl:236
+#: ../scripts/debclean.1:113 ../scripts/debcommit.pl:950
+#: ../scripts/debdiff.1:259 ../scripts/debi.1:135 ../scripts/debpkg.1:23
+#: ../scripts/debrepro.pod:175 ../scripts/debrelease.1:136
+#: ../scripts/deb-reversion.dbk:292 ../scripts/debrsign.1:70
+#: ../scripts/debsign.1:144 ../scripts/debuild.1:459
+#: ../scripts/desktop2menu.pl:52 ../scripts/dep3changelog.1:26
+#: ../scripts/dget.pl:734 ../scripts/diff2patches.1:48
+#: ../scripts/dpkg-genbuilddeps.1:36 ../scripts/dscextract.1:32
+#: ../scripts/dscverify.1:83 ../scripts/getbuildlog.1:41
+#: ../scripts/git-deborig.pl:83 ../scripts/grep-excuses.1:63
+#: ../scripts/hardening-check.pl:668 ../scripts/list-unreleased.1:21
+#: ../scripts/manpage-alert.1:28 ../scripts/mass-bug.pl:566
+#: ../scripts/mergechanges.1:28 ../scripts/mk-build-deps.pl:141
+#: ../scripts/mk-origtargz.pl:214 ../scripts/namecheck.pl:24
+#: ../scripts/nmudiff.1:125 ../scripts/origtargz.pl:166
+#: ../scripts/plotchangelog.1:126 ../scripts/pts-subscribe.1:56
+#: ../scripts/rc-alert.1:125 ../scripts/rmadison.pl:408
+#: ../scripts/salsa.pl:1033 ../scripts/svnpath.pl:96
+#: ../scripts/transition-check.pl:81 ../scripts/uscan.pl:2098
+#: ../scripts/uupdate.1:196 ../scripts/whodepends.1:19
+#: ../scripts/who-uploads.1:73 ../scripts/who-permits-upload.pl:162
+#: ../scripts/wnpp-alert.1:31 ../scripts/wnpp-check.1:36
+#: ../doc/devscripts.conf.5:58
+#, no-wrap
+msgid "AUTHOR"
+msgstr "AUTEUR"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:59
+msgid ""
+"B<annotate-output> was written by Jeroen van Wolffelaar "
+"E<lt>jeroen@wolffelaar.nlE<gt>. This manpage comes under the same copyright "
+"as annotate-output itself, read /usr/bin/annotate-output (or wherever you "
+"install it) for the details."
+msgstr ""
+"B<annotate-output> a été écrit par Jeroen van Wolffelaar "
+"E<lt>jeroen@wolffelaar.nlE<gt>. Cette page de manuel est distribuée sous la "
+"même licence que annotate-output lui-même, veuillez lire /usr/bin/annotate-"
+"output (ou à tout autre endroit où il est installé) pour les détails."
+
+#. type: TH
+#: ../scripts/archpath.1:1
+#, no-wrap
+msgid "ARCHPATH"
+msgstr "ARCHPATH"
+
+#. type: Plain text
+#: ../scripts/archpath.1:4
+msgid ""
+"archpath - output arch (tla/Bazaar) archive names, with support for branches"
+msgstr ""
+"archpath - Afficher les noms des archives arch (tla ou Bazaar), avec la "
+"gestion des branches"
+
+#. type: Plain text
+#: ../scripts/archpath.1:6
+msgid "B<archpath>"
+msgstr "B<archpath>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:9
+msgid "B<archpath> I<branch>"
+msgstr "B<archpath> I<branche>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:12
+msgid "B<archpath> I<branch>B<-->I<version>"
+msgstr "B<archpath> I<branche>B<-->I<version>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:15
+msgid ""
+"B<archpath> is intended to be run in an arch (tla or Bazaar) working copy."
+msgstr ""
+"B<archpath> est censé tourner dans une copie de travail arch (tla ou Bazaar)."
+
+#. type: Plain text
+#: ../scripts/archpath.1:20
+msgid ""
+"In its simplest usage, B<archpath> with no parameters outputs the package "
+"name (archive/category--branch--version) associated with the working copy."
+msgstr ""
+"Le cas d'utilisation le plus simple est le suivant : lancer B<archpath> sans "
+"paramètre entraîne l'affichage du nom du paquet (archive/categorie--branche--"
+"version) associé à la copie de travail."
+
+#. type: Plain text
+#: ../scripts/archpath.1:28
+msgid ""
+"If a parameter is given, it may either be a branch--version, in which case "
+"B<archpath> will output a corresponding package name in the current archive "
+"and category, or a plain branch name (without \\(oq--\"), in which case "
+"B<archpath> will output a corresponding package name in the current archive "
+"and category and with the same version as the current working copy."
+msgstr ""
+"Si un paramètre est passé, il peut être soit branche--version, auquel cas "
+"B<archpath> affiche le nom du paquet correspondant à l'archive actuelle et "
+"la catégorie, soit un nom de branche complet (sans \"--\"), auquel cas "
+"B<archpath> affiche le nom du paquet correspondant dans la même archive, la "
+"même catégorie, et à la même version que la copie de travail actuelle."
+
+#. type: Plain text
+#: ../scripts/archpath.1:32
+msgid ""
+"This is useful for branching. For example, if you're using Bazaar and you "
+"want to create a branch for a new feature, you might use a command like this:"
+msgstr ""
+"C'est utile pour la gestion des branches. Par exemple, si vous utilisez "
+"Bazaar et que vous voulez créer une branche pour une nouvelle "
+"fonctionnalité, vous pouvez utiliser une commande telle que :"
+
+#. type: Plain text
+#: ../scripts/archpath.1:37
+#, no-wrap
+msgid "CW<baz branch $(archpath) $(archpath new-feature)>\n"
+msgstr "CW<baz branch $(archpath) $(archpath new-feature)>\n"
+
+#. type: Plain text
+#: ../scripts/archpath.1:43
+msgid ""
+"Or if you want to tag your current code onto a \\(oqreleases\\(cq branch as "
+"version 1.0, you might use a command like this:"
+msgstr ""
+"Ou si vous voulez marquer votre code actuel comme étant une version 1.0 dans "
+"une branche \"releases\", vous pouvez utiliser une commande telle que :"
+
+#. type: Plain text
+#: ../scripts/archpath.1:48
+#, no-wrap
+msgid "CW<baz branch $(archpath) $(archpath releases--1.0)>\n"
+msgstr "CW<baz branch $(archpath) $(archpath releases--1.0)>\n"
+
+#. type: Plain text
+#: ../scripts/archpath.1:54
+msgid ""
+"That's much easier than using \\(oqbaz tree-version\\(cq to look up the "
+"package name and manually modifying the result."
+msgstr ""
+"C'est bien plus commode que d'utiliser \"baz tree-version\" pour récupérer "
+"le nom du paquet puis modifier le résultat manuellement."
+
+#. type: Plain text
+#: ../scripts/archpath.1:57
+msgid "B<archpath> was written by"
+msgstr "B<archpath> a été écrit par"
+
+#. type: Plain text
+#: ../scripts/archpath.1:59
+msgid "Colin Watson E<lt>cjwatson@debian.orgE<gt>."
+msgstr "Colin Watson E<lt>cjwatson@debian.orgE<gt>."
+
+#. type: Plain text
+#: ../scripts/archpath.1:63
+msgid ""
+"Like B<archpath>, this manual page is released under the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+"Comme B<archpath>, cette page de manuel est publiée sous la Licence Publique "
+"Générale de GNU, version 2 ou ultérieure."
+
+#. type: textblock
+#: ../scripts/bts.pl:41
+msgid ""
+"bts - developers' command line interface to the Debian Bug Tracking System"
+msgstr ""
+"bts - Interface en ligne de commande des dévelopeurs pour le système de "
+"bogues de Debian (BTS)"
+
+#. type: textblock
+#: ../scripts/bts.pl:193
+msgid ""
+"B<bts> [I<options>] I<command> [I<args>] [B<#>I<comment>] [B<.>|B<,> "
+"I<command> [I<args>] [B<#>I<comment>]] ..."
+msgstr ""
+"B<bts> [I<options>] I<commande> [I<paramètres>] [B<#>I<commentaire>] [B<.>|"
+"B<,> I<commande> [I<paramètres>] [B<#>I<commentaire>]] ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:197
+msgid ""
+"This is a command line interface to the Debian Bug Tracking System (BTS), "
+"intended mainly for use by developers. It lets the BTS be manipulated using "
+"simple commands that can be run at the prompt or in a script, does various "
+"sanity checks on the input, and constructs and sends a mail to the BTS "
+"control address for you. A local cache of web pages and e-mails from the BTS "
+"may also be created and updated."
+msgstr ""
+"C'est une interface au système de suivi de bogues en ligne de commande, "
+"principalement destinée à l'usage des développeurs. Elle permet de manipuler "
+"le BTS avec de simples commandes pouvant être lancées depuis une invite de "
+"commandes ou depuis un script, effectue diverses vérifications de la "
+"validité des données entrées, afin de créer et d'envoyer pour vous un "
+"message à l'adresse de contrôle du BTS. Un cache local des pages web et des "
+"messages du BTS peut aussi être créé et mis à jour."
+
+#. type: textblock
+#: ../scripts/bts.pl:205
+msgid ""
+"In general, the command line interface is the same as what you would write "
+"in a mail to control@bugs.debian.org, just prefixed with \"bts\". For "
+"example:"
+msgstr ""
+"En général, cette interface en ligne de commande est la même que si vous "
+"vouliez écrire un message à control@bugs.debian.org, simplement précédée de "
+"\"bts\". Par exemple :"
+
+#. type: verbatim
+#: ../scripts/bts.pl:209
+#, no-wrap
+msgid ""
+" % bts severity 69042 normal\n"
+" % bts merge 69042 43233\n"
+" % bts retitle 69042 blah blah\n"
+"\n"
+msgstr ""
+" % bts severity 69042 normal\n"
+" % bts merge 69042 43233\n"
+" % bts retitle 69042 bla bla\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:213
+msgid ""
+"A few additional commands have been added for your convenience, and this "
+"program is less strict about what constitutes a valid bug number. For "
+"example, \"severity Bug#85942 normal\" is understood, as is \"severity "
+"#85942 normal\". (Of course, your shell may regard \"#\" as a comment "
+"character though, so you may need to quote it!)"
+msgstr ""
+"Quelques commandes supplémentaires ont été ajoutées pour votre confort, et "
+"ce programme est moins strict sur la validité des numéros de bogue. Par "
+"exemple, \"severity Bug#85942 normal\" est compris, tout comme \"severity "
+"#85942 normal\". (Bien sûr, votre interpréteur de commandes peut comprendre "
+"\"#\" comme un caractère de commentaire, donc il faudra probablement le "
+"mettre entre guillemets.)"
+
+#. type: textblock
+#: ../scripts/bts.pl:219
+msgid ""
+"Also, for your convenience, this program allows you to abbreviate commands "
+"to the shortest unique substring (similar to how cvs lets you abbreviate "
+"commands). So it understands things like \"bts cl 85942\"."
+msgstr ""
+"De même, pour vous faciliter la vie, ce programme vous permet d'abréger les "
+"commandes en la plus courte sous-chaîne unique (d'une manière similaire à "
+"celle de cvs). Ainsi des choses comme \"bts cl 85942\" sont comprises."
+
+#. type: textblock
+#: ../scripts/bts.pl:223
+msgid ""
+"It is also possible to include a comment in the mail sent to the BTS. If "
+"your shell does not strip out the comment in a command like \"bts severity "
+"30321 normal #inflated severity\", then this program is smart enough to "
+"figure out where the comment is, and include it in the email. Note that "
+"most shells do strip out such comments before they get to the program, "
+"unless the comment is quoted. (Something like \"bts severity #85942 "
+"normal\" will not be treated as a comment!)"
+msgstr ""
+"Il est aussi possible d'inclure un commentaire dans le message envoyé au "
+"BTS. Si votre interpréteur de commandes ne supprime pas le commentaire dans "
+"une commande telle que \"bts severity 30321 normal #sévérité augmentée\", "
+"alors ce programme se débrouille pour trouver où se situe le commentaire et "
+"pour l'inclure dans le message. Remarquez que la plupart des interpréteurs "
+"de commandes ne tiennent pas compte de ce type de commentaires avant "
+"d'exécuter le programme, à moins que ce commentaire soit placé entre "
+"guillemets. (Quelque chose comme \"bts severity #85942 normal\" ne sera pas "
+"traité comme un commentaire.)"
+
+#. type: textblock
+#: ../scripts/bts.pl:231
+msgid ""
+"You can specify multiple commands by separating them with a single dot, "
+"rather like B<update-rc.d>; a single comma may also be used; all the "
+"commands will then be sent in a single mail. It is important the dot/comma "
+"is surrounded by whitespace so it is not mistaken for part of a command. "
+"For example (quoting where necessary so that B<bts> sees the comment):"
+msgstr ""
+"Vous pouvez indiquer plusieurs commandes en les séparant par un simple "
+"point, comme pour B<update-rc.d> ; une simple virgule peut aussi être "
+"utilisée ; toutes les commandes seront envoyées dans un seul message. Il est "
+"nécessaire d'entourer les points et les virgules par des espaces pour ne pas "
+"être confondus avec des portions de commandes. Par exemple (en protégeant ce "
+"qui doit l'être de manière à ce que B<bts> voie le commentaire "
+"correctement) :"
+
+#. type: verbatim
+#: ../scripts/bts.pl:237
+#, no-wrap
+msgid ""
+" % bts severity 95672 normal , merge 95672 95673 \\#they are the same!\n"
+"\n"
+msgstr ""
+" % bts severity 95672 normal , merge 95672 95673 \\#Il s\\'agit des mêmes !\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:239
+msgid ""
+"The abbreviation \"it\" may be used to refer to the last mentioned bug "
+"number, so you could write:"
+msgstr ""
+"L'abréviation \"it\" peut être utilisée pour désigner le dernier numéro de "
+"bogue mentionné, donc vous pouvez écrire :"
+
+#. type: verbatim
+#: ../scripts/bts.pl:242
+#, no-wrap
+msgid ""
+" % bts severity 95672 wishlist , retitle it \"bts: please add a --foo option\"\n"
+"\n"
+msgstr ""
+" % bts severity 95672 wishlist , retitle it \"bts : veuillez ajouter une option --toto\"\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:244
+msgid ""
+"Please use this program responsibly, and do take our users into "
+"consideration."
+msgstr ""
+"Merci d'utiliser ce programme d'une façon raisonnable et de prendre nos "
+"utilisateurs en considération."
+
+#. type: textblock
+#: ../scripts/bts.pl:249
+msgid ""
+"B<bts> examines the B<devscripts> configuration files as described below. "
+"Command line options override the configuration file settings, though."
+msgstr ""
+"B<bts> examine les fichiers de configuration de B<devscripts> comme décrit "
+"ci-dessous. Les options en ligne de commande permettent de remplacer les "
+"paramètres des fichiers de configuration."
+
+#. type: =item
+#: ../scripts/bts.pl:255
+msgid "B<-o>, B<--offline>"
+msgstr "B<-o>, B<--offline>"
+
+#. type: textblock
+#: ../scripts/bts.pl:257
+msgid ""
+"Make B<bts> use cached bugs for the B<show> and B<bugs> commands, if a cache "
+"is available for the requested data. See the B<cache> command, below for "
+"information on setting up a cache."
+msgstr ""
+"Faire en sorte que B<bts> utilise la mise en cache des bogues pour les "
+"commandes B<show> et B<bugs>, si un cache est disponible pour les données "
+"demandées. Veuillez vous reporter à la commande B<cache> ci-dessous pour "
+"plus d'informations sur la mise en place d'un cache."
+
+#. type: =item
+#: ../scripts/bts.pl:261
+msgid "B<--online>, B<--no-offline>"
+msgstr "B<--online>, B<--no-offline>"
+
+#. type: textblock
+#: ../scripts/bts.pl:263
+msgid ""
+"Opposite of B<--offline>; overrides any configuration file directive to work "
+"offline."
+msgstr ""
+"Contraire de l'option B<--offline> ; écraser toute directive venant d'un "
+"fichier de configuration afin de travailler hors ligne."
+
+#. type: =item
+#: ../scripts/bts.pl:266
+msgid "B<-n>, B<--no-action>"
+msgstr "B<-n>, B<--no-action>"
+
+#. type: textblock
+#: ../scripts/bts.pl:268
+msgid "Do not send emails but print them to standard output."
+msgstr "Ne pas envoyer le courrier, mais l'afficher sur la sortie standard."
+
+#. type: =item
+#: ../scripts/bts.pl:270
+msgid "B<--cache>, B<--no-cache>"
+msgstr "B<--cache>, B<--no-cache>"
+
+#. type: textblock
+#: ../scripts/bts.pl:272
+msgid ""
+"Should we attempt to cache new versions of BTS pages when performing B<show>/"
+"B<bugs> commands? Default is to cache."
+msgstr ""
+"Essayer ou non de mettre en cache de nouvelles versions des pages du BTS "
+"lorsque des commandes B<show> ou B<bugs> sont lancées. Par défaut, la mise "
+"en cache est activée."
+
+#. type: =item
+#: ../scripts/bts.pl:275
+msgid "B<--cache-mode=>{B<min>|B<mbox>|B<full>}"
+msgstr "B<--cache-mode=>{B<min>|B<mbox>|B<full>}"
+
+#. type: textblock
+#: ../scripts/bts.pl:277
+msgid ""
+"When running a B<bts cache> command, should we only mirror the basic bug "
+"(B<min>), or should we also mirror the mbox version (B<mbox>), or should we "
+"mirror the whole thing, including the mbox and the boring attachments to the "
+"BTS bug pages and the acknowledgement emails (B<full>)? Default is B<min>."
+msgstr ""
+"Lors d'une utilisation de la commande B<bts cache>, seulement faire un "
+"miroir basic du bogue (B<min>), inclure aussi la version mbox (B<mbox>), ou "
+"tout l'ensemble, à savoir la mbox et les différents fichiers joints des "
+"pages du BTS, ainsi que les messages de confirmation (B<full>). Par défaut, "
+"B<min> est utilisé."
+
+#. type: =item
+#: ../scripts/bts.pl:283
+msgid "B<--cache-delay=>I<seconds>"
+msgstr "B<--cache-delay=>I<secondes>"
+
+#. type: textblock
+#: ../scripts/bts.pl:285
+msgid ""
+"Time in seconds to delay between each download, to avoid hammering the BTS "
+"web server. Default is 5 seconds."
+msgstr ""
+"Délai (en secondes) entre deux téléchargements, afin d'éviter de surcharger "
+"le serveur web du BTS. Il est de 5 secondes par défaut."
+
+#. type: =item
+#: ../scripts/bts.pl:288
+msgid "B<--mbox>"
+msgstr "B<--mbox>"
+
+#. type: textblock
+#: ../scripts/bts.pl:290
+msgid ""
+"Open a mail reader to read the mbox corresponding to a given bug number for "
+"B<show> and B<bugs> commands."
+msgstr ""
+"Ouvrir un client de messagerie pour parcourir la boîte de messagerie "
+"(\"mbox\") correspondant à un numéro de bogue donné, pour les commandes "
+"B<show> et B<bugs>."
+
+#. type: =item
+#: ../scripts/bts.pl:293
+msgid "B<--mailreader=>I<READER>"
+msgstr "B<--mailreader=>I<CLIENT_DE_MESSAGERIE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:295
+msgid ""
+"Specify the command to read the mbox. Must contain a \"B<%s>\" string "
+"(unquoted!), which will be replaced by the name of the mbox file. The "
+"command will be split on white space and will not be passed to a shell. "
+"Default is 'B<mutt -f %s>'. (Also, B<%%> will be substituted by a single "
+"B<%> if this is needed.)"
+msgstr ""
+"Indiquer la commande pour lire la boîte de messagerie (\"mbox\"). Doit "
+"contenir une chaîne \"B<%s>\", qui sera remplacée par le nom du fichier "
+"mbox. La commande sera découpée en fonction des espaces et ne sera pas "
+"passée à un interpréteur de commandes (\"shell\"). Par défaut, \"B<mutt> B<-"
+"f> B<%s>\" sera utilisé (par ailleurs B<%%> sera remplacé par un simple B<%> "
+"si nécessaire)."
+
+#. type: =item
+#: ../scripts/bts.pl:301
+msgid "B<--cc-addr=>I<CC_EMAIL_ADDRESS>"
+msgstr "B<--cc-addr=>I<CC_ADRESSES_ÉLECTRONIQUES>"
+
+#. type: textblock
+#: ../scripts/bts.pl:303
+msgid ""
+"Send carbon copies to a list of users. I<CC_EMAIL_ADDRESS> should be a comma-"
+"separated list of email addresses. Multiple options add more CCs."
+msgstr ""
+"Envoyer une copie conforme du message à une liste d'utilisateurs. "
+"I<CC_EMAIL_ADDRESS> doit être une liste d'adresses séparées par des "
+"virgules. Peut être utilisée plusieurs fois pour avoir davantage de copies."
+
+#. type: =item
+#: ../scripts/bts.pl:306
+msgid "B<--use-default-cc>"
+msgstr "B<--use-default-cc>"
+
+#. type: textblock
+#: ../scripts/bts.pl:308
+msgid ""
+"Add the addresses specified in the configuration file option "
+"B<BTS_DEFAULT_CC> to the list specified using B<--cc-addr>. This is the "
+"default."
+msgstr ""
+"Ajouter les adresses indiquées par l'option B<BTS_DEFAULT_CC> du fichier de "
+"configuration à la liste indiquée en utilisant B<--cc-addr>. C'est le "
+"comportement par défaut."
+
+#. type: =item
+#: ../scripts/bts.pl:312
+msgid "B<--no-use-default-cc>"
+msgstr "B<--no-use-default-cc>"
+
+#. type: textblock
+#: ../scripts/bts.pl:314
+msgid ""
+"Do not add addresses specified in B<BTS_DEFAULT_CC> to the carbon copy list."
+msgstr ""
+"Ne pas ajouter les adresses indiquées dans B<BTS_DEFAULT_CC> dans la liste "
+"des copies conformes."
+
+#. type: =item
+#: ../scripts/bts.pl:317 ../scripts/mass-bug.pl:112
+msgid "B<--sendmail=>I<SENDMAILCMD>"
+msgstr "B<--sendmail=>I<COMMANDE_D_ENVOI_DE_MESSAGE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:319
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will not be passed to a shell. Default is F</usr/sbin/sendmail>. The "
+"B<-t> option will be automatically added if the command is F</usr/sbin/"
+"sendmail> or F</usr/sbin/exim*>. For other mailers, if they require a B<-t> "
+"option, this must be included in the I<SENDMAILCMD>, for example: B<--"
+"sendmail=\"/usr/sbin/mymailer -t\">."
+msgstr ""
+"Indiquer la commande d'envoi de message à utiliser. La commande sera séparée "
+"à chaque espace, et non passée à l'interpréteur de commandes. La valeur par "
+"défaut est F</usr/sbin/sendmail>. L'option B<-t> est ajoutée automatiquement "
+"si la commande est F</usr/sbin/sendmail> ou F</usr/sbin/exim*>. Pour les "
+"autres logiciels, l'option B<-t> doit être incluse dans "
+"I<COMMANDE_D_ENVOI_DE_MESSAGE> si nécessaire, par exemple : B<--sendmail=\"/"
+"usr/sbin/monutilitaire -t\">."
+
+#. type: TP
+#: ../scripts/bts.pl:326 ../scripts/nmudiff.1:34
+#, no-wrap
+msgid "B<--mutt>"
+msgstr "B<--mutt>"
+
+#. type: textblock
+#: ../scripts/bts.pl:328
+msgid ""
+"Use B<mutt> for sending of mails. Default is not to use B<mutt>, except for "
+"some commands."
+msgstr ""
+"Utiliser B<mutt> pour l'envoi des messages. Par défaut, B<mutt> n'est pas "
+"utilisé, sauf pour certaines commandes."
+
+#. type: textblock
+#: ../scripts/bts.pl:331
+msgid ""
+"Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in "
+"order to use B<mutt> to send emails."
+msgstr ""
+"Remarquez que B<$DEBEMAIL> ou B<$EMAIL> doivent être configurées dans "
+"l'environnement pour que B<mutt> puisse envoyer des courriers."
+
+#. type: TP
+#: ../scripts/bts.pl:334 ../scripts/nmudiff.1:39
+#, no-wrap
+msgid "B<--no-mutt>"
+msgstr "B<--no-mutt>"
+
+#. type: textblock
+#: ../scripts/bts.pl:336
+msgid "Don't use B<mutt> for sending of mails."
+msgstr "Ne pas utiliser B<mutt> pour l'envoi des messages."
+
+#. type: =item
+#: ../scripts/bts.pl:338
+msgid "B<--soap-timeout=>I<SECONDS>"
+msgstr "B<--soap-timeout=>I<secondes>"
+
+#. type: textblock
+#: ../scripts/bts.pl:340
+msgid ""
+"Specify a timeout for SOAP calls as used by the B<select> and B<status> "
+"commands."
+msgstr ""
+"Indiquez un temps limite pour les appels de SOAP tels qu'utilisés par les "
+"commandes B<select> and B<status>."
+
+#. type: =item
+#: ../scripts/bts.pl:342
+msgid "B<--smtp-host=>I<SMTPHOST>"
+msgstr "B<--smtp-host=>I<SERVEUR_SMTP>"
+
+#. type: textblock
+#: ../scripts/bts.pl:344
+msgid ""
+"Specify an SMTP host. If given, B<bts> will send mail by talking directly "
+"to this SMTP host rather than by invoking a B<sendmail> command."
+msgstr ""
+"Indiquer un serveur SMTP. S'il est fourni, B<bts> enverra les courriers en "
+"utilisant directement ce serveur SMTP plutôt qu'en utilisant la commande "
+"B<sendmail>."
+
+#. type: textblock
+#: ../scripts/bts.pl:347
+msgid ""
+"The host name may be followed by a colon (\":\") and a port number in order "
+"to use a port other than the default. It may also begin with \"ssmtp://\" "
+"or \"smtps://\" to indicate that SMTPS should be used."
+msgstr ""
+"Le nom d'hôte peut être suivi d'un caractère deux-points (\":\") et d'un "
+"numéro de port afin d'utiliser un port autre que le port par défaut. Il peut "
+"également commencer par \"ssmtp://\" ou \"smtps://\" pour indiquer que le "
+"protocole SMTPS doit être utilisé."
+
+#. type: textblock
+#: ../scripts/bts.pl:351
+msgid ""
+"If SMTPS not specified, B<bts> will still try to use STARTTLS if it's "
+"advertised by the SMTP host."
+msgstr ""
+"Si SMTPS n'est pas spécifié, B<bts> essaiera encore d'utiliser STARTTLS, "
+"s'il est annoncé par l'hôte SMTP."
+
+#. type: textblock
+#: ../scripts/bts.pl:354
+msgid ""
+"Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in "
+"order to use direct SMTP connections to send emails."
+msgstr ""
+"Remarquez que B<$DEBEMAIL> ou B<$EMAIL> doivent être configurées dans "
+"l'environnement pour l'envoi de courriers par connexion SMTP directe."
+
+#. type: textblock
+#: ../scripts/bts.pl:357
+msgid ""
+"Note that when sending directly via an SMTP host, specifying addresses in "
+"B<--cc-addr> or B<BTS_DEFAULT_CC> that the SMTP host will not relay will "
+"cause the SMTP host to reject the entire mail."
+msgstr ""
+"Remarquez qu'en envoyant les courriers directement à un serveur SMTP, si des "
+"adresses de B<--cc-addr> ou B<BTS_DEFAULT_CC> ne sont pas relayées par le "
+"serveur SMTP, alors le serveur SMTP rejettera le courrier en entier."
+
+#. type: textblock
+#: ../scripts/bts.pl:361
+msgid ""
+"Note also that the use of the B<reassign> command may, when either B<--mutt> "
+"or B<--force-interactive> mode is enabled, lead to the automatic addition of "
+"a Cc to I<$newpackage>@packages.debian.org. In these cases, the note above "
+"regarding relaying applies. The submission interface (port 587) on "
+"reportbug.debian.org does not support relaying and, as such, should not be "
+"used as an SMTP server for B<bts> under the circumstances described in this "
+"paragraph."
+msgstr ""
+"Remarquez également que la commande B<reassign> peut, quand le mode B<--"
+"interactive> ou B<--force-interactive> est activé, conduire à l'ajout "
+"automatique d'un Cc pour I<$nouveau_paquet>@packages.debian.org. Dans ce "
+"cas, la note ci-dessus à propos des relais s'applique. L'interface de "
+"soumission (port 587) de reportbug.debian.org ne prend pas en charge les "
+"relais et ne devrait donc pas être utilisée comme serveur SMTP pour B<bts> "
+"dans les circonstances décrites dans ce paragraphe."
+
+#. type: =item
+#: ../scripts/bts.pl:368
+msgid "B<--smtp-username=>I<USERNAME>, B<--smtp-password=>I<PASSWORD>"
+msgstr ""
+"B<--smtp-username=>I<NOM_UTILISATEUR>, B<--smtp-password=>I<MOT_DE_PASSE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:370
+msgid ""
+"Specify the credentials to use when connecting to the SMTP server specified "
+"by B<--smtp-host>. If the server does not require authentication then these "
+"options should not be used."
+msgstr ""
+"Indiquer les informations d'identification à utiliser pour la connexion au "
+"serveur SMTP indiqué par B<--smtp-host>. Si le serveur ne nécessite pas "
+"d'identification, alors ces options ne devraient pas être utilisées."
+
+#. type: textblock
+#: ../scripts/bts.pl:374
+msgid ""
+"If a username is specified but not a password, B<bts> will prompt for the "
+"password before sending the mail."
+msgstr ""
+"Si un nom d'utilisateur est indiqué mais pas de mot de passe, B<bts> "
+"demandera le mot de passe avant l'envoi du courrier."
+
+#. type: =item
+#: ../scripts/bts.pl:377
+msgid "B<--smtp-helo=>I<HELO>"
+msgstr "B<--smtp-helo=>I<HELO>"
+
+#. type: textblock
+#: ../scripts/bts.pl:379
+msgid ""
+"Specify the name to use in the I<HELO> command when connecting to the SMTP "
+"server; defaults to the contents of the file F</etc/mailname>, if it exists."
+msgstr ""
+"Indiquer le nom à utiliser dans la commande I<HELO> lors de la connexion au "
+"serveur SMTP ; par défaut, c'est le contenu du fichier F</etc/mailname>, "
+"s'il existe."
+
+#. type: textblock
+#: ../scripts/bts.pl:383
+msgid ""
+"Note that some SMTP servers may reject the use of a I<HELO> which either "
+"does not resolve or does not appear to belong to the host using it."
+msgstr ""
+"Remarquez que certains serveurs SMTP peuvent rejeter l'utilisation d'un "
+"I<HELO> qui ne peut pas être résolu ou qui ne semble pas appartenir à l'hôte "
+"qui l'utilise."
+
+#. type: =item
+#: ../scripts/bts.pl:386
+msgid "B<--bts-server>"
+msgstr "B<--bts-server>"
+
+#. type: textblock
+#: ../scripts/bts.pl:388
+msgid "Use a debbugs server other than https://bugs.debian.org."
+msgstr "Utiliser un serveur debbugs autre que https://bugs.debian.org."
+
+#. type: =item
+#: ../scripts/bts.pl:390
+msgid "B<-f>, B<--force-refresh>"
+msgstr "B<-f>, B<--force-refresh>"
+
+#. type: textblock
+#: ../scripts/bts.pl:392
+msgid ""
+"Download a bug report again, even if it does not appear to have changed "
+"since the last B<cache> command. Useful if a B<--cache-mode=full> is "
+"requested for the first time (otherwise unchanged bug reports will not be "
+"downloaded again, even if the boring bits have not been downloaded)."
+msgstr ""
+"Télécharger le rapport de bogue à nouveau, même s'il ne semble pas avoir "
+"changé depuis la dernière commande B<cache>. Utile si une option B<--cache-"
+"mode=full> est utilisée la première fois (sinon les rapports de bogue "
+"inchangés ne seront pas téléchargés à nouveau, même si les parties "
+"inintéressantes n'ont pas été téléchargées)."
+
+#. type: =item
+#: ../scripts/bts.pl:398
+msgid "B<--no-force-refresh>"
+msgstr "B<--no-force-refresh>"
+
+#. type: textblock
+#: ../scripts/bts.pl:400
+msgid "Suppress any configuration file B<--force-refresh> option."
+msgstr ""
+"Ne tenir compte d'aucune option B<--force-refresh> venant d'un fichier de "
+"configuration."
+
+#. type: =item
+#: ../scripts/bts.pl:402
+msgid "B<--only-new>"
+msgstr "B<--only-new>"
+
+#. type: textblock
+#: ../scripts/bts.pl:404
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have."
+msgstr ""
+"Ne télécharger que les nouveaux bogues pour la mise en cache. Ne pas "
+"vérifier si les bogues déjà téléchargés ont été modifiés."
+
+#. type: =item
+#: ../scripts/bts.pl:407
+msgid "B<--include-resolved>"
+msgstr "B<--include-resolved>"
+
+#. type: textblock
+#: ../scripts/bts.pl:409
+msgid ""
+"When caching bug reports, include those that are marked as resolved. This "
+"is the default behaviour."
+msgstr ""
+"Lors de la mise en cache des rapports de bogue, inclure ceux qui sont "
+"marqués comme étant résolus. C'est le comportement par défaut."
+
+#. type: =item
+#: ../scripts/bts.pl:412
+msgid "B<--no-include-resolved>"
+msgstr "B<--no-include-resolved>"
+
+#. type: textblock
+#: ../scripts/bts.pl:414
+msgid ""
+"Reverse the behaviour of the previous option. That is, do not cache bugs "
+"that are marked as resolved."
+msgstr ""
+"Inverser le comportement de l'option précédente. C'est-à-dire, ne pas mettre "
+"les bogues dans le cache s'ils sont marqués comme étant résolus."
+
+#. type: =item
+#: ../scripts/bts.pl:417
+msgid "B<--no-ack>"
+msgstr "B<--no-ack>"
+
+#. type: textblock
+#: ../scripts/bts.pl:419
+msgid ""
+"Suppress acknowledgment mails from the BTS. Note that this will only affect "
+"the copies of messages CCed to bugs, not those sent to the control bot."
+msgstr ""
+"Supprimer les courriers de confirmation du BTS. Remarquez que cela "
+"n'affectera que les copies des courriers en copie des bogues, pas celles "
+"envoyées par le robot \"control\"."
+
+#. type: =item
+#: ../scripts/bts.pl:423
+msgid "B<--ack>"
+msgstr "B<--ack>"
+
+#. type: textblock
+#: ../scripts/bts.pl:425
+msgid "Do not suppress acknowledgement mails. This is the default behaviour."
+msgstr ""
+"Ne pas supprimer les courriers de confirmation. C'est le comportement par "
+"défaut."
+
+#. type: =item
+#: ../scripts/bts.pl:427 ../scripts/tagpending.pl:136
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:429
+msgid ""
+"Before sending an e-mail to the control bot, display the content and allow "
+"it to be edited, or the sending cancelled."
+msgstr ""
+"Avant d'envoyer un courrier au robot \"control\", afficher son contenu et "
+"permettre de l'éditer ou d'annuler l'envoi."
+
+#. type: =item
+#: ../scripts/bts.pl:432
+msgid "B<--force-interactive>"
+msgstr "B<--force-interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:434
+msgid ""
+"Similar to B<--interactive>, with the exception that an editor is spawned "
+"before prompting for confirmation of the message to be sent."
+msgstr ""
+"Semblable à B<--interactive>, à l'exception qu'un éditeur est lancé avant de "
+"demander la confirmation de l'envoi du courrier."
+
+#. type: =item
+#: ../scripts/bts.pl:437
+msgid "B<--no-interactive>"
+msgstr "B<--no-interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:439
+msgid ""
+"Send control e-mails without confirmation. This is the default behaviour."
+msgstr ""
+"Envoyer des courrier à \"control\" sans confirmation. C'est le comportement "
+"par défaut."
+
+#. type: =item
+#: ../scripts/bts.pl:441 ../scripts/build-rdeps.pl:105 ../scripts/dget.pl:635
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: textblock
+#: ../scripts/bts.pl:443
+msgid ""
+"When running B<bts cache>, only display information about newly cached "
+"pages, not messages saying already cached. If this option is specified "
+"twice, only output error messages (to stderr)."
+msgstr ""
+"En lançant B<bts cache>, n'afficher que les informations concernant les "
+"pages nouvellement mises en cache, et non les messages indiquant ce qui a "
+"déjà été mis en cache. Si cette option est fournie deux fois, n'afficher que "
+"les messages d'erreur, vers la sortie d'erreur (\"stderr\")."
+
+#. type: TP
+#: ../scripts/bts.pl:447 ../scripts/cvs-debrelease.1:57
+#: ../scripts/cvs-debuild.1:38 ../scripts/debc.1:95 ../scripts/debchange.1:390
+#: ../scripts/debclean.1:80 ../scripts/debdiff.1:166 ../scripts/debi.1:102
+#: ../scripts/debrelease.1:95 ../scripts/debsign.1:95 ../scripts/debuild.1:258
+#: ../scripts/dpkg-depcheck.1:92 ../scripts/dscverify.1:24
+#: ../scripts/grep-excuses.1:15 ../scripts/mass-bug.pl:121
+#: ../scripts/nmudiff.1:72 ../scripts/rmadison.pl:346 ../scripts/salsa.pl:482
+#: ../scripts/uscan.pl:1558 ../scripts/uupdate.1:56 ../scripts/who-uploads.1:41
+#, no-wrap
+msgid "B<--no-conf>, B<--noconf>"
+msgstr "B<--no-conf>, B<--noconf>"
+
+#. type: Plain text
+#: ../scripts/bts.pl:449 ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:99
+#: ../scripts/debchange.1:394 ../scripts/debclean.1:84 ../scripts/debdiff.1:170
+#: ../scripts/debi.1:106 ../scripts/debrelease.1:99 ../scripts/debsign.1:99
+#: ../scripts/debuild.1:262 ../scripts/dpkg-depcheck.1:96
+#: ../scripts/dscverify.1:28 ../scripts/grep-excuses.1:19
+#: ../scripts/mass-bug.pl:123 ../scripts/nmudiff.1:76 ../scripts/uupdate.1:60
+#: ../scripts/who-uploads.1:45
+msgid ""
+"Do not read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+"Ne lire aucun fichier de configuration. L'option ne peut être utilisée qu'en "
+"première position de la ligne de commande."
+
+#. type: =head1
+#: ../scripts/bts.pl:813 ../scripts/chdist.pl:55 ../scripts/salsa.pl:59
+msgid "COMMANDS"
+msgstr "COMMANDES"
+
+#. type: textblock
+#: ../scripts/bts.pl:815
+msgid ""
+"For full details about the commands, see the BTS documentation. L<https://"
+"www.debian.org/Bugs/server-control>"
+msgstr ""
+"Pour tous les détails sur les commandes, veuillez consulter la documentation "
+"du BTS. L<https://bugs.debian.org/Bugs/server-control>"
+
+#. type: =item
+#: ../scripts/bts.pl:820
+msgid ""
+"B<show> [I<options>] [I<bug number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<show> [I<options>] [I<numéro_de_bogue> | I<paquet> | I<responsable> | B<:"
+"> ] [I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:822
+msgid ""
+"B<show> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<show> [I<options>] [B<src:>I<paquet> | B<from:>I<rapporteur>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:824
+msgid ""
+"B<show> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<show> [I<options>] [B<tag:>I<étiquette> | B<usertag:>I<étiquette>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:826
+msgid "B<show> [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr "B<show> [B<release-critical> | B<release-critical/>... | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:828
+msgid "This is a synonym for B<bts bugs>."
+msgstr "C'est un synonyme pour B<bts bugs>."
+
+#. type: =item
+#: ../scripts/bts.pl:836
+msgid ""
+"B<bugs> [I<options>] [I<bug_number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<bugs> [I<options>] [I<numéro_de_bogue> | I<paquet> | I<responsable> | B<:"
+"> ] [I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:838
+msgid ""
+"B<bugs> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<bugs> [I<options>] [B<src:>I<paquet> | B<from:>I<rapporteur>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:840
+msgid ""
+"B<bugs> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<bugs> [I<options>] [B<tag:>I<étiquette> | B<usertag:>I<étiquette>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:842
+msgid "B<bugs> [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr "B<bugs> [B<release-critical> | B<release-critical/>... | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:844
+msgid ""
+"Display the page listing the requested bugs in a web browser using sensible-"
+"browser(1)."
+msgstr ""
+"Afficher la page référençant les bogues demandés dans un navigateur web en "
+"utilisant sensible-browser(1)."
+
+#. type: textblock
+#: ../scripts/bts.pl:847
+msgid ""
+"Options may be specified after the B<bugs> command in addition to or instead "
+"of options at the start of the command line: recognised options at this "
+"point are: B<-o>/B<--offline>/B<--online>, B<-m>/B<--mbox>, B<--mailreader> "
+"and B<-->[B<no->]B<cache>. These are described earlier in this manpage. If "
+"either the B<-o> or B<--offline> option is used, or there is already an up-"
+"to-date copy in the local cache, the cached version will be used."
+msgstr ""
+"Des options peuvent être indiquées après la commande B<bugs> en plus ou à la "
+"place des options au début de la ligne de commande. Les options reconnues "
+"pour l'instant sont : B<-o>/B<--offline>/B<--online>, B<-m>/B<--mbox>, B<--"
+"mailreader> et B<-->[B<no->]B<cache>. Celles-ci sont expliquées plus haut "
+"dans cette page de manuel. Si B<-o> ou B<--offline> est utilisée, ou s'il y "
+"a déjà une copie à jour dans le cache local, les versions mises en cache "
+"vont être utilisées."
+
+#. type: textblock
+#: ../scripts/bts.pl:854
+msgid "The meanings of the possible arguments are as follows:"
+msgstr "Les significations des paramètres possibles sont les suivantes :"
+
+#. type: =item
+#: ../scripts/bts.pl:858
+msgid "(none)"
+msgstr "(aucune)"
+
+#. type: textblock
+#: ../scripts/bts.pl:860
+msgid ""
+"If nothing is specified, B<bts bugs> will display your bugs, assuming that "
+"either B<DEBEMAIL> or B<EMAIL> (examined in that order) is set to the "
+"appropriate email address."
+msgstr ""
+"Si rien n'est indiqué, B<bts bugs> va afficher vos bogues, en supposant que "
+"soit B<DEBEMAIL>, soit B<EMAIL> (considérées dans cet ordre) est définie à "
+"l'adresse électronique désirée."
+
+#. type: =item
+#: ../scripts/bts.pl:864
+msgid "I<bug_number>"
+msgstr "I<numéro_de_bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:866
+msgid "Display bug number I<bug_number>."
+msgstr "Afficher le bogue de numéro I<numéro_de_bogue>."
+
+#. type: =item
+#: ../scripts/bts.pl:868
+msgid "I<package>"
+msgstr "I<paquet>"
+
+#. type: textblock
+#: ../scripts/bts.pl:870
+msgid "Display the bugs for the package I<package>."
+msgstr "Afficher les bogues du paquet I<paquet>."
+
+#. type: =item
+#: ../scripts/bts.pl:872
+msgid "B<src:>I<package>"
+msgstr "B<src:>I<paquet>"
+
+#. type: textblock
+#: ../scripts/bts.pl:874
+msgid "Display the bugs for the source package I<package>."
+msgstr "Afficher les bogues du paquet source I<paquet>."
+
+#. type: =item
+#: ../scripts/bts.pl:876
+msgid "I<maintainer>"
+msgstr "I<responsable>"
+
+#. type: textblock
+#: ../scripts/bts.pl:878
+msgid "Display the bugs for the maintainer email address I<maintainer>."
+msgstr ""
+"Afficher les bogues dont le responsable a pour adresse électronique "
+"I<responsable>."
+
+#. type: =item
+#: ../scripts/bts.pl:880
+msgid "B<from:>I<submitter>"
+msgstr "B<from:>I<rapporteur>"
+
+#. type: textblock
+#: ../scripts/bts.pl:882
+msgid "Display the bugs for the submitter email address I<submitter>."
+msgstr ""
+"Afficher les bogues dont le rapporteur a pour adresse électronique "
+"I<rapporteur>."
+
+#. type: =item
+#: ../scripts/bts.pl:884
+msgid "B<tag:>I<tag>"
+msgstr "B<tag:>I<étiquette>"
+
+#. type: textblock
+#: ../scripts/bts.pl:886
+msgid "Display the bugs which are tagged with I<tag>."
+msgstr "Afficher les bogues marqués avec I<étiquette>."
+
+#. type: =item
+#: ../scripts/bts.pl:888
+msgid "B<usertag:>I<tag>"
+msgstr "B<usertag:>I<étiquette>"
+
+#. type: textblock
+#: ../scripts/bts.pl:890
+msgid ""
+"Display the bugs which are tagged with usertag I<tag>. See the BTS "
+"documentation for more information on usertags. This will require the use "
+"of a B<users=>I<email> option."
+msgstr ""
+"Afficher les bogues marqués avec l'étiquette utilisateur I<étiquette>. "
+"Veuillez consulter la documentation du BTS pour plus d'informations sur les "
+"étiquettes utilisateur. Cela nécessite d'utiliser une option "
+"B<users=>I<adresse>."
+
+#. type: =item
+#: ../scripts/bts.pl:894
+msgid "B<:>"
+msgstr "B<:>"
+
+#. type: textblock
+#: ../scripts/bts.pl:896
+msgid ""
+"Details of the bug tracking system itself, along with a bug-request page "
+"with more options than this script, can be found on https://bugs.debian."
+"org/. This page itself will be opened if the command 'bts bugs :' is used."
+msgstr ""
+"Les détails concernant le système de suivi de bogues, ainsi qu'une page de "
+"recherche dans les bogues contenant plus d'options que ce script, peuvent "
+"être trouvés à https://bugs.debian.org/. Cette page peut être ouverte par la "
+"commande B<bts bugs:>."
+
+#. type: =item
+#: ../scripts/bts.pl:901
+msgid "B<release-critical>, B<RC>"
+msgstr "B<release-critical>, B<RC>"
+
+#. type: textblock
+#: ../scripts/bts.pl:903
+msgid ""
+"Display the front page of the release-critical pages on the BTS. This is a "
+"synonym for https://bugs.debian.org/release-critical/index.html. It is also "
+"possible to say release-critical/debian/main.html and the like. RC is a "
+"synonym for release-critical/other/all.html."
+msgstr ""
+"Afficher le sommaire des pages du BTS concernant les rapports de bogues "
+"critiques pour la prochaine publication. C'est un synonyme pour https://bugs."
+"debian.org/release-critical/index.html. Il est aussi possible d'indiquer "
+"release-critical/debian/main.html et de même RC est synonyme de release-"
+"critical/other/all.html."
+
+#. type: textblock
+#: ../scripts/bts.pl:910
+msgid ""
+"After the argument specifying what to display, you can optionally specify "
+"options to use to format the page or change what it displayed. These are "
+"passed to the BTS in the URL downloaded. For example, pass dist=stable to "
+"see bugs affecting the stable version of a package, version=1.0 to see bugs "
+"affecting that version of a package, or reverse=yes to display newest "
+"messages first in a bug log."
+msgstr ""
+"Après le paramètre indiquant quoi afficher, vous pouvez indiquer des options "
+"facultatives pour formater la page ou changer ce qui doit être affiché. "
+"Celles-ci sont passées au BTS dans l'URL demandée. Par exemple, passez "
+"B<dist=stable> pour afficher les bogues touchant la version stable d'un "
+"paquet, B<version=1.0> pour voir les bogues touchant cette version d'un "
+"paquet, ou B<reverse=yes> pour afficher d'abord les messages les plus "
+"récents dans le fichier journal des bogues."
+
+#. type: textblock
+#: ../scripts/bts.pl:917
+msgid ""
+"If caching has been enabled (that is, B<--no-cache> has not been used, and "
+"B<BTS_CACHE> has not been set to B<no>), then any page requested by B<bts "
+"show> will automatically be cached, and be available offline thereafter. "
+"Pages which are automatically cached in this way will be deleted on "
+"subsequent \"B<bts show>|B<bugs>|B<cache>\" invocations if they have not "
+"been accessed in 30 days. Warning: on a filesystem mounted with the "
+"\"noatime\" option, running \"B<bts show>|B<bugs>\" does not update the "
+"cache files' access times; a cached bug will then be subject to auto-"
+"cleaning 30 days after its initial download, even if it has been accessed in "
+"the meantime."
+msgstr ""
+"Si la mise en cache a été activée (c'est-à-dire si B<--no-cache> n'a pas été "
+"utilisée et si la variable B<BTS_CACHE> ne vaut pas B<no>), alors toute page "
+"demandée par B<bts show> va être automatiquement mise en cache et sera donc "
+"disponible pour être visualisée plus tard tout en étant hors ligne. Les "
+"pages mises en cache automatiquement de cette manière seront supprimées lors "
+"d'invocations ultérieures de \"B<bts> B<show>|B<bugs>|B<cache>\" si on n'y "
+"accède pas dans les 30 jours. Attention : sur un système de fichiers monté "
+"avec l'option \"noatime\", l'exécution de \"B<bts> B<show>|B<bugs>\" ne met "
+"pas à jour les heures et dates d'accès aux fichiers du cache ; un bogue mis "
+"en cache sera donc nettoyé automatiquement 30 jours après son téléchargement "
+"initial, même si on y accède entre temps."
+
+#. type: textblock
+#: ../scripts/bts.pl:928
+msgid ""
+"Any other B<bts> commands following this on the command line will be "
+"executed after the browser has been exited."
+msgstr ""
+"Toute autre commande B<bts> suivant cela sur la ligne de commande sera "
+"exécutée après que le navigateur aura été fermé."
+
+#. type: textblock
+#: ../scripts/bts.pl:931
+msgid ""
+"The desired browser can be specified and configured by setting the "
+"B<BROWSER> environment variable. The conventions follow those defined by "
+"Eric Raymond at http://www.catb.org/~esr/BROWSER/; we here reproduce the "
+"relevant part."
+msgstr ""
+"Le navigateur voulu peut être indiqué et configuré en définissant la "
+"variable d'environnement B<BROWSER>. Les conventions suivent celles définies "
+"par Eric Raymond à l'adresse http://www.catb.org/~esr/BROWSER/ ; nous "
+"reproduisons ici les informations pertinentes."
+
+#. type: textblock
+#: ../scripts/bts.pl:936
+msgid ""
+"The value of B<BROWSER> may consist of a colon-separated series of browser "
+"command parts. These should be tried in order until one succeeds. Each "
+"command part may optionally contain the string B<%s>; if it does, the URL to "
+"be viewed is substituted there. If a command part does not contain B<%s>, "
+"the browser is to be launched as if the URL had been supplied as its first "
+"argument. The string B<%%> must be substituted as a single %."
+msgstr ""
+"La variable B<BROWSER> peut être constituée d'une série de commandes de "
+"navigateur séparées par des deux-points. Celles-ci devraient être essayées "
+"successivement jusqu'à ce qu'il y en ait une qui fonctionne. Chaque commande "
+"peut contenir la chaîne B<%s> ; si c'est le cas, celle-ci est remplacée par "
+"l'URL à afficher. Si une des commandes ne contient pas B<%s>, le navigateur "
+"est lancé comme si l'URL avait été indiquée en tant que premier paramètre. "
+"La chaîne B<%%> doit être remplacée par un simple \"%\"."
+
+#. type: textblock
+#: ../scripts/bts.pl:944
+msgid ""
+"Rationale: We need to be able to specify multiple browser commands so "
+"programs obeying this convention can do the right thing in either X or "
+"console environments, trying X first. Specifying multiple commands may also "
+"be useful for people who share files like F<.profile> across multiple "
+"systems. We need B<%s> because some popular browsers have remote-invocation "
+"syntax that requires it. Unless B<%%> reduces to %, it won't be possible to "
+"have a literal B<%s> in the string."
+msgstr ""
+"Justification : nous devons pouvoir indiquer plusieurs navigateurs de "
+"manière à ce que les programmes suivant cette convention puissent faire ce "
+"qu'il faut que ce soit dans un environnement graphique ou console, en "
+"essayant un environnement graphique d'abord. Indiquer plusieurs commandes "
+"peut être utile à ceux qui partagent des fichiers, comme leur F<.profile>, "
+"entre plusieurs systèmes. B<%s> est nécessaire parce que la plupart des "
+"navigateurs ont une syntaxe qui l'exige. Enfin, B<%%> doit être transformé "
+"en %, sinon il ne serait pas possible d'avoir un B<%s> littéral dans la "
+"chaîne."
+
+#. type: textblock
+#: ../scripts/bts.pl:952
+msgid "For example, on most Linux systems a good thing to do would be:"
+msgstr ""
+"Par exemple, sur la plupart des systèmes Linux, une bonne chose à faire "
+"serait :"
+
+#. type: textblock
+#: ../scripts/bts.pl:954
+msgid "BROWSER='mozilla -raise -remote \"openURL(%s,new-window)\":links'"
+msgstr "BROWSER='mozilla -raise -remote \"openURL(%s,new-window)\":links'"
+
+#. type: =item
+#: ../scripts/bts.pl:1031
+msgid "B<select> [I<key>B<:>I<value> ...]"
+msgstr "B<select> [I<clef>B<:>I<valeur> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1033
+msgid ""
+"Uses the SOAP interface to output a list of bugs which match the given "
+"selection requirements."
+msgstr ""
+"Utiliser l'interface SOAP pour sortir une liste de bogues qui correspondent "
+"à certains critères de recherche."
+
+#. type: textblock
+#: ../scripts/bts.pl:1036
+msgid "The following keys are allowed, and may be given multiple times."
+msgstr ""
+"Les clefs suivantes sont autorisées, et peuvent être utilisées plusieurs "
+"fois."
+
+#. type: =item
+#: ../scripts/bts.pl:1040 ../scripts/bts.pl:1915
+#: ../scripts/who-permits-upload.pl:92
+msgid "B<package>"
+msgstr "B<package>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1042 ../scripts/bts.pl:1917
+msgid "Binary package name."
+msgstr "Nom d'un paquet binaire."
+
+#. type: =item
+#: ../scripts/bts.pl:1044 ../scripts/bts.pl:1919
+msgid "B<source>"
+msgstr "B<source>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1046 ../scripts/bts.pl:1921
+msgid "Source package name."
+msgstr "Nom d'un paquet source."
+
+#. type: =item
+#: ../scripts/bts.pl:1048
+msgid "B<maintainer>"
+msgstr "B<maintainer>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1050
+msgid "E-mail address of the maintainer."
+msgstr "Adresse électronique du responsable."
+
+#. type: =item
+#: ../scripts/bts.pl:1052 ../scripts/bts.pl:1899
+msgid "B<submitter>"
+msgstr "B<submitter>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1054 ../scripts/bts.pl:1901
+msgid "E-mail address of the submitter."
+msgstr "Adresse électronique de l'auteur du bogue."
+
+#. type: =item
+#: ../scripts/bts.pl:1056 ../scripts/bts.pl:1927
+msgid "B<severity>"
+msgstr "B<severity>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1058 ../scripts/bts.pl:1929
+msgid "Bug severity."
+msgstr "Sévérité du bogue."
+
+#. type: =item
+#: ../scripts/bts.pl:1060
+msgid "B<status>"
+msgstr "B<status>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1062
+msgid "Status of the bug. One of B<open>, B<done>, or B<forwarded>."
+msgstr "État du bogue. Soit B<open>, B<done> ou B<forwarded>."
+
+#. type: =item
+#: ../scripts/bts.pl:1064 ../scripts/bts.pl:1923
+msgid "B<tag>"
+msgstr "B<tag>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1066
+msgid ""
+"Tags applied to the bug. If B<users> is specified, may include usertags in "
+"addition to the standard tags."
+msgstr ""
+"Étiquettes attachées au bogue. Si B<users> est indiqué, les étiquettes "
+"peuvent être des \"usertags\" en plus des étiquettes traditionnelles."
+
+#. type: =item
+#: ../scripts/bts.pl:1069 ../scripts/bts.pl:1931
+msgid "B<owner>"
+msgstr "B<owner>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1071 ../scripts/bts.pl:1933
+msgid "Bug's owner."
+msgstr "Propriétaire du bogue."
+
+#. type: =item
+#: ../scripts/bts.pl:1073
+msgid "B<correspondent>"
+msgstr "B<correspondent>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1075
+msgid "Address of someone who sent mail to the log."
+msgstr "Adresse d'une personne qui a envoyé un courrier au journal."
+
+#. type: =item
+#: ../scripts/bts.pl:1077 ../scripts/bts.pl:1935
+msgid "B<affects>"
+msgstr "B<affects>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1079
+msgid "Bugs which affect this package."
+msgstr "Bogues qui affectent ce paquet."
+
+#. type: =item
+#: ../scripts/bts.pl:1081
+msgid "B<bugs>"
+msgstr "B<bugs>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1083
+msgid "List of bugs to search within."
+msgstr "Liste de bogues dans lesquels chercher."
+
+#. type: =item
+#: ../scripts/bts.pl:1085
+msgid "B<users>"
+msgstr "B<users>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1087
+msgid "Users to use when looking up usertags."
+msgstr ""
+"Utilisateurs à utiliser pour la recherche d'étiquettes utilisateur "
+"(\"usertags\")."
+
+#. type: =item
+#: ../scripts/bts.pl:1089 ../scripts/bts.pl:1939
+msgid "B<archive>"
+msgstr "B<archive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1091 ../scripts/bts.pl:1941
+msgid ""
+"Whether to search archived bugs or normal bugs; defaults to B<0> (i.e. only "
+"search normal bugs). As a special case, if archive is B<both>, both archived "
+"and unarchived bugs are returned."
+msgstr ""
+"Rechercher des bogues archivés ou des bogues normaux ; la valeur par défaut "
+"est B<0> (c'est-à-dire ne chercher que les bogues normaux). Une valeur "
+"particulière, B<both>, permet de rechercher à la fois parmi les bogues "
+"archivés et non archivés."
+
+#. type: textblock
+#: ../scripts/bts.pl:1097
+msgid ""
+"For example, to select the set of bugs submitted by jrandomdeveloper@example."
+"com and tagged B<wontfix>, one would use"
+msgstr ""
+"Par exemple, pour sélectionner l'ensemble des bogues envoyés par "
+"undéveloppeur@example.com qui ont l'étiquette B<wontfix>, on utilisera"
+
+#. type: textblock
+#: ../scripts/bts.pl:1100
+msgid "bts select submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr "bts select submitter:undéveloppeur@example.com tag:wontfix"
+
+#. type: textblock
+#: ../scripts/bts.pl:1102 ../scripts/bts.pl:1953
+msgid ""
+"If a key is used multiple times then the set of bugs selected includes those "
+"matching any of the supplied values; for example"
+msgstr ""
+"Si une clef est utilisée plusieurs fois alors les bogues sélectionnés sont "
+"ceux qui correspondent à une des valeurs fournies ; par exemple"
+
+#. type: textblock
+#: ../scripts/bts.pl:1105
+msgid "bts select package:foo severity:wishlist severity:minor"
+msgstr "bts select package:toto severity:wishlist severity:minor"
+
+#. type: textblock
+#: ../scripts/bts.pl:1107
+msgid "returns all bugs of package foo with either wishlist or minor severity."
+msgstr "renvoie tous les bogues du paquet toto de sévérité wishlist ou minor."
+
+#. type: =item
+#: ../scripts/bts.pl:1120
+msgid ""
+"B<status> [I<bug> | B<file:>I<file> | B<fields:>I<field>[B<,>I<field> ...] | "
+"B<verbose>] ..."
+msgstr ""
+"B<status> [I<bogue> | B<file:>I<fichier> | B<fields:>I<champ>[B<,"
+">I<champ> ...] | B<verbose>] ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:1122
+msgid ""
+"Uses the SOAP interface to output status information for the given bugs (or "
+"as read from the listed files -- use B<-> to indicate STDIN)."
+msgstr ""
+"Utiliser l'interface SOAP pour fournir les informations d'état pour les "
+"bogues indiqués (ou lus dans les fichiers fournis ; utilisez B<-> pour "
+"indiquer l'entrée standard)."
+
+#. type: textblock
+#: ../scripts/bts.pl:1125
+msgid "By default, all populated fields for a bug are displayed."
+msgstr "Par défaut, tout les champs existants du bogue sont affichés."
+
+#. type: textblock
+#: ../scripts/bts.pl:1127
+msgid "If B<verbose> is given, empty fields will also be displayed."
+msgstr "Si B<verbose> est fournie, les champs vides sont également affichés."
+
+#. type: textblock
+#: ../scripts/bts.pl:1129
+msgid ""
+"If B<fields> is given, only those fields will be displayed. No validity "
+"checking is performed on any specified fields."
+msgstr ""
+"Si B<fields> est fournie, seuls ces I<champ>s seront affichés. Aucune "
+"vérification de validité n'est réalisée sur les I<champ>s indiqués."
+
+#. type: =item
+#: ../scripts/bts.pl:1201
+msgid "B<clone> I<bug> I<new_ID> [I<new_ID> ...]"
+msgstr "B<clone> I<bogue> I<nouvel_ID> [I<nouvel_ID> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1203
+msgid ""
+"The B<clone> control command allows you to duplicate a I<bug> report. It is "
+"useful in the case where a single report actually indicates that multiple "
+"distinct bugs have occurred. \"New IDs\" are negative numbers, separated by "
+"spaces, which may be used in subsequent control commands to refer to the "
+"newly duplicated bugs. A new report is generated for each new ID."
+msgstr ""
+"La commande de contrôle B<clone> vous permet de dupliquer un rapport de "
+"I<bogue>. C'est utile dans le cas où un rapport de bogue unique indique en "
+"fait que plusieurs bogues distincts se produisent. Les \"nouveaux ID\" sont "
+"des nombres négatifs, séparés par des espaces, qui peuvent être utilisés "
+"dans les commandes de contrôle suivantes pour se référer aux rapports de "
+"bogue nouvellement dupliqués. Un nouveau rapport de bogue est produit pour "
+"chaque nouvel identifiant."
+
+#. type: =item
+#: ../scripts/bts.pl:1253
+msgid "B<done> I<bug> [I<version>]"
+msgstr "B<done> I<bogue> [I<version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1255
+msgid ""
+"Mark a I<bug> as Done. This forces interactive mode since done messages "
+"should include an explanation why the bug is being closed. You should "
+"specify which I<version> of the package closed the bug, if possible."
+msgstr ""
+"Fermer le I<bogue>. Le mode interactif est forcé puisqu'un message de "
+"fermeture doit contenir une explication. La I<version> du paquet dans "
+"laquelle le bogue a été corrigé doit si possible être indiquée."
+
+#. type: =item
+#: ../scripts/bts.pl:1273
+msgid "B<reopen> I<bug> [I<submitter>]"
+msgstr "B<reopen> I<bogue> [I<rapporteur>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1275
+msgid "Reopen a I<bug>, with optional I<submitter>."
+msgstr "Réouvrir un I<bogue>, avec I<rapporteur> optionnel."
+
+#. type: =item
+#: ../scripts/bts.pl:1286
+msgid "B<archive> I<bug>"
+msgstr "B<archive> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1288
+msgid ""
+"Archive a I<bug> that has previously been archived but is currently not. "
+"The I<bug> must fulfill all of the requirements for archiving with the "
+"exception of those that are time-based."
+msgstr ""
+"Archiver un I<bogue> qui a déjà été archivé, mais ne l'est plus. Le I<bogue> "
+"doit satisfaire à tous les critères pour les bogues archivés, à l'exception "
+"de ceux basés sur le temps."
+
+#. type: =item
+#: ../scripts/bts.pl:1300
+msgid "B<unarchive> I<bug>"
+msgstr "B<unarchive> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1302
+msgid "Unarchive a I<bug> that is currently archived."
+msgstr "Désarchiver un I<bogue> qui est déjà archivé."
+
+#. type: =item
+#: ../scripts/bts.pl:1312
+msgid "B<retitle> I<bug> I<title>"
+msgstr "B<retitle> I<bogue> I<titre>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1314
+msgid "Change the I<title> of the I<bug>."
+msgstr "Changer le I<titre> du I<bogue>."
+
+#. type: =item
+#: ../scripts/bts.pl:1327
+msgid "B<summary> I<bug> [I<messagenum>]"
+msgstr "B<summary> I<bogue> [I<numéro_message>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1329
+msgid "Select a message number that should be used as the summary of a I<bug>."
+msgstr ""
+"Sélectionner un numéro de message qui doit être utilisé comme résumé d'un "
+"I<bogue>."
+
+#. type: textblock
+#: ../scripts/bts.pl:1332
+msgid "If no message number is given, the summary is cleared."
+msgstr "Si aucun numéro de message n'est fourni, le résumé est supprimé."
+
+#. type: =item
+#: ../scripts/bts.pl:1343
+msgid "B<submitter> I<bug> [I<bug> ...] I<submitter-email>"
+msgstr "B<submitter> I<bogue> [I<bogue> ...] I<adresse-du-rapporteur>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1345
+msgid ""
+"Change the submitter address of a I<bug> or a number of bugs, with B<!> "
+"meaning `use the address on the current email as the new submitter address'."
+msgstr ""
+"Changer l'adresse électronique du rapporteur du ou des I<bogue>s, où B<!> "
+"signifie \"utiliser l'adresse électronique actuelle en tant que nouvelle "
+"adresse du rapporteur\"."
+
+#. type: =item
+#: ../scripts/bts.pl:1363
+msgid "B<reassign> I<bug> [I<bug> ...] I<package> [I<version>]"
+msgstr "B<reassign> I<bogue> [I<bogue> ...] I<paquet> [I<version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1365
+msgid ""
+"Reassign a I<bug> or a number of bugs to a different I<package>. The "
+"I<version> field is optional; see the explanation at L<https://www.debian."
+"org/Bugs/server-control>."
+msgstr ""
+"Réassigner un I<bogue> ou un ensemble de bogues à un I<paquet> différent. Le "
+"champ I<version> est optionnel ; veuillez consulter les explications sur "
+"L<https://www.debian.org/Bugs/server-control>."
+
+#. type: =item
+#: ../scripts/bts.pl:1397
+msgid "B<found> I<bug> [I<version>]"
+msgstr "B<found> I<bogue> [I<version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1399
+msgid ""
+"Indicate that a I<bug> was found to exist in a particular package version. "
+"Without I<version>, the list of fixed versions is cleared and the bug is "
+"reopened."
+msgstr ""
+"Indiquer qu'un I<bogue> a été découvert dans une version particulière d'un "
+"paquet. Sans I<version>, la liste des versions corrigées est effacée et le "
+"bogue est rouvert."
+
+#. type: =item
+#: ../scripts/bts.pl:1417
+msgid "B<notfound> I<bug> I<version>"
+msgstr "B<notfound> I<bogue> I<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1419
+msgid ""
+"Remove the record that I<bug> was encountered in the given version of the "
+"package to which it is assigned."
+msgstr ""
+"Enlever l'indication concernant la version dans laquelle ce I<bogue> a été "
+"découvert."
+
+#. type: =item
+#: ../scripts/bts.pl:1432
+msgid "B<fixed> I<bug> I<version>"
+msgstr "B<fixed> I<bogue> I<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1434
+msgid ""
+"Indicate that a I<bug> was fixed in a particular package version, without "
+"affecting the I<bug>'s open/closed status."
+msgstr ""
+"Indiquer qu'un I<bogue> a été corrigé dans une version particulière d'un "
+"paquet, sans changer l'état ouvert ou fermé du I<bogue>."
+
+#. type: =item
+#: ../scripts/bts.pl:1446
+msgid "B<notfixed> I<bug> I<version>"
+msgstr "B<notfixed> I<bogue> I<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1448
+msgid ""
+"Remove the record that a I<bug> was fixed in the given version of the "
+"package to which it is assigned."
+msgstr ""
+"Enlever l'indication que ce I<bogue> est corrigé dans une version donnée."
+
+#. type: textblock
+#: ../scripts/bts.pl:1451
+msgid ""
+"This is equivalent to the sequence of commands \"B<found> I<bug> "
+"I<version>\", \"B<notfound> I<bug> I<version>\"."
+msgstr ""
+"Cette commande est équivalente à la séquence \"B<found> I<bogue> "
+"I<version>\", \"B<notfound> I<bogue> I<version>\"."
+
+#. type: =item
+#: ../scripts/bts.pl:1464
+msgid "B<block> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+msgstr "B<block> I<bogue> B<by>|B<with> I<bogue> [I<bogue> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1466
+msgid "Note that a I<bug> is blocked from being fixed by a set of other bugs."
+msgstr ""
+"Enregistrer que la résolution d'un I<bogue> est bloquée par un ensemble "
+"d'autres bogues."
+
+#. type: =item
+#: ../scripts/bts.pl:1486
+msgid "B<unblock> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+msgstr "B<unblock> I<bogue> B<by>|B<with> I<bogue> [I<bogue> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1488
+msgid ""
+"Note that a I<bug> is no longer blocked from being fixed by a set of other "
+"bugs."
+msgstr ""
+"Enregistrer que la résolution d'un I<bogue> n'est plus bloquée par un "
+"ensemble d'autres bogues."
+
+#. type: =item
+#: ../scripts/bts.pl:1508
+msgid "B<merge> I<bug> I<bug> [I<bug> ...]"
+msgstr "B<merge> I<bogue> I<bogue> [I<bogue> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1510
+msgid "Merge a set of bugs together."
+msgstr "Fusionner plusieurs bogues."
+
+#. type: =item
+#: ../scripts/bts.pl:1527
+msgid "B<forcemerge> I<bug> I<bug> [I<bug> ...]"
+msgstr "B<forcemerge> I<bogue> I<bogue> [I<bogue> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1529
+msgid ""
+"Forcibly merge a set of bugs together. The first I<bug> listed is the master "
+"bug, and its settings (those which must be equal in a normal B<merge>) are "
+"assigned to the bugs listed next."
+msgstr ""
+"Forcer la fusion d'un ensemble de bogues entre eux. Le premier I<bogue> est "
+"le bogue maître et sa configuration (cette configuration qui doit "
+"correspondre pour les fusions normales avec B<merge>) est donnée à tous les "
+"bogues qui suivent."
+
+#. type: =item
+#: ../scripts/bts.pl:1548
+msgid "B<unmerge> I<bug>"
+msgstr "B<unmerge> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1550
+msgid "Unmerge a I<bug>."
+msgstr "Annuler la fusion d'un I<bogue>."
+
+#. type: =item
+#: ../scripts/bts.pl:1560
+msgid "B<tag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<tag> I<bogue> [B<+>|B<->|B<=>] I<étiquette> [I<étiquette> ..]"
+
+#. type: =item
+#: ../scripts/bts.pl:1562
+msgid "B<tags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<tags> I<bogue> [B<+>|B<->|B<=>] I<étiquette> [I<étiquette> ..]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1564
+msgid ""
+"Set or unset a I<tag> on a I<bug>. The tag may either be the exact tag name "
+"or it may be abbreviated to any unique tag substring. (So using B<fixed> "
+"will set the tag B<fixed>, not B<fixed-upstream>, for example, but B<fix> "
+"would not be acceptable.) Multiple tags may be specified as well. The two "
+"commands (tag and tags) are identical. At least one tag must be specified, "
+"unless the B<=> flag is used, where the command"
+msgstr ""
+"Ajouter ou retirer une I<étiquette> à un I<bogue>. L'étiquette peut être "
+"indiquée par son nom exact ou être abrégée en la plus courte sous-chaîne "
+"unique. (Ainsi B<fixed> va ajouter l'étiquette B<fixed> et non B<fixed-"
+"upstream>, par exemple, mais B<fix> ne sera pas accepté.) Plusieurs "
+"étiquettes peuvent être indiquées simultanément. Les deux commandes (tag et "
+"tags) sont identiques. Il est nécessaire d'indiquer au moins une étiquette, "
+"à moins que l'argument B<=> ne soit utilisé ; la commande"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1571
+#, no-wrap
+msgid ""
+" bts tags <bug> =\n"
+"\n"
+msgstr ""
+" bts tags <bogue> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1573
+msgid "will remove all tags from the specified I<bug>."
+msgstr "va supprimer toutes les étiquettes du I<bogue> indiqué."
+
+#. type: textblock
+#: ../scripts/bts.pl:1575
+msgid ""
+"Adding/removing the B<security> tag will add \"team\\@security.debian.org\" "
+"to the Cc list of the control email."
+msgstr ""
+"L’ajout ou suppression de l’étiquette B<security> ajoutera \"team\\@security."
+"debian.org\" en copie du message de contrôle."
+
+#. type: textblock
+#: ../scripts/bts.pl:1578
+msgid ""
+"The list of valid tags and their significance is available at L<https://www."
+"debian.org/Bugs/Developer#tags>. The current valid tags are:"
+msgstr ""
+"La liste des étiquettes valables et leur signification sont disponibles à "
+"l'adresse L<https://www.debian.org/Bugs/Developer#tags>. Les étiquettes "
+"valables actuellement sont les suivantes :"
+
+#. type: textblock
+#: ../scripts/bts.pl:1582
+msgid ""
+"patch, wontfix, moreinfo, unreproducible, fixed, help, security, upstream, "
+"pending, d-i, confirmed, ipv6, lfs, fixed-upstream, l10n, newcomer, a11y, "
+"ftbfs"
+msgstr ""
+"patch, wontfix, moreinfo, unreproducible, help, newcomer, pending, security, "
+"upstream, confirmed, fixed, fixed-upstream, fixed-in-experimental, d-i, "
+"ipv6, lfs, l10n, a11y"
+
+#. type: textblock
+#: ../scripts/bts.pl:1586
+msgid ""
+"There is also a tag for each release of Debian since \"potato\". Note that "
+"this list may be out of date, see the website for the most up to date source."
+msgstr ""
+"Il y aussi une étiquette pour chaque version de Debian depuis \"Potato\". "
+"Remarquez que cette liste peut être obsolète, consultez le site web pour "
+"avoir la source la plus à jour."
+
+#. type: =item
+#: ../scripts/bts.pl:1671
+msgid "B<affects> I<bug> [B<+>|B<->|B<=>] I<package> [I<package> ...]"
+msgstr "B<affects> I<bogue> [B<+>|B<->|B<=>] I<paquet> [I<paquet> ...]"
+
+# NOTE: package list -> bug list
+#. type: textblock
+#: ../scripts/bts.pl:1673
+msgid ""
+"Indicates that a I<bug> affects a I<package> other than that against which "
+"it is filed, causing the I<bug> to be listed by default in the I<package> "
+"list of the other I<package>. This should generally be used where the "
+"I<bug> is severe enough to cause multiple reports from users to be assigned "
+"to the wrong package. At least one I<package> must be specified, unless the "
+"B<=> flag is used, where the command"
+msgstr ""
+"Indiquer qu'un I<bogue> affecte un I<paquet> autre que celui pour lequel il "
+"est enregistré ; le I<bogue> sera listé par défaut dans la liste des bogues "
+"de l'autre I<paquet>. Ce n'est généralement à utiliser que si le I<bogue> "
+"est suffisamment important et si de nombreux bogues sont remontés sur le "
+"mauvais paquet par des utilisateurs. Au moins un I<paquet> doit être "
+"indiqué, sauf si l'attribut B<=> est utilisé, où la commande"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1679
+#, no-wrap
+msgid ""
+" bts affects <bug> =\n"
+"\n"
+msgstr ""
+" bts affects <bogue> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1681
+msgid "will remove all indications that I<bug> affects other packages."
+msgstr ""
+"va supprimer toutes les indications que le I<bogue> affecte d'autres paquets."
+
+#. type: =item
+#: ../scripts/bts.pl:1715
+msgid "B<user> I<email>"
+msgstr "B<user> I<adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1717
+msgid "Specify a user I<email> address before using the B<usertags> command."
+msgstr ""
+"Indiquer l'I<adresse> électronique d'un utilisateur avant d'utiliser la "
+"commande B<usertags>."
+
+#. type: =item
+#: ../scripts/bts.pl:1734
+msgid "B<usertag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<usertag> I<bogue> [B<+>|B<->|B<=>] I<étiquette> [I<étiquette> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:1736
+msgid "B<usertags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<usertags> I<bogue> [B<+>|B<->|B<=>] I<étiquette> [I<étiquette> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1738
+msgid ""
+"Set or unset a user tag on a I<bug>. The I<tag> must be the exact tag name "
+"wanted; there are no defaults or checking of tag names. Multiple tags may "
+"be specified as well. The two commands (B<usertag> and B<usertags>) are "
+"identical. At least one I<tag> must be specified, unless the B<=> flag is "
+"used, where the command"
+msgstr ""
+"Ajouter ou retirer une I<étiquette> utilisateur à un I<bogue>. Le nom exact "
+"de celle-ci doit être utilisé ; il n'y a ni valeur par défaut ni "
+"vérification de la validité des noms d'étiquette. Plusieurs étiquettes "
+"peuvent être indiquées simultanément. Les deux commandes (B<usertag> et "
+"B<usertags>) sont identiques. Il est nécessaire d'indiquer au moins une "
+"I<étiquette> utilisateur, à moins que l'argument B<=> ne soit utilisé ; la "
+"commande"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1744
+#, no-wrap
+msgid ""
+" bts usertags <bug> =\n"
+"\n"
+msgstr ""
+" bts usertags <bogue> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1746
+msgid "will remove all user tags from the specified I<bug>."
+msgstr "va supprimer toutes les étiquettes utilisateur du I<bogue> indiqué."
+
+#. type: =item
+#: ../scripts/bts.pl:1776
+msgid "B<claim> I<bug> [I<claim>]"
+msgstr "B<claim> I<bogue> [I<adresse>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1778
+msgid ""
+"Record that you have claimed a I<bug> (e.g. for a bug squashing party). "
+"I<claim> should be a unique token allowing the bugs you have claimed to be "
+"identified; an e-mail address is often used."
+msgstr ""
+"Enregistrer que vous avez réclamé un I<bogue> (par exemple pour une bug "
+"squashing party). I<adresse> doit être une chaîne unique permettant "
+"d'identifier les bogues que vous avez réclamé ; une adresse électronique est "
+"souvent utilisée."
+
+#. type: textblock
+#: ../scripts/bts.pl:1782 ../scripts/bts.pl:1802
+msgid ""
+"If no I<claim> is specified, the environment variable B<DEBEMAIL> or "
+"B<EMAIL> (checked in that order) is used."
+msgstr ""
+"Si aucune I<adresse> n'est fournie, les variables d'environnement "
+"B<DEBEMAIL> et B<EMAIL> sont utilisées (dans cet ordre)."
+
+#. type: =item
+#: ../scripts/bts.pl:1798
+msgid "B<unclaim> I<bug> [I<claim>]"
+msgstr "B<unclaim> I<bogue> [I<adresse>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1800
+msgid "Remove the record that you have claimed a bug."
+msgstr "Supprimer votre revendication pour un I<bogue>."
+
+#. type: =item
+#: ../scripts/bts.pl:1818
+msgid "B<severity> I<bug> I<severity>"
+msgstr "B<severity> I<bogue> I<sévérité>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1820
+msgid ""
+"Change the I<severity> of a I<bug>. Available severities are: B<wishlist>, "
+"B<minor>, B<normal>, B<important>, B<serious>, B<grave>, B<critical>. The "
+"severity may be abbreviated to any unique substring."
+msgstr ""
+"Changer la I<sévérité> d'un I<bogue>. Les sévérités possibles sont : "
+"B<wishlist>, B<minor>, B<normal>, B<important>, B<serious>, B<grave> et "
+"B<critical>. Cette sévérité peut être abrégée en une sous-chaîne unique."
+
+#. type: =item
+#: ../scripts/bts.pl:1840
+msgid "B<forwarded> I<bug> I<address>"
+msgstr "B<forwarded> I<bogue> I<adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1842
+msgid ""
+"Mark the I<bug> as forwarded to the given I<address> (usually an email "
+"address or a URL for an upstream bug tracker)."
+msgstr ""
+"Marquer le I<bogue> comme transmis à l'I<adresse> donnée (normalement une "
+"adresse électronique ou une URL pour un système de suivi amont)."
+
+#. type: =item
+#: ../scripts/bts.pl:1862
+msgid "B<notforwarded> I<bug>"
+msgstr "B<notforwarded> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1864
+msgid "Mark a I<bug> as not forwarded."
+msgstr "Marquer le I<bogue> comme n'ayant pas été transmis."
+
+#. type: =item
+#: ../scripts/bts.pl:1874
+msgid "B<package> [I<package> ...]"
+msgstr "B<package> [I<paquet> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1876
+msgid ""
+"The following commands will only apply to bugs against the listed "
+"I<package>s; this acts as a safety mechanism for the BTS. If no packages "
+"are listed, this check is turned off again."
+msgstr ""
+"Les commandes suivantes ne vont s'appliquer qu'aux bogues touchant les "
+"I<paquet>s indiqués ; il s'agit d'un mécanisme de sûreté pour le BTS. Si "
+"aucun paquet n'est listé, cette vérification est désactivée à nouveau."
+
+#. type: =item
+#: ../scripts/bts.pl:1890
+msgid "B<limit> [I<key>[B<:>I<value>]] ..."
+msgstr "B<limit> [I<clef>[B<:>I<valeur>]] ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:1892
+msgid ""
+"The following commands will only apply to bugs which meet the specified "
+"criterion; this acts as a safety mechanism for the BTS. If no I<value>s are "
+"listed, the limits for that I<key> are turned off again. If no I<key>s are "
+"specified, all limits are reset."
+msgstr ""
+"Les commandes suivantes ne vont s'appliquer qu'aux bogues correspondant aux "
+"critères indiqués ; il s'agit d'un mécanisme de sûreté pour le BTS. Si "
+"aucune I<valeur> n'est indiquée, les limites pour cette I<clef> sont "
+"désactivées. Si aucune I<clef> n'est indiquée, les limites sont remises à "
+"zéro."
+
+#. type: =item
+#: ../scripts/bts.pl:1903
+msgid "B<date>"
+msgstr "B<date>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1905
+msgid "Date the bug was submitted."
+msgstr "Date à laquelle le bogue a été soumis."
+
+#. type: =item
+#: ../scripts/bts.pl:1907
+msgid "B<subject>"
+msgstr "B<subject>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1909
+msgid "Subject of the bug."
+msgstr "Sujet du bogue."
+
+#. type: =item
+#: ../scripts/bts.pl:1911
+msgid "B<msgid>"
+msgstr "B<msgid>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1913
+msgid "Message-id of the initial bug report."
+msgstr "Identifiant du message du rapport de bogue initial."
+
+#. type: textblock
+#: ../scripts/bts.pl:1925
+msgid "Tags applied to the bug."
+msgstr "Étiquettes du bogue."
+
+#. type: textblock
+#: ../scripts/bts.pl:1937
+msgid "Bugs affecting this package."
+msgstr "Bogues qui affectent ce paquet."
+
+#. type: textblock
+#: ../scripts/bts.pl:1947
+msgid ""
+"For example, to limit the set of bugs affected by the subsequent control "
+"commands to those submitted by jrandomdeveloper@example.com and tagged "
+"B<wontfix>, one would use"
+msgstr ""
+"Par exemple, pour limiter l'ensemble des bogues pour lesquels vont "
+"s'appliquer les commandes de contrôle qui suivent à ceux envoyés par "
+"undéveloppeur@example.com qui ont l'étiquette B<wontfix>, on utilisera"
+
+#. type: textblock
+#: ../scripts/bts.pl:1951
+msgid "bts limit submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr "bts limit submitter:undéveloppeur@example.com tag:wontfix"
+
+#. type: textblock
+#: ../scripts/bts.pl:1956
+msgid "bts limit package:foo severity:wishlist severity:minor"
+msgstr "bts limit package:toto severity:wishlist severity:minor"
+
+#. type: textblock
+#: ../scripts/bts.pl:1958
+msgid ""
+"only applies the subsequent control commands to bugs of package foo with "
+"either B<wishlist> or B<minor> severity."
+msgstr ""
+"n'applique les commandes de contrôle qui suivent qu'aux bogues du paquet "
+"toto avec pour sévérité B<wishlist> ou B<minor>."
+
+#. type: =item
+#: ../scripts/bts.pl:2033
+msgid "B<owner> I<bug> I<owner-email>"
+msgstr "B<owner> I<bogue> I<adresse-du-propriétaire>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2035
+msgid ""
+"Change the \"owner\" address of a I<bug>, with B<!> meaning `use the address "
+"on the current email as the new owner address'."
+msgstr ""
+"Changer l'adresse électronique du \"propriétaire\" du I<bogue>, où B<!> "
+"signifie \"utiliser l'adresse électronique actuelle comme nouvelle adresse "
+"de propriétaire\"."
+
+#. type: textblock
+#: ../scripts/bts.pl:2038
+msgid "The owner of a bug accepts responsibility for dealing with it."
+msgstr "Le propriétaire d'un bogue accepte la responsabilité de s'en occuper."
+
+#. type: =item
+#: ../scripts/bts.pl:2050
+msgid "B<noowner> I<bug>"
+msgstr "B<noowner> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2052
+msgid "Mark a bug as having no \"owner\"."
+msgstr "Marquer un bogue comme n'ayant pas de \"propriétaire\"."
+
+#. type: =item
+#: ../scripts/bts.pl:2062
+msgid "B<subscribe> I<bug> [I<email>]"
+msgstr "B<subscribe> I<bogue> [I<adresse>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2064
+msgid ""
+"Subscribe the given I<email> address to the specified I<bug> report. If no "
+"email address is specified, the environment variable B<DEBEMAIL> or B<EMAIL> "
+"(in that order) is used. If those are not set, or B<!> is given as email "
+"address, your default address will be used."
+msgstr ""
+"Abonner l'I<adresse> électronique donnée au rapport de I<bogue> indiqué. Si "
+"aucune adresse n'a été fournie, la variable d'environnement B<DEBEMAIL> ou "
+"B<EMAIL> (dans cet ordre) est utilisée. Si aucune n'est définie, ou si B<!> "
+"est donné comme adresse électronique, votre adresse par défaut va être "
+"utilisée."
+
+#. type: textblock
+#: ../scripts/bts.pl:2069
+msgid ""
+"After executing this command, you will be sent a subscription confirmation "
+"to which you have to reply. When subscribed to a bug report, you receive "
+"all relevant emails and notifications. Use the unsubscribe command to "
+"unsubscribe."
+msgstr ""
+"Après avoir exécuté cette commande, vous allez recevoir une confirmation "
+"d'abonnement à laquelle vous devez répondre. En étant abonné à un rapport de "
+"bogue, vous allez recevoir tous les messages et notifications pertinents. "
+"Utilisez la commande unsubscribe pour vous désabonner."
+
+#. type: =item
+#: ../scripts/bts.pl:2092
+msgid "B<unsubscribe> I<bug> [I<email>]"
+msgstr "B<unsubscribe> I<bogue> [I<adresse>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2094
+msgid ""
+"Unsubscribe the given email address from the specified bug report. As with "
+"subscribe above, if no email address is specified, the environment variables "
+"B<DEBEMAIL> or B<EMAIL> (in that order) is used. If those are not set, or "
+"B<!> is given as email address, your default address will be used."
+msgstr ""
+"Désabonner l'adresse électronique utilisée du rapport de bogue indiqué. "
+"Comme pour la commande subscribe décrite ci-dessus, si aucune adresse n'a "
+"été fournie, la variable d'environnement B<DEBEMAIL> ou B<EMAIL> (dans cet "
+"ordre) est utilisée. Si aucune n'est définie, ou si B<!> est donné comme "
+"adresse électronique, votre adresse par défaut va être utilisée."
+
+#. type: textblock
+#: ../scripts/bts.pl:2099
+msgid ""
+"After executing this command, you will be sent an unsubscription "
+"confirmation to which you have to reply. Use the B<subscribe> command to, "
+"well, subscribe."
+msgstr ""
+"Après avoir exécuté cette commande, vous allez recevoir une confirmation de "
+"désabonnement à laquelle vous devez répondre. Utilisez la commande "
+"B<subscribe>, évidemment, pour vous abonner."
+
+#. type: =item
+#: ../scripts/bts.pl:2122
+msgid "B<reportspam> I<bug> ..."
+msgstr "B<reportspam> I<bogue> ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:2124
+msgid ""
+"The B<reportspam> command allows you to report a I<bug> report as containing "
+"spam. It saves one from having to go to the bug web page to do so."
+msgstr ""
+"La commande B<reportspam> vous permet de signaler un rapport de I<bogue> "
+"comme contenant du pourriel. Cela évite de passer par la page web du rapport "
+"de bogue pour ce faire."
+
+#. type: =item
+#: ../scripts/bts.pl:2161
+msgid "B<spamreport> I<bug> ..."
+msgstr "B<spamreport> I<bogue> ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:2163
+msgid "B<spamreport> is a synonym for B<reportspam>."
+msgstr "B<spamreport> est synonyme de B<reportspam>."
+
+#. type: =item
+#: ../scripts/bts.pl:2171
+msgid ""
+"B<cache> [I<options>] [I<maint_email> | I<pkg> | B<src:>I<pkg> | B<from:"
+">I<submitter>]"
+msgstr ""
+"B<cache> [I<options>] [I<adresse_resp.>] | I<paquet> | B<src:>I<paquet> | "
+"B<from:>I<rapporteur>]"
+
+#. type: =item
+#: ../scripts/bts.pl:2173
+msgid ""
+"B<cache> [I<options>] [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr ""
+"B<cache> [I<options>] [B<release-critical> | B<release-critical/>... | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2175
+msgid ""
+"Generate or update a cache of bug reports for the given email address or "
+"package. By default it downloads all bugs belonging to the email address in "
+"the B<DEBEMAIL> environment variable (or the B<EMAIL> environment variable "
+"if B<DEBEMAIL> is unset). This command may be repeated to cache bugs "
+"belonging to several people or packages. If multiple packages or addresses "
+"are supplied, bugs belonging to any of the arguments will be cached; those "
+"belonging to more than one of the arguments will only be downloaded once. "
+"The cached bugs are stored in F<$XDG_CACHE_HOME/devscripts/bts/> or, if "
+"B<XDG_CACHE_HOME> is not set, in F<~/.cache/devscripts/bts/>."
+msgstr ""
+"Créer ou mettre à jour le cache des rapports de bogue pour l'adresse "
+"électronique ou le paquet indiqué. Par défaut, cela télécharge tous les "
+"bogues appartenant à l'adresse électronique stockée dans la variable "
+"d'environnement B<DEBEMAIL> (ou dans la variable d'environnement B<EMAIL> si "
+"B<DEBEMAIL> n'est pas définie). Cette commande peut être répétée pour mettre "
+"en cache des bogues appartenant à plusieurs personnes ou touchant plusieurs "
+"paquets. Si plusieurs paquets ou adresses sont fournis, les bogues "
+"correspondant à l'un des paramètres seront mis en cache ; ceux correspondant "
+"à plusieurs paramètres ne seront téléchargés qu'une seule fois. Les bogues "
+"mis en cache sont stockés dans F<$XDG_CACHE_HOME/devscripts/bts/> ou, si "
+"B<XDG_CACHE_HOME> n'est pas défini, dans F<~/.cache/devscripts/bts/>."
+
+#. type: textblock
+#: ../scripts/bts.pl:2186
+msgid "You can use the cached bugs with the B<-o> switch. For example:"
+msgstr "Vous pouvez utiliser le cache grâce à l'option B<-o>. Par exemple :"
+
+#. type: verbatim
+#: ../scripts/bts.pl:2188
+#, no-wrap
+msgid ""
+" bts -o bugs\n"
+" bts -o show 12345\n"
+"\n"
+msgstr ""
+" bts -o bugs\n"
+" bts -o show 12345\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:2191
+msgid ""
+"Also, B<bts> will update the files in it in a piecemeal fashion as it "
+"downloads information from the BTS using the B<show> command. You might thus "
+"set up the cache, and update the whole thing once a week, while letting the "
+"automatic cache updates update the bugs you frequently refer to during the "
+"week."
+msgstr ""
+"Ainsi, une fois que le cache est mis en place, B<bts> va mettre à jour les "
+"fichiers contenus dans celui-ci au coup par coup quand il télécharge des "
+"informations depuis le BTS avec la commande B<show>. Il est donc possible de "
+"mettre en place un cache, et de le mettre à jour une fois par semaine, tout "
+"en laissant les mises à jour automatiques se faire pour les bogues auxquels "
+"vous accédez fréquemment pendant la semaine."
+
+#. type: textblock
+#: ../scripts/bts.pl:2197
+msgid ""
+"Some options affect the behaviour of the B<cache> command. The first is the "
+"setting of B<--cache-mode>, which controls how much B<bts> downloads of the "
+"referenced links from the bug page, including boring bits such as the "
+"acknowledgement emails, emails to the control bot, and the mbox version of "
+"the bug report. It can take three values: B<min> (the minimum), B<mbox> "
+"(download the minimum plus the mbox version of the bug report) or B<full> "
+"(the whole works). The second is B<--force-refresh> or B<-f>, which forces "
+"the download, even if the cached bug report is up-to-date. The B<--include-"
+"resolved> option indicates whether bug reports marked as resolved should be "
+"downloaded during caching."
+msgstr ""
+"Certaines options modifient le comportement de la commande B<cache>. La "
+"première est B<--cache-mode>, qui contrôle à quel point B<bts> télécharge "
+"les liens référencés depuis la page du bogue, ce qui inclut des choses "
+"pénibles comme les messages de confirmation, les messages au robot de "
+"contrôle, et la version B<mbox> du rapport de bogue. Trois valeurs sont "
+"acceptées : B<min> (le minimum), B<mbox> (télécharger le minimum plus la "
+"version mbox du rapport de bogue) ou B<full>. La seconde option qui modifie "
+"le comportement de la commande cache est B<--force-refresh> ou B<-f>, qui "
+"force le téléchargement, même si le rapport de bogue mis en cache est à jour."
+"L'option B<--include-resolved> indique si les rapports de bogue marqués "
+"comme étant résolus doivent être téléchargés lors de la mise en cache."
+
+#. type: textblock
+#: ../scripts/bts.pl:2208
+msgid ""
+"Each of these is configurable from the configuration file, as described "
+"below. They may also be specified after the B<cache> command as well as at "
+"the start of the command line."
+msgstr ""
+"Toutes ces options sont configurables dans le fichier de configuration, "
+"comme décrit ci-dessous. Elles peuvent aussi bien être indiquées après la "
+"commande B<cache> qu'au début de la ligne de commande."
+
+#. type: textblock
+#: ../scripts/bts.pl:2212
+msgid ""
+"Finally, B<-q> or B<--quiet> will suppress messages about caches being up-to-"
+"date, and giving the option twice will suppress all cache messages (except "
+"for error messages)."
+msgstr ""
+"Enfin, B<-q> ou B<--quiet> supprime les messages indiquant que le cache est "
+"à jour et utiliser cette option deux fois va supprimer tous les messages à "
+"propos du cache (à l'exception des messages d'erreur)."
+
+#. type: textblock
+#: ../scripts/bts.pl:2216
+msgid ""
+"Beware of caching RC, though: it will take a LONG time! (With 1000+ RC bugs "
+"and a delay of 5 seconds between bugs, you're looking at a minimum of 1.5 "
+"hours, and probably significantly more than that.)"
+msgstr ""
+"Attention à la mise en cache RC : cela met vraiment LONGTEMPS ! (Avec plus "
+"de mille bogues RC et un délai de 5 secondes entre chaque bogue, vous allez "
+"avoir besoin d'un minimum d'une heure et demie, et probablement bien plus "
+"que ça.)"
+
+#. type: =item
+#: ../scripts/bts.pl:2351
+msgid "B<cleancache> I<package> | B<src:>I<package> | I<maintainer>"
+msgstr "B<cleancache> I<paquet> | B<src:>I<paquet> | I<responsable>"
+
+#. type: =item
+#: ../scripts/bts.pl:2353
+msgid ""
+"B<cleancache from:>I<submitter> | B<tag:>I<tag> | B<usertag:>I<tag> | "
+"I<number> | B<ALL>"
+msgstr ""
+"B<cleancache from:>I<rapporteur> | B<tag:>I<étiquette> | B<usertag:"
+">I<étiquette> | I<numéro> | B<ALL>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2355
+msgid ""
+"Clean the cache for the specified I<package>, I<maintainer>, etc., as "
+"described above for the B<bugs> command, or clean the entire cache if B<ALL> "
+"is specified. This is useful if you are going to have permanent network "
+"access or if the database has become corrupted for some reason. Note that "
+"for safety, this command does not default to the value of B<DEBEMAIL> or "
+"B<EMAIL>."
+msgstr ""
+"Supprimer le cache du I<paquet>, I<responsable>, etc., indiqué, comme décrit "
+"plus haut dans la commande B<bugs>, ou supprimer tout le cache si B<ALL> est "
+"indiqué. C'est utile si vous avez un accès permanent au réseau ou si la base "
+"de données a été corrompue pour une raison quelconque. Remarquez que par "
+"sécurité, la commande ne prendra pas la valeur de B<DEBEMAIL> ou B<EMAIL> "
+"par défaut."
+
+#. type: =item
+#: ../scripts/bts.pl:2403
+msgid "B<listcachedbugs> [I<number>]"
+msgstr "B<listcachedbugs> [I<numéro>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2405
+msgid ""
+"List cached bug ids (intended to support bash completion). The optional "
+"number argument restricts the list to those bug ids that start with that "
+"number."
+msgstr ""
+"Lister les identifiants des bogues mis en cache (en prévision de la prise en "
+"charge du complément pour bash). L'argument optionnel de numéro limite la "
+"liste aux bogues dont l'identifiant débute par ce numéro."
+
+#. type: =item
+#: ../scripts/bts.pl:2437
+msgid "B<version>"
+msgstr "B<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2439
+msgid "Display version and copyright information."
+msgstr "Afficher la version et le copyright."
+
+#. type: =item
+#: ../scripts/bts.pl:2454
+msgid "B<help>"
+msgstr "B<help>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2456
+msgid ""
+"Display a short summary of commands, suspiciously similar to parts of this "
+"man page."
+msgstr ""
+"Afficher un court résumé des commandes, de manière similaire à certaines "
+"parties de cette page de manuel."
+
+#. type: SH
+#: ../scripts/bts.pl:4190 ../scripts/debuild.1:88 ../scripts/diff2patches.1:40
+#: ../scripts/pts-subscribe.1:34
+#, no-wrap
+msgid "ENVIRONMENT VARIABLES"
+msgstr "VARIABLES D'ENVIRONNEMENT"
+
+#. type: =item
+#: ../scripts/bts.pl:4194
+msgid "B<DEBEMAIL>"
+msgstr "B<DEBEMAIL>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4196
+msgid ""
+"If this is set, the From: line in the email will be set to use this email "
+"address instead of your normal email address (as would be determined by "
+"B<mail>)."
+msgstr ""
+"Si cela est défini, la ligne From: du message va être configurée pour "
+"utiliser cette adresse électronique au lieu de votre adresse habituelle (qui "
+"serait déterminée par B<mail>)."
+
+#. type: =item
+#: ../scripts/bts.pl:4200
+msgid "B<DEBFULLNAME>"
+msgstr "B<DEBFULLNAME>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4202
+msgid ""
+"If B<DEBEMAIL> is set, B<DEBFULLNAME> is examined to determine the full name "
+"to use; if this is not set, B<bts> attempts to determine a name from your "
+"F<passwd> entry."
+msgstr ""
+"Si B<DEBEMAIL> est définie, B<DEBFULLNAME> est examinée pour déterminer le "
+"nom complet à utiliser ; sinon B<bts> essaie de déterminer un nom à partir "
+"de votre entrée I<passwd>."
+
+#. type: =item
+#: ../scripts/bts.pl:4206
+msgid "B<BROWSER>"
+msgstr "B<BROWSER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4208
+msgid ""
+"If set, it specifies the browser to use for the B<show> and B<bugs> "
+"options. See the description above."
+msgstr ""
+"Si elle est définie, elle indique le navigateur à utiliser pour les options "
+"B<show> et B<bugs>. Consultez la description précédente."
+
+#. type: SH
+#: ../scripts/bts.pl:4213 ../scripts/debc.1:102 ../scripts/debchange.1:405
+#: ../scripts/debcheckout.pl:180 ../scripts/debclean.1:93
+#: ../scripts/debcommit.pl:104 ../scripts/debdiff.1:188 ../scripts/debi.1:109
+#: ../scripts/debrelease.1:105 ../scripts/debrsign.1:57
+#: ../scripts/debsign.1:105 ../scripts/debuild.1:327 ../scripts/dget.pl:690
+#: ../scripts/dpkg-depcheck.1:102 ../scripts/dscverify.1:43
+#: ../scripts/grep-excuses.1:46 ../scripts/mass-bug.pl:141
+#: ../scripts/nmudiff.1:92 ../scripts/plotchangelog.1:106
+#: ../scripts/pts-subscribe.1:42 ../scripts/rmadison.pl:355
+#: ../scripts/uupdate.1:107 ../scripts/who-uploads.1:51
+#, no-wrap
+msgid "CONFIGURATION VARIABLES"
+msgstr "VARIABLES DE CONFIGURATION"
+
+# NOTE: presque identique
+#. type: textblock
+#: ../scripts/bts.pl:4215 ../scripts/debcommit.pl:106
+#: ../scripts/mass-bug.pl:143
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+"Les deux fichiers de configuration I</etc/devscripts.conf> et I<~/."
+"devscripts> sont chargés dans cet ordre par un interpréteur de commandes "
+"pour définir les variables de configuration. Des options de ligne de "
+"commande peuvent être utilisées pour écraser les paramètres des fichiers de "
+"configuration. Les paramètres des variables d'environnement sont ignorés à "
+"cette fin. Les variables actuellement reconnues sont :"
+
+#. type: =item
+#: ../scripts/bts.pl:4223
+msgid "B<BTS_OFFLINE>"
+msgstr "B<BTS_OFFLINE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4225
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--offline> command "
+"line parameter being used. Only has an effect on the B<show> and B<bugs> "
+"commands. The default is B<no>. See the description of the B<show> command "
+"above for more information."
+msgstr ""
+"Lui attribuer la valeur B<yes> équivaut à utiliser le paramètre en ligne de "
+"commande B<--offline>. Cela n'affecte que les commandes B<show> et B<bugs>. "
+"La valeur par défaut est B<no>. Veuillez consulter la description de la "
+"commande B<show> ci-dessus pour plus d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:4230
+msgid "B<BTS_CACHE>"
+msgstr "B<BTS_CACHE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4232
+msgid ""
+"If this is set to B<no>, then it is the same as the B<--no-cache> command "
+"line parameter being used. Only has an effect on the B<show> and B<bug> "
+"commands. The default is B<yes>. Again, see the B<show> command above for "
+"more information."
+msgstr ""
+"Lui attribuer la valeur B<no>, équivaut à utiliser le paramètre en ligne de "
+"commande B<--nocache>. Cela n'affecte que les commandes B<show> et B<bug>. "
+"La valeur par défaut est B<yes>. À nouveau, veuillez consulter la commande "
+"B<show> ci-dessus pour plus d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:4237
+msgid "B<BTS_CACHE_MODE=>{B<min>,B<mbox>,B<full>}"
+msgstr "B<BTS_CACHE_MODE=>{B<min>,B<mbox>,B<full>}"
+
+#. type: textblock
+#: ../scripts/bts.pl:4239
+msgid ""
+"How much of the BTS should we mirror when we are asked to cache something? "
+"Just the minimum, or also the mbox or the whole thing? The default is "
+"B<min>, and it has the same meaning as the B<--cache-mode> command line "
+"parameter. Only has an effect on the cache. See the B<cache> command for "
+"more information."
+msgstr ""
+"Quantité de données du BTS à récupérer quand le cache est demandé. Seulement "
+"le minimum, ou alors la mbox ou bien encore le tout. La valeur par défaut "
+"est B<min>, ce qui a la même signification que le paramètre de l'option de "
+"ligne commande B<--cache-mode>. Cela n'affecte que le cache. Consultez la "
+"documentation de la commande B<cache> pour plus d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:4245
+msgid "B<BTS_FORCE_REFRESH>"
+msgstr "B<BTS_FORCE_REFRESH>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4247
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--force-refresh> "
+"command line parameter being used. Only has an effect on the B<cache> "
+"command. The default is B<no>. See the B<cache> command for more "
+"information."
+msgstr ""
+"Lui attribuer la valeur B<yes>, équivaut à utiliser le paramètre en ligne de "
+"commande B<--force-refresh>. Cela n'affecte que la commande B<cache>. La "
+"valeur par défaut est B<no>. Veuillez consulter la commande B<cache> pour "
+"plus d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:4252
+msgid "B<BTS_MAIL_READER>"
+msgstr "B<BTS_MAIL_READER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4254
+msgid ""
+"If this is set, specifies a mail reader to use instead of B<mutt>. Same as "
+"the B<--mailreader> command line option."
+msgstr ""
+"Si elle est définie, elle indique le client de messagerie à utiliser à la "
+"place de B<mutt>. Équivalent à l'option de ligne de commande B<--mailreader>."
+
+#. type: TP
+#: ../scripts/bts.pl:4257 ../scripts/mass-bug.pl:151 ../scripts/nmudiff.1:117
+#, no-wrap
+msgid "B<BTS_SENDMAIL_COMMAND>"
+msgstr "B<BTS_SENDMAIL_COMMAND>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4259 ../scripts/mass-bug.pl:153
+msgid ""
+"If this is set, specifies a B<sendmail> command to use instead of F</usr/"
+"sbin/sendmail>. Same as the B<--sendmail> command line option."
+msgstr ""
+"Si elle est définie, elle indique la commande d'envoi de message à utiliser "
+"à la place de F</usr/sbin/sendmail>. Équivaut à l'option de ligne de "
+"commande B<--sendmail>."
+
+#. type: =item
+#: ../scripts/bts.pl:4262
+msgid "B<BTS_ONLY_NEW>"
+msgstr "B<BTS_ONLY_NEW>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4264
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have. The default is B<no>. Same as the B<--only-new> command line "
+"option."
+msgstr ""
+"Ne télécharger que les nouveaux bogues pour la mise en cache. Ne pas "
+"vérifier si les bogues déjà téléchargés ont été modifiés. La valeur par "
+"défaut est B<no>. Identique à l'option en ligne de commande B<--only-new>."
+
+#. type: =item
+#: ../scripts/bts.pl:4268
+msgid "B<BTS_SMTP_HOST>"
+msgstr "B<BTS_SMTP_HOST>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4270
+msgid ""
+"If this is set, specifies an SMTP host to use for sending mail rather than "
+"using the B<sendmail> command. Same as the B<--smtp-host> command line "
+"option."
+msgstr ""
+"Si elle est définie, elle indique un serveur SMTP à utiliser pour envoyer "
+"les courriers au lieu d'utiliser la commande B<sendmail>. Équivaut à "
+"l'option en ligne de commande B<--smtp-host>."
+
+#. type: textblock
+#: ../scripts/bts.pl:4274
+msgid ""
+"Note that this option takes priority over B<BTS_SENDMAIL_COMMAND> if both "
+"are set, unless the B<--sendmail> option is used."
+msgstr ""
+"Remarquez que cette option a la priorité par rapport à "
+"B<BTS_SENDMAIL_COMMAND> si les deux sont utilisées, à moins que l'option B<--"
+"sendmail> soit utilisée."
+
+#. type: =item
+#: ../scripts/bts.pl:4277
+msgid "B<BTS_SMTP_AUTH_USERNAME>, B<BTS_SMTP_AUTH_PASSWORD>"
+msgstr "B<BTS_SMTP_AUTH_USERNAME>, B<BTS_SMTP_AUTH_PASSWORD>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4279
+msgid ""
+"If these options are set, then it is the same as the B<--smtp-username> and "
+"B<--smtp-password> options being used."
+msgstr ""
+"Définir ces options équivaut à utiliser les options B<--smtp-username> et "
+"B<--smtp-password>."
+
+#. type: =item
+#: ../scripts/bts.pl:4282
+msgid "B<BTS_SMTP_HELO>"
+msgstr "B<BTS_SMTP_HELO>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4284
+msgid "Same as the B<--smtp-helo> command line option."
+msgstr "Identique à l'option en ligne de commande B<--smtp-helo>."
+
+#. type: =item
+#: ../scripts/bts.pl:4286
+msgid "B<BTS_INCLUDE_RESOLVED>"
+msgstr "B<BTS_INCLUDE_RESOLVED>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4288
+msgid ""
+"If this is set to B<no>, then it is the same as the B<--no-include-resolved> "
+"command line parameter being used. Only has an effect on the B<cache> "
+"command. The default is B<yes>. See the B<cache> command for more "
+"information."
+msgstr ""
+"Lui attribuer la valeur B<no> équivaut à utiliser le paramètre en ligne de "
+"commande B<--no-include-resolved>. Cela n'affecte que la commande B<cache>. "
+"La valeur par défaut est B<yes>. Veuillez consulter la commande B<cache> "
+"pour plus d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:4293
+msgid "B<BTS_SUPPRESS_ACKS>"
+msgstr "B<BTS_SUPPRESS_ACKS>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4295
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--no-ack> command "
+"line parameter being used. The default is B<no>."
+msgstr ""
+"Lui attribuer la valeur B<yes> équivaut à utiliser l'option B<--no-ack>. La "
+"valeur par défaut est B<no>."
+
+#. type: =item
+#: ../scripts/bts.pl:4298
+msgid "B<BTS_INTERACTIVE>"
+msgstr "B<BTS_INTERACTIVE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4300
+msgid ""
+"If this is set to B<yes> or B<force>, then it is the same as the B<--"
+"interactive> or B<--force-interactive> command line parameter being used. "
+"The default is B<no>."
+msgstr ""
+"Lui attribuer la valeur B<yes> ou B<force> équivaut à utiliser l'option B<--"
+"interactive> ou B<--force-interactive>. La valeur par défaut est B<no>."
+
+#. type: =item
+#: ../scripts/bts.pl:4304
+msgid "B<BTS_DEFAULT_CC>"
+msgstr "B<BTS_DEFAULT_CC>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4306
+msgid ""
+"Specify a list of e-mail addresses to which a carbon copy of the generated e-"
+"mail to the control bot should automatically be sent."
+msgstr ""
+"Indiquer une liste d'adresses électroniques auxquelles une copie conforme "
+"des courriers, créés pour le robot \"control\", doit être envoyée "
+"automatiquement."
+
+#. type: =item
+#: ../scripts/bts.pl:4309
+msgid "B<BTS_SERVER>"
+msgstr "B<BTS_SERVER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4311
+msgid ""
+"Specify the name of a debbugs server which should be used instead of https://"
+"bugs.debian.org."
+msgstr ""
+"Indiquer le nom d'un serveur debbugs qui doit être utilisé à la place de "
+"https://bugs.debian.org."
+
+#. type: textblock
+#: ../scripts/bts.pl:4318
+msgid ""
+"Please see L<https://www.debian.org/Bugs/server-control> for more details on "
+"how to control the BTS using emails and L<https://www.debian.org/Bugs/> for "
+"more information about the BTS."
+msgstr ""
+"Veuillez consulter L<https://www.debian.org/Bugs/server-control> pour plus "
+"de détails sur comment contrôler le BTS avec des courriers et L<https://www."
+"debian.org/Bugs/> pour plus d'informations sur le BTS."
+
+#. type: textblock
+#: ../scripts/bts.pl:4322
+msgid "querybts(1), reportbug(1), pts-subscribe(1), devscripts.conf(5)"
+msgstr "querybts(1), reportbug(1), pts-subscribe(1), devscripts.conf(5)"
+
+#. type: =head1
+#: ../scripts/bts.pl:4324 ../scripts/chdist.pl:131 ../scripts/debsnap.1:146
+#: ../scripts/mass-bug.pl:559 ../scripts/tagpending.pl:425
+#, no-wrap
+msgid "COPYRIGHT"
+msgstr "COPYRIGHT"
+
+#. type: textblock
+#: ../scripts/bts.pl:4326
+msgid ""
+"This program is Copyright (C) 2001-2003 by Joey Hess <joeyh@debian.org>. "
+"Many modifications have been made, Copyright (C) 2002-2005 Julian Gilbey "
+"<jdg@debian.org> and Copyright (C) 2007 Josh Triplett <josh@freedesktop.org>."
+msgstr ""
+"Ce programme est Copyright (C) 2001-2003 by Joey Hess <joeyh@debian.org>. De "
+"nombreuses modifications ont été effectuées, Copyright (C) 2002-2005 Julian "
+"Gilbey <jdg@debian.org> et Copyright (C) 2007 Josh Triplett "
+"<josh@freedesktop.org>."
+
+#. type: textblock
+#: ../scripts/bts.pl:4331 ../scripts/chdist.pl:136 ../scripts/mass-bug.pl:563
+msgid ""
+"It is licensed under the terms of the GPL, either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"Il est publié sous les termes de la Licence Publique Générale (GPL) "
+"version 2 ou toute version ultérieure (à votre discrétion)."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:24
+msgid ""
+"build-rdeps - find packages that depend on a specific package to build "
+"(reverse build depends)"
+msgstr ""
+"build-rdeps - Trouver les paquets qui dépendent d'un paquet donné pour leur "
+"construction"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:28
+msgid "B<build-rdeps> I<package>"
+msgstr "B<build-rdeps> I<paquet>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:32
+msgid ""
+"B<build-rdeps> searches for all packages that build-depend on the specified "
+"package."
+msgstr ""
+"B<build-rdeps> recherche tous les paquets qui dépendent du paquet indiqué "
+"pour leur construction (\"reverse build depends\" : dépendances de "
+"construction inverses)"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:34
+msgid ""
+"The default behaviour is to just `grep` for the given dependency in the "
+"Build-Depends field of apt's Sources files."
+msgstr ""
+"Le comportement par défaut est de ne rechercher que la dépendance donnée "
+"dans le champ Build-Depends des fichiers Sources d'apt."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:37
+msgid ""
+"If the package dose-extra >= 4.0 is installed, then a more complete reverse "
+"build dependency computation is carried out. In particular, with that "
+"package installed, build-rdeps will find transitive reverse dependencies, "
+"respect architecture and build profile restrictions, take Provides "
+"relationships, Conflicts, Pre-Depends, Build-Depends-Arch and versioned "
+"dependencies into account and correctly resolve multiarch relationships for "
+"crossbuild reverse dependency resolution. (This tends to be a slow process "
+"due to the complexity of the package interdependencies.)"
+msgstr ""
+"Si le paquet dose-extra >= 4.0 est installé, un calcul plus complet des "
+"dépendances de construction inverses est réalisé. En particulier, lorsque ce "
+"paquet est installé, build-rdeps trouvera les dépendances inverses "
+"transitives, respectera les restrictions d'architectures et de profils de "
+"construction, prendra en compte les relations Provides, Conflicts, Pre-"
+"Depends, Build-Depends-Arch et les dépendances versionnées, et résoudra "
+"correctement les relations multiarchitectures pour la résolution de "
+"dépendances de construction croisée inverses. (Cela a tendance à être un "
+"processus lent du fait de la complexité de l'interdépendance des paquets.)"
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:50
+msgid "B<-u>, B<--update>"
+msgstr "B<-u>, B<--update>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:52
+msgid "Run apt-get update before searching for build-depends."
+msgstr ""
+"Exécuter \"apt-get update\" avant de chercher les dépendances de "
+"construction."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:54
+msgid "B<-s>, B<--sudo>"
+msgstr "B<-s>, B<--sudo>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:56
+msgid "Use sudo when running apt-get update. Has no effect if -u is omitted."
+msgstr ""
+"Utiliser sudo pour l'exécution de \"apt-get update\". Ça n'a aucun effet si -"
+"u n'est pas utilisée."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:58
+msgid "B<--distribution>"
+msgstr "B<--distribution>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:60
+msgid "Select another distribution, which is searched for build-depends."
+msgstr ""
+"Sélectionner une autre distribution, dans laquelle seront recherchées les "
+"dépendances de construction."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:62
+msgid "B<--only-main>"
+msgstr "B<--only-main>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:64
+msgid "Ignore contrib and non-free"
+msgstr "Ignorer contrib et non-free"
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:66
+msgid "B<--exclude-component>"
+msgstr "B<--exclude-component>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:68
+msgid "Ignore the given component (e.g. main, contrib, non-free)."
+msgstr ""
+"Ignorer les composantes indiquées (par exemple, main, contrib, non-free)."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:70
+msgid "B<--origin>"
+msgstr "B<--origin>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:72
+msgid "Restrict the search to only the specified origin (such as \"Debian\")."
+msgstr ""
+"Restreindre la recherche à l'origine indiquée seulement (par exemple "
+"\"Debian\")."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:74
+msgid "B<-m>, B<--print-maintainer>"
+msgstr "B<-m>, B<--print-maintainer>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:76
+msgid "Print the value of the maintainer field for each package."
+msgstr "Afficher le responsable (le champ Maintainer) pour tous les paquets."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:78
+msgid "B<--host-arch>"
+msgstr "B<--host-arch>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:80
+msgid ""
+"Explicitly set the host architecture. The default is the value of `dpkg-"
+"architecture -qDEB_HOST_ARCH`. This option only works if dose-extra >= 4.0 "
+"is installed."
+msgstr ""
+"Définir explicitement l'architecture de l'hôte. Par défaut, c'est la valeur "
+"de \"dpkg-architecture -qDEB_HOST_ARCH\". Cette option ne fonctionne que si "
+"dose-extra >= 4.0 est installé."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:84
+msgid "B<--build-arch>"
+msgstr "B<--build-arch>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:86
+msgid ""
+"Explicitly set the build architecture. The default is the value of `dpkg-"
+"architecture -qDEB_BUILD_ARCH`. This option only works if dose-extra >= 4.0 "
+"is installed."
+msgstr ""
+"Définir explicitement l'architecture de construction. Par défaut, c'est la "
+"valeur de \"dpkg-architecture -qDEB_BUILD_ARCH\". Cette option ne fonctionne "
+"que si dose-extra >= 4.0 est installé."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:90
+msgid "B<--no-arch-all>, B<--no-arch-any>"
+msgstr "B<--no-arch-all>, B<--no-arch-any>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:92
+msgid ""
+"Ignore Build-Depends-Indep or Build-Depends-Arch while looking for reverse "
+"dependencies."
+msgstr ""
+"Ignore Build-Depends-Indep et Build-Depends-Arch lors de la recherche des "
+"dépendances inverses."
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:95 ../scripts/nmudiff.1:29
+#, no-wrap
+msgid "B<--old>"
+msgstr "B<--old>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:97
+msgid ""
+"Force the old simple behaviour without dose-ceve support even if dose-extra "
+">= 4.0 is installed. (This tends to be faster.)"
+msgstr ""
+"Forcer l'ancien comportement simple, sans prise en charge de dose-ceve même "
+"si dose-extra >= 4.0 est installé. (Cela tend à être plus rapide.)"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:100
+msgid ""
+"Notice, that the old behaviour only finds direct dependencies, ignores "
+"virtual dependencies, does not find transitive dependencies and does not "
+"take version relationships, architecture restrictions, build profiles or "
+"multiarch relationships into account."
+msgstr ""
+"Attention, l'ancien comportement ne trouve que les dépendances directes, "
+"ignore les dépendances virtuelles, ne trouve pas les dépendances transitives "
+"et ne prend pas en compte les relations de versions, les restrictions "
+"d'architectures, les profils de construction ou les relations "
+"multiarchitectures."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:107
+msgid ""
+"Don't print meta information (header, counter). Making it easier to use in "
+"scripts."
+msgstr ""
+"Ne pas afficher les méta-informations (en-tête, compteur), pour une "
+"utilisation plus facile dans les scripts."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:110
+msgid "B<-d>, B<--debug>"
+msgstr "B<-d>, B<--debug>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:112
+msgid "Run the debug mode"
+msgstr "Exécuter le mode de débogage"
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:114 ../scripts/cowpoke.1:131
+#: ../scripts/debclean.1:87 ../scripts/diff2patches.1:22
+#: ../scripts/grep-excuses.1:23 ../scripts/mass-bug.pl:126
+#: ../scripts/nmudiff.1:86 ../scripts/plotchangelog.1:92
+#: ../scripts/uscan.pl:1771
+#, no-wrap
+msgid "B<--help>"
+msgstr "B<--help>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:116
+msgid "Show the usage information."
+msgstr "Afficher les informations sur l'utilisation."
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:118 ../scripts/chdist.pl:49
+#: ../scripts/cowpoke.1:135 ../scripts/debchange.1:402 ../scripts/debclean.1:90
+#: ../scripts/debrelease.1:102 ../scripts/deb-why-removed.pl:229
+#: ../scripts/debsign.1:102 ../scripts/debsnap.1:77
+#: ../scripts/dep3changelog.1:19 ../scripts/diff2patches.1:25
+#: ../scripts/dscverify.1:40 ../scripts/grep-excuses.1:26
+#: ../scripts/mass-bug.pl:130 ../scripts/nmudiff.1:89
+#: ../scripts/plotchangelog.1:95 ../scripts/pts-subscribe.1:31
+#: ../scripts/rmadison.pl:342 ../scripts/uscan.pl:1775 ../scripts/uupdate.1:104
+#: ../scripts/who-uploads.1:48
+#, no-wrap
+msgid "B<--version>"
+msgstr "B<--version>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:120
+msgid "Show the version information."
+msgstr "Afficher les informations sur la version."
+
+#. type: SH
+#: ../scripts/build-rdeps.pl:124 ../scripts/debpkg.1:12
+#, no-wrap
+msgid "REQUIREMENTS"
+msgstr "CONDITIONS D'EXÉCUTION"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:126
+msgid ""
+"The tool requires apt Sources files to be around for the checked "
+"components. In the default case this means that in /var/lib/apt/lists files "
+"need to be around for main, contrib and non-free."
+msgstr ""
+"L'outil a besoin des fichiers Sources d'APT présents pour les composantes "
+"vérifiées. Par défaut, cela signifie que les fichiers de /var/lib/apt/lists "
+"doivent être présents pour main, contrib et non-free."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:130
+msgid ""
+"In practice this means one needs to add one deb-src line for each component, "
+"e.g."
+msgstr ""
+"En pratique, cela signifie que la ligne deb-src doit être ajoutée pour "
+"chaque composante, par exemple"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:133
+msgid "deb-src http://<mirror>/debian <dist> main contrib non-free"
+msgstr "deb-src http://<miroir>/debian <dist> main contrib non-free"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:135
+msgid ""
+"and run apt-get update afterwards or use the update option of this tool."
+msgstr ""
+"et d'exécuter ensuite \"apt-get update\" ou d'utiliser l'option B<--update> "
+"de cet outil."
+
+#. type: =head1
+#: ../scripts/build-rdeps.pl:539 ../scripts/debcommit.pl:943
+#: ../scripts/desktop2menu.pl:43 ../scripts/namecheck.pl:30
+#: ../scripts/svnpath.pl:92 ../scripts/transition-check.pl:72
+msgid "LICENSE"
+msgstr "LICENCE"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:541
+msgid ""
+"This code is copyright by Patrick Schoenfeld <schoenfeld@debian.org>, all "
+"rights reserved. This program comes with ABSOLUTELEY NO WARRANTY. You are "
+"free to redistribute this code under the terms of the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+"Ce code est copyright Patrick Schoenfeld <schoenfeld@debian.org>, tous "
+"droits réservés. Ce programme est fourni SANS AUCUNE GARANTIE. Vous êtes "
+"libre de redistribuer ce code sous les termes de la licence publique "
+"générale GNU (GNU General Public Licence), version 2 ou ultérieure."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:549
+msgid "Patrick Schoenfeld <schoenfeld@debian.org>"
+msgstr "Patrick Schoenfeld <schoenfeld@debian.org>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:20
+msgid "chdist - script to easily play with several distributions"
+msgstr "chdist - Script pour facilement jouer avec différentes distributions"
+
+#. type: textblock
+#: ../scripts/chdist.pl:24
+msgid "B<chdist> [I<options>] [I<command>] [I<command parameters>]"
+msgstr "B<chdist> [I<options>] [I<commande>] [I<paramètres de la commande>]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:28
+msgid ""
+"B<chdist> is a rewrite of what used to be known as 'MultiDistroTools' (or "
+"mdt). Its use is to create 'APT trees' for several distributions, making it "
+"easy to query the status of packages in other distribution without using "
+"chroots, for instance."
+msgstr ""
+"B<chdist> est une réécriture de ce qu'était \"MultiDistroTools\" (ou "
+"\"mdt\"). Ce programme permet de créer des \"arbres APT\" pour différentes "
+"distributions, facilitant la récupération du statut de paquets d'autres "
+"distributions sans, par exemple, utiliser de chroot."
+
+#. type: textblock
+#: ../scripts/chdist.pl:39 ../scripts/mass-bug.pl:128
+msgid "Provide a usage message."
+msgstr "Afficher un message sur l'utilisation."
+
+#. type: =item
+#: ../scripts/chdist.pl:41
+msgid "B<-d>, B<--data-dir> I<DIR>"
+msgstr "B<-d>, B<--data-dir> I<REP>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:43
+msgid "Choose data directory (default: F<~/.chdist/>)."
+msgstr "Choisir le répertoire des données (par défaut : F<~/.chdist/>)."
+
+#. type: =item
+#: ../scripts/chdist.pl:45
+msgid "B<-a>, B<--arch> I<ARCH>"
+msgstr "B<-a>, B<--arch> I<ARCH>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:47
+msgid "Choose architecture (default: `B<dpkg --print-architecture>`)."
+msgstr ""
+"Choisir l'architecture (par défaut : \"B<dpkg> B<--print-architecture>\")."
+
+#. type: textblock
+#: ../scripts/chdist.pl:51 ../scripts/deb-reversion.dbk:239
+#: ../scripts/mass-bug.pl:132 ../scripts/uscan.pl:1777
+msgid "Display version information."
+msgstr "Afficher les informations sur la version."
+
+#. type: =item
+#: ../scripts/chdist.pl:59
+msgid "B<create> I<DIST> [I<URL> I<RELEASE> I<SECTIONS>]"
+msgstr "B<create> I<DIST> [I<URL> I<VERSION> I<SECTIONS>]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:61
+msgid "Prepare a new tree named I<DIST>"
+msgstr "Préparer une nouvelle arborescence nommée I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:63
+msgid "B<apt> I<DIST> <B<update>|B<source>|B<show>|B<showsrc>|...>"
+msgstr "B<apt> I<DIST> <B<update>|B<source>|B<show>|B<showsrc>|...>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:65
+msgid "Run B<apt> inside I<DIST>"
+msgstr "Exécuter B<apt> dans I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:67
+msgid "B<apt-get> I<DIST> <B<update>|B<source>|...>"
+msgstr "B<apt-get> I<DIST> <B<update>|B<source>|...>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:69
+msgid "Run B<apt-get> inside I<DIST>"
+msgstr "Exécuter B<apt-get> dans I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:71
+msgid "B<apt-cache> I<DIST> <B<show>|B<showsrc>|...>"
+msgstr "B<apt-cache> I<DIST> <B<show>|B<showsrc>|...>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:73
+msgid "Run B<apt-cache> inside I<DIST>"
+msgstr "Exécuter B<apt-cache> dans I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:75
+msgid "B<apt-file> I<DIST> <B<update>|B<search>|...>"
+msgstr "B<apt-file> I<DIST> <B<update>|B<source>|...>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:77
+msgid "Run B<apt-file> inside I<DIST>"
+msgstr "Exécuter B<apt-file> dans I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:79
+msgid "B<apt-rdepends> I<DIST> [...]"
+msgstr "B<apt-rdepends> I<DIST> [...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:81
+msgid "Run B<apt-rdepends> inside I<DIST>"
+msgstr "Exécuter B<apt-rdepends> dans I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:83
+msgid "B<aptitude> I<DIST> [...]"
+msgstr "B<aptitude> I<DIST> [...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:85
+msgid "Run B<aptitude> inside I<DIST>"
+msgstr "Exécuter B<aptitude> dans I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:87
+msgid "B<src2bin> I<DIST SRCPKG>"
+msgstr "B<src2bin> I<DIST PQTSRC>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:89
+msgid "List binary packages for I<SRCPKG> in I<DIST>"
+msgstr "Afficher la liste des paquets binaires de I<PQTSRC> dans I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:91
+msgid "B<bin2src> I<DIST BINPKG>"
+msgstr "B<bin2src> I<DIST PQTBIN>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:93
+msgid "List source package for I<BINPKG> in I<DIST>"
+msgstr "Afficher la liste des paquets source de I<PQTBIN> dans I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:95
+msgid "B<compare-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+msgstr "B<compare-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+
+#. type: =item
+#: ../scripts/chdist.pl:97
+msgid "B<compare-bin-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+msgstr "B<compare-bin-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:99
+msgid "List versions of packages in several I<DIST>ributions"
+msgstr ""
+"Afficher la liste des versions de paquets de plusieurs I<DIST>ributions"
+
+#. type: =item
+#: ../scripts/chdist.pl:101
+msgid "B<compare-versions> I<DIST1 DIST2>"
+msgstr "B<compare-versions> I<DIST1 DIST2>"
+
+#. type: =item
+#: ../scripts/chdist.pl:103
+msgid "B<compare-bin-versions> I<DIST1 DIST2>"
+msgstr "B<compare-bin-versions> I<DIST1 DIST2>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:105
+msgid ""
+"Same as B<compare-packages>/B<compare-bin-packages>, but also runs B<dpkg --"
+"compare-versions> and display where the package is newer."
+msgstr ""
+"Comme pour B<compare-packages>/B<compare-bin-packages>, mais exécuter "
+"également B<dpkg --compare-versions> et afficher où se trouve le paquet le "
+"plus récent."
+
+#. type: =item
+#: ../scripts/chdist.pl:108
+msgid "B<compare-src-bin-packages> I<DIST>"
+msgstr "B<compare-src-bin-packages> I<DIST>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:110
+msgid "Compare sources and binaries for I<DIST>"
+msgstr "Comparer les sources et binaires de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:112
+msgid "B<compare-src-bin-versions> I<DIST>"
+msgstr "B<compare-src-bin-versions> I<DIST>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:114
+msgid ""
+"Same as B<compare-src-bin-packages>, but also run B<dpkg --compare-versions> "
+"and display where the package is newer"
+msgstr ""
+"Comme pour B<compare-src-bin-packages>, mais exécuter également B<dpkg --"
+"compare-versions> et afficher où se trouve le paquet le plus récent"
+
+#. type: =item
+#: ../scripts/chdist.pl:117
+msgid "B<grep-dctrl-packages> I<DIST> [...]"
+msgstr "B<grep-dctrl-packages> I<DIST> [...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:119
+msgid "Run B<grep-dctrl> on F<*_Packages> inside I<DIST>"
+msgstr "Exécuter B<grep-dctrl> sur tous les fichiers F<*_Packages> de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:121
+msgid "B<grep-dctrl-sources> I<DIST> [...]"
+msgstr "B<grep-dctrl-sources> I<DIST> [...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:123
+msgid "Run B<grep-dctrl> on F<*_Sources> inside I<DIST>"
+msgstr "Exécuter B<grep-dctrl> sur tous les fichiers F<*_Sources> de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:125
+msgid "B<list>"
+msgstr "B<list>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:127
+msgid "List available I<DIST>s"
+msgstr "Afficher la liste des I<DIST>ributions disponibles"
+
+#. type: textblock
+#: ../scripts/chdist.pl:133
+msgid ""
+"This program is copyright 2007 by Lucas Nussbaum and Luk Claes. This program "
+"comes with ABSOLUTELY NO WARRANTY."
+msgstr ""
+"Ce programme est copyright 2007 par Lucas Nussbaum et Luk Claes. Ce "
+"programme est fourni SANS AUCUNE GARANTIE."
+
+#. type: TH
+#: ../scripts/checkbashisms.1:1
+#, no-wrap
+msgid "CHECKBASHISMS"
+msgstr "CHECKBASHISMS"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:4
+msgid "checkbashisms - check for bashisms in /bin/sh scripts"
+msgstr ""
+"checkbashisms - Rechercher des constructions spécifiques à bash dans les "
+"scripts /bin/sh"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:6
+msgid "B<checkbashisms> I<script> ..."
+msgstr "B<checkbashisms> I<script> ..."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:8
+msgid "B<checkbashisms --help>|B<--version>"
+msgstr "B<checkbashisms --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:14
+msgid ""
+"B<checkbashisms>, based on one of the checks from the B<lintian> system, "
+"performs basic checks on I</bin/sh> shell scripts for the possible presence "
+"of bashisms. It takes the names of the shell scripts on the command line, "
+"and outputs warnings if possible bashisms are detected."
+msgstr ""
+"B<checkbashisms> se base sur l'un des tests de B<lintian> pour effectuer des "
+"tests simples sur des scripts de type I</bin/sh> pour détecter la présence "
+"de possibles constructions spécifiques à bash [ NdT : bashism en anglais ]. "
+"Il prend en argument le nom des scripts et affiche des avertissements "
+"lorsqu'une telle construction est détectée."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:19
+msgid ""
+"Note that the definition of a bashism in this context roughly equates to \"a "
+"shell feature that is not required to be supported by POSIX\"; this means "
+"that some issues flagged may be permitted under optional sections of POSIX, "
+"such as XSI or User Portability."
+msgstr ""
+"Remarquez que la définition d'une construction spécifique à bash dans ce "
+"contexte correspond grossièrement à \"une fonctionnalité d'un interpréteur "
+"de commandes qu'il n'est pas nécessaire de gérer d'après POSIX\" ; cela "
+"signifie que certains des points relevés peuvent être permis dans des "
+"sections optionnelles de POSIX, comme XSI ou \"User Portability\"."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:23
+msgid ""
+"In cases where POSIX and Debian Policy disagree, B<checkbashisms> by default "
+"allows extensions permitted by Policy but may also provide options for "
+"stricter checking."
+msgstr ""
+"Dans les cas où POSIX et la Charte Debian sont en désaccord, "
+"B<checkbashisms> autorise par défaut les extensions permises par la Charte "
+"mais fournit des options pour une vérification plus stricte."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:24 ../scripts/debchange.1:399
+#: ../scripts/debdiff.1:176 ../scripts/debrelease.1:99 ../scripts/debsign.1:99
+#: ../scripts/dep3changelog.1:16 ../scripts/dscverify.1:37
+#: ../scripts/pts-subscribe.1:28 ../scripts/rc-alert.1:21
+#: ../scripts/uupdate.1:101 ../scripts/whodepends.1:11
+#: ../scripts/who-uploads.1:45 ../scripts/who-permits-upload.pl:71
+#: ../scripts/wnpp-alert.1:23 ../scripts/wnpp-check.1:20
+#, no-wrap
+msgid "B<--help>, B<-h>"
+msgstr "B<--help>, B<-h>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:27 ../scripts/debdiff.1:179
+#: ../scripts/manpage-alert.1:16 ../scripts/mk-build-deps.pl:113
+#: ../scripts/rc-alert.1:24 ../scripts/wnpp-alert.1:26
+#: ../scripts/wnpp-check.1:23
+msgid "Show a summary of options."
+msgstr "Afficher un résumé des options."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:27
+#, no-wrap
+msgid "B<--newline>, B<-n>"
+msgstr "B<--newline>, B<-n>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:30
+msgid ""
+"Check for \"B<echo -n>\" usage (non POSIX but required by Debian Policy "
+"10.4.)"
+msgstr ""
+"Vérifier l'utilisation de \"B<echo -n>\" (pas dans POSIX, mais permise par "
+"la Charte Debian, section 10.4)."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:30
+#, no-wrap
+msgid "B<--posix>, B<-p>"
+msgstr "B<--posix>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:34
+msgid ""
+"Check for issues which are non POSIX but required to be supported by Debian "
+"Policy 10.4 (implies B<-n>)."
+msgstr ""
+"Vérifier les points qui ne sont pas POSIX, mais dont la prise en charge est "
+"exigée par la Charte Debian, section 10.4 (implique B<-n>)."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:34
+#, no-wrap
+msgid "B<--force>, B<-f>"
+msgstr "B<--force>, B<-f>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:39
+msgid ""
+"Force each script to be checked, even if it would normally not be (for "
+"instance, it has a bash or non POSIX shell shebang or appears to be a shell "
+"wrapper)."
+msgstr ""
+"Forcer la vérification de tous les scripts, même s'ils ne l'auraient pas été "
+"normalement (par exemple parce qu'ils ont un shebang qui demande une "
+"exécution par bash ou un autre shell non POSIX ou ressemble à un wrapper "
+"shell)."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:39
+#, no-wrap
+msgid "B<--lint>, B<-l>"
+msgstr "B<--lint>, B<-l>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:43
+msgid ""
+"Act like a linter, for integration into a text editor. Possible bashisms "
+"will be printed in stdout, like so:"
+msgstr ""
+"Agit comme un linter, pour intégration dans un éditeur de texte. Les "
+"\"bashismes\" possibles seront affichés dans stdout, comme ceci :"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:45
+msgid "I<{filename}:{lineno}:1: warning: possible bashism; {explanation}>"
+msgstr "I<{filename}:{lineno}:1: warning: possible bashism; {explanation}>"
+
+#. type: TP
+#: ../scripts/checkbashisms.1:45
+#, no-wrap
+msgid "B<--extra>, B<-x>"
+msgstr "B<--extra>, B<-x>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:52
+msgid ""
+"Highlight lines which, whilst they do not contain bashisms, may be useful in "
+"determining whether a particular issue is a false positive which may be "
+"ignored. For example, the use of \"B<$BASH_ENV>\" may be preceded by "
+"checking whether \"B<$BASH>\" is set."
+msgstr ""
+"Met en évidence les lignes qui, même si elles ne contiennent pas de "
+"construction propre à bash, peuvent être utiles pour déterminer si certains "
+"problèmes particuliers sont des faux positifs qui peuvent être ignorés. Par "
+"exemple, l'utilisation de \"B<$BASH_ENV>\" peut être précédée d'une "
+"vérification pour s'assurer que \"B<$BASH>\" est définie."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:52
+#, no-wrap
+msgid "B<--early-fail>, B<-e>"
+msgstr "B<--early-fail>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:55
+msgid "Exit right after a first error is seen."
+msgstr "Arrête immédiatement après une première erreur."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:55 ../scripts/debdiff.1:179
+#: ../scripts/rc-alert.1:24 ../scripts/whodepends.1:14
+#: ../scripts/wnpp-alert.1:26 ../scripts/wnpp-check.1:23
+#, no-wrap
+msgid "B<--version>, B<-v>"
+msgstr "B<--version>, B<-v>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:58 ../scripts/debdiff.1:182
+#: ../scripts/getbuildlog.1:31 ../scripts/grep-excuses.1:29
+#: ../scripts/manpage-alert.1:19 ../scripts/mk-build-deps.pl:117
+#: ../scripts/rc-alert.1:27 ../scripts/whodepends.1:17
+#: ../scripts/wnpp-alert.1:29 ../scripts/wnpp-check.1:26
+msgid "Show version and copyright information."
+msgstr "Affiche la version et le copyright."
+
+#. type: SH
+#: ../scripts/checkbashisms.1:58 ../scripts/debdiff.1:247
+#, no-wrap
+msgid "EXIT VALUES"
+msgstr "VALEURS DE RETOUR"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:62
+msgid ""
+"The exit value will be 0 if no possible bashisms or other problems were "
+"detected. Otherwise it will be the sum of the following error values:"
+msgstr ""
+"La valeur de retour est 0 si aucune construction spécifique à bash ou autre "
+"problème n'a été détecté. Sinon, la somme des erreurs est renvoyée. Les "
+"erreurs sont pondérées de la façon suivante :"
+
+#. type: TP
+#: ../scripts/checkbashisms.1:62 ../scripts/dscextract.1:24
+#: ../scripts/wnpp-check.1:32
+#, no-wrap
+msgid "1"
+msgstr "1"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:65
+msgid "A possible bashism was detected."
+msgstr "Une construction probablement spécifique à bash a été détectée."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:65 ../scripts/dscextract.1:27
+#, no-wrap
+msgid "2"
+msgstr "2"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:69
+msgid ""
+"A file was skipped for some reason, for example, because it was unreadable "
+"or not found. The warning message will give details."
+msgstr ""
+"Un fichier a été ignoré, par exemple parce qu'il n'était pas lisible ou n'a "
+"pas été trouvé. Le message d'erreur donnera des précisions."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:69
+#, no-wrap
+msgid "4"
+msgstr "4"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:72
+msgid "No bashisms were detected in a bash script."
+msgstr ""
+"Aucune construction spécifique à bash n'a été détectée dans un script bash."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:74
+msgid "B<lintian>(1)"
+msgstr "B<lintian>(1)"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:77
+msgid ""
+"B<checkbashisms> was originally written as a shell script by Yann Dirson "
+"E<lt>I<dirson@debian.org>E<gt> and rewritten in Perl with many more features "
+"by Julian Gilbey E<lt>I<jdg@debian.org>E<gt>."
+msgstr ""
+"B<checkbashisms> a été initialement écrit sous forme de script shell par "
+"Yann Dirson E<lt>I<dirson@debian.org>E<gt> et a été réécrit en Perl avec "
+"beaucoup plus de fonctionnalités par Julian Gilbey E<lt>I<jdg@debian."
+"org>E<gt>."
+
+#. type: TH
+#: ../scripts/cowpoke.1:5
+#, no-wrap
+msgid "COWPOKE"
+msgstr "COWPOKE"
+
+#. type: TH
+#: ../scripts/cowpoke.1:5
+#, no-wrap
+msgid "April 28, 2008"
+msgstr "28 avril 2008"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:20
+msgid "cowpoke - Build a Debian source package in a remote cowbuilder instance"
+msgstr ""
+"cowpoke - Construire un paquet source Debian dans une instance de cowbuilder "
+"distante"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:23
+msgid "B<cowpoke> [I<options>]I< packagename.dsc>"
+msgstr "B<cowpoke> [I<options>]I< paquet.dsc>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:27
+msgid ""
+"Uploads a Debian source package to a B<cowbuilder> host and builds it, "
+"optionally also signing and uploading the result to an incoming queue."
+msgstr ""
+"Envoyer un paquet source Debian à un hôte B<cowbuilder> et construire le "
+"paquet. Le paquet résultant peut également être signé et envoyé dans une "
+"file d'attente."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:31 ../scripts/debsnap.1:28
+msgid "The following options are available:"
+msgstr "Les options suivantes sont disponibles :"
+
+#. type: TP
+#: ../scripts/cowpoke.1:32
+#, no-wrap
+msgid "B<--arch=>I<architecture>"
+msgstr "B<--arch=>I<architecture>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:38
+msgid ""
+"Specify the Debian architecture(s) to build for. A space separated list of "
+"architectures may be used to build for all of them in a single pass. Valid "
+"arch names are those returned by B<dpkg-architecture>(1) for "
+"B<DEB_BUILD_ARCH>."
+msgstr ""
+"Indiquer la ou les architectures Debian pour lesquelles le paquet doit être "
+"construit. Une liste d'architectures séparées par des espaces peut être "
+"utilisée pour construire le paquet pour toutes ces architectures en une "
+"seule passe. Les noms d'architecture supportés sont ceux renvoyés par B<dpkg-"
+"architecture>(1) pour B<DEB_BUILD_ARCH>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:39
+#, no-wrap
+msgid "B<--dist=>I<distribution>"
+msgstr "B<--dist=>I<distribution>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:47
+msgid ""
+"Specify the Debian distribution(s) to build for. A space separated list of "
+"distributions may be used to build for all of them in a single pass. Either "
+"codenames (such as B<sid>, or B<squeeze>) or distribution names (such as "
+"B<unstable>, or B<experimental>) may be used, but you should usually stick "
+"to using one or the other consistently as this name may be used in file "
+"paths and to locate old packages for comparison reporting."
+msgstr ""
+"Indiquer la ou les distributions Debian pour lesquelles le paquet doit être "
+"construit. Une liste de distributions séparées par des espaces peut être "
+"utilisée pour construire le paquet pour toutes ces distributions en une "
+"seule passe. Des noms de code (comme B<sid> ou B<squeeze>) ou des noms de "
+"distribution (comme B<unstable> ou B<experimental>) peuvent être utilisés, "
+"mais vous devriez toujours utiliser un type de noms ou l'autre parce que "
+"c'est ce nom qui est utilisé pour les chemins de fichier et pour trouver les "
+"anciens paquets utilisés pour les rapports de comparaison."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:55
+msgid ""
+"It is now also possible to use locally defined names with this option, when "
+"used in conjunction with the B<BASE_DIST> option in a configuration file. "
+"This permits the maintenance and use of specially configured build chroots, "
+"which can source package dependencies from the backports archives or a local "
+"repository, or have other unusual configuration options set, without "
+"polluting the chroots you use for clean package builds intended for upload "
+"to the main repositories. See the description of B<BASE_DIST> below."
+msgstr ""
+"Utiliser des noms définis localement est maintenant aussi possible avec "
+"cette option, quand elle est utilisée conjointement à l’option B<BASE_DIST> "
+"dans un fichier de configuration. Cela permet la maintenance et "
+"l’utilisation de chroots de construction configurés spécialement, afin par "
+"exemple de fournir les dépendances de paquet des archives de rétroportages "
+"ou d’un dépôt local, ou de définir des options de configuration non "
+"habituelles, sans polluer les chroots propres utilisés pour les "
+"constructions de paquet à destination des dépôts principaux. Consultez la "
+"description de B<BASE_DIST> ci-dessous."
+
+#. type: TP
+#: ../scripts/cowpoke.1:56
+#, no-wrap
+msgid "B<--buildd=>I<host>"
+msgstr "B<--buildd=>I<hôte>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:59
+msgid "Specify the remote host to build on."
+msgstr "Indiquer l'hôte distant sur lequel se fera la construction."
+
+#. type: TP
+#: ../scripts/cowpoke.1:60
+#, no-wrap
+msgid "B<--buildd-user=>I<name>"
+msgstr "B<--buildd-user=>I<nom>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:63
+msgid "Specify the remote user to build as."
+msgstr "Indiquer l'utilisateur distant à utiliser pour la construction."
+
+#. type: TP
+#: ../scripts/cowpoke.1:64 ../scripts/debchange.1:199
+#, no-wrap
+msgid "B<--create>"
+msgstr "B<--create>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:69
+msgid ""
+"Create the remote B<cowbuilder> root if it does not already exist. If this "
+"option is not passed it is an error for the specified B<--dist> or B<--arch> "
+"to not have an existing B<cowbuilder> root in the expected location."
+msgstr ""
+"Créer la racine B<cowbuilder> distante si elle n'existe pas encore. Si cette "
+"option n'est pas fournie, une distribution ou architecture (indiquées par "
+"B<--dist> ou B<--arch>) qui n'aurait pas de racine B<cowbuilder> sera "
+"considérée comme une erreur."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:74
+msgid ""
+"The B<--buildd-user> must have permission to create the B<RESULT_DIR> on the "
+"build host, or an admin with the necessary permission must first create it "
+"and give that user (or some group they are in) write access to it, for this "
+"option to succeed."
+msgstr ""
+"L’utilisateur indiqué par B<--buildd-user> doit avoir le droit de créer "
+"B<RESULT_DIR> sur l’hôte de construction, sinon un administrateur avec les "
+"droits nécessaires doit d’abord le créer et donner à cet utilisateur (ou à "
+"un groupe dont il fait partie) accès en écriture à ce répertoire, afin que "
+"cette option réussisse."
+
+#. type: TP
+#: ../scripts/cowpoke.1:75
+#, no-wrap
+msgid "B<--return=>[I<path>]"
+msgstr "B<--return=>[I<chemin>]"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:79
+msgid ""
+"Copy results of the build to I<path>. If I<path> is not specified, then "
+"return them to the current directory. The given I<path> must exist, it will "
+"not be created."
+msgstr ""
+"Copier les fichiers résultant de la construction vers I<chemin>. Si aucun "
+"I<chemin> n'est indiqué, ils sont alors renvoyés vers le répertoire actuel. "
+"Le I<chemin> donné doit exister, il ne sera pas créé."
+
+#. type: TP
+#: ../scripts/cowpoke.1:80
+#, no-wrap
+msgid "B<--no-return>"
+msgstr "B<--no-return>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:84
+msgid ""
+"Do not copy results of the build to B<RETURN_DIR> (overriding a path set for "
+"it in the configuration files)."
+msgstr ""
+"Ne pas copier le résultat de la construction vers B<RETURN_DIR> (écrase le "
+"chemin configuré dans les fichiers de configuration)."
+
+#. type: TP
+#: ../scripts/cowpoke.1:85
+#, no-wrap
+msgid "B<--dpkg-opts=>I<'opt1 opt2 ...'>"
+msgstr "B<--dpkg-opts=>I<'opt1 opt2 ...'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:90
+msgid ""
+"Specify additional options to be passed to B<dpkg-buildpackage>(1). "
+"Multiple options are delimited with spaces. This will override any options "
+"specified in B<DEBBUILDOPTS> in the build host's I<pbuilderrc>."
+msgstr ""
+"Indiquer des options supplémentaires à fournir à B<dpkg-buildpackage>(1). "
+"les différentes options sont séparées par des espaces. Cela remplacera toute "
+"option fournie par la variable B<DEBBUILDOPTS> du fichier I<pbuilderrc> de "
+"la machine de construction."
+
+#. type: TP
+#: ../scripts/cowpoke.1:91
+#, no-wrap
+msgid "B<--create-opts=>I<'cowbuilder option'>"
+msgstr "B<--create-opts=>I<'option de cowbuilder'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:97
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> when a "
+"chroot is first created (using the B<--create> option above). If multiple "
+"arguments need to be passed, this option should be specified separately for "
+"each of them."
+msgstr ""
+"Indiquer des arguments supplémentaires à passer directement à B<cowbuilder> "
+"quand un chroot est créé (en utilisant l’option B<--create> précédente). Si "
+"plusieurs arguments doivent être passés, cette option devrait être indiquée "
+"séparément pour chacun."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:99
+msgid ""
+"E.g., B<--create-opts \"--othermirror\" --create-opts \"deb http:// ...\">"
+msgstr ""
+"Par exemple, B<--create-opts \"--othermirror\" --create-opts \"deb "
+"http:// ...\">"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:102
+msgid ""
+"This option will override any B<CREATE_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+"Cette option remplacera toutes les B<CREATE_OPTS> indiquées pour un chroot "
+"dans les fichiers de configuration de B<cowpoke>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:103
+#, no-wrap
+msgid "B<--update-opts=>I<'cowbuilder option'>"
+msgstr "B<--update-opts=>I<'option de cowbuilder'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:108
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> if the "
+"base of the chroot is updated. If multiple arguments need to be passed, "
+"this option should be specified separately for each of them."
+msgstr ""
+"Indiquer des arguments supplémentaires à passer directement à B<cowbuilder> "
+"si la base du chroot est mise à jour. Si plusieurs arguments doivent être "
+"passés, cette option devrait être indiquée séparément pour chacun."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:111
+msgid ""
+"This option will override any B<UPDATE_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+"Cette option remplacera toutes les B<UPDATE_OPTS> indiquées pour un chroot "
+"dans les fichiers de configuration de B<cowpoke>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:112
+#, no-wrap
+msgid "B<--build-opts=>I<'cowbuilder option'>"
+msgstr "B<--build-opts=>I<'option de cowbuilder'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:117
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> when a "
+"package build is performed. If multiple arguments need to be passed, this "
+"option should be specified separately for each of them."
+msgstr ""
+"Indiquer des arguments supplémentaires à passer directement à B<cowbuilder> "
+"quand un paquet est construit. Si plusieurs arguments doivent être passés, "
+"cette option devrait être indiquée séparément pour chacun."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:120
+msgid ""
+"This option will override any B<BUILD_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+"Cette option remplacera toutes les B<BUILD_OPTS> indiquées pour un chroot "
+"dans les fichiers de configuration de B<cowpoke>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:121
+#, no-wrap
+msgid "B<--sign=>I<keyid>"
+msgstr "B<--sign=>I<identifiant_clef>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:125
+msgid ""
+"Specify the key to sign packages with. This will override any B<SIGN_KEYID> "
+"specified for a chroot in the cowpoke configuration files."
+msgstr ""
+"Indiquer la clef à utiliser pour signer les paquets. Cela remplacera toutes "
+"les B<SIGN_KEYID> indiquées pour un chroot dans les fichiers de "
+"configuration de B<cowpoke>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:126
+#, no-wrap
+msgid "B<--upload=>I<queue>"
+msgstr "B<--upload=>I<file>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:130
+msgid ""
+"Specify the dput queue to upload signed packages to. This will override any "
+"B<UPLOAD_QUEUE> specified for a chroot in the cowpoke configuration files."
+msgstr ""
+"Indiquer la I<file> dput à utiliser pour envoyer les paquets signés. Cela "
+"remplacera toutes les B<UPLOAD_QUEUE> indiquées pour un chroot dans les "
+"fichiers de configuration de B<cowpoke>."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:134
+msgid ""
+"Display a brief summary of the available options and current configuration."
+msgstr ""
+"Afficher un bref résumé des options disponibles et de la configuration en "
+"cours."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:138
+msgid "Display the current version information."
+msgstr "Afficher les informations sur la version."
+
+#. type: SH
+#: ../scripts/cowpoke.1:140 ../scripts/debsnap.1:82
+#, no-wrap
+msgid "CONFIGURATION OPTIONS"
+msgstr "OPTIONS DE CONFIGURATION"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:146
+msgid ""
+"When B<cowpoke> is run the following configuration options are read from "
+"global, per-user, and per-project configuration files if present. File "
+"paths may be absolute or relative, the latter being relative to the "
+"B<BUILDD_USER>'s home directory. Since the paths are typically quoted when "
+"used, tilde expansion will B<not> be performed on them."
+msgstr ""
+"Quand B<cowpoke> est exécuté, les options de configuration suivantes sont "
+"lues dans le fichier de configuration global, celui de l'utilisateur et du "
+"projet, s'ils sont présents. Les chemins peuvent être indiqués de façon "
+"absolue ou relative (les chemins étant alors relatifs au répertoire "
+"personnel de l'utilisateur B<BUILDD_USER>). Les chemins étant généralement "
+"fournis entre guillemets, l'expansion des tildes ne sera B<pas> réalisée."
+
+#. type: SS
+#: ../scripts/cowpoke.1:147
+#, no-wrap
+msgid "Global defaults"
+msgstr "Valeurs globales par défaut"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:149
+msgid ""
+"These apply to every I<arch> and I<dist> in a single cowpoke invocation."
+msgstr ""
+"Elles s'appliquent à chaque I<arch>itecture et I<dist>ribution lors d'un "
+"appel à cowpoke."
+
+#. type: TP
+#: ../scripts/cowpoke.1:150
+#, no-wrap
+msgid "B<BUILDD_HOST>"
+msgstr "B<BUILDD_HOST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:154
+msgid ""
+"The network address or fqdn of the build machine where B<cowbuilder> is "
+"configured. This may be overridden by the B<--buildd> command line option."
+msgstr ""
+"L'adresse réseau ou le nom complètement qualifié (FQDN) de la machine de "
+"construction où B<cowbuilder> est configuré. Elle peut être modifiée avec "
+"l'option en ligne de commande B<--buildd>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:154
+#, no-wrap
+msgid "B<BUILDD_USER>"
+msgstr "B<BUILDD_USER>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:160
+msgid ""
+"The unprivileged user name for operations on the build machine. This "
+"defaults to the local name of the user executing B<cowpoke> (or to a "
+"username that is specified in your SSH configuration for B<BUILDD_HOST>), "
+"and may be overridden by the B<--buildd-user> command line option."
+msgstr ""
+"Le nom de l'utilisateur, non privilégié, sur la machine de construction. Le "
+"nom par défaut est le nom de l'utilisateur local qui exécute B<cowpoke> (ou "
+"le nom d'utilisateur précisé dans la configuration SSH pour B<BUILDD_HOST>), "
+"et le nom fournit par la variable d'environnement peut être remplacé avec "
+"l'option B<--buildd-user> en ligne de commande."
+
+#. type: TP
+#: ../scripts/cowpoke.1:160
+#, no-wrap
+msgid "B<BUILDD_ARCH>"
+msgstr "B<BUILDD_ARCH>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:167
+msgid ""
+"The Debian architecture(s) to build for. This must match the "
+"B<DEB_BUILD_ARCH> of the build chroot being used. It defaults to the local "
+"machine architecture where B<cowpoke> is executed, and may be overridden by "
+"the B<--arch> command line option. A (quoted) space separated list of "
+"architectures may be used here to build for all of them in a single pass."
+msgstr ""
+"La ou les architectures Debian pour lesquelles il faut construire les "
+"paquets. Cela doit correspondre à la valeur de B<DEB_BUILD_ARCH> du chroot "
+"de construction utilisé. La valeur par défaut est l'architecture de la "
+"machine sur laquelle B<cowpoke> est exécutée, et l'architecture peut être "
+"remplacée avec l'option B<--arch> en ligne de commande. Une liste "
+"d'architectures séparées par des espaces (il peut être nécessaire de fournir "
+"le tout entre guillemets) peut être utilisée pour construire les paquets "
+"pour toutes ces architectures en une seule passe."
+
+#. type: TP
+#: ../scripts/cowpoke.1:167
+#, no-wrap
+msgid "B<BUILDD_DIST>"
+msgstr "B<BUILDD_DIST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:172
+msgid ""
+"The Debian distribution(s) to build for. A (quoted) space separated list of "
+"distributions may be used to build for all of them in a single pass. This "
+"may be overridden by the B<--dist> command line option."
+msgstr ""
+"La ou les distributions Debian pour lesquelles il faut construire les "
+"paquets. Une liste de distributions séparées par des espaces (il peut être "
+"nécessaire de fournir le tout entre guillemets) peut être utilisée pour "
+"construire les paquets pour toutes ces architectures en une seule passe. La "
+"ou les distributions peuvent être remplacées avec l'option B<--dist> en "
+"ligne de commande."
+
+#. type: TP
+#: ../scripts/cowpoke.1:173
+#, no-wrap
+msgid "B<INCOMING_DIR>"
+msgstr "B<INCOMING_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:177
+msgid ""
+"The directory path on the build machine where the source package will "
+"initially be placed. This must be writable by the B<BUILDD_USER>."
+msgstr ""
+"Le chemin du répertoire sur la machine de construction où sont placés "
+"initialement les paquets source. Il doit être accessible en écriture par "
+"l'utilisateur B<BUILDD_USER>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:177
+#, no-wrap
+msgid "B<PBUILDER_BASE>"
+msgstr "B<PBUILDER_BASE>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:182
+msgid ""
+"The filesystem root for all pbuilder CoW and result files. I<Arch> and "
+"I<dist> specific subdirectories will normally be created under this. The "
+"apt cache and temporary build directory will also be located under this path."
+msgstr ""
+"La racine du système de fichiers pour tous les fichiers CoW et les fichiers "
+"résultats. Des sous-répertoires spécifiques aux I<arch>itectures et aux "
+"I<dist>ributions seront normalement créés sous cette racine. Le cache d'apt "
+"et les répertoires temporaires de construction se trouveront également sous "
+"ce chemin."
+
+#. type: TP
+#: ../scripts/cowpoke.1:183
+#, no-wrap
+msgid "B<SIGN_KEYID>"
+msgstr "B<SIGN_KEYID>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:194
+msgid ""
+"If this option is set, it is expected to contain the gpg key ID to pass to "
+"B<debsign>(1) if the packages are to be remotely signed. You will be "
+"prompted to confirm whether you wish to sign the packages after all builds "
+"are complete. If this option is unset or an empty string, no attempt to "
+"sign packages will be made. It may be overridden on an I<arch> and I<dist> "
+"specific basis using the I<arch>B<_>I<dist>B<_SIGN_KEYID> option described "
+"below, or per-invocation with the B<--sign> command line option."
+msgstr ""
+"Si cette option est activée, elle doit contenir l'identifiant de la clef GPG "
+"à fournir à B<debsign>(1) si les paquets doivent être signés sur la machine "
+"distante. Il vous sera demandé si vous souhaitez signer les paquets après "
+"que toutes les constructions sont finies. Si cette option n'est pas activée "
+"ou si elle contient une chaîne vide, aucune tentative de signature ne sera "
+"effectuée. Elle peut être remplacée de façon spécifique à une "
+"I<arch>itecture et une I<dist>ribution avec l’option "
+"I<arch>B<_>I<dist>B<_SIGN_KEYID> décrite ci-dessous, ou par invocation avec "
+"l’option B<--sign> en ligne de commande."
+
+#. type: TP
+#: ../scripts/cowpoke.1:195
+#, no-wrap
+msgid "B<UPLOAD_QUEUE>"
+msgstr "B<UPLOAD_QUEUE>"
+
+# NOTE: "them" => packages
+#. type: Plain text
+#: ../scripts/cowpoke.1:206
+msgid ""
+"If this option is set, it is expected to contain a 'host' specification for "
+"B<dput>(1) which will be used to upload them after they are signed. You "
+"will be prompted to confirm whether you wish to upload the packages after "
+"they are signed. If this option is unset or an empty string, no attempt to "
+"upload packages will be made. If B<SIGN_KEYID> is not set, this option will "
+"be ignored entirely. It may be overridden on an I<arch> and I<dist> "
+"specific basis using the I<arch>B<_>I<dist>B<_UPLOAD_QUEUE> option described "
+"below, or per-invocation with the B<--upload> command line option."
+msgstr ""
+"Si cette option est activée, elle doit contenir une indication d'hôte pour "
+"B<dput>(1) qui sera utilisée pour envoyer les paquets après qu'ils ont été "
+"signés. Il vous sera demandé de confirmer si vous souhaitez envoyer les "
+"paquets après qu'ils ont été signés. Si cette option n'est pas activée ou si "
+"elle contient une chaîne vide, aucune tentative d'envoi ne sera effectuée. "
+"Si B<SIGN_KEYID> n'est pas activée, cette option sera complètement ignorée. "
+"Elle peut être remplacée de façon spécifique à une I<arch>itecture et une "
+"I<dist>ribution avec l’option I<arch>B<_>I<dist>B<_UPLOAD_QUEUE> décrite ci-"
+"dessous, ou par invocation avec l’option B<--upload> en ligne de commande."
+
+#. type: TP
+#: ../scripts/cowpoke.1:208
+#, no-wrap
+msgid "B<BUILDD_ROOTCMD>"
+msgstr "B<BUILDD_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:216
+msgid ""
+"The command to use to gain root privileges on the remote build machine. If "
+"unset the default is B<sudo>(8). This is only required to invoke "
+"B<cowbuilder> and allow it to enter its chroot, so you may restrict this "
+"user to only being able to run that command with escalated privileges. "
+"Something like this in sudoers will enable invoking B<cowbuilder> without an "
+"additional password entry required:"
+msgstr ""
+"La commande à utiliser pour obtenir les droits du superutilisateur sur la "
+"machine distante de construction. Si elle n'est pas définie, la commande par "
+"défaut est B<sudo>(8). Elle n'est nécessaire que pour appeler B<cowbuilder> "
+"et lui permettre d'entrer dans son chroot. Vous pouvez donc n'autoriser cet "
+"utilisateur à acquérir des droits supplémentaires que pour l'exécution de "
+"cette commande. La ligne suivante dans sudoers permettra d'appeler "
+"B<cowbuilder> sans avoir à fournir de mot de passe :"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:220
+msgid "youruser ALL = NOPASSWD: /usr/sbin/cowbuilder"
+msgstr "utilisateur ALL = NOPASSWD: /usr/sbin/cowbuilder"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:227
+msgid ""
+"Alternatively you could use SSH with a forwarded key, or whatever other "
+"mechanism suits your local access policy. Using B<su -c> isn't really "
+"suitable here due to its quoting requirements being somewhat different to "
+"the rest."
+msgstr ""
+"Autrement, vous pouvez utiliser SSH avec une clef ou tout autre mécanisme "
+"correspondant à votre politique locale. B<su -c> n'est pas vraiment "
+"utilisable ici parce qu'il nécessite de placer des guillemets autour, "
+"contrairement aux autres."
+
+#. type: TP
+#: ../scripts/cowpoke.1:228
+#, no-wrap
+msgid "B<DEBOOTSTRAP>"
+msgstr "B<DEBOOTSTRAP>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:232
+msgid ""
+"The utility to use when creating a new build root. Alternatives are "
+"B<debootstrap> or B<cdebootstrap>."
+msgstr ""
+"L'utilitaire à utiliser pour créer une nouvelle racine de construction. Les "
+"possibilités sont B<debootstrap> ou B<cdebootstrap>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:233
+#, no-wrap
+msgid "B<RETURN_DIR>"
+msgstr "B<RETURN_DESTDIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:239
+msgid ""
+"If set, package files resulting from the build will be copied to the path "
+"(local or remote) that this is set to, after the build completes. The path "
+"must exist, it will not be created. This option is unset by default and can "
+"be overridden with B<--return> or B<--no-return>."
+msgstr ""
+"Si elle est définie, les fichiers de paquet issus de la construction seront "
+"copiés à l'endroit (local ou distant) configuré, une fois la construction "
+"terminée. Le chemin doit exister, il ne sera pas créé. Cette option n'est "
+"pas définie par défaut et peut être écrasée par B<--return> ou B<--no-"
+"return>."
+
+#. type: SS
+#: ../scripts/cowpoke.1:241
+#, no-wrap
+msgid "Arch and dist specific options"
+msgstr "Options spécifiques à des architectures ou distributions"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:244
+msgid ""
+"These are variables of the form: $arch_$distB<_VAR> which apply only for a "
+"particular target arch/dist build."
+msgstr ""
+"Ce sont des variables de la forme $arch_$distB<_VAR> qui ne s'appliquent "
+"qu'à une cible de construction spécifique à une architecture et à une "
+"distribution."
+
+#. type: TP
+#: ../scripts/cowpoke.1:245
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_RESULT_DIR>"
+msgstr "I<arch>B<_>I<dist>B<_RESULT_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:256
+msgid ""
+"The directory path on the build machine where the resulting packages (source "
+"and binary) will be found, and where older versions of the package that were "
+"built previously may be found. If any such older packages exist, B<debdiff> "
+"will be used to compare the new package with the previous version after the "
+"build is complete, and the result will be included in the build log. Files "
+"in it must be readable by the B<BUILDD_USER> for sanity checking with "
+"B<lintian>(1) and B<debdiff>(1), and for upload with B<dput>(1). If this "
+"option is not specified for some arch and dist combination then it will "
+"default to I<$PBUILDER_BASE/$arch/$dist/result>"
+msgstr ""
+"Le chemin du répertoire de la machine de construction où les paquets "
+"résultants (source et binaires) seront trouvés, et où les versions "
+"ultérieures des paquets ayant été précédemment construits pourront être "
+"trouvées. Si des anciens paquets sont trouvés, B<debdiff> sera utilisé pour "
+"comparer le nouveau paquet avec la version précédente une fois la "
+"construction finie, et le résultat se trouvera dans le journal de "
+"construction. Les fichiers du répertoire doivent être lisibles par "
+"B<BUILDD_USER> pour les vérifications par B<lintian>(1) et B<debdiff>(1) "
+"ainsi que pour les envois par B<dput>(1). Si cette option n'est pas définie "
+"pour certaines combinaisons d'architectures et de distributions, alors le "
+"chemin par défaut sera I<$PBUILDER_BASE/$arch/$dist/result>"
+
+#. type: TP
+#: ../scripts/cowpoke.1:257
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BASE_PATH>"
+msgstr "I<arch>B<_>I<dist>B<_BASE_PATH>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:263
+msgid ""
+"The directory where the CoW master files are to be found (or created if the "
+"B<--create> command line option was passed). If this option is not "
+"specified for some arch or dist then it will default to I<$PBUILDER_BASE/"
+"$arch/$dist/base.cow>"
+msgstr ""
+"Le répertoire ou les fichiers CoW maîtres se trouvent (ou là où ils sont "
+"créés si l'option en ligne de commande B<--create> est utilisée). Si cette "
+"option n'est pas définie pour une combinaison d'architecture et de "
+"distribution, alors le chemin par défaut est I<$PBUILDER_BASE/$arch/$dist/"
+"base.cow>"
+
+#. type: TP
+#: ../scripts/cowpoke.1:264
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BASE_DIST>"
+msgstr "I<arch>B<_>I<dist>B<_BASE_DIST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:274
+msgid ""
+"The code name to pass as the B<--distribution> option for cowbuilder instead "
+"of I<dist>. This is necessary when I<dist> is a locally significant name "
+"assigned to some specially configured build chroot, such as "
+"'wheezy_backports', and not the formal suite name of a distro release known "
+"to debootstrap. This option cannot be overridden on the command line, since "
+"it would rarely, if ever, make any sense to change it for individual "
+"invocations of B<cowpoke>. If this option is not specified for an arch and "
+"dist combination then it will default to I<dist>."
+msgstr ""
+"Le nom de code à passer à l’option B<--distribution> de B<cowbuilder> à la "
+"place de I<dist>. C’est nécessaire quand I<dist> est un nom localement "
+"significatif utilisé pour un chroot de construction configuré spécialement, "
+"comme par exemple \"wheezy_backports\", et non le nom de suite formel d’une "
+"I<dist>ribution connue de debootstrap. Cette option ne peut pas être "
+"remplacée en ligne de commande, puisqu’il n’y pas vraiment de raison de la "
+"modifier pour les appels individuels de B<cowpoke>. Si cette option n’est "
+"pas indiquée pour une combinaison d’I<arch>itecture et de I<dist>ribution, "
+"alors la I<dist>ribution est utilisée par défaut."
+
+#. type: TP
+#: ../scripts/cowpoke.1:275
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_CREATE_OPTS>"
+msgstr "I<arch>B<_>I<dist>B<_CREATE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:283
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"when this chroot is created for the first time (using the B<--create> "
+"option). This is useful when options like B<--othermirror> are wanted to "
+"create specialised chroot configurations such as 'wheezy_backports'. By "
+"default this is unset. All values set in it will be overridden if the B<--"
+"create-opts> option is passed on the command line."
+msgstr ""
+"Un tableau bash contenant des options supplémentaires à passer directement à "
+"B<cowbuilder> quand un chroot est créé (en utilisant l’option B<--create>). "
+"C’est pratique quand des options comme B<--othermirror> sont voulues pour "
+"créer des configurations spéciales de chroot, comme par exemple "
+"\"wheezy_backports\". Par défaut il n’est pas défini. Toutes les valeurs "
+"définie dans ce tableaux seront ignorées si l’option B<--create-opts> est "
+"passée en ligne de commande."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:288
+msgid ""
+"Each element in this array corresponds to a single argument (in the ARGV "
+"sense) that will be passed to cowbuilder. This ensures that arguments "
+"which may contain whitespace or have strange quoting requirements or other "
+"special characters will not be mangled before they get to cowbuilder."
+msgstr ""
+"Chaque élément de ce tableau correspond à un seul argument (dans le sens de "
+"ARGV) qui sera passé à B<cowbuilder>. Cela permet à ces arguments, qui "
+"pourraient contenir des espaces, avoir des besoins de protection bizarre ou "
+"d’autres caractères spéciaux, de pas ne pas être déformés avant d’atteindre "
+"B<cowbuilder>."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:290
+msgid "Bash arrays are initialised using the following form:"
+msgstr "Les tableaux bash sont initialisés un utilisant le format suivant :"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:292
+#, no-wrap
+msgid " OPTS=( \"arg1\" \"arg 2\" \"--option\" \"value\" \"--opt=val\" \"etc. etc.\" )\n"
+msgstr " OPTS=( \"arg1\" \"arg 2\" \"--option\" \"valeur\" \"--opt=val\" \"etc.\" )\n"
+
+#. type: TP
+#: ../scripts/cowpoke.1:293
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_UPDATE_OPTS>"
+msgstr "I<arch>B<_>I<dist>B<_UPDATE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:298
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"each time the base of this chroot is updated. It behaves similarly to the "
+"B<CREATE_OPTS> option above, except for acting when the chroot is updated."
+msgstr ""
+"Un tableau bash contenant des options supplémentaires à passer directement à "
+"B<cowbuilder> à chaque fois que la base de ce chroot est mise à jour. Le "
+"comportement est similaire à l’option B<CREATE_OPTS> précédente, à part "
+"qu’il est déclenché quand le chroot est mis à jour."
+
+#. type: TP
+#: ../scripts/cowpoke.1:299
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BUILD_OPTS>"
+msgstr "I<arch>B<_>I<dist>B<_BUILD_OPTS>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:306
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"each time a package build is performed in this chroot. This is useful when "
+"you want to use some option like B<--twice> which cowpoke does not directly "
+"need to care about. It otherwise behaves similarly to B<UPDATE_OPTS> above "
+"except that it acts during the build phase of B<cowbuilder>."
+msgstr ""
+"Un tableau bash contenant des options supplémentaires à passer directement à "
+"B<cowbuilder> quand un paquet est construit. C’est pratique pour utiliser "
+"une option comme B<--twice> que cowpoke n’a pas besoin de gérer directement. "
+"Le comportement est sinon similaire à l’option B<UPDATE_OPTS> précédente, à "
+"part qu’il est déclenché pendant la phase de construction par B<cowbuilder>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:307
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_SIGN_KEYID>"
+msgstr "I<arch>B<_>I<dist>B<_SIGN_KEYID>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:311
+msgid ""
+"An optional arch and dist specific override for the global B<SIGN_KEYID> "
+"option."
+msgstr ""
+"Un remplacement facultatif de l’option B<SIGN_KEYID> globale, spécifique à "
+"une I<arch>itecture et une I<dist>ribution."
+
+#. type: TP
+#: ../scripts/cowpoke.1:312
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_UPLOAD_QUEUE>"
+msgstr "I<arch>B<_>I<dist>B<_UPLOAD_QUEUE>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:316
+msgid ""
+"An optional arch and dist specific override for the global B<UPLOAD_QUEUE> "
+"option."
+msgstr ""
+"Un remplacement facultatif de l’option B<UPLOAD_QUEUE> globale, spécifique à "
+"une I<arch>itecture et une I<dist>ribution."
+
+#. type: SH
+#: ../scripts/cowpoke.1:318
+#, no-wrap
+msgid "CONFIGURATION FILES"
+msgstr "FICHIERS DE CONFIGURATION"
+
+#. type: TP
+#: ../scripts/cowpoke.1:319
+#, no-wrap
+msgid "I</etc/cowpoke.conf>"
+msgstr "I</etc/cowpoke.conf>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:322
+msgid "Global configuration options. Will override hardcoded defaults."
+msgstr ""
+"Options de configuration globales. Elles remplaceront les valeurs par défaut "
+"codées en dur."
+
+#. type: TP
+#: ../scripts/cowpoke.1:322
+#, no-wrap
+msgid "I<~/.cowpoke>"
+msgstr "I<~/.cowpoke>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:325 ../scripts/debsnap.1:137
+msgid ""
+"Per-user configuration options. Will override any global configuration."
+msgstr ""
+"Options de configuration de l'utilisateur. Elles remplaceront les valeurs "
+"des options de configuration globales."
+
+#. type: TP
+#: ../scripts/cowpoke.1:325
+#, no-wrap
+msgid "I<.cowpoke>"
+msgstr "I<.cowpoke>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:329
+msgid ""
+"Per-project configuration options. Will override any per-user or global "
+"configuration if B<cowpoke> is called from the directory where they exist."
+msgstr ""
+"Options de configuration du projet. Elles remplaceront les valeurs des "
+"options de configuration globale ou de l'utilisateur si B<cowpoke> est "
+"appelé depuis le répertoire où se trouve le fichier."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:333
+msgid ""
+"If the environment variable B<COWPOKE_CONF> is set, it specifies an "
+"additional configuration file which will override all of those above. "
+"Options specified explicitly on the command line override all configuration "
+"files."
+msgstr ""
+"Si la variable d'environnement B<COWPOKE_CONF> est définie, elle indique un "
+"fichier de configuration supplémentaire qui remplacera tous les autres. Les "
+"options utilisées explicitement sur la ligne de commande remplacent les "
+"options provenant des fichiers de configuration."
+
+#. type: SH
+#: ../scripts/cowpoke.1:335
+#, no-wrap
+msgid "COWBUILDER CONFIGURATION"
+msgstr "CONFIGURATION DE COWBUILDER"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:344
+msgid ""
+"There is nothing particularly special required to configure a B<cowbuilder> "
+"instance for use with B<cowpoke>. Simply create them in the flavour you "
+"require with `B<cowbuilder --create>` according to the B<cowbuilder> "
+"documentation, then configure B<cowpoke> with the user, arch, and path "
+"information required to access it, on the machines you wish to invoke it "
+"from (or alternatively configure B<cowpoke> with the path, arch and "
+"distribution information and pass the B<--create> option to it on the first "
+"invocation). The build host running B<cowbuilder> does not require "
+"B<cowpoke> installed locally."
+msgstr ""
+"Il n'y a rien de particulier à faire pour configurer une instance de "
+"B<cowbuilder> pour qu'elle puisse être utilisée avec B<cowpoke>. Créez-la "
+"simplement telle que vous en avez besoin avec \"B<cowbuilder --create>\" en "
+"suivant la documentation de B<cowbuilder>, puis configurez B<cowpoke> avec "
+"les informations sur l'utilisateur, l'architecture et le chemin nécessaire "
+"pour y accéder sur les machines où vous souhaitez l'appeler (ou configurez "
+"B<cowpoke> avec les informations sur le chemin, l'architecture et la "
+"distribution et fournissez lui l'option B<--create> lors du premier appel). "
+"L'hôte de construction sur lequel B<cowbuilder> tourne n'a pas besoin que "
+"B<cowpoke> soit installé localement."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:354
+msgid ""
+"The build machine should have the B<lintian> and B<devscripts> packages "
+"installed for post-build sanity checking. Upon completion, the build log "
+"and the results of automated checks will be recorded in the "
+"B<INCOMING_DIR>. If you wish to upload signed packages the build machine "
+"will also need B<dput>(1) installed and configured to use the 'I<host>' "
+"alias specified by B<UPLOAD_QUEUE>. If B<rsync>(1) is available on both the "
+"local and build machine, then it will be used to transfer the source package "
+"(this may save on some transfers of the I<orig.tar.*> when building "
+"subsequent Debian revisions)."
+msgstr ""
+"La machine de construction doit avoir les paquets B<lintian> et "
+"B<devscripts> installés pour les vérifications en fin de construction. Une "
+"fois la construction finie, un journal et les résultats des tests "
+"automatiques seront enregistrés dans B<INCOMING_DIR>. Si vous souhaitez "
+"envoyer des paquets signés, B<dput>(1) devra également être installé sur la "
+"machine de construction et devra être configuré pour utiliser l'alias "
+"I<hôte> indiqué par B<UPLOAD_QUEUE>. Si B<rsync>(1) est disponible à la fois "
+"sur la machine locale et la machine de construction, alors il peut être "
+"utilisé pour transférer le paquet source (cela permet d'économiser quelques "
+"échanges de I<orig.tar.*> lors de la construction des révisions Debian "
+"suivantes)."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:360
+msgid ""
+"The user executing B<cowpoke> must have SSH access to the build machine as "
+"the B<BUILDD_USER>. That user must be able to invoke B<cowbuilder> as root "
+"by using the B<BUILDD_ROOTCMD>. Signing keys are not required to be "
+"installed on the build machine (and will be ignored there if they are). If "
+"the package is signed, keys will be expected on the machine that executes "
+"B<cowpoke>."
+msgstr ""
+"L'utilisateur qui exécute B<cowpoke> doit avoir un accès SSH à la machine de "
+"construction en tant que B<BUILDD_USER>. Cet utilisateur doit pouvoir "
+"exécuter B<cowbuilder> en tant que superutilisateur en utilisant "
+"B<BUILDD_ROOTCMD>. Les clefs pour les signatures n'ont pas nécessairement à "
+"être installées sur la machine de construction (et elles seront ignorées si "
+"elles le sont). Si un paquet est signé, les clefs seront nécessaires sur la "
+"machine qui exécute B<cowpoke>."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:367
+msgid ""
+"When B<cowpoke> is invoked, it will first attempt to update the "
+"B<cowbuilder> image if that has not already been done on the same day. This "
+"is checked by the presence or absence of a I<cowbuilder-$arch-$dist-update-"
+"log-$date> file in the B<INCOMING_DIR>. You may move, remove, or touch this "
+"file if you wish the image to be updated more or less often than that. Its "
+"contents log the output of B<cowbuilder> during the update (or creation) of "
+"the build root."
+msgstr ""
+"Quand B<cowpoke> est appelé, il cherche d'abord à mettre à jour l'image "
+"B<cowbuilder> si cela n'a pas déjà été fait le même jour. Cette vérification "
+"se base sur la présence d'un fichier I<cowbuilder-$arch-$dist-update-log-"
+"$date> dans le répertoire B<INCOMING_DIR>. Vous pouvez déplacer, renommer ou "
+"toucher ce fichier si vous souhaitez que l'image soit mise à jour plus ou "
+"moins souvent. Son contenu liste les sorties de B<cowbuilder> pendant la "
+"mise à jour (ou la création) de la racine de construction."
+
+#. type: =head1
+#: ../scripts/cowpoke.1:369 ../scripts/origtargz.pl:85
+#: ../scripts/rmadison.pl:396
+#, no-wrap
+msgid "NOTES"
+msgstr "NOTES"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:378
+msgid ""
+"Since B<cowbuilder> creates a chroot, and to do that you need root, "
+"B<cowpoke> also requires some degree of root access. So all the horrible "
+"things that can go wrong with that may well one day rain down upon you. "
+"B<cowbuilder> has been known to accidentally wipe out bind-mounted "
+"filesystems outside the chroot, and worse than that can easily happen. So "
+"be careful, keep good backups of things you don't want to lose on your build "
+"machine, and use B<cowpoke> to keep all that on a machine that isn't your "
+"bleeding edge dev box with your last few hours of uncommitted work."
+msgstr ""
+"Puisque cowbuilder crée un chroot, et qu'il faut pour cela être "
+"superutilisateur, B<cowpoke> nécessite également certains des droits du "
+"superutilisateur. Et toutes les horreurs qui peuvent arriver à cause de ça "
+"pourront vous arriver un jour. B<cowbuilder> est connu pour avoir "
+"accidentellement écrasé des systèmes de fichiers montés avec l'option "
+"\"bind\" en dehors de son chroot, et pire encore peut arriver. Soyez "
+"prudents, conservez des sauvegardes de ce que vous ne souhaitez pas perdre "
+"sur vos machines de construction et utilisez B<cowpoke> pour isoler tous ces "
+"problèmes sur une machine qui n'est pas votre machine de développement avec "
+"vos quelques heures de travail non committé."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:384
+msgid "B<cowbuilder>(1), B<pbuilder>(1), B<ssh-agent>(1), B<sudoers>(5)"
+msgstr "B<cowbuilder>(1), B<pbuilder>(1), B<ssh-agent>(1), B<sudoers>(5)"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:388
+msgid "B<cowpoke> was written by Ron E<lt>I<ron@debian.org>E<gt>."
+msgstr "B<cowpoke> a été écrit par Ron E<lt>I<ron@debian.org>E<gt>."
+
+#. type: TH
+#: ../scripts/cvs-debc.1:1 ../scripts/cvs-debrelease.1:1
+#, no-wrap
+msgid "CVS-DEBC"
+msgstr "CVS-DEBC"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:4
+msgid ""
+"cvs-debc - view contents of a cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+"cvs-debc - Visualiser le contenu d'un paquet Debian créé par cvs-"
+"buildpackage ou cvs-debuild"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:6
+msgid "B<cvs-debc> [I<options>] [I<package> ...]"
+msgstr "B<cvs-debc> [I<options>] [I<paquet> ...]"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:17
+msgid ""
+"B<cvs-debc> is run from the CVS working directory after B<cvs-buildpackage> "
+"or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to locate the I<."
+"changes> file generated in that run. It then displays information about the "
+"I<.deb> files which were generated in that run, by running B<dpkg-deb -I> "
+"and B<dpkg-deb -c> on every I<.deb> archive listed in the I<.changes> file, "
+"assuming that all of the I<.deb> archives live in the same directory as the "
+"I<.changes> file. It is useful for ensuring that the expected files have "
+"ended up in the Debian package."
+msgstr ""
+"B<cvs-debc> est exécuté après B<cvs-buildpackage> ou B<cvs-debuild> depuis "
+"le répertoire de travail CVS. Il utilise le système B<cvs-buildpackage> pour "
+"trouver le fichier I<.changes> produit au cours de cette exécution. Il "
+"affiche ensuite les informations des fichiers I<.deb> produits au cours de "
+"cette exécution. Pour cela, il exécute B<dpkg-deb -I> et B<dpkg-deb -c> pour "
+"toutes les archives I<.deb> listées dans le fichier I<.changes>, en "
+"supposant que toutes ces archives I<.deb> se trouvent dans le même "
+"répertoire que le fichier I<.changes>. C'est utile pour s'assurer que les "
+"bons fichiers se trouvent dans le paquet Debian."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:20
+msgid ""
+"If a list of packages is given on the command line, then only those debs "
+"with names in this list of packages will be processed."
+msgstr ""
+"Si une liste de paquets est fournie en ligne de commande, alors seuls les "
+"paquets Debian dont les noms sont dans la liste seront considérés."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:24 ../scripts/cvs-debi.1:23
+#: ../scripts/cvs-debrelease.1:21
+msgid ""
+"Note that unlike B<cvs-buildpackage>, the only way to specify the source "
+"package name is with the B<-P> option; you cannot simply have it as the last "
+"command-line parameter."
+msgstr ""
+"Remarquez que, contrairement à B<cvs-buildpackage>, le nom du paquet source "
+"ne peut être indiqué qu'avec l'option B<-P> ; vous ne pouvez pas utiliser "
+"simplement le dernier argument de la ligne de commande."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:28 ../scripts/cvs-debi.1:32
+msgid ""
+"All current B<cvs-buildpackage> options are silently accepted; however, only "
+"the ones listed below have any effect. For more details on all of them, see "
+"the B<cvs-buildpackage>(1) manpage."
+msgstr ""
+"Toutes les options de B<cvs-buildpackage> sont acceptées sans avertissement. "
+"Cependant, seules celles listées ci-dessous ont un effet. Pour plus de "
+"détails sur ces options, consultez la page de manuel de B<cvs-"
+"buildpackage>(1)."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:28 ../scripts/cvs-debi.1:32
+#: ../scripts/cvs-debrelease.1:30 ../scripts/debc.1:65 ../scripts/debi.1:66
+#: ../scripts/debrelease.1:67 ../scripts/debrsign.1:35 ../scripts/debsign.1:72
+#, no-wrap
+msgid "B<-a>I<debian-architecture>, B<-t>I<GNU-system-type>"
+msgstr "B<-a>I<architecture-debian>, B<-t>I<type-de-système-GNU>"
+
+# NOTE: presque pareil ?
+#. type: Plain text
+#: ../scripts/cvs-debc.1:34 ../scripts/cvs-debi.1:38
+#: ../scripts/cvs-debrelease.1:36 ../scripts/debc.1:71 ../scripts/debi.1:72
+#: ../scripts/debrsign.1:41 ../scripts/debsign.1:78
+msgid ""
+"See B<dpkg-architecture>(1) for a description of these options. They affect "
+"the search for the I<.changes> file. They are provided to mimic the "
+"behaviour of B<dpkg-buildpackage> when determining the name of the I<."
+"changes> file."
+msgstr ""
+"Veuillez consulter B<dpkg-architecture>(1) pour une description de ces "
+"options. Ces options affectent la recherche du fichier I<.changes>. Elles "
+"consistent à imiter le comportement de B<dpkg-buildpackage> lors de la "
+"détermination du nom du fichier I<.changes>."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:34 ../scripts/cvs-debi.1:38
+#: ../scripts/cvs-debrelease.1:36
+#, no-wrap
+msgid "B<-M>I<module>"
+msgstr "B<-M>I<module>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:37 ../scripts/cvs-debi.1:41
+#: ../scripts/cvs-debrelease.1:39
+msgid "The name of the CVS module."
+msgstr "Le nom du module CVS."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:37 ../scripts/cvs-debi.1:41
+#: ../scripts/cvs-debrelease.1:39
+#, no-wrap
+msgid "B<-P>I<package>"
+msgstr "B<-P>I<paquet>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:40 ../scripts/cvs-debi.1:44
+#: ../scripts/cvs-debrelease.1:42
+msgid "The name of the package."
+msgstr "Le nom du paquet."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:40 ../scripts/cvs-debi.1:44
+#: ../scripts/cvs-debrelease.1:42
+#, no-wrap
+msgid "B<-V>I<version>"
+msgstr "B<-V>I<version>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:43 ../scripts/cvs-debi.1:47
+#: ../scripts/cvs-debrelease.1:45
+msgid "The version number of the package."
+msgstr "Le numéro de version du paquet."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:43 ../scripts/cvs-debi.1:47
+#: ../scripts/cvs-debrelease.1:45
+#, no-wrap
+msgid "B<-T>I<tag>"
+msgstr "B<-T>I<étiquette>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:46 ../scripts/cvs-debi.1:50
+#: ../scripts/cvs-debrelease.1:48
+msgid "The CVS tag to use for exporting sources."
+msgstr "L'étiquette CVS utilisée pour exporter les sources."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:46 ../scripts/cvs-debi.1:50
+#: ../scripts/cvs-debrelease.1:48
+#, no-wrap
+msgid "B<-R>I<root\\ directory>"
+msgstr "B<-R>I<répertoire_racine>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:49 ../scripts/cvs-debi.1:53
+#: ../scripts/cvs-debrelease.1:51
+msgid "Root of the original sources archive."
+msgstr "Racine de l'archive source initiale."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:49 ../scripts/cvs-debi.1:53
+#: ../scripts/cvs-debrelease.1:51
+#, no-wrap
+msgid "B<-W>I<work directory>"
+msgstr "B<-W>I<espace_de_travail>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:52 ../scripts/cvs-debi.1:56
+#: ../scripts/cvs-debrelease.1:54
+msgid "The full path name for the cvs-buildpackage working directory."
+msgstr "Le chemin complet de l'espace de travail pour cvs-buildpackage."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:52 ../scripts/cvs-debi.1:56
+#: ../scripts/cvs-debrelease.1:54
+#, no-wrap
+msgid "B<-x>I<prefix>"
+msgstr "B<-x>I<préfixe>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:55 ../scripts/cvs-debi.1:59
+#: ../scripts/cvs-debrelease.1:57
+msgid "This option provides the CVS default module prefix."
+msgstr "Le préfixe par défaut des modules CVS."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:55 ../scripts/cvs-debi.1:59
+#: ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:99 ../scripts/debi.1:106
+#: ../scripts/debrsign.1:50
+#, no-wrap
+msgid "B<--help>, B<--version>"
+msgstr "B<--help>, B<--version>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62
+#: ../scripts/cvs-debrelease.1:64 ../scripts/debc.1:102 ../scripts/debi.1:109
+#: ../scripts/debrsign.1:53
+msgid "Show help message and version information respectively."
+msgstr "Afficher respectivement le message d'aide et la version."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:63
+msgid "B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1), B<debc>(1)"
+msgstr "B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1), B<debc>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:67 ../scripts/cvs-debi.1:71
+msgid ""
+"B<cvs-buildpackage> was written by Manoj Srivastava, and the current version "
+"of B<debi> was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>. They have "
+"been combined into this program by Julian Gilbey."
+msgstr ""
+"B<cvs-buildpackage> a été écrit par Manoj Srivastava et la version actuelle "
+"de B<debi> a été écrite par Julian Gilbey E<lt>jdg@debian.orgE<gt>. Ils ont "
+"été combinés par Julian Gilbey pour donner ce programme."
+
+#. type: TH
+#: ../scripts/cvs-debi.1:1
+#, no-wrap
+msgid "CVS-DEBI"
+msgstr "CVS-DEBI"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:4
+msgid "cvs-debi - install cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+"cvs-debi - Installer un paquet créé par cvs-buildpackage ou cvs-debuild"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:6
+msgid "B<cvs-debi> [I<options>] [I<package> ...]"
+msgstr "B<cvs-debi> [I<options>] [I<paquet> ...]"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:16
+msgid ""
+"B<cvs-debi> is run from the CVS working directory after B<cvs-buildpackage> "
+"or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to locate the I<."
+"changes> file generated in that run. It then runs B<debpkg -i> on every I<."
+"deb> archive listed in the I<.changes> file to install them, assuming that "
+"all of the I<.deb> archives live in the same directory as the I<.changes> "
+"file. Note that you probably don't want to run this program on a I<."
+"changes> file relating to a different architecture after cross-compiling the "
+"package!"
+msgstr ""
+"B<cvs-debi> est exécuté après B<cvs-buildpackage> ou B<cvs-debuild> depuis "
+"le répertoire de travail CVS. Il utilise le système B<cvs-buildpackage> pour "
+"trouver le fichier I<.changes> produit au cours de cette exécution. Il "
+"installe ensuite avec B<debpkg -i> toutes les archives I<.deb> listées dans "
+"le fichier I<.changes>, en supposant que toutes ces archives I<.deb> se "
+"trouvent dans le même répertoire que le fichier I<.changes>. Remarquez que "
+"vous ne voulez sûrement pas utiliser ce programme pour le fichier I<."
+"changes> d'une autre architecture qui aurait été créé après avoir cross-"
+"compilé le paquet !"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:19 ../scripts/debi.1:24
+msgid ""
+"If a list of packages is given on the command line, then only those debs "
+"with names in this list of packages will be installed."
+msgstr ""
+"Si une liste de paquets est fournie en ligne de commande, alors seuls les "
+"paquets Debian dont les noms sont dans la liste seront installés."
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:28 ../scripts/debi.1:29
+msgid ""
+"Since installing a package requires root privileges, B<debi> calls B<debpkg> "
+"rather than B<dpkg> directly. Thus B<debi> will only be useful if it is "
+"either being run as root or B<debpkg> can be run as root. See B<debpkg>(1) "
+"for more details."
+msgstr ""
+"Puisque l'installation d'un paquet nécessite les droits du superutilisateur, "
+"B<debi> appelle B<debpkg> plutôt que B<dpkg>. De ce fait, B<debi> ne pourra "
+"être utile que s'il est exécuté avec ces droits ou si B<debpkg> peut être "
+"exécuté en tant que superutilisateur. Veuillez consulter B<debpkg>(1) pour "
+"plus de détails."
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:67
+msgid "B<cvs-buildpackage>(1), B<cvs-debc>(1), B<cvs-debuild>(1), B<debi>(1)"
+msgstr "B<cvs-buildpackage>(1), B<cvs-debc>(1), B<cvs-debuild>(1), B<debi>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:4
+msgid ""
+"cvs-debrelease - upload a cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+"cvs-debrelease - Envoyer à l'archive Debian un paquet créé par cvs-"
+"buildpackage ou cvs-debuild"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:7
+msgid ""
+"B<cvs-debrelease> [I<cvs-debrelease options>] [B<--dopts> [I<dupload/dput "
+"options>]]"
+msgstr ""
+"B<cvs-debrelease> [I<options_cvs-debrelease>] [B<--dopts>\\ "
+"[I<options_dupload/dput>]]"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:17
+msgid ""
+"B<cvs-debrelease> is run from the CVS working directory after B<cvs-"
+"buildpackage> or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to "
+"locate the I<.changes> file generated in that run. It then uploads the "
+"package using B<debrelease>(1), which in turn calls either B<dupload> or "
+"B<dput>. Note that the B<--dopts> option must be specified to distinguish "
+"the B<cvs-debrelease> options from the B<dupload> or B<dput> options. Also, "
+"the B<devscripts> configuration files will be read, as described in the "
+"B<debrelease>(1) manpage."
+msgstr ""
+"B<cvs-debrelease> est exécuté après B<cvs-buildpackage> ou B<cvs-debuild> "
+"depuis le répertoire de travail CVS. Il utilise le système B<cvs-"
+"buildpackage> pour trouver le fichier I<.changes> produit au cours de cette "
+"exécution. Il envoie ensuite le paquet à l'archive Debian en utilisant "
+"B<debrelease>(1), qui appelle soit B<dupload> soit B<dput>. Remarquez que "
+"l'option B<--dopts> doit être utilisée pour différencier les options de "
+"B<cvs-debrelease> des options de B<dupload> ou B<dput>. Les fichiers de "
+"configuration de B<devscripts> seront également lus, comme décrit dans la "
+"page de manuel de B<debrelease>(1)."
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:26
+msgid ""
+"All current B<cvs-buildpackage> options are silently accepted; however, only "
+"the ones listed below have any effect. For more details on all of them, see "
+"the B<cvs-buildpackage>(1) manpage. All B<debrelease> options (as listed "
+"below) are also accepted."
+msgstr ""
+"Toutes les options de B<cvs-buildpackage> sont acceptées sans avertissement. "
+"Cependant, seules celles listées ci-dessous ont un effet. Pour plus de "
+"détails sur ces options, consultez la page de manuel de B<cvs-"
+"buildpackage>(1). Toutes les options de B<debrelease> (listées ci-dessous) "
+"sont également acceptées."
+
+#. type: TP
+#: ../scripts/cvs-debrelease.1:26 ../scripts/debrelease.1:57
+#, no-wrap
+msgid "B<--dupload>, B<--dput>"
+msgstr "B<--dupload>, B<--dput>"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:30 ../scripts/debrelease.1:61
+msgid ""
+"This specifies which uploader program to use; the default is B<dupload>."
+msgstr ""
+"Permet d'indiquer le programme utilisé pour l'envoi à l'archive Debian. Par "
+"défaut, B<dupload> est utilisé."
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:68
+msgid "B<cvs-buildpackage>(1), B<cvs-debuild>(1), B<debrelease>(1)"
+msgstr "B<cvs-buildpackage>(1), B<cvs-debuild>(1), B<debrelease>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:72
+msgid ""
+"B<cvs-buildpackage> was written by Manoj Srivastava, and the current version "
+"of B<debrelease> was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>. "
+"They have been combined into this program by Julian Gilbey."
+msgstr ""
+"B<cvs-buildpackage> a été écrit par Manoj Srivastava, et la version actuelle "
+"de B<debrelease> a été écrite par Julian Gilbey E<lt>jdg@debian.orgE<gt>. "
+"Ils ont été combinés par Julian Gilbey pour donner ce programme."
+
+#. type: TH
+#: ../scripts/cvs-debuild.1:1
+#, no-wrap
+msgid "CVS-DEBUILD"
+msgstr "CVS-DEBUILD"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:4
+msgid "cvs-debuild - build a Debian package using cvs-buildpackage and debuild"
+msgstr ""
+"cvs-debuild - Construire un paquet Debian avec cvs-buildpackage et debuild"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:7
+msgid ""
+"B<cvs-debuild> [I<debuild options>] [I<cvs-buildpackage options>] [B<--"
+"lintian-opts> I<lintian options>]"
+msgstr ""
+"B<cvs-debuild> [I<options_debuild>] [I<options_cvs-buildpackage>] [B<--"
+"lintian-opts> I<options_lintian>]"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:13
+msgid ""
+"B<cvs-debuild> is a wrapper around B<cvs-buildpackage> to run it with "
+"B<debuild> as the package-building program. (This cannot simply be "
+"accomplished using the B<-C> option of B<cvs-buildpackage>, as it does not "
+"know how to handle all of the special B<debuild> options.)"
+msgstr ""
+"B<cvs-debuild> encapsule des appels à B<cvs-buildpackage> pour l'exécuter "
+"avec B<debuild> comme programme de création de paquets. Ça ne peut pas se "
+"faire simplement en utilisant l'option B<-C> de B<cvs-buildpackage>, qui ne "
+"sait pas utiliser toutes les options particulières à B<debuild>."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:22
+msgid ""
+"The program simply stashes the B<debuild> and B<lintian> options, and passes "
+"them to B<debuild> when it is called by B<cvs-buildpackage>. All of the "
+"standard B<debuild> options may be used (as listed below), but note that the "
+"root command specified by any B<--rootcmd> or B<-r> command-line option will "
+"be passed as an option to B<cvs-buildpackage>. The first non-B<debuild> "
+"option detected will signal the start of the B<cvs-buildpackage> options."
+msgstr ""
+"Ce programme ne fait que sauvegarder les options pour B<debuild> et "
+"B<lintian>, pour les passer ensuite à B<debuild> lorsqu'il est appelé par "
+"B<cvs-buildpackage>. Toutes les options standards de B<debuild> peuvent être "
+"utilisées (voir la liste ci-dessous), mais notez que les commandes pour "
+"devenir superutilisateur, indiquées par les options B<--rootcmd> ou B<-r>, "
+"seront passées en option de B<cvs-buildpackage>. La première option détectée "
+"comme n'étant pas pour B<debuild> indique le début des options pour B<cvs-"
+"buildpackage>."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:29
+msgid ""
+"The selection of the root command is slightly subtle: if there are any "
+"command-line options, these will be used. If not, then if B<cvs-"
+"buildpackage> is set up to use a default root command, that will be used. "
+"Finally, if neither of these are the case, then B<debuild> will use its "
+"procedures to determine an appropriate command, as described in its "
+"documentation."
+msgstr ""
+"Le choix de la commande pour devenir superutilisateur est un peu subtil : si "
+"elle est fournie par une option de la ligne de commande, celle-ci est "
+"utilisée. Sinon, si B<cvs-buildpackage> est configuré pour en utiliser une "
+"par défaut, celle-ci est utilisée. Enfin, B<debuild> utilisera ses "
+"procédures pour déterminer la commande appropriée, comme décrit dans sa "
+"documentation."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:32
+msgid ""
+"See the manpages for B<debuild>(1) and B<cvs-buildpackage> for more "
+"information about the behaviour of each."
+msgstr ""
+"Consultez les pages de manuel de B<debuild>(1) et de B<cvs-buildpackage>(1) "
+"pour plus d'informations sur leur comportement."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:38
+msgid ""
+"The following are the B<debuild> options recognised by B<cvs-debuild>. All "
+"B<cvs-buildpackage> and B<lintian> options are simply passed to the "
+"appropriate program. For explanations of the meanings of these variables, "
+"see B<debuild>(1)."
+msgstr ""
+"Voici les options de B<debuild> reconnues par B<cvs-debuild>. Toutes les "
+"options de B<cvs-buildpackage> et B<lintian> sont simplement passées aux "
+"programmes appropriés. Pour des explications sur la signification de ces "
+"options, veuillez consulter B<debuild>(1)."
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:40 ../scripts/debuild.1:262
+#, no-wrap
+msgid "B<--rootcmd=>I<gain-root-command>, B<-r>I<gain-root-command>"
+msgstr "B<--rootcmd=>I<commande-pour-devenir-superutilisateur>, B<-r>I<commande-pour-devenir-superutilisateur>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:42 ../scripts/debuild.1:265
+#, no-wrap
+msgid "B<--preserve-env>"
+msgstr "B<--preserve-env>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:44 ../scripts/debuild.1:268
+#, no-wrap
+msgid "B<--preserve-envvar=>I<var>, B<-e>I<var>"
+msgstr "B<--preserve-envvar=>I<var>, B<-e>I<var>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:46 ../scripts/debuild.1:275
+#, no-wrap
+msgid "B<--set-envvar=>I<var>B<=>I<value>, B<-e>I<var>B<=>I<value>"
+msgstr "B<--set-envvar=>I<var>B<=>I<valeur>, B<-e>I<var>B<=>I<valeur>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:48
+#, no-wrap
+msgid "B<--lintian>, B<--no-lintian>"
+msgstr "B<--lintian>, B<--no-lintian>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:50
+#, no-wrap
+msgid "B<--ignore-dirname>, B<--check-dirname>"
+msgstr "B<--ignore-dirname>, B<--check-dirname>"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:53
+msgid "These should not be needed, but it is provided nevertheless."
+msgstr ""
+"Ces options ne devraient pas être nécessaires, mais sont néanmoins fournies."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:58
+msgid ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1), B<lintian>(1)"
+msgstr ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1), B<lintian>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:59
+msgid "This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr "Ce programme a été écrit par Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/dcmd.1:1
+#, no-wrap
+msgid "DCMD"
+msgstr "DCMD"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:4
+msgid "dcmd - expand file lists of .dsc/.changes files in the command line"
+msgstr ""
+"dcmd - Développer la liste des fichiers d'un fichier .dsc ou .changes sur "
+"une ligne de commande"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:6
+msgid "B<dcmd> [I<options>] [I<command>] [I<changes-file>|I<dsc-file>] ..."
+msgstr ""
+"B<dcmd> [I<options>] [I<commande>] [I<fichier-changes>|I<fichier-dsc>] ..."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:11
+msgid ""
+"B<dcmd> replaces any reference to a I<.dsc> or I<.changes> file in the "
+"command line with the list of files in its 'Files' section, plus the file "
+"itself. It allows easy manipulation of all the files involved in an upload "
+"(for I<.changes> files) or a source package (for I<.dsc> files)."
+msgstr ""
+"B<dcmd> remplace toutes les références à un fichier I<.dsc> ou I<.changes> "
+"sur la ligne de commande par la liste des fichiers de sa section \"Files\", "
+"plus le fichier lui-même. Cela facilite la manipulation de tous les fichiers "
+"impliqués dans un envoi (pour les fichiers I<.changes>) ou un paquet source "
+"(pour les fichiers I<.dsc>)."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:15
+msgid ""
+"If I<command> is omitted (that is the first argument is an existing I<.dsc> "
+"or I<.changes> file), the expanded list of files is printed to stdout, one "
+"file by line. Useful for usage in backticks."
+msgstr ""
+"Si aucune I<commande> n'est fournie (c'est-à-dire si le premier paramètre "
+"est un fichier I<.dsc> ou I<.changes>), la liste des fichiers est affichée "
+"sur la sortie standard, un fichier par ligne. C'est utile pour l'utilisation "
+"dans une autre commande."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:19
+msgid ""
+"There are a number of options which may be used in order to select only a "
+"subset of the files listed in the I<.dsc> or I<.changes> file. If a "
+"requested file is not found, an error message will be printed."
+msgstr ""
+"Différentes options permettent de ne sélectionner qu'une partie des fichiers "
+"listés dans le fichier I<.dsc> ou I<.changes>. Si un fichier demandé n'est "
+"pas trouvé, un message d'erreur est affiché."
+
+#. type: TP
+#: ../scripts/dcmd.1:19
+#, no-wrap
+msgid "B<--dsc>"
+msgstr "B<--dsc>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:22
+msgid "Select the I<.dsc> file."
+msgstr "Sélectionner le fichier I<.dsc>."
+
+#. type: TP
+#: ../scripts/dcmd.1:22
+#, no-wrap
+msgid "B<--schanges>"
+msgstr "B<--schanges>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:25
+msgid "Select I<.changes> files for the 'source' architecture."
+msgstr "Sélectionner les fichiers I<.changes> pour l'architecture \"source\"."
+
+#. type: TP
+#: ../scripts/dcmd.1:25
+#, no-wrap
+msgid "B<--bchanges>"
+msgstr "B<--bchanges>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:28
+msgid "Select I<.changes> files for binary architectures."
+msgstr "Sélectionner les fichiers I<.changes> pour les architectures binaires."
+
+#. type: TP
+#: ../scripts/dcmd.1:28
+#, no-wrap
+msgid "B<--changes>"
+msgstr "B<--changes>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:31
+msgid "Select I<.changes> files. Implies B<--schanges> and B<--bchanges>."
+msgstr ""
+"Sélectionner les fichiers I<.changes>. Implique B<--schanges> et B<--"
+"bchanges>."
+
+#. type: TP
+#: ../scripts/dcmd.1:31
+#, no-wrap
+msgid "B<--archdeb>"
+msgstr "B<--archdeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:34
+msgid "Select architecture-dependent binary packages (I<.deb> files)."
+msgstr ""
+"Sélectionner les paquets binaires (fichiers I<.deb>) spécifiques à une "
+"architecture."
+
+#. type: TP
+#: ../scripts/dcmd.1:34
+#, no-wrap
+msgid "B<--indepdeb>"
+msgstr "B<--indepdeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:37
+msgid "Select architecture-independent binary packages (I<.deb> files)."
+msgstr ""
+"Sélectionner les paquets binaires (fichiers I<.deb>) non spécifiques à une "
+"architecture."
+
+#. type: TP
+#: ../scripts/dcmd.1:37
+#, no-wrap
+msgid "B<--deb>"
+msgstr "B<--deb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:40
+msgid ""
+"Select binary packages (I<.deb> files). Implies B<--archdeb> and B<--"
+"indepdeb>."
+msgstr ""
+"Sélectionner les paquets binaires (fichiers I<.deb>). Implique B<--archdeb> "
+"et B<--indepdeb>."
+
+#. type: TP
+#: ../scripts/dcmd.1:40
+#, no-wrap
+msgid "B<--archudeb>"
+msgstr "B<--archudeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:43
+msgid "Select architecture-dependent I<.udeb> binary packages."
+msgstr ""
+"Sélectionner les paquets I<.udeb> binaires spécifiques à une architecture."
+
+#. type: TP
+#: ../scripts/dcmd.1:43
+#, no-wrap
+msgid "B<--indepudeb>"
+msgstr "B<--indepudeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:46
+msgid "Select architecture-independent I<.udeb> binary packages."
+msgstr ""
+"Sélectionner les paquets I<.udeb> binaires non spécifiques à une "
+"architecture."
+
+#. type: TP
+#: ../scripts/dcmd.1:46
+#, no-wrap
+msgid "B<--udeb>"
+msgstr "B<--udeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:49
+msgid ""
+"Select I<.udeb> binary packages. Implies B<--archudeb> and B<--indepudeb>."
+msgstr ""
+"Sélectionner les paquets I<.udeb> binaires. Implique B<--archudeb> et B<--"
+"indepudeb>."
+
+#. type: TP
+#: ../scripts/dcmd.1:49
+#, no-wrap
+msgid "B<--tar>,\\ B<--orig>"
+msgstr "B<--tar>, B<--orig>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:52
+msgid "Select the upstream I<.tar> file."
+msgstr "Sélectionner le fichier I<.tar> amont."
+
+#. type: TP
+#: ../scripts/dcmd.1:52
+#, no-wrap
+msgid "B<--diff>,\\ B<--debtar>"
+msgstr "B<--diff>, B<--debtar>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:55
+msgid "Select the Debian I<.debian.tar> or I<.diff> file."
+msgstr "Sélectionner le fichier Debian I<.debian.tar> ou I<.diff>."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:58
+msgid ""
+"Each option may be prefixed by B<--no> to indicate that all files I<not> "
+"matching the specification should be selected."
+msgstr ""
+"Chaque option peut être préfixée par B<--no> pour indiquer que tous les "
+"fichiers qui ne correspondent I<pas> aux indications doivent être "
+"sélectionnés."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:62
+msgid ""
+"It is not possible to combine positive filtering options (e.g. B<--dsc>) "
+"and negative filtering options (e.g. B<--no-changes>) in the same B<dcmd> "
+"invocation."
+msgstr ""
+"Il n'est pas possible de combiner les options de filtrage positives (par "
+"exemple B<--dsc>) et négatives (par exemple B<--no-changes>) dans le même "
+"appel à B<dcmd>."
+
+#. type: TP
+#: ../scripts/dcmd.1:62
+#, no-wrap
+msgid "B<--no-fail-on-missing>, B<-r>"
+msgstr "B<--no-fail-on-missing>, B<-r>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:65
+msgid "If any of the requested files were not found, do not output an error."
+msgstr ""
+"Si un des fichiers demandés n'est pas trouvé, ne pas afficher d'erreur."
+
+#. type: TP
+#: ../scripts/dcmd.1:65
+#, no-wrap
+msgid "B<--package>, B<-p>"
+msgstr "B<--package>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:68
+msgid "Output package name part only."
+msgstr "N’afficher que la partie du nom de paquet."
+
+#. type: TP
+#: ../scripts/dcmd.1:68
+#, no-wrap
+msgid "B<--sort>, B<-s>"
+msgstr "B<--sort>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:71
+msgid "Sort output alphabetically."
+msgstr "Trier alphabétiquement en sortie."
+
+#. type: TP
+#: ../scripts/dcmd.1:71
+#, no-wrap
+msgid "B<--tac>, B<-t>"
+msgstr "B<--tac>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:74
+msgid "Reverse output order."
+msgstr "Inverser l’ordre de sortie."
+
+#. type: =head1
+#: ../scripts/dcmd.1:75 ../scripts/debsnap.1:109 ../scripts/debuild.1:404
+#: ../scripts/dget.pl:719 ../scripts/getbuildlog.1:31 ../scripts/rc-alert.1:96
+#: ../scripts/who-permits-upload.pl:139
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "EXEMPLES"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:77
+msgid "Copy the result of a build to another machine:"
+msgstr ""
+"Copier le résultat d'une construction de paquet sur une autre machine :"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:85
+#, no-wrap
+msgid ""
+"$ dcmd scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.dsc 100% 490 0.5KB/s 00:00\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.changes 100% 1095 1.1KB/s 00:00\n"
+"$\n"
+msgstr ""
+"$ dcmd scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.dsc 100% 490 0.5KB/s 00:00\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.changes 100% 1095 1.1KB/s 00:00\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:90
+#, no-wrap
+msgid ""
+"$ dcmd --diff --deb scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"$\n"
+msgstr ""
+"$ dcmd --diff --deb scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:93
+msgid "Check the contents of a source package:"
+msgstr "Vérifier le contenu d'un paquet source :"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:100
+#, no-wrap
+msgid ""
+"$ dcmd md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"f0ceeae96603e823eacba6721a30b5c7 rcs_5.7-23.diff.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+msgstr ""
+"$ dcmd md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"f0ceeae96603e823eacba6721a30b5c7 rcs_5.7-23.diff.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:105
+#, no-wrap
+msgid ""
+"$ dcmd --no-diff md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+msgstr ""
+"$ dcmd --no-diff md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:110
+msgid "B<dpkg-genchanges>(1), B<dpkg-source>(1)"
+msgstr "B<dpkg-genchanges>(1), B<dpkg-source>(1)"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:112
+msgid ""
+"This program was written by Romain Francoise E<lt>rfrancoise@debian.orgE<gt> "
+"and is released under the GPL, version 2 or later."
+msgstr ""
+"Ce programme a été écrit par Romain Françoise E<lt>rfrancoise@debian."
+"orgE<gt> et est distribué sous licence GPL, version 2 ou ultérieure."
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "DD-LIST"
+msgstr "DD-LIST"
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "2011-10-27"
+msgstr "27 octobre 2011"
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "Debian"
+msgstr "Debian"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:21
+msgid "dd-list - nicely list .deb packages and their maintainers"
+msgstr ""
+"dd-list - Afficher une jolie liste de paquets .deb et de leurs responsables"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:26
+msgid ""
+"B<dd-list> [B<-hiusV>] [B<--help>] [B<--stdin>] [B<--sources "
+">I<Sources_file>] [B<--dctrl>] [B<--version>] [B<--uploaders>] "
+"[I<package> ...]"
+msgstr ""
+"B<dd-list> [B<-hiusV>] [B<--help>] [B<--stdin>] [B<--sources> "
+"I<fichier_Sources>] [B<--dctrl>] [B<--version>] [B<--uploaders>] "
+"[I<paquet> ...]"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:30
+msgid ""
+"B<dd-list> produces nicely formatted lists of Debian (.deb) packages and "
+"their maintainers."
+msgstr ""
+"B<dd-list> produit des listes de paquets Debian (.deb) et de leurs "
+"responsables, joliment formatées."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:37
+msgid ""
+"Input is a list of source or binary package names on the command line (or "
+"the standard input if B<--stdin> is given). Output is a list of the "
+"following format, where package names are source packages by default:"
+msgstr ""
+"Une liste de noms de paquets source ou binaires est attendue en tant que "
+"paramètre de la ligne de commande (ou sur l'entrée standard si l'option B<--"
+"stdin> est fournie). La sortie est une liste au format suivant, où les noms "
+"de paquets sont, par défaut, des noms de paquets source :"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:41
+#, no-wrap
+msgid "J. Random Developer E<lt>jrandom@debian.orgE<gt>\n"
+msgstr "J. Random Developer E<lt>jrandom@debian.orgE<gt>\n"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:44
+#, no-wrap
+msgid ""
+"j-random-package\n"
+"j-random-other\n"
+msgstr ""
+"j-random-package\n"
+"j-random-other\n"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:47
+#, no-wrap
+msgid "Diana Hacker E<lt>diana@example.orgE<gt>\n"
+msgstr "Diana Hacker E<lt>diana@example.orgE<gt>\n"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:50
+#, no-wrap
+msgid ""
+"fun-package\n"
+"more-fun-package\n"
+msgstr ""
+"fun-package\n"
+"more-fun-package\n"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:58
+msgid ""
+"This is useful when you want, for example, to produce a list of packages "
+"that need to attention from their maintainers, e.g., to be rebuilt when a "
+"library version transition happens."
+msgstr ""
+"C'est utile quand vous voulez, par exemple, obtenir une liste des paquets "
+"qui demandent l'attention de leurs responsables, par exemple lorsqu'ils "
+"doivent être reconstruits suite à une transition de bibliothèque."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:62
+msgid "Print brief help message."
+msgstr "Afficher un bref message d'aide."
+
+#. type: TP
+#: ../scripts/dd-list.1:62
+#, no-wrap
+msgid "B<-i>, B<--stdin>"
+msgstr "B<-i>, B<--stdin>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:66
+msgid ""
+"Read package names from the standard input, instead of taking them from the "
+"command line. Package names are whitespace delimited."
+msgstr ""
+"Lire les noms de paquets depuis l'entrée standard, plutôt que les obtenir "
+"depuis la ligne de commande. Les noms de paquets doivent être séparés par "
+"des espaces."
+
+#. type: TP
+#: ../scripts/dd-list.1:66
+#, no-wrap
+msgid "B<-d>, B<--dctrl>"
+msgstr "B<-d>, B<--dctrl>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:73
+msgid ""
+"Read package list from standard input in the format of a Debian package "
+"control file. This includes the status file, or output of apt-cache. This is "
+"the fastest way to use dd-list, as it uses the maintainer information from "
+"the input instead of looking up the maintainer of each listed package."
+msgstr ""
+"Lire la liste de paquets depuis l'entrée standard, au format du fichier de "
+"contrôle Debian (\"debian/control\"). Cela inclut le fichier d'état, ou la "
+"sortie d'apt-cache. C'est l'utilisation la plus rapide de dd-list, "
+"puisqu'elle utilise les informations de responsable depuis l'entrée plutôt "
+"que de rechercher les responsables de chaque paquet."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:76
+msgid ""
+"If no I<Source:> line is given, the I<Package:> name is used for output, "
+"which might be a binary package name."
+msgstr ""
+"Si aucune ligne I<Source:> n'est donnée, le nom de I<Package:> est utilisé "
+"en sortie, et peut être un nom de paquet binaire."
+
+#. type: TP
+#: ../scripts/dd-list.1:76
+#, no-wrap
+msgid "B<-z>, B<--uncompress>"
+msgstr "B<-z>, B<--uncompress>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:80
+msgid ""
+"Try to uncompress the --dctrl input before parsing. Supported compression "
+"formats are gz, bzip2 or xz."
+msgstr ""
+"Essayer de décompresser l'entrée -dctrl avant l'analyse. Les formats de "
+"compression pris en charge sont gz, bzip2 ou xz."
+
+#. type: TP
+#: ../scripts/dd-list.1:80
+#, no-wrap
+msgid "B<-s>, B<--sources> I<Sources_file>"
+msgstr "B<-s>, B<--sources> I<fichier_Sources>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:86
+msgid ""
+"Read package information from the specified I<Sources_file>s. This can be "
+"given multiple times. The files can be gz, bzip2 or xz compressed. If the "
+"filename does not end in I<.gz>, I<.bz2> or I<.xz>, then the B<-z> option "
+"must be used."
+msgstr ""
+"Lire les informations de paquets à partir des I<fichiers_Sources> indiqués. "
+"Cela peut être indiqué plusieurs fois. Les fichiers peuvent être compressés "
+"avec gz, bzip2 ou xz. Si le nom de fichier ne se termine pas par I<.gz>, I<."
+"bz2> ou I<.xz>, alors l'option B<-z> doit être utilisée."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:90
+msgid ""
+"If no I<Sources_file>s are specified, dd-list will ask apt-get for an "
+"appropriate set of sources (if I<apt> is at version greater than 1.1.8), "
+"else any files matching I</var/lib/apt/lists/*_source_Sources> will be used."
+msgstr ""
+"Si aucun I<fichier_Sources> n'est indiqué, dd-list demandera à apt-get une "
+"ensemble de sources approprié (si la version d'I<apt> est supérieure à "
+"1.1.8), sinon tous les fichiers correspondant à I</var/lib/apt/lists/"
+"*_source_Sources> seront utilisés."
+
+#. type: TP
+#: ../scripts/dd-list.1:90
+#, no-wrap
+msgid "B<-u>, B<--uploaders>"
+msgstr "B<-u>, B<--uploaders>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:95
+msgid ""
+"Also list developers who are named as uploaders of packages, not only the "
+"maintainers; this is the default behaviour, use --nouploaders to prevent it. "
+"Uploaders are indicated with \"(U)\" appended to the package name."
+msgstr ""
+"Afficher aussi la liste des développeurs marqués comme \"uploaders\" des "
+"paquets et non seulement les responsables ; c'est le comportement par "
+"défaut, utilisez --nouploaders si ce n'est pas ce que vous souhaitez. Les "
+"uploaders sont indiqués avec un \"(U)\" ajouté en fin de nom de paquet."
+
+#. type: TP
+#: ../scripts/dd-list.1:95
+#, no-wrap
+msgid "B<-nou>, B<--nouploaders>"
+msgstr "B<-nou>, B<--nouploaders>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:98
+msgid "Only list package Maintainers, do not list Uploaders."
+msgstr ""
+"N'afficher que la liste des responsables (Maintainers) d'un paquet, pas les "
+"Uploaders."
+
+#. type: TP
+#: ../scripts/dd-list.1:98
+#, no-wrap
+msgid "B<-b>, B<--print-binary>"
+msgstr "B<-b>, B<--print-binary>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:103
+msgid ""
+"Use binary package names in the output instead of source package names (has "
+"no effect with B<--dctrl> if the I<Package:> line contains source package "
+"names)."
+msgstr ""
+"Utiliser des noms de paquets binaires pour la sortie, plutôt que des noms de "
+"paquets source (sans effet avec B<--dctrl> si la ligne I<Package:> contient "
+"des noms de paquets source)."
+
+#. type: TP
+#: ../scripts/dd-list.1:103 ../scripts/dget.pl:684 ../scripts/getbuildlog.1:28
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:107
+msgid "Print the version."
+msgstr "Afficher la version."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:109
+msgid "Lars Wirzenius E<lt>liw@iki.fiE<gt>"
+msgstr "Lars Wirzenius E<lt>liw@iki.fiE<gt>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:110
+msgid "Joey Hess E<lt>joeyh@debian.orgE<gt>"
+msgstr "Joey Hess E<lt>joeyh@debian.orgE<gt>"
+
+#. type: TH
+#: ../scripts/debc.1:1
+#, no-wrap
+msgid "DEBC"
+msgstr "DEBC"
+
+#. type: Plain text
+#: ../scripts/debc.1:4
+msgid "debc - view contents of a generated Debian package"
+msgstr "debc - Visualiser le contenu d'un paquet Debian créé"
+
+#. type: Plain text
+#: ../scripts/debc.1:6
+msgid "B<debc> [I<options>] [I<changes file>] [I<package> ...]"
+msgstr "B<debc> [I<options>] [I<fichier_changes>] [I<paquet> ...]"
+
+#. type: Plain text
+#: ../scripts/debc.1:25
+msgid ""
+"B<debc> figures out the current version of a package and displays "
+"information about the I<.deb> and I<.udeb> files which have been generated "
+"in the current build process. If a I<.changes> file is specified on the "
+"command line, the filename must end with I<.changes>, as this is how the "
+"program distinguishes it from package names. If not, then B<debc> has to be "
+"called from within the source code directory tree. In this case, it will "
+"look for the I<.changes> file corresponding to the current package version "
+"(by determining the name and version number from the changelog, and the "
+"architecture in the same way as B<dpkg-buildpackage>(1) does). It then runs "
+"B<dpkg-deb -I> and B<dpkg-deb -c> on every I<.deb> and I<.udeb> archive "
+"listed in the I<.changes> file to display information about the contents of "
+"the I<.deb> / I<.udeb> files. It precedes every I<.deb> or I<.udeb> file "
+"with the name of the file. It assumes that all of the I<.deb> / I<.udeb> "
+"archives live in the same directory as the I<.changes> file. It is useful "
+"for ensuring that the expected files have ended up in the Debian package."
+msgstr ""
+"B<debc> détermine la version d'un paquet et affiche des informations "
+"concernant les fichiers I<.deb> et I<.udeb> produits. Si un fichier I<."
+"changes> est indiqué en ligne de commande, le nom du fichier doit se "
+"terminer par I<.changes>, puisque c'est comme cela que le programme le "
+"différencie d'un nom de paquet. Sinon, B<debc> doit être appelé depuis le "
+"répertoire du code source. Dans ce cas, il recherchera un fichier I<."
+"changes> correspondant à la version du paquet ; pour cela, il détermine le "
+"nom et la version grâce au fichier I<changelog>, et l'architecture est "
+"cherchée comme B<dpkg-buildpackage>(1) le ferait. Il exécute ensuite B<dpkg-"
+"deb -I> et B<dpkg-deb -c> pour toutes les archives I<.deb> listées dans le "
+"fichier I<.changes> pour afficher des informations sur le contenu des "
+"fichiers I<.deb> et I<.udeb>. Il place devant tous les fichiers I<.deb> ou "
+"I<.udeb> le nom du fichier. Il suppose que toutes ces archives I<.deb> ou I<."
+"udeb> se trouvent dans le même répertoire que le fichier I<.changes>. C'est "
+"utile pour s'assurer que tous les fichiers attendus se trouvent dans le "
+"paquet Debian."
+
+#. type: Plain text
+#: ../scripts/debc.1:28
+msgid ""
+"If a list of packages is given on the command line, then only those debs or "
+"udebs with names in this list of packages will be processed."
+msgstr ""
+"Si une liste de paquets est fournie en ligne de commande, alors seuls les "
+"paquets Debian (I<.deb> ou I<.udeb>) dont les noms sont dans la liste seront "
+"considérés."
+
+#. type: =head2
+#: ../scripts/debc.1:28 ../scripts/debchange.1:109 ../scripts/debclean.1:27
+#: ../scripts/debi.1:29 ../scripts/debrelease.1:20 ../scripts/debuild.1:51
+#: ../scripts/uscan.pl:1979
+#, no-wrap
+msgid "Directory name checking"
+msgstr "Vérification du nom du répertoire"
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debc.1:39
+msgid ""
+"In common with several other scripts in the B<devscripts> package, B<debc> "
+"will climb the directory tree until it finds a I<debian/changelog> file. As "
+"a safeguard against stray files causing potential problems, it will examine "
+"the name of the parent directory once it finds the I<debian/changelog> file, "
+"and check that the directory name corresponds to the package name. "
+"Precisely how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Comme plusieurs autres scripts du paquet B<devscripts>, B<debc> parcourt une "
+"arborescence de répertoires jusqu'à trouver un fichier I<debian/changelog>. "
+"Pour éviter les problèmes posés par les fichiers égarés, il examine le nom "
+"du répertoire parent une fois qu'il a trouvé le fichier I<debian/changelog>, "
+"et vérifie que le nom du répertoire correspond au nom du paquet. La méthode "
+"précise utilisée est contrôlée par les deux variables du fichier de "
+"configuration B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> et "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, et les options en ligne de commande "
+"associées B<--check-dirname-level> et B<--check-dirname-regex>."
+
+#. type: textblock
+#: ../scripts/debc.1:41 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:65
+#: ../scripts/uscan.pl:1994
+msgid "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> can take the following values:"
+msgstr "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> peut prendre les valeurs suivantes :"
+
+#. type: =item
+#: ../scripts/debc.1:41 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:65
+#: ../scripts/uscan.pl:1925 ../scripts/uscan.pl:1998
+#, no-wrap
+msgid "B<0>"
+msgstr "B<0>"
+
+#. type: textblock
+#: ../scripts/debc.1:44 ../scripts/debchange.1:125 ../scripts/debclean.1:43
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:68
+#: ../scripts/uscan.pl:2000
+msgid "Never check the directory name."
+msgstr "Ne jamais vérifier le nom du répertoire."
+
+#. type: =item
+#: ../scripts/debc.1:44 ../scripts/debchange.1:125 ../scripts/debclean.1:43
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:68
+#: ../scripts/uscan.pl:1930 ../scripts/uscan.pl:2002
+#, no-wrap
+msgid "B<1>"
+msgstr "B<1>"
+
+#. type: Plain text
+#: ../scripts/debc.1:48 ../scripts/debchange.1:129 ../scripts/debclean.1:47
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:72
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for I<debian/changelog>. This is the default behaviour."
+msgstr ""
+"Ne vérifier le nom du répertoire que s'il a fallu changer de répertoire pour "
+"trouver le fichier I<debian/changelog>. C'est le comportement par défaut."
+
+#. type: =item
+#: ../scripts/debc.1:48 ../scripts/debchange.1:129 ../scripts/debclean.1:47
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:72
+#: ../scripts/uscan.pl:2009
+#, no-wrap
+msgid "B<2>"
+msgstr "B<2>"
+
+#. type: textblock
+#: ../scripts/debc.1:51 ../scripts/debchange.1:132 ../scripts/debclean.1:50
+#: ../scripts/debi.1:52 ../scripts/debrelease.1:43 ../scripts/debuild.1:75
+#: ../scripts/uscan.pl:2011
+msgid "Always check the directory name."
+msgstr "Toujours vérifier le nom du répertoire."
+
+#. type: Plain text
+#: ../scripts/debc.1:64 ../scripts/debclean.1:63 ../scripts/debi.1:65
+#: ../scripts/debrelease.1:56
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a '/', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'PACKAGE', this will be replaced by the source package name, as "
+"determined from the changelog. The default value for the regex is: "
+"\\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and PACKAGE-"
+"version."
+msgstr ""
+"Le nom du répertoire est vérifié en testant si le nom du répertoire actuel "
+"(donné par B<pwd>(1)) correspond à l'expression rationnelle donnée par la "
+"variable B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> du fichier de configuration ou "
+"par l'option B<--check-dirname-regex> I<expression_rationnelle>. Il s'agit "
+"d'une expression rationnelle Perl (voir B<perlre>(1)), qui sera ancrée à son "
+"début et à sa fin. Si elle contient un \"/\", alors elle doit correspondre "
+"au chemin complet, sinon elle doit correspondre au nom de répertoire "
+"complet. Si elle contient la chaîne \"PACKAGE\", cette chaîne sera remplacée "
+"par le nom du paquet source déterminé par le journal de modifications. La "
+"valeur par défaut de cette expression rationnelle est \"PACKAGE(-.+)?\", ce "
+"qui correspond aux répertoires nommés PACKAGE ou PACKAGE-version."
+
+#. type: TP
+#: ../scripts/debc.1:71 ../scripts/debdiff.1:170 ../scripts/debi.1:72
+#: ../scripts/debrelease.1:81
+#, no-wrap
+msgid "B<--debs-dir> I<directory>"
+msgstr "B<--debs-dir> I<répertoire>"
+
+#. type: Plain text
+#: ../scripts/debc.1:77
+msgid ""
+"Look for the I<.changes>, I<.deb> and I<.udeb> files in I<directory> instead "
+"of the parent of the source directory. This should either be an absolute "
+"path or relative to the top of the source directory."
+msgstr ""
+"Chercher les fichiers I<.changes>, I<.deb> et I<.udeb> dans le I<répertoire> "
+"au lieu du répertoire parent du répertoire source. Cela doit être soit un "
+"chemin absolu, soit un chemin relatif à la racine du répertoire source."
+
+#. type: =item
+#: ../scripts/debc.1:77 ../scripts/debchange.1:382 ../scripts/debclean.1:72
+#: ../scripts/debi.1:87 ../scripts/debrelease.1:87 ../scripts/debuild.1:313
+#: ../scripts/uscan.pl:1652
+#, no-wrap
+msgid "B<--check-dirname-level> I<N>"
+msgstr "B<--check-dirname-level> I<N>"
+
+#. type: Plain text
+#: ../scripts/debc.1:81 ../scripts/debc.1:85 ../scripts/debclean.1:76
+#: ../scripts/debclean.1:80 ../scripts/debi.1:91 ../scripts/debi.1:95
+#: ../scripts/debrelease.1:91 ../scripts/debrelease.1:95
+#: ../scripts/debuild.1:317 ../scripts/debuild.1:321
+msgid ""
+"See the above section B<Directory name checking> for an explanation of this "
+"option."
+msgstr ""
+"Veuillez consulter la section B<Vérification du nom du répertoire> ci-dessus "
+"pour une explication de cette option."
+
+#. type: =item
+#: ../scripts/debc.1:81 ../scripts/debchange.1:386 ../scripts/debclean.1:76
+#: ../scripts/debi.1:91 ../scripts/debrelease.1:91 ../scripts/debuild.1:317
+#: ../scripts/uscan.pl:1656
+#, no-wrap
+msgid "B<--check-dirname-regex> I<regex>"
+msgstr "B<--check-dirname-regex> I<regex>"
+
+#. type: TP
+#: ../scripts/debc.1:85
+#, no-wrap
+msgid "B<--list-changes>"
+msgstr "B<--list-changes>"
+
+#. type: Plain text
+#: ../scripts/debc.1:92
+msgid ""
+"List the filename of the .changes file, and do not display anything else. "
+"This option only makes sense if a .changes file is NOT passed explicitly in "
+"the command line. This can be used for example in a script that needs to "
+"reference the .changes file, without having to duplicate the heuristics for "
+"finding it that debc already implements."
+msgstr ""
+"Lister le nom du fichier .changes et ne pas afficher autre chose. Cette "
+"option n'a de sens que si aucun fichier .changes n'est fourni explicitement "
+"sur la ligne de commande. Cela peut être utilisé par exemple dans un script "
+"qui a besoin de référencer le fichier .changes, sans avoir à dupliquer les "
+"heuristiques pour le trouver, ce que debc implémente déjà."
+
+#. type: TP
+#: ../scripts/debc.1:92
+#, no-wrap
+msgid "B<--list-debs>"
+msgstr "B<--list-debs>"
+
+#. type: Plain text
+#: ../scripts/debc.1:95
+msgid ""
+"List the filenames of the .deb packages, and do not display their contents."
+msgstr ""
+"Lister les noms de fichier des paquets .deb et ne pas afficher leur contenu."
+
+# NOTE: et --noconf ?
+#. type: Plain text
+#: ../scripts/debc.1:108 ../scripts/debchange.1:411 ../scripts/debclean.1:99
+#: ../scripts/debi.1:115 ../scripts/debrelease.1:111 ../scripts/debrsign.1:63
+#: ../scripts/debsign.1:111 ../scripts/nmudiff.1:98
+#: ../scripts/pts-subscribe.1:48 ../scripts/uupdate.1:113
+#: ../scripts/who-uploads.1:57
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced in that order to set configuration variables. Command line options "
+"can be used to override configuration file settings. Environment variable "
+"settings are ignored for this purpose. The currently recognised variables "
+"are:"
+msgstr ""
+"Les deux fichiers de configuration I</etc/devscripts.conf> et I<~/."
+"devscripts> sont évalués dans cet ordre pour régler les variables de "
+"configuration. Des options de ligne de commande peuvent être utilisées pour "
+"écraser les paramètres des fichiers de configuration. Les variables "
+"d'environnement sont ignorées à cette fin. Les variables actuellement "
+"identifiées sont :"
+
+#. type: TP
+#: ../scripts/debc.1:108 ../scripts/debdiff.1:237 ../scripts/debi.1:115
+#: ../scripts/debrelease.1:116 ../scripts/debsign.1:123
+#, no-wrap
+msgid "B<DEBRELEASE_DEBS_DIR>"
+msgstr "B<DEBRELEASE_DEBS_DIR>"
+
+#. type: Plain text
+#: ../scripts/debc.1:118
+msgid ""
+"This specifies the directory in which to look for the I<.changes>, I<.deb> "
+"and I<.udeb> files, and is either an absolute path or relative to the top of "
+"the source tree. This corresponds to the B<--debs-dir> command line "
+"option. This directive could be used, for example, if you always use "
+"B<pbuilder> or B<svn-buildpackage> to build your packages. Note that it "
+"also affects B<debrelease>(1) in the same way, hence the strange name of the "
+"option."
+msgstr ""
+"Indique le répertoire dans lequel chercher les fichiers I<.changes>, I<.deb> "
+"et I<.udeb>, et est soit un chemin absolu, soit un chemin relatif à la "
+"racine du répertoire racine. Cela correspond à l'option en ligne de commande "
+"B<--debs-dir>. Cette directive peut être utilisée par exemple si vous "
+"utilisez systématiquement B<pbuilder> ou B<svn-buildpackage> pour construire "
+"vos paquets. Remarquez que cela concerne également B<debrelease>(1), ce qui "
+"explique le nom étrange de l'option."
+
+#. type: TP
+#: ../scripts/debc.1:118 ../scripts/debchange.1:419 ../scripts/debclean.1:103
+#: ../scripts/debi.1:125 ../scripts/debrelease.1:125 ../scripts/debuild.1:397
+#: ../doc/devscripts.conf.5:42
+#, no-wrap
+msgid "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL>, B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>"
+msgstr "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL>, B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>"
+
+#. type: Plain text
+#: ../scripts/debc.1:125 ../scripts/debclean.1:110 ../scripts/debi.1:132
+#: ../scripts/debrelease.1:132 ../scripts/debuild.1:404
+msgid ""
+"See the above section B<Directory name checking> for an explanation of these "
+"variables. Note that these are package-wide configuration variables, and "
+"will therefore affect all B<devscripts> scripts which check their value, as "
+"described in their respective manpages and in B<devscripts.conf>(5)."
+msgstr ""
+"Veuillez consulter la section B<Vérification du nom du répertoire> ci-dessus "
+"pour une explication de ces variables. Remarquez que ce sont des variables "
+"de configuration pour tous les outils du paquet B<devscripts> ; elles "
+"impacteront tous les scripts qui les utilisent, comme indiqué dans leurs "
+"pages de manuel respectives et dans B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/debc.1:129
+msgid "B<debdiff>(1), B<dpkg-deb>(1), B<devscripts.conf>(5)"
+msgstr "B<debdiff>(1), B<dpkg-deb>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debc.1:131
+msgid ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, based on an original script by "
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+msgstr ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, basé sur un script de Christoph "
+"Lameter E<lt>clameter@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/debchange.1:1
+#, no-wrap
+msgid "DEBCHANGE"
+msgstr "DEBCHANGE"
+
+#. type: Plain text
+#: ../scripts/debchange.1:4
+msgid ""
+"debchange - Tool for maintenance of the debian/changelog file in a source "
+"package"
+msgstr ""
+"debchange - Outil pour la maintenance du fichier debian/changelog d'un "
+"paquet source"
+
+#. type: Plain text
+#: ../scripts/debchange.1:6
+msgid "B<debchange> [I<options>] [I<text> ...]"
+msgstr "B<debchange> [I<options>] [I<texte> ...]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:8
+msgid "B<dch> [I<options>] [I<text> ...]"
+msgstr "B<dch> [I<options>] [I<texte> ...]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:33
+msgid ""
+"B<debchange> or its alias B<dch> will add a new comment line to the Debian "
+"changelog in the current source tree. This command must be run from within "
+"that tree. If the text of the change is given on the command line, "
+"B<debchange> will run in batch mode and simply add the text, with line "
+"breaks as necessary, at the appropriate place in I<debian/changelog> (or the "
+"changelog specified by options, as described below). If the text given on "
+"the command line is a null string, B<debchange> will run in batch mode "
+"without adding any text. If the text given on the command line is a space "
+"string, B<debchange> will run in batch mode and add a blank changelog "
+"entry. If no text is specified then B<debchange> will run the editor as "
+"determined by B<sensible-editor> for you to edit the file. (The environment "
+"variables B<VISUAL> and B<EDITOR> are used in this order to determine which "
+"editor to use.) Editors which understand the I<+n> option for starting the "
+"editing on a specified line will use this to move to the correct line of the "
+"file for editing. If the editor is quit without modifying the temporary "
+"file, B<debchange> will exit without touching the existing changelog. "
+"B<Note that the changelog is assumed to be encoded with the UTF-8 encoding. "
+"If it is not, problems may occur.> Please see the B<iconv>(1) manpage to "
+"find out how to convert changelogs from legacy encodings. Finally, a "
+"I<changelog> or I<NEWS> file can be created from scratch using the B<--"
+"create> option described below."
+msgstr ""
+"B<debchange> ou son alias B<dch> ajoute une nouvelle ligne de commentaire au "
+"fichier I<debian/changelog> dans le répertoire des sources. Cette commande "
+"doit être exécutée depuis ce répertoire. Si le texte décrivant le changement "
+"est donné en ligne de commande, B<debchange> s'exécutera de façon "
+"automatique et ajoutera simplement le texte, avec les passages à la ligne "
+"qui s'imposent et à l'emplacement approprié, dans le fichier I<debian/"
+"changelog> (ou le fichier indiqué par les options décrites ci-après). Si le "
+"texte donné sur la ligne de commande est une chaîne NULL, B<debchange> "
+"s'exécutera de façon automatique sans ajouter de texte. Si le texte donné "
+"sur la ligne de commande est une chaîne d'espaces, B<debchange> s'exécutera "
+"de façon automatique et ajoute une entrée de changelog vide. Si aucun texte "
+"n'est renseigné, alors B<debchange> exécute un éditeur (déterminé par "
+"B<sensible-editor>) pour que vous éditiez le fichier. (Les variables "
+"d'environnement B<VISUAL> et B<EDITOR> sont utilisées dans cet ordre pour "
+"déterminer l'éditeur à utiliser.) Pour les éditeurs qui acceptent l'option "
+"I<+n> pour démarrer l'édition à une ligne donnée, cette option sera utilisée "
+"pour positionner l'édition à la bonne ligne. Si l'éditeur est quitté sans "
+"avoir modifié le fichier temporaire, B<debchange> quittera sans modifier le "
+"fichier I<changelog>. B<Remarquez que les fichiers changelog sont supposés "
+"être codés en UTF-8. Dans le cas contraire, des problèmes peuvent se "
+"produire.> Veuillez consulter la page de manuel de B<iconv>(1) pour trouver "
+"comment convertir les fichiers I<changelog> codés autrement. Enfin, un "
+"fichier I<changelog> ou I<NEWS> peut être créé à partir de rien en "
+"utilisantl'option B<--create> décrite ci-dessous."
+
+#. type: Plain text
+#: ../scripts/debchange.1:46
+msgid ""
+"B<debchange> also supports automatically producing bug-closing changelog "
+"entries, using the B<--closes> option. This will usually query the BTS, the "
+"Debian Bug Tracking System (see https://bugs.debian.org/) to determine the "
+"title of the bug and the package in which it occurs. This behaviour can be "
+"stopped by giving a B<--noquery> option or by setting the configuration "
+"variable B<DEBCHANGE_QUERY_BTS> to I<no>, as described below. In either "
+"case, the editor (as described above) will always be invoked to give an "
+"opportunity to modify the entries, and the changelog will be accepted "
+"whether or not modifications are made. An extra changelog entry can be "
+"given on the command line in addition to the closes entries."
+msgstr ""
+"B<debchange> peut également créer des entrées de changelog permettant de "
+"fermer des bogues, en utilisant l'option B<--closes>. Le BTS, ou Debian Bug "
+"Tracking System (système de suivi de bogues Debian, https://bugs.debian."
+"org/), est interrogé pour déterminer le titre du bogue et le paquet dans "
+"lequel il apparaît. Ce comportement peut être modifié en utilisant l'option "
+"B<--noquery> ou en positionnant la variable de configuration "
+"B<DEBCHANGE_QUERY_BTS> à I<no>, comme décrit ci-dessus. Dans tous les cas, "
+"l'éditeur (voir ci-dessus) est toujours appelé pour permettre une "
+"modification de l'entrée, mais le fichier I<changelog> est créé, que des "
+"modifications aient été faites ou non. Une entrée supplémentaire peut être "
+"fournie en ligne de commande en plus de l'entrée fermant le bogue."
+
+#. type: Plain text
+#: ../scripts/debchange.1:53
+msgid ""
+"At most one of B<--append>, B<--increment>, B<--edit>, B<--release>, and B<--"
+"newversion> may be specified as listed below. If no options are specified, "
+"B<debchange> will use heuristics to guess whether or not the package has "
+"been successfully released, and behave as if B<--increment> had been "
+"specified if the package has been released, or otherwise as if B<--append> "
+"has been specified."
+msgstr ""
+"Au plus une des options B<--append>, B<--increment>, B<--edit>, B<--"
+"release>, et B<--newversion> doit être utilisée conformément à leurs "
+"descriptions ci-après. Si aucune option n'est fournie, B<debchange> devra "
+"utiliser des heuristiques pour deviner si le paquet a bien été distribué ou "
+"non, et se comporte comme si B<--increment> avait été utilisée si le paquet "
+"a été distribué, ou autrement comme si B<--append> avait été utilisée."
+
+#. type: Plain text
+#: ../scripts/debchange.1:68
+msgid ""
+"Two different sets of heuristics can be used, as controlled by the B<--"
+"release-heuristic> option or the B<DEBCHANGE_RELEASE_HEURISTIC> "
+"configuration variable. The default I<changelog> heuristic assumes the "
+"package has been released unless its changelog contains B<UNRELEASED> in the "
+"distribution field. If this heuristic is enabled then the distribution will "
+"default to B<UNRELEASED> in new changelog entries, and the B<--mainttrailer> "
+"option described below will be automatically enabled. This can be useful if "
+"a package can be released by different maintainers, or if you do not keep "
+"the upload logs. The alternate I<log> heuristic determines if a package has "
+"been released by looking for an appropriate B<dupload>(1) or B<dput>(1) log "
+"file in the parent directory. A warning will be issued if the log file is "
+"found but a successful upload is not recorded. This may be because the "
+"previous upload was performed with a version of B<dupload> prior to 2.1 or "
+"because the upload failed."
+msgstr ""
+"Deux différents types d'heuristiques peuvent être utilisés, contrôlés par "
+"l'option B<--release-heuristic> ou la variable de configuration "
+"B<DEBCHANGE_RELEASE_HEURISTIC>. L'heuristique par défaut (I<changelog>) "
+"suppose que le paquet a été distribué à moins que le journal des "
+"modifications ne contienne B<UNRELEASED> dans le champ de la distribution. "
+"Si cette heuristique est activée, la distribution sera modifiée en "
+"B<UNRELEASED> dans les nouvelles entrées du journal des modifications, et "
+"l'option B<--mainttrailer> décrite ci-dessous sera activée automatiquement. "
+"Cela peut être utile si un paquet peut être distribué par différents "
+"responsables, ou si vous ne voulez pas garder les journaux d'envoi. L'autre "
+"heuristique (I<log>) détermine si un paquet a été distribué en cherchant un "
+"journal B<dupload>(1) ou B<dput>(1) approprié. Un message d'alerte sera "
+"affiché si le fichier du journal est détecté mais qu'aucun envoi réussi n'y "
+"est enregistré. Cela peut arriver si l'envoi précédent a été exécuté avec "
+"une version de B<dupload> inférieure à 2.1 ou s'il a échoué."
+
+#. type: Plain text
+#: ../scripts/debchange.1:86
+msgid ""
+"If either B<--increment> or B<--newversion> is used, the name and email for "
+"the new version will be determined as follows. If the environment variable "
+"B<DEBFULLNAME> is set, this will be used for the maintainer full name; if "
+"not, then B<NAME> will be checked. If the environment variable B<DEBEMAIL> "
+"is set, this will be used for the email address. If this variable has the "
+"form \"name E<lt>emailE<gt>\", then the maintainer name will also be taken "
+"from here if neither B<DEBFULLNAME> nor B<NAME> is set. If this variable is "
+"not set, the same test is performed on the environment variable B<EMAIL>. "
+"Next, if the full name has still not been determined, then use "
+"B<getpwuid>(3) to determine the name from the password file. If this fails, "
+"use the previous changelog entry. For the email address, if it has not been "
+"set from B<DEBEMAIL> or B<EMAIL>, then look in I</etc/mailname>, then "
+"attempt to build it from the username and FQDN, otherwise use the email "
+"address in the previous changelog entry. In other words, it's a good idea "
+"to set B<DEBEMAIL> and B<DEBFULLNAME> when using this script."
+msgstr ""
+"Si les options B<--increment> ou B<--newversion> sont utilisées, le nom et "
+"l'adresse électronique pour la nouvelle version sont déterminés de la façon "
+"suivante. Si la variable d'environnement B<DEBFULLNAME> est définie, sa "
+"valeur est utilisée comme nom complet du responsable. Si la variable "
+"d'environnement B<DEBEMAIL> est définie, elle est utilisée comme adresse "
+"électronique. Si cette variable est de la forme \"nom E<lt>adresseE<gt>\", "
+"alors le nom est pris dans cette variable si la variable d'environnement "
+"B<DEBFULLNAME> n'est pas définie. Si cette variable d'environnement n'est "
+"pas définie, le même test est réalisé sur B<EMAIL>. Puis, si le nom complet "
+"n'est pas encore déterminé, B<getpwuid>(3) est utilisé pour déterminer le "
+"nom grâce au fichier des mots de passe. En cas d'échec, l'entrée précédente "
+"du fichier I<changelog> est utilisée. Pour l'adresse électronique, si elle "
+"n'a pas été déterminée avec B<DEBEMAIL> ou B<EMAIL>, I</etc/mailname> est "
+"utilisé, puis il tente de la construire à partir du nom d'utilisateur et du "
+"FQDN, sinon, l'adresse de l'entrée précédente du fichier I<changelog> est "
+"utilisée. Pour simplifier, il est préférable de définir les variables "
+"d'environnement B<DEBEMAIL> et B<DEBFULLNAME> lorsque ce script est utilisé."
+
+#. type: Plain text
+#: ../scripts/debchange.1:99
+msgid ""
+"Support is included for changelogs that record changes by multiple co-"
+"maintainers of a package. If an entry is appended to the current version's "
+"entries, and the maintainer is different from the maintainer who is listed "
+"as having done the previous entries, then lines will be added to the "
+"changelog to tell which maintainers made which changes. Currently only one "
+"of the several such styles of recording this information is supported, in "
+"which the name of the maintainer who made a set of changes appears on a line "
+"before the changes, inside square brackets. This can be switched on and off "
+"using the B<-->[B<no>]B<multimaint> option or the B<DEBCHANGE_MULTIMAINT> "
+"configuration file option; the default is to enable it. Note that if an "
+"entry has already been marked in this way, then this option will be silently "
+"ignored."
+msgstr ""
+"Les journaux de modification qui enregistrent les modifications des "
+"différents coresponsables d'un paquet sont gérés. Si une entrée est ajoutée "
+"à celles de la version actuelle et que le responsable est différent du "
+"responsable qui est mentionné comme ayant créé les entrées précédentes, "
+"alors des lignes seront ajoutées au journal pour indiquer le responsable "
+"ayant fait cette modification. Pour le moment, seul un des différents styles "
+"d'enregistrement de ces informations est géré, dans lequel le nom du "
+"responsable ayant fait quelques modifications apparaît sur une ligne avant "
+"les modifications, entre crochets. Cela peut-être activé ou désactivé en "
+"utilisant l'option B<-->[B<no>]B<multimaint> ou la variable de configuration "
+"B<DEBCHANGE_MULTIMAINT> ; le comportement par défaut est de l'activer. À "
+"noter : si une entrée a déjà été marquée dans ce but, alors cette option "
+"sera ignorée de façon silencieuse."
+
+#. type: Plain text
+#: ../scripts/debchange.1:105
+msgid ""
+"If the directory name of the source tree has the form I<package>-I<version>, "
+"then B<debchange> will also attempt to rename it if the (upstream) version "
+"number changes. This can be prevented by using the B<--preserve> command "
+"line or configuration file option as described below."
+msgstr ""
+"Si le nom du répertoire de l'arborescence des sources est sous la forme "
+"I<paquet>-I<version>, B<debchange> cherchera également à le renommer si le "
+"numéro de version (amont) change. Cela peut être empêché en utilisant "
+"l'option B<--preserve> en ligne de commande ou avec un paramètre du fichier "
+"de configuration, comme décrit ci-dessous."
+
+#. type: Plain text
+#: ../scripts/debchange.1:109
+msgid ""
+"If B<--force-bad-version> or B<--allow-lower-version> is used, B<debchange> "
+"will not stop if the new version is less than the current one. This is "
+"especially useful while doing backports."
+msgstr ""
+"Si B<--force-bad-version> ou B<--allow-lower-version> est utilisée, "
+"B<debchange> ne s'arrêtera pas si une nouvelle version est inférieure à la "
+"version actuelle. C'est particulièrement utile lors de la conception de "
+"rétroportages."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debchange.1:120
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debchange> will climb the directory tree until it finds a I<debian/"
+"changelog> file. As a safeguard against stray files causing potential "
+"problems, it will examine the name of the parent directory once it finds the "
+"I<debian/changelog> file, and check that the directory name corresponds to "
+"the package name. Precisely how it does this is controlled by two "
+"configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+"Comme certains autres scripts du paquet B<devscripts>, B<debchange> parcourt "
+"une arborescence de répertoires jusqu'à ce qu'il trouve un fichier I<debian/"
+"changelog>. Pour éviter les problèmes posés par les fichiers égarés, il "
+"examine le nom du répertoire parent une fois le fichier I<debian/changelog> "
+"trouvé, et vérifie que le nom du répertoire correspond au nom du paquet. La "
+"méthode précise utilisée est contrôlée par les deux variables du fichier de "
+"configuration B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> et "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, et les options en ligne de commande "
+"associées B<--check-dirname-level> et B<--check-dirname-regex>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:145
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a 'B</>', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'B<PACKAGE>', this will be replaced by the source package name, as "
+"determined from the changelog. The default value for the regex is: "
+"\\'B<PACKAGE(-.+)?>', thus matching directory names such as B<PACKAGE> and "
+"B<PACKAGE->I<version>."
+msgstr ""
+"Le nom du répertoire est vérifié en testant si le nom du répertoire actuel "
+"(donné par B<pwd>(1)) correspond à l'expression rationnelle donnée par la "
+"variable B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> du fichier de configuration ou "
+"par l'option B<--check-dirname-regex> I<regex>. Il s'agit d'une expression "
+"rationnelle Perl (voir B<perlre>(1)), qui sera ancrée à son début et à sa "
+"fin. Si elle contient un \"B</>\", alors elle doit correspondre au chemin "
+"complet. Si elle contient la chaîne \"B<PACKAGE>\", cette chaîne sera "
+"remplacée par le nom du paquet source déterminé par le fichier I<changelog>. "
+"La valeur par défaut de cette expression rationnelle est \"B<PACKAGE(-.+)?"
+">\", ce qui correspond aux répertoires nommés B<PACKAGE> ou B<PACKAGE-"
+">I<version>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:149
+msgid ""
+"The default changelog to be edited is I<debian/changelog>; however, this can "
+"be changed using the B<--changelog> or B<--news> options or the B<CHANGELOG> "
+"environment variable, as described below."
+msgstr ""
+"Le journal des modifications par défaut à éditer est I<debian/changelog> ; "
+"cependant, cela peut être changé en utilisant les options B<--changelog> ou "
+"B<--news>, ou la variable d'environnement B<CHANGELOG>, comme décrit plus "
+"bas."
+
+#. type: TP
+#: ../scripts/debchange.1:150
+#, no-wrap
+msgid "B<--append>, B<-a>"
+msgstr "B<--append>, B<-a>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:153
+msgid "Add a new changelog entry at the end of the current version's entries."
+msgstr ""
+"Ajouter une nouvelle entrée au fichier I<changelog> à la fin des entrées de "
+"la version actuelle."
+
+#. type: TP
+#: ../scripts/debchange.1:153
+#, no-wrap
+msgid "B<--increment>, B<-i>"
+msgstr "B<--increment>, B<-i>"
+
+# NOTE: signature
+#. type: Plain text
+#: ../scripts/debchange.1:166
+msgid ""
+"Increment either the final component of the Debian release number or, if "
+"this is a native Debian package, the version number. On Ubuntu or Tanglu, "
+"this will also change the suffix from buildX to ubuntu1/tanglu1. Use B<-R>, "
+"B<--rebuild> for a no change rebuild increment. This creates a new section "
+"at the beginning of the changelog with appropriate headers and footers. "
+"Also, if this is a new version of a native Debian package, the directory "
+"name is changed to reflect this. If B<DEBCHANGE_RELEASE_HEURISTIC> is "
+"I<changelog> (default) and the current release is I<UNRELEASED>, this will "
+"only change the version of the current changelog stanza. Otherwise, this "
+"will create a new changelog stanza with the new version."
+msgstr ""
+"Incrémenter le numéro de version Debian ou, dans le cas d'un paquet Debian "
+"natif, le numéro de version. Sur Ubuntu ou Tanglu, cela modifiera aussi le "
+"suffixe buildX en ubuntu1 ou tanglu1. Utiliser B<-R>, B<--rebuild> pour un "
+"incrément de reconstruction sans modification. Cela crée une nouvelle "
+"section au début du journal de modifications avec le bon en-tête et la "
+"signature. De plus, dans le cas d'une nouvelle version d'un paquet natif "
+"Debian, le nom du répertoire est modifié de manière à refléter ce changement "
+"de version. Si B<DEBCHANGE_RELEASE_HEURISTIC> est I<changelog> (par défaut) "
+"et que la version actuelle est I<UNRELEASED>, cela ne modifiera que la "
+"version du paragraphe actuel du journal de modifications. Sinon, cela créera "
+"un nouveau paragraphe du journal de modifications avec la nouvelle version."
+
+#. type: TP
+#: ../scripts/debchange.1:166
+#, no-wrap
+msgid "B<--newversion >I<version>, B<-v >I<version>"
+msgstr "B<--newversion >I<version>, B<-v >I<version>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:176
+msgid ""
+"This specifies the version number (including the Debian release part) "
+"explicitly and behaves as the B<--increment> option in other respects. It "
+"will also change the directory name if the upstream version number has "
+"changed. If B<DEBCHANGE_RELEASE_HEURISTIC> is I<changelog> (default) and "
+"the current release is I<UNRELEASED>, this will only change the version of "
+"the current changelog stanza. Otherwise, this will create a new changelog "
+"stanza with the new version."
+msgstr ""
+"Indiquer explicitement le numéro de version (avec la partie relative à la "
+"version Debian). Cette option se comporte comme l'option B<--increment> pour "
+"les autres aspects. Le nom du répertoire sera également modifié si le numéro "
+"de version amont a changé. Si B<DEBCHANGE_RELEASE_HEURISTIC> est "
+"I<changelog> (par défaut) et que la version actuelle est I<UNRELEASED>, cela "
+"ne modifiera que la version du paragraphe actuel du journal de "
+"modifications. Sinon, cela créera un nouveau paragraphe du journal de "
+"modifications avec la nouvelle version."
+
+#. type: TP
+#: ../scripts/debchange.1:176
+#, no-wrap
+msgid "B<--edit>, B<-e>"
+msgstr "B<--edit>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:179
+msgid "Edit the changelog in an editor."
+msgstr "Éditer le journal des modifications dans un éditeur."
+
+#. type: TP
+#: ../scripts/debchange.1:179
+#, no-wrap
+msgid "B<--release>, B<-r>"
+msgstr "B<--release>, B<-r>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:188
+msgid ""
+"Finalize the changelog for a release. Update the changelog timestamp. If "
+"the distribution is set to B<UNRELEASED>, change it to the distribution from "
+"the previous changelog entry (or another distribution as specified by B<--"
+"distribution>). If there are no previous changelog entries and an explicit "
+"distribution has not been specified, B<unstable> will be used (or the name "
+"of the current development release when run under Ubuntu)."
+msgstr ""
+"Finaliser le fichier I<changelog> pour un envoi. Cela met à jour "
+"l'horodatage du fichier I<changelog>. Si la distribution vaut I<UNRELEASED>, "
+"elle prend la valeur de l'entrée précédente du fichier (ou de la "
+"distribution indiquée par l'option B<--distribution>). S'il n'y a pas "
+"d'entrée précédente, et qu'aucune distribution n'a été indiquée "
+"explicitement, la distribution sera B<unstable> (ou le nom de la version en "
+"cours de développement lorsqu'utilisé avec Ubuntu)."
+
+#. type: TP
+#: ../scripts/debchange.1:188
+#, no-wrap
+msgid "B<--force-save-on-release>"
+msgstr "B<--force-save-on-release>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:193
+msgid ""
+"When B<--release> is used, an editor is opened to allow inspection of the "
+"changelog. The user is required to save the file to accept the modified "
+"changelog, otherwise the original will be kept (default)."
+msgstr ""
+"Quand l'option B<--release> est utilisée, un éditeur est ouvert pour "
+"permettre de vérifier le journal des modifications. L'utilisateur doit "
+"enregistrer le journal de modifications pour accepter les modifications du "
+"fichier, sinon l'original sera conservé (option par défaut)."
+
+#. type: TP
+#: ../scripts/debchange.1:193
+#, no-wrap
+msgid "B<--no-force-save-on-release>"
+msgstr "B<--no-force-save-on-release>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:199
+msgid ""
+"Do not do so. Note that a dummy changelog entry may be supplied in order to "
+"achieve the same effect - e.g. B<debchange --release \"\">. The entry will "
+"not be added to the changelog but its presence will suppress the editor."
+msgstr ""
+"Inverse de B<--force-save-on-release>. Remarquez qu'une fausse entrée de "
+"journal peut être fournie pour obtenir le même résultat - par exemple avec "
+"B<debchange --release \"\">. L'entrée ne sera pas ajoutée au journal des "
+"modifications, mais sa présence évite l'ouverture de l'éditeur."
+
+#. type: Plain text
+#: ../scripts/debchange.1:211
+msgid ""
+"This will create a new I<debian/changelog> file (or I<NEWS> if the B<--news> "
+"option is used). You must be in the top-level directory to use this; no "
+"directory name checking will be performed. The package name and version can "
+"either be specified using the B<--package> and B<--newversion> options, "
+"determined from the directory name using the B<--fromdirname> option or "
+"entered manually into the generated I<changelog> file. The maintainer name "
+"is determined from the environment if this is possible, and the distribution "
+"is specified either using the B<--distribution> option or in the generated "
+"I<changelog> file."
+msgstr ""
+"Cela créera un nouveau fichier I<debian/changelog> (ou I<debian/NEWS> si "
+"l'option B<--news> est utilisée). Vous devez être dans le répertoire de plus "
+"haut niveau pour l'utiliser ; aucune vérification sur le nom du répertoire "
+"ne sera faite. Le nom du paquet et sa version peuvent être indiqués en "
+"utilisant les options B<--package> et B<--newversion>, déterminés grâce au "
+"nom du répertoire en utilisant l'option B<--fromdirname> ou entrés "
+"manuellement dans le fichier I<changelog> créé. Le nom du responsable est "
+"déterminé grâce aux variables d'environnement si cela est possible, et la "
+"distribution est indiquée soit en utilisant l'option B<--distribution> soit "
+"dans le fichier I<changelog> créé."
+
+#. type: TP
+#: ../scripts/debchange.1:211
+#, no-wrap
+msgid "B<--empty>"
+msgstr "B<--empty>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:218
+msgid ""
+"When used in combination with B<--create>, suppress the automatic addition "
+"of an \"B<initial release>\" changelog entry (so that the next invocation of "
+"B<debchange> adds the first entry). Note that this will cause a B<dpkg-"
+"parsechangelog> warning on the next invocation due to the lack of changes."
+msgstr ""
+"Quand elle est utilisée avec l'option B<--create>, elle permet de supprimer "
+"l'ajout automatique d'une entrée \"B<initial release>\" (de telle sorte que "
+"le prochain appel à B<debchange> ajoutera la première entrée). Remarquez que "
+"B<dpkg-parsechangelog> produira des avertissements du fait de l'absence de "
+"description de modifications."
+
+#. type: =item
+#: ../scripts/debchange.1:218 ../scripts/mk-origtargz.pl:72
+#: ../scripts/uscan.pl:1683
+#, no-wrap
+msgid "B<--package> I<package>"
+msgstr "B<--package> I<paquet>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:223
+msgid ""
+"This specifies the package name to be used in the new changelog; this may "
+"only be used in conjunction with the B<--create>, B<--increment> and B<--"
+"newversion> options."
+msgstr ""
+"Indiquer le nom du paquet qui devra être utilisé dans le nouveau journal des "
+"modifications ; doit être utilisé seulement en conjonction avec les options "
+"B<--create>, B<--increment>, et B<--newversion>."
+
+#. type: TP
+#: ../scripts/debchange.1:223
+#, no-wrap
+msgid "B<--nmu>, B<-n>"
+msgstr "B<--nmu>, B<-n>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:232
+msgid ""
+"Increment the Debian release number for a non-maintainer upload by either "
+"appending a \"B<.1>\" to a non-NMU version number (unless the package is "
+"Debian native, in which case \"B<+nmu1>\" is appended) or by incrementing an "
+"NMU version number, and add an NMU changelog comment. This happens "
+"automatically if the packager is neither in the B<Maintainer> nor the "
+"B<Uploaders> field in I<debian/control>, unless B<DEBCHANGE_AUTO_NMU> is set "
+"to I<no> or the B<--no-auto-nmu> option is used."
+msgstr ""
+"Incrémenter le numéro de version Debian pour un envoi d'un non-responsable "
+"soit en ajoutant \"B<.1>\" à une version non-NMU (à moins qu'il s'agisse "
+"d'un paquet Debian natif, auquel cas \"B<+nmu1>\" est ajouté), soit en "
+"incrémentant un numéro de NMU et ajouter un commentaire NMU au journal des "
+"modifications. Cela se produit automatiquement si l'auteur du paquet n'est "
+"pas dans les champs B<Maintainer> ou B<Uploaders> de I<debian/control>, à "
+"moins que B<DEBCHANGE_AUTO_NMU> soit définie à I<no> ou que l'option B<--no-"
+"auto-nmu> soit utilisée."
+
+#. type: TP
+#: ../scripts/debchange.1:232
+#, no-wrap
+msgid "B<--bin-nmu>"
+msgstr "B<--bin-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:237
+msgid ""
+"Increment the Debian release number for a binary non-maintainer upload by "
+"either appending a \"B<+b1>\" to a non-binNMU version number or by "
+"incrementing a binNMU version number, and add a binNMU changelog comment."
+msgstr ""
+"Incrémenter le numéro de version Debian pour un envoi binaire d'un non-"
+"responsable soit en ajoutant \"B<+b1>\" à une version non-binNMU soit en "
+"incrémentant un numéro de binNMU, et ajouter un commentaire \"binNMU\" dans "
+"le journal des modifications."
+
+#. type: TP
+#: ../scripts/debchange.1:237
+#, no-wrap
+msgid "B<--qa>, B<-q>"
+msgstr "B<--qa>, B<-q>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:241
+msgid ""
+"Increment the Debian release number for a Debian QA Team upload, and add a "
+"B<QA upload> changelog comment."
+msgstr ""
+"Incrémenter le numéro de publication de Debian pour un envoi par l'équipe QA "
+"de Debian, et ajouter un commentaire \"B<QA upload>\" dans le journal des "
+"modifications."
+
+#. type: TP
+#: ../scripts/debchange.1:241
+#, no-wrap
+msgid "B<--rebuild>, B<-R>"
+msgstr "B<--rebuild>, B<-R>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:245
+msgid ""
+"Increment the Debian release number for a no-change rebuild by appending a "
+"\"build1\" or by incrementing a rebuild version number."
+msgstr ""
+"Incrémente le numéro de version Debian pour une reconstruction sans "
+"modification en ajoutant \"build1\" ou en incrémentant un numéro de "
+"reconstruction."
+
+#. type: TP
+#: ../scripts/debchange.1:245
+#, no-wrap
+msgid "B<--security>, B<-s>"
+msgstr "B<--security>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:249
+msgid ""
+"Increment the Debian release number for a Debian Security Team non-"
+"maintainer upload, and add a B<Security Team upload> changelog comment."
+msgstr ""
+"Incrémenter le numéro de publication de Debian pour un envoi par l'équipe "
+"Sécurité de Debian, et ajouter un commentaire \"B<Security Team upload>\" "
+"dans le journal des modifications."
+
+#. type: TP
+#: ../scripts/debchange.1:249
+#, no-wrap
+msgid "B<--lts>"
+msgstr "B<--lts>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:253
+msgid ""
+"Increment the Debian release number for a LTS Security Team non-maintainer "
+"upload, and add a B<LTS Security Team upload> changelog comment."
+msgstr ""
+"Incrémenter le numéro de publication de Debian pour un envoi d'un non-"
+"responsable de l'équipe Sécurité de Debian LTS, et ajouter un commentaire "
+"\"B<LTS Security Team upload>\" dans le journal des modifications."
+
+#. type: TP
+#: ../scripts/debchange.1:253
+#, no-wrap
+msgid "B<--team>"
+msgstr "B<--team>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:257
+msgid ""
+"Increment the Debian release number for a team upload, and add a B<Team "
+"upload> changelog comment."
+msgstr ""
+"Incrémenter le numéro de publication de Debian pour un envoi par l'équipe, "
+"et ajouter un commentaire \"B<Team upload>\" dans le journal des "
+"modifications."
+
+#. type: TP
+#: ../scripts/debchange.1:257
+#, no-wrap
+msgid "B<--upstream>, B<-U>"
+msgstr "B<--upstream>, B<-U>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:261
+msgid ""
+"Don't append B<distro-name1> to the version on a derived distribution. "
+"Increment the Debian version."
+msgstr ""
+"Ne pas ajouter I<nom-de-distribution1> à la version d'une distribution "
+"dérivée. Incrémenter le numéro de publication de Debian."
+
+#. type: TP
+#: ../scripts/debchange.1:261
+#, no-wrap
+msgid "B<--bpo>"
+msgstr "B<--bpo>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:265
+msgid ""
+"Increment the Debian release number for an upload to bullseye-backports, and "
+"add a backport upload changelog comment."
+msgstr ""
+"Incrémenter le numéro de publication de Debian pour un envoi dans bullseye-"
+"backports, et ajouter un commentaire pour l'envoi du rétroportage dans le "
+"journal des modifications."
+
+#. type: TP
+#: ../scripts/debchange.1:265
+#, no-wrap
+msgid "B<--stable>"
+msgstr "B<--stable>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:269
+msgid ""
+"Increment the Debian release number for an upload to the current stable "
+"release."
+msgstr ""
+"Incrémenter le numéro de publication de Debian pour un envoi pour la "
+"publication stable actuelle."
+
+#. type: TP
+#: ../scripts/debchange.1:269
+#, no-wrap
+msgid "B<--local>, B<-l>I<suffix>"
+msgstr "B<--local>, B<-l>I<suffixe>"
+
+# NOTE: space
+#. type: Plain text
+#: ../scripts/debchange.1:272
+#, no-wrap
+msgid " Add a suffix to the Debian version number for a local build.\n"
+msgstr " Ajouter un I<suffixe> au numéro de version Debian pour une construction locale.\n"
+
+#. type: TP
+#: ../scripts/debchange.1:272
+#, no-wrap
+msgid "B<--force-bad-version>, B<-b>"
+msgstr "B<--force-bad-version>, B<-b>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:276 ../scripts/uupdate.1:66
+msgid ""
+"Force a version number to be less than the current one (e.g., when "
+"backporting)."
+msgstr ""
+"Forcer un numéro de version à être moins élevé que le numéro de version "
+"actuel (comme c'est le cas par exemple dans le cas d'un rétroportage)."
+
+#. type: TP
+#: ../scripts/debchange.1:276
+#, no-wrap
+msgid "B<--allow-lower-version >I<pattern>"
+msgstr "B<--allow-lower-version >I<modèle>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:280
+msgid ""
+"Allow a version number to be less than the current one if the new version "
+"matches the specified pattern."
+msgstr ""
+"Permettre à un numéro de version d'être inférieur à la version en cours si "
+"la nouvelle version satisfait le modèle indiqué."
+
+#. type: TP
+#: ../scripts/debchange.1:280
+#, no-wrap
+msgid "B<--force-distribution>"
+msgstr "B<--force-distribution>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:284
+msgid ""
+"Force the provided distribution to be used, even if it doesn't match the "
+"list of known distributions (e.g. for unofficial distributions)."
+msgstr ""
+"Forcer l'utilisation de la distribution indiquée, même si elle ne correspond "
+"à aucune distribution connue (par exemple pour une distribution non "
+"officielle)."
+
+#. type: TP
+#: ../scripts/debchange.1:284
+#, no-wrap
+msgid "B<--auto-nmu>"
+msgstr "B<--auto-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:288
+msgid ""
+"Attempt to automatically determine whether a change to the changelog "
+"represents a Non Maintainer Upload. This is the default."
+msgstr ""
+"Essayer de déterminer automatiquement si une modification dans le journal "
+"des modifications correspond à une NMU (mise à jour indépendante ou \"Non "
+"Maintainer Upload\"). Il s'agit du comportement par défaut."
+
+#. type: TP
+#: ../scripts/debchange.1:288
+#, no-wrap
+msgid "B<--no-auto-nmu>"
+msgstr "B<--no-auto-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:292
+msgid ""
+"Disable automatic NMU detection. Equivalent to setting "
+"B<DEBCHANGE_AUTO_NMU> to I<no>."
+msgstr ""
+"Désactiver la détection automatique des NMU. C'est équivalent à configurer "
+"B<DEBCHANGE_AUTO_NMU> avec la valeur I<no>."
+
+#. type: TP
+#: ../scripts/debchange.1:292
+#, no-wrap
+msgid "B<--fromdirname>, B<-d>"
+msgstr "B<--fromdirname>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:302
+msgid ""
+"This will take the upstream version number from the directory name, which "
+"should be of the form I<package>B<->I<version>. If the upstream version "
+"number has increased from the most recent changelog entry, then a new entry "
+"will be made with version number I<version>B<-1> (or I<version> if the "
+"package is Debian native), with the same epoch as the previous package "
+"version. If the upstream version number is the same, this option will "
+"behave in the same way as B<-i>."
+msgstr ""
+"Déterminer le numéro de version amont à partir du nom du répertoire, qui "
+"devra être de la forme I<paquet>-I<version>. Si le numéro de version amont a "
+"augmenté depuis l'entrée la plus récente du fichier I<changelog>, la "
+"nouvelle entrée sera ajoutée avec pour numéro de version I<version>B<-1> (ou "
+"I<version> dans le cas d'un paquet Debian natif), avec le même temps absolu "
+"(\"epoch\") que le paquet précédent. Si le numéro de version amont est le "
+"même, cette option se comporte de la même façon que B<-i>."
+
+#. type: TP
+#: ../scripts/debchange.1:302
+#, no-wrap
+msgid "B<--closes>I< nnnnn>[B<,>I<nnnnn >...]"
+msgstr "B<--closes> I<nnnnn>[B<,>I<nnnnn> ...]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:308
+msgid ""
+"Add changelog entries to close the specified bug numbers. Also invoke the "
+"editor after adding these entries. Will generate warnings if the BTS cannot "
+"be contacted (and B<--noquery> has not been specified), or if there are "
+"problems with the bug report located."
+msgstr ""
+"Ajouter des entrées au fichier I<changelog> pour fermer les bogues indiqués. "
+"Un éditeur est également lancé après avoir ajouté ces entrées. Il produira "
+"des avertissements si le BTS ne peut pas être contacté (et que l'option B<--"
+"noquery> n'a pas été utilisée) ou s'il y a un problème avec un rapport de "
+"bogue."
+
+#. type: TP
+#: ../scripts/debchange.1:308
+#, no-wrap
+msgid "B<-->[B<no>]B<query>"
+msgstr "B<-->[B<no>]B<query>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:311
+msgid "Should we attempt to query the BTS when generating closes entries?"
+msgstr "Doit-on interroger le BTS lorsqu'une fermeture de bogue est produite ?"
+
+#. type: TP
+#: ../scripts/debchange.1:311
+#, no-wrap
+msgid "B<--preserve>, B<-p>"
+msgstr "B<--preserve>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:316
+msgid ""
+"Preserve the source tree directory name if the upstream version number (or "
+"the version number of a Debian native package) changes. See also the "
+"configuration variables section below."
+msgstr ""
+"Conserver le nom du répertoire de l'architecture source si le numéro de "
+"version amont (ou le numéro de version d'un paquet Debian natif) change. "
+"Veuillez également consulter la section sur les variables de configuration "
+"ci-dessous."
+
+#. type: TP
+#: ../scripts/debchange.1:316
+#, no-wrap
+msgid "B<--no-preserve>, B<--nopreserve>"
+msgstr "B<--no-preserve>, B<--nopreserve>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:319
+msgid "Do not preserve the source tree directory name (default)."
+msgstr ""
+"Ne pas conserver le nom du répertoire de l'arborescence des sources "
+"(comportement par défaut)."
+
+#. type: TP
+#: ../scripts/debchange.1:319
+#, no-wrap
+msgid "B<--vendor >I<vendor>"
+msgstr "B<--vendor> I<éditeur>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:324
+msgid ""
+"Override the distributor ID over the default returned by dpkg-vendor. This "
+"name is used for heuristics applied to new package versions and for sanity "
+"checking of the target distribution."
+msgstr ""
+"Écraser l'identifiant de distributeur dont la valeur par défaut est renvoyée "
+"par B<dpkg-vendor>. Ce nom est utilisé pour les heuristiques appliquées aux "
+"nouvelles versions de paquet et aux vérifications de distribution cible."
+
+#. type: TP
+#: ../scripts/debchange.1:324
+#, no-wrap
+msgid "B<--distribution >I<dist>, B<-D >I<dist>"
+msgstr "B<--distribution >I<dist>, B<-D >I<dist>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:329
+msgid ""
+"Use the specified distribution in the changelog entry being edited, instead "
+"of using the previous changelog entry's distribution for new entries or the "
+"existing value for existing entries."
+msgstr ""
+"Utiliser la distribution indiquée dans la nouvelle entrée du fichier "
+"I<changelog> au lieu d'utiliser la distribution de la dernière entrée ou de "
+"l'entrée en cours d'édition."
+
+#. type: TP
+#: ../scripts/debchange.1:329
+#, no-wrap
+msgid "B<--urgency >I<urgency>, B<-u >I<urgency>"
+msgstr "B<--urgency> I<urgence>, B<-u> I<urgence>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:334
+msgid ""
+"Use the specified urgency in the changelog entry being edited, instead of "
+"using the default \"B<medium>\" for new entries or the existing value for "
+"existing entries."
+msgstr ""
+"Utiliser le niveau d'urgence indiqué dans la nouvelle entrée du fichier "
+"I<changelog>, s'il y en a une, au lieu du niveau d'urgence moyen "
+"(\"B<medium>\") par défaut ou de la valeur actuelle pour les entrées "
+"existantes."
+
+#. type: TP
+#: ../scripts/debchange.1:334
+#, no-wrap
+msgid "B<--changelog >I<file>, B<-c >I<file>"
+msgstr "B<--changelog >I<fichier>, B<-c >I<fichier>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:340
+msgid ""
+"This will edit the changelog I<file> instead of the standard I<debian/"
+"changelog>. This option overrides any B<CHANGELOG> environment variable "
+"setting. Also, no directory traversing or checking will be performed when "
+"this option is used."
+msgstr ""
+"Éditer le journal des modifications I<fichier> au lieu de I<debian/"
+"changelog>. Cette option remplace la valeur définie par la variable "
+"d'environnement B<CHANGELOG>. De plus, aucune traversée ou contrôle de "
+"répertoire ne sera fait quand cette option est utilisée."
+
+#. type: TP
+#: ../scripts/debchange.1:340
+#, no-wrap
+msgid "B<--news> [I<newsfile>]"
+msgstr "B<--news> [I<newsfile>]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:346
+msgid ""
+"This will edit I<newsfile> (by default, I<debian/NEWS>) instead of the "
+"regular changelog. Directory searching will be performed. The changelog "
+"will be examined in order to determine the current package version."
+msgstr ""
+"Éditer I<newsfile> (I<debian/NEWS> par défaut) au lieu du journal des "
+"modifications. Une recherche sur le répertoire sera faite. Le journal des "
+"modifications sera analysé pour déterminer la version actuelle du paquet."
+
+#. type: TP
+#: ../scripts/debchange.1:346
+#, no-wrap
+msgid "B<-->[B<no>]B<multimaint>"
+msgstr "B<-->[B<no>]B<multimaint>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:351
+msgid ""
+"Should we indicate that parts of a changelog entry have been made by "
+"different maintainers? Default is yes; see the discussion above and also the "
+"B<DEBCHANGE_MULTIMAINT> configuration file option below."
+msgstr ""
+"Préciser s'il faut indiquer que les différents points du journal des "
+"modifications sont l'œuvre de différents responsables. L'option par défaut "
+"est B<--multimaint>. Veuillez consulter la discussion ci-dessus ainsi que "
+"les explications ci-dessous à propos de la variable B<DEBCHANGE_MULTIMAINT> "
+"du fichier de configuration."
+
+#. type: TP
+#: ../scripts/debchange.1:351
+#, no-wrap
+msgid "B<-->[B<no>]B<multimaint-merge>"
+msgstr "B<-->[B<no>]B<multimaint-merge>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:356
+msgid ""
+"Should all changes made by the same author be merged into the same changelog "
+"section? Default is no; see the discussion above and also the "
+"B<DEBCHANGE_MULTIMAINT_MERGE> configuration file option below."
+msgstr ""
+"Préciser si toutes les modifications réalisées par le même auteur doivent "
+"être fusionnées dans la même section du journal des modifications. L'option "
+"par défaut est B<--nomultimaint-merge>. Veuillez consulter la discussion ci-"
+"dessus ainsi que les explications ci-dessous à propos de la variable "
+"B<DEBCHANGE_MULTIMAINT_MERGE> du fichier de configuration."
+
+#. type: TP
+#: ../scripts/debchange.1:356
+#, no-wrap
+msgid "B<--maintmaint>, B<-m>"
+msgstr "B<--maintmaint>, B<-m>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:364
+msgid ""
+"Do not modify the maintainer details previously listed in the changelog. "
+"This is useful particularly for sponsors wanting to automatically add a "
+"sponsorship message without disrupting the other changelog details. Note "
+"that there may be some interesting interactions if multi-maintainer mode is "
+"in use; you will probably wish to check the changelog manually before "
+"uploading it in such cases."
+msgstr ""
+"Ne pas modifier les informations sur le responsable listées précédemment "
+"dans le journal des modifications. C'est particulièrement utile pour les "
+"parrains qui souhaitent ajouter un message automatiquement sans perturber "
+"les informations du journal des modifications. Remarquez qu'il peut y avoir "
+"des interactions intéressantes quand le mode multiresponsable est utilisé : "
+"vous voudrez probablement vérifier le journal des modifications manuellement "
+"avant d'envoyer le paquet à l'archive dans ce cas."
+
+#. type: TP
+#: ../scripts/debchange.1:364
+#, no-wrap
+msgid "B<--controlmaint>, B<-M>"
+msgstr "B<--controlmaint>, B<-M>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:372
+msgid ""
+"Use maintainer details from the I<debian/control> B<Maintainer> field rather "
+"than relevant environment variables (B<DEBFULLNAME>, B<DEBEMAIL>, etc.). "
+"This option might be useful to restore details of the main maintainer in the "
+"changelog trailer after a bogus edit (e.g. when B<-m> was intended but "
+"forgot) or when releasing a package in the name of the main maintainer (e.g. "
+"the team)."
+msgstr ""
+"Utiliser les données du champ B<Maintainer> du fichier I<debian/control> "
+"plutôt que les variables d'environnements habituelles (B<DEBFULLNAME>, "
+"B<DEBEMAIL>, etc.). Cette option peut servir à rétablir les données du "
+"responsable principal dans la dernière ligne de l'entrée du journal de "
+"modifications après un problème d'édition (par exemple quand on voulait "
+"utiliser l'option B<-m> et qu'on a oublié) ou lors de la publication d'un "
+"paquet au nom du responsable principal (par exemple l'équipe)."
+
+#. type: TP
+#: ../scripts/debchange.1:372
+#, no-wrap
+msgid "B<-->[B<no>]B<mainttrailer>, B<-t>"
+msgstr "B<-->[B<no>]B<mainttrailer>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:382
+msgid ""
+"If B<mainttrailer> is set, it will avoid modifying the existing changelog "
+"trailer line (i.e. the maintainer and date-stamp details), unless used with "
+"options that require the trailer to be modified (e.g. B<--create>, B<--"
+"release>, B<-i>, B<--qa>, etc.) This option differs from B<--maintmaint> in "
+"that it will use multi-maintainer mode if appropriate, with the exception of "
+"editing the trailer. See also the B<DEBCHANGE_MAINTTRAILER> configuration "
+"file option below."
+msgstr ""
+"Si l'option B<mainttrailer> est activée, elle évitera la modification de la "
+"ligne de fin des entrées du journal des modifications (c'est-à-dire les "
+"détails sur le responsable et l'horodatage), à moins qu'une option qui "
+"nécessite la modification de cette ligne de fin soit utilisée (par exemple, "
+"B<--create>, B<--release>, B<-i>, B<--qa>, etc.). Cette option diffère de "
+"B<--maintmaint> puisque le mode multiresponsable sera utilisé s'il se "
+"justifie, à l'exception de l'édition de la ligne de fin. Consultez aussi "
+"l'option du fichier de configuration B<DEBCHANGE_MAINTTRAILER> ci-dessous."
+
+#. type: Plain text
+#: ../scripts/debchange.1:386 ../scripts/debchange.1:390
+msgid ""
+"See the above section \"B<Directory name checking>\" for an explanation of "
+"this option."
+msgstr ""
+"Veuillez consulter la section ci-dessus \"B<Vérification du nom du "
+"répertoire>\" pour une explication de cette option."
+
+#. type: TP
+#: ../scripts/debchange.1:394
+#, no-wrap
+msgid "B<--release-heuristic> I<log>|I<changelog>"
+msgstr "B<--release-heuristic> I<log>|I<changelog>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:399
+msgid ""
+"Controls how B<debchange> determines if a package has been released, when "
+"deciding whether to create a new changelog entry or append to an existing "
+"changelog entry."
+msgstr ""
+"Contrôler comment B<debchange> détermine si le paquet a été distribué, pour "
+"décider s'il faut créer une nouvelle entrée ou rajouter dans une entrée "
+"existante du journal des modifications."
+
+#. type: Plain text
+#: ../scripts/debchange.1:405 ../scripts/debclean.1:93
+#: ../scripts/debrelease.1:105 ../scripts/debsign.1:105
+#: ../scripts/dep3changelog.1:22 ../scripts/dscverify.1:43
+#: ../scripts/nmudiff.1:92 ../scripts/pts-subscribe.1:34
+#: ../scripts/uupdate.1:107 ../scripts/who-uploads.1:51
+msgid "Display version and copyright information and exit successfully."
+msgstr "Afficher la version et le copyright, puis quitter avec succès."
+
+#. type: TP
+#: ../scripts/debchange.1:411
+#, no-wrap
+msgid "B<DEBCHANGE_PRESERVE>"
+msgstr "B<DEBCHANGE_PRESERVE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:415
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve> command "
+"line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--preserve>."
+
+#. type: TP
+#: ../scripts/debchange.1:415
+#, no-wrap
+msgid "B<DEBCHANGE_QUERY_BTS>"
+msgstr "B<DEBCHANGE_QUERY_BTS>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:419
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--noquery> command "
+"line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<no> équivaut à utiliser l'option B<--noquery>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:426
+msgid ""
+"See the above section \"B<Directory name checking>\" for an explanation of "
+"these variables. Note that these are package-wide configuration variables, "
+"and will therefore affect all B<devscripts> scripts which check their value, "
+"as described in their respective manpages and in B<devscripts.conf>(5)."
+msgstr ""
+"Veuillez consulter la section \"B<Vérification du nom du répertoire>\" ci-"
+"dessus pour une explication de ces variables. Remarquez que ce sont des "
+"variables de configuration pour tous les outils du paquet B<devscripts> ; "
+"elles impacteront tous les scripts qui les utilisent, comme indiqué dans "
+"leurs pages de manuel respectives et dans B<devscripts.conf>(5)."
+
+#. type: TP
+#: ../scripts/debchange.1:426
+#, no-wrap
+msgid "B<DEBCHANGE_RELEASE_HEURISTIC>"
+msgstr "B<DEBCHANGE_RELEASE_HEURISTIC>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:431
+msgid ""
+"Controls how B<debchange> determines if a package has been released, when "
+"deciding whether to create a new changelog entry or append to an existing "
+"changelog entry. Can be either I<log> or I<changelog>."
+msgstr ""
+"Contrôle comment B<debchange> détermine si le paquet a été distribué, pour "
+"décider s'il faut créer une nouvelle entrée ou rajouter dans une entrée "
+"existante du journal des modifications. Peut être soit I<log> soit "
+"I<changelog>."
+
+#. type: TP
+#: ../scripts/debchange.1:431
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT>"
+msgstr "B<DEBCHANGE_MULTIMAINT>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:436
+msgid ""
+"If set to I<no>, B<debchange> will not introduce multiple-maintainer "
+"distinctions when a different maintainer appends an entry to an existing "
+"changelog. See the discussion above. Default is I<yes>."
+msgstr ""
+"Si elle est définie à I<no>, B<debchange> n'introduira pas de distinction "
+"multiresponsable lorsqu'un responsable différent ajoutera une entrée à un "
+"journal des modifications existant. Regardez la discussion ci-dessus. La "
+"valeur par défaut est I<yes>."
+
+#. type: TP
+#: ../scripts/debchange.1:436
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT_MERGE>"
+msgstr "B<DEBCHANGE_MULTIMAINT_MERGE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:442
+msgid ""
+"If set to I<yes>, when adding changes in multiple-maintainer mode "
+"B<debchange> will check whether previous changes by the current maintainer "
+"exist and add the new changes to the existing block rather than creating a "
+"new block. Default is I<no>."
+msgstr ""
+"Si elle est définie à I<yes>, lors de l'ajout de modifications en mode "
+"multiresponsable, B<debchange> vérifiera si des modifications précédentes "
+"ont été réalisées par le responsable actuel et ajoutera les modifications au "
+"bloc existant plutôt que de créer un nouveau bloc. La valeur par défaut est "
+"I<no>."
+
+#. type: TP
+#: ../scripts/debchange.1:442
+#, no-wrap
+msgid "B<DEBCHANGE_MAINTTRAILER>"
+msgstr "B<DEBCHANGE_MAINTTRAILER>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:446
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--nomainttrailer> "
+"command line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<no> équivaut à utiliser l'option B<--"
+"nomainttrailer>."
+
+#. type: TP
+#: ../scripts/debchange.1:446
+#, no-wrap
+msgid "B<DEBCHANGE_TZ>"
+msgstr "B<DEBCHANGE_TZ>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:450
+msgid ""
+"Use this timezone for changelog entries. Default is the user/system "
+"timezone as shown by `B<date -R>` and affected by the environment variable "
+"B<TZ>."
+msgstr ""
+"Utiliser ce fuseau horaire pour les entrées de journal des modifications. "
+"Par défaut, le fuseau horaire de l'utilisateur sur le système est utilisé, "
+"comme avec \"B<date -R>\" avec prise en compte de la variable "
+"d'environnement TZ."
+
+#. type: TP
+#: ../scripts/debchange.1:450
+#, no-wrap
+msgid "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+msgstr "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:454
+msgid ""
+"If this is set, then it is the same as the B<--allow-lower-version> command "
+"line parameter being used."
+msgstr ""
+"Lui attribuer une valeur équivaut à utiliser cette valeur avec l'option B<--"
+"allow-lower-version> sur la ligne de commande."
+
+#. type: TP
+#: ../scripts/debchange.1:454
+#, no-wrap
+msgid "B<DEBCHANGE_AUTO_NMU>"
+msgstr "B<DEBCHANGE_AUTO_NMU>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:460
+msgid ""
+"If this is set to I<no> then B<debchange> will not attempt to automatically "
+"determine whether the current changelog stanza represents an NMU. The "
+"default is I<yes>. See the discussion of the B<--nmu> option above."
+msgstr ""
+"Si elle est définie à I<no> alors B<debchanges> n'essaiera pas de déterminer "
+"automatiquement si la modification en cours représente une NMU. La valeur "
+"par défaut est I<yes>. Consultez la discussion sur l'option B<--nmu> ci-"
+"dessus."
+
+#. type: TP
+#: ../scripts/debchange.1:460
+#, no-wrap
+msgid "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+msgstr "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:464
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-force-save-on-"
+"release> command line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<no> équivaut à utiliser l'option B<--no-force-save-"
+"on-release>."
+
+#. type: TP
+#: ../scripts/debchange.1:464
+#, no-wrap
+msgid "B<DEBCHANGE_VENDOR>"
+msgstr "B<DEBCHANGE_VENDOR>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:468
+msgid ""
+"Use this vendor instead of the default (dpkg-vendor output). See B<--"
+"vendor> for details."
+msgstr ""
+"Utiliser cet éditeur à la place de celui par défaut (sortie de B<dpkg-"
+"vendor>). Consultez B<--vendor> pour plus de précisions."
+
+#. type: =head1
+#: ../scripts/debchange.1:468 ../scripts/dep3changelog.1:22
+#: ../doc/devscripts.1:16 ../doc/devscripts.1:20 ../scripts/ltnu.pod:68
+#: ../scripts/mass-bug.pl:136 ../scripts/mk-build-deps.pl:126
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "ENVIRONNEMENT"
+
+#. type: TP
+#: ../scripts/debchange.1:469 ../scripts/dep3changelog.1:23
+#, no-wrap
+msgid "B<DEBEMAIL>, B<EMAIL>, B<DEBFULLNAME>, B<NAME>"
+msgstr "B<DEBEMAIL>, B<EMAIL>, B<DEBFULLNAME>, B<NAME>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:472 ../scripts/dep3changelog.1:26
+msgid "See the above description of the use of these environment variables."
+msgstr ""
+"Reportez-vous à la description précédente de l'utilisation de ces variables "
+"d'environnement."
+
+#. type: TP
+#: ../scripts/debchange.1:472
+#, no-wrap
+msgid "B<CHANGELOG>"
+msgstr "B<CHANGELOG>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:478
+msgid ""
+"This variable specifies the changelog to edit in place of I<debian/"
+"changelog>. No directory traversal or checking is performed when this "
+"variable is set. This variable is overridden by the B<--changelog> command-"
+"line setting."
+msgstr ""
+"Cette variable indique le journal des modifications à éditer en remplacement "
+"de I<debian/changelog>. Aucune traversée ou contrôle de répertoire ne sera "
+"fait si cette variable est utilisée. Cette variable est remplacée par "
+"l'option de la ligne de commande B<--changelog>."
+
+#. type: TP
+#: ../scripts/debchange.1:478
+#, no-wrap
+msgid "B<VISUAL>, B<EDITOR>"
+msgstr "B<VISUAL>, B<EDITOR>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:482
+msgid ""
+"These environment variables (in this order) determine the editor used by "
+"B<sensible-editor>."
+msgstr ""
+"Ces variables d'environnement déterminent (dans cet ordre) quel sera "
+"l'éditeur invoqué par B<sensible-editor>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:488
+msgid ""
+"B<debc>(1), B<debclean>(1), B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+msgstr ""
+"B<debc>(1), B<debclean>(1), B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debchange.1:491
+msgid ""
+"The original author was Christoph Lameter E<lt>clameter@debian.orgE<gt>. "
+"Many substantial changes and improvements were made by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"L'auteur initial est Christoph Lameter E<lt>clameter@debian.orgE<gt>. "
+"Beaucoup de changements substantiels et d'améliorations ont été apportés par "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:26
+msgid "debcheckout - checkout the development repository of a Debian package"
+msgstr "debcheckout - Récupérer le contenu du dépôt d'un paquet Debian"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:32
+msgid "B<debcheckout> [I<OPTIONS>] I<PACKAGE> [I<DESTDIR>]"
+msgstr "B<debcheckout> [I<options>] I<paquet> [I<rép_destination>]"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:34
+msgid "B<debcheckout> [I<OPTIONS>] I<REPOSITORY_URL> [I<DESTDIR>]"
+msgstr "B<debcheckout> [I<options>] I<URL_dépôt> [I<rép_destination>]"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:36
+msgid "B<debcheckout> B<--help>"
+msgstr "B<debcheckout> B<--help>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:42
+msgid ""
+"B<debcheckout> retrieves the information about the Version Control System "
+"used to maintain a given Debian package (the I<PACKAGE> argument), and then "
+"checks out the latest (potentially unreleased) version of the package from "
+"its repository. By default the repository is checked out to the I<PACKAGE> "
+"directory; this can be overridden by providing the I<DESTDIR> argument."
+msgstr ""
+"B<debcheckout> récupère les informations sur le système de gestion de "
+"version utilisé pour la maintenance d'un paquet Debian (le paramètre "
+"I<paquet>), puis récupère la dernière version (potentiellement non "
+"officielle) du paquet depuis le dépôt. Par défaut le dépôt est récupéré dans "
+"le répertoire I<paquet> ; cela peut être modifié à l'aide du paramètre "
+"I<rép_destination>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:48
+msgid ""
+"The information about where the repository is available is expected to be "
+"found in B<Vcs-*> fields available in the source package record. For "
+"example, the B<vim> package exposes such information with a field like "
+"S<B<Vcs-Hg: http://hg.debian.org/hg/pkg-vim/vim>>, you can see it by "
+"grepping through B<apt-cache showsrc vim>."
+msgstr ""
+"Les informations indiquant où se trouve le dépôt sont recherchées dans les "
+"champs B<Vcs-*> du paquet source. Par exemple, le paquet B<vim> fournit les "
+"informations en utilisant un champ S<B<Vcs-Hg: http://hg.debian.org/hg/pkg-"
+"vim/vim>> visible dans la sortie de B<apt-cache showsrc vim>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:54
+msgid ""
+"If more than one source package record containing B<Vcs-*> fields is "
+"available, B<debcheckout> will select the record with the highest version "
+"number. Alternatively, a particular version may be selected from those "
+"available by specifying the package name as I<PACKAGE>=I<VERSION>."
+msgstr ""
+"Si plus d'un paquet source contenant des champs B<Vcs-*> est disponible, "
+"B<debcheckout> sélectionnera le paquet avec le numéro de version le plus "
+"élevé. Sinon, un numéro de version spécifique peut être sélectionné parmi "
+"ceux disponibles en utilisant la forme I<paquet>B<=>I<version> pour le nom "
+"de paquet."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:59
+msgid ""
+"If you already know the URL of a given repository you can invoke "
+"B<debcheckout> directly on it, but you will probably need to pass the "
+"appropriate B<-t> flag. That is, some heuristics are in use to guess the "
+"repository type from the URL; if they fail, you might want to override the "
+"guessed type using B<-t>."
+msgstr ""
+"Si vous connaissez déjà l'URL d'un dépôt, vous pouvez appeler directement "
+"B<debcheckout> avec celle-ci, mais vous aurez probablement à utiliser le "
+"paramètre B<-t> approprié. C'est-à-dire que des heuristiques sont utilisées "
+"pour deviner le type de dépôt à partir de l'URL ; si elles échouent, vous "
+"pouvez remplacer le type deviné en utilisant B<-t>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:65
+msgid ""
+"The currently supported version control systems are: Arch (arch), Bazaar "
+"(bzr), CVS (cvs), Darcs (darcs), Git (git), Mercurial (hg) and Subversion "
+"(svn)."
+msgstr ""
+"Les systèmes de contrôle de versions actuellement pris en charge sont : Arch "
+"(arch), Bazaar (bzr), CVS (cvs), Darcs (darcs), Git (git), Mercurial (hg) et "
+"Subversion (svn)."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:70
+msgid "B<GENERAL OPTIONS>"
+msgstr "B<OPTIONS GÉNÉRALES>"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:74
+msgid "B<-a>, B<--auth>"
+msgstr "B<-a>, B<--auth>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:76
+msgid ""
+"Work in authenticated mode; this means that for known repositories (mainly "
+"those hosted on S<I<https://salsa.debian.org>>) URL rewriting is attempted "
+"before checking out, to ensure that the repository can be committed to. For "
+"example, for Git repositories hosted on Salsa this means that S<I<git@salsa."
+"debian.org:...git>> will be used instead of S<I<https://salsa.debian.org/..."
+"git>>."
+msgstr ""
+"Utiliser le mode authentifié ; cela signifie que pour les dépôts connus "
+"(principalement ceux hébergés sur S<I<https://salsa.debian.org>>), une ré-"
+"écriture de l'URL est tentée avant d'effectuer la récupération, pour "
+"s'assurer qu'il est possible d'envoyer les modifications dans le dépôt. Par "
+"exemple, pour les dépôts Git hébergés sur Salsa, cela signifie que "
+"S<I<git@salsa.debian.org:...git>> sera utilisé à la place de S<I<https://"
+"salsa.debian.org/...git>>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:83
+msgid ""
+"There are built-in rules for salsa.debian.org and github.com. Other hosts "
+"can be configured using B<DEBCHECKOUT_AUTH_URLS>."
+msgstr ""
+"Il y a des règles internes pour salsa.debian.org et github.com. D'autres "
+"hôtes peuvent être configurés avec B<DEBCHECKOUT_AUTH_URLS>."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:86
+msgid "B<-d>, B<--details>"
+msgstr "B<-d>, B<--details>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:88
+msgid ""
+"Only print a list of detailed information about the package repository, "
+"without checking it out; the output format is a list of fields, each field "
+"being a pair of TAB-separated field name and field value. The actual fields "
+"depend on the repository type. This action might require a network "
+"connection to the remote repository."
+msgstr ""
+"N'afficher qu'une liste d'informations sur le dépôt du paquet, sans le "
+"récupérer ; le format de sortie est une liste de champs, chaque champ étant "
+"une paire nom et valeur du champ séparés par une tabulation. Les champs "
+"dépendent du type de dépôt. Cette action peut nécessiter une connexion "
+"réseau vers le dépôt distant."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:94
+msgid "Also see B<-p>. This option and B<-p> are mutually exclusive."
+msgstr ""
+"Consultez également B<-p>. Cette option et l'option B<-p> sont mutuellement "
+"exclusives."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:98
+msgid "Print a detailed help message and exit."
+msgstr "Afficher un message d'aide détaillé et quitter."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:100
+msgid "B<-p>, B<--print>"
+msgstr "B<-p>, B<--print>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:102
+msgid ""
+"Only print a summary about package repository information, without checking "
+"it out; the output format is TAB-separated with two fields: repository type, "
+"repository URL. This action works offline, it only uses \"static\" "
+"information as known by APT's cache."
+msgstr ""
+"N'afficher qu'un résumé des informations sur le dépôt du paquet, sans le "
+"récupérer ; le format de sortie comprend deux champs séparés par une "
+"tabulation : le type de dépôt et l'URL du dépôt. Cette action fonctionne "
+"hors-ligne, elle n'utilise que des informations \"statiques\" telles "
+"qu'elles sont connues du cache d'APT."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:107
+msgid "Also see B<-d>. This option and B<-d> are mutually exclusive."
+msgstr ""
+"Consultez également B<-d>. Cette option et l'option B<-d> sont mutuellement "
+"exclusives."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:109
+msgid "B<-P> I<package>, B<--package> I<package>"
+msgstr "B<-P> I<paquet>, B<--package> I<paquet>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:111
+msgid ""
+"When checking out a repository URL, instead of trying to guess the package "
+"name from the URL, use this package name."
+msgstr ""
+"Lors de la récupération d'un dépôt par son URL, utiliser ce nom de I<paquet> "
+"au lieu d'essayer de le deviner à partir de l'URL."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:114
+msgid "B<-t> I<TYPE>, B<--type> I<TYPE>"
+msgstr "B<-t> I<type>, B<--type> I<type>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:116
+msgid ""
+"Override the repository type (which defaults to some heuristics based on the "
+"URL or, in case of heuristic failure, the fallback \"git\"); should be one "
+"of the currently supported repository types."
+msgstr ""
+"Forcer le type de dépôt (défini par défaut par des heuristiques basées sur "
+"l'URL ou, si les heuristiques échouent, \"git\") ; le type de dépôt doit "
+"être un des types de dépôt gérés."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:120
+msgid "B<-u> I<USERNAME>, B<--user> I<USERNAME>"
+msgstr "B<-u> I<nom_utilisateur>, B<--user> I<nom_utilisateur>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:122
+msgid ""
+"Specify the login name to be used in authenticated mode (see B<-a>). This "
+"option implies B<-a>: you don't need to specify both."
+msgstr ""
+"Indiquer le nom d'utilisateur à utiliser en mode authentifié (voir B<-a>). "
+"Cette option implique l'utilisation de B<-a> : vous n'avez pas à préciser "
+"les deux."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:125
+msgid "B<-f> I<FILE>, B<--file> I<FILE>"
+msgstr "B<-f> I<FICHIER>, B<--file=>I<FICHIER>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:127
+msgid ""
+"Specify that the named file should be extracted from the repository and "
+"placed in the destination directory. May be used more than once to extract "
+"multiple files."
+msgstr ""
+"Indiquer que le fichier mentionné doit être extrait du dépôt et placé dans "
+"le répertoire de destination. Elle peut être utilisée plus d'une fois pour "
+"extraire plusieurs fichiers."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:131
+msgid "B<--source=never>|B<auto>|B<download-only>|B<always>"
+msgstr "B<--source=never>|B<auto>|B<download-only>|B<always>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:133
+msgid ""
+"Some packages only place the F<debian> directory in version control. "
+"B<debcheckout> can retrieve the remaining parts of the source using B<apt-"
+"get source> and move the files into the checkout."
+msgstr ""
+"Certains paquets ne gardent que le répertoire F<debian> en système de "
+"contrôle de versions. B<debcheckout> permet de récupérer les morceaux "
+"manquants des sources avec B<apt-get source> et de déplacer les fichiers "
+"dans le répertoire récupéré."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:139
+msgid "B<never>"
+msgstr "B<never>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:141
+msgid "Only use the repository."
+msgstr "N'utiliser que le dépôt."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:143
+msgid "B<auto> (default)"
+msgstr "B<auto> (défaut)"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:145
+msgid ""
+"If the repository only contains the F<debian> directory, retrieve the source "
+"package, unpack it, and also place the F<.orig.tar.gz> file into the current "
+"directory. Else, do nothing."
+msgstr ""
+"Si le dépôt ne contient que le répertoire F<debian>, récupérer le paquet "
+"source, le dépaqueter, et mettre aussi le fichier F<.orig.tar.gz> dans le "
+"répertoire actuel. Sinon, ne rien faire."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:149
+msgid "B<download-only>"
+msgstr "B<download-only>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:151
+msgid "Always retrieve the I<.orig.tar.gz> file, but do not unpack it."
+msgstr ""
+"Toujours récupérer le fichier I<.orig.tar.gz>, mais ne jamais le dépaqueter."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:153
+msgid "B<always>"
+msgstr "B<always>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:155
+msgid ""
+"Always retrieve the I<.orig.tar.gz> file, and if the repository only "
+"contains the F<debian> directory, unpack it."
+msgstr ""
+"Toujours récupérer le fichier I<.orig.tar.gz>, et si le dépôt ne contient "
+"que le répertoire F<debian>, le dépaqueter."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:162
+msgid "B<VCS-SPECIFIC OPTIONS>"
+msgstr "B<OPTIONS SPECIFIQUES AU SYSTÈME DE CONTRÔLE DE VERSIONS>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:164
+msgid "I<GIT-SPECIFIC OPTIONS>"
+msgstr "I<OPTIONS SPÉCIFIQUES À GIT>"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:168
+msgid "B<--git-track> I<BRANCHES>"
+msgstr "B<--git-track> I<branches>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:170
+msgid ""
+"Specify a list of remote branches which will be set up for tracking (as in "
+"S<B<git branch --track>>, see B<git-branch>(1)) after the remote Git "
+"repository has been cloned. The list should be given as a space-separated "
+"list of branch names."
+msgstr ""
+"Indiquer une liste de branches qui seront configurées pour être suivies "
+"(comme avec S<B<git branch --track>>, consultez B<git-branch>(1)) une fois "
+"que le dépôt Git distant sera cloné. La liste doit être une liste de noms de "
+"branches, séparés par des espaces."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:175
+msgid ""
+"As a shorthand, the string \"B<*>\" can be given to require tracking of all "
+"remote branches."
+msgstr ""
+"Comme raccourci, la chaîne \"B<*>\" peut être fournie pour demander le suivi "
+"de toutes les branches distantes."
+
+# NOTE: presque identique
+#. type: textblock
+#: ../scripts/debcheckout.pl:182 ../scripts/rmadison.pl:357
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+"Les deux fichiers de configuration I</etc/devscripts.conf> et I<~/."
+"devscripts> sont chargés dans cet ordre par un interpréteur de commandes "
+"pour définir les variables de configuration. Des options de ligne de "
+"commande peuvent être utilisées pour écraser les paramètres des fichiers de "
+"configuration. Les paramètres des variables d'environnement sont ignorés à "
+"cette fin. Les variables actuellement reconnues sont :"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:190
+msgid "B<DEBCHECKOUT_AUTH_URLS>"
+msgstr "B<DEBCHECKOUT_AUTH_URLS>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:192
+msgid ""
+"This variable should be a space separated list of Perl regular expressions "
+"and replacement texts, which must come in pairs: I<REGEXP> I<TEXT> I<REGEXP> "
+"I<TEXT> ... and so on. Each pair denotes a substitution which is applied to "
+"repository URLs if other built-in means of building URLs for authenticated "
+"mode (see B<-a>) have failed."
+msgstr ""
+"Cette variable doit être une liste d'expressions rationnelles Perl et de "
+"textes de remplacements séparées par des espaces, qui doivent être fournies "
+"par paires : I<exp_rat> I<texte> I<exp_rat> I<texte> ... Chaque paire "
+"indique une substitution qui est appliquée aux URL des dépôts si les autres "
+"moyens internes pour construire des URL pour le mode authentifié (voir B<-"
+"a>) ont échoué."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:198
+msgid ""
+"References to matching substrings in the replacement texts are allowed as "
+"usual in Perl by the means of B<$1>, B<$2>, ... and so on."
+msgstr ""
+"Les références aux sous-chaînes sont autorisées dans les textes de "
+"remplacement comme d'habitude avec Perl en utilisant B<$1>, B<$2>, ..."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:201
+msgid ""
+"This setting is used to configure the \"authenticated mode\" location for "
+"repositories. The Debian repositories on S<salsa.debian.org> are implicitly "
+"defined, as is S<github.com>."
+msgstr ""
+"Cette configuration est utilisée pour configurer la localisation du \"mode "
+"authentifié\" pour les dépôts. Les dépôts Debian de S<salsa.debian.org> sont "
+"implicitement définis, comme l'est S<github.com>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:205
+msgid "Here is a sample snippet suitable for the configuration files:"
+msgstr ""
+"Voici un bout d'exemple qui conviendra pour les fichiers de configuration :"
+
+#. type: verbatim
+#: ../scripts/debcheckout.pl:207
+#, no-wrap
+msgid ""
+" DEBCHECKOUT_AUTH_URLS='\n"
+" ^\\w+://(svn\\.example\\.com)/(.*) svn+ssh://$1/srv/svn/$2\n"
+" ^\\w+://(git\\.example\\.com)/(.*) git+ssh://$1/home/git/$2\n"
+" '\n"
+"\n"
+msgstr ""
+" DEBCHECKOUT_AUTH_URLS='\n"
+" ^\\w+://(svn\\.example\\.com)/(.*) svn+ssh://$1/srv/svn/$2\n"
+" ^\\w+://(git\\.example\\.com)/(.*) git+ssh://$1/home/git/$2\n"
+" '\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:212
+msgid ""
+"Note that whitespace is not allowed in either regexps or replacement texts. "
+"Also, given that configuration files are sourced by a shell, you probably "
+"want to use single quotes around the value of this variable."
+msgstr ""
+"Veuillez noter que les blancs ne sont autorisés ni dans les expressions "
+"rationnelles ni dans les textes de remplacement. Aussi, comme les fichiers "
+"de configuration sont souvent lus par les interpréteurs de commandes avec "
+"\"source\", vous avez intérêt à utiliser des guillemets simples autour de la "
+"valeur de cette variable."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:217
+msgid "B<DEBCHECKOUT_SOURCE>"
+msgstr "B<DEBCHECKOUT_SOURCE>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:219
+msgid ""
+"This variable determines under what scenarios the associated orig.tar.gz for "
+"a package will be downloaded. See the B<--source> option for a description "
+"of the values."
+msgstr ""
+"Cette variable détermine le scenario pour télécharger ou non le fichier I<."
+"orig.tar.gz> associé à un paquet. Consultez l'option B<--source> pour une "
+"description des valeurs."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:223
+msgid "B<DEBCHECKOUT_USER>"
+msgstr "B<DEBCHECKOUT_USER>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:225
+msgid ""
+"This variable sets the username for authenticated mode. It can be overridden "
+"with the B<--user> option. Setting this variable does not imply the use of "
+"authenticated mode, it still has to be activated with B<--auth>."
+msgstr ""
+"Cette variable définit l’identifiant pour le mode authentifié. Il peut être "
+"modifié avec l’option B<--user>. La définition de cette variable n’implique "
+"pas l’utilisation du mode authentifié, il doit toujours être activé avec B<--"
+"auth>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:233
+msgid ""
+"B<apt-cache>(8), Section 6.2.5 of the Debian Developer's Reference (for more "
+"information about B<Vcs-*> fields): S<I<https://www.debian.org/doc/"
+"developers-reference/best-pkging-practices.html#bpp-vcs>>."
+msgstr ""
+"B<apt-cache>(8), Section 6.2.5 de la référence du développeur Debian (pour "
+"plus d'informations sur les champs B<Vcs-*>) : S<I<https://www.debian.org/"
+"doc/developers-reference/best-pkging-practices.html#bpp-vcs>>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:238
+msgid ""
+"B<debcheckout> and this manpage have been written by Stefano Zacchiroli "
+"<I<zack@debian.org>>."
+msgstr ""
+"B<debcheckout> et cette page de manuel ont été écrits par Stefano Zacchiroli "
+"<I<zack@debian.org>>."
+
+#. type: TH
+#: ../scripts/debclean.1:1
+#, no-wrap
+msgid "DEBCLEAN"
+msgstr "DEBCLEAN"
+
+#. type: Plain text
+#: ../scripts/debclean.1:4
+msgid "debclean - clean up a sourcecode tree"
+msgstr "debclean - Nettoyer une arborescence de code source"
+
+#. type: Plain text
+#: ../scripts/debclean.1:6
+msgid "B<debclean> [I<options>]"
+msgstr "B<debclean> [I<options>]"
+
+#. type: Plain text
+#: ../scripts/debclean.1:13
+msgid ""
+"B<debclean> walks through the directory tree starting at the directory tree "
+"in which it was invoked, and executes I<debuild -- clean> for each Debian "
+"source directory encountered. These directories are recognised by "
+"containing a debian/changelog file for a package whose name matches that of "
+"the directory. Name matching is described below."
+msgstr ""
+"B<debclean> parcourt l'arborescence des répertoires en commençant par "
+"l'arborescence du répertoire d'où il a été appelé, et exécuteI<debuild --"
+" clean> pour chaque répertoire source Debian rencontré. Ces répertoires sont "
+"reconnus parce qu'ils contiennent un fichier I<debian/changelog> pour le "
+"paquet dont le nom correspond au nom du répertoire. La correspondance des "
+"noms est décrite plus bas."
+
+#. type: Plain text
+#: ../scripts/debclean.1:16
+msgid ""
+"If B<debclean> is invoked from a directory that is already a Debian source "
+"package, it will not descend into its subdirectories."
+msgstr ""
+"Si B<debclean> est invoqué à partir d'un répertoire qui est déjà un paquet "
+"source Debian, il ne descendra pas dans ses sous-répertoires."
+
+#. type: Plain text
+#: ../scripts/debclean.1:25
+msgid ""
+"Also, if the B<--cleandebs> option is given, then in every directory "
+"containing a Debian source tree, all files named *.deb, *.changes and *."
+"build are removed. The .dsc, .diff.gz and the (.orig).tar.gz files are not "
+"touched so that the release can be reconstructed if necessary, and the ."
+"upload files are left so that B<debchange> functions correctly. The B<--"
+"nocleandebs> option prevents this extra cleaning behaviour and the B<--"
+"cleandebs> option forces it. The default is not to clean these files."
+msgstr ""
+"En outre, si l'option B<--cleandebs> est donnée, alors dans chaque "
+"répertoire contenant une arborescence source Debian, tous les fichiers "
+"nommés *.deb, *.changes et *.build sont supprimés. Les fichiers .dsc, .diff."
+"gz et (.orig).tar.gz ne sont pas touchés afin que la version puisse être "
+"reconstruite si nécessaire et les fichiers .upload sont laissés pour que "
+"B<debchange> fonctionne correctement. L'option B<--nocleandebs> empêche ce "
+"comportement de nettoyage supplémentaire et l'option B<--cleandebs> le "
+"force. Par défaut, le nettoyage n'est pas réalisé."
+
+#. type: Plain text
+#: ../scripts/debclean.1:27
+msgid "B<debclean> uses B<debuild>(1) to clean the source tree."
+msgstr ""
+"B<debclean> utilise B<debuild>(1) pour nettoyer l'arborescence des sources."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debclean.1:38
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debclean> will walk through the directory tree searching for I<debian/"
+"changelog> files. As a safeguard against stray files causing potential "
+"problems, it will examine the name of the parent directory once it finds a "
+"I<debian/changelog> file, and check that the directory name corresponds to "
+"the package name. Precisely how it does this is controlled by two "
+"configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+"Comme certains autres scripts du paquet B<devscripts>, B<debclean> parcourt "
+"une arborescence de répertoires pour trouver des fichiers I<debian/"
+"changelog>. Pour éviter les problèmes posés par les fichiers égarés, il "
+"examine le nom du répertoire parent une fois qu'il a trouvé le fichier "
+"I<debian/changelog>, et vérifie que le nom du répertoire correspond au nom "
+"du paquet. La façon précise utilisée est contrôlée par les deux variables du "
+"fichier de configuration B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> et "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, et les options en ligne de commande "
+"associées B<--check-dirname-level> et B<--check-dirname-regex>."
+
+#. type: TP
+#: ../scripts/debclean.1:64
+#, no-wrap
+msgid "B<--cleandebs>"
+msgstr "B<--cleandebs>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:68
+msgid ""
+"Also remove all .deb, .changes and .build files from the parent directory."
+msgstr ""
+"Enlever également tous les fichiers .deb, .changes et .build du répertoire "
+"parent."
+
+#. type: TP
+#: ../scripts/debclean.1:68
+#, no-wrap
+msgid "B<--nocleandebs>"
+msgstr "B<--nocleandebs>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:72
+msgid ""
+"Do not remove the .deb, .changes and .build files from the parent directory; "
+"this is the default behaviour."
+msgstr ""
+"Ne pas supprimer les fichiers .deb, .changes et .build du répertoire parent. "
+"C'est le comportement par défaut."
+
+#. type: TP
+#: ../scripts/debclean.1:84 ../scripts/debuild.1:321
+#, no-wrap
+msgid "B<-d>"
+msgstr "B<-d>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:87
+msgid "Do not run dpkg-checkbuilddeps to check build dependencies."
+msgstr ""
+"Ne pas exécuter dpkg-checkbuilddeps pour vérifier les dépendances de "
+"construction du paquet (\"build dependencies\")."
+
+#. type: TP
+#: ../scripts/debclean.1:99
+#, no-wrap
+msgid "B<DEBCLEAN_CLEANDEBS>"
+msgstr "B<DEBCLEAN_CLEANDEBS>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:103
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--cleandebs> command "
+"line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--cleandebs>."
+
+#. type: Plain text
+#: ../scripts/debclean.1:113
+msgid "B<debuild>(1), B<devscripts.conf>(5)"
+msgstr "B<debuild>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debclean.1:115
+msgid ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; modifications by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt> ; modifications par Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:5
+msgid "debcommit - commit changes to a package"
+msgstr "debcommit - Soumettre les changements à un paquet"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:9
+msgid "B<debcommit> [I<options>] [B<--all> | I<files to commit>]"
+msgstr "B<debcommit> [I<options>] [B<--all> | I<fichiers à commiter>]"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:13
+msgid ""
+"B<debcommit> generates a commit message based on new text in B<debian/"
+"changelog>, and commits the change to a package's repository. It must be run "
+"in a working copy for the package. Supported version control systems are: "
+"B<cvs>, B<git>, B<hg> (mercurial), B<svk>, B<svn> (Subversion), B<baz>, "
+"B<bzr>, B<tla> (arch), B<darcs>."
+msgstr ""
+"B<debcommit> génère un message de commit basé sur le nouveau texte dans le "
+"fichier debian/changelog, et envoie la modification dans un dépôt du paquet. "
+"Il doit être lancé dans une copie de travail du paquet. Les systèmes de "
+"contrôle de versions pris en charge sont B<cvs>, B<git>, B<hg> (mercurial), "
+"B<svk>, B<svn> (Subversion), B<baz>, B<bzr>, B<tla> (arch), B<darcs>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:23
+msgid "B<-c>, B<--changelog> I<path>"
+msgstr "B<-c>, B<--changelog> I<chemin>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:25
+msgid ""
+"Specify an alternate location for the changelog. By default debian/changelog "
+"is used."
+msgstr ""
+"Indiquer un autre emplacement pour le journal des modifications. Par défaut "
+"debian/changelog est utilisé."
+
+#. type: =item
+#: ../scripts/debcommit.pl:28
+msgid "B<-r>, B<--release>"
+msgstr "B<-r>, B<--release>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:30
+msgid ""
+"Commit a release of the package. The version number is determined from "
+"debian/changelog, and is used to tag the package in the repository."
+msgstr ""
+"Commiter une distribution (\"release\") du paquet. Le numéro de version est "
+"déterminé à partir du fichier debian/changelog et est utilisé pour étiqueter "
+"le paquet dans le dépôt."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:33
+msgid ""
+"Note that svn/svk tagging conventions vary, so debcommit uses svnpath(1) to "
+"determine where the tag should be placed in the repository."
+msgstr ""
+"Veuillez noter que les conventions de nommage des étiquettes varient pour "
+"Subversion et svk, donc debcommit utilise svnpath(1) pour déterminer où "
+"l'étiquette doit être placée dans le dépôt."
+
+#. type: =item
+#: ../scripts/debcommit.pl:37
+msgid "B<-R>, B<--release-use-changelog>"
+msgstr "B<-R>, B<--release-use-changelog>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:39
+msgid ""
+"When used in conjunction with B<--release>, if there are uncommitted changes "
+"to the changelog then derive the commit message from those changes rather "
+"than using the default message."
+msgstr ""
+"Quand elle est utilisée avec l'option B<--release>, s'il y a des "
+"modifications non envoyées dans le journal des modifications, alors utiliser "
+"ces modifications pour le message d'envoi (commit) plutôt que le message par "
+"défaut."
+
+#. type: =item
+#: ../scripts/debcommit.pl:43
+msgid "B<-m> I<text>, B<--message> I<text>"
+msgstr "B<-m> I<texte>, B<--message> I<texte>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:45
+msgid ""
+"Specify a commit message to use. Useful if the program cannot determine a "
+"commit message on its own based on debian/changelog, or if you want to "
+"override the default message."
+msgstr ""
+"Indiquer un message de commit à utiliser. Utile si le programme ne peut pas "
+"déterminer tout seul un message de commit à partir du fichier debian/"
+"changelog ou si vous voulez remplacer le message par défaut."
+
+#. type: =item
+#: ../scripts/debcommit.pl:49 ../scripts/tagpending.pl:98
+msgid "B<-n>, B<--noact>"
+msgstr "B<-n>, B<--noact>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:51
+msgid ""
+"Do not actually do anything, but do print the commands that would be run."
+msgstr "Ne rien faire, mais afficher les commandes qui seraient exécutées."
+
+#. type: =item
+#: ../scripts/debcommit.pl:53
+msgid "B<-d>, B<--diff>"
+msgstr "B<-d>, B<--diff>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:55
+msgid ""
+"Instead of committing, do print the diff of what would have been committed "
+"if this option were not given. A typical usage scenario of this option is "
+"the generation of patches against the current working copy (e.g. when you "
+"don't have commit access right)."
+msgstr ""
+"Au lieu de faire un envoi (commit), afficher la différence qui correspond à "
+"ce qui serait envoyé si cette option n'avait pas été fournie. C'est utile "
+"pour créer un patch correspondant aux modifications dans un espace de "
+"travail (par exemple quand vous n'avez pas les droits d'accès pour effectuer "
+"l'envoi)."
+
+#. type: =item
+#: ../scripts/debcommit.pl:60
+msgid "B<-C>, B<--confirm>"
+msgstr "B<-C>, B<--confirm>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:62
+msgid ""
+"Display the generated commit message and ask for confirmation before "
+"committing it. It is also possible to edit the message at this stage; in "
+"this case, the confirmation prompt will be re-displayed after the editing "
+"has been performed."
+msgstr ""
+"Afficher le message d'envoi créé et demander une confirmation avant l'envoi. "
+"Il est aussi possible d'éditer le message à ce moment ; dans ce cas, la "
+"demande de confirmation sera affichée de nouveau après que le message a été "
+"édité."
+
+#. type: =item
+#: ../scripts/debcommit.pl:66
+msgid "B<-e>, B<--edit>"
+msgstr "B<-e>, B<--edit>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:68
+msgid ""
+"Edit the generated commit message in your favorite editor before committing "
+"it."
+msgstr ""
+"Éditer le message d'envoi créé dans votre éditeur préféré avant l'envoi."
+
+#. type: TP
+#: ../scripts/debcommit.pl:71 ../scripts/dget.pl:624
+#: ../scripts/dpkg-depcheck.1:16
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:73
+msgid ""
+"Commit all files. This is the default operation when using a VCS other than "
+"git."
+msgstr ""
+"Envoyer tous les fichiers. C'est l'opération par défaut pour les systèmes de "
+"contrôle de versions autres que Git."
+
+#. type: =item
+#: ../scripts/debcommit.pl:76
+msgid "B<-s>, B<--strip-message>, B<--no-strip-message>"
+msgstr "B<-s>, B<--strip-message>, B<--no-strip-message>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:78
+msgid ""
+"If this option is set and the commit message has been derived from the "
+"changelog, the characters \"* \" will be stripped from the beginning of the "
+"message."
+msgstr ""
+"Si cette option est utilisée et que le message d'envoi est défini à l'aide "
+"du journal des modifications, les caractères \"*\" (espace comprise) seront "
+"enlevés au début du message."
+
+# NOTE: space inside the brackets?
+#. type: textblock
+#: ../scripts/debcommit.pl:82
+msgid ""
+"This option is set by default and ignored if more than one line of the "
+"message begins with \"[*+-] \"."
+msgstr ""
+"Cette option est activée par défaut et est ignorée si plus d'une ligne du "
+"message commence par \"[*+-]\" (espace comprise)."
+
+#. type: =item
+#: ../scripts/debcommit.pl:85
+msgid "B<--sign-commit>, B<--no-sign-commit>"
+msgstr "B<--sign-commit>, B<--no-sign-commit>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:87
+msgid ""
+"If this option is set, then the commits that debcommit creates will be "
+"signed using gnupg. Currently this is only supported by git, hg, and bzr."
+msgstr ""
+"Si cette option est activée, alors les messages créés par debcommit seront "
+"signés avec GnuPG. Ce n'est actuellement géré que par Git, mercurial et "
+"Bazaar."
+
+#. type: =item
+#: ../scripts/debcommit.pl:90
+msgid "B<--sign-tags>, B<--no-sign-tags>"
+msgstr "B<--sign-tags>, B<--no-sign-tags>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:92
+msgid ""
+"If this option is set, then tags that debcommit creates will be signed using "
+"gnupg. Currently this is only supported by git."
+msgstr ""
+"Si cette option est activée, alors les étiquettes créées par debcommit "
+"seront signées avec GnuPG. Ce n'est actuellement géré que par Git."
+
+#. type: =item
+#: ../scripts/debcommit.pl:95
+msgid "B<--changelog-info>"
+msgstr "B<--changelog-info>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:97
+msgid ""
+"If this option is set, the commit author and date will be determined from "
+"the Maintainer and Date field of the first paragraph in F<debian/"
+"changelog>. This is mainly useful when using B<debchange>(1) with the B<--"
+"no-mainttrailer> option."
+msgstr ""
+"Si cette option est définie, l'auteur et la date de commit seront déterminés "
+"à partir des champs Maintainer et Date du premier paragraphe de F<debian/"
+"changelog>. C'est surtout pratique en utilisant B<debchange>(1) avec "
+"l'option B<--no-mainttrailer>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:114
+msgid "B<DEBCOMMIT_STRIP_MESSAGE>"
+msgstr "B<DEBCOMMIT_STRIP_MESSAGE>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:116
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-strip-message> "
+"command line parameter being used. The default is I<yes>."
+msgstr ""
+"Lui attribuer la valeur I<no> équivaut à utiliser l'option B<--no-strip-"
+"message>. La valeur par défaut est I<yes>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:119
+msgid "B<DEBCOMMIT_SIGN_TAGS>"
+msgstr "B<DEBCOMMIT_SIGN_TAGS>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:121
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--sign-tags> command "
+"line parameter being used. The default is I<no>."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--sign-tags>. "
+"La valeur par défaut est I<no>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:124
+msgid "B<DEBCOMMIT_SIGN_COMMITS>"
+msgstr "B<DEBCOMMIT_SIGN_COMMITS>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:126
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--sign-commit> "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--sign-"
+"commit>. La valeur par défaut est I<no>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:129
+msgid "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+msgstr "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:131
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--release-use-"
+"changelog> command line parameter being used. The default is I<no>."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--release-use-"
+"changelog>. La valeur par défaut est I<no>."
+
+#. type: TP
+#: ../scripts/debcommit.pl:134 ../scripts/debsign.1:117
+#, no-wrap
+msgid "B<DEBSIGN_KEYID>"
+msgstr "B<DEBSIGN_KEYID>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:136
+msgid ""
+"This is the key id used for signing tags. If not set, a default will be "
+"chosen by the revision control system."
+msgstr ""
+"L'identifiant de la clef à utiliser pour les signatures. Si cette variable "
+"n'est pas configurée, une valeur par défaut sera utilisée par les systèmes "
+"de contrôle de versions."
+
+#. type: =head1
+#: ../scripts/debcommit.pl:141
+msgid "VCS SPECIFIC FEATURES"
+msgstr "FONCTIONNALITÉS SPÉCIFIQUES AUX SYSTÈMES DE CONTRÔLE DE VERSIONS"
+
+#. type: =item
+#: ../scripts/debcommit.pl:145
+msgid "B<tla> / B<baz>"
+msgstr "B<tla> / B<baz>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:147
+msgid ""
+"If the commit message contains more than 72 characters, a summary will be "
+"created containing as many full words from the message as will fit within 72 "
+"characters, followed by an ellipsis."
+msgstr ""
+"Si le message d'envoi contient plus de 72 caractères, un résumé sera créé, "
+"contenant autant de mots entiers que possible dans la limite des 72 "
+"caractères, suivi de points de suspension."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:153
+msgid ""
+"Each of the features described below is applicable only if the commit "
+"message has been automatically determined from the changelog."
+msgstr ""
+"Chacune des fonctionnalités décrites ci-dessous ne s'applique que si le "
+"message d'envoi a été créé automatiquement à partir du journal des "
+"modifications."
+
+#. type: =item
+#: ../scripts/debcommit.pl:158 ../scripts/uscan.pl:399
+msgid "B<git>"
+msgstr "B<git>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:160
+msgid ""
+"If only a single change is detected in the changelog, B<debcommit> will "
+"unfold it to a single line and behave as if B<--strip-message> was used."
+msgstr ""
+"Si une seule modification est détectée dans le journal des modifications, "
+"B<debcommit> rassemblera le message sur une unique ligne et se comportera "
+"comme si l'option B<--strip-message> était utilisée."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:163
+msgid ""
+"Otherwise, the first change will be unfolded and stripped to form a summary "
+"line and a commit message formed using the summary line followed by a blank "
+"line and the changes as extracted from the changelog. B<debcommit> will then "
+"spawn an editor so that the message may be fine-tuned before committing."
+msgstr ""
+"Sinon, la première modification sera rassemblée sur une ligne et nettoyée "
+"pour former la ligne de résumé et un message d'envoi sera créé avec la ligne "
+"de résumé, suivi d'une ligne vide puis des modifications du journal des "
+"modifications. B<debcommit> lancera ensuite un éditeur de telle sorte que le "
+"message puisse être retouché avant l'envoi."
+
+#. type: =item
+#: ../scripts/debcommit.pl:168
+msgid "B<hg> / B<darcs>"
+msgstr "B<hg> / B<darcs>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:170
+msgid ""
+"The first change detected in the changelog will be unfolded to form a single "
+"line summary. If multiple changes were detected then an editor will be "
+"spawned to allow the message to be fine-tuned."
+msgstr ""
+"La première modification détectée dans le journal des modifications sera "
+"rassemblée sur une ligne de résumé. Si plusieurs modifications sont "
+"détectées alors un éditeur sera lancé pour permettre de retoucher le message."
+
+#. type: =item
+#: ../scripts/debcommit.pl:174
+msgid "B<bzr>"
+msgstr "B<bzr>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:176
+msgid ""
+"If the changelog entry used for the commit message closes any bugs then B<--"
+"fixes> options to \"bzr commit\" will be generated to associate the revision "
+"and the bugs."
+msgstr ""
+"Si l'entrée du journal des modifications utilisée pour le message de commit "
+"ferme des bogues, des options B<--fixes> pour \"bzr commit\" seront produits "
+"pour associer la révision aux bogues."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:945
+msgid ""
+"This code is copyright by Joey Hess <joeyh@debian.org>, all rights "
+"reserved. This program comes with ABSOLUTELY NO WARRANTY. You are free to "
+"redistribute this code under the terms of the GNU General Public License, "
+"version 2 or later."
+msgstr ""
+"Ce code est copyright Joey Hess <joeyh@debian.org>, tous droits réservés. Ce "
+"programme est fourni SANS AUCUNE GARANTIE. Vous êtes libre de redistribuer "
+"ce code sous les termes de la licence publique générale GNU (GNU General "
+"Public Licence), version 2 ou ultérieure."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:952 ../scripts/mass-bug.pl:568
+msgid "Joey Hess <joeyh@debian.org>"
+msgstr "Joey Hess <joeyh@debian.org>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:956
+msgid "B<debchange>(1), B<svnpath>(1)"
+msgstr "B<debchange>(1), B<svnpath>(1)"
+
+#. type: TH
+#: ../scripts/debdiff.1:1
+#, no-wrap
+msgid "DEBDIFF"
+msgstr "DEBDIFF"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:4
+msgid "debdiff - compare file lists in two Debian packages"
+msgstr "debdiff - Comparer la liste des fichiers de deux paquets Debian"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:6
+msgid "B<debdiff> [I<options>]"
+msgstr "B<debdiff> [I<options>]"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:8
+msgid "B<debdiff> [I<options>] ... I<deb1 deb2>"
+msgstr "B<debdiff> [I<options>] ... I<deb1 deb2>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:10
+msgid "B<debdiff> [I<options>] ... I<changes1 changes2>"
+msgstr "B<debdiff> [I<options>] ... I<changes1 changes2>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:13
+msgid ""
+"B<debdiff> [I<options>] ... B<--from >I<deb1a deb1b ... >B<--to >I<deb2a "
+"deb2b ...>"
+msgstr ""
+"B<debdiff> [I<options>] ... B<--from> I<deb1a deb1b ... >B<--to> I<deb2a "
+"deb2b ...>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:15
+msgid "B<debdiff> [I<options>] ... I<dsc1 dsc2>"
+msgstr "B<debdiff> [I<options>] ... I<dsc1 dsc2>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:26
+msgid ""
+"B<debdiff> takes the names of two Debian package files (I<.deb>s or I<."
+"udeb>s) on the command line and compares their contents (considering only "
+"the files in the main package, not the maintenance scripts). It shows which "
+"files have been introduced and which removed between the two package files, "
+"and is therefore useful for spotting files which may have been inadvertently "
+"lost between revisions of the package. It also checks the file owners and "
+"permissions, and compares the control files of the two packages using the "
+"B<wdiff> program. If you want a deeper comparison of two Debian package "
+"files you can use the B<diffoscope> tool."
+msgstr ""
+"B<debdiff> prend en argument le nom de deux paquets Debian (fichiers I<.deb> "
+"ou I<.udeb>) et compare leur contenu (en comparant uniquement les fichiers "
+"principaux, sans les scripts de maintenance). Il affiche quels fichiers ont "
+"été ajoutés ou retirés entre deux paquets. Il est de ce fait utile pour "
+"pointer les fichiers perdus par inadvertance entre deux versions d'un "
+"paquet. Il vérifie également les permissions et propriétaires des fichiers "
+"et compare le fichier control des deux paquets à l'aide du programme "
+"B<wdiff>. Pour une comparaison plus précise de deux paquets Debian, l’outil "
+"B<diffoscope> peut être utilisé."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:29
+msgid ""
+"If no arguments are given, B<debdiff> tries to compare the content of the "
+"current source directory with the last version of the package."
+msgstr ""
+"Si aucun paramètre n'est donné, B<debdiff> essaie de comparer le contenu du "
+"répertoire source actuel avec la dernière version du paquet."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:40
+msgid ""
+"B<debdiff> can also handle changes between groups of I<.deb> files in two "
+"ways. The first is to specify two I<.changes> files. In this case, the I<."
+"deb> files listed in the I<.changes> file will be compared, by taking the "
+"contents of all of the listed I<.deb> files together. (The I<.deb> files "
+"listed are assumed to be in the same directory as the I<.changes> file.) "
+"The second way is to list the I<.deb> files of interest specifically using "
+"the B<--from> ... B<--to> syntax. These both help if a package is broken up "
+"into smaller packages and one wishes to ensure that nothing is lost in the "
+"interim."
+msgstr ""
+"B<debdiff> peut aussi gérer les changements entre des groupes de fichiers I<."
+"deb> de deux façons. La première consiste à indiquer deux fichiers I<."
+"changes>. Dans ce cas, les fichiers I<.deb> listés dans les fichiers I<."
+"changes> seront comparés, en considérant ensemble le contenu de tous les "
+"fichiers I<.deb>. Il est supposé que les fichiers I<.deb> se trouvent dans "
+"le même répertoire que le fichier I<.changes>. La deuxième façon consiste à "
+"indiquer la liste de fichiers I<.deb> avec la syntaxe B<--from> ... (depuis) "
+"et B<--to> ... (vers). On peut ainsi vérifier que, lorsqu'un paquet est "
+"découpé en paquets plus petits, rien n'est perdu au passage."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:44
+msgid ""
+"B<debdiff> examines the B<devscripts> configuration files as described "
+"below. Command line options override the configuration file settings, "
+"though."
+msgstr ""
+"B<debdiff> examine les fichiers de configuration de B<devscripts> comme "
+"décrit ci-dessous. Les options en ligne de commande permettent de remplacer "
+"les paramètres des fichiers de configuration."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:52
+msgid ""
+"If B<debdiff> is passed two source packages (I<.dsc> files) it will compare "
+"the contents of the source packages. If the source packages differ only in "
+"Debian revision number (that is, the I<.orig.tar.gz> files are the same in "
+"the two I<.dsc> files), then B<interdiff>(1) will be used to compare the two "
+"patch files if this program is available on the system, otherwise a B<diff> "
+"will be performed between the two source trees."
+msgstr ""
+"Si deux paquets source (fichiers I<.dsc>) sont fournis à B<debdiff>, il "
+"comparera le contenu des paquets source. Si les paquets source ne diffèrent "
+"que par leur numéro de version Debian (c'est-à-dire que les fichiers I<.orig."
+"tar.gz> sont identiques dans les deux fichiers I<.dsc>), alors "
+"B<interdiff>(1) sera utilisé pour comparer les deux fichiers de rustine si "
+"ce programme est disponible sur le système, sinon, B<diff> sera utilisé sur "
+"les deux arborescences des sources."
+
+#. type: TP
+#: ../scripts/debdiff.1:53
+#, no-wrap
+msgid "B<--dirs>, B<-d>"
+msgstr "B<--dirs>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:58
+msgid ""
+"The default mode of operation is to ignore directory names which appear in "
+"the file list, but they, too, will be considered if this option is given."
+msgstr ""
+"Le mode opératoire par défaut est d'ignorer les noms de répertoire qui "
+"apparaissent dans la liste de fichiers ; mais avec cette option, ils seront "
+"pris en compte."
+
+#. type: TP
+#: ../scripts/debdiff.1:58
+#, no-wrap
+msgid "B<--nodirs>"
+msgstr "B<--nodirs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:62
+msgid ""
+"Ignore directory names which appear in the file list. This is the default "
+"and it can be used to override a configuration file setting."
+msgstr ""
+"Ignorer les répertoires dont le nom apparaît dans la liste de fichiers. "
+"C'est le comportement par défaut. Cette option permet de remplacer un "
+"paramètre d'un fichier de configuration."
+
+#. type: TP
+#: ../scripts/debdiff.1:62
+#, no-wrap
+msgid "B<--move>I< FROM TO>,B< -m>I< FROM TO>"
+msgstr "B<--move> I<DEPUIS VERS>, B<-m> I<DEPUIS VERS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:73
+msgid ""
+"It sometimes occurs that various files or directories are moved around "
+"between revisions. This can be handled using this option. There are two "
+"arguments, the first giving the location of the directory or file in the "
+"first package, and the second in the second. Any files in the first listing "
+"whose names begin with the first argument are treated as having that "
+"substituted for the second argument when the file lists are compared. Any "
+"number of B<--move> arguments may be given; they are processed in the order "
+"in which they appear. This only affects comparing binary packages, not "
+"source packages."
+msgstr ""
+"Il arrive parfois que différents fichiers ou répertoires soient déplacés "
+"entre deux versions. On peut régler le problème en utilisant cette option. "
+"Les deux arguments représentent les emplacements du répertoire ou du fichier "
+"dans le premier et dans le second paquet. Quand les listes de fichiers sont "
+"comparées, tous les fichiers de la première liste dont le nom commence par "
+"le premier argument sont traités comme s'ils commençaient par le second "
+"argument. Vous pouvez donner un nombre arbitraire d'arguments B<--move> : "
+"ils sont interprétés dans l'ordre d'apparition. Cela affecte seulement les "
+"paquets binaires, pas les paquets source."
+
+#. type: TP
+#: ../scripts/debdiff.1:73
+#, no-wrap
+msgid "B<--move-regex>I< FROM TO>"
+msgstr "B<--move-regex> I<DEPUIS VERS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:79
+msgid ""
+"This is the same as B<--move>, except that I<FROM> is treated as a regular "
+"expression and the B<perl> substitution command I<s/^FROM/TO/> is applied to "
+"the files. In particular, TO can make use of backreferences such as $1."
+msgstr ""
+"Identique à B<--move>, mais I<DEPUIS> est traité comme une expression "
+"rationnelle et la commande de substitution B<perl> I<s/^DEPUIS/VERS/> est "
+"appliquée aux fichiers. En particulier, VERS peut avoir des références "
+"arrières telles que $1."
+
+#. type: TP
+#: ../scripts/debdiff.1:79
+#, no-wrap
+msgid "B<--nocontrol>"
+msgstr "B<--nocontrol>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:84
+msgid ""
+"B<debdiff> will usually compare the respective control files of the packages "
+"using B<wdiff>(1). This option suppresses this part of the processing."
+msgstr ""
+"B<debdiff> compare normalement les deux fichiers control respectifs avec "
+"B<wdiff>(1). Cette option permet de désactiver cette fonctionnalité."
+
+#. type: TP
+#: ../scripts/debdiff.1:84
+#, no-wrap
+msgid "B<--control>"
+msgstr "B<--control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:88
+msgid ""
+"Compare the respective control files; this is the default, and it can be "
+"used to override a configuration file setting."
+msgstr ""
+"Comparer les fichiers I<control> respectifs, ce qui est le comportement par "
+"défaut. Cette option permet de remplacer un paramètre d'un fichier de "
+"configuration."
+
+#. type: TP
+#: ../scripts/debdiff.1:88
+#, no-wrap
+msgid "B<--controlfiles>I< FILE>[B<,>I<FILE> ...]"
+msgstr "B<--controlfiles> I<FICHIER>[B<,>I<FICHIER> ...]"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:96
+msgid ""
+"Specify which control files to compare; by default this is just I<control>, "
+"but could include I<postinst>, I<config> and so on. Files will only be "
+"compared if they are present in both I<.debs> being compared. The special "
+"value I<ALL> compares all control files present in both packages, except for "
+"md5sums. This option can be used to override a configuration file setting."
+msgstr ""
+"Indiquer quels fichiers de contrôle comparer. Par défaut, il s'agit juste de "
+"I<control>, mais peut inclure I<postinst>, I<config>, etc. Les fichiers ne "
+"seront comparés que s'ils sont présents dans les deux fichiers I<.deb>. La "
+"valeur spéciale I<ALL> compare tous les fichiers de contrôle présents dans "
+"les deux paquets, à l'exception de md5sums. Cette option peut être utilisée "
+"pour remplacer les paramètres du fichier de configuration."
+
+#. type: TP
+#: ../scripts/debdiff.1:96
+#, no-wrap
+msgid "B<--wdiff-source-control>"
+msgstr "B<--wdiff-source-control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:100
+msgid ""
+"When processing source packages, compare control files using B<wdiff>. "
+"Equivalent to the B<--control> option for binary packages."
+msgstr ""
+"Lors du traitement des paquets source, comparer les fichiers de contrôle "
+"avec B<wdiff>. C'est équivalent à l'option B<--control> pour les paquets "
+"binaires."
+
+#. type: TP
+#: ../scripts/debdiff.1:100
+#, no-wrap
+msgid "B<--no-wdiff-source-control>"
+msgstr "B<--no-wdiff-source-control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:104
+msgid ""
+"Do not compare control files in source packages using B<wdiff>. This is the "
+"default."
+msgstr ""
+"Ne pas comparer les fichiers de contrôle des paquets source en utilisant "
+"B<wdiff>. C'est le comportement par défaut."
+
+#. type: TP
+#: ../scripts/debdiff.1:104
+#, no-wrap
+msgid "B<--wp>, B<--wl>, B<--wt>"
+msgstr "B<--wp>, B<--wl>, B<--wt>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:109
+msgid ""
+"Pass a B<-p>, B<-l> or B<-t> option to B<wdiff> respectively. (This yields "
+"the whole B<wdiff> output rather than just the lines with any changes.)"
+msgstr ""
+"Passe respectivement les options B<-p>, B<-l> ou B<-t> à B<wdiff> (cela "
+"affiche le B<wdiff> complet, plutôt que juste les lignes modifiées)."
+
+#. type: TP
+#: ../scripts/debdiff.1:109
+#, no-wrap
+msgid "B<--show-moved>"
+msgstr "B<--show-moved>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:116
+msgid ""
+"If multiple I<.deb> files are specified on the command line, either using I<."
+"changes> files or the B<--from>/B<--to> syntax, then this option will also "
+"show which files (if any) have moved between packages. (The package names "
+"are simply determined from the names of the I<.deb> files.)"
+msgstr ""
+"Si plusieurs fichiers I<.deb> sont fournis sur la ligne de commande, que la "
+"syntaxe utilisée soit des fichiers I<.changes> soit la syntaxe B<--from>/B<--"
+"to>, alors cette option affichera également les fichiers (s'il y en a) qui "
+"ont été déplacés entre deux paquets. Les noms des paquets sont simplement "
+"déterminés par les noms des fichiers I<.deb>."
+
+#. type: TP
+#: ../scripts/debdiff.1:116
+#, no-wrap
+msgid "B<--noshow-moved>"
+msgstr "B<--noshow-moved>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:120 ../scripts/debdiff.1:141
+msgid ""
+"The default behaviour; can be used to override a configuration file setting."
+msgstr ""
+"Le comportement par défaut ; cette option permet de remplacer les paramètres "
+"d'un fichier de configuration."
+
+#. type: TP
+#: ../scripts/debdiff.1:120
+#, no-wrap
+msgid "B<--renamed>I< FROM TO>"
+msgstr "B<--renamed> I<DEPUIS VERS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:126
+msgid ""
+"If B<--show-moved> is being used and a package has been renamed in the "
+"process, this command instructs B<debdiff> to treat the package in the first "
+"list called I<FROM> as if it were called I<TO>. Multiple uses of this "
+"option are permitted."
+msgstr ""
+"Si l'option B<--show-moved> est utilisée et qu'un paquet a été renommé au "
+"cours du processus, cette commande indique à B<debdiff> de traiter le paquet "
+"de la première liste appelé I<DEPUIS> comme s'il s'appelait I<VERS>. Cette "
+"option peut être utilisée plusieurs fois."
+
+#. type: TP
+#: ../scripts/debdiff.1:126
+#, no-wrap
+msgid "B<--exclude>I< PATTERN>"
+msgstr "B<--exclude> I<MOTIF>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:134
+msgid ""
+"Exclude files whose basenames match I<PATTERN>. Multiple uses of this "
+"option are permitted. Note that this option is passed on to B<diff> and has "
+"the same behaviour, so only the basename of the file is considered: in "
+"particular, B<--exclude='*.patch'> will work, but B<--exclude='debian/"
+"patches/*'> will have no practical effect."
+msgstr ""
+"Exclure les fichiers dont le nom de base correspond à l'I<expression>. La "
+"pluralité d'emploi de cette option est possible. Noter que cette option est "
+"passée à B<diff> et a le même comportement, ainsi seul le nom de base est "
+"considéré : en particulier, B<--exclude='*.patch'> fonctionnera mais B<--"
+"exclude='debian/patches/*'> n'aura pas d'effet en pratique."
+
+#. type: TP
+#: ../scripts/debdiff.1:134
+#, no-wrap
+msgid "B<--diffstat>"
+msgstr "B<--diffstat>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:137
+msgid "Include the result of B<diffstat> before the generated diff."
+msgstr "Inclure le résultat de B<diffstat> avant de produire le différentiel."
+
+#. type: TP
+#: ../scripts/debdiff.1:137
+#, no-wrap
+msgid "B<--no-diffstat>"
+msgstr "B<--no-diffstat>"
+
+#. type: TP
+#: ../scripts/debdiff.1:141
+#, no-wrap
+msgid "B<--auto-ver-sort>"
+msgstr "B<--auto-ver-sort>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:144
+msgid "When comparing source packages, do so in version order."
+msgstr ""
+"Lors de la comparaison de paquets source, comparer dans l'ordre des versions."
+
+#. type: TP
+#: ../scripts/debdiff.1:144
+#, no-wrap
+msgid "B<--no-auto-ver-sort>"
+msgstr "B<--no-auto-ver-sort>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:150
+msgid ""
+"Compare source packages in the order they were passed on the command-line, "
+"even if that means comparing a package with a higher version against one "
+"with a lower version. This is the default behaviour."
+msgstr ""
+"Comparer les paquets source dans l'ordre où ils ont été fournis sur la ligne "
+"de commande, même si cela force la comparaison entre un paquet avec une "
+"version supérieure et un paquet avec une version inférieure. C'est le "
+"comportement par défaut."
+
+#. type: TP
+#: ../scripts/debdiff.1:150
+#, no-wrap
+msgid "B<--unpack-tarballs>"
+msgstr "B<--unpack-tarballs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:155
+msgid ""
+"When comparing source packages, also unpack tarballs found in the top level "
+"source directory to compare their contents along with the other files. This "
+"is the default behaviour."
+msgstr ""
+"Lors de la comparaison des paquets source, ouvrir également les archives tar "
+"trouvées dans la racine des sources pour comparer leurs contenus en même "
+"temps que les autres fichiers. Il s'agit du comportement par défaut."
+
+#. type: TP
+#: ../scripts/debdiff.1:155
+#, no-wrap
+msgid "B<--no-unpack-tarballs>"
+msgstr "B<--no-unpack-tarballs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:158
+msgid "Do not unpack tarballs inside source packages."
+msgstr "Ne pas ouvrir les archives tar se trouvant dans les paquets source."
+
+#. type: TP
+#: ../scripts/debdiff.1:158
+#, no-wrap
+msgid "B<--apply-patches>"
+msgstr "B<--apply-patches>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:162
+msgid ""
+"If the old and/or new package is in 3.0 (quilt) format, apply the quilt "
+"patches (and remove B<.pc/>) before comparison."
+msgstr ""
+"Si l'ancien et/ou le nouveau paquet est au format 3.0 (quilt), applique les "
+"patchs quilt (et supprime B<.pc/>) avant la comparaison."
+
+#. type: TP
+#: ../scripts/debdiff.1:162
+#, no-wrap
+msgid "B<--no-apply-patches, --noapply-patches>"
+msgstr "B<--no-apply-patches, --noapply-patches>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:166
+msgid ""
+"If the old and/or new package is in 3.0 (quilt) format, do not apply the "
+"quilt patches before comparison. This is the default behaviour."
+msgstr ""
+"Si l'ancien et/ou le nouveau paquet est au format 3.0 (quilt), n'applique "
+"les patchs quilt avant la comparaison. C'est le comportement par défaut."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:176
+msgid ""
+"Look for the I<.dsc> files in I<directory> instead of the parent of the "
+"source directory. This should either be an absolute path or relative to the "
+"top of the source directory."
+msgstr ""
+"Chercher les fichiers I<.dsc> dans le I<répertoire> au lieu du répertoire "
+"parent du répertoire source. Cela doit être soit un chemin absolu, soit un "
+"chemin relatif à la racine du répertoire source."
+
+#. type: =item
+#: ../scripts/debdiff.1:182 ../scripts/hardening-check.pl:621
+#, no-wrap
+msgid "B<--quiet>, B<-q>"
+msgstr "B<--quiet>, B<-q>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:185
+msgid "Be quiet if no differences were found."
+msgstr "Rester silencieux si aucune différence n'est trouvée."
+
+#. type: TP
+#: ../scripts/debdiff.1:185
+#, no-wrap
+msgid "B<--ignore-space>, B<-w>"
+msgstr "B<--ignore-space>, B<-w>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:188
+msgid "Ignore whitespace in diffs."
+msgstr "Ignorer les blancs dans les diffs."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debdiff.1:194
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+"Les deux fichiers de configuration I</etc/devscripts.conf> et I<~/."
+"devscripts> sont évalués dans cet ordre par un interpréteur de commandes "
+"(\"shell\") pour placer les variables de configuration. Des options de ligne "
+"de commande peuvent être utilisées pour neutraliser les paramètres des "
+"fichiers de configuration. Les paramètres des variables d'environnement sont "
+"ignorés à cette fin. Si la première option donnée en ligne de commande est "
+"B<--noconf>, alors ces fichiers ne sont pas évalués. Les variables "
+"actuellement identifiées sont :"
+
+#. type: TP
+#: ../scripts/debdiff.1:194
+#, no-wrap
+msgid "B<DEBDIFF_DIRS>"
+msgstr "B<DEBDIFF_DIRS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:198
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--dirs> command line "
+"parameter being used."
+msgstr "Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--dirs>."
+
+#. type: TP
+#: ../scripts/debdiff.1:198
+#, no-wrap
+msgid "B<DEBDIFF_CONTROL>"
+msgstr "B<DEBDIFF_CONTROL>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:203
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--nocontrol> command "
+"line parameter being used. The default is I<yes>."
+msgstr ""
+"Lui attribuer la valeur I<no> équivaut à utiliser l'option B<--nocontrol>. "
+"La valeur par défaut est I<yes>."
+
+#. type: TP
+#: ../scripts/debdiff.1:203
+#, no-wrap
+msgid "B<DEBDIFF_CONTROLFILES>"
+msgstr "B<DEBDIFF_CONTROLFILES>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:208
+msgid ""
+"Which control files to compare, corresponding to the B<--controlfiles> "
+"command line option. The default is I<control>."
+msgstr ""
+"Définit les fichiers control à comparer, correspondant à l'option en ligne "
+"de commande B<--controlfiles>. La valeur par défaut est I<control>."
+
+#. type: TP
+#: ../scripts/debdiff.1:208
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_MOVED>"
+msgstr "B<DEBDIFF_SHOW_MOVED>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:212
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--show-moved> command "
+"line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--show-moved>."
+
+#. type: TP
+#: ../scripts/debdiff.1:212
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_OPT>"
+msgstr "B<DEBDIFF_WDIFF_OPT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:216
+msgid ""
+"This option will be passed to B<wdiff>; it should be one of B<-p>, B<-l> or "
+"B<-t>."
+msgstr ""
+"Cette option est passée à B<wdiff> ; les valeurs possibles sont B<-p>, B<-l> "
+"ou B<-t>."
+
+#. type: TP
+#: ../scripts/debdiff.1:216
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_DIFFSTAT>"
+msgstr "B<DEBDIFF_SHOW_DIFFSTAT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:220
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--diffstat> command "
+"line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--diffstat> de "
+"la ligne de commande."
+
+#. type: TP
+#: ../scripts/debdiff.1:220
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+msgstr "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:224
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--wdiff-source-"
+"control> command line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--wdiff-source-"
+"control> de la ligne de commande."
+
+#. type: TP
+#: ../scripts/debdiff.1:224
+#, no-wrap
+msgid "B<DEBDIFF_AUTO_VER_SORT>"
+msgstr "B<DEBDIFF_AUTO_VER_SORT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:228
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--auto-ver-sort> "
+"command line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--auto-ver-"
+"sort> de la ligne de commande."
+
+#. type: TP
+#: ../scripts/debdiff.1:228
+#, no-wrap
+msgid "B<DEBDIFF_UNPACK_TARBALLS>"
+msgstr "B<DEBDIFF_UNPACK_TARBALLS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:232
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-unpack-tarballs> "
+"command line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<no> équivaut à utiliser l'option B<--no-unpack-"
+"tarballs> de la ligne de commande."
+
+#. type: TP
+#: ../scripts/debdiff.1:232
+#, no-wrap
+msgid "B<DEBDIFF_APPLY_PATCHES>"
+msgstr "B<DEBDIFF_APPLY_PATCHES>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:237
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--apply-patches> "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser le paramètre B<--apply-"
+"patches> de la ligne de commande. La valeur par défaut est I<no>."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:247
+msgid ""
+"This specifies the directory in which to look for the I<.dsc> and files, and "
+"is either an absolute path or relative to the top of the source tree. This "
+"corresponds to the B<--debs-dir> command line option. This directive could "
+"be used, for example, if you always use B<pbuilder> or B<svn-buildpackage> "
+"to build your packages. Note that it also affects B<debrelease>(1) in the "
+"same way, hence the strange name of the option."
+msgstr ""
+"Indiquer le répertoire dans lequel chercher les fichiers I<.dsc>, et est "
+"soit un chemin absolu ou un chemin relatif à la racine du répertoire racine. "
+"Cela correspond à l'option en ligne de commande B<--debs-dir>. Cette "
+"directive peut être utilisée par exemple si vous utilisez systématiquement "
+"B<pbuilder> ou B<svn-buildpackage> pour construire vos paquets. Remarquez "
+"que cela concerne également B<debrelease>(1), ce qui explique le nom étrange "
+"de l'option."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:251
+msgid ""
+"Normally the exit value will be 0 if no differences are reported and 1 if "
+"any are reported. If there is some fatal error, the exit code will be 255."
+msgstr ""
+"Normalement, la valeur de retour est 0 si aucune différence n'a été trouvée "
+"et 1 en cas de différence. Dans le cas d'une erreur fatale, la valeur de "
+"retour sera 255."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:259
+msgid ""
+"B<debdiff-apply>(1), B<diffstat>(1), B<dpkg-deb>(1), B<interdiff>(1), "
+"B<wdiff>(1), B<devscripts.conf>(5), B<diffoscope>(1)"
+msgstr ""
+"B<debdiff-apply>(1), B<diffstat>(1), B<dpkg-deb>(1), B<interdiff>(1), "
+"B<wdiff>(1), B<devscripts.conf>(5), B<diffoscope>(1)"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:264
+msgid ""
+"B<debdiff> was originally written as a shell script by Yann Dirson "
+"E<lt>dirson@debian.orgE<gt> and rewritten in Perl with many more features by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>. The software may be freely "
+"redistributed under the terms and conditions of the GNU General Public "
+"License, version 2."
+msgstr ""
+"B<debdiff> a été initialement écrit sous forme de script shell par Yann "
+"Dirson E<lt>dirson@debian.orgE<gt> et a été réécrit en Perl avec beaucoup "
+"plus de fonctionnalités par Julian Gilbey E<lt>jdg@debian.orgE<gt>. C'est un "
+"logiciel libre qui peut être redistribué suivant les termes de la licence "
+"publique générale GNU, version 2."
+
+#. type: TH
+#: ../scripts/debdiff-apply.1:15
+#, no-wrap
+msgid "DEBDIFF-APPLY"
+msgstr "DEBDIFF-APPLY"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:19
+msgid "debdiff-apply - apply a debdiff to a Debian source package"
+msgstr "debdiff-apply - Appliquer un debdiff à un paquet source Debian"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:23
+msgid "B<debdiff-apply> [options] [orig_dsc_or_dir] [patch_file]"
+msgstr "B<debdiff-apply> [options] [dsc_ou_dir_origine] [fichier_rustine]"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:26
+msgid "B<debdiff-apply> [options] E<lt> [patch_file]"
+msgstr "B<debdiff-apply> [options] E<lt> [fichier_rustine]"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:32
+msgid ""
+"B<debdiff-apply> takes a I<patchfile> that describes the differences between "
+"two Debian source packages I<old> and I<new>, and applies it to a target "
+"Debian source package I<orig>."
+msgstr ""
+"B<debdiff-apply> prend en argument un I<fichier_rustine> qui décrit les "
+"différences entre deux paquets source Debian I<ancien> et I<nouveau>, et "
+"l'applique à un paquet source Debian cible I<origine>."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:38
+msgid ""
+"I<orig> could either be the same as I<old> or it could be different. "
+"I<patchfile> is expected to be a unified diff between two Debian source "
+"trees, as what B<debdiff>(1) normally generates."
+msgstr ""
+"I<origine> peut être le même que I<ancien> ou être différent. "
+"I<fichier_rustine> doit être un fichier de différences unifié entre deux "
+"arborescences de sources Debian, tel que B<debdiff>(1) les crée normalement."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:42
+msgid ""
+"Any changes to I<debian/changelog> are dealt with specially, to avoid the "
+"conflicts that changelog diffs typically produce when applied naively. The "
+"exact behaviour may be tweaked in the future, so one should not rely on it."
+msgstr ""
+"Toutes les modifications de I<debian/changelog> sont traitées spécifiquement "
+"pour éviter les conflits que les différentiels de journaux de modifications "
+"produisent habituellement lorsqu'ils sont appliqués de façon simpliste. Le "
+"comportement exact pourra être ajusté à l'avenir, aussi, il ne faut pas s'y "
+"fier."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:47
+msgid ""
+"If I<patchfile> does not apply to I<orig>, even after the special-casing of "
+"I<debian/changelog>, no changes are made and B<debdiff-apply>(1) will exit "
+"with a non-zero error code."
+msgstr ""
+"Si un I<fichier_rustine> n'est pas appliqué à I<origine>, même après un "
+"traitement de la casse de I<debian/changelog>, aucune modification n'est "
+"réalisée et B<debdiff-apply>(1) se termine avec un code d'erreur non nul."
+
+#. type: SH
+#: ../scripts/debdiff-apply.1:48
+#, no-wrap
+msgid "ARGUMENTS"
+msgstr "PARAMÈTRES"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:49
+#, no-wrap
+msgid "orig_dsc_or_dir"
+msgstr "dsc_ou_dir_origine"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:54
+msgid ""
+"Target to apply the patch to. This can either be an unpacked source tree, or "
+"a \\[char46]dsc file. In the former case, the directory is modified in-"
+"place; in the latter case, a second .dsc is created. Default: I<.>"
+msgstr ""
+"Cible à laquelle appliquer la rustine. Ce peut être soit une arborescence de "
+"sources décompressée ou un fichier \\[char46]dsc. Dans le premier cas, le "
+"répertoire est modifié sur place ; dans l'autre, un second fichier .dsc est "
+"créé. Par défaut I<.> est utilisé"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:54
+#, no-wrap
+msgid "patch_file"
+msgstr "fichier_rustine"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:60
+msgid ""
+"Patch file to apply, in the format output by B<debdiff>(1). Default: I<\\,/"
+"dev/stdin\\/>"
+msgstr ""
+"Fichier de rustine à appliquer, dans le format produit par B<debdiff>(1). "
+"Par défaut I<\\,/dev/stdin\\/> est utilisé"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:65
+msgid "show this help message and exit"
+msgstr "afficher ce message d'aide et quitter"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:65 ../scripts/debsnap.1:42 ../scripts/sadt.pod:46
+#: ../doc/suspicious-source.1:38 ../scripts/tagpending.pl:106
+#: ../doc/wrap-and-sort.1:73
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:68
+msgid "Output more information"
+msgstr "Afficher plus de renseignements"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:68
+#, no-wrap
+msgid "B<-c> CHANGELOG, B<--changelog> CHANGELOG"
+msgstr "B<-c> JOURNAL DES MODIFICATIONS, B<--changelog> JOURNAL DES MODIFICATIONS"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:71
+msgid "Path to debian/changelog; default: debian/changelog"
+msgstr "Chemin vers debian/changelog. Par défaut debian/changelog est utilisé"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:71
+#, no-wrap
+msgid "B<-D> DISTRIBUTION, B<--distribution> DISTRIBUTION"
+msgstr "B<-D> DISTRIBUTION, B<--distribution> DISTRIBUTION"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:75
+msgid ""
+"Distribution to use, if the patch doesn't already contain a changelog; "
+"default: experimental"
+msgstr ""
+"Distribution à utiliser si le correctif ne contient pas déjà un journal des "
+"modifications. Par défaut experimental est utilisé"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:75
+#, no-wrap
+msgid "B<--repl>"
+msgstr "B<--repl>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:78
+msgid "Run the python REPL after processing."
+msgstr "Exécuter le REPL Python après le traitement."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:78
+#, no-wrap
+msgid "B<--source-version>"
+msgstr "B<--source-version>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:83
+msgid ""
+"Don't apply the patch; instead print out the version of the package that it "
+"is supposed to be applied to, or nothing if the patch does not specify a "
+"source version."
+msgstr ""
+"Ne pas appliquer le correctif ; afficher à la place la version du paquet "
+"auquel il est censé être appliqué, ou rien si le correctif ne précise pas "
+"une version du source."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:83
+#, no-wrap
+msgid "B<--target-version>"
+msgstr "B<--target-version>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:89
+msgid ""
+"Don't apply the patch; instead print out the new version of the package "
+"B<debdiff-apply>(1) would generate, when the patch is applied to the the "
+"given target package, as specified by the other arguments."
+msgstr ""
+"Ne pas appliquer le correctif ; afficher à la place la nouvelle version du "
+"paquet que B<debdiff-apply>(1) pourrait créer lors de l'application au "
+"paquet cible donné, tel que spécifié par les autres paramètres."
+
+#. type: SS
+#: ../scripts/debdiff-apply.1:89
+#, no-wrap
+msgid "For .dsc patch targets:"
+msgstr "Pour les cibles des correctifs .dsc :"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:90
+#, no-wrap
+msgid "B<--no-clean>"
+msgstr "B<--no-clean>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:94
+msgid ""
+"Don't clean temporary directories after a failure, so you can examine what "
+"failed."
+msgstr ""
+"Ne pas nettoyer les répertoires temporaires après un échec, pour pouvoir "
+"examiner ce qui a échoué."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:94
+#, no-wrap
+msgid "B<--quilt-refresh>"
+msgstr "B<--quilt-refresh>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:99
+msgid ""
+"If the building of the new source package fails, try to refresh patches "
+"using B<quilt>(1) then try building it again."
+msgstr ""
+"Si la construction du nouveau paquet source échoue, essayer d'actualiser les "
+"correctifs en utilisant B<quilt>(1), puis essayer une nouvelle construction."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:99
+#, no-wrap
+msgid "B<-d> DIRECTORY, B<--directory> DIRECTORY"
+msgstr "B<-d> RÉPERTOIRE, B<--directory> RÉPERTOIRE"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:104
+msgid ""
+"Extract the .dsc into this directory, which won't be cleaned up after "
+"B<debdiff-apply>(1) exits. If not given, then it will be extracted to a "
+"temporary directory."
+msgstr ""
+"Extraire le fichier .dsc dans ce répertoire qui ne sera pas nettoyé après "
+"l'achèvement de B<debdiff-apply>(1). S'il n'est pas indiqué, alors, le "
+"fichier sera extrait dans un répertoire temporaire."
+
+#. type: SH
+#: ../scripts/debdiff-apply.1:105 ../scripts/debsnap.1:143
+#: ../doc/edit-patch.1:37 ../doc/suspicious-source.1:51 ../doc/what-patch.1:27
+#: ../doc/wrap-and-sort.1:98
+#, no-wrap
+msgid "AUTHORS"
+msgstr "AUTEURS"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:108
+msgid ""
+"B<debdiff-apply> and this manual page were written by Ximin Luo "
+"E<lt>infinity0@debian.orgE<gt>"
+msgstr ""
+"B<debdiff-apply> et cette page de manuel ont été écrites par Ximin Luo "
+"E<lt>infinity0@debian.orgE<gt>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:110 ../doc/what-patch.1:34
+msgid ""
+"Both are released under the GNU General Public License, version 3 or later."
+msgstr ""
+"Toutes deux sont publiées sous la GNU General Public License, version 3 ou "
+"suivante."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:112
+msgid "B<debdiff>(1)"
+msgstr "B<debdiff>(1)"
+
+#. type: TH
+#: ../scripts/debi.1:1
+#, no-wrap
+msgid "DEBI"
+msgstr "DEBI"
+
+#. type: Plain text
+#: ../scripts/debi.1:4
+msgid "debi - install current version of generated Debian package"
+msgstr "debi - Installer la version actuelle d'un paquet Debian créé"
+
+#. type: Plain text
+#: ../scripts/debi.1:6
+msgid "B<debi> [I<options>] [I<changes file>] [I<package> ...]"
+msgstr "B<debi> [I<options>] [I<fichier_changes>] [I<paquet> ...]"
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debi.1:21
+msgid ""
+"B<debi> figures out the current version of a package and installs it. If a "
+"I<.changes> file is specified on the command line, the filename must end "
+"with I<.changes>, as this is how the program distinguishes it from package "
+"names. If not, then B<debi> has to be called from within the source code "
+"directory tree. In this case, it will look for the I<.changes> file "
+"corresponding to the current package version (by determining the name and "
+"version number from the changelog, and the architecture in the same way as "
+"B<dpkg-buildpackage>(1) does). It then runs B<debpkg -i> on every I<.deb> "
+"archive listed in the I<.changes> file to install them, assuming that all of "
+"the I<.deb> archives live in the same directory as the I<.changes> file. "
+"Note that you probably don't want to run this program on a I<.changes> file "
+"relating to a different architecture after cross-compiling the package!"
+msgstr ""
+"B<debi> détermine la version actuelle d'un paquet et l'installe. Si un "
+"fichier I<.changes> est fourni sur la ligne de commande, le nom du fichier "
+"doit se terminer par I<.changes>, puisque c'est comme cela que le programme "
+"le différencie d'un nom de paquet. Sinon, B<debi> doit être appelé depuis le "
+"répertoire du code source. Dans ce cas, il recherchera un fichier I<."
+"changes> correspondant à la version du paquet ; pour cela, il détermine le "
+"nom et la version grâce au fichier I<changelog>, et l'architecture est "
+"cherchée comme B<dpkg-buildpackage>(1) le ferait. Il installe ensuite avec "
+"B<debpkg -i> toutes les archives I<.deb> listées dans le fichier I<."
+"changes>, en supposant que toutes ces archives I<.deb> se trouvent dans le "
+"même répertoire que le fichier I<.changes>. Remarquez que vous ne voulez "
+"sûrement pas utiliser ce programme pour le fichier I<.changes> d'une autre "
+"architecture qui aurait été créé après intercompilation du paquet !"
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debi.1:40
+msgid ""
+"In common with several other scripts in the B<devscripts> package, B<debi> "
+"will climb the directory tree until it finds a I<debian/changelog> file. As "
+"a safeguard against stray files causing potential problems, it will examine "
+"the name of the parent directory once it finds the I<debian/changelog> file, "
+"and check that the directory name corresponds to the package name. "
+"Precisely how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Comme plusieurs autres scripts du paquet B<devscripts>, B<debi> parcourt une "
+"arborescence de répertoires jusqu'à trouver un fichier I<debian/changelog>. "
+"Pour éviter les problèmes posés par les fichiers égarés, il examine le nom "
+"du répertoire parent une fois qu'il a trouvé le fichier I<debian/changelog>, "
+"et vérifie que le nom du répertoire correspond au nom du paquet. La méthode "
+"précise utilisée est contrôlée par les deux variables du fichier de "
+"configuration B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> et "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, et les options en ligne de commande "
+"associées B<--check-dirname-level> et B<--check-dirname-regex>."
+
+#. type: Plain text
+#: ../scripts/debi.1:78 ../scripts/debrelease.1:87
+msgid ""
+"Look for the I<.changes> and I<.deb> files in I<directory> instead of the "
+"parent of the source directory. This should either be an absolute path or "
+"relative to the top of the source directory."
+msgstr ""
+"Chercher les fichiers I<.changes> et I<.deb> dans le I<répertoire> au lieu "
+"du répertoire parent du répertoire source. Cela doit être soit un chemin "
+"absolu, soit un chemin relatif à la racine du répertoire source."
+
+#. type: TP
+#: ../scripts/debi.1:78
+#, no-wrap
+msgid "B<-m>, B<--multi>"
+msgstr "B<-m>, B<--multi>"
+
+#. type: Plain text
+#: ../scripts/debi.1:81
+msgid "Search for a multiarch I<.changes> file, as created by B<dpkg-cross>."
+msgstr ""
+"Chercher un fichier I<.changes> multiarchitecture, tel que créé par B<dpkg-"
+"cross>."
+
+#. type: TP
+#: ../scripts/debi.1:81
+#, no-wrap
+msgid "B<-u>, B<--upgrade>"
+msgstr "B<-u>, B<--upgrade>"
+
+#. type: Plain text
+#: ../scripts/debi.1:87
+msgid ""
+"Only upgrade packages already installed on the system, rather than "
+"installing all packages listed in the I<.changes> file. Useful for multi-"
+"binary packages when you don't want to have all the binaries installed at "
+"once."
+msgstr ""
+"Limiter les mises à jour aux paquets déjà installés sur le système, plutôt "
+"que d'installer tous les paquets listés dans le fichier I<.changes>. C'est "
+"utile pour les paquets qui produisent plusieurs paquets binaires quand vous "
+"ne souhaitez pas que tous les paquets binaires soient installés à la fois."
+
+#. type: TP
+#: ../scripts/debi.1:95
+#, no-wrap
+msgid "B<--with-depends>"
+msgstr "B<--with-depends>"
+
+#. type: Plain text
+#: ../scripts/debi.1:98
+msgid "Attempt to satisfy the I<Depends> of a package when installing it."
+msgstr ""
+"Essayer de satisfaire les dépendances d'un paquet lors de son installation."
+
+#. type: TP
+#: ../scripts/debi.1:98
+#, no-wrap
+msgid "B<--tool> I<tool>"
+msgstr "B<--tool> I<outil>"
+
+#. type: Plain text
+#: ../scripts/debi.1:102
+msgid ""
+"Use the specified I<tool> for installing the dependencies of the package(s) "
+"to be installed. By default, B<apt-get> is used."
+msgstr ""
+"Utiliser l'I<outil> indiqué pour installer les dépendances des paquets à "
+"installer. Par défaut, B<apt-get> est utilisé."
+
+#. type: Plain text
+#: ../scripts/debi.1:125
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and I<."
+"deb> files, and is either an absolute path or relative to the top of the "
+"source tree. This corresponds to the B<--debs-dir> command line option. "
+"This directive could be used, for example, if you always use B<pbuilder> or "
+"B<svn-buildpackage> to build your packages. Note that it also affects "
+"B<debrelease>(1) in the same way, hence the strange name of the option."
+msgstr ""
+"Indiquer le répertoire dans lequel chercher les fichiers I<.changes> et I<."
+"deb>, avec soit un chemin absolu, soit un chemin relatif à la racine du "
+"répertoire racine. Cela correspond à l'option en ligne de commande B<--debs-"
+"dir>. Cette directive peut être utilisée par exemple si vous utilisez "
+"systématiquement B<pbuilder> ou B<svn-buildpackage> pour construire vos "
+"paquets. Remarquez que cela concerne également B<debrelease>(1), ce qui "
+"explique le nom étrange de l'option."
+
+#. type: Plain text
+#: ../scripts/debi.1:135
+msgid "B<debpkg>(1), B<devscripts.conf>(5)"
+msgstr "B<debpkg>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debi.1:140
+msgid ""
+"B<debi> was originally written by Christoph Lameter E<lt>clameter@debian."
+"orgE<gt>. The now-defunct script B<debit> was originally written by James "
+"R. Van Zandt E<lt>jrv@vanzandt.mv.comE<gt>. They have been moulded into one "
+"script together with B<debc>(1) and parts extensively modified by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"B<debi> a été initialement écrit par Christoph Lameter E<lt>clameter@debian."
+"orgE<gt>. Le script B<debit> (qui n'est désormais plus utilisé) a été écrit "
+"par James R. Van Zandt E<lt>jrv@vanzandt.mv.comE<gt>. Ils ont été rassemblés "
+"en un script, avec B<debc>(1), et ont été fortement modifiés par Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/debpkg.1:1
+#, no-wrap
+msgid "DEBPKG"
+msgstr "DEBPKG"
+
+#. type: Plain text
+#: ../scripts/debpkg.1:4
+msgid "debpkg - wrapper for dpkg"
+msgstr "debpkg - Encapsulation d'appels à dpkg"
+
+#. type: Plain text
+#: ../scripts/debpkg.1:6
+msgid "B<debpkg> I<dpkg-options>"
+msgstr "B<debpkg> I<options-dpkg>"
+
+#. type: Plain text
+#: ../scripts/debpkg.1:12
+msgid ""
+"B<debpkg> simply invokes B<dpkg>(1) but first becomes superuser so that "
+"B<dpkg> is able to install and remove packages. It also cleans the "
+"environment and resets PATH to a sane default: \"/usr/sbin:/usr/bin:/sbin:/"
+"bin:/usr/bin/X11\" so that local versions of programs are not run by "
+"accident."
+msgstr ""
+"B<debpkg> appelle simplement B<dpkg>(1), mais devient superutilisateur "
+"auparavant de façon à être capable d'installer ou de retirer des paquets. Il "
+"nettoie également l'environnement et remet le PATH à une valeur saine : \"/"
+"usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11\" de telle sorte que les versions "
+"locales des programmes ne soient pas exécutées par accident."
+
+#. type: Plain text
+#: ../scripts/debpkg.1:17
+msgid ""
+"B<debpkg> must be given superuser privileges in some way to function "
+"properly. B<Access to debpkg with those privileges is the same as having "
+"superuser access to your machine.> B<debpkg> will abort if it finds that it "
+"neither being run by root nor setuid root."
+msgstr ""
+"B<debpkg> doit avoir les droits du superutilisateur pour fonctionner "
+"correctement. B<Un accès à debpkg avec ces droits revient au même que "
+"d'avoir les droits du superutilisateur sur cette machine>. B<debpkg> "
+"quittera s'il n'est ni exécuté par le superutilisateur, ni setuid root."
+
+#. type: Plain text
+#: ../scripts/debpkg.1:23
+msgid ""
+"The B<devscripts> package has been designed to allow B<debpkg> to be made "
+"setuid root. This works by using a compiled wrapper script, which means "
+"that B<suidperl> is not required. See B<dpkg-statoverride>(8) if you wish "
+"to make this program setuid root. B<sudo> or B<super> could also "
+"conceivably be used."
+msgstr ""
+"Le paquet B<devscripts> a été conçu de façon à permettre à B<debpkg> d'être "
+"setuid root. Cela a été réalisé en utilisant un script d'appel compilé, ce "
+"qui signifie que B<suidperl> n'est pas nécessaire. Consultez B<dpkg-"
+"statoverride>(8) si vous voulez rendre ce programme setuid root. B<sudo> ou "
+"B<super> peuvent aussi être utilisés."
+
+#. type: Plain text
+#: ../scripts/debpkg.1:25
+msgid ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; minor modifications made by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt> ; modifications mineures par "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:3
+msgid "debrepro - reproducibility tester for Debian packages"
+msgstr "debrepro - Testeur de reproductibilité des paquets Debian"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:7
+msgid "B<debrepro> [I<OPTIONS>] [I<SOURCEDIR>]"
+msgstr "B<debrepro> [I<options>] [I<rép-source>]"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:11
+msgid ""
+"B<debrepro> will build a given source directory twice, with a set of "
+"variations between the first and the second build, and compare the produced "
+"binary packages. If B<diffoscope> is installed, it is used to compare non-"
+"matching binaries. If B<disorderfs> is installed, it is used during the "
+"build to inject non-determinism in filesystem listing operations."
+msgstr ""
+"B<debrepro> construira deux fois un répertoire source donné, avec un "
+"ensemble de variations entre la première et la deuxième construction, et "
+"comparera les paquets binaires produits. Si B<diffoscope> est installé, il "
+"est utilisé pour comparer les binaires qui diffèrent. Si B<disorderfs> est "
+"installé, il est utilisé lors de la construction pour injecter du non-"
+"déterminisme dans les opérations de liste du système de fichiers."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:18
+msgid ""
+"I<SOURCEDIR> must be a directory containing an unpacked Debian source "
+"package. If I<SOURCEDIR> is omitted, the current directory is assumed."
+msgstr ""
+"I<rép-source> doit être un répertoire contenant un paquet source Debian "
+"dépaqueté. Si I<rép-source> est omis, c'est le répertoire actuel qui est "
+"pris en compte."
+
+#. type: =head1
+#: ../scripts/debrepro.pod:21
+msgid "OUTPUT DIRECTORY"
+msgstr "RÉPERTOIRE DE SORTIE"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:23
+msgid ""
+"At the very end of a build, B<debrepro> will inform the location of the "
+"output directory where the build artifacts can be found. In that directory, "
+"you will find:"
+msgstr ""
+"À la toute fin d'une construction, B<debrepro> donnera la localisation du "
+"répertoire de sortie où les artefacts de constructions se trouvent. Dans ce "
+"répertoire, se trouve ceci :"
+
+#. type: =item
+#: ../scripts/debrepro.pod:29
+msgid "I<$OUTPUTDIR/first>"
+msgstr "I<$OUTPUTDIR/first>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:31
+msgid ""
+"Contains the results of the first build, including a copy of the source "
+"tree, and the resulting binary packages."
+msgstr ""
+"Contient les résultats de la première construction, y compris une copie de "
+"l'arborescence source et les paquets binaires résultants."
+
+#. type: =item
+#: ../scripts/debrepro.pod:34
+msgid "I<$OUTPUTDIR/first/build.sh>"
+msgstr "I<$OUTPUTDIR/first/build.sh>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:36
+msgid "Contains the exact build script that was used in the first build."
+msgstr ""
+"Contient le script exact de construction utilisé par la première "
+"construction."
+
+#. type: =item
+#: ../scripts/debrepro.pod:38
+msgid "I<$OUTPUTDIR/second>"
+msgstr "I<$OUTPUTDIR/second>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:40
+msgid ""
+"Contains the results of the second build, including a copy of the source "
+"tree, and the resulting binary packages."
+msgstr ""
+"Contient les résultats de la seconde construction, y compris une copie de "
+"l'arborescence source et les paquets binaires résultants."
+
+#. type: =item
+#: ../scripts/debrepro.pod:43
+msgid "I<$OUTPUTDIR/second/build.sh>"
+msgstr "I<$OUTPUTDIR/second/build.sh>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:45
+msgid "Contains the exact build script that was used in the second build."
+msgstr ""
+"Contient le script exact de construction utilisé par la seconde construction."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:49
+msgid ""
+"Taking a B<diff(1)> between I<$OUTPUTDIR/first/build.sh> and I<$OUTPUTDIR/"
+"second/build.sh> is an excellent way of figuring out exactly what changed "
+"between the two builds."
+msgstr ""
+"Créer un B<diff>(1) entre I<$OUTPUTDIR/first/build.sh> et I<$OUTPUTDIR/"
+"second/build.sh> est une manière excellente pour montrer ce qui a changé "
+"entre les deux constructions."
+
+#. type: =head1
+#: ../scripts/debrepro.pod:53
+msgid "SUPPORTED VARIATIONS"
+msgstr "VARIATIONS PRISES EN CHARGE"
+
+#. type: =item
+#: ../scripts/debrepro.pod:57
+msgid "B<user>"
+msgstr "B<user>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:59
+msgid ""
+"The I<$USER> environment variable will contain different values between the "
+"first and second builds."
+msgstr ""
+"La variable d'environnement I<$USER> contiendra des valeurs différentes "
+"entre la première et la seconde construction."
+
+#. type: =item
+#: ../scripts/debrepro.pod:62
+msgid "B<path>"
+msgstr "B<path>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:64
+msgid ""
+"During the second build, a fake, non-existing directory will be appended to "
+"the I<$PATH> environment variable."
+msgstr ""
+"Lors de la seconde construction, un répertoire fictif inexistant sera ajouté "
+"à la variable d'environnement I<$PATH>."
+
+#. type: =item
+#: ../scripts/debrepro.pod:67
+msgid "B<umask>"
+msgstr "B<umask>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:69
+msgid "The builds will use different umask settings."
+msgstr "Les constructions utiliseront des configurations différentes d'umask."
+
+#. type: =item
+#: ../scripts/debrepro.pod:71
+msgid "B<locale>"
+msgstr "B<locale>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:73
+msgid "Both I<$LC_ALL> and I<$LANG> will be different across the two builds."
+msgstr ""
+"À la fois I<$LC_ALL> et I<$LANG> seront différentes entre les deux "
+"constructions."
+
+#. type: =item
+#: ../scripts/debrepro.pod:75
+msgid "B<timezone>"
+msgstr "B<timezone>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:77
+msgid "I<$TZ> will be different across builds."
+msgstr "I<$TZ> sera différente entre les constructions."
+
+#. type: =item
+#: ../scripts/debrepro.pod:79
+msgid "B<filesystem-ordering>"
+msgstr "B<filesystem-ordering>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:81
+msgid ""
+"If B<disorderfs> is installed, both builds will be done under a disorderfs "
+"overlay directory. This will cause filesystem listing operations to be "
+"return items in a non-deterministic order."
+msgstr ""
+"Si B<disorderfs> est installé, les deux constructions seront réalisées dans "
+"un répertoire de recouvrement de disorderfs. Cela fera que les opérations de "
+"listage du système de fichiers renverront des objets dans un ordre non "
+"déterministe."
+
+#. type: =item
+#: ../scripts/debrepro.pod:85
+msgid "B<time>"
+msgstr "B<time>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:87
+msgid ""
+"The second build will be executed 213 days, 7 hours and 13 minutes in the "
+"future with regards to the current time (using B<faketime(1)>)."
+msgstr ""
+"La seconde construction sera exécutée 213 jours, 7 heures et 13 minutes dans "
+"le futur par rapport à l'heure courante (en utilisant B<faketime>(1))."
+
+#. type: =item
+#: ../scripts/debrepro.pod:96
+msgid "-s VARIATION, --skip VARIATION"
+msgstr "B<-s> I<VARIATION>, B<--skip> I<VARIATION>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:98
+msgid ""
+"Don't perform the named VARIATION. Variation names are the ones used in "
+"their description in section B<SUPPORTED VARIATIONS>."
+msgstr ""
+"Ne pas exécuter la VARIATION nommée. Les noms de variation sont ceux "
+"utilisés dans leur description dans la section B<VARIATIONS PRISES EN "
+"CHARGE>."
+
+#. type: =item
+#: ../scripts/debrepro.pod:101
+msgid "-b COMMAND, --before-second-build COMMAND"
+msgstr "B<-b> I<COMMANDE>, B<--before-second-build> I<COMMANDE>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:103
+msgid ""
+"Run COMMAND before performing the second build. This can be used for example "
+"to apply a patch to a source tree for the second build, and check whether "
+"(or how) the resulting binaries are affected."
+msgstr ""
+"Exécuter COMMANDE avant d'effectuer la seconde construction. Cela peut être "
+"utilisé pour appliquer un correctif à une arborescence source pour la "
+"seconde construction et vérifier si (ou comment) les exécutables produits "
+"sont affectés."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:107 ../scripts/salsa.pl:381
+msgid "Examples:"
+msgstr "Exemples :"
+
+#. type: verbatim
+#: ../scripts/debrepro.pod:109
+#, no-wrap
+msgid ""
+" $ debrepro --before-second-build \"git checkout branch-with-changes\"\n"
+"\n"
+msgstr ""
+" $ debrepro --before-second-build \"git checkout branch-with-changes\"\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/debrepro.pod:111
+#, no-wrap
+msgid ""
+" $ debrepro --before-second-build \"patch -p1 < /path/to/patch\"\n"
+"\n"
+msgstr ""
+" $ debrepro --before-second-build \"patch -p1 < /path/to/patch\"\n"
+"\n"
+
+#. type: =item
+#: ../scripts/debrepro.pod:113
+msgid "-B COMMAND, --build-command COMMAND"
+msgstr "-B COMMANDE, --build-command COMMANDE"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:115
+msgid "Use custom build command. Default: I<dpkg-buildpackage -b -us -uc>."
+msgstr ""
+"Utiliser une commande de construction personnalisée. Défaut : I<dpkg-"
+"buildpackage -b -us -uc>."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:117
+msgid ""
+"If a custom build command is specified, the restriction of only running "
+"against a Debian source tree is relaxed and you can run debrepro against any "
+"source directory."
+msgstr ""
+"Si une commande de construction personnalisée est indiquée, la restriction "
+"de ne fonctionner qu'avec une arborescence Debian est levée et ainsi on peut "
+"utiliser debrepo avec n'importe quelle source."
+
+#. type: =item
+#: ../scripts/debrepro.pod:121
+msgid "-a PATTERN, --artifact-pattern PATTERN"
+msgstr "-a PATTERN, --artifact-pattern PATTERN"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:123
+msgid ""
+"Define a file glob pattern to determine which artifacts need to be compared "
+"across the builds. Default: I<../*.deb>."
+msgstr ""
+"Définir un modèle pour déterminer quels artefacts doivent être comparés "
+"entre les constructions. Défaut : I<../*.deb>."
+
+#. type: =item
+#: ../scripts/debrepro.pod:126
+msgid "-n, --no-copy"
+msgstr "-n, --no-copy"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:128
+msgid ""
+"Do not copy the source directory to the temporary work directory before each "
+"build. Use this to run debrepro against the source directory directly."
+msgstr ""
+"Ne pas copier le répertoire source dans celui de travail avant chaque "
+"construction. A utiliser pour lancer debrepro directement dans le répertoire "
+"source."
+
+#. type: =item
+#: ../scripts/debrepro.pod:132
+msgid "-t TIME, --timeout TIME"
+msgstr "-t TIME, --timeout TIME"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:134
+msgid ""
+"Apply a timeout to all builds. I<TIME> must be a time specification "
+"compatible with GNU timeout(1)."
+msgstr ""
+"Applique un délai limite à toutes les constructions. I<TIME> doit être un "
+"délai compatible avec GNU timeout(1)."
+
+#. type: =item
+#: ../scripts/debrepro.pod:138
+msgid "-h, --help"
+msgstr "B<-h>, B<--help>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:140
+msgid "Display this help message and exit."
+msgstr "Afficher ce message d'aide et quitter."
+
+#. type: SH
+#: ../scripts/debrepro.pod:144 ../scripts/debsnap.1:102
+#: ../scripts/dscextract.1:20 ../scripts/transition-check.pl:54
+#: ../scripts/uscan.pl:1917 ../scripts/wnpp-check.1:28
+#, no-wrap
+msgid "EXIT STATUS"
+msgstr "VALEURS DE RETOUR"
+
+#. type: =item
+#: ../scripts/debrepro.pod:148 ../scripts/transition-check.pl:61
+#: ../scripts/who-permits-upload.pl:125
+msgid "0Z<>"
+msgstr "0Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:150
+msgid "Package is reproducible."
+msgstr "Le paquet est reproductible."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:152
+msgid ""
+"Reproducible here means that the two builds produced the exactly the same "
+"binaries, under the set of variations that B<debrepro> tests. Other sources "
+"of non-determinism in builds that are not yet tested might still affect "
+"builds in the wild."
+msgstr ""
+"Ici, reproductible signifie que les deux constructions produisent exactement "
+"les mêmes binaires, avec l'ensemble de variations testées par B<debrepro>. "
+"D'autres sources de non-déterminisme dans les constructions qui n'ont pas "
+"encore été testées pourraient encore affecter les constructions dans la "
+"vraie vie."
+
+#. type: =item
+#: ../scripts/debrepro.pod:157 ../scripts/transition-check.pl:66
+#: ../scripts/who-permits-upload.pl:129
+msgid "1Z<>"
+msgstr "1Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:159
+msgid "Package is not reproducible."
+msgstr "Le paquet n'est pas reproductible."
+
+#. type: =item
+#: ../scripts/debrepro.pod:161 ../scripts/who-permits-upload.pl:133
+msgid "2Z<>"
+msgstr "2Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:163
+msgid "The given input is not a valid Debian source package."
+msgstr "L'entrée donnée n'est pas un paquet source Debian valable."
+
+#. type: =item
+#: ../scripts/debrepro.pod:165
+msgid "3Z<>"
+msgstr "3Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:167
+msgid "Required programs are missing."
+msgstr "Les programmes nécessaires sont absents."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:173
+msgid "diffoscope (1), disorderfs (1), timeout(1)"
+msgstr "diffoscope (1), disorderfs (1), timeout(1)"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:177
+msgid "Antonio Terceiro <terceiro@debian.org>."
+msgstr "Antonio Terceiro <terceiro@debian.org>."
+
+#. type: TH
+#: ../scripts/debrelease.1:1
+#, no-wrap
+msgid "DEBRELEASE"
+msgstr "DEBRELEASE"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:4
+msgid "debrelease - a wrapper around dupload or dput"
+msgstr "debrelease - Encapsulation d'appels à dupload ou dput"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:6
+msgid "B<debrelease> [I<debrelease options>] [I<dupload/dput options>]"
+msgstr "B<debrelease> [I<options_debrelease>] [I<options_dupload/dput>]"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:15
+msgid ""
+"B<debrelease> is a simple wrapper around B<dupload> or B<dput>. It is "
+"called from within the source code tree of a package, and figures out the "
+"current version of a package. It then looks for the corresponding I<."
+"changes> file (which lists the files needed to upload in order to release "
+"the package) in the parent directory of the source code tree and calls "
+"B<dupload> or B<dput> with the I<.changes> file as parameter in order to "
+"perform the actual uploading."
+msgstr ""
+"B<debrelease> est un simple script d'encapsulation (\"wrapper\") d'appels à "
+"B<dupload> ou B<dput>. Il est appelé depuis l'arborescence des sources d'un "
+"paquet, et détermine la version actuelle d'un paquet. Il recherche ensuite "
+"un fichier I<.changes> correspondant (qui liste les fichiers nécessaires à "
+"l'envoi à l'archive Debian) dans le répertoire parent de l'arborescence du "
+"code source, et appelle ensuite B<dupload> ou B<dput> avec le fichier I<."
+"changes> en paramètre de façon à réaliser l'envoi (\"upload\")."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:20
+msgid ""
+"Options may be given to B<debrelease>; except for the ones listed below, "
+"they are passed on unchanged to B<dupload> or B<dput>. The B<devscripts> "
+"configuration files are also read by B<debrelease> as described below."
+msgstr ""
+"Vous pouvez fournir des options à B<debrelease>. À l'exception de celles qui "
+"sont listées ci-dessous, elles sont passées inchangées à B<dupload> ou "
+"B<dput>. Les fichiers de configuration de B<devscripts> sont également lus "
+"par B<debrelease>, comme indiqué ci-dessous."
+
+# NOTE: presque identique à beaucoup d'autres
+#. type: Plain text
+#: ../scripts/debrelease.1:31
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debrelease> will climb the directory tree until it finds a I<debian/"
+"changelog> file. As a safeguard against stray files causing potential "
+"problems, it will examine the name of the parent directory once it finds the "
+"I<debian/changelog> file, and check that the directory name corresponds to "
+"the package name. Precisely how it does this is controlled by two "
+"configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+"Comme plusieurs autres scripts du paquet B<devscripts>, B<debrelease> "
+"parcourt une arborescence de répertoires jusqu'à ce qu'il trouve un fichier "
+"I<debian/changelog>. Pour éviter les problèmes posés par les fichiers "
+"égarés, il examine le nom du répertoire parent une fois qu'il a trouvé le "
+"fichier I<debian/changelog>, et vérifie que le nom du répertoire correspond "
+"au nom du paquet. La façon précise utilisée est contrôlée par les deux "
+"variables du fichier de configuration B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> et "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, et les options en ligne de commande "
+"associées B<--check-dirname-level> et B<--check-dirname-regex>."
+
+#. type: TP
+#: ../scripts/debrelease.1:61 ../scripts/debrsign.1:31 ../scripts/debsign.1:68
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:67
+msgid ""
+"If this option is used, or the default I<.changes> file is not found but a "
+"source-only I<.changes> file is present, then this source-only I<.changes> "
+"file will be uploaded instead of an arch-specific one."
+msgstr ""
+"Si cette option est utilisée ou si le fichier par défaut I<.changes> n'est "
+"pas trouvé mais qu'un fichier I<.changes> pour les sources uniquement est "
+"présent, alors ce dernier fichier I<.changes> est téléchargé vers le serveur "
+"à la place de celui spécifique à une architecture."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:75
+msgid ""
+"See B<dpkg-architecture>(1) for a description of these options. They affect "
+"the search for the I<.changes> file. They are provided to mimic the "
+"behaviour of B<dpkg-buildpackage> when determining the name of the I<."
+"changes> file. If a plain B<-t> is given, it is taken to be the B<dupload> "
+"host-specifying option, and therefore signifies the end of the B<debrelease>-"
+"specific options."
+msgstr ""
+"Veuillez consulter B<dpkg-architecture>(1) pour une description de ces "
+"options. Ces options affectent la recherche du fichier I<.changes>. Elles "
+"consistent à imiter le comportement de B<dpkg-buildpackage> lors de la "
+"détermination du nom du fichier I<.changes>. Si une option B<-t> est donnée, "
+"elle est considérée comme une option définissant l'hôte pour B<dupload> et "
+"marque donc la fin des options spécifiques à B<debrelease>."
+
+#. type: TP
+#: ../scripts/debrelease.1:75 ../scripts/debrsign.1:41 ../scripts/debsign.1:78
+#, no-wrap
+msgid "B<--multi>"
+msgstr "B<--multi>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:81
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debrelease> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by B<dpkg-"
+"cross>."
+msgstr ""
+"Mode des fichiers I<.changes> multiarchitecture : cela signifie que "
+"B<debrelease> doit utiliser le fichier le plus récent respectant le modèle "
+"I<paquet_version_*+*.changes>, autorisant ainsi les fichiers I<.changes> "
+"produits par B<dpkg-cross>."
+
+#. type: TP
+#: ../scripts/debrelease.1:111
+#, no-wrap
+msgid "B<DEBRELEASE_UPLOADER>"
+msgstr "B<DEBRELEASE_UPLOADER>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:116
+msgid ""
+"The currently recognised values are I<dupload> and I<dput>, and it specifies "
+"which uploader program should be used. It corresponds to the B<--dupload> "
+"and B<--dput> command line options."
+msgstr ""
+"Les valeurs valables actuellement sont I<dupload> et I<dput>. Cette variable "
+"permet d'indiquer quel sera le programme utilisé pour réaliser l'envoi au "
+"serveur. Elle correspond à l'utilisation des options B<--dupload> ou B<--"
+"dput>."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:125
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and I<."
+"deb> files, and is either an absolute path or relative to the top of the "
+"source tree. This corresponds to the B<--debs-dir> command line option. "
+"This directive could be used, for example, if you always use B<pbuilder> or "
+"B<svn-buildpackage> to build your packages. Note that it also affects "
+"B<debc>(1) and B<debi>(1)."
+msgstr ""
+"Indiquer le répertoire dans lequel chercher les fichiers I<.changes> et I<."
+"deb> avec soit un chemin absolu, soit un chemin relatif à la racine du "
+"répertoire racine. Cela correspond à l'option en ligne de commande B<--debs-"
+"dir>. Cette directive peut être utilisée par exemple si vous utilisez "
+"systématiquement B<pbuilder> ou B<svn-buildpackage> pour construire vos "
+"paquets. Remarquez que cela concerne également B<debc>(1) et B<debi>(1)."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:136
+msgid "B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+msgstr "B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:138
+msgid ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, based on the original B<release> "
+"script by Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+msgstr ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, basé sur le script initial "
+"B<release> de Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+
+#. type: Content of the dhfirstname entity
+#: ../scripts/deb-reversion.dbk:30
+msgid "<firstname>martin f.</firstname>"
+msgstr "<firstname>Martin F.</firstname>"
+
+#. type: Content of the dhsurname entity
+#: ../scripts/deb-reversion.dbk:31
+msgid "<surname>krafft</surname>"
+msgstr "<surname>Krafft</surname>"
+
+#. type: Content of the dhmaintfirstname entity
+#: ../scripts/deb-reversion.dbk:32
+msgid "<firstname>Julian</firstname>"
+msgstr "<firstname>Julian</firstname>"
+
+#. type: Content of the dhmaintsurname entity
+#: ../scripts/deb-reversion.dbk:33
+msgid "<surname>Gilbey</surname>"
+msgstr "<surname>Gilbey</surname>"
+
+#. type: Content of the dhdate entity
+#: ../scripts/deb-reversion.dbk:35
+msgid "<date>Feb 13, 2006</date>"
+msgstr "<date>13 février 2006</date>"
+
+#. type: Content of the dhsection entity
+#: ../scripts/deb-reversion.dbk:38
+msgid "<manvolnum>1</manvolnum>"
+msgstr "<manvolnum>1</manvolnum>"
+
+#. type: Content of the dhemail entity
+#: ../scripts/deb-reversion.dbk:39
+msgid "<email>madduck@debian.org</email>"
+msgstr "<email>madduck@debian.org</email>"
+
+#. type: Content of the dhmaintemail entity
+#: ../scripts/deb-reversion.dbk:40
+msgid "<email>jdg@debian.org</email>"
+msgstr "<email>jdg@debian.org</email>"
+
+#. type: Content of the dhusername entity
+#: ../scripts/deb-reversion.dbk:41
+msgid "martin f. krafft"
+msgstr "martin F. Krafft"
+
+#. type: Content of the dhmaintusername entity
+#: ../scripts/deb-reversion.dbk:42
+msgid "Julian Gilbey"
+msgstr "Julian Gilbey"
+
+#. type: Content of the dhucpackage entity
+#: ../scripts/deb-reversion.dbk:43
+msgid "<refentrytitle>deb-reversion</refentrytitle>"
+msgstr "<refentrytitle>deb-reversion</refentrytitle>"
+
+#. type: Content of the dhcommand entity
+#: ../scripts/deb-reversion.dbk:44 ../scripts/deb-reversion.dbk:45
+msgid "deb-reversion"
+msgstr "deb-reversion"
+
+#. type: Content of the debian entity
+#: ../scripts/deb-reversion.dbk:47
+msgid "<productname>Debian</productname>"
+msgstr "<productname>Debian</productname>"
+
+#. type: Content of the gnu entity
+#: ../scripts/deb-reversion.dbk:48
+msgid "<acronym>GNU</acronym>"
+msgstr "<acronym>GNU</acronym>"
+
+#. type: Content of the gpl entity
+#: ../scripts/deb-reversion.dbk:49
+msgid "&gnu; <acronym>GPL</acronym>"
+msgstr "&gnu; <acronym>GPL</acronym>"
+
+#. type: Content of: <refentry><refentryinfo><address>
+#: ../scripts/deb-reversion.dbk:55
+#, no-wrap
+msgid ""
+" &dhemail;\n"
+" "
+msgstr ""
+" &dhemail;\n"
+" "
+
+#. type: Content of: <refentry><refentryinfo>
+#: ../scripts/deb-reversion.dbk:54
+msgid "<placeholder type=\"address\" id=\"0\"/> &dhdate;"
+msgstr "<placeholder type=\"address\" id=\"0\"/> &dhdate;"
+
+#. type: Content of: <refentry><refnamediv><refname>
+#: ../scripts/deb-reversion.dbk:65
+msgid "&dhcommand;"
+msgstr "&dhcommand;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: ../scripts/deb-reversion.dbk:67
+msgid "simple script to change the version of a .deb file"
+msgstr "simple script pour changer la version d'un fichier .deb"
+
+#. type: Content of: <refentry><refsynopsisdiv><cmdsynopsis>
+#: ../scripts/deb-reversion.dbk:72
+msgid ""
+"<command>&dhcommand;</command> <arg choice=\"opt\"> <replaceable>options</"
+"replaceable> </arg> <replaceable> .deb-file</replaceable> <arg "
+"choice=\"opt\" rep=\"repeat\"><replaceable>log message</replaceable></arg>"
+msgstr ""
+"<command>&dhcommand;</command> <arg choice=\"opt\"> <replaceable>options</"
+"replaceable> </arg> <replaceable> .deb-file</replaceable> <arg "
+"choice=\"opt\" rep=\"repeat\"><replaceable>message de journalisation</"
+"replaceable></arg>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:85
+msgid ""
+"<command>&dhcommand;</command> unpacks the specified <filename>.deb</"
+"filename> file, changes the version number in the relevant locations, "
+"appends a Debian <filename>changelog</filename> entry with the specified "
+"contents, and creates a new <filename>.deb</filename> file with the updated "
+"version."
+msgstr ""
+"<command>&dhcommand;</command> dépaquette le fichier <filename>.deb</"
+"filename> indiqué, change le numéro de version aux endroits appropriés, "
+"ajoute une entrée de <filename>changelog</filename> Debian avec le contenu "
+"indiqué, et crée un nouveau fichier <filename>.deb</filename> avec la "
+"version mise à jour."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:92
+msgid ""
+"By default, the tool creates a new version number suitable for local "
+"changes, such that the new package will be greater than the current one, but "
+"lesser than any future, official Debian packages. With <option>-v "
+"<replaceable class=\"parameter\">version</replaceable></option>, the version "
+"number can be specified directly. On the other hand, the <option>-c</"
+"option> simply calculates the new version number but does not generate a new "
+"package."
+msgstr ""
+"Par défaut, cet outil crée un numéro de version convenable pour les "
+"changements locaux, de manière à ce que le nouveau paquet soit considéré "
+"plus récent que le paquet actuel, mais moins récent que tout futur paquet "
+"Debian officiel. Avec <option>-v <replaceable class=\"parameter\">version</"
+"replaceable></option>, le numéro de version peut être indiqué directement. "
+"D'un autre côté, l'option <option>-c</option> se contente de calculer le "
+"nouveau numéro de version mais ne génère pas de nouveau paquet."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:103
+msgid ""
+"When building a <filename>.deb</filename> file, root privileges are required "
+"in order to have the correct permissions and ownerships in the resulting "
+"<filename>.deb</filename> file. This can be achieved either by running "
+"<command>&dhcommand;</command> as root or running under "
+"<citerefentry><refentrytitle>fakeroot</refentrytitle> <manvolnum>1</"
+"manvolnum></citerefentry>, as 'fakeroot &dhcommand; foo.deb'."
+msgstr ""
+"Lors de la construction d'un paquet, les droits du superutilisateur sont "
+"nécessaires pour obtenir les permissions et les propriétaires adéquats pour "
+"le contenu du fichier <filename>.deb</filename>. Cela peut être réalisé soit "
+"en lançant la commande <command>&dhcommand;</command> comme superutilisateur "
+"soit en lançant <citerefentry><refentrytitle>fakeroot</refentrytitle> "
+"<manvolnum>1</manvolnum></citerefentry>, comme \"fakeroot &dhcommand; toto."
+"deb\"."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:113
+msgid ""
+"With <option>-k <replaceable class=\"parameter\">hook</replaceable></"
+"option>, a hook script may be specified, which is run on the unpacked binary "
+"packages just before it is repacked. If you want to write changelog entries "
+"from within the hook, use '<command>dch -a -- <replaceable "
+"class=\"parameter\">your message</replaceable></command>'. (Alternatively, "
+"do not give a changelog entry on the <command>&dhcommand;</command> command "
+"line and <command>dch</command> will be called automatically.) The hook "
+"command must be placed in quotes if it has more than one word; it is called "
+"via <command>sh -c</command>."
+msgstr ""
+"Avec <option>-k <replaceable class=\"parameter\">hook</replaceable></"
+"option>, un script crochet (\"hook\") peut être précisé, et lancé sur les "
+"paquets binaires dépaquetés juste avant qu'ils soient rempaquetés. Si vous "
+"voulez écrire les entrées du fichier <filename>changelog</filename> avec ce "
+"script, utilisez la commande \"<command>dch -a -- <replaceable "
+"class=\"parameter\">votre message</replaceable></command>\". "
+"(Alternativement, vous pouvez ne pas indiquer l'entrée du "
+"<filename>changelog</filename> dans la ligne de commande <command>&dhcommand;"
+"</command>, <command>dch</command> sera alors appelée automatiquement.) La "
+"commande crochet doit être placée entre guillemets s'il y a plus d'un mot ; "
+"elle est appelée avec la commande <command>sh -c</command>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:131
+msgid ""
+"<option>-v</option> <replaceable class=\"parameter\">new-version</"
+"replaceable>"
+msgstr ""
+"<option>-v</option> <replaceable class=\"parameter\">nouvelle-version</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:132
+msgid ""
+"<option>--new-version</option> <replaceable class=\"parameter\">new-version</"
+"replaceable>"
+msgstr ""
+"<option>--new-version</option> <replaceable class=\"parameter\">nouvelle-"
+"version</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:135
+msgid ""
+"Specifies the version number to be used for the new version. Passed to "
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>."
+msgstr ""
+"Indiquer le numéro de version à utiliser pour la nouvelle version. Passé à "
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:145
+msgid ""
+"<option>-o</option> <replaceable class=\"parameter\">old-version</"
+"replaceable>"
+msgstr ""
+"<option>-o</option> <replaceable class=\"parameter\">ancienne-version</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:146
+msgid ""
+"<option>--old-version</option> <replaceable class=\"parameter\">old-version</"
+"replaceable>"
+msgstr ""
+"<option>--old-version</option> <replaceable class=\"parameter\">ancienne-"
+"version</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:149
+msgid ""
+"Specifies the version number to be used as the old version instead of the "
+"version stored in the <filename>.deb</filename>'s <filename>control</"
+"filename> file."
+msgstr ""
+"Indiquer le numéro de version à utiliser comme ancienne version à la place "
+"de la version indiquée dans le fichier <filename>control</filename> du "
+"paquet <filename>.deb</filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:157
+msgid "<option>-c</option>"
+msgstr "<option>-c</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:158
+msgid "<option>--calculate-only</option>"
+msgstr "<option>--calculate-only</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:161
+msgid ""
+"Only calculate and display the new version number which would be used; do "
+"not build a new <filename>.deb</filename> file. Cannot be used in "
+"conjunction with <option>-v</option>."
+msgstr ""
+"Se contenter de calculer et d'afficher le nouveau numéro de version qui "
+"serait utilisé ; ne pas construire de nouveau paquet <filename>.deb</"
+"filename>. Ne peut pas être utilisé en même temps que <option>-v</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:169
+msgid ""
+"<option>-s</option> <replaceable class=\"parameter\">string</replaceable>"
+msgstr ""
+"<option>-s</option> <replaceable class=\"parameter\">chaîne</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:170
+msgid ""
+"<option>--string</option> <replaceable class=\"parameter\">string</"
+"replaceable>"
+msgstr ""
+"<option>--string</option> <replaceable class=\"parameter\">chaîne</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:173
+msgid ""
+"Instead of using 'LOCAL.' as the version string to append to the old version "
+"number, use <replaceable class=\"parameter\">string</replaceable> instead."
+msgstr ""
+"Au lieu d'ajouter \"LOCAL.\" à l'ancien numéro de version, ajouter "
+"<replaceable class=\"parameter\">chaîne</replaceable>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:181
+msgid ""
+"<option>-k</option> <replaceable class=\"parameter\">hook-command</"
+"replaceable>"
+msgstr ""
+"<option>-k</option> <replaceable class=\"parameter\">commande-crochet</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:182
+msgid ""
+"<option>--hook</option> <replaceable class=\"parameter\">hook-command</"
+"replaceable>"
+msgstr ""
+"<option>--hook</option> <replaceable class=\"parameter\">commande-crochet</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:185
+msgid ""
+"A hook command to run after unpacking the old <filename>.deb</filename> file "
+"and modifying the <filename>changelog</filename>, and before packing up the "
+"new <filename>.deb</filename> file. Must be in quotes if it is more than "
+"one (shell) word. Only one hook command may be specified; if you want to "
+"perform more than this, you could specify 'bash' as the hook command, and "
+"you will then be given a shell to work in."
+msgstr ""
+"Une commande de crochet à lancer après avoir dépaqueté l'ancien fichier "
+"<filename>.deb</filename>, avoir modifié le fichier <filename>changelog</"
+"filename> et avant de construire le nouveau fichier <filename>.deb</"
+"filename>. Doit être placée entre guillemets si elle est constituée de plus "
+"d'un mot (du point de vue de l'interpréteur). Une seule commande de crochet "
+"peut être précisée ; si vous voulez effectuer plus de choses, vous pouvez "
+"indiquer \"bash\" comme commande de crochet, vous aurez ainsi une invite de "
+"commandes pour travailler."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:197
+msgid "<option>-D</option>"
+msgstr "<option>-D</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:198
+msgid "<option>--debug</option>"
+msgstr "<option>--debug</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:201
+msgid ""
+"Pass <option>--debug</option> to <citerefentry> <refentrytitle>dpkg-deb</"
+"refentrytitle> <manvolnum>1</manvolnum> </citerefentry>."
+msgstr ""
+"Passer <option>--debug</option> à <citerefentry> <refentrytitle>dpkg-deb</"
+"refentrytitle> <manvolnum>1</manvolnum> </citerefentry>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:211
+msgid "<option>-b</option>"
+msgstr "<option>-b</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:212
+msgid "<option>--force-bad-version</option>"
+msgstr "<option>--force-bad-version</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:215
+msgid ""
+"Pass <option>--force-bad-version</option> to <citerefentry> "
+"<refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>"
+msgstr ""
+"Passer <option>--force-bad-version</option> à <citerefentry> "
+"<refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:225
+msgid "<option>-h</option>"
+msgstr "<option>-h</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:226
+msgid "<option>--help</option>"
+msgstr "<option>--help</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:229
+msgid "Display usage information."
+msgstr "Afficher les informations d'utilisation."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:235
+msgid "<option>-V</option>"
+msgstr "<option>-V</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:236
+msgid "<option>--version</option>"
+msgstr "<option>--version</option>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:249
+msgid ""
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>, <citerefentry> <refentrytitle>dpkg-deb</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> "
+"<refentrytitle>fakeroot</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>"
+msgstr ""
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>, <citerefentry> <refentrytitle>dpkg-deb</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> "
+"<refentrytitle>fakeroot</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: ../scripts/deb-reversion.dbk:265
+msgid "DISCLAIMER"
+msgstr "AVERTISSEMENT"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:267
+msgid ""
+"&dhpackage; is a tool intended to help porters with modifying packages for "
+"other architectures, and to augment deb-repack, which creates modified "
+"packages with identical version numbers as the official packages. Chaos will "
+"ensue! With &dhpackage;, a proper version number can be selected, which does "
+"not obstruct the next official release but can be specifically pinned with "
+"APT or held with dpkg."
+msgstr ""
+"&dhpackage; est un outil censé aider les porteurs à modifier les paquets "
+"pour d'autres architectures et épauler deb-repack, qui crée des paquets "
+"modifiés avec des numéros de version identiques aux paquets officiels. Le "
+"chaos arrive. Avec &dhpackage;, un numéro de version adéquat est choisi, qui "
+"ne génère pas de conflit avec la prochaine publication officielle, mais qui "
+"peut être ajouté avec APT ou gelé avec dpkg."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:276
+msgid ""
+"Please take note that &dhpackage; does not come without problems. While it "
+"works fine in most cases, it may just not in yours. Especially, please "
+"consider that it changes binary packages (only!) and hence can break strict "
+"versioned dependencies between binary packages generated from the same "
+"source."
+msgstr ""
+"Veuillez noter que &dhpackage; ne vient pas sans problèmes. Il fonctionne "
+"bien dans la plupart des cas, mais peut ne pas fonctionner dans les vôtres. "
+"En particulier, veuillez noter qu'il ne change (que) des paquets binaires et "
+"donc peut casser des dépendances versionnées entre des paquets produits à "
+"partir de la même source."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:283
+msgid ""
+"You are using this tool at your own risk and I shall not shed a tear if your "
+"gerbil goes up in flames, your microwave attacks the stereo, or the angry "
+"slamming of your fist spills your coffee into the keyboard, which sets off a "
+"chain reaction resulting in a vast amount of money transferred from your "
+"account to mine."
+msgstr ""
+"Vous utilisez cet outil à vos risques et périls, et ne venez pas pleurer si "
+"votre souris s'enflamme, si votre four à micro-ondes attaque votre chaîne "
+"stéréo, ou si votre poing rageur renverse votre café sur votre clavier, ce "
+"qui déclenche une vaste réaction en chaîne, ayant pour conséquence un "
+"transfert bancaire conséquent de votre compte au mien."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:295
+msgid ""
+"&dhpackage; is Copyright 2004-5 by &dhusername; &dhemail; and modifications "
+"are Copyright 2006 by &dhmaintusername; &dhmaintemail;."
+msgstr ""
+"&dhpackage; est Copyright 2004-2005 &dhusername; &dhemail; ; les "
+"modifications sont Copyright 2006 &dhmaintusername; &dhmaintemail;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:300
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the Artistic License: <ulink>http://www.opensource.org/licenses/"
+"artistic-license.php</ulink>. On Debian systems, the complete text of the "
+"Artistic License can be found in <filename>/usr/share/common-licenses/"
+"Artistic</filename>."
+msgstr ""
+"Il est permis de copier, distribuer et/ou modifier ce document selon les "
+"termes de la licence Artistic : <ulink>http://www.opensource.org/licenses/"
+"artistic-license.php</ulink>. Sur les systèmes Debian, le texte complet de "
+"la licence Artistic est disponible dans <filename>/usr/share/common-licenses/"
+"Artistic</filename>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:309
+msgid ""
+"This manual page was written by &dhusername; &dhemail; and modified by "
+"&dhmaintusername; &dhmaintemail;."
+msgstr ""
+"Cette page de manuel a été écrite par &dhusername; &dhemail; et modifiée par "
+"&dhmaintusername; &dhmaintemail;."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:198
+msgid ""
+"deb-why-removed - shows the reason a package was removed from the archive"
+msgstr ""
+"deb-why-removed - affiche la raison pour laquelle un paquet a été supprimé "
+"de l'archive"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:202
+msgid "B<deb-why-removed> [I<option>...] I<package>..."
+msgstr "B<deb-why-removed> [I<option>...] I<package>..."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:206
+msgid ""
+"This program will download the removals metadata from the archive, search "
+"and print the entries within for a source or binary package name match."
+msgstr ""
+"Ce programme télécharge les metadonnées de l'archive liées aux suppressions, "
+"cherche et affiche les entrées dont le nom de paquet source ou binaire "
+"correspond."
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:213
+msgid "B<-u>, B<--url> I<URL>"
+msgstr "B<-u>, B<--url> I<URL>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:215
+msgid ""
+"URL to the archive removals deb822-formatted file list. This can be either "
+"an actual URL (https://, http://, file://), an pathname or an origin name. "
+"Currently the only origin name known is B<debian>."
+msgstr ""
+"URL de la liste des suppressions de l'archive au format deb822. Ceci peut "
+"être une URL (https://, http://, file://), un chemin de fichier ou un nom "
+"original. Actuellement, le seul nom origine connu est B<debian>."
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:220
+msgid "B<--no-refresh>"
+msgstr "B<--no-refresh>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:222
+msgid ""
+"Do not refresh the cached removals file even if there is a newer version in "
+"the archive."
+msgstr ""
+"Ne pas rafraîchir le cache des fichiers supprimés même s'il y a une nouvelle "
+"version."
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:225
+msgid "B<-h>, B<-?>, B<--help>"
+msgstr "B<-h>, B<-?>, B<--help>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:227 ../scripts/sadt.pod:66
+msgid "Show a help message and exit."
+msgstr "Afficher un message d'aide et quitter."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:231
+msgid "Show the program version."
+msgstr "Afficher la version du programme."
+
+#. type: SH
+#: ../scripts/deb-why-removed.pl:235 ../scripts/debsnap.1:130
+#: ../scripts/diff2patches.1:28
+#, no-wrap
+msgid "FILES"
+msgstr "FICHIERS"
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:239
+msgid "I<cachedir>B</devscripts/deb-why-removed/>"
+msgstr "I<cachedir>B</devscripts/deb-why-removed/>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:241
+msgid ""
+"This directory contains the cached removal files downloaded from the "
+"archive. I<cachedir> will be either B<$XDG_CACHE_HOME> or if that is not "
+"defined B<$HOME/.cache/>."
+msgstr ""
+"Ce répertoire contient le cache de la liste des fichiers supprimés "
+"téléchargée depuis l'archive. I<cachedir> se trouve dans B<$XDG_CACHE_HOME> "
+"ou à défaut dans B<$HOME/.cache/>."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:249
+msgid "L<https://ftp-master.debian.org/#removed>"
+msgstr "L<https://ftp-master.debian.org/#removed>"
+
+#. type: TH
+#: ../scripts/debrsign.1:1
+#, no-wrap
+msgid "DEBRSIGN"
+msgstr "DEBRSIGN"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:4
+msgid "debrsign - remotely sign a Debian .changes and .dsc file pair using SSH"
+msgstr ""
+"debrsign - Signer des fichiers .changes et .dsc Debian à distance avec SSH"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:7
+msgid ""
+"B<debrsign> [I<options>] [I<user>B<@>]I<remotehost> [I<changes-file>|I<dsc-"
+"file>]"
+msgstr ""
+"B<debrsign> [I<options>] [I<utilisateur>B<@>]I<hôte_distant> [I<fichier-"
+"changes>|I<fichier-dsc>]"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:15
+msgid ""
+"B<debrsign> takes either an unsigned I<.dsc> file or an unsigned I<.changes> "
+"file and the associated unsigned I<.dsc> file (found by replacing the "
+"architecture name and I<.changes> by I<.dsc>) if it appears in the I<."
+"changes> file and signs them by copying them to the remote machine using "
+"B<ssh>(1) and remotely running B<debsign>(1) on that machine. All options "
+"not listed below are passed to the B<debsign> program on the remote machine."
+msgstr ""
+"B<debrsign> prend soit un fichier I<.dsc> non signé soit un fichier I<."
+"changes> non signé et son fichier I<.dsc> non signé associé (obtenu en "
+"remplaçant le nom de l'architecture et l'extension I<.changes> en I<.dsc>) "
+"s'il apparaît dans le fichier I<.changes>, et les signe en les copiant sur "
+"la machine distante en utilisant B<ssh>(1) et en exécutant à distance "
+"B<debsign>(1) sur cette machine. Toute option non listée ci-dessous est "
+"passée au programme B<debsign> sur la machine distante."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:19
+msgid ""
+"If a I<.changes> or I<.dsc> file is specified, it is signed, otherwise, "
+"I<debian/changelog> is parsed to determine the name of the I<.changes> file "
+"to look for in the parent directory."
+msgstr ""
+"Si un fichier I<.changes> ou I<.dsc> est fourni, il est signé. Sinon, "
+"I<debian/changelog> est analysé pour déterminer le nom du fichier I<."
+"changes> à rechercher dans le répertoire parent."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debrsign.1:25
+msgid ""
+"This utility is useful if a developer must build a package on one machine "
+"where it is unsafe to sign it; they need then only transfer the small I<."
+"dsc> and I<.changes> files to a safe machine and then use the B<debsign> "
+"program to sign them before transferring them back. This program automates "
+"this process."
+msgstr ""
+"Cet utilitaire permet à un développeur de construire un paquet sur une "
+"machine où il serait dangereux (du point de vue de la sécurité) de réaliser "
+"une signature. Il suffit de transférer les petits fichiers I<.dsc> et I<."
+"changes> sur une machine sûre et d'utiliser le programme B<debsign> pour les "
+"signer avant de les renvoyer. Ce programme automatise ce processus."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:30
+msgid ""
+"To do it the other way round, that is to connect to an unsafe machine to "
+"download the I<.dsc> and I<.changes> files, to sign them locally and then to "
+"transfer them back, see the B<debsign>(1) program, which can do this task."
+msgstr ""
+"Consultez aussi B<debsign>(1), qui permet d'effectuer l'opération dans "
+"l'autre sens, c'est-à-dire se connecter à la machine non sûre pour "
+"télécharger les fichiers I<.dsc> et I<.changes>, signer les fichiers "
+"localement, puis les renvoyer."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:35 ../scripts/debsign.1:72
+msgid ""
+"Look for a source-only I<.changes> file instead of a binary-build I<."
+"changes> file."
+msgstr ""
+"Chercher un fichier I<.changes> uniquement pour le source plutôt qu'un "
+"fichier I<.changes> correspondant à un paquet binaire."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:47
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debrsign> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by B<dpkg-"
+"cross>."
+msgstr ""
+"Mode des fichiers I<.changes> multiarchitecture : cela signifie que "
+"B<debrsign> doit utiliser le fichier le plus récent respectant le modèle "
+"I<paquet_version_*+*.changes>, autorisant ainsi les fichiers I<.changes> "
+"produits par B<dpkg-cross>."
+
+#. type: TP
+#: ../scripts/debrsign.1:47
+#, no-wrap
+msgid "B<--path >I<remote-path>"
+msgstr "B<--path> I<chemin-distant>"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:50
+msgid "Specify a path to the GPG binary on the remote host."
+msgstr "Indiquer le chemin du programme GPG sur l'hôte distant."
+
+#. type: TP
+#: ../scripts/debrsign.1:53
+#, no-wrap
+msgid "B<Other options>"
+msgstr "B<Autres options>"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:57
+msgid "All other options are passed on to B<debsign> on the remote machine."
+msgstr ""
+"Toutes les autres options sont passées à B<debsign> sur la machine distante."
+
+#. type: TP
+#: ../scripts/debrsign.1:63
+#, no-wrap
+msgid "B<DEBRSIGN_PGP_PATH>"
+msgstr "B<DEBRSIGN_PGP_PATH>"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:66
+msgid "Equivalent to passing B<--path> on the command line (see above.)"
+msgstr ""
+"Équivaut à utiliser l'option B<--path> en ligne de commande (voir ci-dessus)."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:70
+msgid "B<debsign>(1), B<dpkg-architecture>(1), B<ssh>(1)"
+msgstr "B<debsign>(1), B<dpkg-architecture>(1), B<ssh>(1)"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:72 ../scripts/debsign.1:146
+msgid ""
+"This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt> and is "
+"copyright under the GPL, version 2 or later."
+msgstr ""
+"Ce programme a été écrit par Julian Gilbey E<lt>jdg@debian.orgE<gt> et est "
+"distribué sous licence GPL, version 2 ou ultérieure."
+
+#. type: TH
+#: ../scripts/debsign.1:1
+#, no-wrap
+msgid "DEBSIGN"
+msgstr "DEBSIGN"
+
+#. type: Plain text
+#: ../scripts/debsign.1:4
+msgid "debsign - sign a Debian .changes and .dsc file pair using GPG"
+msgstr ""
+"debsign - Signer une paire de fichiers .changes et .dsc Debian avec GPG"
+
+#. type: Plain text
+#: ../scripts/debsign.1:6
+msgid ""
+"B<debsign> [I<options>] [I<changes-file>|I<dsc-file>|I<commands-file> ...]"
+msgstr ""
+"B<debsign> [I<options>] [I<fichier-changes>|I<fichier-dsc>|I<fichier-"
+"commands> ...]"
+
+#. type: Plain text
+#: ../scripts/debsign.1:14
+msgid ""
+"B<debsign> mimics the signing aspects (and bugs) of B<dpkg-"
+"buildpackage>(1). It takes a I<.dsc>, I<.buildinfo>, or I<.changes> file "
+"and signs it, and any child I<.dsc>, I<.buildinfo>, or I<.changes> files "
+"directly or indirectly referenced by it, using the GNU Privacy Guard. It is "
+"careful to calculate the size and checksums of any newly signed child files "
+"and replace the original values in the parent file."
+msgstr ""
+"B<debsign> imite les aspects (et les bogues) concernant la signature de "
+"B<dpkg-buildpackage>(1). Il prend un fichier I<.dsc>, I<.buildinfo> ou I<."
+"changes> et le signe ainsi que les fichiers I<.dsc>, I<.buildinfo>, ou I<."
+"changes> enfants qu'il mentionne directement ou indirectement, en utilisant "
+"GNU Privacy Guard. Il fait attention à calculer la taille et la somme de "
+"contrôle de tous les nouveaux fichiers enfants signés et remplace les "
+"valeurs originales dans le fichier parent."
+
+#. type: Plain text
+#: ../scripts/debsign.1:18
+msgid ""
+"If no file is specified, I<debian/changelog> is parsed to determine the name "
+"of the I<.changes> file to look for in the parent directory."
+msgstr ""
+"Si aucun fichier n'est spécifié, I<debian/changelog> est analysé pour "
+"déterminer le nom du fichier I<.changes> à rechercher dans le répertoire "
+"parent."
+
+#. type: Plain text
+#: ../scripts/debsign.1:22
+msgid ""
+"If a I<.commands> file is specified it is first validated (see the details "
+"at I<ftp://ftp.upload.debian.org/pub/UploadQueue/README>), and the name "
+"specified in the Uploader field is used for signing."
+msgstr ""
+"Si un fichier I<.commands> est indiqué, il est validé en premier (voir les "
+"détails I<ftp://ftp.upload.debian.org/pub/UploadQueue/README>) ; le nom "
+"indiqué dans le champ Uploader est utilisé pour la signature."
+
+# NOTE: presque identique à une autre chaîne
+#. type: Plain text
+#: ../scripts/debsign.1:36
+msgid ""
+"This utility is useful if a developer must build a package on one machine "
+"where it is unsafe to sign it; they need then only transfer the small I<."
+"dsc>, I<.buildinfo> and I<.changes> files to a safe machine and then use the "
+"B<debsign> program to sign them before transferring them back. This process "
+"can be automated in two ways. If the files to be signed live on the "
+"B<remote> machine, the B<-r> option may be used to copy them to the local "
+"machine and back again after signing. If the files live on the B<local> "
+"machine, then they may be transferred to the remote machine for signing "
+"using B<debrsign>(1). However note that it is probably safer to have your "
+"trusted signing machine use B<debsign> to connect to the untrusted non-"
+"signing machine, rather than using B<debrsign> to make the connection in the "
+"reverse direction."
+msgstr ""
+"Cet utilitaire permet à un développeur de construire un paquet sur une "
+"machine où il serait dangereux (du point de vue de la sécurité) de réaliser "
+"une signature. Il suffit de transférer les petits fichiers I<.dsc>, I<."
+"buildinfo> et I<.changes> sur une machine sûre et d'utiliser le programme "
+"B<debsign> pour les signer avant de les renvoyer. Ce processus peut être "
+"automatisé de deux façons. Si les fichiers à signer se trouvent sur la "
+"machine B<distante>, l'option B<-r> peut être utilisée pour les copier sur "
+"la machine locale où ils seront signés puis de les recopier sur la machine "
+"distante. Si les fichiers se trouvent sur la machine B<locale>, ils peuvent "
+"être transférés sur la machine distante pour être signés en utilisant "
+"B<debrsign>(1). Notez néanmoins qu'il est probablement plus sûr que votre "
+"machine de signature sûre utilise B<debsign> pour se connecter à la machine "
+"non sûre, plutôt que d'utiliser B<debrsign> pour se connecter en direction "
+"inverse."
+
+#. type: Plain text
+#: ../scripts/debsign.1:39
+msgid ""
+"This program can take default settings from the B<devscripts> configuration "
+"files, as described below."
+msgstr ""
+"Ce programme peut utiliser des paramètres par défaut des fichiers de "
+"configuration de B<devscripts>, comme décrit ci-dessous."
+
+#. type: TP
+#: ../scripts/debsign.1:40
+#, no-wrap
+msgid "B<-r >[I<username>B<@>]I<remotehost>"
+msgstr "B<-r> [I<nom_utilisateur>@]I<hôte_distant>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:48
+msgid ""
+"The files to be signed live on the specified remote host. In this case, a "
+"I<.dsc>, I<.buildinfo> or I<.changes> file must be explicitly named, with an "
+"absolute directory or one relative to the remote home directory. B<scp> "
+"will be used for the copying. The [I<username>B<@>]I<remotehost>B<:"
+">I<filename> syntax is permitted as an alternative. Wildcards (B<*> etc.) "
+"are allowed."
+msgstr ""
+"Les fichiers à signer se trouvent sur l'hôte distant indiqué. Dans ce cas, "
+"un fichier I<.dsc>, I<.buildinfo> ou I<.changes> doit être explicitement "
+"nommé, avec un nom de répertoire absolu ou relatif au répertoire personnel "
+"distant. B<scp> sera utilisé pour le transfert. La syntaxe "
+"[I<nom_utilisateur>@]I<hôte_ distant>:I<nom_de_fichier> est également "
+"permise. Les jokers (B<*>, etc.) sont autorisés."
+
+#. type: TP
+#: ../scripts/debsign.1:48
+#, no-wrap
+msgid "B<-p>I<progname>"
+msgstr "B<-p>I<programme>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:52
+msgid ""
+"When B<debsign> needs to execute GPG to sign it will run I<progname> "
+"(searching the B<PATH> if necessary), instead of B<gpg>."
+msgstr ""
+"Lorsque B<debsign> doit exécuter GPG pour signer, il exécutera I<programme> "
+"(en le cherchant dans B<PATH> si nécessaire), au lieu de B<gpg>."
+
+#. type: TP
+#: ../scripts/debsign.1:52
+#, no-wrap
+msgid "B<-m>I<maintainer>"
+msgstr "B<-m>I<responsable>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:61
+msgid ""
+"Specify the maintainer name to be used for signing. (See B<dpkg-"
+"buildpackage>(1) for more information about the differences between B<-m>, "
+"B<-e> and B<-k> when building packages; B<debsign> makes no use of these "
+"distinctions except with respect to the precedence of the various options. "
+"These multiple options are provided so that the program will behave as "
+"expected when called by B<debuild>(1).)"
+msgstr ""
+"Indiquer le nom du responsable à utiliser pour la signature. Consultez "
+"B<dpkg-buildpackage>(1) pour plus d'informations concernant les différences "
+"entre B<-m>, B<-e> et B<-k> lors de la construction des paquets ; B<debsign> "
+"ne fait pas ces distinctions, mais respecte l'ordre de priorité des "
+"différentes options. Ces différentes options sont fournies de sorte que ce "
+"programme se comporte comme prévu lorsqu'il est appelé par B<debuild>(1)."
+
+#. type: TP
+#: ../scripts/debsign.1:61
+#, no-wrap
+msgid "B<-e>I<maintainer>"
+msgstr "B<-e>I<responsable>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:64
+msgid "Same as B<-m> but takes precedence over it."
+msgstr "Identique à B<-m>, mais avec une priorité plus élevée."
+
+#. type: TP
+#: ../scripts/debsign.1:64
+#, no-wrap
+msgid "B<-k>I<keyid>"
+msgstr "B<-k>I<identifiant_clef>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:68
+msgid ""
+"Specify the key ID to be used for signing; overrides any B<-m> and B<-e> "
+"options."
+msgstr ""
+"Indiquer l'identifiant de la clef à utiliser pour la signature. Cette option "
+"prévaut sur toute utilisation des options B<-m> et B<-e>."
+
+#. type: Plain text
+#: ../scripts/debsign.1:84
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debsign> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by B<dpkg-"
+"cross>."
+msgstr ""
+"Mode des fichiers I<.changes> multiarchitecture : cela signifie que "
+"B<debsign> doit utiliser le fichier le plus récent respectant le modèle "
+"I<paquet_version_*+*.changes>, autorisant ainsi les fichiers I<.changes> "
+"produits par B<dpkg-cross>."
+
+#. type: TP
+#: ../scripts/debsign.1:84
+#, no-wrap
+msgid "B<--re-sign>, B<--no-re-sign>"
+msgstr "B<--re-sign>, B<--no-re-sign>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:90
+msgid ""
+"Recreate signature, respectively use the existing signature, if the file has "
+"been signed already. If neither option is given and an already signed file "
+"is found the user is asked if he or she likes to use the current signature."
+msgstr ""
+"Respectivement recréer la signature ou utiliser celle existante si le "
+"fichier a déjà été signé. Si aucune option n'est fournie alors qu'un fichier "
+"signé est trouvé, il est demandé si la signature actuelle doit être utilisée."
+
+#. type: TP
+#: ../scripts/debsign.1:90
+#, no-wrap
+msgid "B<--debs-dir> I<DIR>"
+msgstr "B<--debs-dir> I<RÉP>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:95
+msgid ""
+"Look for the files to be signed in directory I<DIR> instead of the parent of "
+"the source directory. This should either be an absolute path or relative to "
+"the top of the source directory."
+msgstr ""
+"Chercher les fichiers à signer dans le répertoire I<RÉP> au lieu du "
+"répertoire parent du répertoire source. Cela doit être soit un chemin "
+"absolu, soit un chemin relatif à la racine du répertoire source."
+
+#. type: TP
+#: ../scripts/debsign.1:111
+#, no-wrap
+msgid "B<DEBSIGN_PROGRAM>"
+msgstr "B<DEBSIGN_PROGRAM>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:114
+msgid "Setting this is equivalent to giving a B<-p> option."
+msgstr "Lui attribuer une valeur équivaut à fournir une option B<-p>."
+
+#. type: TP
+#: ../scripts/debsign.1:114
+#, no-wrap
+msgid "B<DEBSIGN_MAINT>"
+msgstr "B<DEBSIGN_MAINT>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:117
+msgid "This is the B<-m> option."
+msgstr "Équivaut à utiliser l'option B<-m>."
+
+#. type: Plain text
+#: ../scripts/debsign.1:120
+msgid "And this is the B<-k> option."
+msgstr "Équivaut à utiliser l'option B<-k>."
+
+#. type: TP
+#: ../scripts/debsign.1:120
+#, no-wrap
+msgid "B<DEBSIGN_ALWAYS_RESIGN>"
+msgstr "B<DEBSIGN_ALWAYS_RESIGN>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:123
+msgid ""
+"Always re-sign files even if they are already signed, without prompting."
+msgstr ""
+"Toujours signer de nouveau les fichiers, même s'ils ont déjà été signés, "
+"sans demander."
+
+#. type: Plain text
+#: ../scripts/debsign.1:132
+msgid ""
+"This specifies the directory in which to look for the files to be signed, "
+"and is either an absolute path or relative to the top of the source tree. "
+"This corresponds to the B<--debs-dir> command line option. This directive "
+"could be used, for example, if you always use B<pbuilder> or B<svn-"
+"buildpackage> to build your packages. Note that it also affects "
+"B<debrelease>(1) in the same way, hence the strange name of the option."
+msgstr ""
+"Indiquer le répertoire dans lequel chercher les fichiers à signer, et est "
+"soit un chemin absolu ou un chemin relatif à la racine du répertoire racine. "
+"Cela correspond à l'option en ligne de commande B<--debs-dir>. Cette "
+"directive peut être utilisée par exemple si vous utilisez systématiquement "
+"B<pbuilder> ou B<svn-buildpackage> pour construire vos paquets. Remarquez "
+"que cela concerne également B<debrelease>(1), ce qui explique le nom étrange "
+"de l'option."
+
+#. type: Plain text
+#: ../scripts/debsign.1:144
+msgid ""
+"B<debrsign>(1), B<debuild>(1), B<dpkg-architecture>(1), B<dpkg-"
+"buildpackage>(1), B<gpg>(1), B<gpg2>(1), B<md5sum>(1), B<sha1sum>(1), "
+"B<sha256sum>(1), B<scp>(1), B<devscripts.conf>(5)"
+msgstr ""
+"B<debrsign>(1), B<debuild>(1), B<dpkg-architecture>(1), B<dpkg-"
+"buildpackage>(1), B<gpg>(1), B<gpg2>(1), B<md5sum>(1), B<sha1sum>(1),"
+"B<sha256sum>(1), B<scp>(1), B<devscripts.conf>(5)"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "DEBSNAP"
+msgstr "DEBSNAP"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "July 3, 2010"
+msgstr "3 juillet 2010"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "Debian devscripts"
+msgstr "Debian devscripts"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "DebSnap User Manual"
+msgstr "Manuel utilisateur de DebSnap"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:5
+msgid "debsnap - retrieve old snapshots of Debian packages"
+msgstr "debsnap - Récupérer d'anciennes versions de paquets Debian"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:9
+msgid "B<debsnap> [I<options>]I< package >[I<version>]"
+msgstr "B<debsnap> [I<options>]I< paquet >[I<version>]"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:12
+msgid "B<debsnap> [B<-h> | B<--help>]B< >[B<--version>]"
+msgstr "B<debsnap> [B<-h> | B<--help>]B< >[B<--version>]"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:17
+msgid ""
+"B<debsnap> is a tool to help with retrieving snapshots of old packages from "
+"a daily archive repository."
+msgstr ""
+"B<debsnap> est un outil qui permet de récupérer d'anciens paquets sur un "
+"dépôt d'archives journalières."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:20
+msgid ""
+"The only publicly available snapshot archive is currently located at "
+"I<https://snapshot.debian.org>"
+msgstr ""
+"La seule archive publique disponible se trouve sur I<http://snapshot.debian."
+"org>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:24
+msgid ""
+"By default, debsnap will download all the available versions for I<package> "
+"that are found in the snapshot archive. If a I<version> is specified, only "
+"that particular version will be downloaded, if available."
+msgstr ""
+"Par défaut, debsnap téléchargera toutes les versions du I<paquet> qui sont "
+"disponibles dans l'archive. Si une I<version> est indiquée, seule cette "
+"version sera téléchargée, si elle est disponible."
+
+#. type: TP
+#: ../scripts/debsnap.1:29
+#, no-wrap
+msgid "B<-d>I< destination>,I< >B<--destdir>I< destination>"
+msgstr "B<-d>I< destination>,I< >B<--destdir>I< destination>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:32
+msgid "Directory to place retrieved packages."
+msgstr "Répertoire où placer les paquets récupérés."
+
+#. type: =item
+#: ../scripts/debsnap.1:33 ../scripts/tagpending.pl:110
+#, no-wrap
+msgid "B<-f>, B<--force>"
+msgstr "B<-f>, B<--force>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:41
+msgid ""
+"Force writing into an existing I<destination>. By default B<debsnap> will "
+"insist the destination directory does not exist yet unless it is explicitly "
+"specified to be 'B<.>' (the current working directory). This is to avoid "
+"files being accidentally overwritten by what is fetched from the archive and "
+"to provide a guarantee for other scripts that only the files fetched will be "
+"present there upon completion."
+msgstr ""
+"Forcer l'écrasement d'une I<destination> existante. Par défaut, B<debsnap> "
+"insistera pour que le répertoire de destination n'existe pas, sauf s'il "
+"s'agit explicitement de \"B<.>\" (le répertoire de travail en cours). C'est "
+"pour éviter que des fichiers soient accidentellement écrasés par ce qui est "
+"récupéré de l'archive et pour garantir aux autres scripts que seuls les "
+"fichiers récupérés seront présents à la fin."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:46
+msgid ""
+"Report on the B<debsnap> configuration being used and progress during the "
+"download operation. Please always use this option when reporting bugs."
+msgstr ""
+"Faire un compte-rendu sur la configuration de B<debsnap> utilisée et la "
+"progression pendant le téléchargement. Veuillez toujours utiliser cette "
+"option pour les rapports de bogue."
+
+#. type: TP
+#: ../scripts/debsnap.1:47
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:50
+msgid "Don't download but just list versions."
+msgstr "Ne pas télécharger, mais afficher seulement la liste des versions."
+
+#. type: TP
+#: ../scripts/debsnap.1:51
+#, no-wrap
+msgid "B<--binary>"
+msgstr "B<--binary>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:54
+msgid "Download binary packages instead of source packages."
+msgstr "Télécharger les paquets binaires au lieu des paquets source."
+
+#. type: TP
+#: ../scripts/debsnap.1:55
+#, no-wrap
+msgid "B<-a>, B<--architecture>"
+msgstr "B<-a>, B<--architecture>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:60
+msgid ""
+"Specify architecture of downloaded binary packages. Implies B<--binary>. "
+"This can be given multiple times in order to download binary packages for "
+"multiple architectures."
+msgstr ""
+"Indiquer l'architecture des paquets binaires téléchargés, ce qui implique "
+"l'option B<--binary>. Cette option peut être indiquée plusieurs fois afin de "
+"télécharger les paquets binaires pour plusieurs architectures."
+
+#. type: TP
+#: ../scripts/debsnap.1:61
+#, no-wrap
+msgid "B<--first>"
+msgstr "B<--first>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:66
+msgid ""
+"Specify the minimum version of a package which will be downloaded. Any "
+"versions which compare larger than this, according to B<dpkg>, will be "
+"considered for download. May be used in combination with B<--last>."
+msgstr ""
+"Indiquer la version minimale d'un paquet qui sera téléchargé. Toutes les "
+"versions supérieures à cette version, selon B<dpkg>, seront envisagées pour "
+"le téléchargement. Peut être utilisé en combinaison avec B<--last>."
+
+#. type: TP
+#: ../scripts/debsnap.1:67
+#, no-wrap
+msgid "B<--last>"
+msgstr "B<--last>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:72
+msgid ""
+"Specify the maximum version of a package which will be downloaded. Any "
+"package versions which compare less than this, according to B<dpkg>, will be "
+"considered for download. May be used in combination with B<--first>."
+msgstr ""
+"Indiquer la version maximale d'un paquet qui sera téléchargé. Toutes les "
+"versions inférieures à cette version, selon B<dpkg>, seront envisagées pour "
+"le téléchargement. Peut être utilisé en combinaison avec B<--first>."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:76
+msgid "Show a summary of these options."
+msgstr "Afficher un résumé des options."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:80
+msgid "Show the version of B<debsnap>."
+msgstr "Afficher la version de B<debsnap>."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:85
+msgid ""
+"B<debsnap> may also be configured through the use of the following options "
+"in the devscripts configuration files:"
+msgstr ""
+"B<debsnap> peut aussi être configuré à l'aide des options suivantes des "
+"fichiers de configuration de devscripts :"
+
+#. type: TP
+#: ../scripts/debsnap.1:86
+#, no-wrap
+msgid "B<DEBSNAP_VERBOSE>"
+msgstr "B<DEBSNAP_VERBOSE>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:89
+msgid "Same as the command line option B<--verbose>. Set to I<yes> to enable."
+msgstr ""
+"Identique à l'option en ligne de commande B<--verbose>. Lui attribuer la "
+"valeur I<yes> pour activer l'option."
+
+#. type: TP
+#: ../scripts/debsnap.1:90
+#, no-wrap
+msgid "B<DEBSNAP_DESTDIR>"
+msgstr "B<DEBSNAP_DESTDIR>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:95
+msgid ""
+"Set a default path for the destination directory. If unset I<./source-"
+"E<lt>package_nameE<gt>> will be used. The command line option B<--destdir> "
+"will override this."
+msgstr ""
+"Définir un chemin par défaut pour le répertoire de destination. Si elle "
+"n'est pas définie, I<./source-E<lt>nom_paquetE<gt>> sera utilisé. L'option "
+"en ligne de commande B<--destdir> remplacera cette valeur."
+
+#. type: TP
+#: ../scripts/debsnap.1:96
+#, no-wrap
+msgid "B<DEBSNAP_BASE_URL>"
+msgstr "B<DEBSNAP_BASE_URL>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:99
+msgid "The base url for the snapshots archive."
+msgstr "L'URL de base pour l'archive d'instantanés (\"snapshots\")."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:101
+msgid "If unset this defaults to I<https://snapshot.debian.org>"
+msgstr ""
+"Si elle n'est pas définie, la valeur par défaut est I<http://snapshot.debian."
+"org>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:108
+msgid ""
+"B<debsnap> will return an exit status of 0 if all operations succeeded, 1 if "
+"a fatal error occurred, and 2 if some packages failed to be downloaded but "
+"operations otherwise succeeded as expected. In some cases packages may fail "
+"to be downloaded because they are no longer available on the snapshot "
+"mirror, so any caller should expect this may occur in normal use."
+msgstr ""
+"B<debsnap> renverra une valeur de retour de 0 si toutes les opérations ont "
+"fonctionné, de 1 si une erreur fatale a été rencontrée et de 2 si des "
+"paquets n'ont pas pu être téléchargés mais que les opérations ont toutefois "
+"réussi comme attendu. Dans certains cas, le téléchargement de paquets peut "
+"échouer parce qu'ils ne sont plus disponibles sur le miroir, donc vous "
+"devriez vous attendre à ce que ça arrive en temps normal."
+
+#. type: TP
+#: ../scripts/debsnap.1:110
+#, no-wrap
+msgid "B<debsnap -a amd64 xterm 256-1>"
+msgstr "B<debsnap -a amd64 xterm 256-1>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:113
+msgid ""
+"Download the binary package of a specific xterm version for amd64 "
+"architecture."
+msgstr ""
+"Télécharger une version particulière du paquet binaire xterm pour "
+"l'architecture amd64."
+
+#. type: TP
+#: ../scripts/debsnap.1:113
+#, no-wrap
+msgid "B<debsnap -a armel xterm>"
+msgstr "B<debsnap -a armel xterm>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:116
+msgid ""
+"Download binary packages for all versions of xterm for armel architecture."
+msgstr ""
+"Télécharger toutes les versions des paquets binaires xterm pour "
+"l'architecture armel."
+
+#. type: TP
+#: ../scripts/debsnap.1:116
+#, no-wrap
+msgid "B<debsnap --binary xterm 256-1>"
+msgstr "B<debsnap --binary xterm 256-1>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:119
+msgid ""
+"Download binary packages for a specific xterm version but for all "
+"architectures."
+msgstr ""
+"Télécharger une version particulière des paquets binaires xterm pour toutes "
+"les architectures."
+
+#. type: TP
+#: ../scripts/debsnap.1:119
+#, no-wrap
+msgid "B<debsnap --binary xterm>"
+msgstr "B<debsnap --binary xterm>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:122
+msgid ""
+"Download binary packages for all versions of xterm for all architectures."
+msgstr ""
+"Télécharger toutes les versions des paquets binaires xterm pour toutes les "
+"architectures."
+
+#. type: TP
+#: ../scripts/debsnap.1:122
+#, no-wrap
+msgid "B<debsnap -v --first 347-1 --last 348-2 xterm>"
+msgstr "B<debsnap -v --first 347-1 --last 348-2 xterm>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:126
+msgid ""
+"Download source packages for local architecture of xterm, between 347-1 and "
+"348-2 revisions, inclusive, showing the progress when doing it."
+msgstr ""
+"Télécharge les paquets source pour l'architecture locale de xterm, entre les "
+"versions 347-1 et 348-2 comprises, et montre la progression."
+
+#. type: TP
+#: ../scripts/debsnap.1:126
+#, no-wrap
+msgid "B<aptitude search '~i' -F '%p %V' | while read pkg ver; do debsnap -a $(dpkg-architecture -qDEB_HOST_ARCH) -a all $pkg $ver; done>"
+msgstr "B<aptitude search '~i' -F '%p %V' | while read pkg ver; do debsnap -a $(dpkg-architecture -qDEB_HOST_ARCH) -a all $pkg $ver; done>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:129
+msgid ""
+"Download binary packages of all packages that are installed on the system."
+msgstr ""
+"Télécharger les paquets binaires de tous les paquets installés sur le "
+"système."
+
+#. type: TP
+#: ../scripts/debsnap.1:131
+#, no-wrap
+msgid "I</etc/devscripts.conf>"
+msgstr "I</etc/devscripts.conf>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:134
+msgid ""
+"Global devscripts configuration options. Will override hardcoded defaults."
+msgstr ""
+"Options de configuration globales de devscripts. Elles remplaceront les "
+"valeurs par défaut codées en dur."
+
+#. type: TP
+#: ../scripts/debsnap.1:134
+#, no-wrap
+msgid "I<~/.devscripts>"
+msgstr "I<~/.devscripts>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:142
+msgid "B<devscripts>(1), B<devscripts.conf>(5), B<git-debimport>(1)"
+msgstr "B<devscripts>(1), B<devscripts.conf>(5), B<git-debimport>(1)"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:145
+msgid "David Paleino E<lt>dapal@debian.orgE<gt>"
+msgstr "David Paleino E<lt>dapal@debian.orgE<gt>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:148
+msgid "Copyright \\(co 2010 David Paleino"
+msgstr "Copyright \\(co 2010 David Paleino"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:152
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU General Public License, Version 3 or (at your option) "
+"any later version published by the Free Software Foundation."
+msgstr ""
+"Il est permis de copier, distribuer et/ou modifier ce document selon les "
+"termes de la GNU General Public License, version 3 ou (si vous le souhaitez) "
+"toute version ultérieure publiée par la Free Software Foundation."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:155
+msgid ""
+"On Debian systems, the complete text of the GNU General Public License can "
+"be found in I</usr/share/common-licenses/GPL>."
+msgstr ""
+"Sur les systèmes Debian, le texte complet de la GNU General Public License "
+"peut être trouvé dans I</usr/share/common-licenses/GPL>."
+
+#. type: SS
+#: ../scripts/debsnap.1:157
+#, no-wrap
+msgid "Reporting bugs"
+msgstr "Soumettre des rapports de bogue"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:160
+msgid ""
+"The program is part of the devscripts package. Please report bugs using "
+"`B<reportbug devscripts>`"
+msgstr ""
+"Le programme fait partie du paquet devscripts. Veuillez soumettre les "
+"rapports de bogue en utilisant \"B<reportbug devscripts>\""
+
+#. type: TH
+#: ../scripts/debuild.1:1
+#, no-wrap
+msgid "DEBUILD"
+msgstr "DEBUILD"
+
+#. type: Plain text
+#: ../scripts/debuild.1:4
+msgid "debuild - build a Debian package"
+msgstr "debuild - Construire un paquet Debian"
+
+#. type: Plain text
+#: ../scripts/debuild.1:7
+msgid ""
+"B<debuild> [I<debuild options>] [I<dpkg-buildpackage options>] [B<--lintian-"
+"opts> I<lintian options>]"
+msgstr ""
+"B<debuild> [I<options_debuild>] [I<options_dpkg-buildpackage>] [B<--lintian-"
+"opts> I<options_lintian>]"
+
+#. type: Plain text
+#: ../scripts/debuild.1:10
+msgid ""
+"B<debuild> [I<debuild options>] -- B<binary>|B<binary-arch>|B<binary-indep>|"
+"B<clean> ..."
+msgstr ""
+"B<debuild> [I<options_debuild>] -- B<binary>|B<binary-arch>|B<binary-indep>|"
+"B<clean> ..."
+
+#. type: Plain text
+#: ../scripts/debuild.1:31
+msgid ""
+"B<debuild> creates all the files necessary for uploading a Debian package. "
+"It first runs B<dpkg-buildpackage>, then runs B<lintian> on the I<.changes> "
+"file created (assuming that B<lintian> is installed), and finally signs the "
+"appropriate files (using B<debsign>(1) to do this instead of B<dpkg-"
+"buildpackage>(1) itself; all relevant key-signing options are passed on). "
+"Signing will be skipped if the distribution is I<UNRELEASED>, unless B<dpkg-"
+"buildpackage>'s B<--force-sign> option is used. Parameters can be passed to "
+"B<dpkg-buildpackage> and B<lintian>, where the parameters to the latter are "
+"indicated with the B<--lintian-opts> option. The allowable options in this "
+"case are B<--lintian> and B<--no-lintian> to force or skip the B<lintian> "
+"step, respectively. The default is to run B<lintian>. There are also "
+"various options available for setting and preserving environment variables, "
+"as described below in the Environment Variables section. In this method of "
+"running B<debuild>, we also save a build log to the file I<../"
+"E<lt>packageE<gt>_E<lt>versionE<gt>_E<lt>archE<gt>.build>."
+msgstr ""
+"B<debuild> crée tous les fichiers nécessaires pour envoyer un paquet à "
+"l'archive Debian. Il exécute dans un premier temps B<dpkg-buildpackage>, "
+"puis B<lintian> avec le fichier I<.changes> créé (en supposant que "
+"B<lintian> est installé), enfin il signe les fichiers appropriés (en "
+"utilisant B<debsign>(1) plutôt que B<dpkg-buildpackage>(1) ; toutes les "
+"options relatives à la signature lui sont passées). L'opération de signature "
+"sera ignorée si la distribution est I<UNRELEASED>, à moins que l'option B<--"
+"force-sign> de B<dpkg-buildpackage> soit utilisée. Des paramètres peuvent "
+"être fournis à B<dpkg-buildpackage> et B<lintian>, en utilisant les "
+"paramètres de l'option B<--lintian-opts> pour ce dernier. Les options B<--"
+"lintian> et B<--no-lintian> permettent de forcer ou d'empêcher l'exécution "
+"de B<lintian>. Par défaut, B<lintian> est exécuté. Il y a également d'autres "
+"options permettant de définir ou conserver des variables d'environnement, "
+"comme décrit dans la section B<VARIABLES D'ENVIRONNEMENT> ci-dessous. Cette "
+"façon d'exécuter B<debuild> permet également d'obtenir un journal de la "
+"construction du paquet dans I<../"
+"E<lt>paquetE<gt>_E<lt>versionE<gt>_E<lt>archE<gt>.build>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:48
+msgid ""
+"An alternative way of using B<debuild> is to use one or more of the "
+"parameters B<binary>, B<binary-arch>, B<binary-indep> and B<clean>, in which "
+"case B<debuild> will attempt to gain root privileges and then run I<debian/"
+"rules> with the given parameters. A B<--rootcmd=>I<gain-root-command> or B<-"
+"r>I<gain-root-command> option may be used to specify a method of gaining "
+"root privileges. The I<gain-root-command> is likely to be one of "
+"I<fakeroot>, I<sudo> or I<super>. See below for further discussion of this "
+"point. Again, the environment preservation options may be used. In this "
+"case, B<debuild> will also attempt to run B<dpkg-checkbuilddeps> first; this "
+"can be explicitly requested or switched off using the options B<-D> and B<-"
+"d> respectively. Note also that if either of these or a B<-r> option is "
+"specified in the configuration file option "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>, then it will be recognised even in this "
+"method of invocation of B<debuild>."
+msgstr ""
+"Une autre façon d'utiliser B<debuild> est d'utiliser un (ou plus) des "
+"paramètres B<binary>, B<binary-arch>, B<binary-indep> et B<clean>. Dans ce "
+"cas, B<debuild> cherchera à obtenir les droits du superutilisateur et à "
+"exécuter I<debian/rules> avec ce(s) paramètre(s). Les options B<--"
+"rootcmd>=I<commande_pour_devenir_superutilisateur> ou B<-"
+"r>I<commande_pour_devenir_superutilisateur> peuvent être utilisées. La "
+"I<commande_pour_devenir_superutilisateur> est en règle générale une de "
+"celles-ci : I<fakeroot>, I<sudo> ou I<super>. Lisez ci-dessous pour une "
+"discussion plus approfondie sur ce point. Encore une fois, les options "
+"permettant de préserver l'environnement peuvent être utilisées. Dans ce cas, "
+"B<debuild> cherchera également à exécuter dans un premier temps B<dpkg-"
+"checkbuilddeps> ; cela peut être explicitement demandé ou empêché avec les "
+"options B<-D> et B<-d>, respectivement. Remarquez également que si une de "
+"ces options ou si l'option B<-r> est indiquée dans la variable "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> du fichier de configuration, elle sera "
+"reconnue, même avec cette façon d'exécuter B<debuild>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:51
+msgid ""
+"B<debuild> also reads the B<devscripts> configuration files as described "
+"below. This allows default options to be given."
+msgstr ""
+"B<debuild> lit aussi les fichiers de configuration de B<devscripts> décrits "
+"ci-dessous. Cela permet de fournir des options à utiliser par défaut."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debuild.1:63
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debuild> will climb the directory tree until it finds a I<debian/"
+"changelog> file before attempting to build the package. As a safeguard "
+"against stray files causing potential problems, it will examine the name of "
+"the parent directory once it finds the I<debian/changelog> file, and check "
+"that the directory name corresponds to the package name. Precisely how it "
+"does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Comme plusieurs autres scripts du paquet B<devscripts>, B<debuild> parcourt "
+"une arborescence de répertoires jusqu'à trouver un fichier I<debian/"
+"changelog> avant de construire le paquet. Pour éviter les problèmes posés "
+"par les fichiers égarés, il examine le nom du répertoire parent une fois le "
+"fichier I<debian/changelog> trouvé, et vérifie que le nom du répertoire "
+"correspond au nom du paquet. La façon précise utilisée est contrôlée par les "
+"deux variables du fichier de configuration B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> "
+"et B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, et les options en ligne de commande "
+"associées B<--check-dirname-level> et B<--check-dirname-regex>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:88
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a '/', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'PACKAGE', this will be replaced by the source package name, as "
+"determined from the I<changelog>. The default value for the regex is: "
+"\\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and PACKAGE-"
+"version."
+msgstr ""
+"Le nom du répertoire est vérifié en testant si le nom du répertoire actuel "
+"(donné par B<pwd>(1)) correspond à l'expression rationnelle donnée par la "
+"variable B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> du fichier de configuration ou "
+"par l'option B<--check-dirname-regex> I<expression_rationnelle>. Il s'agit "
+"d'une expression rationnelle Perl (voir B<perlre>(1)), qui sera ancrée à son "
+"début et à sa fin. Si elle contient un \"/\", alors elle doit correspondre "
+"au chemin complet, sinon elle doit correspondre au nom de répertoire "
+"complet. Si elle contient la chaîne \"PACKAGE\", cette chaîne sera remplacée "
+"par le nom du paquet source déterminé par le fichier I<changelog>. La valeur "
+"par défaut de cette expression rationnelle est \"PACKAGE(-.+)?\", ce qui "
+"correspond aux répertoires nommés PACKAGE ou PACKAGE-version."
+
+#. type: Plain text
+#: ../scripts/debuild.1:98
+msgid ""
+"As environment variables can affect the building of a package, often "
+"unintentionally, B<debuild> sanitises the environment by removing all "
+"environment variables except for B<TERM>, B<HOME>, B<LOGNAME>, B<GNUPGHOME>, "
+"B<PGPPATH>, B<GPG_AGENT_INFO>, B<GPG_TTY>, B<DBUS_SESSION_BUS_ADDRESS>, "
+"B<FAKEROOTKEY>, B<DEBEMAIL>, B<DEB_>I<*>, the (B<C>, B<CPP>, B<CXX>, B<LD> "
+"and B<F>)B<FLAGS> variables and their B<_APPEND> counterparts and the locale "
+"variables B<LANG> and B<LC_>I<*>. B<TERM> is set to `dumb' if it is unset, "
+"and B<PATH> is set to \"/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11\"."
+msgstr ""
+"Comme les variables d'environnement peuvent affecter la construction d'un "
+"paquet, souvent de façon involontaire, B<debuild> nettoie l'environnement en "
+"enlevant toutes les variables d'environnement, à l'exception de B<TERM>, "
+"B<HOME>, B<LOGNAME>, B<GNUPGHOME>, B<PGPPATH>, B<GPG_AGENT_INFO>, "
+"B<GPG_TTY>, B<DBUS_SESSION_BUS_ADDRESS>, B<FAKEROOTKEY>, B<DEBEMAIL>, "
+"B<DEB_>I<*>, des variables (B<C>, B<CPP>, B<CXX>, B<LD> et B<F>)B<FLAGS> et "
+"les variables B<_APPEND> associées, ainsi que les variables pour les "
+"paramètres régionaux B<LANG> et B<LC_>I<*>. La variable B<TERM> vaut "
+"\"dumb\" si elle n'est pas définie, et B<PATH> est définie à \"/usr/sbin:/"
+"usr/bin:/sbin:/bin:/usr/bin/X11\"."
+
+#. type: Plain text
+#: ../scripts/debuild.1:109
+msgid ""
+"If a particular environment variable is required to be passed through "
+"untouched to the build process, this may be specified by using a B<--"
+"preserve-envvar> I<envvar> (which can also be written as B<-e> I<envvar> "
+"option). The environment may be left untouched by using the B<--preserve-"
+"env> option. However, even in this case, the B<PATH> will be set to the "
+"sane value described above. The B<only> way to prevent B<PATH> from being "
+"reset is to specify a B<--preserve-envvar PATH> option. But you are warned "
+"that using programs from non-standard locations can easily result in the "
+"package being broken, as it will not be able to be built on standard systems."
+msgstr ""
+"Si une variable d'environnement ne doit pas être modifiée pour la "
+"construction d'un paquet, il est possible d'utiliser B<--preserve-envvar> "
+"I<var> (ou B<-e> I<var>). L'environnement peut aussi être préservé en "
+"utilisant l'option B<--preserve-env>. Cependant, même dans ce cas le B<PATH> "
+"est remis à la valeur précisée ci-dessus. Le B<seul> moyen d'empêcher le "
+"B<PATH> d'être remis à zéro est d'utiliser une option B<--preserve-envvar "
+"PATH>. Mais soyez conscient qu'utiliser des programmes d'un emplacement non "
+"standard peut facilement résulter en un paquet cassé, puisqu'il ne sera pas "
+"possible de le construire sur des systèmes standards."
+
+#. type: Plain text
+#: ../scripts/debuild.1:113
+msgid ""
+"Note that one may add directories to the beginning of the sanitised B<PATH>, "
+"using the B<--prepend-path> option. This is useful when one wishes to use "
+"tools such as B<ccache> or B<distcc> for building."
+msgstr ""
+"Remarquez que des répertoire peuvent être ajoutés au début de la variable "
+"d'environnement B<PATH> en utilisant l'option B<--prepend-path>. C'est utile "
+"quand on veut utiliser des outils comme B<ccache> ou B<distcc> pour la "
+"construction d'un paquet."
+
+#. type: Plain text
+#: ../scripts/debuild.1:118
+msgid ""
+"It is also possible to avoid having to type something like I<FOO>B<=>I<bar "
+">B<debuild -e >I<FOO> by writing B<debuild -e >I<FOO>B<=>I<bar> or the long "
+"form B<debuild --set-envvar >I<FOO>B<=>I<bar>."
+msgstr ""
+"Il est également possible d'éviter d'avoir à écrire quelque chose comme "
+"I<TOTO>=I<titi> B<debuild -e> I<TOTO> en écrivant B<debuild -e> "
+"I<TOTO>=I<titi> ou la forme longue B<debuild --set-envvar> I<TOTO>=I<titi>."
+
+#. type: SH
+#: ../scripts/debuild.1:118
+#, no-wrap
+msgid "SUPERUSER REQUIREMENTS"
+msgstr "OBTENTION DES DROITS DU SUPERUTILISATEUR"
+
+#. type: Plain text
+#: ../scripts/debuild.1:128
+msgid ""
+"B<debuild> needs to be run as superuser to function properly. There are "
+"three fundamentally different ways to do this. The first, and preferable, "
+"method is to use some root-gaining command. The best one to use is probably "
+"B<fakeroot>(1), since it does not involve granting any genuine privileges. "
+"B<super>(1) and B<sudo>(1) are also possibilities. If no B<-r> (or B<--"
+"rootcmd>) option is given (and recall that B<dpkg-buildpackage> also accepts "
+"a B<-r> option) and neither of the following methods is used, then B<-"
+"rfakeroot> will silently be assumed."
+msgstr ""
+"B<debuild> doit être exécuté en tant que superutilisateur pour fonctionner "
+"correctement. Il y a trois façons fondamentalement différentes de faire "
+"cela. La première, et celle qui est conseillée, est d'utiliser une commande "
+"permettant de devenir superutilisateur. La meilleure d'entre elles est "
+"probablement B<fakeroot>(1), puisqu'elle ne nécessite pas d'accorder "
+"véritablement de droits. B<super>(1) et B<sudo>(1) sont d'autres "
+"possibilités. Si aucune option B<-r> (ou B<--rootcmd>) n'est donnée "
+"(rappelez-vous que B<dpkg-buildpackage> accepte également une option B<-r>) "
+"et qu'aucune des méthodes suivantes n'est utilisée, alors B<-rfakeroot> sera "
+"implicitement considérée."
+
+#. type: Plain text
+#: ../scripts/debuild.1:134
+msgid ""
+"The second method is to use some command such as B<su>(1) to become root, "
+"and then to do everything as root. Note, though, that B<lintian> will abort "
+"if it is run as root or setuid root; this can be overcome using the B<--"
+"allow-root> option of B<lintian> if you know what you are doing."
+msgstr ""
+"La deuxième méthode est d'utiliser une commande comme B<su>(1) pour devenir "
+"superutilisateur, et ensuite de réaliser toutes les opérations en tant que "
+"superutilisateur. Remarquez cependant que B<lintian> s'arrêtera s'il est "
+"exécuté en tant que superutilisateur ou setuid root ; cela peut être "
+"contourné en utilisant l'option B<--allow-root> de B<lintian> si vous êtes "
+"sûr de vous."
+
+#. type: Plain text
+#: ../scripts/debuild.1:150
+msgid ""
+"The third possible method is to have B<debuild> installed as setuid root. "
+"This is not the default method, and will have to be installed as such by the "
+"system administrator. It must also be realised that anyone who can run "
+"B<debuild> as root or setuid root has B<full access to the whole machine>. "
+"This method is therefore not recommended, but will work. B<debuild> could "
+"be installed with mode 4754, so that only members of the owning group could "
+"run it. A disadvantage of this method would be that other users would then "
+"not be able to use the program. There are many other variants of this "
+"option involving multiple copies of B<debuild>, or the use of programs such "
+"as B<sudo> or B<super> to grant root privileges to users selectively. If "
+"the sysadmin wishes to do this, she should use the B<dpkg-statoverride> "
+"program to change the permissions of I</usr/bin/debuild>. This will ensure "
+"that these permissions are preserved across upgrades."
+msgstr ""
+"La troisième méthode consiste à installer B<debuild> setuid root. Ce n'est "
+"pas la méthode par défaut, et nécessitera l'installation en tant que tel par "
+"l'administrateur système. Il faut aussi être conscient que toute personne "
+"pouvant exécuter B<debuild> en tant que superutilisateur ou setuid root a "
+"B<un accès complet au système>. Cette méthode n'est pas recommandée, mais "
+"fonctionnera. B<debuild> peut être installé avec les permissions 4754, de "
+"façon à ce que seuls les membres de son groupe puissent l'exécuter. "
+"L'inconvénient de cette méthode est que les autres utilisateurs ne pourront "
+"plus alors utiliser ce programme. D'autres variantes consistent à avoir "
+"plusieurs copies de B<debuild> ou d'utiliser des programmes comme B<sudo> ou "
+"B<super> pour accorder sélectivement des droits du superutilisateur à "
+"certains utilisateurs. Si l'administrateur veut utiliser cette méthode, il "
+"devra utiliser le programme B<dpkg-statoverride> pour modifier les "
+"permissions de I</usr/bin/debuild>. Cela permettra de conserver les "
+"permissions après les mises à jour."
+
+#. type: SH
+#: ../scripts/debuild.1:150
+#, no-wrap
+msgid "HOOKS"
+msgstr "POINTS D'ACCROCHE"
+
+#. type: Plain text
+#: ../scripts/debuild.1:156
+msgid ""
+"B<debuild> supports a number of hooks when running B<dpkg-buildpackage>. "
+"Note that the hooks B<dpkg-buildpackage> to B<lintian> (inclusive) are "
+"passed through to B<dpkg-buildpackage> using its corresponding B<--hook-"
+">I<name> option. The available hooks are as follows:"
+msgstr ""
+"B<debuild> gère un certain nombre de points d'ancrage (\"hook\") quand il "
+"exécute B<dpkg-buildpackage>. Remarquez que les points d'ancrage entre "
+"B<clean-hook> et B<lintian> (inclus) sont passées au travers de B<dpkg-"
+"buildpackage> en utilisant leur option B<--hook->I<nom> correspondante. Les "
+"points d'ancrage disponibles sont les suivants :"
+
+#. type: TP
+#: ../scripts/debuild.1:156
+#, no-wrap
+msgid "B<dpkg-buildpackage-hook>"
+msgstr "B<dpkg-buildpackage-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:159
+msgid ""
+"Run before B<dpkg-buildpackage> begins by calling B<dpkg-checkbuilddeps>."
+msgstr ""
+"S'exécute avant le début de B<dpkg-buildpackage> en appelant B<dpkg-"
+"checkbuilddeps>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:161 ../scripts/debuild.1:170 ../scripts/debuild.1:178
+#: ../scripts/debuild.1:187 ../scripts/debuild.1:195 ../scripts/debuild.1:203
+#: ../scripts/debuild.1:212
+msgid "Hook is run inside the unpacked source."
+msgstr "Le point d'ancrage est exécuté dans le source dépaqueté."
+
+#. type: Plain text
+#: ../scripts/debuild.1:163
+msgid "Corresponds to B<dpkg>'s B<init> hook."
+msgstr "Correspond au point d'ancrage B<init> de B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:163
+#, no-wrap
+msgid "B<clean-hook>"
+msgstr "B<clean-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:168
+msgid ""
+"Run before B<dpkg-buildpackage> runs B<debian/rules clean> to clean the "
+"source tree. (Run even if the tree is not being cleaned because B<-nc> is "
+"used.)"
+msgstr ""
+"S'exécute avant que B<dpkg-buildpackage> lance B<debian/rules clean> pour "
+"nettoyer le source. (S'exécute même si le source n'est pas nettoyé car B<-"
+"nc> est utilisée.)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:172
+msgid "Corresponds to B<dpkg>'s B<preclean> hook."
+msgstr "Correspond au point d'ancrage B<preclean> de B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:172
+#, no-wrap
+msgid "B<dpkg-source-hook>"
+msgstr "B<dpkg-source-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:176
+msgid ""
+"Run after cleaning the tree and before running B<dpkg-source>. (Run even if "
+"B<dpkg-source> is not being called because B<-b>, B<-B>, or B<-A> is used.)"
+msgstr ""
+"S'exécute après le nettoyage du source et avant l'exécution de B<dpkg-"
+"source> (s'exécute même si B<dpkg-source> n'est pas appelé car B<-b>, B<-B>, "
+"ou B<-A> est utilisée)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:180
+msgid "Corresponds to B<dpkg>'s B<source> hook."
+msgstr "Correspond au point d'ancrage B<source> de B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:180
+#, no-wrap
+msgid "B<dpkg-build-hook>"
+msgstr "B<dpkg-build-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:185
+msgid ""
+"Run after B<dpkg-source> and before calling B<debian/rules build>. (Run "
+"even if this is a source-only build, so B<debian/rules build> is not being "
+"called.)"
+msgstr ""
+"S'exécute après B<dpkg-source> et avant l'appel de B<debian/rules build> "
+"(s'exécute même si ce n'est qu'une construction du paquet source, donc que "
+"B<debian/rules build> n'est pas appelé)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:189
+msgid "Corresponds to B<dpkg>'s B<build> hook."
+msgstr "Correspond au point d'ancrage B<build> de B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:189
+#, no-wrap
+msgid "B<dpkg-binary-hook>"
+msgstr "B<dpkg-binary-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:193
+msgid ""
+"Run between B<debian/rules build> and B<debian/rules binary>(B<-arch>). Run "
+"B<only> if a binary package is being built."
+msgstr ""
+"S'exécute entre les appels B<debian/rules build> et B<debian/"
+"rules binary>(B<-arch>). Ne s'exécute B<que> si un paquet binaire est "
+"construit."
+
+#. type: Plain text
+#: ../scripts/debuild.1:197
+msgid "Corresponds to B<dpkg>'s B<binary> hook."
+msgstr "Correspond au point d'ancrage B<binary> de B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:197
+#, no-wrap
+msgid "B<dpkg-genchanges-hook>"
+msgstr "B<dpkg-genchanges-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:201
+msgid ""
+"Run after the binary package is built and before calling B<dpkg-genchanges>."
+msgstr ""
+"S'exécute seulement après la construction du paquet et avant l'appel à "
+"B<dpkg-genchanges>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:205
+msgid "Corresponds to B<dpkg>'s B<changes> hook."
+msgstr "Correspond au point d'ancrage B<changes> de B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:205
+#, no-wrap
+msgid "B<final-clean-hook>"
+msgstr "B<final-clean-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:210
+msgid ""
+"Run after B<dpkg-genchanges> and before the final B<debian/rules clean>. "
+"(Run even if we are not cleaning the tree post-build, which is the default.)"
+msgstr ""
+"S'exécute après B<dpkg-genchanges> et avant l'appel final B<debian/"
+"rules clean> (s'exécute même si le source n'est pas nettoyé après la "
+"construction, ce qui est le comportement par défaut)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:214
+msgid "Corresponds to B<dpkg>'s B<postclean> hook."
+msgstr "Correspond au point d'ancrage B<postclean> de B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:214
+#, no-wrap
+msgid "B<lintian-hook>"
+msgstr "B<lintian-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:218
+msgid ""
+"Run (once) before calling B<lintian>. (Run even if we are not calling "
+"B<lintian>.)"
+msgstr ""
+"S'exécute (une fois) avant l'appel à B<lintian> (s'exécute même si "
+"B<lintian> n'est pas appelé)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:220 ../scripts/debuild.1:228 ../scripts/debuild.1:235
+msgid "Hook is run from parent directory of unpacked source."
+msgstr ""
+"Le point d'ancrage est exécuté à partir du répertoire parent du source "
+"dépaqueté."
+
+#. type: Plain text
+#: ../scripts/debuild.1:222
+msgid "Corresponds to B<dpkg>'s B<check> hook."
+msgstr "Correspond au point d'ancrage B<check> de B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:222
+#, no-wrap
+msgid "B<signing-hook>"
+msgstr "B<signing-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:226
+msgid ""
+"Run after calling B<lintian> before any signing takes place. (Run even if "
+"we are not signing anything.)"
+msgstr ""
+"S'exécute seulement après l'appel à B<lintian> et avant la signature "
+"(s'exécute même si rien n'est signé)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:230
+msgid "Corresponds to B<dpkg>'s B<sign> hook, but is run by B<debuild>."
+msgstr ""
+"Correspond au point d'ancrage B<sign> de B<dpkg>, mais est exécuté par "
+"B<debuild>."
+
+#. type: TP
+#: ../scripts/debuild.1:230
+#, no-wrap
+msgid "B<post-dpkg-buildpackage-hook>"
+msgstr "B<post-dpkg-buildpackage-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:233
+msgid "Run after everything has finished."
+msgstr "S'exécute quand tout est fini."
+
+#. type: Plain text
+#: ../scripts/debuild.1:237
+msgid "Corresponds to B<dpkg>'s B<done> hook, but is run by B<debuild>."
+msgstr ""
+"Correspond au point d'ancrage B<done> de B<dpkg>, mais est exécuté par "
+"B<debuild>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:252
+msgid ""
+"A hook command can be specified either in the configuration file as, for "
+"example, DEBUILD_SIGNING_HOOK='foo' (note the hyphens change into "
+"underscores!) or as a command line option B<--signing-hook-foo>. The "
+"command will have certain percent substitutions made on it: B<%%> will be "
+"replaced by a single B<%> sign, B<%p> will be replaced by the package name, "
+"B<%v> by the package version number, B<%s> by the source version number, "
+"B<%u> by the upstream version number. Neither B<%s> nor B<%u> will contain "
+"an epoch. B<%a> will be B<1> if the immediately following action is to be "
+"performed and B<0> if not (for example, in the B<dpkg-source> hook, B<%a> "
+"will become B<1> if B<dpkg-source> is to be run and B<0> if not). Then it "
+"will be handed to the shell to deal with, so it can include redirections and "
+"stuff. For example, to only run the B<dpkg-source> hook if B<dpkg-source> "
+"is to be run, the hook could be something like: \"if [ %a -eq 1 ]; then ...; "
+"fi\"."
+msgstr ""
+"Une commande de point d'ancrage peut être définie soit dans le fichier de "
+"configuration, par exemple avec DEBUILD_SIGNING_HOOK='toto' (notez que les "
+"tirets ont été modifiés en caractères de soulignement), ou avec l'option en "
+"ligne de commande B<--signing-hook-foo>. La commande sera en partie "
+"modifiée : B<%%> deviendra un signe B<%> simple, B<%p> sera remplacé par le "
+"nom du paquet, B<%v> par le numéro de version du paquet, B<%s> par le numéro "
+"de version du source et B<%u> par le numéro de version amont. Ni B<%s> ni "
+"B<%u> ne contiendra de temps absolu (\"epoch\"). B<%a> sera B<1> si l'action "
+"suivante doit être effectuée et B<0> dans le cas contraire (par exemple, "
+"dans le crochet B<dpkg-source>, B<%a> sera B<1> si B<dpkg-source> doit être "
+"lancé et B<0> sinon). Elle sera alors passée à l'interpréteur de commandes "
+"pour être traitée, et peut donc inclure des redirections ou des choses du "
+"genre. Par exemple, pour ne lancer que le crochet B<dpkg-source> si B<dpkg-"
+"source> doit être exécutée, le crochet peut ressemble à ceci : \"if [ %a -eq "
+"1 ]; then ...; fi\"."
+
+#. type: Plain text
+#: ../scripts/debuild.1:256
+msgid ""
+"B<Please take care with hooks>, as misuse of them can lead to packages which "
+"FTBFS (fail to build from source). They can be useful for taking snapshots "
+"of things or the like."
+msgstr ""
+"B<Soyez prudent avec les points d'accroche>, puisqu'une mauvaise utilisation "
+"peut empêcher le paquet de se compiler depuis le source. Ils peuvent être "
+"utiles pour prendre des instantanés, etc."
+
+#. type: Plain text
+#: ../scripts/debuild.1:258
+msgid "For details, see above."
+msgstr "Plus de précisions sont fournies ci-après."
+
+#. type: Plain text
+#: ../scripts/debuild.1:265
+msgid "Command to gain root (or fake root) privileges."
+msgstr "Commande pour obtenir (ou simuler) les droits du superutilisateur."
+
+#. type: Plain text
+#: ../scripts/debuild.1:268
+msgid "Do not clean the environment, except for PATH."
+msgstr "Ne pas nettoyer l'environnement, à l'exception du PATH."
+
+#. type: Plain text
+#: ../scripts/debuild.1:271
+msgid "Do not clean the I<var> variable from the environment."
+msgstr "Ne pas nettoyer la variable d'environnement I<var>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:275
+msgid ""
+"If I<var> ends in an asterisk (\"*\") then all variables with names that "
+"match the portion of I<var> before the asterisk will be preserved."
+msgstr ""
+"Si I<var> se termine par un astérisque (\"*\") alors toutes les variables "
+"qui ont une correspondance avec la portion de I<var> avant l'astérisque "
+"seront préservées."
+
+#. type: Plain text
+#: ../scripts/debuild.1:279
+msgid ""
+"Set the environment variable I<var> to I<value> and do not remove it from "
+"the environment."
+msgstr ""
+"Définir la variable d'environnement I<var> à I<valeur> et ne l'enlève pas de "
+"l'environnement."
+
+#. type: TP
+#: ../scripts/debuild.1:279
+#, no-wrap
+msgid "B<--prepend-path=>I<value >"
+msgstr "B<--prepend-path=>I<valeur>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:283
+msgid "Once the normalized PATH has been set, prepend I<value> to it."
+msgstr "Une fois que PATH a été normalisé, ajouter I<valeur> au début."
+
+#. type: TP
+#: ../scripts/debuild.1:283
+#, no-wrap
+msgid "B<--lintian>"
+msgstr "B<--lintian>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:288
+msgid ""
+"Run B<lintian> after B<dpkg-buildpackage>. This is the default behaviour, "
+"and it overrides any configuration file directive to the contrary."
+msgstr ""
+"Exécuter B<lintian> après B<dpkg-buildpackage>. C'est le comportement par "
+"défaut. Cette option permet de remplacer une directive contraire placée dans "
+"un fichier de configuration."
+
+#. type: TP
+#: ../scripts/debuild.1:288
+#, no-wrap
+msgid "B<--no-lintian>"
+msgstr "B<--no-lintian>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:291
+msgid "Do not run B<lintian> after B<dpkg-buildpackage>."
+msgstr "Ne pas exécuter B<lintian> après B<dpkg-buildpackage>."
+
+#. type: TP
+#: ../scripts/debuild.1:291
+#, no-wrap
+msgid "B<--no-tgz-check>"
+msgstr "B<--no-tgz-check>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:296
+msgid ""
+"Even if we're running B<dpkg-buildpackage> and the version number has a "
+"Debian revision, do not check that the I<.orig.tar.gz> file or I<.orig> "
+"directory exists before starting the build."
+msgstr ""
+"Même si B<dpkg-buildpackage> est exécuté et que le numéro de version possède "
+"une révision pour Debian, ne pas vérifier si le fichier I<.orig.tar.gz> ou "
+"le répertoire I<.orig> existe avant de démarrer la construction."
+
+#. type: TP
+#: ../scripts/debuild.1:296
+#, no-wrap
+msgid "B<--tgz-check>"
+msgstr "B<--tgz-check>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:301
+msgid ""
+"If we're running B<dpkg-buildpackage> and the version number has a Debian "
+"revision, check that the I<.orig.tar.gz> file or I<.orig> directory exists "
+"before starting the build. This is the default behaviour."
+msgstr ""
+"Si B<dpkg-buildpackage> est exécuté et que le numéro de version possède une "
+"révision pour Debian, vérifier si le fichier I<.orig.tar.gz> ou le "
+"répertoire I<.orig> existe avant de démarrer la construction. C'est le "
+"comportement par défaut."
+
+#. type: TP
+#: ../scripts/debuild.1:301
+#, no-wrap
+msgid "B<--username> I<username>"
+msgstr "B<--username> I<nom_utilisateur>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:305
+msgid ""
+"When signing, use B<debrsign> instead of B<debsign>. I<username> specifies "
+"the credentials to be used."
+msgstr ""
+"Pour les signatures, utiliser B<debrsign> plutôt que B<debsign>. "
+"I<nom_utilisateur> indique l'identifiant à utiliser."
+
+#. type: TP
+#: ../scripts/debuild.1:305
+#, no-wrap
+msgid "B<-->I<foo>B<-hook>=I<hook>"
+msgstr "B<-->I<toto>B<-hook>=I<accroche>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:309
+msgid ""
+"Set a hook as described above. If I<hook> is blank, this unsets the hook."
+msgstr ""
+"Définir un point d'accroche comme décrit ci-dessus. Si I<accroche> est "
+"laissé blanc, le point d'accroche est annulé."
+
+#. type: TP
+#: ../scripts/debuild.1:309
+#, no-wrap
+msgid "B<--clear-hooks>"
+msgstr "B<--clear-hooks>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:313
+msgid ""
+"Clears all hooks. They may be reinstated by later command line options."
+msgstr ""
+"Supprimer tous les points d'accroche. Ils peuvent être réinstaurés par des "
+"options ultérieures en ligne de commande."
+
+#. type: Plain text
+#: ../scripts/debuild.1:324
+msgid "Do not run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+"Ne pas exécuter B<dpkg-checkbuilddeps> pour vérifier les dépendances de "
+"construction du paquet (\"build dependencies\")."
+
+#. type: TP
+#: ../scripts/debuild.1:324
+#, no-wrap
+msgid "B<-D>"
+msgstr "B<-D>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:327
+msgid "Run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+"Exécuter B<dpkg-checkbuilddeps> pour vérifier les dépendances de "
+"construction."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debuild.1:335
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override some of these configuration file "
+"settings, otherwise the B<--no-conf> option can be used to prevent reading "
+"these files. Environment variable settings are ignored when these "
+"configuration files are read. The currently recognised variables are:"
+msgstr ""
+"Les deux fichiers de configuration I</etc/devscripts.conf> et I<~/."
+"devscripts> sont évalués dans cet ordre par un interpréteur de commandes "
+"(\"shell\") pour placer les variables de configuration. Des options de ligne "
+"de commande peuvent être utilisées pour neutraliser les paramètres des "
+"fichiers de configuration. Les paramètres des variables d'environnement sont "
+"ignorés à cette fin. Si la première option donnée en ligne de commande est "
+"B<--noconf>, alors ces fichiers ne sont pas évalués. Les variables "
+"actuellement identifiées sont :"
+
+#. type: TP
+#: ../scripts/debuild.1:335
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENV>"
+msgstr "B<DEBUILD_PRESERVE_ENV>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:339
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve-env> "
+"command line parameter being used."
+msgstr ""
+"Lui attribuer la valeur I<yes> équivaut à utiliser l'option B<--preserve-"
+"env>."
+
+#. type: TP
+#: ../scripts/debuild.1:339
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENVVARS>"
+msgstr "B<DEBUILD_PRESERVE_ENVVARS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:344
+msgid ""
+"Which environment variables to preserve. This should be a comma-separated "
+"list of variables. This corresponds to using possibly multiple B<--preserve-"
+"envvar> or B<-e> options."
+msgstr ""
+"Définit les variables d'environnement à conserver. Elle est constituée d'une "
+"liste de variables d'environnement séparées par des virgules. Cela "
+"correspond à utiliser plusieurs fois les options B<--preserve-envvar> ou B<-"
+"e>."
+
+#. type: TP
+#: ../scripts/debuild.1:344
+#, no-wrap
+msgid "B<DEBUILD_SET_ENVVAR_>I<var>B<=>I<value>"
+msgstr "B<DEBUILD_SET_ENVVAR_>I<var>=I<valeur>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:347
+msgid "This corresponds to B<--set-envvar=>I<var>B<=>I<value>."
+msgstr "Équivaut à utiliser B<--set-envvar>=I<var>=I<value>."
+
+#. type: TP
+#: ../scripts/debuild.1:347
+#, no-wrap
+msgid "B<DEBUILD_PREPEND_PATH>"
+msgstr "B<DEBUILD_PREPEND_PATH>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:350
+msgid "This corresponds to B<--prepend-path>."
+msgstr "Équivaut à utiliser B<--prepend-path>."
+
+#. type: TP
+#: ../scripts/debuild.1:350
+#, no-wrap
+msgid "B<DEBUILD_ROOTCMD>"
+msgstr "B<DEBUILD_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:354
+msgid "Setting this variable to I<prog> is the equivalent of B<-r>I<prog>."
+msgstr "Lui attribuer la valeur I<prog> équivaut à utiliser B<-r>I<prog>."
+
+#. type: TP
+#: ../scripts/debuild.1:354
+#, no-wrap
+msgid "B<DEBUILD_TGZ_CHECK>"
+msgstr "B<DEBUILD_TGZ_CHECK>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:358
+msgid ""
+"Setting this variable to I<no> is the same as the B<--no-tgz-check> command "
+"line option."
+msgstr ""
+"Lui attribuer la valeur I<no> équivaut à utiliser l'option B<--no-tgz-check> "
+"en ligne de commande."
+
+#. type: TP
+#: ../scripts/debuild.1:358
+#, no-wrap
+msgid "B<DEBUILD_SIGNING_USERNAME>"
+msgstr "B<DEBUILD_SIGNING_USERNAME>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:362
+msgid ""
+"Setting this variable is the same as using the B<--username> command line "
+"option."
+msgstr ""
+"Définir cette variable équivaut à utiliser l'option B<--username> en ligne "
+"de commande."
+
+#. type: TP
+#: ../scripts/debuild.1:362
+#, no-wrap
+msgid "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+msgstr "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:370
+msgid ""
+"These are options which should be passed to the invocation of B<dpkg-"
+"buildpackage>. They are given before any command-line options. Due to "
+"issues of shell quoting, if a word containing spaces is required as a single "
+"option, extra quotes will be required. For example, to ensure that your own "
+"GPG key is always used, even for sponsored uploads, the configuration file "
+"might contain the line:"
+msgstr ""
+"Voici les options qui devraient être passées à l'invocation de B<dpkg-"
+"buildpackage>. Elles sont données avant toute option en ligne de commande. À "
+"cause des problèmes de guillemets avec les interpréteurs de commandes, pour "
+"les paramètres contenant un espace, il sera nécessaire d'ajouter des "
+"guillemets supplémentaires. Par exemple, pour forcer à toujours utiliser "
+"votre clef GPG, même pour les envois parrainés (\"sponsored upload\"), le "
+"fichier de configuration pourra contenir :"
+
+#. type: Plain text
+#: ../scripts/debuild.1:373
+#, no-wrap
+msgid "DEBUILD_DPKG_BUILDPACKAGE_OPTS=\"-k'Julian Gilbey E<lt>jdg@debian.orgE<gt>' -sa\"\n"
+msgstr "DEBUILD_DPKG_BUILDPACKAGE_OPTS=\"-k'Julian Gilbey E<lt>jdg@debian.orgE<gt>' -sa\"\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:378
+msgid ""
+"which gives precisely two options. Without the extra single quotes, B<dpkg-"
+"buildpackage> would reasonably complain that I<Gilbey> is an unrecognised "
+"option (it doesn't start with a B<-> sign)."
+msgstr ""
+"ce qui fournit exactement deux options. Sans les guillemets supplémentaires, "
+"B<dpkg-buildpackage> se serait plaint (à juste titre) que I<Gilbey> n'est "
+"pas une option reconnue (elle ne commence pas par un signe B<->)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:383
+msgid ""
+"Also, if this option contains any B<-r>, B<-d> or B<-D> options, these will "
+"always be taken account of by B<debuild>. Note that a B<-r> option in this "
+"variable will override the setting in B<DEBUILD_ROOTCMD>."
+msgstr ""
+"Également, si ce paramètre contient une (ou plusieurs) des options B<-r>, B<-"
+"d> ou B<-D>, elle sera toujours prise en compte par B<debuild>. Remarquez "
+"que l'option B<-r> placée ici écrasera le paramètre B<DEBUILD_ROOTCMD>."
+
+#. type: TP
+#: ../scripts/debuild.1:383
+#, no-wrap
+msgid "B<DEBUILD_>I<FOO>B<_HOOK>"
+msgstr "B<DEBUILD_>I<TOTO>B<_HOOK>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:387
+msgid ""
+"The hook variable for the I<foo> hook. See the section on hooks above for "
+"more details. By default, this is empty."
+msgstr ""
+"La variable de point d'accroche pour le point d'accroche I<toto>. Voyez la "
+"section sur les points d'accroche pour plus de détails. Par défaut, elle est "
+"non définie."
+
+#. type: TP
+#: ../scripts/debuild.1:387
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN>"
+msgstr "B<DEBUILD_LINTIAN>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:391
+msgid ""
+"Should we run B<lintian>? If this is set to I<no>, then B<lintian> will not "
+"be run."
+msgstr "Lui attribuer la valeur I<no> empêchera l'exécution de B<lintian>."
+
+#. type: TP
+#: ../scripts/debuild.1:391
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN_OPTS>"
+msgstr "B<DEBUILD_LINTIAN_OPTS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:397
+msgid ""
+"These are options which should be passed to the invocation of B<lintian>. "
+"They are given before any command-line options, and the usage of this "
+"variable is as described for the B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> variable."
+msgstr ""
+"Ce sont les options qui doivent être passées lors de l'invocation de "
+"B<lintian>. Elles sont données avant toute option en ligne de commande, et "
+"l'utilisation de cette option est la même que celle décrite pour la variable "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:408
+msgid ""
+"To build your own package, simply run B<debuild> from inside the source "
+"tree. B<dpkg-buildpackage>(1) options may be given on the command line."
+msgstr ""
+"Pour construire votre propre paquet, lancez simplement B<debuild> depuis "
+"l'arbre des sources. Des options de B<dpkg-buildpackage>(1) peuvent être "
+"passées en ligne de commande."
+
+#. type: Plain text
+#: ../scripts/debuild.1:411
+msgid ""
+"The typical command line options to build only the binary package(s) "
+"without signing the .changes file (or the non-existent .dsc file):"
+msgstr ""
+"La ligne de commande typiquement utilisée pour construire le(s) paquet(s) "
+"binaire(s) sans signer le fichier .changes (ou le fichier .dsc inexistant) "
+"est :"
+
+#. type: Plain text
+#: ../scripts/debuild.1:414
+#, no-wrap
+msgid "debuild -i -us -uc -b\n"
+msgstr "debuild -i -us -uc -b\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:417
+msgid "Change the B<-b> to B<-S> to build only a source package."
+msgstr "Changez B<-b> en B<-S> pour ne construire qu'un paquet source."
+
+#. type: Plain text
+#: ../scripts/debuild.1:420
+msgid ""
+"An example using B<lintian> to check the resulting packages and passing "
+"options to it:"
+msgstr ""
+"Voici un exemple appelant B<lintian> (et lui fournissant des options) pour "
+"vérifier les paquets créés :"
+
+#. type: Plain text
+#: ../scripts/debuild.1:423
+#, no-wrap
+msgid "debuild --lintian-opts -i\n"
+msgstr "debuild --lintian-opts -i\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:431
+msgid ""
+"Note the order of options here: the B<debuild> options come first, then the "
+"B<dpkg-buildpackage> ones, then finally the checker options. (And "
+"B<lintian> is called by default.) If you find yourself using the same "
+"B<dpkg-buildpackage> options repeatedly, consider using the "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> configuration file option as described "
+"above."
+msgstr ""
+"Remarquez bien l'ordre des options : d'abord les options de B<debuild>, puis "
+"celles de B<dpkg-buildpackage> et enfin celles de B<lintian> (B<lintian> est "
+"appelé par défaut). Si vous utilisez toujours les mêmes options de B<dpkg-"
+"buildpackage>, vous pouvez utiliser l'option "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> du fichier de configuration, comme décrit "
+"plus haut."
+
+#. type: Plain text
+#: ../scripts/debuild.1:435
+msgid ""
+"To build a package for a sponsored upload, given I<foobar_1.0-1.dsc> and the "
+"respective source files, run something like the following commands:"
+msgstr ""
+"Pour construire un paquet pour un envoi parrainé (sponsored upload), donné "
+"par I<toto_1.0-1.dsc> et les fichiers source respectifs, lancez quelque "
+"chose qui ressemblerait aux commandes suivantes :"
+
+#. type: Plain text
+#: ../scripts/debuild.1:440
+#, no-wrap
+msgid ""
+"dpkg-source -x foobar_1.0-1.dsc\n"
+"cd foobar-1.0\n"
+"debuild -k0x12345678\n"
+msgstr ""
+"dpkg-source -x toto_1.0-1.dsc\n"
+"cd toto-1.0\n"
+"debuild -k0x12345678\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:447
+msgid ""
+"where 0x12345678 is replaced by your GPG key ID or other key identifier such "
+"as your email address. Again, you could also use the "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> configuration file option as described "
+"above to avoid having to type the B<-k> option each time you do a sponsored "
+"upload."
+msgstr ""
+"où 0x12345678 est remplacé par l'identifiant de votre clef GPG ou un autre "
+"identifiant de clef tel que votre adresse de messagerie. De nouveau, vous "
+"pouvez également utiliser l'option du fichier de configuration "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> tel que c'est décrit plus haut pour éviter "
+"d'avoir à taper l'option B<-k> à chaque fois que vous effectuez un envoi "
+"parrainé."
+
+#. type: Plain text
+#: ../scripts/debuild.1:459
+msgid ""
+"B<chmod>(1), B<debsign>(1), B<dpkg-buildpackage>(1), B<dpkg-"
+"checkbuilddeps>(1), B<fakeroot>(1), B<lintian>(1), B<su>(1), B<sudo>(1), "
+"B<super>(1), B<devscripts.conf>(5), B<dpkg-statoverride>(8)"
+msgstr ""
+"B<chmod>(1), B<debsign>(1), B<dpkg-buildpackage>(1), B<dpkg-"
+"checkbuilddeps>(1), B<fakeroot>(1), B<lintian>(1), B<su>(1), B<sudo>(1), "
+"B<super>(1), B<devscripts.conf>(5), B<dpkg-statoverride>(8)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:462
+msgid ""
+"The original B<debuild> program was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. The current version has been written by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Le programme B<debuild> a été initialement écrit par Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. La version actuelle a été écrite par Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:26
+msgid "desktop2menu - create a menu file skeleton from a desktop file"
+msgstr ""
+"desktop2menu - Créer un modèle de fichier menu à partir d'un fichier desktop"
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:30
+msgid "B<desktop2menu> B<--help>|B<--version>"
+msgstr "B<desktop2menu> B<--help>|B<--version>"
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:32
+msgid "B<desktop2menu> I<desktop file> [I<package name>]"
+msgstr "B<desktop2menu> I<fichier desktop> [I<nom paquet>]"
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:36
+msgid ""
+"B<desktop2menu> generates a skeleton menu file from the supplied freedesktop."
+"org desktop file."
+msgstr ""
+"B<desktop2menu> génère un corps de fichier menu à partir d'un fichier "
+"desktop freedesktop.org."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:39
+msgid ""
+"The package name to be used in the menu file may be passed as an additional "
+"argument. If it is not supplied then B<desktop2menu> will attempt to derive "
+"the package name from the data in the desktop file."
+msgstr ""
+"Le nom de paquet à utiliser dans le fichier menu peut être fourni dans un "
+"paramètre supplémentaire. S'il n'est pas fourni, alors B<desktop2menu> "
+"essaiera de trouver le nom du paquet en fonction des données du fichier "
+"desktop."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:45
+msgid ""
+"This program is Copyright (C) 2007 by Sune Vuorela <debian@pusling.com>. It "
+"was modified by Adam D. Barratt <adam@adam-barratt.org.uk> for the "
+"devscripts package. This program comes with ABSOLUTELY NO WARRANTY. You "
+"are free to redistribute this code under the terms of the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+"Ce programme est Copyright (C) 2007 Sune Vuorela <debian@pusling.com>. Il a "
+"été modifié par Adam D. Barratt <adam@adam-barratt.org.uk> pour le paquet "
+"devscripts. Ce programme est fourni SANS AUCUNE GARANTIE. Vous êtes libre de "
+"redistribuer ce code sous les termes de la licence publique générale GNU "
+"(GNU General Public Licence), version 2 ou ultérieure."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:54
+msgid ""
+"Sune Vuorela <debian@pusling.com> with modifications by Adam D. Barratt "
+"<adam@adam-barratt.org.uk>"
+msgstr ""
+"Sune Vuorela <debian@pusling.com> avec des modifications de Adam D. Barratt "
+"<adam@adam-barratt.org.uk>"
+
+#. type: TH
+#: ../scripts/dep3changelog.1:1
+#, no-wrap
+msgid "DEP3CHANGELOG"
+msgstr "DEP3CHANGELOG"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:4
+msgid ""
+"dep3changelog - generate a changelog entry from a DEP3-style patch header"
+msgstr ""
+"dep3changelog - Préparer une entrée du journal de modifications à partir de "
+"l'en-tête d'un correctif compatible DEP3"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:6
+msgid ""
+"B<dep3changelog> I<patch> [I<patch> ...] [I<options>] [-- [I<dch_options>]]"
+msgstr ""
+"B<dep3changelog> I<correctif> [I<correctif> ...] [I<options>] [-- "
+"[I<options_dch>]]"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:15
+msgid ""
+"B<dep3changelog> extracts the DEP3 patch headers from the given I<patch> "
+"files and builds a changelog entry for each patch. If the patch author "
+"differs from the one detected from the B<DEBEMAIL>, B<NAME>, B<DEBEMAIL>, or "
+"B<EMAIL> environment variables, ``Thanks to I<author> E<lt>I<email>E<gt>'' "
+"is added to the changelog entry for that patch. Any B<bug-debian> or B<bug-"
+"ubuntu> fields are added as ``Closes'' to the changelog entry. The "
+"generated changelog entries are passed to B<debchange> as an argument along "
+"with the given I<dch_options>."
+msgstr ""
+"B<dep3changelog> extrait les en-têtes d'un correctif DEP3 à partir des "
+"fichiers I<correctif> donnés et construit une entrée du journal de "
+"modifications pour chaque correctif. Si l'auteur du correctif est différent "
+"de celui détecté par les variables d'environnement B<DEBEMAIL>, B<NAME>, "
+"B<DEBEMAIL> ou B<EMAIL>, \"Thanks to I<auteur> E<lt>I<adresse>E<gt>\" est "
+"ajouté à l'entrée du journal de modifications pour ce correctif. Tous les "
+"champs B<bug-debian> et B<bug-ubuntu> sont ajoutés en \"Closes\" de l'entrée "
+"du journal de modifications. Les entrées du journal de modifications "
+"préparées sont passées en argument à B<debchange> avec les I<options_dch> "
+"données."
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:28
+msgid "Steve Langasek E<lt>vorlon@debian.orgE<gt>"
+msgstr "Steve Langasek E<lt>vorlon@debian.orgE<gt>"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:29 ../scripts/list-unreleased.1:21
+msgid "B<debchange>(1)"
+msgstr "B<debchange>(1)"
+
+#. type: TH
+#: ../doc/devscripts.1:1
+#, no-wrap
+msgid "DEVSCRIPTS"
+msgstr "DEVSCRIPTS"
+
+#. type: Plain text
+#: ../doc/devscripts.1:4
+msgid "devscripts - scripts to ease the lives of Debian developers"
+msgstr "devscripts - Scripts pour faciliter le travail des développeurs Debian"
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../doc/devscripts.1:12
+msgid ""
+"The B<devscripts> package provides a collection of scripts which may be of "
+"use to Debian developers and others wishing to build Debian packages. For a "
+"summary of the available scripts, please see the file I</usr/share/doc/"
+"devscripts/README.gz>, and for full details, please see the individual "
+"manpages. They are contributed by multiple developers; for details of the "
+"authors, please see the code or manpages."
+msgstr ""
+"Le paquet B<devscripts> fournit un ensemble de scripts qui peuvent être "
+"utiles aux développeurs Debian et à tous ceux qui souhaitent construire des "
+"paquets Debian. Pour un résumé des différents scripts disponibles, veuillez "
+"consulter I</usr/share/doc/devscripts/README.gz>, et pour plus de détails, "
+"veuillez consulter les pages de manuel individuelles. Ils ont été développés "
+"par un certain nombre de développeurs, la liste des auteurs se trouve dans "
+"le code et les pages de manuel."
+
+#. type: Plain text
+#: ../doc/devscripts.1:16
+msgid ""
+"Also, the directory I</usr/share/doc/devscripts/examples> contains an "
+"example B<exim> script for sorting mail arriving to Debian mailing lists."
+msgstr ""
+"Le répertoire I</usr/share/doc/devscripts/examples> contient également un "
+"exemple de script pour B<exim> permettant de trier les messages arrivant aux "
+"listes de diffusion Debian."
+
+#. type: Plain text
+#: ../doc/devscripts.1:20
+msgid ""
+"Several scripts of the devscripts suite use the following environment "
+"variables. Check the man pages of individual scripts for more details on how "
+"the variables are used."
+msgstr ""
+"Plusieurs scripts de l'ensemble devscripts utilisent les variables "
+"d'environnement suivantes. Vérifiez les pages de manuel de chaque script "
+"pour obtenir plus de précisions sur la façon dont ces variables sont "
+"utilisées."
+
+#. type: IX
+#: ../doc/devscripts.1:20
+#, no-wrap
+msgid "Header"
+msgstr "Header"
+
+#. type: IP
+#: ../doc/devscripts.1:21
+#, no-wrap
+msgid "\\s-1DEBEMAIL\\s0"
+msgstr "\\s-1DEBEMAIL\\s0"
+
+#. type: IX
+#: ../doc/devscripts.1:22 ../doc/devscripts.1:25
+#, no-wrap
+msgid "Item"
+msgstr "Item"
+
+#. type: =item
+#: ../doc/devscripts.1:22 ../scripts/ltnu.pod:74
+#, no-wrap
+msgid "DEBEMAIL"
+msgstr "B<DEBEMAIL>"
+
+#. type: Plain text
+#: ../doc/devscripts.1:24
+msgid "Email of the person acting on a given Debian package via devscripts."
+msgstr ""
+"Adresse électronique de la personne agissant sur un paquet Debian donné avec "
+"devscripts."
+
+#. type: IP
+#: ../doc/devscripts.1:24
+#, no-wrap
+msgid "\\s-1DEBFULLNAME\\s0"
+msgstr "\\s-1DEBFULLNAME\\s0"
+
+#. type: IX
+#: ../doc/devscripts.1:25
+#, no-wrap
+msgid "DEBFULLNAME"
+msgstr "B<DEBFULLNAME>"
+
+#. type: Plain text
+#: ../doc/devscripts.1:28
+msgid ""
+"Full name (first + family) of the person acting on a given Debian package "
+"via devscripts."
+msgstr ""
+"Nom complet (prénom et nom) de la personne agissant sur un paquet Debian "
+"donné avec devscripts."
+
+#. type: SH
+#: ../doc/devscripts.1:28
+#, no-wrap
+msgid "SCRIPTS"
+msgstr "SCRIPTS"
+
+#. type: Plain text
+#: ../doc/devscripts.1:31
+msgid ""
+"Here is the complete list of available devscripts. See their man pages for "
+"additional documentation."
+msgstr ""
+"Voici la liste complète des outils devscripts disponibles. Consultez leurs "
+"pages de manuel pour une documentation plus complète."
+
+#. type: IP
+#: ../doc/devscripts.1:31
+#, no-wrap
+msgid "I<annotate-output>(1)"
+msgstr "B<annotate-output>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:33
+msgid ""
+"run a command and prepend time and stream (O for stdout, E for stderr) for "
+"every line of output."
+msgstr ""
+"exécuter une commande et ajouter le temps et le type de sortie (O pour la "
+"sortie standard et E pour la sortie d'erreur standard) au début de chaque "
+"ligne affichée."
+
+#. type: IP
+#: ../doc/devscripts.1:33
+#, no-wrap
+msgid "I<archpath>(1)"
+msgstr "B<archpath>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:35
+msgid ""
+"Prints arch (tla/Bazaar 1.x) package names. Also supports calculating the "
+"package names for other branches. [tla]"
+msgstr ""
+"Affiche les noms de paquet arch (tla/Bazaar). Supporte également le calcul "
+"des noms de paquet pour les autres branches. [tla]"
+
+#. type: IP
+#: ../doc/devscripts.1:35
+#, no-wrap
+msgid "I<bts>(1)"
+msgstr "B<bts>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:37
+msgid ""
+"A command-line tool for accessing the Debian Bug Tracking System, both to "
+"send mails to control@bts.debian.org and to access the web pages and SOAP "
+"interface of the BTS. [www-browser, libauthen-sasl-perl, libsoap-lite-perl, "
+"liburi-perl, libwww-perl, bsd-mailx | mailx]"
+msgstr ""
+"Outil en ligne de commande pour manipuler le BTS, à la fois pour envoyer des "
+"courriels à control@bts.debian.org et accéder aux pages web et à l'interface "
+"SOAP du BTS. [www-browser, libauthen-sasl-perl, libsoap-lite-perl, liburi-"
+"perl, libwww-perl, bsd-mailx | mailx]"
+
+#. type: IP
+#: ../doc/devscripts.1:37
+#, no-wrap
+msgid "I<build-rdeps>(1)"
+msgstr "B<build-rdeps>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:39
+msgid ""
+"Searches for all packages that build-depend on a given package. [dctrl-"
+"tools, dose-extra, libdpkg-perl]"
+msgstr ""
+"Rechercher tous les paquets qui dépendent du paquet indiqué pour leur "
+"construction. [dctrl-tools, dose-extra, libdpkg-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:39
+#, no-wrap
+msgid "I<chdist>(1)"
+msgstr "B<chdist>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:41
+msgid "tool to easily play with several distributions. [dctrl-tools]"
+msgstr ""
+"outil pour jouer facilement avec différentes distributions. [dctrl-tools]"
+
+#. type: IP
+#: ../doc/devscripts.1:41
+#, no-wrap
+msgid "I<checkbashisms>(1)"
+msgstr "B<checkbashisms>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:43
+msgid ""
+"check whether a /bin/sh script contains any common bash-specific constructs."
+msgstr ""
+"rechercher des constructions spécifiques à bash dans un script /bin/sh."
+
+#. type: IP
+#: ../doc/devscripts.1:43
+#, no-wrap
+msgid "I<cowpoke>(1)"
+msgstr "B<cowpoke>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:45
+msgid ""
+"upload a Debian source package to a cowbuilder host and build it, optionally "
+"also signing and uploading the result to an incoming queue. [ssh-client]"
+msgstr ""
+"envoyer un paquet source Debian à un hôte cowbuilder et construire le "
+"paquet. Le paquet résultant peut également être signé et envoyé dans une "
+"file d'attente. [ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:45
+#, no-wrap
+msgid "I<cvs-debi, cvs-debc>(1)"
+msgstr "B<cvs-debi>, B<cvs-debc>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:47
+msgid ""
+"wrappers around debi and debc respectively (see below) which allow them to "
+"be called from the CVS working directory. [cvs-buildpackage]"
+msgstr ""
+"encapsulations (\"wrappers\") respectivement de debi et debc (voir plus bas) "
+"pouvant être appelées depuis un répertoire de travail CVS. [cvs-buildpackage]"
+
+#. type: IP
+#: ../doc/devscripts.1:47
+#, no-wrap
+msgid "I<cvs-debrelease>(1)"
+msgstr "B<cvs-debrelease>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:49
+msgid ""
+"wrapper around debrelease which allows it to be called from the CVS working "
+"directory. [cvs-buildpackage, dupload | dput, ssh-client]"
+msgstr ""
+"encapsulation de debrelease pouvant être appelée depuis un répertoire de "
+"travail CVS. [cvs-buildpackage, dupload | dput, ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:49
+#, no-wrap
+msgid "I<cvs-debuild>(1)"
+msgstr "B<cvs-debuild>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:51
+msgid ""
+"A wrapper for cvs-buildpackage to use debuild as its package building "
+"program. [cvs-buildpackage, fakeroot, lintian, gnupg |gnupg2]"
+msgstr ""
+"Encapsulation de debuild pour construire les paquets avec cvs-buildpackage. "
+"[cvs-buildpackage, fakeroot, lintian, gnupg | gnupg2]"
+
+#. type: IP
+#: ../doc/devscripts.1:51
+#, no-wrap
+msgid "I<dcmd>(1)"
+msgstr "B<dcmd>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:53
+msgid ""
+"run a given command replacing the name of a .changes or .dsc file with each "
+"of the files referenced therein. *"
+msgstr ""
+"exécuter une commande donnée en remplaçant le nom d'un fichier .changes ou ."
+"dsc par chaque fichier référencé. *"
+
+#. type: IP
+#: ../doc/devscripts.1:53
+#, no-wrap
+msgid "I<dd-list>(1)"
+msgstr "B<dd-list>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:55
+msgid "given a list of packages, pretty-print it ordered by maintainer. *"
+msgstr "ordonner joliment une liste de paquets par responsable. *"
+
+#. type: IP
+#: ../doc/devscripts.1:55
+#, no-wrap
+msgid "I<debbisect>(1)"
+msgstr "I<debbisect>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:57
+msgid ""
+"bisect snapshot.debian.org to find which change in the archive introduced a "
+"certain problem. [mmdebstrap, python3-debian]"
+msgstr ""
+"examine snapshot.debian.org pour savoir quel changement dans l'archive a "
+"introduit un certain problème. [mmdebstrap, python3-debian]"
+
+#. type: IP
+#: ../doc/devscripts.1:57
+#, no-wrap
+msgid "I<debc>(1)"
+msgstr "B<debc>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:59
+msgid ""
+"List contents of current package. Do this after a successful \"debuild\" to "
+"see if the package looks all right."
+msgstr ""
+"Liste le contenu du paquet courant. Le faire après la réussite de "
+"\"debuild\" pour voir si le paquet semble correct."
+
+#. type: IP
+#: ../doc/devscripts.1:59
+#, no-wrap
+msgid "I<debchange (abbreviation dch)>(1)"
+msgstr "B<debchange (abréviation dch>)(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:61
+msgid ""
+"Modifies debian/changelog and manages version numbers for you. It will "
+"either increment the version number or add an entry for the current version, "
+"depending upon the options given to it. [libdistro-info-perl, libsoap-lite-"
+"perl]*"
+msgstr ""
+"Modifie debian/changelog et gère les numéros de version. Il augmentera la "
+"version ou ajoutera une entrée dans l'actuelle suivant les options données "
+"en paramètre. [libdistro-info-perl, libsoap-lite-perl]*"
+
+#. type: IP
+#: ../doc/devscripts.1:61
+#, no-wrap
+msgid "I<debcheckout>(1)"
+msgstr "B<debcheckout>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:63
+msgid "checkout the development repository of a Debian package. *"
+msgstr "récupérer le contenu du dépôt d'un paquet Debian. *"
+
+#. type: IP
+#: ../doc/devscripts.1:63
+#, no-wrap
+msgid "I<debclean>(1)"
+msgstr "B<debclean>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:65
+msgid ""
+"Clean a Debian source tree. Debclean will clean all Debian source trees "
+"below the current directory, and if requested, also remove all files that "
+"were generated from these source trees (that is .deb, .dsc and .changes "
+"files). It will keep the .diffs and original files, though, so that the "
+"binaries and other files can be rebuilt if necessary. [fakeroot]*"
+msgstr ""
+"Nettoie un répertoire source Debian. debclean nettoie tous les répertoires "
+"source Debian présents dans le répertoire courant et, si demandé, efface "
+"aussi les fichiers générés depuis ces répertoires (c'est à dire les "
+"fichiers .deb, .dsc et .changes). Il conserve en revanche les fichiers "
+"originaux et .diffs, permettant ainsi la reconstruction. [fakeroot]*"
+
+#. type: IP
+#: ../doc/devscripts.1:65
+#, no-wrap
+msgid "I<debcommit>(1)"
+msgstr "B<debcommit>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:67
+msgid ""
+"Commits changes to cvs, darcs, svn, svk, tla, bzr, git, or hg, using new "
+"entries in debian/changelog as the commit message. Also supports tagging "
+"Debian package releases. [cvs | darcs | subversion | svk | tla | bzr | git-"
+"core | mercurial, libtimedate-perl]"
+msgstr ""
+"Soumettre les changements vers CVS, Darcs, Subversion, SVK, GNU Arch, "
+"Bazaar, Git ou Mercurial en basant le message de modification sur le journal "
+"de modifications. [cvs | darcs | subversion | svk | tla | bzr | git | "
+"mercurial, libtimedate-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:67
+#, no-wrap
+msgid "I<debdiff>(1)"
+msgstr "B<debdiff>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:69
+msgid ""
+"A program which examines two .deb files or two .changes files and reports on "
+"any difference found in their file lists. Useful for ensuring that no files "
+"were inadvertently lost between versions. Can also examine two .dsc files "
+"and report on the changes between source versions. For a deeper comparison "
+"one can use the diffoscope package. [wdiff, patchutils]*"
+msgstr ""
+"Programme qui examine deux fichiers .deb et reporte toutes les différences "
+"trouvées dans leurs listes de fichiers. Patique pour s'assurer qu'aucu "
+"fichier n'a été perdu entre deux versions. Peut également examiner deux "
+"fichiers .dsc et montrer les changements entre les versions source. Pour une "
+"comparaison plus profonde, on peut utiliser le paquet diffoscope. [wdiff, "
+"patchutils]*"
+
+#. type: IP
+#: ../doc/devscripts.1:69
+#, no-wrap
+msgid "I<debdiff-apply>(1)"
+msgstr "B<debdiff-apply>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:71
+msgid ""
+"Apply unified diffs of two Debian source packages, such as those generated "
+"by debdiff, to a target Debian source package. Any changes to debian/"
+"changelog are dealt with specially, to avoid the conflicts that changelog "
+"diffs typically produce when applied naively. May be used to check that old "
+"patches still apply to newer versions of those packages. [python3-debian, "
+"python3-unidiff, quilt]"
+msgstr ""
+"Applique les différentiels unifiés de deux paquets source Debian, tels ceux "
+"générés par debdiff, à un paquet source Debian cible. Toute modification "
+"apportée à debian / changelog est traitée spécialement afin d'éviter les "
+"conflits générés par les différences de changelog lorsqu'il est appliqué "
+"naïvement. Peut être utilisé pour vérifier que les anciens correctifs "
+"s'appliquent toujours aux versions les plus récentes de ces packages. "
+"[python3-debian, python3-unidiff, quilt]"
+
+#. type: IP
+#: ../doc/devscripts.1:71
+#, no-wrap
+msgid "I<debi>(1)"
+msgstr "B<debi>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:73
+msgid ""
+"Installs the current package by using the setuid root debpkg script "
+"described below. It assumes that the current package has just been built "
+"(for example by debuild), and the .deb lives in the parent directory, and "
+"will effectively run dpkg -i on the .deb. The ability to install the "
+"package with a very short command is very useful when troubleshooting "
+"packages."
+msgstr ""
+"Installe le paquet actuel en utilisant le script setuid-root debpkg décrit "
+"ci-dessous. Il suppose que le paquet actuel vient d'être construit (par "
+"exemple, par debuild) et que le fichier .deb se trouve dans le répertoire "
+"parent et qu'il exécutera effectivement dpkg -i sur le fichier .deb. La "
+"possibilité d'installer le package à l'aide d'une commande très courte est "
+"très utile lors du dépannage de packages."
+
+#. type: IP
+#: ../doc/devscripts.1:73
+#, no-wrap
+msgid "I<debootsnap>(1)"
+msgstr "I<debootsnap>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:75
+msgid ""
+"Combines debootstrap and snapshot.debian.org to create a chroot containing "
+"exactly the requested selection of packages. This can be used to re-create a "
+"chroot from the past, for example to reproduce a bug. The tool is also used "
+"by debrebuild to build a package in a chroot with build dependencies in the "
+"same version as recorded in the buildinfo file. [apt-utils, dpkg-dev, "
+"equivs, mmdebstrap, python3-pycurl]"
+msgstr ""
+"Combine debootstrap and snapshot.debian.org pour créer un B<chroot> "
+"contenant exactement la sélection de paquets demandés. Ceci peut être "
+"utilisé pour recréer un chroot passé, par exemple pour reproduire un bogue. "
+"Cet outil est également utilisé par B<debrebuild> pour construire un paquet "
+"dont les dépendances de construction sont les mêmes que celles enregistrées "
+"dans le fichier buildinfo. [apt-utils, dpkg-dev, equivs, mmdebstrap, python3-"
+"pycurl]"
+
+#. type: IP
+#: ../doc/devscripts.1:75
+#, no-wrap
+msgid "I<debpkg>(1)"
+msgstr "B<debpkg>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:77
+msgid ""
+"A wrapper for dpkg used by debi to allow convenient testing of packages. "
+"For debpkg to work, it needs to be made setuid root, and this needs to be "
+"performed by the sysadmin -- it is not installed as setuid root by default. "
+"(Note that being able to run a setuid root debpkg is effectively the same as "
+"having root access to the system, so this should be done with caution.) "
+"Having debpkg as a wrapper for dpkg can be a Good Thing (TM), as it "
+"decreases the potential for damage by accidental wrong use of commands in "
+"superuser mode (e.g., an inadvertent rm -rf * in the wrong directory is "
+"disastrous as many can attest to)."
+msgstr ""
+"Un wrapper pour dpkg utilisé par debi pour permettre de tester facilement "
+"les paquets. Pour que debpkg fonctionne, il doit être positionné setuid "
+"root, ce qui doit être effectué par l’administrateur système - il n’est pas "
+"installé par défaut avec le setuid root. (Notez que le fait de pouvoir "
+"exécuter un debpkg avec le setuid root équivaut en réalité à avoir un accès "
+"root au système, il faut donc le faire avec prudence). Avoir debpkg en tant "
+"que wrapper pour dpkg peut être unu bonne chose, car ça peut réduire les "
+"risques de dommages résultant d'une mauvaise utilisation accidentelle des "
+"commandes en mode superutilisateur (par exemple, un rm -rf * par "
+"inadvertance dans le mauvais répertoire est désastreux, comme beaucoup "
+"peuvent en témoigner)."
+
+#. type: IP
+#: ../doc/devscripts.1:77
+#, no-wrap
+msgid "I<debrelease>(1)"
+msgstr "B<debrelease>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:79
+msgid ""
+"A wrapper around dupload or dput which figures out which version to upload, "
+"and then calls dupload or dput to actually perform the upload. [dupload | "
+"dput, ssh-client]"
+msgstr ""
+"Un wrapper autour de dupload ou dput qui détermine quelle version "
+"télécharger, puis appelle dupload ou dput pour effectuer le téléchargement. "
+"[dupload | dput, ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:79
+#, no-wrap
+msgid "I<debrebuild>(1)"
+msgstr "I<debrebuild>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:81
+msgid ""
+"A script that provided a .buildinfo file reports the instructions on how to "
+"try to reproduce the reported build. [sbuild | mmdebstrap, python3-pycurl, "
+"libdpkg-perl]"
+msgstr ""
+"Un script qui fournit un fichier .buildinfo expose les instructions pour "
+"reproduire la construction à l'identique. [sbuild | mmdebstrap, python3-"
+"pycurl, libdpkg-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:81
+#, no-wrap
+msgid "I<debrepro>(1)"
+msgstr "B<debrepro>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:83
+msgid ""
+"A script that tests reproducibility of Debian packages. It will build a "
+"given source directory twice, with a set of variation between the first and "
+"second build, and compare the binary packages produced. If diffoscope is "
+"installed, it is used to compare non-matching binaries. If disorderfs is "
+"installed, it is used during the build to inject non-determinism in "
+"filesystem listing operations. [faketime, diffoscope, disorderfs]"
+msgstr ""
+"Script qui teste la reproductibilité d'un paquet Debian. Il construit deux "
+"fois un répertoire source donné, avec un ensemble de variations entre la "
+"première et la deuxième construction, et compare les paquets binaires "
+"produits. Si diffoscope est installé, il est utilisé pour comparer les "
+"binaires qui diffèrent. Si disorderfs est installé, il est utilisé lors de "
+"la construction pour injecter du non-déterminisme dans les opérations de "
+"liste du système de fichiers. [faketime, diffoscope, disorderfs]"
+
+#. type: IP
+#: ../doc/devscripts.1:83
+#, no-wrap
+msgid "I<debrsign>(1)"
+msgstr "I<debrsign>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:85
+msgid ""
+"This transfers a .changes/.dsc pair to a remote machine for signing, and "
+"runs debsign on the remote machine over an SSH connection. [gnupg | gnupg2, "
+"debian-keyring, ssh-client]"
+msgstr ""
+"Transfère une paire de fichiers à signer .changes et .dsc et lance debsign "
+"sur la machine distante au travers d'une connection SSH. [gnupg | gnupg2, "
+"debian-keyring, ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:85
+#, no-wrap
+msgid "I<debsign>(1)"
+msgstr "I<debsign>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:87
+msgid ""
+"Use GNU Privacy Guard to sign the changes (and possibly dsc) files created "
+"by running dpkg-buildpackage with no-sign options. Useful if you are "
+"building a package on a remote machine and wish to sign it on a local one. "
+"This script is capable of automatically downloading the .changes and .dsc "
+"files from a remote machine. [gnupg |gnupg2, debian-keyring, ssh-client]*"
+msgstr ""
+"Utilisez GNU Privacy Guard pour signer les fichiers de changements (et "
+"éventuellement dsc) créés en exécutant dpkg-buildpackage avec les options "
+"sans signature. Utile si vous construisez un paquet sur une machine distante "
+"et souhaitez le signer sur un ordinateur local. Ce script est capable de "
+"télécharger automatiquement les fichiers .changes et .dsc à partir d’un "
+"ordinateur distant. [gnupg | gnupg2, debian-keyring, ssh-client] *"
+
+#. type: IP
+#: ../doc/devscripts.1:87
+#, no-wrap
+msgid "I<debsnap>(1)"
+msgstr "B<debsnap>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:89
+msgid ""
+"grab packages from https://snapshot.debian.org [libwww-perl, libjson-perl]"
+msgstr ""
+"récupérer des paquets de https://snapshot.debian.org [libwww-perl, libjson-"
+"perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:89
+#, no-wrap
+msgid "I<debuild>(1)"
+msgstr "B<debuild>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:91
+msgid ""
+"A wrapper for building a package (i.e., dpkg-buildpackage) to avoid problems "
+"with insufficient permissions and wrong paths etc. Debuild will set up the "
+"proper environment for building a package. Debuild will use the fakeroot "
+"program to build the package by default, but can be instructed to use any "
+"other gain-root command, or can even be installed setuid root. Debuild can "
+"also be used to run various of the debian/rules operations with the same "
+"root-gaining procedure. Debuild will also run lintian to check that the "
+"package does not have any major policy violations. [fakeroot, lintian, gnupg "
+"| gnupg2]*"
+msgstr ""
+"Un wrapper pour construire un paquet (c'est-à-dire, dpkg-buildpackage) afin "
+"d'éviter les problèmes des permissions insuffisantes, des chemins "
+"incorrects, etc… Debuild configure l'environnement approprié pour la "
+"construction d'un paquet. Debuild utilise le programme fakeroot pour "
+"construire le paquet par défaut, mais peut être invité à utiliser toute "
+"autre commande gain-root, ou peut même être installé setuid root. Debuild "
+"peut également être utilisé pour exécuter diverses opérations du fichier "
+"debian/rules avec la même procédure de gain root. Debuild exécute également "
+"lintian pour vérifier que le paquet ne comporte pas de violation majeure de "
+"la politique. [fakeroot, lintian, gnupg | gnupg2] *"
+
+#. type: IP
+#: ../doc/devscripts.1:91
+#, no-wrap
+msgid "I<deb-janitor>(1)"
+msgstr "I<deb-janitor>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:93
+msgid "command-line client for interacting with the Debian Janitor."
+msgstr "client ligne de commande pour interagir avec Debian-Janitor."
+
+#. type: IP
+#: ../doc/devscripts.1:93
+#, no-wrap
+msgid "I<deb-reversion>(1)"
+msgstr "B<deb-reversion>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:95
+msgid ""
+"increases a binary package version number and repacks the package, useful "
+"for porters and the like."
+msgstr ""
+"augmente le numéro de version d'un paquet binaire et reconstruit le paquet, "
+"pratique pour les porteurs et autres."
+
+#. type: IP
+#: ../doc/devscripts.1:95
+#, no-wrap
+msgid "I<deb-why-removed>(1)"
+msgstr "I<deb-why-removed>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:97
+msgid "shows the reason a package was removed from the archive. [libdpkg-perl]"
+msgstr ""
+"affiche la raison pour laquelle le paquet a été supprimé. [libdpkg-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:97
+#, no-wrap
+msgid "I<dep3changelog>(1)"
+msgstr "B<dep3changelog>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:99
+msgid "generate a changelog entry from a DEP3-style patch header."
+msgstr ""
+"préparer une entrée du journal de modifications à partir de l'en-tête d'un "
+"correctif compatible DEP3."
+
+#. type: IP
+#: ../doc/devscripts.1:99
+#, no-wrap
+msgid "I<desktop2menu>(1)"
+msgstr "B<desktop2menu>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:101
+msgid ""
+"given a freedesktop.org desktop file, generate a skeleton for a menu file. "
+"[libfile-desktopentry-perl]"
+msgstr ""
+"à partir d'un fichier desktop freedesktop.org, produire un corps de fichier "
+"menu. [libfile-desktopentry-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:101
+#, no-wrap
+msgid "I<dget>(1)"
+msgstr "B<dget>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:103
+msgid ""
+"Downloads Debian source and binary packages. Point at a .changes or .dsc to "
+"download all references files. Specify a package name to download it from "
+"the configured apt repository. [wget | curl]"
+msgstr ""
+"Télécharge les paquets source et binaires Debian. Pointe sur un fichier ."
+"changes ou .dsc pour télécharger tous les fichiers de référence. Indiquer un "
+"nom de paquet pour le télécharger depuis le référentiel apt configuré. [wget "
+"| curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:103
+#, no-wrap
+msgid "I<diff2patches>(1)"
+msgstr "B<diff2patches>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:105
+msgid ""
+"extracts patches from a .diff.gz file placing them under debian/ or, if "
+"present, debian/patches. [patchutils]"
+msgstr ""
+"extrait les correctifs d'un fichier .diff.gz en les plaçant dans debian/, ou "
+"debian/patches s'il existe. [patchutils]"
+
+#. type: IP
+#: ../doc/devscripts.1:105
+#, no-wrap
+msgid "I<dpkg-depcheck, dpkg-genbuilddeps>(1)"
+msgstr "B<dpkg-depcheck>, B<dpkg-genbuilddeps>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:107
+msgid ""
+"Runs a specified command (such as debian/rules build) or dpkg-buildpackage, "
+"respectively, to determine the packages used during the build process. This "
+"information can be helpful when trying to determine the packages needed in "
+"the Build-Depends etc. lines in the debian/control file. [build-essential, "
+"strace]"
+msgstr ""
+"Exécute une commande spécifiée (telle que debian/rules build) ou dpkg-"
+"buildpackage, respectivement, pour déterminer les paquets utilisés lors du "
+"processus de construction. Ces informations peuvent être utiles lorsque vous "
+"essayez de déterminer les paquets nécessaires dans les lignes Build-Depends "
+"etc. du fichier debian/control. [build-essential, strace]"
+
+#. type: IP
+#: ../doc/devscripts.1:107
+#, no-wrap
+msgid "I<dscextract>(1)"
+msgstr "B<dscextract>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:109
+msgid "extract a single file from a Debian source package. [patchutils]"
+msgstr "extraire un seul fichier d'un paquet source Debian. [patchutils]"
+
+#. type: IP
+#: ../doc/devscripts.1:109
+#, no-wrap
+msgid "I<dscverify>(1)"
+msgstr "B<dscverify>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:111
+msgid ""
+"check the signature and MD5 sums of a dsc file against the most current "
+"Debian keyring on your system. [gnupg | gnupg2, debian-keyring]"
+msgstr ""
+"vérifie la signature et les sommes MD5 d’un fichier dsc par rapport au "
+"dernier fichier de clés Debian de votre système. [gnupg | gnupg2, debian-"
+"keyring]"
+
+#. type: IP
+#: ../doc/devscripts.1:111
+#, no-wrap
+msgid "I<edit-patch>(1)"
+msgstr "B<edit-patch>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:113
+msgid ""
+"add/edit a patch for a source package and commit the changes. [quilt | "
+"dpatch | cdbs]"
+msgstr ""
+"ajouter et éditer un correctif pour un paquet source et envoyer les "
+"modifications. [quilt | dpatch | cdbs]"
+
+#. type: IP
+#: ../doc/devscripts.1:113
+#, no-wrap
+msgid "I<getbuildlog>(1)"
+msgstr "B<getbuildlog>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:115
+msgid "download package build logs from Debian auto-builders. [wget]"
+msgstr ""
+"télécharger les journaux de construction de paquet des serveurs Debian de "
+"construction automatique. [wget]"
+
+#. type: IP
+#: ../doc/devscripts.1:115
+#, no-wrap
+msgid "I<git-deborig>(1)"
+msgstr "B<git-deborig>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:117
+msgid ""
+"try to produce Debian orig.tar using git-archive(1). [libdpkg-perl, libgit-"
+"wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, libtry-tiny-"
+"perl]"
+msgstr ""
+"essayer de produire orig.tar de Debian avec B<git-archive>(1). [libdpkg-"
+"perl, libgit-wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, "
+"libtry-tiny-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:117
+#, no-wrap
+msgid "I<grep-excuses>(1)"
+msgstr "B<grep-excuses>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:119
+msgid ""
+"grep britney's excuses to find out what is happening to your packages. "
+"[libdbd-pg-perl, libterm-size-perl, libyaml-syck-perl, wget, w3m]"
+msgstr ""
+"rechercher vos paquets dans les fichiers excuses de britney. [libdbd-pg-"
+"perl, libterm-size-perl, libyaml-syck-perl, wget, w3m]"
+
+#. type: IP
+#: ../doc/devscripts.1:119
+#, no-wrap
+msgid "I<hardening-check>(1)"
+msgstr "B<hardening-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:121
+msgid "report the hardening characteristics of a set of binaries."
+msgstr ""
+"rapporter les caractéristiques de sécurisation d'un ensemble de binaires."
+
+#. type: IP
+#: ../doc/devscripts.1:121
+#, no-wrap
+msgid "I<list-unreleased>(1)"
+msgstr "B<list-unreleased>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:123
+msgid "searches for packages marked UNRELEASED in their changelog."
+msgstr "recherche les paquets marqués UNRELEASED dans leur changelog."
+
+#. type: IP
+#: ../doc/devscripts.1:123
+#, no-wrap
+msgid "I<ltnu (Long Time No Upload)>(1)"
+msgstr "I<ltnu (Long Time No Upload)>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:125
+msgid ""
+"List all uploads of packages by the given uploader or maintainer and display "
+"them ordered by the last upload of that package, oldest uploads first."
+msgstr ""
+"Afficher la liste de tous les envois de paquets d'un uploader ou d'un "
+"responsable, et les afficher à partir du dernier envoi."
+
+#. type: IP
+#: ../doc/devscripts.1:125
+#, no-wrap
+msgid "I<manpage-alert>(1)"
+msgstr "B<manpage-alert>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:127
+msgid "locate binaries without corresponding manpages. [man-db]"
+msgstr "trouver des programmes sans page de manuel. [man-db]"
+
+#. type: IP
+#: ../doc/devscripts.1:127
+#, no-wrap
+msgid "I<mass-bug>(1)"
+msgstr "B<mass-bug>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:129
+msgid "mass-file bug reports. [bsd-mailx | mailx]"
+msgstr "soumettre en masse des rapports de bogue. [bsd-mailx | mailx]"
+
+#. type: IP
+#: ../doc/devscripts.1:129
+#, no-wrap
+msgid "I<mergechanges>(1)"
+msgstr "B<mergechanges>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:131
+msgid ""
+"merge .changes files from the same release but built on different "
+"architectures."
+msgstr ""
+"fusionner les fichiers .changes d'une même version mais construits sur "
+"plusieurs architectures."
+
+#. type: IP
+#: ../doc/devscripts.1:131
+#, no-wrap
+msgid "I<mk-build-deps>(1)"
+msgstr "B<mk-build-deps>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:133
+msgid ""
+"Given a package name and/or control file, generate a binary package which "
+"may be installed to satisfy the build-dependencies of the given package. "
+"[equivs]"
+msgstr ""
+"À partir d'un nom de paquet ou d'un fichier \"control\", créer un paquet "
+"binaire qui peut être installé pour satisfaire les dépendances de "
+"construction d'un paquet. [equivs]"
+
+#. type: IP
+#: ../doc/devscripts.1:133
+#, no-wrap
+msgid "I<mk-origtargz>(1)"
+msgstr "B<mk-origtargz>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:135
+msgid ""
+"Rename upstream tarball, optionally changing the compression and removing "
+"unwanted files. [libfile-which-perl, unzip, xz-utils, file]"
+msgstr ""
+"Renommer l’archive amont, en modifiant éventuellement la compression et en "
+"supprimant les fichiers non désirés. [libfile-which-perl, unzip, xz-utils, "
+"file]"
+
+#. type: IP
+#: ../doc/devscripts.1:135
+#, no-wrap
+msgid "I<namecheck>(1)"
+msgstr "B<namecheck>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:137
+msgid "Check project names are not already taken."
+msgstr "Vérifier la disponibilité des noms de projet."
+
+#. type: IP
+#: ../doc/devscripts.1:137
+#, no-wrap
+msgid "I<nmudiff>(1)"
+msgstr "B<nmudiff>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:139
+msgid ""
+"prepare a diff of this version (presumably an NMU against the previously "
+"released version (as per the changelog) and submit the diff to the BTS. "
+"[patchutils, mutt]"
+msgstr ""
+"prépare un différentiel de cette version (présumée NMU) et de la précédente "
+"(d'après de changelog) et l'envoie vers le BTS. [patchutils, mutt]"
+
+#. type: IP
+#: ../doc/devscripts.1:139
+#, no-wrap
+msgid "I<origtargz>(1)"
+msgstr "B<origtargz>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:141
+msgid ""
+"fetch the orig tarball of a Debian package from various sources, and unpack "
+"it. [pristine-tar, pristine-lfs]"
+msgstr ""
+"récupérer l'archive amont d'un paquet Debian depuis divers sources, et la "
+"dépaqueter. [pristine-tar, pristine-lfs]"
+
+#. type: IP
+#: ../doc/devscripts.1:141
+#, no-wrap
+msgid "I<plotchangelog>(1)"
+msgstr "B<plotchangelog>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:143
+msgid ""
+"display information from a changelog graphically using gnuplot. [libtimedate-"
+"perl, gnuplot]"
+msgstr ""
+"afficher sous forme graphique les données d'un fichier changelog en "
+"utilisant gnuplot. [libtimedate-perl, gnuplot]"
+
+#. type: IP
+#: ../doc/devscripts.1:143
+#, no-wrap
+msgid "I<pts-subscribe>(1)"
+msgstr "B<pts-subscribe>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:145
+msgid ""
+"subscribe to the PTS (Package Tracking System) for a limited period of time. "
+"[bsd-mailx | mailx, at]"
+msgstr ""
+"s'abonner au PTS (Package Tracking System) pour un temps limité. [bsd-mailx "
+"| mailx, at]"
+
+#. type: IP
+#: ../doc/devscripts.1:145
+#, no-wrap
+msgid "I<rc-alert>(1)"
+msgstr "B<rc-alert>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:147
+msgid "list installed packages which have release-critical bugs. [wget | curl]"
+msgstr ""
+"afficher la liste des paquets installés ayant des bogues empêchant leur "
+"intégration dans la prochaine distribution. [wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:147
+#, no-wrap
+msgid "I<reproducible-check>(1)"
+msgstr "B<reproducible-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:149
+msgid ""
+"reports on the reproducible status of installed packages. For more details "
+"please see E<lt>https://reproducible-builds.orgE<gt>."
+msgstr ""
+"rapporter l'état \"reproductible\" des paquets installés. Pour en savoir "
+"plus, voir E<lt>https://reproducible-builds.orgE<gt>."
+
+#. type: IP
+#: ../doc/devscripts.1:149
+#, no-wrap
+msgid "I<rmadison>(1)"
+msgstr "B<rmadison>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:151
+msgid ""
+"remotely query the Debian archive database about packages. [liburi-perl, "
+"wget | curl]"
+msgstr ""
+"interroger à distance la base de données de l'archive Debian. [liburi-perl, "
+"wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:151
+#, no-wrap
+msgid "I<sadt>(1)"
+msgstr "B<sadt>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:153
+msgid "run DEP-8 tests. [python3-debian, autodep8]"
+msgstr "exécuter des tests DEP-8. [python3-debian, autodep8]"
+
+#. type: IP
+#: ../doc/devscripts.1:153
+#, no-wrap
+msgid "I<salsa>(1)"
+msgstr "I<salsa>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:155
+msgid ""
+"manipulates salsa.debian.org repositories and users [libgitlab-api-v4-perl]"
+msgstr ""
+"manipule les dépôts de salsa.debian.org et les utilisateurs [libgitlab-api-"
+"v4-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:155
+#, no-wrap
+msgid "I<suspicious-source>(1)"
+msgstr "B<suspicious-source>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:157
+msgid ""
+"output a list of files which are not common source files. [python3-magic]"
+msgstr ""
+"afficher une liste de fichiers qui ne sont pas des fichiers source usuels. "
+"[python3-magic]"
+
+#. type: IP
+#: ../doc/devscripts.1:157
+#, no-wrap
+msgid "I<svnpath>(1)"
+msgstr "B<svnpath>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:159
+msgid ""
+"Prints the path to the Subversion repository of a Subversion checkout. Also "
+"supports calculating the paths for branches and tags in a repository "
+"independent fashion. Used by debcommit to generate svn tags. [subversion]"
+msgstr ""
+"Imprime le chemin d'accès au référentiel Subversion d'une extraction "
+"Subversion. Prend également en charge le calcul des chemins des branches et "
+"des balises de manière indépendante du référentiel. Utilisé par debcommit "
+"pour générer des tags svn. [subversion]"
+
+#. type: IP
+#: ../doc/devscripts.1:159
+#, no-wrap
+msgid "I<tagpending>(1)"
+msgstr "B<tagpending>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:161
+msgid ""
+"runs from a Debian source tree and tags bugs that are to be closed in the "
+"latest changelog as pending. [libsoap-lite-perl]"
+msgstr ""
+"exécuter depuis une arborescence source Debian et placer l'étiquette "
+"\"pending\" sur tous les bogues à fermer dans le dernier groupe d'entrée du "
+"changelog. [libsoap-lite-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:161
+#, no-wrap
+msgid "I<transition-check>(1)"
+msgstr "B<transition-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:163
+msgid ""
+"Check a list of source packages for involvement in transitions for which "
+"uploads to unstable are currently blocked. [libwww-perl, libyaml-syck-perl]"
+msgstr ""
+"Vérifier si l'un des paquets source listés est impliqué dans une transition "
+"pour laquelle les envois sont bloqués actuellement. [libwww-perl, libyaml-"
+"syck-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:163
+#, no-wrap
+msgid "I<uscan>(1)"
+msgstr "B<uscan>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:165
+msgid ""
+"Automatically scan for and download upstream updates. Uscan can also call a "
+"program such as uupdate to attempt to update the Debianised version based on "
+"the new update. Whilst uscan could be used to release the updated version "
+"automatically, it is probably better not to without testing it first. Uscan "
+"can also verify detached OpenPGP signatures if upstream's signing key is "
+"known. [file, gpgv | gpgv2, gnupg | gnupg2, libfile-dirlist-perl, libfile-"
+"touch-perl, libfile-which-perl, liblwp-protocol-https-perl, libmoo-perl, "
+"libwww-perl, unzip, xz-utils]*"
+msgstr ""
+"Analyse et télécharge automatiquement les mises à jour en amont. Uscan peut "
+"également appeler un programme tel que uupdate pour tenter de mettre à jour "
+"la version Debianisée en fonction de la nouvelle mise à jour. Bien que uscan "
+"puisse être utilisé pour publier automatiquement la version mise à jour, il "
+"est probablement préférable de ne pas le faire sans tests. Uscan peut "
+"également vérifier les signatures OpenPGP détachées si la clé de signature "
+"en amont est connue. [file, gpgv | gpgv2, gnupg | gnupg2, libfile-dirlist-"
+"perl, libfile-touch-perl, libfile-which-perl, liblwp-protocol-https-perl, "
+"libmoo-perl, libwww-perl, unzip, xz-utils]*"
+
+#. type: IP
+#: ../doc/devscripts.1:165
+#, no-wrap
+msgid "I<uupdate>(1)"
+msgstr "B<uupdate>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:167
+msgid ""
+"Update the package with an archive or patches from an upstream author. This "
+"will be of help if you have to update your package. It will try to apply "
+"the latest diffs to your package and tell you how successful it was. [patch]"
+msgstr ""
+"Mets à jour le paquet avec une archive ou des correctifs d'un auteur amont. "
+"Cela vous aidera si vous devez mettre à jour votre paquet. Il essaie "
+"d’appliquer les dernières différences à votre paquet et vous reporte son "
+"résultat. [patch]"
+
+#. type: IP
+#: ../doc/devscripts.1:167
+#, no-wrap
+msgid "I<what-patch>(1)"
+msgstr "B<what-patch>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:169
+msgid ""
+"determine what patch system, if any, a source package is using. [patchutils]"
+msgstr ""
+"déterminer le système de correctifs, s'il existe, utilisé par un paquet "
+"source. [patchutils]"
+
+#. type: IP
+#: ../doc/devscripts.1:169
+#, no-wrap
+msgid "I<whodepends>(1)"
+msgstr "B<whodepends>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:171
+msgid "check which maintainers' packages depend on a package."
+msgstr "vérifier quels paquets (et responsables) dépendent d'un autre paquet."
+
+#. type: IP
+#: ../doc/devscripts.1:171
+#, no-wrap
+msgid "I<who-permits-upload>(1)"
+msgstr "B<who-permits-upload>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:173
+msgid ""
+"Retrieve information about Debian Maintainer access control lists. [gnupg | "
+"gnupg2, libencode-locale-perl, libwww-perl, debian-keyring]"
+msgstr ""
+"Récupérer des renseignements sur les listes de contrôle d’accès de "
+"mainteneurs Debian. [gnupg | gnupg2, libencode-locale-perl, libwww-perl, "
+"debian-keyring]"
+
+#. type: IP
+#: ../doc/devscripts.1:173
+#, no-wrap
+msgid "I<who-uploads>(1)"
+msgstr "B<who-uploads>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:175
+msgid ""
+"determine the most recent uploaders of a package to the Debian archive. "
+"[gnupg | gnupg2, debian-keyring, debian-maintainers, wget]"
+msgstr ""
+"identifier les dernières personnes ayant envoyé un paquet donné vers "
+"l'archive Debian. [gnupg | gnupg2, debian-keyring, debian-maintainers, wget]"
+
+#. type: IP
+#: ../doc/devscripts.1:175
+#, no-wrap
+msgid "I<wnpp-alert>(1)"
+msgstr "B<wnpp-alert>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:177
+msgid ""
+"list installed packages which are orphaned or up for adoption. [wget | curl]"
+msgstr ""
+"afficher la liste des paquets installés offerts à l'adoption ou orphelins. "
+"[wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:177
+#, no-wrap
+msgid "I<wnpp-check>(1)"
+msgstr "B<wnpp-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:179
+msgid ""
+"check whether there is an open request for packaging or intention to package "
+"bug for a package. [wget | curl]"
+msgstr ""
+"vérifier si un bogue du type paquet demandé (RFP) ou paquet en cours de "
+"travail (ITP) est ouvert pour un paquet. [wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:179
+#, no-wrap
+msgid "I<wrap-and-sort>(1)"
+msgstr "B<wrap-and-sort>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:180
+msgid "wrap long lines and sort items in packaging files. [python3-debian]"
+msgstr ""
+"couper les lignes longues et trier les items des fichiers d'empaquetage. "
+"[python3-debian]"
+
+#. type: textblock
+#: ../scripts/dget.pl:567
+msgid "dget - Download Debian source and binary packages"
+msgstr "dget - Télécharger des paquets Debian source et binaires"
+
+#. type: =item
+#: ../scripts/dget.pl:573
+msgid "B<dget> [I<options>] I<URL> ..."
+msgstr "B<dget> [I<options>] I<URL> ..."
+
+#. type: =item
+#: ../scripts/dget.pl:575
+msgid "B<dget> [I<options>] [B<--all>] I<package>[B<=>I<version>] ..."
+msgstr "B<dget> [I<options>] [B<--all>] I<paquet>[B<=>I<version>] ..."
+
+#. type: textblock
+#: ../scripts/dget.pl:581
+msgid ""
+"B<dget> downloads Debian packages. In the first form, B<dget> fetches the "
+"requested URLs. If this is a .dsc or .changes file, then B<dget> acts as a "
+"source-package aware form of B<wget>: it also fetches any files referenced "
+"in the .dsc/.changes file. The downloaded source is then checked with "
+"B<dscverify> and, if successful, unpacked by B<dpkg-source>."
+msgstr ""
+"B<dget> télécharge des paquets Debian. Avec la première forme, B<dget> "
+"télécharge l'adresse passée. Si cette adresse pointe vers un fichier .dsc "
+"ou .changes, B<dget> agit comme une sorte de B<wget> adapté aux paquets "
+"source : il télécharge aussi tous les fichiers référencés dans le fichier ."
+"dsc/.changes. Le paquet source téléchargé est ensuite vérifié avec "
+"B<dscverify> puis dépaqueté avec B<dpkg-source> si la vérification a réussi."
+
+#. type: textblock
+#: ../scripts/dget.pl:588
+msgid ""
+"In the second form, B<dget> downloads a I<binary> package (i.e., a I<.deb> "
+"file) from the Debian mirror configured in /etc/apt/sources.list(.d). "
+"Unlike B<apt-get install -d>, it does not require root privileges, writes to "
+"the current directory, and does not download dependencies. If a version "
+"number is specified, this version of the package is requested. With B<--"
+"all>, the list of all binaries for the source package I<package> is "
+"extracted from the output of C<apt-cache showsrc package>."
+msgstr ""
+"Avec la seconde forme, B<dget> télécharge un paquet I<binaire> (c'est-à-dire "
+"un fichier I<.deb>) depuis le miroir Debian configuré dans /etc/apt/sources."
+"lists(.d). À la différence d'B<apt-get install -d>, il ne nécessite pas les "
+"droits du superutilisateur, écrit dans le répertoire actuel et ne télécharge "
+"pas les dépendances. Si un numéro de version est indiqué, cette version du "
+"paquet est téléchargée. Avec B<--all>, la liste de tous les binaires pour le "
+"paquet source I<paquet> est extraite de la sortie de C<apt-cache showsrc "
+"paquet>."
+
+#. type: textblock
+#: ../scripts/dget.pl:597
+msgid ""
+"In both cases dget is capable of getting several packages and/or URLs at "
+"once."
+msgstr ""
+"Dans tous les cas, dget peut récupérer plusieurs paquets ou URL à la fois."
+
+#. type: textblock
+#: ../scripts/dget.pl:600
+msgid ""
+"(Note that I<.udeb> packages used by debian-installer are located in "
+"separate packages files from I<.deb> packages. In order to use I<.udebs> "
+"with B<dget>, you will need to have configured B<apt> to use a packages file "
+"for I<component>/I<debian-installer>)."
+msgstr ""
+"(Remarquez que les paquets I<.udeb> utilisés par l'installateur Debian sont "
+"situés dans des fichiers de paquets distincts des paquets I<.deb>. Pour "
+"utiliser des I<.udeb> avec B<dget>, vous devrez configurer B<apt> pour "
+"utiliser des fichiers de paquets pour I<composante>/I<debian-installer>.)"
+
+#. type: textblock
+#: ../scripts/dget.pl:605
+msgid ""
+"Before downloading files listed in .dsc and .changes files, and before "
+"downloading binary packages, B<dget> checks to see whether any of these "
+"files already exist. If they do, then their md5sums are compared to avoid "
+"downloading them again unnecessarily. B<dget> also looks for matching files "
+"in I</var/cache/apt/archives> and directories given by the B<--path> option "
+"or specified in the configuration files (see below). Finally, if "
+"downloading (.orig).tar.gz or .diff.gz files fails, dget consults B<apt-get "
+"source --print-uris>. Download backends used are B<curl> and B<wget>, "
+"looked for in that order."
+msgstr ""
+"Avant de télécharger les fichiers référencés dans les fichiers .dsc et ."
+"changes, et avant de télécharger des paquets binaires, B<dget> vérifie si "
+"les fichiers existent déjà. Si c'est le cas, les sommes de contrôle MD5 sont "
+"comparées afin d'éviter de gâcher de la bande passante. B<dget> cherche "
+"également si les fichiers sont dans I</var/cache/apt/archives> ou un des "
+"répertoires fournis avec l'option B<--path> ou dans les fichiers de "
+"configuration (voir ci-dessous). Enfin, si le téléchargement d'un fichier (."
+"orig).tar.gz ou .diff.gz échoue, dget consulte B<apt-get source --print-"
+"uris>. Les programmes de téléchargement utilisés sont B<curl> et B<wget>, "
+"recherchés dans cet ordre."
+
+#. type: textblock
+#: ../scripts/dget.pl:615
+msgid ""
+"B<dget> was written to make it easier to retrieve source packages from the "
+"web for sponsor uploads. For checking the package with B<debdiff>, the last "
+"binary version is available via B<dget> I<package>, the last source version "
+"via B<apt-get source> I<package>."
+msgstr ""
+"B<dget> a été écrit pour faciliter la récupération de paquets source par le "
+"web pour les envois parrainés. Afin de vérifier le paquet avec B<debdiff>, "
+"la dernière version binaire est disponible avec B<dget> I<paquet>, la "
+"dernière version source avec B<apt-get source> I<paquet>."
+
+#. type: textblock
+#: ../scripts/dget.pl:626
+msgid ""
+"Interpret I<package> as a source package name, and download all binaries as "
+"found in the output of \"apt-cache showsrc I<package>\". If I<package> is "
+"arch-qualified, then only binary packages which are \"Arch: all\", \"Arch: "
+"any\", or \"Arch: $arch\" will be downloaded."
+msgstr ""
+"Interpréter I<paquet> comme un nom de paquet source, et télécharger tous les "
+"binaires trouvés dans la sortie de \"apt-cache showsrc I<paquet>\". Si "
+"I<paquet> porte une qualification d'architecture, alors seuls les paquets "
+"binaires qui sont \"Arch: all\", \"Arch: any\", ou \"Arch: $arch\" seront "
+"téléchargés."
+
+#. type: =item
+#: ../scripts/dget.pl:631
+msgid "B<-b>, B<--backup>"
+msgstr "B<-b>, B<--backup>"
+
+#. type: textblock
+#: ../scripts/dget.pl:633
+msgid "Move files that would be overwritten to I<./backup>."
+msgstr "Déplacer les fichiers qui devraient être écrasés dans I<./backup>."
+
+#. type: textblock
+#: ../scripts/dget.pl:637
+msgid "Suppress B<wget>/B<curl> non-error output."
+msgstr "Supprimer la sortie de B<wget>/B<curl> (sauf les erreurs)."
+
+#. type: =item
+#: ../scripts/dget.pl:639 ../scripts/origtargz.pl:134
+msgid "B<-d>, B<--download-only>"
+msgstr "B<-d>, B<--download-only>"
+
+#. type: textblock
+#: ../scripts/dget.pl:641
+msgid ""
+"Do not run B<dpkg-source -x> on the downloaded source package. This can "
+"only be used with the first method of calling B<dget>."
+msgstr ""
+"Ne pas exécuter B<dpkg-source -x> sur le paquet source téléchargé. Cette "
+"option ne peut être utilisée qu'avec la première méthode d'invocation de "
+"B<dget>."
+
+#. type: =item
+#: ../scripts/dget.pl:644
+msgid "B<-x>, B<--extract>"
+msgstr "B<-x>, B<--extract>"
+
+#. type: textblock
+#: ../scripts/dget.pl:646
+msgid ""
+"Run B<dpkg-source -x> on the downloaded source package to unpack it. This "
+"option is the default and can only be used with the first method of calling "
+"B<dget>."
+msgstr ""
+"Exécuter B<dpkg-source -x> sur le paquet source téléchargé. Cette option "
+"correspond au comportement par défaut et ne peut être utilisée qu'avec la "
+"première méthode d'invocation de B<dget>."
+
+#. type: =item
+#: ../scripts/dget.pl:650
+msgid "B<-u>, B<--allow-unauthenticated>"
+msgstr "B<-u>, B<--allow-unauthenticated>"
+
+#. type: textblock
+#: ../scripts/dget.pl:652
+msgid ""
+"Do not attempt to verify the integrity of downloaded source packages using "
+"B<dscverify>."
+msgstr ""
+"Ne pas chercher à vérifier l'intégrité des paquets source téléchargés en "
+"utilisant B<dscverify>."
+
+#. type: =item
+#: ../scripts/dget.pl:655
+msgid "B<--build>"
+msgstr "B<--build>"
+
+#. type: textblock
+#: ../scripts/dget.pl:657
+msgid "Run B<dpkg-buildpackage -b -uc> on the downloaded source package."
+msgstr "Exécuter B<dpkg-buildpackage -b -uc> sur le paquet source téléchargé."
+
+#. type: =item
+#: ../scripts/dget.pl:659
+msgid "B<--path> I<DIR>[B<:>I<DIR> ...]"
+msgstr "B<--path> I<RÉP>[B<:>I<RÉP> ...]"
+
+#. type: textblock
+#: ../scripts/dget.pl:661
+msgid ""
+"In addition to I</var/cache/apt/archives>, B<dget> uses the colon-separated "
+"list given as argument to B<--path> to find files with a matching md5sum. "
+"For example: \"--path /srv/pbuilder/result:/home/cb/UploadQueue\". If DIR "
+"is empty (i.e., \"--path ''\" is specified), then any previously listed "
+"directories or directories specified in the configuration files will be "
+"ignored. This option may be specified multiple times, and all of the "
+"directories listed will be searched; hence, the above example could have "
+"been written as: \"--path /srv/pbuilder/result --path /home/cb/UploadQueue\"."
+msgstr ""
+"En plus de I</var/cache/apt/archives>, B<dget> cherche les paquets ayant une "
+"somme de contrôle MD5 correspondante dans la liste de répertoires donnée en "
+"paramètre à B<--path>. Par exemple \"--path /srv/pbuilder/result:/home/cb/"
+"UploadQueue\". Si RÉP est vide (c'est-à-dire que l'option \"--path '' est "
+"passée), alors tous les répertoires passés précédemment ou dans les fichiers "
+"de configuration sont ignorés. Cette option peut être passée plusieurs fois, "
+"et B<dget> cherchera dans tous les répertoires listés. Ainsi, l'exemple ci-"
+"dessus est équivalent à \"--path /srv/pbuilder/result --path /home/cb/"
+"UploadQueue\"."
+
+#. type: =item
+#: ../scripts/dget.pl:672
+msgid "B<-k>, B<--insecure>"
+msgstr "B<-k>, B<--insecure>"
+
+#. type: textblock
+#: ../scripts/dget.pl:674
+msgid "Allow SSL connections to untrusted hosts."
+msgstr ""
+"Autoriser les connexions SSL vers des hôtes dont l'authenticité n'est pas "
+"certifiée."
+
+#. type: =item
+#: ../scripts/dget.pl:676 ../scripts/salsa.pl:456
+msgid "B<--no-cache>"
+msgstr "B<--no-cache>"
+
+#. type: textblock
+#: ../scripts/dget.pl:678
+msgid "Bypass server-side HTTP caches by sending a B<Pragma: no-cache> header."
+msgstr ""
+"Éviter les caches HTTP côté serveur en envoyant un en-tête B<Pragma: no-"
+"cache>."
+
+#. type: textblock
+#: ../scripts/dget.pl:682
+msgid "Show a help message."
+msgstr "Afficher un message d'aide."
+
+#. type: textblock
+#: ../scripts/dget.pl:686
+msgid "Show version information."
+msgstr "Afficher les informations sur la version."
+
+# NOTE: presque identique
+#. type: textblock
+#: ../scripts/dget.pl:692
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variable is:"
+msgstr ""
+"Les deux fichiers de configuration I</etc/devscripts.conf> et I<~/."
+"devscripts> sont chargés dans cet ordre par un interpréteur de commandes "
+"pour définir les variables de configuration. Des options de ligne de "
+"commande peuvent être utilisées pour écraser les paramètres des fichiers de "
+"configuration. Les paramètres des variables d'environnement sont ignorés à "
+"cette fin. La variable actuellement reconnue est :"
+
+#. type: =item
+#: ../scripts/dget.pl:700
+msgid "B<DGET_PATH>"
+msgstr "B<DGET_PATH>"
+
+#. type: textblock
+#: ../scripts/dget.pl:702
+msgid ""
+"This can be set to a colon-separated list of directories in which to search "
+"for files in addition to the default I</var/cache/apt/archives>. It has the "
+"same effect as the B<--path> command line option. It is not set by default."
+msgstr ""
+"Liste de répertoires dans lesquels chercher les fichiers, en plus de I</var/"
+"cache/apt/archives> qui est utilisé par défaut. Cette variable a le même "
+"effet que l'option de ligne de commande B<--path>. Par défaut, elle n'est "
+"pas définie."
+
+#. type: =item
+#: ../scripts/dget.pl:707
+msgid "B<DGET_UNPACK>"
+msgstr "B<DGET_UNPACK>"
+
+#. type: textblock
+#: ../scripts/dget.pl:709
+msgid ""
+"Set to 'no' to disable extracting downloaded source packages. Default is "
+"'yes'."
+msgstr ""
+"À configurer à \"no\" pour désactiver l'extraction des paquets source "
+"téléchargés. La valeur par défaut est \"yes\"."
+
+#. type: =item
+#: ../scripts/dget.pl:712
+msgid "B<DGET_VERIFY>"
+msgstr "B<DGET_VERIFY>"
+
+#. type: textblock
+#: ../scripts/dget.pl:714
+msgid ""
+"Set to 'no' to disable checking signatures of downloaded source packages. "
+"Default is 'yes'."
+msgstr ""
+"À configurer à \"no\" pour désactiver la vérification des signatures des "
+"paquets source téléchargés. La valeur par défaut est \"yes\"."
+
+#. type: textblock
+#: ../scripts/dget.pl:721
+msgid ""
+"Download all I<.deb> files for the previous version of a package and run "
+"B<debdiff> on them:"
+msgstr ""
+"Télécharger tous les fichiers I<.deb> pour la version précédente d’un paquet "
+"et exécuter B<debdiff> avec eux :"
+
+#. type: verbatim
+#: ../scripts/dget.pl:724
+#, no-wrap
+msgid ""
+" dget --all mypackage=1.2-1\n"
+" debdiff --from *_1.2-1_*.deb --to *_1.2-2_*.deb\n"
+"\n"
+msgstr ""
+" dget --all monpaquet=1.2-1\n"
+" debdiff --from *_1.2-1_*.deb --to *_1.2-2_*.deb\n"
+"\n"
+
+#. type: =head1
+#: ../scripts/dget.pl:727
+msgid "BUGS AND COMPATIBILITY"
+msgstr "BOGUES ET COMPATIBILITÉ"
+
+#. type: textblock
+#: ../scripts/dget.pl:729
+msgid "B<dget> I<package> should be implemented in B<apt-get install -d>."
+msgstr "B<dget> I<paquet> devrait être implémenté dans B<apt-get install -d>."
+
+#. type: textblock
+#: ../scripts/dget.pl:731
+msgid ""
+"Before devscripts version 2.10.17, the default was not to extract the "
+"downloaded source. Set DGET_UNPACK=no to revert to the old behaviour."
+msgstr ""
+"Avant la version 2.10.17 de devscripts, le comportement par défaut était de "
+"ne pas extraire les paquets source téléchargés. Configurez DGET_UNPACK à "
+"\"no\" pour retrouver cet ancien comportement."
+
+#. type: textblock
+#: ../scripts/dget.pl:736
+msgid ""
+"This program is Copyright (C) 2005-2013 by Christoph Berg <myon@debian."
+"org>. Modifications are Copyright (C) 2005-06 by Julian Gilbey <jdg@debian."
+"org>."
+msgstr ""
+"Ce programme est Copyright (C) 2005-2013 Christoph Berg <myon@debian.org>. "
+"Les modifications sont Copyright (C) 2005-2006 Julian Gilbey <jdg@debian."
+"org>."
+
+#. type: textblock
+#: ../scripts/dget.pl:739 ../scripts/tagpending.pl:434
+msgid ""
+"This program is licensed under the terms of the GPL, either version 2 of the "
+"License, or (at your option) any later version."
+msgstr ""
+"Ce programme est publié sous les termes de la Licence Publique Générale "
+"(GPL) version 2 ou toute version ultérieure (à votre discrétion)."
+
+#. type: textblock
+#: ../scripts/dget.pl:744
+msgid ""
+"B<apt-get>(1), B<curl>(1), B<debcheckout>(1), B<debdiff>(1), B<dpkg-"
+"source>(1), B<wget>(1)"
+msgstr ""
+"B<apt-get>(1), B<curl>(1), B<debcheckout>(1), B<debdiff>(1), B<dpkg-"
+"source>(1), B<wget>(1)"
+
+#. type: TH
+#: ../scripts/diff2patches.1:1
+#, no-wrap
+msgid "diff2patches"
+msgstr "diff2patches"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:1 ../scripts/diff2patches.1:50
+#, no-wrap
+msgid "Raphael Geissert E<lt>atomo64@gmail.comE<gt>"
+msgstr "Raphael Geissert E<lt>atomo64@gmail.comE<gt>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:5
+msgid "diff2patches - Extract non-debian/ patches from .diff.gz files"
+msgstr ""
+"diff2patches - Extraire les correctifs qui ne s'appliquent pas à debian/ "
+"dans des fichiers .diff.gz"
+
+#. type: SH
+#: ../scripts/diff2patches.1:5
+#, no-wrap
+msgid "SYNTAX"
+msgstr "SYNTAXE"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:8
+msgid "B<diff2patches >I<filename>"
+msgstr "B<diff2patches> I<nom_fichier>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:10
+msgid "B<diff2patches --help>|B<--version>"
+msgstr "B<diff2patches --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:16
+msgid ""
+"Extracts patches from .diff.gz which apply to files outside the ``debian/'' "
+"directory scope. A patch is created for each modified file. Each patch is "
+"named according to the path of the modified file, with ``/'' replaced by "
+"``___'', and an extension of ``.patch''."
+msgstr ""
+"Extraire les correctifs de .diff.gz qui ne s'appliquent au répertoire "
+"\"debian/\". Un correctif est créé par fichier modifié. Chaque correctif est "
+"nommé en fonction du chemin du fichier modifié, en remplaçant \"/\" par "
+"\"___\", et avec une extension \".patch\"."
+
+#. type: TP
+#: ../scripts/diff2patches.1:18
+#, no-wrap
+msgid "I<filename>"
+msgstr "I<nom_fichier>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:22
+msgid ""
+"Extract patches from I<filename> which apply outside the ``debian/'' "
+"directory."
+msgstr ""
+"Extraire les correctifs de I<nom_fichier> qui ne s'appliquent pas au "
+"répertoire \"debian/\"."
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:25
+msgid "Output help information and exit."
+msgstr "Afficher un message d'aide puis quitter."
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:28
+msgid "Output version information and exit."
+msgstr "Afficher les informations sur la version puis quitter."
+
+#. type: TP
+#: ../scripts/diff2patches.1:29
+#, no-wrap
+msgid "I<debian/control>"
+msgstr "I<debian/control>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:32
+msgid "Existence of this file is tested before any patch is extracted."
+msgstr "L'existence de ce fichier est testée avant d'extraire les correctifs."
+
+#. type: TP
+#: ../scripts/diff2patches.1:32
+#, no-wrap
+msgid "I<debian/>"
+msgstr "I<debian/>"
+
+#. type: TQ
+#: ../scripts/diff2patches.1:34
+#, no-wrap
+msgid "I<debian/patches/>"
+msgstr "I<debian/patches/>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:40
+msgid ""
+"Patches are extracted to one of these directories. ``debian/patches/'' is "
+"preferred, if it exists. If I<DEB_PATCHES> is present in the environment, "
+"it will override this behavior (see ``ENVIRONMENT VARIABLES'' section below)."
+msgstr ""
+"Les correctifs sont extraits dans ce répertoire. \"debian/patches/\" est "
+"utilisé s'il existe. Si I<DEB_PATCHES> est définie, elle est prioritaire sur "
+"ce comportement (consultez la section B<VARIABLES D'ENVIRONNEMENT> ci-"
+"dessous)."
+
+#. type: TP
+#: ../scripts/diff2patches.1:41
+#, no-wrap
+msgid "B<DEB_PATCHES>"
+msgstr "B<DEB_PATCHES>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:45
+msgid ""
+"When defined and points to an existing directory, patches are extracted in "
+"that directory and not under ``debian/'' nor ``debian/patches/''."
+msgstr ""
+"Quand elle est présente et si elle pointe vers un répertoire existant, les "
+"correctifs sont extraits dans ce répertoire au lieu de les placer dans le "
+"répertoire \"debian\" ou \"debian/patches\"."
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:48
+msgid "B<combinediff>(1)"
+msgstr "B<combinediff>(1)"
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "DPKG-DEPCHECK"
+msgstr "DPKG-DEPCHECK"
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "March 2002"
+msgstr "Mars 2002"
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "dpkg-depcheck"
+msgstr "dpkg-depcheck"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:4
+msgid "dpkg-depcheck - determine packages used to execute a command"
+msgstr ""
+"dpkg-depcheck - Déterminer les paquets utilisés pour exécuter une commande"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:6
+msgid "B<dpkg-depcheck> [I<options>] I<command>"
+msgstr "B<dpkg-depcheck> [I<options>] I<commande>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:15
+msgid ""
+"This program runs the specified command under B<strace> and then determines "
+"and outputs the packages used in the process. The list can be trimmed in "
+"various ways as described in the options below. A good example of this "
+"program would be the command B<dpkg-depcheck -b debian/rules build>, which "
+"would give a good first approximation to the Build-Depends line needed by a "
+"Debian package. Note, however, that this does I<not> give any direct "
+"information on versions required or architecture-specific packages."
+msgstr ""
+"Ce programme exécute la commande indiquée avec B<strace> puis détermine et "
+"affiche la liste des paquets utilisés par ce processus. La liste est "
+"affectée par les options décrites plus bas. Un bon exemple d'utilisation de "
+"ce programme consiste à exécuter B<dpkg-depcheck -b debian/rules build>, qui "
+"donnera une première bonne approximation de la ligne des dépendances de "
+"construction (Build-Depends) du paquet Debian. Remarquez cependant que ça ne "
+"donne I<aucune> information sur les versions nécessaires ou sur les paquets "
+"spécifiques à une architecture."
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:22
+msgid ""
+"Report all packages used to run I<command>. This is the default behaviour. "
+"If used in conjunction with B<-b>, B<-d> or B<-m>, gives additional "
+"information on those packages skipped by these options."
+msgstr ""
+"Signaler les paquets utilisés pour exécuter la I<commande>, ce qui est le "
+"comportement par défaut. Utilisée avec B<-b>, B<-d> ou B<-m>, elle procure "
+"davantage d'informations sur les paquets ignorés par ces options."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:22
+#, no-wrap
+msgid "B<-b>, B<--build-depends>"
+msgstr "B<-b>, B<--build-depends>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:26
+msgid ""
+"Do not report any build-essential or essential packages used, or any of "
+"their (direct or indirect) dependencies."
+msgstr ""
+"Ne signaler aucune utilisation d'un paquet \"essential\" (essentiel) ou "
+"\"build-essential\" (essentiel pour la construction des paquets), ou d'une "
+"de leurs dépendances (directes ou indirectes)."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:26
+#, no-wrap
+msgid "B<-d>, B<--ignore-dev-deps>"
+msgstr "B<-d>, B<--ignore-dev-deps>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:30
+msgid ""
+"Do not show packages used which are direct dependencies of I<-dev> packages "
+"used. This implies B<-b>."
+msgstr ""
+"Ne pas afficher les paquets qui sont des dépendances directes des paquets I<-"
+"dev> utilisés, ce qui implique l'option B<-b>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:30
+#, no-wrap
+msgid "B<-m>, B<--min-deps>"
+msgstr "B<-m>, B<--min-deps>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:34
+msgid ""
+"Output a minimal set of packages needed, taking into account direct "
+"dependencies. Using B<-m> implies B<-d> and also B<-b>."
+msgstr ""
+"Donner un ensemble minimaliste de paquets nécessaires, en prenant en compte "
+"les dépendances directes. Utiliser B<-m> implique B<-d> ainsi que B<-b>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:34
+#, no-wrap
+msgid "B<-C>, B<--C-locale>"
+msgstr "B<-C>, B<--C-locale>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:37
+msgid "Run I<command> with the C locale."
+msgstr "Exécuter la I<commande> avec les paramètres régionaux (\"locale\") C."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:37
+#, no-wrap
+msgid "B<--no-C-locale>"
+msgstr "B<--no-C-locale>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:40
+msgid "Don't change locale when running I<command>."
+msgstr "Ne pas changer la \"locale\" lors de l'exécution de I<commande>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:40
+#, no-wrap
+msgid "B<-l>, B<--list-files>"
+msgstr "B<-l>, B<--list-files>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:43
+msgid "Also report the list of files used in each package."
+msgstr "Signaler également la liste des fichiers utilisés dans chaque paquet."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:43
+#, no-wrap
+msgid "B<--no-list-files>"
+msgstr "B<--no-list-files>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:47
+msgid "Do not report the files used in each package. Cancels a B<-l> option."
+msgstr ""
+"Ne pas signaler la liste des fichiers utilisés dans chaque paquet. Cette "
+"option annule l'option B<-l>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:47
+#, no-wrap
+msgid "B<-o>, B<--output=>I<FILE>"
+msgstr "B<-o>, B<--output>=I<FICHIER>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:50
+msgid "Output the package diagnostics to I<FILE> instead of stdout."
+msgstr ""
+"Diriger le diagnostic du paquet dans le I<FICHIER> plutôt que sur la sortie "
+"standard."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:50
+#, no-wrap
+msgid "B<-O>, B<--strace-output=>I<FILE>"
+msgstr "B<-O>, B<--strace-output>=I<FICHIER>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:54
+msgid ""
+"Write the B<strace> output to I<FILE> when tracing I<command> instead of "
+"using a temporary file."
+msgstr ""
+"Écrire la sortie de B<strace> dans I<FICHIER> plutôt que dans un fichier "
+"temporaire lorsque la I<commande> est \"tracée\"."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:54
+#, no-wrap
+msgid "B<-I>, B<--strace-input=>I<FILE>"
+msgstr "B<-I>, B<--strace-input>=I<FICHIER>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:59
+msgid ""
+"Get B<strace> output from I<FILE> instead of tracing I<command>; B<strace> "
+"must have be run with the B<-f -q> options for this to work."
+msgstr ""
+"Utiliser la sortie B<strace> du I<FICHIER> au lieu de \"trace\" la "
+"I<commande>. B<strace> doit avoir été exécuté avec les options B<-f -q> pour "
+"que cela fonctionne."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:59
+#, no-wrap
+msgid "B<-f>, B<--features=>I<LIST>"
+msgstr "B<-f>, B<--features>=I<LISTE>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:65
+msgid ""
+"Enable or disabled features given in the comma-separated I<LIST> as "
+"follows. A feature is enabled with I<+feature> or just I<feature> and "
+"disabled with I<-feature>. The currently recognised features are:"
+msgstr ""
+"Activer ou désactiver les fonctionnalités données dans la I<LISTE>. Les "
+"fonctionnalités sont séparées par des virgules. Une fonctionnalité est "
+"activée en précisant I<+fonctionnalité> ou juste I<fonctionnalité> ; elle "
+"est désactivée en précisant I<-fonctionnalité>. La liste des fonctionnalités "
+"reconnues actuellement est la suivante :"
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:67
+#, no-wrap
+msgid "B<warn-local>"
+msgstr "B<warn-local>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:71
+msgid ""
+"Warn if files in I</usr/local> or I</var/local> are used. Enabled by "
+"default."
+msgstr ""
+"Avertir si des fichiers de I</usr/local> ou I</var/local> sont utilisés. "
+"Cette option est activée par défaut."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:71
+#, no-wrap
+msgid "B<discard-check-version>"
+msgstr "B<discard-check-version>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:76
+msgid ""
+"Discards I<execve> when only a I<--version> argument is given to the "
+"program; this works around some configure scripts that check for binaries "
+"they don't actually use. Enabled by default."
+msgstr ""
+"Ne pas utiliser I<execve> lorsque seul un paramètre B<--version> est donné "
+"au programme. C'est une astuce pour les scripts \"configure\" qui "
+"recherchent des exécutables qu'ils n'utiliseront pas finalement. Cette "
+"fonctionnalité est activée par défaut."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:76
+#, no-wrap
+msgid "B<trace-local>"
+msgstr "B<trace-local>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:81
+msgid ""
+"Also try to identify files which are accessed in I</usr/local> and I</var/"
+"local>. Not usually very useful, as Debian does not place files in these "
+"directories. Disabled by default."
+msgstr ""
+"Essayer également d'identifier les accès aux fichiers de I</usr/local> et I</"
+"var/local>. Ce n'est généralement pas très utile, puisque qu'aucun fichier "
+"n'y est placé par Debian. Cette fonctionnalité est désactivée par défaut."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:81
+#, no-wrap
+msgid "B<catch-alternatives>"
+msgstr "B<catch-alternatives>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:85
+msgid ""
+"Warn about access to files controlled by the Debian I<alternatives> "
+"mechanism. Enabled by default."
+msgstr ""
+"Avertir à propos des accès aux fichiers contrôlés par le système "
+"d'I<alternatives> de Debian. Cette fonctionnalité est activée par défaut."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:85
+#, no-wrap
+msgid "B<discard-sgml-catalogs>"
+msgstr "B<discard-sgml-catalogs>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:90
+msgid ""
+"Discards access to SGML catalogs; some SGML tools read all the registered "
+"catalogs at startup. Files matching the regexp /usr/share/sgml/.*\\e.cat "
+"are recognised as catalogs. Enabled by default."
+msgstr ""
+"Ne pas prendre les accès aux catalogues SGML en considération. Certains "
+"outils lisent tous les catalogues au démarrage. Les fichiers qui "
+"correspondent à l'expression rationnelle /usr/share/sgml/.*\\e.cat sont "
+"considérés comme des catalogues. Cette fonctionnalité est activée par défaut."
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:99
+msgid "Display usage information and exit."
+msgstr "Afficher un message d'aide et quitter."
+
+#. type: =item
+#: ../scripts/dpkg-depcheck.1:99 ../scripts/mk-build-deps.pl:115
+#, no-wrap
+msgid "B<-v>, B<--version>"
+msgstr "B<-v>, B<--version>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:102
+msgid "Display version and copyright information and exit."
+msgstr "Afficher la version et le copyright puis quitter."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:108 ../scripts/grep-excuses.1:52
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced in that order to set configuration variables. Command line options "
+"can be used to override configuration file settings. Environment variable "
+"settings are ignored for this purpose. The currently recognised variable is:"
+msgstr ""
+"Les deux fichiers de configuration I</etc/devscripts.conf> et I<~/."
+"devscripts> sont évalués dans cet ordre par un interpréteur de commandes "
+"pour placer les variables de configuration. Des options de ligne de commande "
+"peuvent être utilisées pour neutraliser les paramètres des fichiers de "
+"configuration. Les paramètres des variables d'environnement sont ignorés à "
+"cette fin. Si la première option donnée en ligne de commande est B<--"
+"noconf>, alors ces fichiers ne sont pas évalués. Les variables actuellement "
+"identifiées sont :"
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:108
+#, no-wrap
+msgid "B<DPKG_DEPCHECK_OPTIONS>"
+msgstr "B<DPKG_DEPCHECK_OPTIONS>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:112
+msgid ""
+"These are options which are parsed before the command-line options. For "
+"example,"
+msgstr ""
+"Il s'agit des options qui sont analysées avant les options de la ligne de "
+"commande. Par exemple,"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:114
+msgid "DPKG_DEPCHECK_OPTIONS=\"-b -f-catch-alternatives\""
+msgstr "DPKG_DEPCHECK_OPTIONS=\"-b -f-catch-alternatives\""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:118
+msgid ""
+"which passes these options to B<dpkg-depcheck> before any command-line "
+"options are processed. You are advised not to try tricky quoting, because "
+"of the vagaries of shell quoting!"
+msgstr ""
+"qui permet de passer ces options à B<dpkg-depcheck> avant que les options de "
+"la ligne de commande soient analysées. Il est conseillé de ne pas jouer au "
+"plus fin avec les guillemets, car les interpréteurs de commandes sont assez "
+"capricieux à ce sujet !"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:123
+msgid ""
+"B<dpkg>(1), B<strace>(1), B<devscripts.conf>(5), B<update-alternatives>(8)"
+msgstr ""
+"B<dpkg>(1), B<strace>(1), B<devscripts.conf>(5), B<update-alternatives>(8)"
+
+#. type: SH
+#: ../scripts/dpkg-depcheck.1:123
+#, no-wrap
+msgid "COPYING"
+msgstr "COPYRIGHT"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:130
+msgid ""
+"Copyright 2001 Bill Allombert E<lt>ballombe@debian.orgE<gt>. Modifications "
+"copyright 2002,2003 Julian Gilbey E<lt>jdg@debian.orgE<gt>. B<dpkg-"
+"depcheck> is free software, covered by the GNU General Public License, "
+"version 2 or (at your option) any later version, and you are welcome to "
+"change it and/or distribute copies of it under certain conditions. There is "
+"absolutely no warranty for B<dpkg-depcheck>."
+msgstr ""
+"Copyright 2001 Bill Allombert E<lt>ballombe@debian.orgE<gt>. Modifications "
+"copyright 2002, 2003 Julian Gilbey E<lt>jdg@debian.orgE<gt>. B<dpkg-"
+"depcheck> est un logiciel libre, sous la licence publique générale GNU, "
+"version 2 ou ultérieure (comme vous le souhaitez). Vous êtes encouragés à "
+"apporter des modifications et/ou à distribuer des copies sous certaines "
+"conditions. Absolument aucune garantie n'est donnée pour B<dpkg-depcheck>."
+
+#. type: TH
+#: ../scripts/dpkg-genbuilddeps.1:1
+#, no-wrap
+msgid "DPKG-GENBUILDDEPS"
+msgstr "DPKG-GENBUILDDEPS"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:4
+msgid ""
+"dpkg-genbuilddeps - generate a list of packages used to build this package"
+msgstr ""
+"dpkg-genbuilddeps - Produire la liste des paquets utilisés pour la "
+"construction de ce paquet"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:6
+msgid "B<dpkg-genbuilddeps> [I<arg> ...]"
+msgstr "B<dpkg-genbuilddeps> [I<arg> ...]"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:19
+msgid ""
+"This program is a wrapper around B<dpkg-depcheck>(1). It should be run from "
+"the top of a Debian build tree. It calls B<dpkg-buildpackage> with any "
+"arguments given on the command line, and by tracing the execution of this, "
+"it determines which non-essential packages were used during the package "
+"building. This can be useful in determining what the I<Build-Depends> "
+"control fields should contain. It does not determine which packages were "
+"used for the arch independent parts of the build and which for the arch "
+"dependent parts, not does it attempt to determine which versions of packages "
+"are required. It should be able to run under B<fakeroot> rather than being "
+"run as root, as B<fakeroot dpkg-genbuilddeps>, or B<dpkg-genbuilddeps -"
+"rfakeroot>."
+msgstr ""
+"Ce programme encapsule les appels à B<dpkg-depcheck>(1). Il doit être "
+"exécuté depuis la racine d'une arborescence de construction d'un paquet "
+"Debian. Il appelle B<dpkg-buildpackage> avec tous les paramètres donnés en "
+"ligne de commande, et en traçant son exécution, il détermine quels paquets "
+"non essentiels ont été utilisés pendant la construction du paquet. Cela peut "
+"s'avérer utile pour déterminer ce que doit contenir le champ I<Build-"
+"Depends> du fichier control. Il ne sépare pas les paquets utilisés pour "
+"l'étape de construction spécifique à une architecture et ceux utilisés pour "
+"l'étape non spécifique à une architecture ; il ne cherche pas non plus à "
+"déterminer les versions de paquets qui seront nécessaires. Il doit être "
+"capable de tourner avec B<fakeroot> plutôt que d'être exécuté en tant que "
+"superutilisateur, en utilisant B<fakeroot dpkg-genbuilddeps> ou B<dpkg-"
+"genbuilddeps -rfakeroot>."
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:23
+msgid ""
+"This program requires the build-essential package to be installed. If it is "
+"not, please use B<dpkg-depcheck> directly, with a command such as"
+msgstr ""
+"Ce programme nécessite que les paquets essentiels pour la construction des "
+"paquets (build-essential) soient installés. Dans le cas contraire, veuillez "
+"exécuter B<dpkg-depcheck> directement avec une commande comme"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:25
+#, no-wrap
+msgid " dpkg-depcheck --all dpkg-buildpackage -us -uc -b -rfakeroot ...\n"
+msgstr " dpkg-depcheck --all dpkg-buildpackage -us -uc -b -rfakeroot ...\n"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:27
+msgid "All this program itself does is essentially to run the command:"
+msgstr "Ce programme ne fait que lancer la commande suivante :"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:29
+#, no-wrap
+msgid " dpkg-depcheck -b dpkg-buildpackage -us -uc -b -rfakeroot [arg ...]\n"
+msgstr " dpkg-depcheck -b dpkg-buildpackage -us -uc -b -rfakeroot [arg ...]\n"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:33
+msgid "B<dpkg-depcheck>(1), B<fakeroot>(1)"
+msgstr "B<dpkg-depcheck>(1), B<fakeroot>(1)"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:36
+msgid "B<The Debian Policy Manual,> sections on Build-Depends etc."
+msgstr "La B<Charte Debian>, sections Build-Depends, etc."
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:40
+msgid ""
+"The original B<dpkg-genbuilddeps> was written by Ben Collins "
+"E<lt>bcollins@debian.orgE<gt>. The current version is a simple wrapper "
+"around B<dpkg-depcheck> written by Bill Allombert E<lt>ballombe@debian."
+"orgE<gt>. This manual page was written by Julian Gilbey E<lt>jdg@debian."
+"orgE<gt>."
+msgstr ""
+"La version initiale de B<dpkg-genbuilddeps> a été écrite par Ben Collins "
+"E<lt>bcollins@debian.orgE<gt>. La version actuelle est un simple \"wrapper\" "
+"autour de B<dpkg-depcheck> écrit par Bill Allombert E<lt>ballombe@debian."
+"orgE<gt>. Cette page de manuel a été écrite par Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../doc/edit-patch.1:1
+#, no-wrap
+msgid "EDIT-PATCH"
+msgstr "EDIT-PATCH"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:5
+msgid ""
+"B<edit-patch>, B<add-patch> - tool for preparing patches for Debian source "
+"packages"
+msgstr ""
+"B<edit-patch>, B<add-patch> - Préparation de correctifs pour paquets source "
+"Debian"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:8
+msgid "B<edit-patch> I<path/to/patch>"
+msgstr "B<edit-patch> I<chemin/vers/le/correctif>"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:10
+msgid "B<add-patch> I<path/to/patch>"
+msgstr "B<add-patch> I<chemin/vers/le/correctif>"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:18
+msgid ""
+"B<edit-patch> is a wrapper script around the Quilt, CDBS, and dpatch patch "
+"systems. It simplifies the process of preparing and editing patches to "
+"Debian source packages and allows the user to not have to be concerned with "
+"which patch system is in use. Run from inside the root directory of the "
+"source package, B<edit-patch> can be used to edit existing patches located "
+"in I<debian/patches>."
+msgstr ""
+"B<edit-patch> est une encapsulation des systèmes de correctif Quilt, CDBS et "
+"dpatch. Elle simplifie le processus de préparation et de modification des "
+"correctifs de paquets source Debian et permet à son utilisateur de ne pas se "
+"soucier du système de correctif utilisé. Exécutée depuis le répertoire "
+"racine d'un paquet source, B<edit-patch> permet de modifier les correctifs "
+"existants dans I<debian/patches>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:25
+msgid ""
+"It can also be used to incorporate new patches. If pointed at a patch not "
+"already present, it will copy the patch to I<debian/patches> in the correct "
+"format for the patch system in use. Next, the patch is applied and a "
+"subshell is opened in order to edit the patch. Typing B<exit> or pressing "
+"Ctrl-d will close the subshell and launch an editor to record the I<debian/"
+"changelog> entry."
+msgstr ""
+"Elle permet aussi d'intégrer de nouveaux correctifs. Si le correctif indiqué "
+"n'est pas encore présent, il sera copié vers I<debian/patches> au format "
+"correspondant au système de correctif utilisé. Ensuite, le correctif sera "
+"appliqué et un interpréteur de commande sera ouvert pour modifier le "
+"correctif. Taper B<exit> ou appuyer sur Ctrl-d fermera l'interpréteur et "
+"ouvrira un éditeur pour enregistrer l'entrée de I<debian/changelog>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:29
+msgid ""
+"B<edit-patch> is integrated with the Bazaar and Git version control "
+"systems. The patch will be automatically added to the tree, and the "
+"I<debian/changelog> entry will be used as the commit message."
+msgstr ""
+"B<edit-patch> est intégré au systèmes de gestion de version Bazaar et Git. "
+"Le correctif sera automatiquement ajouté à l'arbre, et l'entrée du fichier "
+"I<debian/changelog> sera utilisée comme message d'envoi (commit)."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:32
+msgid ""
+"If no patch system is present, the patch is applied inline, and a copy is "
+"stored in I<debian/patches-applied>."
+msgstr ""
+"Si aucun système de correctif n'est utilisé, le correctif est directement "
+"appliqué et une copie est conservée dans I<debian/patches-applied>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:36
+msgid ""
+"B<add-patch> is the non-interactive version of B<edit-patch>. The patch "
+"will be incorporated but no editor or subshell will be spawned."
+msgstr ""
+"B<add-patch> est la version non interactive d'B<edit-patch>. Le correctif "
+"sera appliqué mais aucun éditeur ou interpréteur ne sera appelé."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:40
+msgid ""
+"B<edit-patch> was written by Daniel Holbach E<lt>daniel.holbach@canonical."
+"comE<gt>, Michael Vogt E<lt>michael.vogt@canonical.comE<gt>, and David "
+"Futcher E<lt>bobbo@ubuntu.comE<gt>."
+msgstr ""
+"B<edit-patch> a été écrit par Daniel Holbach E<lt>I<daniel.holbach@canonical."
+"com>E<gt>, Michael Vogt E<lt>I<michael.vogt@canonical.com>E<gt> et David "
+"Futcher E<lt>I<bobbo@ubuntu.com>E<gt>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:42
+msgid ""
+"This manual page was written by Andrew Starr-Bochicchio E<lt>a.starr.b@gmail."
+"comE<gt>."
+msgstr ""
+"Cette page de manuel a été écrite par Andrew Starr-Bochicchio E<lt>I<a.starr."
+"b@gmail.com>E<gt>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:43
+msgid ""
+"Both are released under the terms of the GNU General Public License, version "
+"3."
+msgstr ""
+"Tous deux sont publiés sous les termes de la GNU General Public License, "
+"version 3."
+
+#. type: TH
+#: ../scripts/dscextract.1:1
+#, no-wrap
+msgid "DSCEXTRACT"
+msgstr "DSCEXTRACT"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:4
+msgid "dscextract - extract a single file from a Debian source package"
+msgstr "dscextract - Extraire un seul fichier d'un paquet source Debian"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:6
+msgid "B<dscextract> [I<options>] I<dscfile> I<file>"
+msgstr "B<dscextract> [I<options>] I<fichier_dsc> I<fichier>"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:11
+msgid ""
+"B<dscextract> reads a single file from a Debian source package. The idea is "
+"to only look into I<.diff.gz> files (source format 1.0) or I<.debian.tar.gz/"
+"bz2> files (source format 3.0) where possible, hence avoiding to unpack "
+"large tarballs. It is most useful for files in the I<debian/> subdirectory."
+msgstr ""
+"B<dscextract> lit un seul fichier à partir d'un paquet source Debian. L'idée "
+"est de regarder seulement les fichiers I<.diff.gz> (format source 1.0) ou I<."
+"debian.tar.gz/bz2> (format source 3.0) si possible, en évitant ainsi de "
+"dépaqueter de grosses archives. C'est particulièrement utile pour les "
+"fichiers du sous-répertoire I<debian/>."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:14
+msgid ""
+"I<file> is relative to the first level directory contained in the package, i."
+"e. with the first component stripped."
+msgstr ""
+"I<fichier> est relatif au répertoire de premier niveau contenu dans le "
+"paquet, c'est-à-dire une fois enlevé le premier répertoire."
+
+#. type: TP
+#: ../scripts/dscextract.1:15
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:20
+msgid ""
+"\"Fast\" mode. For source format 1.0, avoid to fall back scanning the I<."
+"orig.tar.gz> file if I<file> was not found in the I<.diff.gz>. (For 3.0 "
+"packages, it is assumed that I<debian/*> are exactly the contents of "
+"I<debian.tar.gz/bz2>.)"
+msgstr ""
+"Mode \"rapide\". Pour le format source 1.0, éviter de se rabattre sur le "
+"balayage du fichier I<.orig.tar.gz> si I<fichier> n'a pas été trouvé dans le "
+"I<.diff.gz> (pour les paquets au format source 3.0, I<debian/*> est censé se "
+"trouver directement dans I<.debian.tar.gz/bz2>)."
+
+#. type: TP
+#: ../scripts/dscextract.1:21 ../scripts/wnpp-check.1:29
+#, no-wrap
+msgid "0"
+msgstr "0"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:24
+msgid "I<file> was extracted."
+msgstr "I<fichier> a été extrait."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:27
+msgid "I<file> was not found in the source package."
+msgstr "I<fichier> n'a pas été trouvé dans le paquet source."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:30
+msgid "An error occurred, like I<dscfile> was not found."
+msgstr ""
+"Une erreur est survenue, I<fichier_dsc> n'a pas été trouvé par exemple."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:32
+msgid "dscextract dds_2.1.1+ddd105-2.dsc debian/watch || test $? = 1"
+msgstr "dscextract dds_2.1.1+ddd105-2.dsc debian/watch || test $? = 1"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:33
+msgid "B<dscextract> was written by Christoph Berg E<lt>myon@debian.orgE<gt>."
+msgstr ""
+"B<dscextract> a été écrit par Christoph Berg E<lt>I<myon@debian.org>E<gt>."
+
+#. type: TH
+#: ../scripts/dscverify.1:1
+#, no-wrap
+msgid "DSCVERIFY"
+msgstr "DSCVERIFY"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:4
+msgid "dscverify - verify the validity of a Debian package"
+msgstr "dscverify - Vérifier la validité d'un paquet Debian"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:6
+msgid ""
+"B<dscverify> [B<--keyring >I<keyring>] ... "
+"I<changes_or_buildinfo_or_dsc_filename> ..."
+msgstr ""
+"B<dscverify> [B<--keyring >I<trousseau_de_clefs>] ... "
+"I<fichier_changes_ou_buildinfo_ou_dsc> ..."
+
+#. type: Plain text
+#: ../scripts/dscverify.1:17
+msgid ""
+"B<dscverify> checks that the GPG signatures on the given I<.changes>, I<."
+"buildinfo> or I<.dsc> files are good signatures made by keys in the current "
+"Debian keyrings, found in the I<debian-keyring> package. (Additional "
+"keyrings can be specified using the B<--keyring> option any number of "
+"times.) It then checks that the other files listed in the I<.changes>, I<."
+"buildinfo> or I<.dsc> files have the correct sizes and checksums (MD5 plus "
+"SHA1 and SHA256 if the latter are present). The exit status is 0 if there "
+"are no problems and non-zero otherwise."
+msgstr ""
+"B<dscverify> vérifie que les signatures GPG des fichiers I<.changes>, I<."
+"buildinfo> ou I<.dsc> sont des signatures correctes effectuées avec des "
+"clefs du trousseau de clefs Debian actuel, que l'on peut trouver dans le "
+"paquet I<debian-keyring>. (Des trousseaux supplémentaires peuvent être "
+"précisés avec l'option B<--keyring> autant de fois que nécessaire.) Il "
+"vérifie ensuite que les fichiers listés dans les fichiers I<.changes>, I<."
+"buildinfo> ou I<.dsc> ont une taille et des sommes de contrôle (MD5 plus "
+"SHA1 et SHA256 si ces dernières sont présentes) correctes. La valeur de "
+"retour vaut B<0> s'il n'y a pas de problème et une valeur non nulle dans le "
+"cas contraire."
+
+#. type: TP
+#: ../scripts/dscverify.1:18
+#, no-wrap
+msgid "B<--keyring>I< >I<keyring>"
+msgstr "B<--keyring> I<trousseau>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:21
+msgid "Add I<keyring> to the list of keyrings to be used."
+msgstr "Ajoute un trousseau de clefs à la liste des trousseaux à utiliser."
+
+#. type: TP
+#: ../scripts/dscverify.1:21 ../scripts/who-uploads.1:25
+#, no-wrap
+msgid "B<--no-default-keyrings>"
+msgstr "B<--no-default-keyrings>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:24
+msgid "Do not use the default set of keyrings."
+msgstr "Ne pas utiliser les trousseaux de clefs par défaut."
+
+#. type: TP
+#: ../scripts/dscverify.1:28
+#, no-wrap
+msgid "B<--nosigcheck>, B<--no-sig-check>, B<-u>"
+msgstr "B<--nosigcheck>, B<--no-sig-check>, B<-u>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:33
+msgid ""
+"Skip the signature verification step. That is, only verify the sizes and "
+"checksums of the files listed in the I<.changes>, I<.buildinfo> or I<.dsc> "
+"files."
+msgstr ""
+"Omettre l'étape de vérification de signature. Vérifier uniquement la taille "
+"et les sommes de contrôle des fichiers listés dans les fichiers I<.changes>, "
+"I<.buildinfo> ou I<.dsc>."
+
+#. type: TP
+#: ../scripts/dscverify.1:33 ../scripts/plotchangelog.1:78
+#: ../scripts/salsa.pl:579 ../scripts/uupdate.1:98
+#, no-wrap
+msgid "B<--verbose>"
+msgstr "B<--verbose>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:36
+msgid "Do not suppress GPG output."
+msgstr "Ne pas supprimer la sortie de GPG."
+
+# NOTE: presque identique, manque la surcharge par les options
+#. type: Plain text
+#: ../scripts/dscverify.1:50
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. "
+"Environment variable settings are ignored for this purpose. If the first "
+"command line option given is B<--noconf> or B<--no-conf>, then these files "
+"will not be read. The currently recognised variable is:"
+msgstr ""
+"Les deux fichiers de configuration I</etc/devscripts.conf> et I<~/."
+"devscripts> sont évalués dans cet ordre par un interpréteur de commandes "
+"(\"shell\") pour placer les variables de configuration. Des options de ligne "
+"de commande peuvent être utilisées pour neutraliser les paramètres des "
+"fichiers de configuration. Les paramètres des variables d'environnement sont "
+"ignorés à cette fin. Si la première option donnée en ligne de commande est "
+"B<--noconf> ou B<--no-conf>, alors ces fichiers ne sont pas évalués. Les "
+"variables actuellement identifiées sont :"
+
+#. type: TP
+#: ../scripts/dscverify.1:50
+#, no-wrap
+msgid "B<DSCVERIFY_KEYRINGS>"
+msgstr "B<DSCVERIFY_KEYRINGS>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:54
+msgid ""
+"This is a colon-separated list of extra keyrings to use in addition to any "
+"specified on the command line."
+msgstr ""
+"Liste de trousseaux de clefs supplémentaires (séparés par des \":\") à "
+"utiliser en plus de ceux indiqués en ligne de commande."
+
+#. type: SH
+#: ../scripts/dscverify.1:54
+#, no-wrap
+msgid "KEYRING"
+msgstr "TROUSSEAU DE CLEFS"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:61
+msgid ""
+"Please note that the keyring provided by the debian-keyring package can be "
+"slightly out of date. The latest version can be obtained with rsync, as "
+"documented in the README that comes with debian-keyring. If you sync the "
+"keyring to a non-standard location (see below), you can use the "
+"possibilities to specify extra keyrings, by either using the above mentioned "
+"configuration option or the --keyring option."
+msgstr ""
+"Veuillez noter que le trousseau de clefs fourni par le paquet debian-keyring "
+"peut ne pas être complètement à jour. La dernière version peut être obtenue "
+"avec rsync, comme c'est documenté dans le fichier README fourni avec debian-"
+"keyring. Si vous synchronisez le trousseau de clefs à un emplacement non "
+"standard (voir ci-dessous), vous pouvez utiliser la possibilité d'indiquer "
+"des trousseaux supplémentaires soit en utilisant l'option de configuration "
+"mentionnée ci-dessus, soit en utilisant l'option --keyring."
+
+#. type: Plain text
+#: ../scripts/dscverify.1:63
+msgid "Below is an example for an alias:"
+msgstr "Voici un exemple d'alias :"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:65
+msgid "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+msgstr "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+
+#. type: SH
+#: ../scripts/dscverify.1:65
+#, no-wrap
+msgid "STANDARD KEYRING LOCATIONS"
+msgstr "EMPLACEMENTS STANDARDS DES TROUSSEAUX"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:68
+msgid ""
+"By default dscverify searches for the debian-keyring in the following "
+"locations:"
+msgstr ""
+"Par défaut, dscverify recherche le trousseau de clefs debian aux "
+"emplacements suivants :"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:70
+msgid "- ~/.gnupg/trustedkeys.gpg"
+msgstr "- ~/.gnupg/trustedkeys.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:72
+msgid "- /srv/keyring.debian.org/keyrings/debian-keyring.gpg"
+msgstr "- /srv/keyring.debian.org/keyrings/debian-keyring.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:74
+msgid "- /usr/share/keyrings/debian-keyring.gpg"
+msgstr "- /usr/share/keyrings/debian-keyring.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:76
+msgid "- /usr/share/keyrings/debian-maintainers.gpg"
+msgstr "- /usr/share/keyrings/debian-maintainers.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:78
+msgid "- /usr/share/keyrings/debian-nonupload.gpg"
+msgstr "- /usr/share/keyrings/debian-nonupload.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:82
+msgid "B<gpg>(1), B<gpg2>(1), B<devscripts.conf>(5)"
+msgstr "B<gpg>(1), B<gpg2>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:86
+msgid ""
+"B<dscverify> was written by Roderick Schertler E<lt>roderick@argon.orgE<gt> "
+"and posted on the debian-devel@lists.debian.org mailing list, with several "
+"modifications by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"B<dscverify> a été écrit par Roderick Schertler E<lt>roderick@argon."
+"orgE<gt>, et posté sur la liste de diffusion debian-devel@lists.debian.org. "
+"Certaines modifications ont été apportées par Julian Gilbey E<lt>jdg@debian."
+"orgE<gt>."
+
+#. type: TH
+#: ../scripts/getbuildlog.1:1
+#, no-wrap
+msgid "GETBUILDLOG"
+msgstr "GETBUILDLOG"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:4
+msgid "getbuildlog - download build logs from Debian auto-builders"
+msgstr ""
+"getbuildlog - Télécharger les journaux de construction des serveurs Debian "
+"de construction automatique"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:8
+msgid ""
+"B<getbuildlog> I<package> [I<version-pattern>] [I<architecture-pattern>]"
+msgstr "B<getbuildlog> I<paquet> [I<modèle-version>] [I<modèle-architecture>]"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:17
+msgid ""
+"B<getbuildlog> downloads build logs of I<package> from Debian auto-builders. "
+"It downloads build logs of all versions and for all architectures if "
+"I<version-pattern> and I<architecture-pattern> are not specified or empty, "
+"otherwise only build logs whose versions match I<version-pattern> and build "
+"logs whose architectures match I<architecture-pattern> will be downloaded. "
+"The version and architecture patterns are interpreted as extended regular "
+"expressions as described in B<grep>(1)."
+msgstr ""
+"B<getbuildlog> télécharge les journaux de construction de I<paquet> depuis "
+"les serveurs Debian de construction automatique. Il télécharge les journaux "
+"de construction de toutes les versions et de toutes les architectures si "
+"I<modèle-version> et I<modèle-architecture> ne sont pas indiqués ou sont "
+"vides, sinon, seuls les journaux de construction pour les versions "
+"correspondant à I<modèle-version> et dont l'architecture correspond à "
+"I<modèle-architecture> seront téléchargés. Les modèles de version et "
+"d'architectures sont interprétés comme des expressions rationnelles "
+"étendues, décrites dans B<grep>(1)."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:21
+msgid ""
+"If I<version-pattern> is \"last\" then only the logs for the most recent "
+"version of I<package> found on buildd.debian.org will be downloaded."
+msgstr ""
+"Si I<modèle-version> vaut \"last\", alors seuls les journaux de la version "
+"la plus récente de I<paquet> trouvée sur buildd.debian.org seront "
+"téléchargés."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:24
+msgid ""
+"If I<version-pattern> is \"last-all\" then the logs for the most recent "
+"version found on each build log index will be downloaded."
+msgstr ""
+"Si I<modèle-version> vaut \"last-all\", alors les journaux pour la version "
+"la plus récente de I<paquet> trouvée dans chaque index de journaux de "
+"construction seront téléchargés."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:28
+msgid "Show usage information and examples."
+msgstr "Afficher un message d'aide et des exemples."
+
+#. type: TP
+#: ../scripts/getbuildlog.1:32
+#, no-wrap
+msgid "getbuildlog hello 2\\e.2-1 amd64"
+msgstr "getbuildlog hello 2\\e.2-1 amd64"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:35
+msgid "Download amd64 build log for hello version 2.2-1."
+msgstr ""
+"Télécharger le journal de construction amd64 pour la version 2.2-1 de hello."
+
+#. type: TP
+#: ../scripts/getbuildlog.1:35
+#, no-wrap
+msgid "getbuildlog glibc \"\" mips.*"
+msgstr "getbuildlog glibc \"\" mips.*"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:38
+msgid "Download mips(el) build logs of all glibc versions."
+msgstr ""
+"Télécharger les journaux de construction mips(el) pour toutes les versions "
+"de la glibc."
+
+#. type: TP
+#: ../scripts/getbuildlog.1:38
+#, no-wrap
+msgid "getbuildlog wesnoth .*bpo.*"
+msgstr "getbuildlog wesnoth .*bpo.*"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:41
+msgid "Download all build logs of backported wesnoth versions."
+msgstr ""
+"Télécharger tous les journaux de construction des versions rétro-portées de "
+"wesnoth."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:42
+msgid "Written by Frank S. Thomas E<lt>fst@debian.orgE<gt>."
+msgstr "Écrit par Frank S. Thomas E<lt>fst@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:22
+msgid "git-deborig - try to produce Debian orig.tar using git-archive(1)"
+msgstr ""
+"git-deborig - Tenter de produire orig.tar de Debian avec git-archive(1)"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:26
+msgid ""
+"B<git deborig> [B<--force>|B<-f>] [B<--just-print>|B<--just-print-tag-"
+"names>] [B<--version=>I<VERSION>] [I<COMMITTISH>]"
+msgstr ""
+"B<git deborig> [B<--force>|B<-f>] [B<--just-print>|B<--just-print-tag-"
+"names>] [B<--version=>I<VERSION>] [I<COMMITTISH>]"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:30
+msgid ""
+"B<git-deborig> tries to produce the orig.tar you need for your upload by "
+"calling git-archive(1) on an existing git tag or branch head. It was "
+"written with the dgit-maint-merge(7) workflow in mind, but can be used with "
+"other workflows."
+msgstr ""
+"B<git-deborig> tente de produire le fichier I<orig.tar> dont vous avez "
+"besoin pour votre envoi en appelant B<git-archive>(1) sur une étiquette ou "
+"un \"head\" de branche de git; Il a été écrit en pensant au déroulement de "
+"B<dgit-maint-merge>(7) mais peut être utilisé avec d’autres flux de travaux."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:35
+msgid ""
+"B<git-deborig> will try several common tag names. If this fails, or if more "
+"than one of those common tags are present, you can specify the tag or branch "
+"head to archive on the command line (I<COMMITTISH> above)."
+msgstr ""
+"B<git-deborig> essaiera plusieurs noms d'étiquette courants. S'il échoue, ou "
+"si plus d'une étiquette courante sont présentes, il est possible de préciser "
+"en ligne de commande l'étiquette ou le \"head\" de branche à archiver "
+"(I<objet_d'envoi> ci-dessus)."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:39
+msgid ""
+"B<git-deborig> will override gitattributes(5) that would cause the contents "
+"of the tarball generated by git-archive(1) not to be identical with the "
+"commitish archived: the B<export-subst> and B<export-ignore> attributes."
+msgstr ""
+"B<git-deborig> remplacera les B<gitattributes>(5) qui pourraient faire que "
+"le contenu de l'archive générée par B<git-archive>(1) ne soit pas identique "
+"à l'objet d'envoi archivé : les attributs B<export-subst> et B<export-"
+"ignore>."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:44
+msgid ""
+"B<git-deborig> should be invoked from the root of the git repository, which "
+"should contain I<debian/changelog>."
+msgstr ""
+"B<git-deborig> devrait être invoqué à partir de la racine du dépôt git qui "
+"devrait contenir I<debian/changelog>."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:51
+msgid "B<-f>|B<--force>"
+msgstr "B<-f>|B<--force>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:53
+msgid "Overwrite any existing orig.tar in the parent directory."
+msgstr "Écraser tout fichier I<orig.tar> existant dans le répertoire parent."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:55
+msgid "B<--just-print>"
+msgstr "B<--just-print>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:57
+msgid ""
+"Instead of actually invoking git-archive(1), output information about how it "
+"would be invoked. Ignores I<--force>."
+msgstr ""
+"Au lieu d'invoquer réellement B<git-archive>(1), afficher les informations "
+"sur comment il devrait être invoqué. I<--force> est ignoré."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:60
+msgid ""
+"Note that running the git-archive(1) invocation outputted with this option "
+"may not produce the same output. This is because B<git-deborig> takes care "
+"to disables git attributes otherwise heeded by git-archive(1), as detailed "
+"above."
+msgstr ""
+"Notez que l'exécution de l'invocation de B<git-archive>(1) produite avec "
+"cette option peut ne pas produire la même sortie. C'est parce que B<git-"
+"deborig> prend soin de désactiver les attributs de git dont autrement B<git-"
+"archive>(1) tient compte, comme cela est détaillé précédemment."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:65
+msgid "B<--just-print-tag-names>"
+msgstr "B<--just-print-tag-names>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:67
+msgid ""
+"Instead of actually invoking git-archive(1), or even checking which tags "
+"exist, print the tag names we would consider for the upstream version number "
+"in the first entry in the Debian changelog, or that supplied with B<--"
+"version>."
+msgstr ""
+"Au lieu d'appeler réellement git-archive (1), ou même de vérifier quels tags "
+"existent, affiche les noms de balises considérées comme numéro de version "
+"amont dans la première entrée du changelog Debian, ou celle fournie avec B<--"
+"version>."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:72
+msgid "B<--version=>I<VERSION>"
+msgstr "B<--version=>I<VERSION>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:74
+msgid ""
+"Instead of reading the new upstream version from the first entry in the "
+"Debian changelog, use I<VERSION>."
+msgstr ""
+"Au lieu de lire la nouvelle version amont, prise dans la première entrée du "
+"changelog de Debian, utiliser la I<VERSION>."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:81
+msgid "git-archive(1), dgit-maint-merge(7), dgit-maint-debrebase(7)"
+msgstr "git-archive(1), dgit-maint-merge(7), dgit-maint-debrebase(7)"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:85
+msgid "B<git-deborig> was written by Sean Whitton <spwhitton@spwhitton.name>."
+msgstr ""
+"B<git-deborig> a été écrit par Sean Whitton <spwhitton@spwhitton.name>."
+
+#. type: TH
+#: ../scripts/grep-excuses.1:1
+#, no-wrap
+msgid "GREP-EXCUSES"
+msgstr "GREP-EXCUSES"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:4
+msgid ""
+"grep-excuses - search the testing excuses files for a specific maintainer"
+msgstr ""
+"grep-excuses - Rechercher les fichiers d'excuses pour Testing d'un "
+"responsable"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:6
+msgid "B<grep-excuses> [I<options>] [I<maintainer>|I<package>]"
+msgstr "B<grep-excuses> [I<options>] [I<responsable>|I<paquet>]"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:14
+msgid ""
+"B<grep-excuses> downloads the autoremovals and update_excuses.html files and "
+"greps them for the specified maintainer or package name. The B<wget> "
+"package is required for this script. If no name is given on the command "
+"line, first the environment variable B<DEBFULLNAME> is used if it is "
+"defined, and failing that, the configuration variable described below is "
+"used."
+msgstr ""
+"B<grep-excuses> télécharge les fichiers autoremovals et update_excuses.html "
+"et y recherche (avec grep) un certain nom de responsable ou de paquet. Le "
+"paquet B<wget> est nécessaire pour ce script. Si aucun nom n'est fourni en "
+"ligne de commande, la première variable d'environnement B<DEBFULLNAME> est "
+"utilisée si elle est définie et sinon, la variable de configuration décrite "
+"plus bas est utilisée."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:19
+#, no-wrap
+msgid "B<--wipnity>, B<-w>"
+msgstr "B<--wipnity>, B<-w>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:23
+msgid ""
+"Get information from E<lt>https://qa.debian.org/excuses.phpE<gt>. One or "
+"more package names must be given when using this option."
+msgstr ""
+"Récupérer les informations de E<lt>https://qa.debian.org/excuses.phpE<gt>. "
+"Un ou plusieurs nom(s) de paquet doit être fourni quand on utilise cette "
+"option."
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:26 ../scripts/whodepends.1:14
+msgid "Show a brief usage message."
+msgstr "Affiche un bref message d'aide."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:29
+#, no-wrap
+msgid "B<--autopkgtests>"
+msgstr "B<--autopkgtest>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:37
+msgid ""
+"Investigate and show autopkgtest (ci.debian.net) failures in your packages "
+"but apparently caused by new versions of other packages trying to migrate. "
+"(B<--no-autopkgtests> can be used to override GREP_EXCUSES_AUTOPKGTESTS.)"
+msgstr ""
+"Examine et montre les erreurs autopkgtest (ci.debian.net) dans ce paquet "
+"mais apparemment causées par de nouvelles versions d'autres paquets en cours "
+"de migration. (B<--no-autopkgtests> peut être utilisé pour surcharger "
+"GREP_EXCUSES_AUTOPKGTESTS.)"
+
+#. type: TP
+#: ../scripts/grep-excuses.1:37
+#, no-wrap
+msgid "B<--no-autoremovals>"
+msgstr "B<--no-autoremovals>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:40
+msgid ""
+"Investigate and show only testing propagation excuses, not autoremovals."
+msgstr ""
+"Rechercher et montrer les fichiers excuses de propagation de Testing "
+"seulement, pas les autoremovals."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:40
+#, no-wrap
+msgid "B<--experimental>, B<-e>"
+msgstr "B<--experimental>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:43
+msgid ""
+"Print pseudo-excuses for manual migration from experimental to unstable."
+msgstr ""
+"Affiche les pseudo-excuses pour la migration manuelle d'experimental à "
+"unstable."
+
+#. type: =item
+#: ../scripts/grep-excuses.1:43 ../scripts/hardening-check.pl:647
+#: ../scripts/salsa.pl:487
+#, no-wrap
+msgid "B<--debug>"
+msgstr "B<--debug>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:46
+msgid "Print debugging output to stderr (including url(s) fetched)."
+msgstr ""
+"Afficher les sorties de débogage sur la sortie d'erreur standard (y compris "
+"les URL récupérées)."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:52
+#, no-wrap
+msgid "B<GREP_EXCUSES_MAINTAINER>"
+msgstr "B<GREP_EXCUSES_MAINTAINER>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:56
+msgid ""
+"The default maintainer, email or package to grep for if none is specified on "
+"the command line."
+msgstr ""
+"Le responsable, l'adresse électronique ou le paquet qui sera utilisé par "
+"défaut si aucun n'est indiqué en ligne de commande."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:56
+#, no-wrap
+msgid "B<GREP_EXCUSES_AUTOPKGTESTS>"
+msgstr "B<GREP_EXCUSES_MAINTAINER>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:61
+msgid ""
+"Boolean: whether to show autopkgtest failures in other packages. See B<--"
+"autopkgtests>."
+msgstr ""
+"Booléen: montrer ou non les erreurs autopkgtest dans les autres paquets. "
+"Voir B<--autopkgtests>."
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:63 ../scripts/plotchangelog.1:126
+msgid "B<devscripts.conf>(5)"
+msgstr "B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:65
+msgid ""
+"Joey Hess E<lt>joeyh@debian.orgE<gt>; modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Joey Hess E<lt>joeyh@debian.orgE<gt> ; modifications par Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:523
+msgid "hardening-check - check binaries for security hardening features"
+msgstr ""
+"hardening-check - Vérifier les binaires pour des fonctionnalités de "
+"sécurisation"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:527
+msgid "hardening-check [options] [ELF ...]"
+msgstr "hardening-check [options] [ELF ...]"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:529
+msgid ""
+"Examine a given set of ELF binaries and check for several security hardening "
+"features, failing if they are not all found."
+msgstr ""
+"Examiner un ensemble donné de binaires ELF et rechercher plusieurs fonctions "
+"de sécurisation, échouant si toutes ne sont pas trouvées."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:534
+msgid ""
+"This utility checks a given list of ELF binaries for several security "
+"hardening features that can be compiled into an executable. These features "
+"are:"
+msgstr ""
+"Cet utilitaire recherche dans un ensemble de binaires ELF plusieurs "
+"fonctionnalités de sécurisation qui peuvent avoir été compilées dans un "
+"exécutable. Ces fonctionnalités sont :"
+
+#. type: =item
+#: ../scripts/hardening-check.pl:540
+msgid "B<Position Independent Executable>"
+msgstr "B<Position Independent Executable>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:542
+msgid ""
+"This indicates that the executable was built in such a way (PIE) that the "
+"\"text\" section of the program can be relocated in memory. To take full "
+"advantage of this feature, the executing kernel must support text Address "
+"Space Layout Randomization (ASLR)."
+msgstr ""
+"Cela indique que l'exécutable a été construit d'une manière telle (PIE) que "
+"la section \"texte\" du programme peut être transférée en mémoire. Pour "
+"tirer avantage de cette fonctionnalité, le noyau exécuté doit prendre en "
+"charge la distribution aléatoire de l'espace d'adressage (Address Space "
+"Layout Randomization – ASLR) de texte."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:547
+msgid "B<Stack Protected>"
+msgstr "B<Stack Protected>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:549
+msgid ""
+"This indicates that there is evidence that the ELF was compiled with the "
+"L<gcc(1)> option B<-fstack-protector> (e.g. uses B<__stack_chk_fail>). The "
+"program will be resistant to having its stack overflowed."
+msgstr ""
+"Cela indique qu'il y a des indices que l'ELF a été compilé avec l'option B<-"
+"fstack-protector> de L<gcc(1)> (par exemple utilisation de "
+"B<__stack_chk_fail>). Le programme sera résistant au dépassement de pile."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:553
+msgid ""
+"When an executable was built without any character arrays being allocated on "
+"the stack, this check will lead to false alarms (since there is no use of "
+"B<__stack_chk_fail>), even though it was compiled with the correct options."
+msgstr ""
+"Quand un exécutable a été construit sans qu'une table de caractères ne soit "
+"allouée dans la pile, cette recherche mènera à des fausses alertes (dans la "
+"mesure où B<__stack_chk_fail> n'est pas utilisé), même s'il a été compilé "
+"avec les bonnes options."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:558
+msgid "B<Fortify Source functions>"
+msgstr "B<Fortify Source functions>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:560
+msgid ""
+"This indicates that the executable was compiled with B<-D_FORTIFY_SOURCE=2> "
+"and B<-O1> or higher. This causes certain unsafe glibc functions with their "
+"safer counterparts (e.g. B<strncpy> instead of B<strcpy>), or replaces calls "
+"that are verifiable at runtime with the runtime-check version (e.g. "
+"B<__memcpy_chk> insteade of B<memcpy>)."
+msgstr ""
+"Cela indique que l'exécutable a été compilé avec B<-D_FORTIFY_SOURCE=2> et "
+"B<-O1> ou plus. Cela provoque le remplacement de certaines fonctions non "
+"sûres de glibc par leurs équivalents plus sûrs (par exemple B<strncpy> à la "
+"place de B<strcpy>) , ou remplace des appels vérifiables au moment de "
+"l'exécution par des versions runtime-check (par exemple B<__memcpy_chk> à la "
+"place de B<memcpy>)."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:566
+msgid ""
+"When an executable was built such that the fortified versions of the glibc "
+"functions are not useful (e.g. use is verified as safe at compile time, or "
+"use cannot be verified at runtime), this check will lead to false alarms. "
+"In an effort to mitigate this, the check will pass if any fortified function "
+"is found, and will fail if only unfortified functions are found. Uncheckable "
+"conditions also pass (e.g. no functions that could be fortified are found, "
+"or not linked against glibc)."
+msgstr ""
+"Quand un exécutable a été construit de telle manière que les versions "
+"renforcées des fonctions de glibc ne sont pas utiles (par exemple, "
+"l'utilisation est vérifiée comme sûre au moment de la compilation, ou "
+"l'utilisation ne peut pas être vérifiée au moment de l'exécution), cette "
+"recherche mènera à de fausses alertes. Pour tenter de pallier cela, la "
+"recherche réussira si une fonction renforcée est découverte, et échouera si "
+"uniquement des fonctions non renforcées sont découvertes. Les conditions non "
+"vérifiables réussissent aussi (par exemple, aucune fonction qui peut être "
+"renforcée n'est trouvée, ou n'est pas liée à glibc)."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:574
+msgid "B<Read-only relocations>"
+msgstr "B<Read-only relocations>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:576
+msgid ""
+"This indicates that the executable was build with B<-Wl,-z,relro> to have "
+"ELF markings (RELRO) that ask the runtime linker to mark any regions of the "
+"relocation table as \"read-only\" if they were resolved before execution "
+"begins. This reduces the possible areas of memory in a program that can be "
+"used by an attacker that performs a successful memory corruption exploit."
+msgstr ""
+"Cela indique que l'exécutable a été construit avec les options B<-Wl,-z,"
+"relro> pour que les marquages ELF (RELRO) demandent que l'éditeur de liens "
+"au moment de l'exécution marque toutes les zones de la table de réadressage "
+"en \"lecture seule\" si les translations d'adresses ont été résolues avant "
+"le début de l'exécution. Cela réduit le nombre de zones de mémoire d'un "
+"programme qui peuvent être utilisées par un attaquant pour réaliser une "
+"exploitation efficace de corruption de mémoire."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:583
+msgid "B<Immediate binding>"
+msgstr "B<Immediate binding>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:585
+msgid ""
+"This indicates that the executable was built with B<-Wl,-z,now> to have ELF "
+"markings (BIND_NOW) that ask the runtime linker to resolve all relocations "
+"before starting program execution. When combined with RELRO above, this "
+"further reduces the regions of memory available to memory corruption attacks."
+msgstr ""
+"Cela indique que l'exécutable a été construit avec les options B<-Wl,-z,now> "
+"pour que les marquages ELF (BIND_NOW) demandent que l'éditeur de liens au "
+"moment de l'exécution résolve toutes les réadressages avant de démarrer "
+"l'exécution du programme. Si cette option est combinée avec l'option RELRO "
+"ci-dessus, cela réduit encore davantage les zones de mémoire accessibles aux "
+"attaques par corruption de mémoire."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:597
+msgid "B<--nopie>, B<-p>"
+msgstr "B<--nopie>, B<-p>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:599
+msgid "Do not require that the checked binaries be built as PIE."
+msgstr "N'exige pas que les exécutables vérifiés soient construits comme PIE."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:601
+msgid "B<--nostackprotector>, B<-s>"
+msgstr "B<--nostackprotector>, B<-s>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:603
+msgid ""
+"Do not require that the checked binaries be built with the stack protector."
+msgstr ""
+"N'exige pas que les exécutables vérifiés soient construits avec le "
+"protecteur de pile."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:605
+msgid "B<--nofortify>, B<-f>"
+msgstr "B<--nofortify>, B<-f>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:607
+msgid "Do not require that the checked binaries be built with Fortify Source."
+msgstr ""
+"N'exige pas que les exécutables vérifiés soient construits avec Fortify "
+"Source."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:609
+msgid "B<--norelro>, B<-r>"
+msgstr "B<--norelro>, B<-r>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:611
+msgid "Do not require that the checked binaries be built with RELRO."
+msgstr "N'exige pas que les exécutables vérifiés soient construits avec RELRO."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:613
+msgid "B<--nobindnow>, B<-b>"
+msgstr "B<--nobindnow>, B<-b>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:615
+msgid "Do not require that the checked binaries be built with BIND_NOW."
+msgstr ""
+"N'exige pas que les exécutables vérifiés soient construits avec BIND_NOW."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:617
+msgid "B<--nocfprotection>, B<-b>"
+msgstr "B<--nocfprotection>, B<-b>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:619
+msgid ""
+"Do not require that the checked binaries be built with control flow "
+"protection."
+msgstr ""
+"N'exige pas que les exécutables vérifiés soient construits avec le "
+"protecteur de pile."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:623
+msgid "Only report failures."
+msgstr "Ne fournir que des rapports d'échec."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:625 ../scripts/uscan.pl:1567
+msgid "B<--verbose>, B<-v>"
+msgstr "B<--verbose>, B<-v>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:627
+msgid "Report verbosely on failures."
+msgstr "Fournir des rapports d'échec verbeux."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:629
+msgid "B<--report-functions>, B<-R>"
+msgstr "B<--report-functions>, B<-R>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:631
+msgid "After the report, display all external functions needed by the ELF."
+msgstr ""
+"Après le rapport, afficher toutes les fonctions externes nécessaires à l'ELF."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:633
+msgid "B<--find-libc-functions>, B<-F>"
+msgstr "B<--find-libc-functions>, B<-F>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:635
+msgid ""
+"Instead of the regular report, locate the libc for the first ELF on the "
+"command line and report all the known \"fortified\" functions exported by "
+"libc."
+msgstr ""
+"Au lieu de faire un rapport normal, localiser le libc pour le premier ELF "
+"sur la ligne de commande et rapporter toutes les fonctions \"renforcées\" "
+"exportées par libc."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:639
+msgid "B<--color>, B<-c>"
+msgstr "B<--color>, B<-c>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:641
+msgid "Enable colorized status output."
+msgstr "Activer les sorties d'état colorées."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:643
+msgid "B<--lintian>, B<-l>"
+msgstr "B<--lintian>, B<-l>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:645
+msgid "Switch reporting to lintian-check-parsable output."
+msgstr ""
+"Changer les rapports pour une sortie analysable par une vérification de "
+"lintian."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:649
+msgid "Report some debugging during processing."
+msgstr "Rapporter des données de débogage durant le traitement."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:651
+msgid "B<--help>, B<-h>, B<-?>"
+msgstr "B<--help>, B<-h>, B<-?>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:653
+msgid "Print a brief help message and exit."
+msgstr "Afficher un message d'aide bref et quitter."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:655
+msgid "B<--man>, B<-H>"
+msgstr "B<--man>, B<-H>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:657
+msgid "Print the manual page and exit."
+msgstr "Afficher la page de manuel et quitter."
+
+#. type: =head1
+#: ../scripts/hardening-check.pl:661
+msgid "RETURN VALUE"
+msgstr "VALEUR DE RETOUR"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:663
+msgid ""
+"When all checked binaries have all checkable hardening features detected, "
+"this program will finish with an exit code of 0. If any check fails, the "
+"exit code with be 1. Individual checks can be disabled via command line "
+"options."
+msgstr ""
+"Quand toutes les fonctionnalités de sécurisation vérifiables des exécutables "
+"examinés ont été détectées, ce programme s'achève avec un code de sortie de "
+"\"0\". Si une vérification échoue, le code de sortie sera \"1\". Les "
+"vérifications individuelles peuvent être désactivées avec des options en "
+"ligne de commande."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:670
+msgid "Kees Cook <kees@debian.org>"
+msgstr "Kees Cook <kees@debian.org>"
+
+#. type: =head1
+#: ../scripts/hardening-check.pl:672 ../scripts/salsa.pl:1037
+msgid "COPYRIGHT AND LICENSE"
+msgstr "COPYRIGHT ET LICENCE"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:674
+msgid "Copyright 2009-2013 Kees Cook <kees@debian.org>."
+msgstr "Copyright 2009-2013 Kees Cook <kees@debian.org>."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:676
+msgid ""
+"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; version 2 or later."
+msgstr ""
+"Ce programme est un logiciel libre ; il est permis de le distribuer et/ou de "
+"le modifier selon les termes de la GNU General Public License, telle que "
+"publiée par la Free Software Foundation, version 2 ou ultérieure."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:682
+msgid "L<gcc(1)>, L<hardening-wrapper(1)>"
+msgstr "L<gcc(1)>, L<hardening-wrapper(1)>"
+
+#. type: TH
+#: ../scripts/list-unreleased.1:1
+#, no-wrap
+msgid "LIST-UNRELEASED"
+msgstr "LIST-UNRELEASED"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:4
+msgid "list-unreleased - display UNRELEASED packages"
+msgstr ""
+"list-unreleased - Afficher les paquets qui ne sont pas encore envoyés "
+"(UNRELEASED)"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:6
+msgid "B<list-unreleased> [I<arg> ...] [I<path> ...]"
+msgstr "B<list-unreleased> [I<param> ...] [I<chemin> ...]"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:9
+msgid ""
+"Searches for packages whose changelogs indicate there are pending changes "
+"(UNRELEASED) and either lists them or displays the relevant changelog entry."
+msgstr ""
+"Rechercher des paquets dont les journaux des modifications indique qu'il y a "
+"des changements en cours (UNRELEASED) et lister ces paquets ou afficher les "
+"entrées correspondantes des journaux des modifications."
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:12
+msgid ""
+"By default it searches for packages under the current directory. If a path "
+"is specified it will look for packages under that directory instead."
+msgstr ""
+"Par défaut, il recherche les paquets dans le répertoire en cours. Si un "
+"chemin est fourni, la recherche est à la place effectuée dans le répertoire "
+"indiqué."
+
+#. type: TP
+#: ../scripts/list-unreleased.1:13
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:16
+msgid "Display pending changes."
+msgstr "Afficher les modifications en cours."
+
+#. type: TP
+#: ../scripts/list-unreleased.1:16
+#, no-wrap
+msgid "B<-R>"
+msgstr "B<-R>"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:19
+msgid "Don't recurse into subdirectories looking for packages."
+msgstr "Ne pas rechercher récursivement les paquets dans les sous-répertoires."
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:23
+msgid ""
+"B<list-unreleased> was written by Frans Pop E<lt>elendil@planet.nlE<gt>. "
+"This manual page was written by Joey Hess E<lt>joeyh@debian.orgE<gt>."
+msgstr ""
+"B<list-unreleased> a été écrit par Frans Pop E<lt>elendil@planet.nlE<gt>. "
+"Cette page de manuel a été écrite par Joey Hess E<lt>joeyh@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:3
+msgid "ltnu - lists packages of a maintainer ordered by last upload"
+msgstr ""
+"ltnu - afficher la liste des paquets d'un responsable (Maintainer) ordonnée "
+"à partir du dernier envoi"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:7
+msgid "B<env> DEBEMAIL=I<maintainer> B<ltnu> [-m]"
+msgstr "B<env> DEBEMAIL=I<responsable> B<ltnu> [-m]"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:9
+msgid "B<ltnu> [-m] I<maintainer>"
+msgstr "B<ltnu> [-m] I<responsable>"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:11
+msgid "B<ltnu> --help"
+msgstr "B<ltnu> --help"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:15
+msgid ""
+"B<ltnu> (Long Time No Upload) queries the public mirror of the Ultimate "
+"Debian Database (udd-mirror.debian.net) for all uploads of packages by the "
+"given uploader or maintainer and displays them ordered by the last upload of "
+"that package to Debian Unstable, oldest uploads first."
+msgstr ""
+"B<ltnu> (Long Time No Upload) nécessite le miroir public de l'Ultimate "
+"Debian Database (udd-mirror.debian.net) pour tous les versements de paquets "
+"par l'uploader ou le responsable donné et les affiche ordonnés par ordre de "
+"versement de ce paquet dans Debian Unstable, les plus anciens versements en "
+"premier."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:21
+msgid ""
+"Its primary purpose is to check which of your own or your team's packages "
+"haven't been uploaded for a long time and likely need a packaging revamp. "
+"It's less suitable for MIA team purposes as it doesn't make a difference "
+"with regards to who actually uploaded a package."
+msgstr ""
+"L'objectif premier de l'option est de vérifier lesquels de vos paquets ou de "
+"ceux de votre équipe n'ont pas été chargés depuis longtemps et, "
+"vraisemblablement, ont besoin d'une actualisation de leur empaquetage. C'est "
+"moins adapté aux objectifs d'une équipe MIA (recherche de responsables "
+"\"manquant à l'appel\") dans la mesure où elle n'individualise pas qui verse "
+"réellement un paquet."
+
+#. type: =item
+#: ../scripts/ltnu.pod:31
+msgid "-m"
+msgstr "-m"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:33
+msgid "Only search in the Maintainer field and ignore the Uploaders field."
+msgstr ""
+"N'effectuer une recherche que dans le champs responsable (Maintainer) et pas "
+"dans le champs Uploaders."
+
+#. type: =head1
+#: ../scripts/ltnu.pod:37
+msgid "PARAMETERS"
+msgstr "PARAMÈTRES"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:39
+msgid ""
+"The maintainer/uploader to query can be given either by setting C<$DEBEMAIL> "
+"as environment variable or as single commandline parameter."
+msgstr ""
+"Le responsable ou l'uploader à rechercher peut être fourni en réglant "
+"C<$DEBEMAIL> comme variable d'environnement ou comme paramètre unique en "
+"ligne de commande."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:42
+msgid ""
+"If a commandline parameter does not contain an C<@>, C<@debian.org> is "
+"appended, e.g. C<ltnu abe> queries for C<abe@debian.org>."
+msgstr ""
+"Si un paramètre en ligne de commande ne contient pas un C<@>, C<@debian.org> "
+"est ajouté, par exemple C<ltnu abe> recherche C<abe@debian.org>."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:45
+msgid ""
+"Exceptions are some shortcuts for common, long e-mail addresses. So far "
+"implemented shortcuts:"
+msgstr ""
+"Des exceptions existent pour certains raccourcis d'adresses de courriel "
+"longues courantes. Raccourcis déjà implémentés :"
+
+#. type: =item
+#: ../scripts/ltnu.pod:50
+msgid "pkg-gnustep"
+msgstr "pkg-gnustep"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:52
+msgid "pkg-gnustep-maintainers@lists.alioth.debian.org"
+msgstr "pkg-gnustep-maintainers@lists.alioth.debian.org"
+
+#. type: =item
+#: ../scripts/ltnu.pod:54
+msgid "pkg-perl"
+msgstr "pkg-perl"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:56
+msgid "pkg-perl-maintainers@lists.alioth.debian.org"
+msgstr "pkg-perl-maintainers@lists.alioth.debian.org"
+
+#. type: =item
+#: ../scripts/ltnu.pod:58
+msgid "pkg-zsh"
+msgstr "pkg-zsh"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:60
+msgid "pkg-zsh-devel@lists.alioth.debian.org"
+msgstr "pkg-zsh-devel@lists.alioth.debian.org"
+
+#. type: =item
+#: ../scripts/ltnu.pod:62
+msgid "qa"
+msgstr "qa"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:64
+msgid "packages@qa.debian.org"
+msgstr "packages@qa.debian.org"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:70
+msgid "The following environment variables are honoured:"
+msgstr "Les variables d'environnement suivantes sont acceptées :"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:76
+msgid "Used for querying if no parameter is given."
+msgstr "Utilisée pour les requêtes sans paramètre."
+
+#. type: =item
+#: ../scripts/ltnu.pod:78
+msgid "PAGER"
+msgstr "AFFICHEUR"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:80
+msgid "Used by B<psql> as pager."
+msgstr "Utilisée comme afficheur par B<psql>."
+
+#. type: verbatim
+#: ../scripts/ltnu.pod:86
+#, no-wrap
+msgid ""
+" $ ltnu pkg-zsh\n"
+" source | ver | uploaded\n"
+" -------------------------+--------------+------------------------\n"
+" zgen | 0~20150919-3 | 2016-08-24 04:55:31+00\n"
+" zplug | 2.4.1-1 | 2017-01-13 09:51:26+00\n"
+" zsh-syntax-highlighting | 0.6.0-1 | 2017-08-30 09:06:26+00\n"
+" zsh | 5.4.2-2 | 2017-11-02 20:56:55+00\n"
+" (4 rows)\n"
+"\n"
+msgstr ""
+" $ ltnu pkg-zsh\n"
+" source | ver | uploaded\n"
+" -------------------------+--------------+------------------------\n"
+" zgen | 0~20150919-3 | 2016-08-24 04:55:31+00\n"
+" zplug | 2.4.1-1 | 2017-01-13 09:51:26+00\n"
+" zsh-syntax-highlighting | 0.6.0-1 | 2017-08-30 09:06:26+00\n"
+" zsh | 5.4.2-2 | 2017-11-02 20:56:55+00\n"
+" (4 rows)\n"
+"\n"
+
+#. type: =head1
+#: ../scripts/ltnu.pod:95
+msgid "DEPENDENCIES"
+msgstr "DÉPENDANCES"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:97
+msgid ""
+"B<ltnu> uses the PostgreSQL client command B<psql> and hence needs Debian's "
+"B<postgresql-client> package to be installed."
+msgstr ""
+"B<ltnu> utilise la commande B<psql> du client PostgreSQL et par conséquent "
+"nécessite l'installation du paquet B<postgresql-client> de Debian."
+
+#. type: =head1
+#: ../scripts/ltnu.pod:100
+msgid "AUTHOR, COPYRIGHT, LICENSE"
+msgstr "AUTEUR, COPYRIGHT, LICENCE"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:102
+msgid ""
+"Copyright 2017 Axel Beckert <abe@debian.org>. Licensed under the GNU General "
+"Public License, version 2 or later."
+msgstr ""
+"Copyright 2017 Axel Beckert <abe@debian.org>. Publié sous la GNU General "
+"Public License, version 2 ou suivante."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:107
+msgid ""
+"L<https://udd-mirror.debian.net/>, L<https://udd.debian.org/>, L<https://"
+"wiki.debian.org/UltimateDebianDatabase>"
+msgstr ""
+"L<https://udd-mirror.debian.net/>, L<https://udd.debian.org/>, L<https://"
+"wiki.debian.org/UltimateDebianDatabase>"
+
+#. type: TH
+#: ../scripts/manpage-alert.1:1
+#, no-wrap
+msgid "MANPAGE-ALERT"
+msgstr "MANPAGE-ALERT"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:4
+msgid "manpage-alert - check for binaries without corresponding manpages"
+msgstr "manpage-alert - Chercher des programmes sans page de manuel"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:6
+msgid "B<manpage-alert> [I<options>] [I<paths>]"
+msgstr "B<manpage-alert> [I<options>] [I<chemins>]"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:9
+msgid ""
+"B<manpage-alert> searches the given list of paths for binaries without "
+"corresponding manpages."
+msgstr ""
+"B<manpage-alert> recherche dans la liste des chemins fournie les binaires "
+"qui n'ont pas de page de manuel correspondante."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:12
+msgid ""
+"If no I<paths> are specified on the command line, the path list I</bin /"
+"sbin /usr/bin /usr/sbin /usr/games> will be assumed."
+msgstr ""
+"Si aucun I<chemin> n'est indiqué sur la ligne de commande, la liste suivante "
+"est utilisée : I</bin /sbin /usr/bin /usr/sbin /usr/games>."
+
+#. type: TP
+#: ../scripts/manpage-alert.1:13
+#, no-wrap
+msgid "B<-h>,B<--help>"
+msgstr "B<-h>, B<--help>"
+
+#. type: TP
+#: ../scripts/manpage-alert.1:16
+#, no-wrap
+msgid "B<-V>,B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: TP
+#: ../scripts/manpage-alert.1:19
+#, no-wrap
+msgid "B<-f>,B<--file>"
+msgstr "B<-f>, B<--file>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:22
+msgid "Show filenames of missing manpages without any leading text."
+msgstr ""
+"Montrer les noms de fichier des pages de manuel manquantes sans autre texte."
+
+#. type: TP
+#: ../scripts/manpage-alert.1:22
+#, no-wrap
+msgid "B<-p>,B<--package>"
+msgstr "B<-p>,B<--package>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:25
+msgid "Show filenames of missing manpages with their package name."
+msgstr ""
+"Montrer les noms de fichier des pages de manuel manquantes avec le nom de "
+"leur paquet."
+
+#. type: TP
+#: ../scripts/manpage-alert.1:25
+#, no-wrap
+msgid "B<-n>,B<--no-stat>"
+msgstr "B<-n>, B<--no-stat>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:28
+msgid "Do not show statistics at the end."
+msgstr "Ne pas montrer les statistiques à la fin."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:33
+msgid ""
+"B<manpage-alert> was written by Branden Robinson and modified by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt> and Adam D. Barratt E<lt>debian-bts@adam-"
+"barratt.org.ukE<gt> (who also wrote this manpage) for the devscripts package."
+msgstr ""
+"B<manpage-alert> a été écrit par Branden Robinson et a été modifié par "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt> et Adam D. Barratt E<lt>debian-"
+"bts@adam-barratt.org.ukE<gt> (qui a également écrit cette page de manuel) "
+"pour le paquet devscripts."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:35
+msgid ""
+"This manpage and the associated program are licensed under the terms of the "
+"GPL, version 2 or later."
+msgstr ""
+"Cette page de manuel et le programme associé sont publiés sous licence GPL, "
+"version 2 ou ultérieure."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:23
+msgid "mass-bug - mass-file a bug report against a list of packages"
+msgstr ""
+"mass-bug - Soumettre en masse un rapport de bogue contre une liste de paquets"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:27
+msgid ""
+"B<mass-bug> [I<options>] B<--subject=\">I<bug subject>B<\"> I<template "
+"package-list>"
+msgstr ""
+"B<mass-bug> [I<options>] B<--subject=\">I<sujet du bogue>B<\"> I<modèle "
+"liste-des-paquets>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:31
+msgid ""
+"mass-bug assists in filing a mass bug report in the Debian BTS on a set of "
+"packages. For each package in the package-list file (which should list one "
+"package per line together with an optional version number separated from the "
+"package name by an underscore), it fills out the template, adds BTS pseudo-"
+"headers, and either displays or sends the bug report."
+msgstr ""
+"mass-bug aide à soumettre un rapport de bogue en masse dans le BTS de "
+"Debian, sur un ensemble de paquets. Pour chaque paquet dans le fichier liste-"
+"des-paquets (qui doit lister un paquet par ligne, avec un numéro de version "
+"optionnel séparé du paquet par un tiret-bas), cette commande récupère le "
+"modèle, ajoute les pseudo-en-têtes du BTS, et affiche ou envoie le rapport "
+"de bogue."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:37
+msgid ""
+"Warning: Some care has been taken to avoid unpleasant and common mistakes, "
+"but this is still a power tool that can generate massive amounts of bug "
+"report mails. Use it with care, and read the documentation in the "
+"Developer's Reference about mass filing of bug reports first."
+msgstr ""
+"Attention : il faut être prudent pour éviter des erreurs déplaisantes et "
+"habituelles, mais il s'agit toujours d'un outil puissant qui peut produire "
+"un grand nombre de messages pour un rapport de bogue. Utilisez-le avec "
+"précautions, et lisez d'abord la documentation dans la référence du "
+"développeur sur l'envoi de rapports de bogue en masse."
+
+#. type: =head1
+#: ../scripts/mass-bug.pl:42
+msgid "TEMPLATE"
+msgstr "MODÈLE"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:44
+msgid ""
+"The template file is the body of the message that will be sent for each bug "
+"report, excluding the BTS pseudo-headers. In the template, #PACKAGE# is "
+"replaced with the name of the package. If a version was specified for the "
+"package, #VERSION# will be replaced by that version."
+msgstr ""
+"Le fichier modèle représente le corps du message qui sera envoyé pour chaque "
+"rapport de bogue, sans les pseudo-en-têtes du BTS. Dans le modèle, #PACKAGE# "
+"est remplacé par le nom du paquet. Si une version a été indiquée pour le "
+"paquet, #VERSION# sera remplacé par cette version."
+
+# NOTE: missing #? (in #EPOCH#UPSTREAM_VERSION##REVISION#)
+#. type: textblock
+#: ../scripts/mass-bug.pl:49
+msgid ""
+"The components of the version number may be specified using #EPOCH#, "
+"#UPSTREAM_VERSION# and #REVISION#. #EPOCH# includes the trailing colon and "
+"#REVISION# the leading dash so that #EPOCH#UPSTREAM_VERSION##REVISION# is "
+"always the same as #VERSION#."
+msgstr ""
+"Les différentes parties du numéro de version peuvent être indiquées en "
+"utilisant #EPOCH#, #UPSTREAM_VERSION# et #REVISION#. #EPOCH# contient le \":"
+"\" de fin et #REVISION# contient le tiret de début, de telle sorte que "
+"#EPOCH##UPSTREAM_VERSION##REVISION# est toujours identique à #VERSION#."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:54
+msgid ""
+"Note that text in the template will be automatically word-wrapped to 70 "
+"columns, up to the start of a signature (indicated by S<'-- '> at the start "
+"of a line on its own). This is another reason to avoid including BTS pseudo-"
+"headers in your template."
+msgstr ""
+"Remarquez que le texte dans le modèle sera automatiquement ajusté à "
+"70 colonnes par ligne, jusqu'au début de la signature (indiqué par une ligne "
+"commençant par la chaîne S<'-- '>). C'est une autre raison pour laquelle il "
+"faut éviter les pseudo-en-têtes dans les modèles."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:61
+msgid ""
+"B<mass-bug> examines the B<devscripts> configuration files as described "
+"below. Command line options override the configuration file settings, "
+"though."
+msgstr ""
+"B<mass-bug> examine les fichiers de configuration de B<devscripts> comme "
+"décrit ci-dessous. Les options en ligne de commande permettent de remplacer "
+"les paramètres des fichiers de configuration."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:67
+msgid ""
+"B<--severity=>(B<wishlist>|B<minor>|B<normal>|B<important>|B<serious>|"
+"B<grave>|B<critical>)"
+msgstr ""
+"B<--severity=>(B<wishlist>|B<minor>|B<normal>|B<important>|B<serious>|"
+"B<grave>|B<critical>)"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:69
+msgid ""
+"Specify the severity with which bugs should be filed. Default is B<normal>."
+msgstr ""
+"Indiquer la sévérité avec laquelle soumettre les bogues. Par défaut, "
+"B<normal> est utilisé."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:72
+msgid "B<--display>"
+msgstr "B<--display>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:74
+msgid ""
+"Fill out the templates for each package and display them all for "
+"verification. This is the default behavior."
+msgstr ""
+"Complète les modèles pour chaque paquet et les affiche tous pour être "
+"vérifiés. C'est le comportement par défaut."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:77
+msgid "B<--send>"
+msgstr "B<--send>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:79
+msgid "Actually send the bug reports."
+msgstr "Envoie réellement les rapports de bogue."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:81
+msgid "B<--subject=\">I<bug subject>B<\">"
+msgstr "B<--subject=\">I<sujet du bogue>B<\">"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:83
+msgid ""
+"Specify the subject of the bug report. The subject will be automatically "
+"prefixed with the name of the package that the bug is filed against."
+msgstr ""
+"Indiquer le sujet du rapport de bogue. Le sujet sera automatiquement préfixé "
+"par le nom du paquet contre lequel le bogue est soumis."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:86
+msgid "B<--tags>"
+msgstr "B<--tags>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:88
+msgid "Set the BTS pseudo-header for tags."
+msgstr "Définir le pseudo-en-tête \"tags\" pour le BTS."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:90 ../scripts/salsa.pl:566
+msgid "B<--user>"
+msgstr "B<--user>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:92
+msgid "Set the BTS pseudo-header for a usertags' user."
+msgstr ""
+"Définir le pseudo-en-tête définissant l'utilisateur des usertags pour le BTS."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:94
+msgid "B<--usertags>"
+msgstr "B<--usertags>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:96
+msgid "Set the BTS pseudo-header for usertags."
+msgstr "Définir le pseudo-en-tête \"usertags\" pour le BTS."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:98
+msgid "B<--control=>I<COMMAND>"
+msgstr "B<--control=>I<COMMAND>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:100
+msgid ""
+"Add a BTS control command. This option may be repeated to add multiple "
+"control commands. For example, if you are mass-bug-filing \"please stop "
+"depending on this deprecated package\", and bug 123456 represents removal of "
+"the deprecated package, you could use:"
+msgstr ""
+"Ajoute une commande de contrôle à BTS. Cette ooption peut être répétée pour "
+"ajouter de multiples commandes de contrôle. Par exemple, pour lancer de "
+"massifs \"please stop depending on this deprecated package\" et si le bogue "
+"123456 pointe la suppression du paquet déprécié, on peut utiliser :"
+
+#. type: verbatim
+#: ../scripts/mass-bug.pl:105
+#, no-wrap
+msgid ""
+" mass-bug --control='block 123456 by -1' ...\n"
+"\n"
+msgstr ""
+" mass-bug --control='block 123456 by -1' ...\n"
+"\n"
+
+#. type: =item
+#: ../scripts/mass-bug.pl:107
+msgid "B<--source>"
+msgstr "B<--source>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:109
+msgid ""
+"Specify that package names refer to source packages rather than binary "
+"packages."
+msgstr ""
+"Préciser que les noms de paquet se réfèrent à des paquets source et non pas "
+"à des paquets binaires."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:114
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will not be passed to a shell. Default is F</usr/sbin/sendmail>."
+msgstr ""
+"Indiquer la commande utilisée pour envoyer le message. La commande sera "
+"découpée en fonction des espaces et ne sera pas passée à un interpréteur de "
+"commandes. Par défaut, c'est F</usr/sbin/sendmail> qui est utilisé."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:117
+msgid "B<--no-wrap>"
+msgstr "B<--no-wrap>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:119
+msgid "Do not wrap the template to lines of 70 characters."
+msgstr "Ne remet pas les lignes en forme à 70 caractères."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:138
+msgid ""
+"B<DEBEMAIL> and B<EMAIL> can be set in the environment to control the email "
+"address that the bugs are sent from."
+msgstr ""
+"B<DEBEMAIL> et B<EMAIL> peuvent être définis dans l'environnement pour "
+"contrôler l'adresse électronique utilisée pour envoyer les bogues."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:561
+msgid "This program is Copyright (C) 2006 by Joey Hess <joeyh@debian.org>."
+msgstr ""
+"Ce programme a été écrit par Joey Hess <joeyh@debian.org>, Copyright (C) "
+"2006."
+
+#. type: TH
+#: ../scripts/mergechanges.1:1
+#, no-wrap
+msgid "MERGECHANGES"
+msgstr "MERGECHANGES"
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:4
+msgid "mergechanges - merge multiple changes files"
+msgstr "mergechanges - Fusionner plusieurs fichiers changes"
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:6
+msgid ""
+"B<mergechanges> [B<-d>] [B<-f>] [B<-S>] [B<-i>] I<file1 file2> [I<file>...]"
+msgstr ""
+"B<mergechanges> [B<-d>] [B<-f>] [B<-S>] [B<-i>] I<fichier1 fichier2> "
+"[I<fichier>...]"
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:13
+msgid ""
+"B<mergechanges> merges two or more I<.changes> files, merging the "
+"Architecture, Description and Files (and Checksums-*, if present) fields of "
+"the two. There are checks made to ensure that the changes files are from "
+"the same source package and version and use the same changes file Format. "
+"The first changes file is used as the basis and the information from the "
+"later ones is merged into it."
+msgstr ""
+"B<mergechanges> fusionne deux fichiers I<.changes> (ou plus), en fusionnant "
+"les champs \"Architecture\", \"Description\" et \"Files\" des fichiers "
+"(ainsi que les champs \"Checksums-*\", s'il y en a). Des vérifications de "
+"base sont effectuées pour s'assurer que les fichiers \"changes\" proviennent "
+"du même paquet source et de la même version, et qu'ils utilisent le même "
+"format de fichier \"changes\". Le premier fichier \"changes\" est utilisé "
+"comme base et les informations des fichiers suivants y sont ajoutées."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:18
+msgid ""
+"The output is normally written to I<stdout>. If the B<-f> option is given, "
+"the output is written to I<package>_I<version>_multi.changes instead, in the "
+"same directory as the first changes file listed."
+msgstr ""
+"La sortie est normalement dirigée vers la sortie standard (I<stdout>). Si "
+"l'option B<-f> est utilisée, la sortie est écrite dans "
+"I<paquet>_I<version>_multi.changes, dans le même répertoire que le premier "
+"fichier \"changes\"."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:21
+msgid ""
+"If the B<-d> option is given and the output is generated successfully, the "
+"input files will be deleted."
+msgstr ""
+"Si l'option B<-d> est passée et la sortie générée avec succès, les fichiers "
+"d'entrées seront détruits."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:25
+msgid ""
+"If the B<-i> or B<--indep> option is given, source packages and architecture-"
+"independent (Architecture: all) packages are included in the output, but "
+"architecture-dependent packages are not."
+msgstr ""
+"Si l'option B<-i> ou B<--indep> est passée, les paquets source et les "
+"paquets indépendants de l'architecture (Architecture: all) sont inclus dans "
+"la sortie, mais pas les paquets dépendant de l'architecture."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:28
+msgid ""
+"If the B<-S> or B<--source> option is given, only source packages are "
+"included in the output."
+msgstr ""
+"Si l'option B<-S> ou B<--source> est donnée, seuls les paquets source sont "
+"inclus dans la sortie."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:33
+msgid ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>, Mark Hymers E<lt>mhy@debian.orgE<gt>, Adam D. "
+"Barratt E<lt>adam@adam-barratt.org.ukE<gt>, and Simon McVittie "
+"E<lt>smcv@debian.orgE<gt>."
+msgstr ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, modifications par Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>, Mark Hymers E<lt>mhy@debian.orgE<gt>, Adam D. "
+"Barratt E<lt>adam@adam-barratt.org.ukE<gt> et Simon McVittie "
+"E<lt>smcv@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:26
+msgid ""
+"mk-build-deps - build a package satisfying a package's build-dependencies"
+msgstr ""
+"mk-build-deps - Construire un paquet qui satisfait les dépendances de "
+"construction d'un paquet"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:30
+msgid "B<mk-build-deps> B<--help>|B<--version>"
+msgstr "B<mk-build-deps> B<--help>|B<--version>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:32
+msgid "B<mk-build-deps> [I<options>] I<control file> | I<package name> ..."
+msgstr ""
+"B<mk-build-deps> [I<options>] I<fichier de contrôle> | I<nom de paquet> ..."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:36
+msgid ""
+"Given a I<package name> and/or I<control file>, B<mk-build-deps> will use "
+"B<equivs> to generate a binary package which may be installed to satisfy all "
+"the build dependencies of the given package."
+msgstr ""
+"À partir d'un I<nom de paquet> ou d'un I<fichier de contrôle>, B<mk-build-"
+"deps> utilisera B<equivs> pour produire un paquet binaire qui peut être "
+"installé pour satisfaire les dépendances de construction d'un paquet."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:40
+msgid ""
+"If B<--build-dep> and/or B<--build-indep> are given, then the resulting "
+"binary package(s) will depend solely on the Build-Depends/Build-Depends-"
+"Indep dependencies, respectively."
+msgstr ""
+"Si B<--build-dep> ou B<--build-indep> est fournie, les paquets binaires "
+"résultant ne dépendront respectivement que des dépendances Build-Depends ou "
+"Build-Depends-Indep (ou des deux)."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:48
+msgid "B<-i>, B<--install>"
+msgstr "B<-i>, B<--install>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:50
+msgid "Install the generated packages and its build-dependencies."
+msgstr "Installer les paquets créés et leurs dépendances de construction."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:52
+msgid "B<-t>, B<--tool>"
+msgstr "B<-t>, B<--tool>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:54
+msgid ""
+"When installing the generated package use the specified tool. (default: "
+"B<apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends>)"
+msgstr ""
+"Pour l'installation du paquet créé, utiliser l'outil indiqué (par défaut : "
+"B<apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends>)."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:57
+msgid "B<-r>, B<--remove>"
+msgstr "B<-r>, B<--remove>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:59
+msgid ""
+"Remove the package file after installing it. Ignored if used without the B<--"
+"install> switch."
+msgstr ""
+"Supprimer le fichier du paquet après l'avoir installé. Cette option est "
+"ignorée si l'option B<--install> n'est pas utilisée."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:62
+msgid "B<-a> I<foo>, B<--arch> I<foo>"
+msgstr "B<-a> I<toto>, B<--arch> I<toto>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:64
+msgid ""
+"Set the architecture of the produced binary package to I<foo>. If this "
+"option is not given, fall back to the value given by B<--host-arch>. If "
+"neither this option nor B<--host-arch> are given but the Build-Depends "
+"contain architecture restrictions, use the value printed by `dpkg-"
+"architecture -qDEB_HOST_ARCH`. Otherwise, use I<all>."
+msgstr ""
+"Configurer l'architecture du paquet binaire produit à I<foo>. Si cette "
+"option n'est pas passée, retourner à la valeur donnée par B<--host-arch>. Si "
+"ni cette option ni B<--host-arch> ne sont utilisées, mais que les "
+"dépendances de construction (Build-Depends) renferment des restrictions "
+"d'architectures, utiliser la valeur affichée par \"dpkg-architecture -"
+"qDEB_HOST_ARCH\". Autrement, utiliser I<all>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:70
+msgid ""
+"The package architecture must be equal to the host architecture except if "
+"the package architecture is I<all>."
+msgstr ""
+"L'architecture du paquet doit être la même que l'architecture de l'hôte sauf "
+"si l'architecture du paquet est I<all>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:73
+msgid ""
+"The package architecture cannot be I<all> if the build and host architecture "
+"differ."
+msgstr ""
+"L'architecture du paquet ne peut pas être I<all> si l'architecture de "
+"construction et celle de l'hôte diffèrent."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:76
+msgid "B<--host-arch> I<foo>"
+msgstr "B<--host-arch> I<toto>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:78
+msgid ""
+"Set the host architecture the binary package is built for. This defaults to "
+"the value printed by `dpkg-architecture -qDEB_HOST_ARCH`. Use this option to "
+"create a binary package that is able to satisfy crossbuild dependencies."
+msgstr ""
+"Configurer l'architecture de l'hôte pour laquelle le paquet binaire est "
+"construit. La valeur par défaut est celle affichée par \"dpkg-architecture -"
+"qDEB_HOST_ARCH\". Utiliser cette option pour créer un paquet binaire capable "
+"de satisfaire des dépendances de construction croisée."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:82
+msgid ""
+"If this option is used together with B<--arch>, then they must be equal "
+"except if the value of B<--arch> is I<all>."
+msgstr ""
+"Si cette option est utilisée avec B<--arch>, alors les deux valeurs doivent "
+"être les mêmes sauf si la valeur de B<--arch> est I<all>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:85
+msgid ""
+"If B<--arch> is not given, then this option also sets the package "
+"architecture."
+msgstr ""
+"Si B<--arch> n'est pas donnée, alors cette option configure aussi "
+"l'architecture du paquet."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:87
+msgid "B<--build-arch> I<foo>"
+msgstr "B<--build-arch> I<toto>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:89
+msgid ""
+"Set the build architecture the binary package is built for. This defaults to "
+"the value printed by `dpkg-architecture -qDEB_BUILD_ARCH`. Use this option "
+"to create a binary package that is able to satisfy crossbuild dependencies."
+msgstr ""
+"Configurer l'architecture de construction pour laquelle le paquet binaire "
+"est construit. La valeur par défaut est celle affichée par \"dpkg-"
+"architecture -qDEB_BUILD_ARCH\". Utiliser cette option pour créer un paquet "
+"binaire capable de satisfaire des dépendances de construction croisée."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:93
+msgid "B<-B>, B<--build-dep>"
+msgstr "B<-B>, B<--build-dep>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:95
+msgid ""
+"Generate a package which only depends on the source package's Build-Depends "
+"dependencies."
+msgstr ""
+"Crée un paquet qui ne dépend que des dépendances Build-Depends du paquet "
+"source."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:98
+msgid "B<-A>, B<--build-indep>"
+msgstr "B<-A>, B<--build-indep>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:100
+msgid ""
+"Generate a package which only depends on the source package's Build-Depends-"
+"Indep dependencies."
+msgstr ""
+"Crée un paquet qui ne dépend que des dépendances Build-Depends-Indep du "
+"paquet source."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:103
+msgid "B<-P>, B<--build-profiles> I<profile[,...]>"
+msgstr "B<-P>, B<--build-profiles> I<profile[,...]>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:105
+msgid ""
+"Generate a package which only depends on build dependencies with the build "
+"profile(s), given as a comma-separated list. The default behavior is to use "
+"no specific profile. Setting this option will override the "
+"B<DEB_BUILD_PROFILES> environment variable."
+msgstr ""
+"Génère un paquet qui ne dépend que des dépendances de construction avec les "
+"profils de construction passés en paramètre, séparés par des virgules. Le "
+"comportement par défaut est de n'utiliser aucun profile spécifique. Cette "
+"option surcharge la variable d'environnement B<DEB_BUILD_PROFILES>."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:119
+msgid "B<-s>, B<--root-cmd>"
+msgstr "B<-s>, B<--root-cmd>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:121
+msgid ""
+"Use the specified tool to gain root privileges before installing. Ignored "
+"if used without the B<--install> switch."
+msgstr ""
+"Utilise l'outil indiqué pour obtenir les droits du superutilisateur avant "
+"l'installation. Cette option est ignorée si l'option B<--install> n'est pas "
+"utilisée."
+
+#. type: =head2
+#: ../scripts/mk-build-deps.pl:128
+msgid "External environment"
+msgstr "Environnement externe"
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:132
+msgid "B<DEB_BUILD_PROFILES>"
+msgstr "B<DEB_BUILD_PROFILES>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:134
+msgid ""
+"If set, it will be used as the active build profile(s) for the build "
+"dependencies to be installed. It is a space separated list of profile "
+"names. Overridden by the B<-P> option."
+msgstr ""
+"Si activé, sera utilisé comme profil(s) actif(s) pour les dépendances de "
+"construction à installer. Liste de nom de profils séparés par des espaces. "
+"Surchargé par l'option B<-P>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:143
+msgid ""
+"B<mk-build-deps> is copyright by Vincent Fourmond and was modified for the "
+"devscripts package by Adam D. Barratt <adam@adam-barratt.org.uk>."
+msgstr ""
+"B<mk-build-deps> est sous copyright de Vincent Fourmond et a été modifié "
+"pour le paquet devscripts par Adam D. Barratt <adam@adam-barratt.org.uk>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:146 ../scripts/transition-check.pl:77
+msgid ""
+"This program comes with ABSOLUTELY NO WARRANTY. You are free to "
+"redistribute this code under the terms of the GNU General Public License, "
+"version 2 or later."
+msgstr ""
+"Ce programme est fourni SANS AUCUNE GARANTIE. Vous êtes libre de "
+"redistribuer ce code sous les termes de la licence publique générale GNU "
+"(GNU General Public Licence), version 2 ou ultérieure."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:27
+msgid ""
+"mk-origtargz - rename upstream tarball, optionally changing the compression "
+"and removing unwanted files"
+msgstr ""
+"mk-origtargz - Renommer l’archive amont, en modifiant éventuellement la "
+"compression et en supprimant les fichiers non désirés"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:33
+msgid "B<mk-origtargz> [I<options>] F<foo-1.0.tar.gz>"
+msgstr "B<mk-origtargz> [I<options>] F<truc-1.0.tar.gz>"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:35
+msgid "B<mk-origtargz> B<--help>"
+msgstr "B<mk-origtargz> B<--help>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:41
+msgid ""
+"B<mk-origtargz> renames the given file to match what is expected by B<dpkg-"
+"buildpackage>, based on the source package name and version in F<debian/"
+"changelog>. It can convert B<zip> to B<tar>, optionally change the "
+"compression scheme and remove files according to B<Files-Excluded> and "
+"B<Files-Excluded->I<component> in F<debian/copyright>. The resulting file is "
+"placed in F<debian/../..>. (In F<debian/copyright>, the B<Files-Excluded> "
+"and B<Files-Excluded->I<component> stanzas are a part of the first paragraph "
+"and there is a blank line before the following paragraphs which contain "
+"B<Files> and other stanzas. The B<Files-Included> stanza may be used to "
+"ignore parts of subdirectories specified by the B<Files-Excluded> stanza See "
+"B<uscan>(1) \"COPYRIGHT FILE EXAMPLE\".)"
+msgstr ""
+"B<mk-origtargz> renomme le fichier donné pour correspondre à ce qui est "
+"attendu par B<dpkg-buildpackage>, à partir du nom de paquet source et de la "
+"version dans F<debian/changelog>. Il peut convertir du B<ZIP> en B<tar>, et "
+"éventuellement modifier la compression et supprimer les fichiers "
+"conformément à B<Files-Excluded> et B<Files-Excluded->I<composante> dans "
+"F<debian/copyright>. Le fichier résultant est placé dans F<debian/../..>. "
+"(Dans F<debian/copyright>, les alinéas B<Files-Excluded> et B<Files-Excluded-"
+">I<composante> font partie du premier paragraphe et il y a une ligne vide "
+"avant les paragraphes suivants qui contiennent B<Files> et les autres "
+"alinéas. L'alinéa B<Files-Included> devrait être utilisé pour ignorer une "
+"partie des sous-répertoires indiqué par les alinéas B<Files-Excluded>. Voir "
+"B<uscan>(1) \"EXEMPLES DE FICHIER DE COPYRIGHT\".)"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:53
+msgid ""
+"The archive type for B<zip> is detected by \"B<file --dereference --brief --"
+"mime-type>\" command. So any B<zip> type archives such as B<jar> are "
+"treated in the same way. The B<xpi> archive is detected by its extension "
+"and is handled properly using the B<xpi-unpack> command."
+msgstr ""
+"Le type d'archive de B<zip> est identifié par la commande \"B<file --"
+"dereference --brief --mime-type>\". Ainsi, toutes les archives de type "
+"B<zip> telles que B<jar> sont traitées de la même manière. Les archives "
+"B<xpi> sont détectées par leur extension et traitées correctement avec la "
+"commande B<xpi-unpack>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:58
+msgid ""
+"If the package name is given via the B<--package> option, no information is "
+"read from F<debian/>, and the result file is placed in the current directory."
+msgstr ""
+"Si le nom de paquet est donné à l’aide de l’option B<--package>, aucun "
+"renseignement n’est lu dans F<debian/> et le fichier résultant est placé "
+"dans le répertoire actuel."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:61
+msgid ""
+"B<mk-origtargz> is commonly called via B<uscan>, which first obtains the "
+"upstream tarball."
+msgstr ""
+"B<mk-origtargz> est normalement appelé par B<uscan>, qui obtient d’abord "
+"l’archive amont."
+
+#. type: =head2
+#: ../scripts/mk-origtargz.pl:66
+msgid "Metadata options"
+msgstr "Options de métadonnées"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:68
+msgid ""
+"The following options extend or replace information taken from F<debian/>."
+msgstr ""
+"Les options suivantes étendent ou remplacent les renseignements pris dans "
+"F<debian/>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:74
+msgid ""
+"Use I<package> as the name of the Debian source package, and do not require "
+"or use a F<debian/> directory. This option can only be used together with "
+"B<--version>."
+msgstr ""
+"Utiliser I<paquet> comme nom de paquet source Debian et ne pas nécessiter ni "
+"utiliser de répertoire F<debian/>. Cette option ne peut être utilisée "
+"qu’avec B<--version>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:78
+msgid ""
+"The default is to use the package name of the first entry in F<debian/"
+"changelog>."
+msgstr ""
+"Par défaut, le nom de paquet est pris dans la première entrée de F<debian/"
+"changelog>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:80
+msgid "B<-v>, B<--version> I<version>"
+msgstr "B<-v>, B<--version> I<version>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:82
+msgid ""
+"Use I<version> as the version of the package. This needs to be the upstream "
+"version portion of a full Debian version, i.e. no Debian revision, no epoch."
+msgstr ""
+"Utiliser I<version> comme version du paquet. Cela doit être la partie de "
+"version amont d’une version Debian complète, c’est-à-dire sans révision "
+"Debian ni epoch."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:85
+msgid ""
+"The default is to use the upstream portion of the version of the first entry "
+"in F<debian/changelog>."
+msgstr ""
+"Par défaut, la partie amont de la version est prise dans la première entrée "
+"de F<debian/changelog>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:88
+msgid "B<--exclude-file> I<glob>"
+msgstr "B<--exclude-file> I<joker>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:90
+msgid ""
+"Remove files matching the given I<glob> from the tarball, as if it was "
+"listed in B<Files-Excluded>."
+msgstr ""
+"Supprimer les fichiers correspondant au I<joker> donné de l’archive amont, "
+"comme s’il était indiqué dans B<Files-Excluded>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:93
+msgid "B<--copyright-file> I<filename>"
+msgstr "B<--copyright-file> I<fichier>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:95
+msgid ""
+"Remove files matching the patterns found in I<filename>, which should have "
+"the format of a Debian F<copyright> file (B<Format: https://www.debian.org/"
+"doc/packaging-manuals/copyright-format/1.0/> to be precise). Errors parsing "
+"that file are silently ignored, exactly as is the case with F<debian/"
+"copyright>."
+msgstr ""
+"Supprimer les fichiers correspondant aux motifs de I<fichier> qui devrait "
+"être au format d’un fichier I<copyright> Debian (B<Format: https://www."
+"debian.org/doc/packaging-manuals/copyright-format/1.0/> pour être exact). "
+"Les erreurs d’analyse de ce fichier sont ignorées silencieusement, comme "
+"c’est le cas avec F<debian/copyright>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:101
+msgid ""
+"Unmatched patterns will emit a warning so the user can verify whether it is "
+"correct. If there are multiple patterns which match a file, only the last "
+"one will count as being matched."
+msgstr ""
+"Les motifs sans correspondance émettront un avertissement. L'utilisateur "
+"peut ainsi vérifier si c'est exact. Si plusieurs motifs correspondent à un "
+"fichier, seul le dernier comptera comme correspondant."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:105
+msgid ""
+"Both the B<--exclude-file> and B<--copyright-file> options amend the list of "
+"patterns found in F<debian/copyright>. If you do not want to read that file, "
+"you will have to use B<--package>."
+msgstr ""
+"Les options B<--exclude-file> et B<--copyright-file> modifient toutes les "
+"deux la liste des motifs trouvés dans F<debian/copyright>. Si vous ne voulez "
+"pas lire ce fichier, vous devez utiliser B<--package>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:109
+msgid "B<--signature> I<signature-mode>"
+msgstr "B<--username> I<mode_de_signature>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:111
+msgid "Set I<signature-mode>:"
+msgstr "Définir I<mode_de_signature> :"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:115
+msgid "0 for no signature"
+msgstr "0 pour l'absence de signature"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:117
+msgid "1 for normal detached signature"
+msgstr "1 pour une signature normale séparée"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:119
+msgid "2 for signature on decompressed"
+msgstr "2 pour une signature sur l'archive décompressée"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:121
+msgid "3 for self signature"
+msgstr "3 pour une auto-signature"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:125
+msgid "B<--signature-file> I<signature-file>"
+msgstr "B<--signature-file> I<fichier_de_signature>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:127
+msgid ""
+"Use I<signature-file> as the signature file corresponding to the Debian "
+"source package to create a B<dpkg-source> (post-stretch) compatible "
+"signature file. (optional)"
+msgstr ""
+"Utiliser I<fichier_de_signature> comme fichier de signature correspondant au "
+"paquet source Debian pour créer un fichier de signature compatible avec "
+"B<dpkg-source> (après Stretch). (Optionnel)."
+
+#. type: =head2
+#: ../scripts/mk-origtargz.pl:133
+msgid "Action options"
+msgstr "Options d’action"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:135
+msgid ""
+"These options specify what exactly B<mk-origtargz> should do. The options "
+"B<--copy>, B<--rename> and B<--symlink> are mutually exclusive."
+msgstr ""
+"Ces options indiquent exactement ce que B<mk-origtargz> devrait faire. Les "
+"options B<--copy>, B<--rename> et B<--symlink> s’excluent mutuellement."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:140 ../scripts/uscan.pl:1785
+msgid "B<--symlink>"
+msgstr "B<--symlink>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:142
+msgid ""
+"Make the resulting file a symlink to the given original file. (This is the "
+"default behaviour.)"
+msgstr ""
+"Faire du fichier résultant un lien symbolique vers le fichier d’origine "
+"donné (c'est le comportement par défaut)."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:145
+msgid ""
+"If the file has to be modified (because it is a B<zip>, B<xpi> or B<zst> "
+"file, because of B<--repack> or B<Files-Excluded>), this option behaves like "
+"B<--copy>."
+msgstr ""
+"Si le fichier doit être modifié (parce qu’il s’agit d’un fichier B<ZIP> ou "
+"B<xpi> ou B<zst>, à cause de B<--repack> ou à cause de B<Files-Excluded>), "
+"cette option se comporte comme B<--copy>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:149 ../scripts/uscan.pl:1790
+msgid "B<--copy>"
+msgstr "B<--copy>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:151
+msgid ""
+"Make the resulting file a copy of the original file (unless it has to be "
+"modified, of course)."
+msgstr ""
+"Faire du fichier résultant une copie du fichier d’origine (sauf bien sûr "
+"s’il doit être modifié)."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:154 ../scripts/uscan.pl:1794
+msgid "B<--rename>"
+msgstr "B<--rename>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:156
+msgid "Rename the original file."
+msgstr "Renommer le fichier d’origine."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:158
+msgid ""
+"If the file has to be modified (because it is a B<zip>, B<xpi>, B<zst> file, "
+"because of B<--repack> or B<Files-Excluded>), this implies that the original "
+"file is deleted afterwards."
+msgstr ""
+"Si le fichier doit être modifié (parce qu’il s’agit d’un fichier B<zip>, "
+"B<xpi> ou B<zst>, à cause de B<--repack> ou à cause de B<Files-Excluded>), "
+"cela implique la suppression du fichier d’origine à la fin."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:162 ../scripts/uscan.pl:1798
+msgid "B<--repack>"
+msgstr "B<--repack>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:164
+msgid ""
+"If the given file is not compressed using the desired format (see B<--"
+"compression>), recompress it."
+msgstr ""
+"Si le fichier donné n’est pas compressé au format voulu (consultez B<--"
+"compression>), le recompresser."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:167
+msgid "B<-S>, B<--repack-suffix> I<suffix>"
+msgstr "B<-S>, B<--repack-suffix> I<suffixe>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:169
+msgid ""
+"If the file has to be modified, because of B<Files-Excluded>, append "
+"I<suffix> to the upstream version."
+msgstr ""
+"Si le fichier doit être modifié, à cause de B<Files-Excluded>, ajouter "
+"I<suffixe> à la version amont."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:172
+msgid "B<--force-repack>"
+msgstr "B<--force-repack>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:174
+msgid ""
+"Recompress even if file is compressed using the desired format and no files "
+"were deleted."
+msgstr ""
+"Recompresser même si le fichier donné est compressé au format voulu et "
+"qu'aucun fichier n'a été effacé."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:177
+msgid "B<-c>, B<--component> I<componentname>"
+msgstr "B<-c>, B<--component> I<nom_composante>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:179
+msgid ""
+"Use <componentname> as the component name for the secondary upstream "
+"tarball. Set I<componentname> as the component name. This is used only for "
+"the secondary upstream tarball of the Debian source package. Then "
+"I<packagename_version.orig-componentname.tar.gz> is created."
+msgstr ""
+"Utiliser I<nom_composante> comme nom de composante pour l'archive amont "
+"secondaire. Définir I<nom_composante> comme nom de composante. Cela est "
+"seulement utilisé pour l'archive amont secondaire du paquet source Debian. "
+"I<nom_paquet_version.orig-nom_composante.tar.gz> est alors créé."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:184
+msgid "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> | B<default> ]"
+msgstr "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> | B<default> ]"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:186
+msgid ""
+"The default method is B<xz>. When mk-origtargz is launched in a debian "
+"source repository which format is \"1.0\" or undefined, the method switches "
+"to B<gzip>."
+msgstr ""
+"La méthode par défaut est B<xz>. Lorsque mk-origtargz est lancé dans un "
+"répertoire source debian dont le format est \"1.0\" ou non défini, la "
+"méthode devient B<gzip>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:189
+msgid "B<-C>, B<--directory> I<directory>"
+msgstr "B<-C>, B<--directory> I<répertoire>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:191
+msgid "Put the resulting file in the given directory."
+msgstr "Placer le fichier résultant dans le répertoire donné."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:193
+msgid "B<--unzipopt> I<options>"
+msgstr "B<--unzipopt> I<options>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:195
+msgid ""
+"Add the extra options to use with the B<unzip> command such as B<-a>, B<-"
+"aa>, and B<-b>."
+msgstr ""
+"Ajouter des options supplémentaires à utiliser avec la commande B<unzip> "
+"telles que B<-a>, B<-aa> et B<-b>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:212
+msgid "B<uscan>(1), B<uupdate>(1)"
+msgstr "B<uscan>(1), B<uupdate>(1)"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:216
+msgid ""
+"B<mk-origtargz> and this manpage have been written by Joachim Breitner "
+"<I<nomeata@debian.org>>."
+msgstr ""
+"B<mk-origtargz> et cette page de manuel ont été écrits par Joachim Breitner "
+"<I<nomeata@debian.org>>."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:5
+msgid "namecheck - Check project names are not already taken."
+msgstr "namecheck - Vérifier la disponibilité des noms de projet."
+
+#. type: =head1
+#: ../scripts/namecheck.pl:7
+msgid "ABOUT"
+msgstr "À propos de"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:9
+msgid ""
+"This is a simple tool to automate the testing of project names at the most "
+"common Open Source / Free Software hosting environments."
+msgstr ""
+"Cet outil permet d'automatiser la vérification des noms de projet présents "
+"dans les environnements d'hébergement de logiciel libres les plus utilisés."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:12
+msgid ""
+"Each new project requires a name, and those names are ideally unique. To "
+"come up with names is hard, and testing to ensure they're not already in use "
+"is time-consuming - unless you have a tool such as this one."
+msgstr ""
+"Chaque nouveau projet a besoin d'un nom, qui devrait être unique. Il est "
+"difficile de trouver des noms, et tester si ces noms ne sont pas déjà pris "
+"prend beaucoup de temps, à moins de disposer d'un outil comme celui-ci."
+
+#. type: =head1
+#: ../scripts/namecheck.pl:16
+msgid "CUSTOMIZATION"
+msgstr "PERSONNALISATION"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:18
+msgid ""
+"The script, as is, contains a list of sites, and patterns, to test against."
+msgstr "Ce script contient déjà une liste de sites et de motifs à vérifier."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:20
+msgid ""
+"If those patterns aren't sufficient then you may create your own additions "
+"and add them to the script. If you wish to have your own version of the "
+"patterns you may save them into the file ~/.namecheckrc"
+msgstr ""
+"Si ces motifs ne sont pas suffisants, vous pouvez créer les vôtres et les "
+"ajouter au script. Si vous souhaitez avoir votre propre version de motifs, "
+"enregistrez-les dans un fichier ~/.namecheckrc"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:26
+msgid "Steve -- http://www.steve.org.uk/"
+msgstr "Steve -- http://www.steve.org.uk/"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:32
+msgid "Copyright (c) 2008 by Steve Kemp. All rights reserved."
+msgstr "Copyright (c) 2008 par Steve Kemp. Tous droits réservés."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:34
+msgid ""
+"This module is free software; you can redistribute it and/or modify it under "
+"the same terms as Perl itself."
+msgstr ""
+"Ce module est un logiciel libre ; vous pouvez le redistribuer et/ou le "
+"modifier sous les mêmes termes que Perl lui-même."
+
+#. type: TH
+#: ../scripts/nmudiff.1:1
+#, no-wrap
+msgid "NMUDIFF"
+msgstr "NMUDIFF"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:4
+msgid "nmudiff - email an NMU diff to the Debian BTS"
+msgstr ""
+"nmudiff - Envoyer un courrier contenant le correctif d'une NMU vers le BTS "
+"Debian"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:6
+msgid "B<nmudiff> [I<options>]"
+msgstr "B<nmudiff> [I<options>]"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:9
+msgid ""
+"B<nmudiff> is the tool to be used while preparing a Non-Maintainer Upload "
+"(NMU) to notify the maintainer about the work being done."
+msgstr ""
+"B<nmudiff> est un outil à utiliser lorsqu'on prépare un Non-Mainteneur envoi "
+"(NMU) pour notifier au mainteneur qu'un travail est en cours."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:19
+msgid ""
+"B<nmudiff> should be run in the source tree of the package being NMUed, "
+"after the NMU is built. It assumes that the source packages (specifically, "
+"the I<.dsc> and any corresponding I<tar> and I<diff> files) for both the "
+"previous version of the package and the newly built NMU version are in the "
+"parent directory. It then uses B<debdiff> to generate a diff between the "
+"previous version and the current NMU, and either runs mutt or an editor "
+"(using B<sensible-editor>) so that the mail message (including the diff) can "
+"be examined and modified; once you exit the editor the diff will be mailed "
+"to the Debian BTS."
+msgstr ""
+"B<nmudiff> devrait être lancé dans l'arbre des sources du paquet devant être "
+"NMU-é, après que la NMU a été construite. Cela suppose que le source (c'est-"
+"à-dire le fichier I<.dsc> et éventuellement les fichiers I<tar> et I<diff> "
+"correspondants) pour la version précédente du paquet et pour la version "
+"nouvellement construite soient dans le répertoire parent. B<debdiff> est "
+"ensuite utilisé pour créer un différentiel de la NMU, puis B<mutt> ou un "
+"éditeur (choisi par B<sensible-editor>) est utilisé pour lancer un éditeur "
+"de sorte que le message (y compris le différentiel) puisse être examiné et "
+"modifié ; une fois que vous avez quitté l'éditeur, le différentiel est "
+"envoyé par courrier électronique au système de gestion de bogues (\"BTS\") "
+"Debian."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:24
+msgid ""
+"The default behaviour is that if exactly one bug is closed by this NMU, then "
+"that bug will be mailed, otherwise a new bug will be submitted. This "
+"behaviour may be changed by command line options and configuration file "
+"options."
+msgstr ""
+"Si un seul bogue est corrigé par la NMU, le comportement par défaut est "
+"d'envoyer le message à ce bogue ; sinon, un nouveau bogue est soumis. Ce "
+"comportement par défaut peut être modifié en ligne de commande ou par le "
+"fichier de configuration."
+
+#. type: TP
+#: ../scripts/nmudiff.1:25
+#, no-wrap
+msgid "B<--new>"
+msgstr "B<--new>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:29
+msgid ""
+"Instead of mailing the bug reports which are to be closed by this NMU, a new "
+"bug report is submitted directly to the BTS."
+msgstr ""
+"Soumettre un nouveau rapport de bogue au BTS au lieu d'envoyer un message "
+"aux bogues corrigés par la NMU."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:34
+msgid ""
+"Send the bug report to all of the bugs which are being closed by this NMU, "
+"rather than opening a new bug report. This option has no effect if no bugs "
+"are being closed by this NMU."
+msgstr ""
+"Envoyer le rapport de bogue à tous les bogues corrigés dans cette NMU, au "
+"lieu d'ouvrir un nouveau bogue. Cette option n'a aucun effet si la NMU ne "
+"corrige aucun bogue."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:39
+msgid ""
+"Use B<mutt>(1) (or B<neomutt>(1)) for editing and sending the message to the "
+"BTS (default behaviour). This can be controlled using a configuration file "
+"option (see below)."
+msgstr ""
+"Utiliser B<mutt>(1) (ou B<neomutt>(1)) pour modifier et envoyer le message "
+"au BTS (comportement par défaut). Cela peut être choisi par une option du "
+"fichier de configuration (voir plus bas)."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:44
+msgid ""
+"Use B<sensible-editor>(1) to edit the message and then mail it directly "
+"using I</usr/bin/sendmail>. This can be controlled using a configuration "
+"file option (see below)."
+msgstr ""
+"Utiliser B<sensible-editor>(1) pour modifier le message, puis l'envoyer "
+"directement avec I</usr/sbin/sendmail>. Cela peut être choisi par une option "
+"du fichier de configuration (voir plus bas)."
+
+#. type: TP
+#: ../scripts/nmudiff.1:44
+#, no-wrap
+msgid "B<--sendmail> I<SENDMAILCMD>"
+msgstr "B<--sendmail> I<COMMANDE_D_ENVOI_DE_MESSAGE>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:54
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will be interpreted by the shell. Default is I</usr/sbin/sendmail>. "
+"The B<-t> option will be automatically added if the command is I</usr/sbin/"
+"sendmail> or I</usr/sbin/exim*>. For other mailers, if they require a B<-t> "
+"option, this must be included in the I<SENDMAILCMD>, for example: B<--"
+"sendmail=\"/usr/sbin/mymailer -t\">. This can also be set using the "
+"devscripts configuration files; see below."
+msgstr ""
+"Indiquer la commande d'envoi de message. La commande sera séparée à chaque "
+"espace, et interprétée par le shell. La valeur par défaut est I</usr/sbin/"
+"sendmail>. L'option B<-t> est ajoutée automatiquement si la commande est I</"
+"usr/sbin/sendmail> ou I</usr/sbin/exim*>. Pour les autres logiciels d'envoi "
+"de message, l'option B<-t> doit être incluse explicitement dans "
+"I<COMMANDE_D_ENVOI_DE_MESSAGE> si elle est nécessaire, par exemple B<--"
+"sendmail=\"/usr/sbin/monutilitaire -t\">. La commande peut également être "
+"indiquée dans les fichiers de configuration de B<devscripts> comme précisé "
+"ci-après."
+
+#. type: TP
+#: ../scripts/nmudiff.1:54
+#, no-wrap
+msgid "B<--from> I<EMAIL>"
+msgstr "B<--from> I<EMAIL>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:62
+msgid ""
+"If using the B<sendmail> (B<--no-mutt>) option, then the email to the BTS "
+"will be sent using the name and address in the environment variables "
+"B<DEBEMAIL> and B<DEBFULLNAME>. If these are not set, then the variables "
+"B<EMAIL> and B<NAME> will be used instead. These can be overridden using "
+"the B<--from> option. The program will not work in this case if an email "
+"address cannot be determined."
+msgstr ""
+"Si la commande B<sendmail> est utilisée (option B<--no-mutt>), le message "
+"envoyé au BTS utilisera le nom et l'adresse contenus dans les variables "
+"d'environnement B<DEBEMAIL> et B<DEBFULLNAME>. Si elles n'existent pas, les "
+"variables B<EMAIL> et B<NAME> seront utilisées. L'option B<--from> remplace "
+"ces variables d'environnement. Le programme ne fonctionnera pas s'il est "
+"impossible de déterminer une adresse électronique."
+
+#. type: TP
+#: ../scripts/nmudiff.1:62
+#, no-wrap
+msgid "B<--delay> I<DELAY>"
+msgstr "B<--delay> I<DÉLAI>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:69
+msgid ""
+"Indicate in the generated mail that the NMU has been uploaded to the DELAYED "
+"queue, with a delay of I<DELAY> days. The default value is I<XX> which adds "
+"a placeholder to the e-mail. A value of B<0> indicates that the upload has "
+"not been sent to a delayed queue. This can also be set using the devscripts "
+"configuration files; see below."
+msgstr ""
+"Indiquer dans le message créé que la NMU a été envoyée dans la file "
+"d'attente différée, avec un délai de I<DÉLAI> jours. La valeur par défaut "
+"est I<XX>, ce qui laisse un emplacement pour mettre le délai dans le "
+"message. Une valeur de B<0> indique que le paquet n'a pas été envoyé dans la "
+"file d'attente différée. Les fichiers de configuration de B<devscripts> "
+"peuvent aussi être utilisés comme précisé ci-après."
+
+#. type: TP
+#: ../scripts/nmudiff.1:69
+#, no-wrap
+msgid "B<--no-delay>, B<--nodelay>"
+msgstr "B<--no-delay>, B<--nodelay>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:72
+msgid "Equivalent to B<--delay 0>."
+msgstr "Équivalent à B<--delay 0>."
+
+#. type: TP
+#: ../scripts/nmudiff.1:76
+#, no-wrap
+msgid "B<--no-pending>, B<--nopending>"
+msgstr "B<--no-pending>, B<--nopending>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:79
+msgid "Do not add the I<pending> tag."
+msgstr "Ne pas ajouter le tag I<pending>."
+
+#. type: TP
+#: ../scripts/nmudiff.1:79
+#, no-wrap
+msgid "B<--non-dd>, B<--nondd>"
+msgstr "B<--non-dd>, B<--nondd>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:82
+msgid "Mention in the email that you require sponsorship."
+msgstr "Indique dans le courriel qu'un sponsorship est demandé."
+
+#. type: TP
+#: ../scripts/nmudiff.1:82
+#, no-wrap
+msgid "B<--template> I<TEMPLATEFILE>"
+msgstr "B<--template> I<fichier_modèle>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:86
+msgid ""
+"Use content of TEMPLATEFILE for message body instead of default template. "
+"If TEMPLATEFILE does not exist, default template is applied."
+msgstr ""
+"Utiliser le contenu du fichier modèle pour le corps du message à la place du "
+"modèle par défaut. Si le fichier modèle n'existe pas, le modèle par défaut "
+"est utilisé."
+
+#. type: TP
+#: ../scripts/nmudiff.1:98
+#, no-wrap
+msgid "B<NMUDIFF_DELAY>"
+msgstr "B<NMUDIFF_DELAY>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:104
+msgid ""
+"If this is set to a number, e-mails generated by B<nmudiff> will by default "
+"mention an upload to the DELAYED queue, delayed for the specified number of "
+"days. The value B<0> indicates that the DELAYED queue has not been used."
+msgstr ""
+"Lorsque qu'un nombre est configuré dans cette variable, les courriers créés "
+"par B<nmudiff> indiqueront par défaut que l'envoi a été effectué dans la "
+"file d'attente différée, avec un délai égal au nombre de jours indiqués. La "
+"valeur B<0> indique que la file d'attente différée n'a pas été utilisée."
+
+#. type: TP
+#: ../scripts/nmudiff.1:104
+#, no-wrap
+msgid "B<NMUDIFF_MUTT>"
+msgstr "B<NMUDIFF_MUTT>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:109
+msgid ""
+"Can be I<yes> (default) or I<no>, and specifies whether to use B<mutt> (or "
+"B<neomutt>)to compose and send the message or not, as described above."
+msgstr ""
+"Peut être I<yes> (par défaut) ou I<no>, et indique s'il faut utiliser "
+"B<mutt> (ou B<neomutt>) pour écrire et envoyer le message ou non, tel que "
+"décrit ci-dessus."
+
+#. type: TP
+#: ../scripts/nmudiff.1:109
+#, no-wrap
+msgid "B<NMUDIFF_NEWREPORT>"
+msgstr "B<NMUDIFF_NEWREPORT>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:117
+msgid ""
+"This option controls whether a new bug report is made, or whether the diff "
+"is sent to the bugs closed by this NMU. Can be I<maybe> (default), which "
+"sends to the existing bug reports if exactly one bug is being closed; "
+"I<yes>, which always creates a new report, or I<no>, which always sends to "
+"the reports of the bugs being closed (unless no bugs are being closed, in "
+"which case a new report is always made)."
+msgstr ""
+"Cette option permet de contrôler si un nouveau rapport de bogue est soumis, "
+"ou si le diff est envoyé aux bogues corrigés par la NMU. Peut être l'une des "
+"valeurs I<maybe> (par défaut) qui envoie au bogue fermé par la NMU s'il est "
+"unique, I<yes> qui crée systématiquement un nouveau rapport de bogue, ou "
+"I<no> qui envoie toujours aux bogues corrigés (sauf si aucun bogue n'est "
+"corrigé, auquel cas un nouveau rapport est toujours créé)."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:121
+msgid ""
+"If this is set, specifies a B<sendmail> command to use instead of I</usr/"
+"sbin/sendmail>. Same as the B<--sendmail> command line option."
+msgstr ""
+"Si cela est défini, cela indique la commande d'envoi de message à utiliser à "
+"la place de I</usr/sbin/sendmail>. Équivaut à l'option de ligne de commande "
+"B<--sendmail>."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:125
+msgid "B<debdiff>(1), B<sensible-editor>(1), B<devscripts.conf>(5)"
+msgstr "B<debdiff>(1), B<sensible-editor>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:129
+msgid ""
+"B<nmudiff> was written and is copyright 2006 by Steinar H. Gunderson and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt>. The software may be "
+"freely redistributed under the terms and conditions of the GNU General "
+"Public License, version 2."
+msgstr ""
+"B<nmudiff> a été écrit et est copyright 2006 Steinar H. Gunderson, et "
+"modifié par Julian Gilbey E<lt>jdg@debian.orgE<gt>. Ce logiciel peut être "
+"redistribué suivant les termes de la licence publique générale GNU, "
+"version 2."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:22
+msgid ""
+"origtargz - fetch the orig tarball of a Debian package from various sources, "
+"and unpack it"
+msgstr ""
+"origtargz - Récupérer l'archive amont d'un paquet Debian depuis divers "
+"sources, et la dépaqueter"
+
+#. type: =item
+#: ../scripts/origtargz.pl:28
+msgid "B<origtargz> [I<OPTIONS>] [B<--unpack>[=B<no>|B<once>|B<yes>]]"
+msgstr "B<origtargz> [I<options>] [B<--unpack>[=B<no>|B<once>|B<yes>]]"
+
+#. type: =item
+#: ../scripts/origtargz.pl:30
+msgid "B<origtargz> B<--help>"
+msgstr "B<origtargz> B<--help>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:36
+msgid ""
+"B<origtargz> downloads the orig tarball of a Debian package, and also "
+"unpacks it into the current directory, if it just contains a F<debian> "
+"directory. The main use for B<origtargz> is with debian-dir-only repository "
+"checkouts, but it is useful as a general tarball download wrapper. The "
+"version number for the tarball to be downloaded is determined from F<debian/"
+"changelog>. It should be invoked from the top level directory of an unpacked "
+"Debian source package."
+msgstr ""
+"B<origtargz> télécharge l'archive amont (orig) d'un paquet Debian et la "
+"dépaquette aussi dans le répertoire actuel s'il contient seulement un "
+"répertoire F<debian>. L'utilisation principale d'B<origtargz> est avec les "
+"dépôts ne contenant que le répertoire I<debian>, mais il est aussi utile "
+"comme enveloppe générale de téléchargement d'archive. Le numéro de version "
+"de l'archive à télécharger est déterminé par F<debian/changelog>. Il devrait "
+"être appelé depuis le répertoire de premier niveau d'un paquet source Debian "
+"non dépaqueté."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:43
+msgid "Various download locations are tried:"
+msgstr "Plusieurs emplacements de téléchargement sont essayés :"
+
+#. type: =item
+#: ../scripts/origtargz.pl:47 ../scripts/origtargz.pl:51
+#: ../scripts/origtargz.pl:55 ../scripts/origtargz.pl:59
+#: ../scripts/origtargz.pl:63 ../scripts/origtargz.pl:67
+msgid "*"
+msgstr "*"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:49
+msgid "First, an existing file is looked for."
+msgstr "D'abord, un fichier existant est recherché."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:53
+msgid "Directories given with B<--path> are searched."
+msgstr "Les répertoires donnés avec B<--path> sont explorés ."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:57
+msgid "B<pristine-tar> is tried."
+msgstr "B<pristine-tar> est essayé ."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:61
+msgid "B<pristine-lfs> is tried."
+msgstr "B<pristine-tar> est essayé."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:65
+msgid ""
+"B<apt-get source> is tried when B<apt-cache showsrc> reports a matching "
+"version."
+msgstr ""
+"B<apt-get source> est essayé si B<apt-cache showsrc> indique une version "
+"correspondante."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:69
+msgid "Finally, B<uscan --download --download-current-version> is tried."
+msgstr "Enfin, B<uscan --download --download-current-version> est essayé."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:73
+msgid ""
+"When asked to unpack the orig tarball, B<origtargz> will remove all files "
+"and directories from the current directory, except the debian directory, and "
+"the VCS repository directories. I<Note that this will drop all non-committed "
+"changes> for the patch system in use (e.g. source format \"3.0 (quilt)\"), "
+"and will even remove all patches from the package when no patch system is in "
+"use (the original \"1.0\" source format). Some VCS control files outside "
+"F<debian/> preserved (F<.bzr-builddeb>, F<.bzr-ignore>, F<.gitignore>, F<."
+"hgignore>), if stored in VCS."
+msgstr ""
+"Lorsqu'une archive amont doit être dépaquetée, B<origtargz> retirera tous "
+"les fichiers et répertoires du répertoire actuel sauf le répertoire "
+"F<debian> et les répertoires du dépôt de système de contrôle de versions. "
+"I<Remarquez que toutes les modifications non prises en compte (committed) "
+"seront effacées> du système de correctifs utilisé (par exemple au format "
+"source \"3.0 (quilt)\") et que tous les correctifs seront retirés du paquet "
+"si aucun système n'est utilisé (pour le format source d'origine \"1.0\"). "
+"Certains fichiers du système de contrôle de versions, hors de F<debian/>, "
+"sont conservés (F<.bzr-builddeb>, F<.bzr-ignore>, F<.gitignore> ou F<."
+"hgignore>) s'ils sont gardés dans le système de contrôle de versions."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:82
+msgid ""
+"The default behavior is to unpack the orig tarball if the current directory "
+"is empty except for a F<debian> directory and the VCS files mentioned above."
+msgstr ""
+"Le comportement par défaut est de dépaqueter l'archive amont si le "
+"répertoire courant est vide sauf le répertoire F<debian> et les fichiers du "
+"système de contrôle de versions mentionnés plus haut."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:87
+msgid ""
+"Despite B<origtargz> being called \"targz\", it will work with any "
+"compression scheme used for the tarball."
+msgstr ""
+"Malgré son nom, B<origtargz> fonctionne avec n'importe quel format de "
+"compression utilisé pour l'archive amont."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:90
+msgid ""
+"A similar tool to unpack orig tarballs is B<uupdate>(1). B<uupdate> creates "
+"a new working directory, unpacks the tarball, and applies the Debian F<.diff."
+"gz> changes. In contrast, B<origtargz> uses the current directory, keeping "
+"VCS metadata."
+msgstr ""
+"Un outil similaire pour dépaqueter les archives amont est B<uupdate>(1). "
+"B<uupdate> crée un nouveau répertoire de travail, dépaquette l'archive et "
+"applique les modifications Debian F<.diff.gz>. De son côté, B<origtargz> "
+"utilise le répertoire actuel, en gardant les métadonnées du système de "
+"gestion de versions."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:95
+msgid ""
+"For Debian package repositories that keep the full upstream source, other "
+"tools should be used to upgrade the repository from the new tarball. See "
+"B<gbp-import-orig>(1) and B<svn-upgrade>(1) for examples. B<origtargz> is "
+"still useful for downloading the current tarball."
+msgstr ""
+"Pour les dépôts de paquet Debian gardant l'intégralité des sources amont, "
+"d'autres outils devraient être utilisés pour mettre à niveau le dépôt à "
+"partir de l'archive amont. Consultez par exemple B<gbp-import-orig>(1) et "
+"B<svn-upgrade>(1). B<origtargz> est toujours utile pour télécharger "
+"l'archive amont actuelle."
+
+#. type: =item
+#: ../scripts/origtargz.pl:104
+msgid "B<-p>, B<--path> I<directory>"
+msgstr "B<-p>, B<--path> I<répertoire>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:106
+msgid ""
+"Add I<directory> to the list of locations to search for an existing "
+"tarball. When found, a hardlink is created if possible, otherwise a symlink."
+msgstr ""
+"Ajouter I<répertoire> à la liste des emplacements pour chercher une archive "
+"amont. Une fois trouvé, un lien matériel est créé si possible, un lien "
+"symbolique sinon."
+
+#. type: =item
+#: ../scripts/origtargz.pl:109
+msgid "B<-u>, B<--unpack>[=B<no>|B<once>|B<yes>]"
+msgstr "B<-u>, B<--unpack>[=B<no>|B<once>|B<yes>]"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:111
+msgid ""
+"Unpack the downloaded orig tarball to the current directory, replacing "
+"everything except the debian directory. Existing files are removed, except "
+"for F<debian/> and VCS files. Preserved are: F<.bzr>, F<.bzrignore>, F<.bzr-"
+"builddeb>, F<.git>, F<.gitignore>, F<.hg>, F<.hgignore>, F<_darcs> and F<."
+"svn>."
+msgstr ""
+"Dépaqueter l'archive amont téléchargée dans le répertoire actuel, en "
+"remplaçant tout sauf le répertoire I<debian>. Les fichiers existants sont "
+"supprimés, sauf le répertoire F<debian> et les fichiers du système de "
+"contrôle de versions. Sont gardés : F<.bzr>, F<.bzrignore>, F<.bzr-"
+"builddeb>, F<.git>, F<.gitignore>, F<.hg>, F<.hgignore>, F<_darcs> et F<."
+"svn>."
+
+#. type: =item
+#: ../scripts/origtargz.pl:119
+msgid "B<no>"
+msgstr "B<no>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:121
+msgid "Do not unpack the orig tarball."
+msgstr "Ne pas dépaqueter l'archive amont."
+
+#. type: =item
+#: ../scripts/origtargz.pl:123
+msgid "B<once> (default when B<--unpack> is not used)"
+msgstr "B<once> (par défaut si B<--unpack> n'est pas utilisé)"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:125
+msgid ""
+"If the current directory contains only a F<debian> directory (and possibly "
+"some dotfiles), unpack the orig tarball. This is the default behavior."
+msgstr ""
+"Si le répertoire actuel ne contient qu'un répertoire F<debian> (et "
+"éventuellement quelques fichiers F<.*>), dépaqueter l'archive amont. C'est "
+"le comportement par défaut."
+
+#. type: =item
+#: ../scripts/origtargz.pl:128
+msgid "B<yes> (default for B<--unpack> without argument)"
+msgstr "B<yes> (par défaut si B<--unpack> est utilisé sans paramètre)"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:130
+msgid "Always unpack the orig tarball."
+msgstr "Toujours dépaqueter l'archive amont."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:136
+msgid "Alias for B<--unpack=no>."
+msgstr "Identique à B<--unpack=no>."
+
+#. type: =item
+#: ../scripts/origtargz.pl:138
+msgid "B<-t>, B<--tar-only>"
+msgstr "B<-t>, B<--tar-only>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:140
+msgid ""
+"When using B<apt-get source>, pass B<--tar-only> to it. The default is to "
+"download the full source package including F<.dsc> and F<.diff.gz> or F<."
+"debian.tar.gz> components so B<debdiff> can be used to diff the last upload "
+"to the next one. With B<--tar-only>, only download the F<.orig.tar.*> file."
+msgstr ""
+"En utilisant B<apt-get source>, lui passer B<--tar-only>. L'action par "
+"défaut est de télécharger le paquet source complet, y compris les composants "
+"F<.dsc> et F<.diff.gz> ou F<.debian.tar.gz> pour que B<debdiff> puisse être "
+"utilisé pour comparer le dernier envoi au prochain. Avec B<--tar-only>, seul "
+"le fichier F<.orig.tar.*> est téléchargé."
+
+#. type: =item
+#: ../scripts/origtargz.pl:145
+msgid "B<--clean>"
+msgstr "B<--clean>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:147
+msgid ""
+"Remove existing files as with B<--unpack>. Note that like B<--unpack>, this "
+"will remove upstream files even if they are stored in VCS."
+msgstr ""
+"Supprimer les fichiers existants comme avec B<--unpack>. Remarquez que comme "
+"B<--unpack>, cela supprimera les fichiers amonts même s'ils sont stockés "
+"dans un système de contrôle de versions."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:164
+msgid ""
+"B<debcheckout>(1), B<gbp-import-orig>(1), B<pristine-tar>(1), B<svn-"
+"upgrade>(1), B<uupdate>(1)"
+msgstr ""
+"B<debcheckout>(1), B<gbp-import-orig>(1), B<pristine-tar>(1), B<svn-"
+"upgrade>(1), B<uupdate>(1)"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:168
+msgid ""
+"B<origtargz> and this manpage have been written by Christoph Berg "
+"<I<myon@debian.org>>."
+msgstr ""
+"B<origtargz> et cette page de manuel ont été écrits par Christoph Berg "
+"<I<myon@debian.org>>."
+
+#. type: TH
+#: ../scripts/plotchangelog.1:1
+#, no-wrap
+msgid "PLOTCHANGELOG"
+msgstr "PLOTCHANGELOG"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:4
+msgid "plotchangelog - graph Debian changelogs"
+msgstr ""
+"plotchangelog - Représenter les modifications Debian sous forme de graphique"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:7
+msgid "B<plotchangelog> [I<options>]I< changelog >..."
+msgstr "B<plotchangelog> [I<options>] I<changelog> ..."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:17
+msgid ""
+"B<plotchangelog> is a tool to aid in visualizing a Debian I<changelog>. The "
+"changelogs are graphed with B<gnuplot>(1) , with the X axis of the graph "
+"denoting time of release and the Y axis denoting the Debian version number "
+"of the package. Each individual release of the package is represented by a "
+"point, and the points are color coded to indicate who released that version "
+"of the package. The upstream version number of the package can also be "
+"labeled on the graph."
+msgstr ""
+"B<plotchangelog> est un outil qui aide à visualiser les informations d'un "
+"fichier I<changelog>. Ces informations sont affichées graphiquement avec "
+"B<gnuplot>(1), avec sur l'axe des abscisses la date des versions, et sur "
+"l'axe des ordonnées le numéro de version Debian d'un paquet. Chaque version "
+"individuelle d'un paquet est représentée par un point, dont la couleur "
+"indique qui a fourni cette version. Le numéro de version amont peut "
+"également être affiché sur le graphique."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:21
+msgid ""
+"Alternatively, the Y axis can be configured to display the size of the "
+"changelog entry for each new version. Or it can be configured to display "
+"approximately how many bugs were fixed for each new version."
+msgstr ""
+"L'axe des ordonnées peut également être configuré de manière à indiquer la "
+"taille de l'entrée du fichier I<changelog> pour chaque nouvelle version. Il "
+"peut aussi être configuré de manière à indiquer approximativement combien de "
+"bogues ont été corrigés par chaque nouvelle version."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:24
+msgid ""
+"Note that if the package is a Debian-specific package, the entire package "
+"version will be used for the Y axis. This does not always work perfectly."
+msgstr ""
+"Remarquez que s'il s'agit d'un paquet spécifique à Debian, l'axe des Y "
+"utilisera les versions du paquet. Cela ne fonctionne pas toujours très bien."
+
+#. type: SH
+#: ../scripts/plotchangelog.1:25
+#, no-wrap
+msgid "READING THE GRAPH"
+msgstr "LECTURE DU GRAPHIQUE"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:33
+msgid ""
+"The general outline of a package's graph is typically a series of peaks, "
+"starting at 1, going up to n, and then returning abruptly to 1. The higher "
+"the peaks, the more releases the maintainer made between new upstream "
+"versions of the package. If a package is Debian-only, it's graph will just "
+"grow upwards without ever falling (although a bug in this program may cause "
+"it to fall sometimes, if the version number goes from say, 0.9 to say, 0.10 "
+"- this is interpreted wrong...)"
+msgstr ""
+"La silhouette du graphique d'un paquet est en règle générale une série de "
+"pics, démarrant à 1, allant jusqu'à n, et retournant à 1 juste après. Plus "
+"un pic est important, plus le responsable a fourni de versions du paquet "
+"pour une version amont. Pour un paquet uniquement pour Debian, son graphique "
+"sera croissant sans jamais redescendre (même si un bogue du programme peut, "
+"à cause d'une mauvaise interprétation, le faire redescendre, si la version "
+"passe par exemple de 0.9 à 0.10)."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:40
+msgid ""
+"If the graph dips below 1, someone made a NMU of the package and upgraded it "
+"to a new upstream version, thus setting the Debian version to 0. NMU's in "
+"general appear as fractional points like 1.1, 2.1, etc. A NMU can also be "
+"easily detected by looking at the points that represent which maintainer "
+"uploaded the package -- a solitary point of a different type than the points "
+"before and after it is typically a NMU."
+msgstr ""
+"Si le graphique plonge à une valeur inférieure à 1, cela signifie que "
+"quelqu'un a fait une NMU pour le paquet en même temps qu'une mise à jour "
+"vers une nouvelle version amont, ce qui place la version Debian à 0. En "
+"règle générale, les NMU apparaissent comme des nombres à virgule : 1.1, 2.1, "
+"etc. Une NMU peut également être facilement détectée en regardant sur les "
+"points quel responsable a envoyé le paquet : un point isolé d'un type "
+"différent des points précédents et suivants est souvent le signe d'une NMU."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:43
+msgid ""
+"It's also easy to tell by looking at the points when a package changes "
+"maintainers."
+msgstr ""
+"Il est également facile de trouver quand un paquet a changé de responsable "
+"en jetant un coup d'oeil aux points."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:44
+#, no-wrap
+msgid "B<-l>, B<--linecount>"
+msgstr "B<-l>, B<--linecount>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:50
+msgid ""
+"Instead of using the Debian version number as the Y axis, use the number of "
+"lines in the changelog entry for each version. Cannot be used together with "
+"B<--bugcount>."
+msgstr ""
+"Au lieu d'utiliser le numéro de version Debian pour l'axe des ordonnées, "
+"utilise le nombre de lignes de l'entrée du fichier I<changelog> pour chaque "
+"version. Cette option ne peut pas être utilisée en même temps que B<--"
+"bugcount>."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:50
+#, no-wrap
+msgid "B<-b>, B<--bugcount>"
+msgstr "B<-b>, B<--bugcount>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:57
+msgid ""
+"Instead of using the Debian version number as the Y axis, use the number of "
+"bugs that were closed by each changelog entry. Note that this number is "
+"obtained by searching for \"#dddd\" in the changelog, and so it may be "
+"inaccurate. Cannot be used together with B<--linecount>."
+msgstr ""
+"Au lieu d'utiliser le numéro de version Debian pour l'axe des ordonnées, "
+"utilise le nombre de bogues fermés par chaque entrée du fichier "
+"I<changelog>. Remarquez que ce nombre de bogues est trouvé en recherchant "
+"\"#dddd\" dans le fichier I<changelog>, et peut donc être imprécis. Cette "
+"option ne peut pas être utilisée avec B<--linecount>."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:57
+#, no-wrap
+msgid "B<-c>, B<--cumulative>"
+msgstr "B<-c>, B<--cumulative>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:65
+msgid ""
+"When used together with either B<--bugcount> or B<--linecount>, graphs the "
+"cumulative count rather than the count in each individual changelog entry."
+msgstr ""
+"Lorsqu'elle est utilisée avec les options B<--bugcount> ou B<--linecount>, "
+"effectue un décompte incrémental plutôt qu'un décompte individuel pour "
+"chaque entrée du fichier I<changelog>."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:65
+#, no-wrap
+msgid "B<-v>, B<--no-version>"
+msgstr "B<-v>, B<--no-version>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:68
+msgid ""
+"Do not show upstream version labels. Useful if the graph gets too crowded."
+msgstr ""
+"N'affiche pas les versions amont, ce qui est utile lorsque le graphique est "
+"trop chargé."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:68
+#, no-wrap
+msgid "B<-m, --no-maint>"
+msgstr "B<-m>, B<--no-maint>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:71
+msgid "Do not differentiate between different maintainers of the package."
+msgstr "Ne fait pas de différence entre les différents responsables du paquet."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:71
+#, no-wrap
+msgid "B<-s file>, B<--save=>I<file>"
+msgstr "B<-s> I<fichier>, B<--save=>I<fichier>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:75
+msgid ""
+"Save the graph to I<file> in PostScript format instead of immediately "
+"displaying it."
+msgstr ""
+"Sauver le graphe dans le I<fichier> au format PostScript, au lieu de "
+"l'afficher immédiatement."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:75
+#, no-wrap
+msgid "B<-u>, B<--urgency>"
+msgstr "B<-u>, B<--urgency>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:78
+msgid "Use larger points when displaying higher-urgency package uploads."
+msgstr ""
+"Utilise des points plus gros pour les versions ayant un niveau d'urgence "
+"plus important."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:81
+msgid ""
+"Output the gnuplot script that is fed into gnuplot (for debugging purposes)."
+msgstr "Affiche le script qui est fourni à gnuplot (pour le débogage)."
+
+# NOTE: \" manquant
+#. type: TP
+#: ../scripts/plotchangelog.1:81
+#, no-wrap
+msgid "B<-g>I<commands>, B<--gnuplot=>I<commands>"
+msgstr "B<-g>I<commandes>, B<--gnuplot=>I<commandes>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:92
+msgid ""
+"This allows you to insert B<gnuplot>(1) commands into the gnuplot script "
+"that is used to generate the graph. The commands are placed after all "
+"initialization but before the final B<plot> command. This can be used to "
+"override the default look provided by this program in arbitrary ways. You "
+"can also use things like \"set terminal png color\" to change the output "
+"file type, which is useful in conjunction with the -s option."
+msgstr ""
+"Ces options vous permettent d'insérer des commandes B<gnuplot>(1) dans le "
+"script gnuplot utilisé pour créer le graphique. Les commandes sont placées "
+"après l'initialisation, mais avant la commande B<plot> finale. Elles peuvent "
+"être utilisées pour remplacer l'apparence par défaut fournie par ce "
+"programme de façon arbitraire. Vous pouvez également utiliser quelque chose "
+"comme \"set terminal png color\" pour modifier le type du fichier de sortie, "
+"ce qui peut être utile avec l'option -s."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:95
+msgid "Show a usage summary."
+msgstr "Affiche un résumé d'aide."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:98
+msgid "Display version, author and copyright information."
+msgstr "Affiche la version, le nom de l'auteur et le copyright."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:98
+#, no-wrap
+msgid "B<--noconf>, B<--no-conf>"
+msgstr "B<--noconf>, B<--no-conf>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:101
+msgid "Do not read any configuration files (see below)."
+msgstr "Ne lit aucun fichier de configuration (voir ci-dessous)."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:101
+#, no-wrap
+msgid "I<changelog >..."
+msgstr "I<changelog> ..."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:106
+msgid ""
+"The I<changelog> files to graph. If multiple files are specified they will "
+"all be displayed on the same graph. The files may be compressed with gzip. "
+"Any text in them that is not in Debian changelog format will be ignored."
+msgstr ""
+"Le fichier I<changelog> dont on veut le graphique. Si plusieurs fichiers "
+"sont indiqués, ils seront tous affichés sur le même graphique. Les fichiers "
+"peuvent être compressés avec gzip. Tout texte n'étant pas dans le format des "
+"fichiers changelog de Debian sera ignoré."
+
+# NOTE: presque identique, var env cleaned only when files are read
+#. type: Plain text
+#: ../scripts/plotchangelog.1:113
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. The B<--no-"
+"conf> option can be used to prevent reading these files. Environment "
+"variable settings are ignored when these configuration files are read. The "
+"currently recognised variables are:"
+msgstr ""
+"Les deux fichiers de configuration I</etc/devscripts.conf> et I<~/."
+"devscripts> sont évalués dans cet ordre par un interpréteur de commandes "
+"(\"shell\") pour placer les variables de configuration. Des options de ligne "
+"de commande peuvent être utilisées pour neutraliser les paramètres des "
+"fichiers de configuration. Les paramètres des variables d'environnement sont "
+"ignorés à cette fin. Si la première option donnée en ligne de commande est "
+"B<--no-conf>, alors ces fichiers ne sont pas évalués. Les variables "
+"actuellement identifiées sont :"
+
+#. type: TP
+#: ../scripts/plotchangelog.1:113
+#, no-wrap
+msgid "B<PLOTCHANGELOG_OPTIONS>"
+msgstr "B<PLOTCHANGELOG_OPTIONS>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:118
+msgid ""
+"This is a space-separated list of options to always use, for example B<-l -"
+"b>. Do not include B<-g> or B<--gnuplot> among this list as it may be "
+"ignored; see the next variable instead."
+msgstr ""
+"Liste d'options à toujours utiliser. Les options sont séparées par des "
+"espaces. Par exemple, B<-l -b>. N'incluez pas les options B<-g> ou B<--"
+"gnuplot> dans cette liste, elles seraient ignorées ; voyez plutôt l'option "
+"suivante."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:118
+#, no-wrap
+msgid "B<PLOTCHANGELOG_GNUPLOT>"
+msgstr "B<PLOTCHANGELOG_GNUPLOT>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:124
+msgid ""
+"These are B<gnuplot> commands which will be prepended to any such commands "
+"given on the command line."
+msgstr ""
+"Ce sont les commandes B<gnuplot> qui sont utilisées avant toute commande "
+"gnuplot fournie en ligne de commande."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:127
+msgid "Joey Hess E<lt>joey@kitenet.netE<gt>"
+msgstr "Joey Hess E<lt>joey@kitenet.netE<gt>"
+
+#. type: TH
+#: ../scripts/pts-subscribe.1:1
+#, no-wrap
+msgid "PTS-SUBSCRIBE"
+msgstr "PTS-SUBSCRIBE"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:4
+msgid "pts-subscribe - time-limited subscription to the PTS"
+msgstr "pts-subscribe - Abonnement au PTS limité dans le temps"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:6
+msgid "B<pts-subscribe> [I<options>] I<package>"
+msgstr "B<pts-subscribe> [I<options>] I<paquet>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:8
+msgid "B<pts-unsubscribe> [I<options>] I<package>"
+msgstr "B<pts-unsubscribe> [I<options>] I<paquet>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:12
+msgid ""
+"B<pts-subscribe> sends a subscription request for I<package> to the Package "
+"Tracking System at pts@qa.debian.org, and cancels the subscription 30 days "
+"later."
+msgstr ""
+"B<pts-subscribe> envoie une demande d'abonnement pour le I<paquet> au "
+"système de suivi des paquets (PTS), à pts@qa.debian.org, et se désabonne "
+"30 jours plus tard."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:15
+msgid ""
+"If called as B<pts-unsubscribe>, send an unsubscription request for "
+"I<package> to the Package Tracking System."
+msgstr ""
+"Lorsque le programme est appelé en tant que B<pts-unsubscribe>, envoie une "
+"demande de suppression de l'abonnement pour le paquet I<paquet> au système "
+"de suivi des paquets."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:18
+msgid ""
+"This utility is useful if a developer has made an NMU and wants to track the "
+"package for a limited period of time."
+msgstr ""
+"Cet outil est utile si un développeur a effectué une NMU et veut suivre le "
+"paquet concerné pendant une période limitée."
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:19
+#, no-wrap
+msgid "B<--until >I<time>, B<-u> I<time>"
+msgstr "B<--until >I<date>, B<-u> I<date>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:24
+msgid ""
+"When B<at>(1) should cancel the subscription. I<time> must be specified "
+"using B<at>'s syntax. Default is 'now + 30 days'. This option will "
+"probably require quoting!"
+msgstr ""
+"Date à laquelle B<at>(1) doit envoyer la demande de désabonnement, en "
+"utilisant la syntaxe de B<at>. La valeur par défaut est \"now + 30 days\". "
+"Cette option doit probablement être protégée avec des guillemets !"
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:24
+#, no-wrap
+msgid "B<--forever>"
+msgstr "B<--forever>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:28
+msgid ""
+"Don't cancel the subscription automatically. This can also be specified as "
+"B<--until forever>."
+msgstr ""
+"Ne pas supprimer l'abonnement automatiquement. Cela peut également être "
+"indiqué avec B<--until forever>."
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:35
+#, no-wrap
+msgid "B<DEBEMAIL>, B<EMAIL>"
+msgstr "B<DEBEMAIL>, B<EMAIL>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:42
+msgid ""
+"If one of these is set (with preference give to B<DEBEMAIL>), then this will "
+"be used for the subscription address. If neither is set, then the email "
+"will be sent without a specified subscription address, and the email's From: "
+"line will be used to determine the sender's address. This will be "
+"determined by B<mail>(1)."
+msgstr ""
+"Si l'une d'elles est renseignée (avec une préférence donnée à B<DEBEMAIL>), "
+"alors elle est utilisée comme adresse d'abonnement. Si aucune n'est "
+"renseignée, alors le message va être envoyé sans adresse d'abonnement et la "
+"ligne From: du message va être utilisée pour déterminer l'adresse de "
+"l'émetteur du message. Cela va être déterminé par B<mail>(1)."
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:48
+#, no-wrap
+msgid "B<PTS_UNTIL>"
+msgstr "B<PTS_UNTIL>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:51
+msgid "Setting this is equivalent to giving a B<--until> option."
+msgstr "Équivaut à fournir une option B<--until>."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:56
+msgid ""
+"B<at>(1), information about the Package Tracking System in the Developer's "
+"Reference at https://www.debian.org/doc/developers-reference/resources."
+"html#pkg-tracking-system"
+msgstr ""
+"B<at>(1), informations à propos du système de suivi des paquets (PTS) dans "
+"la Référence du Développeur à https://www.debian.org/doc/manuals/developers-"
+"reference/resources.html#pkg-tracking-system"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:59
+msgid ""
+"This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt> based on "
+"a public domain prototype by Raphael Hertzog E<lt>hertzog@debian.orgE<gt> "
+"and is copyright under the GPL, version 2 or later."
+msgstr ""
+"Ce programme a été écrit par Julian Gilbey E<lt>jdg@debian.orgE<gt>, basé "
+"sur un prototype placé dans le domaine public par Raphaël Hertzog "
+"E<lt>hertzog@debian.orgE<gt> et est distribué sous licence GPL, version 2 ou "
+"ultérieure."
+
+#. type: TH
+#: ../scripts/rc-alert.1:1
+#, no-wrap
+msgid "RC-ALERT"
+msgstr "RC-ALERT"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:4
+msgid "rc-alert - check for installed packages with release-critical bugs"
+msgstr ""
+"rc-alert - Rechercher les paquets installés ayant des bogues empêchant leur "
+"intégration dans la prochaine distribution"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:6
+msgid ""
+"B<rc-alert> [I<inclusion options>] [B<--debtags> [I<tag>[B<,>I<tag> ...]]] "
+"[B<--popcon>] [I<package> ...]"
+msgstr ""
+"B<rc-alert> [I<options d'inclusion>] [B<--debtags> [I<étiquette>[B<,"
+">I<étiquette> ...]]] [B<--popcon>] [I<paquet> ...]"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:8
+msgid "B<rc-alert --help>|B<--version>"
+msgstr "B<rc-alert --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:12
+msgid ""
+"B<rc-alert> downloads the list of release-critical bugs from the Debian BTS "
+"webpages, and then outputs a list of packages installed on the system, or "
+"given on the command-line, which are in that list."
+msgstr ""
+"B<rc-alert> télécharge la liste des bogues empêchant l'intégration de "
+"paquets dans la prochaine distribution (\"release-critical\") depuis les "
+"pages web du BTS Debian, puis affiche l'ensemble des paquets installés sur "
+"le système, ou fournis sur la ligne de commande, qui se trouvent dans cette "
+"liste."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:17
+msgid ""
+"If the directory I<$XDG_CACHE_HOME/devscripts/rc-alert> exists or the B<--"
+"cache> option is given, then the (sizable) downloaded list will be cached, "
+"and will only be downloaded again on a second invocation if it has changed."
+msgstr ""
+"Si le répertoire I<$XDG_CACHE_HOME/devscripts/rc-alert> existe ou que "
+"l'option B<--cache> est donnée, la liste de téléchargement (qui peut être "
+"importante) sera mise en cache et sera seulement téléchargée une nouvelle "
+"fois lors d'une seconde invocation si elle a changé."
+
+#. type: TP
+#: ../scripts/rc-alert.1:18
+#, no-wrap
+msgid "B<--cache>"
+msgstr "B<--cache>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:21
+msgid ""
+"Force the creation of the I<$XDG_CACHE_HOME/devscripts/rc-alert> cache "
+"directory."
+msgstr ""
+"Force la création du répertoire de cache I<$XDG_CACHE_HOME/devscripts/rc-"
+"alert>."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:31
+msgid ""
+"It is also possible to filter the list of bugs reported based on the tags "
+"and distributions associated with the package. The filtering options are:"
+msgstr ""
+"Il est également possible de filtrer la liste des bogues en fonction des "
+"étiquettes et de la distribution associée aux paquets. Les options de "
+"filtrage sont :"
+
+#. type: TP
+#: ../scripts/rc-alert.1:31
+#, no-wrap
+msgid "B<--include-tags>, B<-f>"
+msgstr "B<--include-tags>, B<-f>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:35
+msgid ""
+"A list of tags which the bug must have, in the format used for output. For "
+"example, to include bugs tagged security or help wanted, use \"SH\"."
+msgstr ""
+"Une liste d'étiquettes que le bogue doit avoir, dans le format utilisé pour "
+"la sortie. Par exemple, pour inclure les bogues avec l'étiquette security ou "
+"help, utilisez \"SH\"."
+
+#. type: TP
+#: ../scripts/rc-alert.1:35
+#, no-wrap
+msgid "B<--include-tag-op>, B<-t>"
+msgstr "B<--include-tag-op>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:39
+msgid ""
+"If set to I<and>, a bug must have all of the tags specified by B<--include-"
+"tags>."
+msgstr ""
+"Lorsqu'elle vaut I<and>, un bogue doit avoir toutes les étiquettes indiquées "
+"par B<--include-tags>."
+
+#. type: TP
+#: ../scripts/rc-alert.1:39
+#, no-wrap
+msgid "B<--exclude-tags>"
+msgstr "B<--exclude-tags>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:43
+msgid ""
+"A list of tags which the bug must not have, in the same format as B<--"
+"include-tags>."
+msgstr ""
+"Une liste d'étiquettes que le bogue ne doit pas avoir, dans le même format "
+"que pour B<--include-tags>."
+
+#. type: TP
+#: ../scripts/rc-alert.1:43
+#, no-wrap
+msgid "B<--exclude-tag-op>"
+msgstr "B<--exclude-tag-op>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:48
+msgid ""
+"If set to I<and>, a bug must have none of the tags specified by B<--exclude-"
+"tags>. By default, the bug will be excluded if any tag matches."
+msgstr ""
+"Lorsqu'elle vaut I<and>, un bogue ne doit avoir aucune des étiquettes "
+"indiquées par B<--exclude-tags>. Par défaut un bogue sera exclu s'il a une "
+"des étiquettes."
+
+#. type: TP
+#: ../scripts/rc-alert.1:48
+#, no-wrap
+msgid "B<--include-dists>, B<-d>"
+msgstr "B<--include-dists>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:52
+msgid ""
+"A list of distributions which the bug must apply to, in the format used for "
+"output. For example, to include bugs affecting testing or unstable, use "
+"\"TU\"."
+msgstr ""
+"Une liste de distributions pour lesquelles le bogue s'applique, au format "
+"utilisé pour la sortie. Par exemple, pour inclure les bogues qui affectent "
+"testing ou unstable, utilisez \"TU\"."
+
+#. type: TP
+#: ../scripts/rc-alert.1:52
+#, no-wrap
+msgid "B<--include-dist-op>, B<-o>"
+msgstr "B<--include-dist-op>, B<-o>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:56
+msgid ""
+"If set to I<and>, a bug must apply to all of the specified distributions in "
+"order to be included."
+msgstr ""
+"Lorsqu'elle vaut I<and>, un bogue doit s'appliquer à toutes les "
+"distributions indiquées pour être sélectionné."
+
+#. type: TP
+#: ../scripts/rc-alert.1:56
+#, no-wrap
+msgid "B<--exclude-dists>"
+msgstr "B<--exclude-dists>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:60
+msgid ""
+"A list of distributions to which the bug must not apply, in the same format "
+"as B<--include-dists>."
+msgstr ""
+"Une liste de distribution pour lesquelles le bogue ne doit pas s'appliquer, "
+"dans le même format que pour B<--include-dists>."
+
+#. type: TP
+#: ../scripts/rc-alert.1:60
+#, no-wrap
+msgid "B<--exclude-dist-op>"
+msgstr "B<--exclude-dist-op>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:65
+msgid ""
+"If set to I<and>, a bug must apply to all of the specified distributions in "
+"order to be excluded. By default the bug will be excluded if it applies to "
+"any of the listed distributions."
+msgstr ""
+"Lorsqu'elle vaut I<and>, un bogue doit s'appliquer à toutes les "
+"distributions indiquées pour être exclu. Par défaut, le bogue sera exclu "
+"s'il s'applique à une des distributions listées."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:70
+msgid ""
+"It is also possible to only list bugs which have specific debtags set. Note "
+"that you need to have debtags installed and also that it's not mandatory for "
+"maintainers to set proper debtags. The produced list will thus probably be "
+"incomplete."
+msgstr ""
+"Il est également possible de ne lister que les bogues qui ont certaines "
+"étiquettes utilisateur (\"debtags\"). Remarquez que vous devez avoir "
+"installé debtags et que les étiquettes utilisateur ne sont pas "
+"nécessairement configurées comme il faut par les responsables des paquets. "
+"La liste produite sera donc probablement incomplète."
+
+#. type: TP
+#: ../scripts/rc-alert.1:70
+#, no-wrap
+msgid "B<--debtags>"
+msgstr "B<--debtags>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:75
+msgid ""
+"Match packages based on the listed tags. Each package is matched only if it "
+"has all the listed tags; in the case of multiple tags within the same facet, "
+"a package is matched if it has any of the listed tags within the facet."
+msgstr ""
+"Sélectionner les paquets en fonction des étiquettes listées. Chaque paquet "
+"est sélectionné seulement s'il a toutes les étiquettes listées ; dans le cas "
+"de plusieurs étiquettes de la même facette, un paquet est sélectionné s'il a "
+"une des étiquettes listées d'une facette."
+
+#. type: TP
+#: ../scripts/rc-alert.1:75
+#, no-wrap
+msgid "B<--debtags-database>"
+msgstr "B<--debtags-database>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:79
+msgid ""
+"Use a non-standard debtags database. The default is I</var/lib/debtags/"
+"packages-tags>."
+msgstr ""
+"Utiliser une base de données debtags non standard. La base de données par "
+"défaut est I</var/lib/debtags/packages-tags>."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:83
+msgid ""
+"Popularity-contest collects data about installation and usage of Debian "
+"packages. You can additionally sort the bugs by the popcon rank of the "
+"related packages."
+msgstr ""
+"Popularity-contest collecte des données concernant l'installation et "
+"l'utilisation des paquets Debian. Vous pouvez également trier les bogues par "
+"le rang popcon des paquets correspondants."
+
+#. type: TP
+#: ../scripts/rc-alert.1:83
+#, no-wrap
+msgid "B<--popcon>"
+msgstr "B<--popcon>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:86
+msgid "Sort bugs by the popcon rank of the package the bug belongs to."
+msgstr ""
+"Trier les bogues par le rang popcon des paquets auxquels les bogues "
+"appartiennent."
+
+#. type: TP
+#: ../scripts/rc-alert.1:86
+#, no-wrap
+msgid "B<--pc-vote>"
+msgstr "B<--pc-vote>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:92
+msgid ""
+"By default, packages are sorted according to the number of people who have "
+"the package installed. This option enables sorting by the number of people "
+"regularly using the package instead. This option has no effect in "
+"combination with --pc-local."
+msgstr ""
+"Par défaut, les paquets sont triés en fonction du nombre de personnes qui "
+"ont installé le paquet. Cette option permet de trier en fonction du nombre "
+"de personnes qui utilisent régulièrement le paquet. Cette option n'a aucun "
+"effet quand elle est combinée à --pc-local."
+
+#. type: TP
+#: ../scripts/rc-alert.1:92
+#, no-wrap
+msgid "B<--pc-local>"
+msgstr "B<--pc-local>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:96
+msgid ""
+"Instead of requesting remote data the information from the last popcon run "
+"is used (I</var/log/popularity-contest>)."
+msgstr ""
+"Au lieu de télécharger les données, utiliser les informations de la dernière "
+"exécution de popcon (I</var/log/popularity-contest>)."
+
+#. type: TP
+#: ../scripts/rc-alert.1:97
+#, no-wrap
+msgid "B<--include-dists> OS"
+msgstr "B<--include-dists> OS"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:100
+msgid "The bug must apply to at least one of oldstable or stable"
+msgstr "Le bogue doit s'appliquer à au moins oldstable ou stable"
+
+#. type: TP
+#: ../scripts/rc-alert.1:100
+#, no-wrap
+msgid "B<--include-dists> TUB< --include-dist-op> and"
+msgstr "B<--include-dists> TUB< --include-dist-op> and"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:103
+msgid "The bug must apply to both testing and unstable"
+msgstr "Le bogue doit s'appliquer à testing et unstable"
+
+#. type: TP
+#: ../scripts/rc-alert.1:103
+#, no-wrap
+msgid "B<--include-dists> OB< --include-tags> SB< --exclude-tags> +"
+msgstr "B<--include-dists> OB< --include-tags> SB< --exclude-tags> +"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:106
+msgid "The bug must apply to oldstable and be tagged security but not patch"
+msgstr ""
+"Le bogue doit s'appliquer à oldstable et doit avoir l'étiquette security, "
+"sans l'étiquette patch"
+
+#. type: TP
+#: ../scripts/rc-alert.1:106
+#, no-wrap
+msgid "B<--exclude-dists> SOTB< --include-tags> R"
+msgstr "B<--exclude-dists> SOTB< --include-tags> R"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:110
+msgid ""
+"The bug must apply to only unstable or experimental (or both) and be tagged "
+"unreproducible"
+msgstr ""
+"Le bogue ne doit s'appliquer qu'à unstable ou experimental (ou les deux) et "
+"doit avoir l'étiquette unreproducible"
+
+#. type: TP
+#: ../scripts/rc-alert.1:110
+#, no-wrap
+msgid "B<--debtags> implemented-in::perl,role::plugin,implemented-in::python"
+msgstr "B<--debtags> implemented-in::perl,role::plugin,implemented-in::python"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:115
+msgid ""
+"The bug must apply to packages matching the specified debtags, i.e. the "
+"match will only include packages that have the 'role::plugin' tag and that "
+"have either of the tags 'implemented-in::perl' or 'implemented-in::python'."
+msgstr ""
+"Le bogue doit s'appliquer aux paquets qui correspondent aux étiquettes "
+"debtags indiquées, c'est-à-dire que la sélection ne comprendra que des "
+"paquets qui ont l'étiquette \"role::plugin\" et qui ont soit l'étiquette "
+"\"implemented-in::perl\", soit l'étiquette \"implemented-in::python\"."
+
+#. type: TP
+#: ../scripts/rc-alert.1:115
+#, no-wrap
+msgid "B<--popcon> B<--pc-local>"
+msgstr "B<--popcon> B<--pc-local>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:119
+msgid ""
+"Read I</var/log/popularity-contest> and sort bugs by your personal popcon "
+"ranking (which is basically the atime of your packages' binaries)."
+msgstr ""
+"Lire I</var/log/popularity-contest> et trier les bogues par votre classement "
+"popcon (qui correspond grossièrement à l'heure d'accès des binaires de vos "
+"paquets)."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:121
+msgid "It is not possible to say \"does not apply only to unstable\""
+msgstr ""
+"Il n'est pas possible de demander \"ne s'applique pas uniquement à unstable\""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:125
+msgid "B<debtags(1)> B<popbugs(1)> B<popularity-contest(8)>"
+msgstr "B<debtags>(1) B<popbugs>(1) B<popularity-contest>(8)"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:129
+msgid ""
+"B<rc-alert> was written by Anthony DeRobertis and modified by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> and Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt> for the devscripts package. Debtags and popcon functionality was "
+"added by Jan Hauke Rahm E<lt>info@jhr-online.deE<gt>."
+msgstr ""
+"B<rc-alert> a été écrit par Anthony DeRobertis et a été modifié par Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt> et Adam D. Barratt E<lt>adam@adam-barratt."
+"org.ukE<gt> pour le paquet devscripts. Les fonctionnalités debtags et popcon "
+"ont été ajoutées par Jan Hauke Rahm E<lt>info@jhr-online.deE<gt>."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:262
+msgid "rmadison -- Remotely query the Debian archive database about packages"
+msgstr ""
+"rmadison - Interroger à distance la base de données de l'archive Debian"
+
+#. type: =item
+#: ../scripts/rmadison.pl:268
+msgid "B<rmadison> [I<OPTIONS>] I<PACKAGE> ..."
+msgstr "B<rmadison> [I<OPTIONS>] I<PAQUET> ..."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:274
+msgid ""
+"B<dak ls> queries the Debian archive database (\"projectb\") and displays "
+"which package version is registered per architecture/component/suite. The "
+"CGI at B<https://qa.debian.org/madison.php> provides that service without "
+"requiring SSH access to ftp-master.debian.org or the mirror on mirror.ftp-"
+"master.debian.org. This script, B<rmadison>, is a command line frontend to "
+"this CGI."
+msgstr ""
+"L'outil B<dak ls> interroge la base d'archive Debian (\"projectb\") et "
+"affiche les versions de paquet enregistrées par architecture/composante/"
+"distribution. Le script CGI à B<https://qa.debian.org/madison.php> met ce "
+"service à disposition, de sorte qu'un accès SSH à ftp-master.debian.org ou "
+"au miroir mirror.ftp-master.debian.org n'est pas requis. Ce script, "
+"B<rmadison>, est un frontal en ligne de commande pour ce script CGI."
+
+#. type: =item
+#: ../scripts/rmadison.pl:285
+msgid "B<-a>, B<--architecture=>I<ARCH>"
+msgstr "B<-a>, B<--architecture=>I<ARCH>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:287
+msgid "only show info for ARCH(s)"
+msgstr "n'afficher les informations que pour ARCH(s)"
+
+#. type: =item
+#: ../scripts/rmadison.pl:289
+msgid "B<-b>, B<--binary-type=>I<TYPE>"
+msgstr "B<-b>, B<--binary-type=>I<TYPE>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:291
+msgid "only show info for binary TYPE"
+msgstr "n'afficher les informations que pour les binaires TYPE"
+
+#. type: =item
+#: ../scripts/rmadison.pl:293
+msgid "B<-c>, B<--component=>I<COMPONENT>"
+msgstr "B<-c>, B<--component=>I<COMPOSANTE>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:295
+msgid "only show info for COMPONENT(s)"
+msgstr "n'afficher les informations que pour la ou les COMPOSANT(s)"
+
+#. type: =item
+#: ../scripts/rmadison.pl:297
+msgid "B<-g>, B<--greaterorequal>"
+msgstr "B<-g>, B<--greaterorequal>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:299
+msgid "show buildd 'dep-wait pkg >= {highest version}' info"
+msgstr ""
+"afficher les informations de démon d'empaquetage \"dep-wait pkg >= {highest "
+"version}\""
+
+#. type: =item
+#: ../scripts/rmadison.pl:301
+msgid "B<-G>, B<--greaterthan>"
+msgstr "B<-G>, B<--greaterthan>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:303
+msgid "show buildd 'dep-wait pkg >> {highest version}' info"
+msgstr ""
+"afficher les informations de démon d'empaquetage \"dep-wait pkg >> {highest "
+"version}\""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:307
+msgid "show this help and exit"
+msgstr "afficher cette aide et quitter"
+
+#. type: =item
+#: ../scripts/rmadison.pl:309
+msgid "B<-s>, B<--suite=>I<SUITE>"
+msgstr "B<-s>, B<--suite=>I<DISTRIBUTION>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:311
+msgid "only show info for this suite"
+msgstr "n'afficher des informations que pour cette distribution"
+
+#. type: =item
+#: ../scripts/rmadison.pl:313
+msgid "B<-r>, B<--regex>"
+msgstr "B<-r>, B<--regex>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:315
+msgid "treat PACKAGE as a regex"
+msgstr "traiter I<PAQUET> comme une expression rationnelle"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:317
+msgid ""
+"B<Note:> Since B<-r> can easily DoS the database (\"-r .\"), this option is "
+"not supported by the CGI on qa.debian.org and most other installations."
+msgstr ""
+"B<Remarque :> Étant donné que l'option B<-r> peut facilement créer un déni "
+"de service sur la base de données (\"B<-r> B<.>\"), cette option n'est pas "
+"prise en charge par le script CGI sur qa.debian.org ni sur la plupart des "
+"autres installations."
+
+#. type: =item
+#: ../scripts/rmadison.pl:320
+msgid "B<-S>, B<--source-and-binary>"
+msgstr "B<-S>, B<--source-and-binary>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:322
+msgid "show info for the binary children of source pkgs"
+msgstr "afficher les informations pour les binaires issus des paquets source"
+
+#. type: =item
+#: ../scripts/rmadison.pl:324
+msgid "B<-t>, B<--time>"
+msgstr "B<-t>, B<--time>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:326
+msgid "show projectb snapshot and reload time (not supported by all archives)"
+msgstr ""
+"afficher le temps utilisé pour faire l'image \"projectb\" et le temps de "
+"chargement (pas géré par toutes les archives)"
+
+#. type: =item
+#: ../scripts/rmadison.pl:328
+msgid "B<-u>, B<--url=>I<URL>[B<,>I<URL> ...]"
+msgstr "B<-u>, B<--url=>I<URL>[B<,>I<URL> ...]"
+
+#. type: verbatim
+#: ../scripts/rmadison.pl:330
+#, no-wrap
+msgid ""
+"use I<URL> for the query. Supported shorthands are\n"
+" B<debian> https://api.ftp-master.debian.org/madison\n"
+" B<new> https://api.ftp-master.debian.org/madison?s=new\n"
+" B<qa> https://qa.debian.org/madison.php\n"
+" B<ubuntu> https://people.canonical.com/~ubuntu-archive/madison.cgi\n"
+" B<udd> https://qa.debian.org/cgi-bin/madison.cgi\n"
+" B<archive> https://qa.debian.org/cgi-bin/madison.cgi?table=archived\n"
+" B<ports> https://qa.debian.org/cgi-bin/madison.cgi?table=ports\n"
+"\n"
+msgstr ""
+"utiliser I<URL> pour la requête. Les raccourcis gérés sont\n"
+" B<debian> https://api.ftp-master.debian.org/madison\n"
+" B<new> https://api.ftp-master.debian.org/madison?s=new\n"
+" B<qa> https://qa.debian.org/madison.php\n"
+" B<ubuntu> https://people.canonical.com/~ubuntu-archive/madison.cgi\n"
+" B<udd> https://qa.debian.org/cgi-bin/madison.cgi\n"
+" B<archive> https://qa.debian.org/cgi-bin/madison.cgi?table=archived\n"
+" B<ports> https://qa.debian.org/cgi-bin/madison.cgi?table=ports\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:339
+msgid ""
+"See the B<RMADISON_URL_MAP_> variable below for a method to add new "
+"shorthands."
+msgstr ""
+"Consultez la variable B<RMADISON_URL_MAP_> ci-après pour une méthode d'ajout "
+"de raccourcis."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:344
+msgid "show version and exit"
+msgstr "afficher la version et quitter"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:348
+msgid "don't read the devscripts configuration files"
+msgstr "ne pas lire les fichiers de configuration de devscripts"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:352
+msgid ""
+"ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g. --"
+"architecture=amd64,i386"
+msgstr ""
+"ARCH, COMPOSANTE et DISTRIBUTION peuvent être des listes dont les éléments "
+"sont séparés par des virgules (ou des espaces), par exemple --"
+"architecture=amd64,i386"
+
+#. type: =item
+#: ../scripts/rmadison.pl:365
+msgid "B<RMADISON_URL_MAP_>I<SHORTHAND>=I<URL>"
+msgstr "B<RMADISON_URL_MAP_>I<RACCOURCIS>=I<URL>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:367
+msgid ""
+"Add an entry to the set of shorthand URLs listed above. I<SHORTHAND> should "
+"be replaced with the shorthand form to be used to refer to I<URL>."
+msgstr ""
+"Ajouter une entrée pour configurer les URL de raccourcis listées ci-dessus. "
+"I<RACCOURCIS> doit être remplacé par le raccourci à utilisé pour faire "
+"référence à I<URL>."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:370
+msgid ""
+"Multiple shorthand entries may be specified by using multiple "
+"B<RMADISON_URL_MAP_*> variables."
+msgstr ""
+"Plusieurs raccourcis peuvent être définis en utilisant plusieurs variables "
+"B<RMADISON_URL_MAP_*>."
+
+#. type: =item
+#: ../scripts/rmadison.pl:373
+msgid "B<RMADISON_DEFAULT_URL>=I<URL>"
+msgstr "B<RMADISON_DEFAULT_URL>=I<URL>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:375
+msgid ""
+"Set the default URL to use unless overridden by a command line option. For "
+"Debian this defaults to debian. For Ubuntu this defaults to ubuntu."
+msgstr ""
+"Définir l'URL par défaut à utiliser, à moins qu'une autre soit fournie par "
+"une option en ligne de commande. Pour Debian, c’est \"debian\" par défaut. "
+"Pour Ubuntu, c’est \"ubuntu\" par défaut."
+
+#. type: =item
+#: ../scripts/rmadison.pl:378
+msgid "B<RMADISON_ARCHITECTURE>=I<ARCH>"
+msgstr "B<RMADISON_ARCHITECTURE>=I<ARCHITECTURE>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:380
+msgid ""
+"Set the default architecture to use unless overridden by a command line "
+"option. To run an unrestricted query when B<RMADISON_ARCHITECTURE> is set, "
+"use B<--architecture='*'>."
+msgstr ""
+"Définir l'architecture par défaut à utiliser, à moins qu'une autre soit "
+"fournie par une option en ligne de commande. Pour exécuter une requête non "
+"autorisée quand B<RMADISON_ARCHITECTURE> est définie, utiliser B<--"
+"architecture='*'>."
+
+#. type: =item
+#: ../scripts/rmadison.pl:384
+msgid "B<RMADISON_SSL_CA_FILE>=I<FILE>"
+msgstr "B<RMADISON_SSL_CA_FILE>=I<FICHIER>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:386
+msgid ""
+"Use the specified CA file instead of the default CA bundle for curl/wget, "
+"passed as --cacert to curl, and as --ca-certificate to wget."
+msgstr ""
+"Utiliser le fichier d'autorité de certification spécifié, à la place du "
+"paquet d'autorité de certification par défaut pour curl ou wget, passé par "
+"l'option B<--cacert> à curl et B<--ca-certificate> à wget."
+
+#. type: =item
+#: ../scripts/rmadison.pl:389
+msgid "B<RMADISON_SSL_CA_PATH>=I<PATH>"
+msgstr "B<RMADISON_SSL_CA_PATH>=I<CHEMIN>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:391
+msgid ""
+"Use the specified CA directory instead of the default CA bundle for curl/"
+"wget, passed as --capath to curl, and as --ca-directory to wget."
+msgstr ""
+"Utiliser le répertoire d'autorité de certification spécifié, à la place du "
+"paquet d'autorité de certification par défaut pour curl ou wget, passé avec "
+"l'option B<--capath> à curl et B<--ca-directory> à wget."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:398
+msgid "B<dak ls> was formerly called B<madison>."
+msgstr "B<dak ls> s'appelait précédemment B<madison>."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:400
+msgid ""
+"The protocol used by rmadison is fairly simple, the CGI accepts query the "
+"parameters a, b, c, g, G, r, s, S, t, and package. The parameter text is "
+"passed to enable plain-text output."
+msgstr ""
+"Le protocole utilisé par rmadison est assez simple, le script CGI accepte en "
+"entrée les paramètres a, b, c, g, G, r, s, S, t et package. Le paramètre "
+"text est utilisé pour permettre une sortie textuelle."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:406
+msgid "B<dak>(1), B<madison-lite>(1)"
+msgstr "B<dak>(1), B<madison-lite>(1)"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:410
+msgid ""
+"rmadison and https://qa.debian.org/madison.php were written by Christoph "
+"Berg <myon@debian.org>. dak was written by James Troup <james@nocrew.org>, "
+"Anthony Towns <ajt@debian.org>, and others."
+msgstr ""
+"rmadison et https://qa.debian.org/madison.php ont été écrits par Christoph "
+"Berg <myon@debian.org>. dak a été écrit par James Troup <james@nocrew.org>, "
+"Anthony Towns <ajt@debian.org> et d'autres."
+
+#. type: textblock
+#: ../scripts/sadt.pod:19
+msgid "sadt - simple DEP-8 test runner"
+msgstr "sadt - Simple exécution de test DEP-8"
+
+#. type: textblock
+#: ../scripts/sadt.pod:23
+msgid "B<sadt> [I<options>] [I<test-name>...]"
+msgstr "B<sadt> [I<options>] [I<nom-test> ...]"
+
+#. type: textblock
+#: ../scripts/sadt.pod:27
+msgid ""
+"B<sadt> is a simple implementation of DEP-8 (“automatic as-installed package "
+"testing”) test runner."
+msgstr ""
+"B<sadt> permet simplement d’exécuter des tests DEP-8 (\"test automatique de "
+"paquet tel qu’il est installé\")."
+
+#. type: textblock
+#: ../scripts/sadt.pod:30
+msgid ""
+"It is your responsibility to satisfy tests' dependencies. B<sadt> won't "
+"attempt to install any missing packages. If a test's dependencies cannot be "
+"satisfied by packages that are currently installed, the test will be skipped."
+msgstr ""
+"Les dépendances à satisfaire pour les tests sont de votre responsabilité. "
+"B<sadt> n’essayera pas d’installer les paquets manquants. Si des dépendances "
+"d’un test ne peuvent pas être satisfaites par les paquets actuellement "
+"installés, le test sera ignoré."
+
+#. type: textblock
+#: ../scripts/sadt.pod:34
+msgid ""
+"B<sadt> won't build the package even if a test declares the B<build-needed> "
+"restriction. Instead, such a test will be skipped. However, you can build "
+"the package manually, and then tell B<sadt> to assume that the package is "
+"already built using the B<-b>/B<--built-source-tree>."
+msgstr ""
+"B<sadt> ne construira pas le paquet même si un test déclare la restriction "
+"B<build-needed>. À la place, ce genre de test sera ignoré. Cependant, vous "
+"pouvez construire le paquet vous-même et indiquer ensuite à B<sadt> de "
+"considérer que le paquet est déjà construit à l’aide de l’option B<-b> ou "
+"B<--built-source-tree>."
+
+#. type: textblock
+#: ../scripts/sadt.pod:39
+msgid ""
+"B<sadt> doesn't implement any virtualisation arrangements, therefore it "
+"skips tests that declare the B<breaks-testbed> restriction."
+msgstr ""
+"B<sadt> ne permet pas de gérer la virtualisation, par conséquent les tests "
+"qui déclarent la restriction B<breaks-testbed> sont ignorés."
+
+#. type: textblock
+#: ../scripts/sadt.pod:48
+msgid "Make the output more verbose."
+msgstr "Rendre la sortie plus bavarde."
+
+#. type: =item
+#: ../scripts/sadt.pod:50
+msgid "B<-b>, B<--built-source-tree>"
+msgstr "B<-b>, B<--built-source-tree>"
+
+#. type: textblock
+#: ../scripts/sadt.pod:52
+msgid ""
+"Assume that the source tree is already built. This is equivalent to B<--"
+"ignore-restriction=build-needed>."
+msgstr ""
+"Supposer que l’arborescence source est déjà construite. C’est équivalent à "
+"B<--ignore-restriction=build-needed>."
+
+#. type: =item
+#: ../scripts/sadt.pod:55
+msgid "B<--run-autodep8>, B<--no-run-autodep8>"
+msgstr "B<--run-autodep8>, B<--no-run-autodep8>"
+
+#. type: textblock
+#: ../scripts/sadt.pod:57
+msgid ""
+"Control whether to run autodep8(1) to determine the tests to run. By "
+"default, autodep8 will be run."
+msgstr ""
+"Contrôler s'il faut lancer autodep8(1) pour déterminer les tests à lancer. "
+"Par défaut, autodep8 sera lancé."
+
+#. type: =item
+#: ../scripts/sadt.pod:60
+msgid "B<--ignore-restriction>=I<restriction>"
+msgstr "B<--ignore-restriction=>I<restriction>"
+
+#. type: textblock
+#: ../scripts/sadt.pod:62
+msgid "Don't skip tests that declare the I<restriction>."
+msgstr "Ne pas ignorer les tests qui déclarent la I<restriction>."
+
+#. type: =head1
+#: ../scripts/sadt.pod:70
+msgid "CONFORMING TO"
+msgstr "CONFORMITÉ"
+
+#. type: textblock
+#: ../scripts/sadt.pod:72
+msgid "README.package-tests shipped by autopkgtest 2.7.2"
+msgstr "README.package-tests distribué dans autopkgtest 2.7.2"
+
+#. type: textblock
+#: ../scripts/sadt.pod:76
+msgid "B<adt-run>(1)"
+msgstr "B<adt-run>(1)"
+
+#. type: textblock
+#: ../scripts/salsa.pl:5
+msgid "salsa - tool to manipulate salsa repositories and group members"
+msgstr "salsa - outil pour gérer les dépôts salsa et les membres des groupes"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:9
+#, no-wrap
+msgid ""
+" # salsa <command> <args>\n"
+" salsa whoami\n"
+" salsa search_project devscripts\n"
+" salsa search_project qa/qa\n"
+" salsa search_group js-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_user yadd\n"
+" salsa push_repo . --group js-team --kgb --irc devscripts --tagpending\n"
+" salsa update_repo node-mongodb --group js-team --disable-kgb --desc \\\n"
+" --desc-pattern \"Package %p\"\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+" salsa update_safe --all --desc --desc-pattern \"Debian package %p\" \\\n"
+" --group js-team\n"
+" salsa checkout node-mongodb --group js-team\n"
+" salsa checkout js-team/node-mongodb\n"
+" salsa add_user developer foobar --group-id 2665\n"
+" salsa update_user maintainer foobar --group js-team\n"
+" salsa del_user foobar --group js-team\n"
+" salsa last_ci_status js-team/nodejs\n"
+" salsa pipelines js-team/nodejs\n"
+"\n"
+msgstr ""
+" # salsa <command> <args>\n"
+" salsa whoami\n"
+" salsa search_project devscripts\n"
+" salsa search_project qa/qa\n"
+" salsa search_group js-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_user yadd\n"
+" salsa push_repo . --group js-team --kgb --irc devscripts --tagpending\n"
+" salsa update_repo node-mongodb --group js-team --disable-kgb --desc \\\n"
+" --desc-pattern \"Package %p\"\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+" salsa update_safe --all --desc --desc-pattern \"Debian package %p\" \\\n"
+" --group js-team\n"
+" salsa checkout node-mongodb --group js-team\n"
+" salsa checkout js-team/node-mongodb\n"
+" salsa add_user developer foobar --group-id 2665\n"
+" salsa update_user maintainer foobar --group js-team\n"
+" salsa del_user foobar --group js-team\n"
+" salsa last_ci_status js-team/nodejs\n"
+" salsa pipelines js-team/nodejs\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:32
+msgid ""
+"B<salsa> is designed to create and configure repositories on L<https://salsa."
+"debian.org> and manage users of groups."
+msgstr ""
+"B<salsa> a été conçu pour créer et configurer les dépôts de L<https://salsa."
+"debian.org> et gérer les utilisateurs et groupes."
+
+#. type: textblock
+#: ../scripts/salsa.pl:35
+msgid ""
+"A Salsa token is required, except for search* commands, and must be set in "
+"command line I<(see below)>, or in your configuration file I<(~/."
+"devscripts)>:"
+msgstr ""
+"Un jeton Salsa est nécessaire, excepté pour les commandes \"search*\", et "
+"doit être inséré dans la ligne de commande I<(voir ci-dessus)>, ou dans le "
+"fichier de configuration I<(~/.devscripts)> :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:38
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=abcdefghi\n"
+"\n"
+msgstr ""
+" SALSA_TOKEN=abcdefghi\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:40 ../scripts/salsa.pl:44 ../scripts/salsa.pl:509
+#: ../scripts/salsa.pl:538
+msgid "or"
+msgstr "ou"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:42
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=`cat ~/.token`\n"
+"\n"
+msgstr ""
+" SALSA_TOKEN=`cat ~/.token`\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:46
+#, no-wrap
+msgid ""
+" SALSA_TOKEN_FILE=~/.dpt.conf\n"
+"\n"
+msgstr ""
+" SALSA_TOKEN_FILE=~/.dpt.conf\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:48
+msgid ""
+"If you choose to link another file using SALSA_TOKEN_FILE, it must contain a "
+"line with one of (no differences):"
+msgstr ""
+"Si on choisit de lier un autre fichier en utilisant SALSA_TOKEN_FILE, il "
+"doit contenir un ligne avec au choix (aucune différence) :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:51
+#, no-wrap
+msgid ""
+" <anything>SALSA_PRIVATE_TOKEN=xxxx\n"
+" <anything>SALSA_TOKEN=xxxx\n"
+"\n"
+msgstr ""
+" <anything>SALSA_PRIVATE_TOKEN=xxxx\n"
+" <anything>SALSA_TOKEN=xxxx\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:54
+msgid ""
+"This allows for example to use dpt(1) configuration file (~/.dpt.conf) which "
+"contains:"
+msgstr ""
+"Ceci permet par exemple d'utiliser le fichier de configuration de dpt(1) (~/."
+"dpt.conf) qui contient :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:57
+#, no-wrap
+msgid ""
+" DPT_SALSA_PRIVATE_TOKEN=abcdefghi\n"
+"\n"
+msgstr ""
+" DPT_SALSA_PRIVATE_TOKEN=abcdefghi\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/salsa.pl:61
+msgid "Managing users and groups"
+msgstr "Gérer les utilisateurs et les groupes"
+
+#. type: =item
+#: ../scripts/salsa.pl:65
+msgid "B<join>"
+msgstr "B<join>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:67
+msgid "Request access to a group."
+msgstr "Demander l'accès à un groupe."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:69
+#, no-wrap
+msgid ""
+" salsa join js-team\n"
+" salsa join --group js-team\n"
+" salsa join --group-id 1234\n"
+"\n"
+msgstr ""
+" salsa join js-team\n"
+" salsa join --group js-team\n"
+" salsa join --group-id 1234\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:73
+msgid "B<add_user>"
+msgstr "B<add_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:75
+msgid "Add a user to a group."
+msgstr "Ajouter un utilisateur à un groupe."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:77
+#, no-wrap
+msgid ""
+" salsa --group js-group add_user guest foouser\n"
+" salsa --group-id 1234 add_user guest foouser\n"
+" salsa --group-id 1234 add_user maintainer 1245\n"
+"\n"
+msgstr ""
+" salsa --group js-group add_user guest foouser\n"
+" salsa --group-id 1234 add_user guest foouser\n"
+" salsa --group-id 1234 add_user maintainer 1245\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:81 ../scripts/salsa.pl:125
+msgid ""
+"First argument is the GitLab's access levels: guest, reporter, developer, "
+"maintainer, owner."
+msgstr ""
+"Le premier argument est le niveau d'accès GitLab : guest, reporter, "
+"developer, maintainer, owner."
+
+#. type: =item
+#: ../scripts/salsa.pl:84
+msgid "B<del_user>"
+msgstr "B<del_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:86
+msgid "Remove a user from a group"
+msgstr "Retire un utilisateur d'une équipe"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:88
+#, no-wrap
+msgid ""
+" salsa --group js-team del_user foouser\n"
+" salsa --group-id=1234 del_user foouser\n"
+"\n"
+msgstr ""
+" salsa --group js-team del_user foouser\n"
+" salsa --group-id=1234 del_user foouser\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:91
+msgid "B<list_groups>"
+msgstr "B<list_groups>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:93
+msgid ""
+"List sub groups of current one if group is set, groups of current user else."
+msgstr ""
+"Liste les groupes subordonnés si un groupe est indiqué, les groupes de "
+"l'utilisateur courant sinon."
+
+#. type: =item
+#: ../scripts/salsa.pl:96
+msgid "B<group>"
+msgstr "B<group>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:98
+msgid "Show group members."
+msgstr "Montre les membres d'un groupe."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:100
+#, no-wrap
+msgid ""
+" salsa --group js-team group\n"
+" salsa --group-id 1234 group\n"
+"\n"
+msgstr ""
+" salsa --group js-team group\n"
+" salsa --group-id 1234 group\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:103
+msgid "B<search_group>"
+msgstr "B<search_group>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:105
+msgid ""
+"Search for a group using given string. Shows group id and other information."
+msgstr ""
+"Cherche un groupe en utilisant la chaîne indiquée. Montre l'id du groupe et "
+"d'autres informations."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:108
+#, no-wrap
+msgid ""
+" salsa search_group perl-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_group 2666\n"
+"\n"
+msgstr ""
+" salsa search_group perl-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_group 2666\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:112
+msgid "B<search_user>"
+msgstr "B<search_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:114
+msgid ""
+"Search for a user using given string. Shows user id and other information."
+msgstr ""
+"Cherche un utilisateur en utilisant la chaîne indiquée. Montre l'id de "
+"l'utilisateur et d'autres informations."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:116
+#, no-wrap
+msgid ""
+" salsa search_user yadd\n"
+"\n"
+msgstr ""
+" salsa search_user yadd\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:118
+msgid "B<update_user>"
+msgstr "B<update_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:120
+msgid "Update user role in a group."
+msgstr "Met à jour le rôle dans un groupe."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:122
+#, no-wrap
+msgid ""
+" salsa --group-id 1234 update_user guest foouser\n"
+" salsa --group js-team update_user maintainer 1245\n"
+"\n"
+msgstr ""
+" salsa --group-id 1234 update_user guest foouser\n"
+" salsa --group js-team update_user maintainer 1245\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:128
+msgid "B<whoami>"
+msgstr "B<whoami>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:130
+msgid "Gives information on the token owner"
+msgstr "Affiche les informations du propriétaire du jeton"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:132
+#, no-wrap
+msgid ""
+" salsa whoami\n"
+"\n"
+msgstr ""
+" salsa whoami\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/salsa.pl:136
+msgid "Managing repositories"
+msgstr "Gérer les dépôts"
+
+#. type: textblock
+#: ../scripts/salsa.pl:138
+msgid ""
+"One of C<--group>, C<--group-id>, C<--user> or C<--user-id> is required to "
+"manage repositories. If both are set, salsa warns and only C<--user>/C<--"
+"user-id> is used. If none is given, salsa uses current user id I<(token "
+"owner)>."
+msgstr ""
+"Une seule option parmi C<--group>, C<--group-id>, C<--user> et C<--user-id> "
+"est nécessaire pour gérer les répertoires. Si les 2 sont indiquées, salsa "
+"avertit et utilise seulement C<--user>/C<--user-id>. Si aucune n'est "
+"indiquée, salsa utilise l'id du propriétaire du jeton."
+
+#. type: =item
+#: ../scripts/salsa.pl:145
+msgid "B<check_repo>"
+msgstr "B<check_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:147
+msgid ""
+"Verify that repo(s) are well configured. It works exactly like "
+"B<update_repo> except that it does not modify anything but just lists "
+"projects not well configured with found errors."
+msgstr ""
+"Vérifie que le(s) dépot(s) est/sont correctement configuré(s). Fonctionne "
+"exactement comme B<update_repo> si ce n'est qu'il ne modifie rien mais liste "
+"simplement les projets mal configurés avec les erreurs trouvées."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:151
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts check_repo test\n"
+" salsa --group js-team check_repo --all\n"
+" salsa --group js-team --rename-head check_repo test1 test2 test3\n"
+"\n"
+msgstr ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts check_repo test\n"
+" salsa --group js-team check_repo --all\n"
+" salsa --group js-team --rename-head check_repo test1 test2 test3\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:155
+msgid "B<checkout> or B<co>"
+msgstr "B<checkout> or B<co>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:157
+msgid ""
+"Clone repo in current dir. If directory already exists, update local repo."
+msgstr ""
+"Duplique (clone) le dépôt dans le répertoire courant. Si le répertoire de "
+"destination existe, met à jour le dépôt local."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:160
+#, no-wrap
+msgid ""
+" salsa --user yadd co devscripts\n"
+" salsa --group js-team co node-mongodb\n"
+" salsa co js-team/node-mongodb\n"
+"\n"
+msgstr ""
+" salsa --user yadd co devscripts\n"
+" salsa --group js-team co node-mongodb\n"
+" salsa co js-team/node-mongodb\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:164
+msgid ""
+"You can clone more than one repository or all repositories of a group or a "
+"user:"
+msgstr ""
+"Il est possible de dupliquer plus d'un dépôt ou tous les dépôts d'un groupe "
+"ou d'un utilisateur :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:167
+#, no-wrap
+msgid ""
+" salsa --user yadd co devscripts autodep8\n"
+" salsa co yadd/devscripts js-team/npm\n"
+" salsa --group js-team co --all # All js-team active repos\n"
+" salsa co --all-archived # All your repos including archived\n"
+"\n"
+msgstr ""
+" salsa --user yadd co devscripts autodep8\n"
+" salsa co yadd/devscripts js-team/npm\n"
+" salsa --group js-team co --all # All js-team active repos\n"
+" salsa co --all-archived # All your repos including archived\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:172
+msgid "B<create_repo>"
+msgstr "B<create_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:174
+msgid ""
+"Create public empty project. If C<--group>/C<--group-id> is set, project is "
+"created in group directory, else in user directory."
+msgstr ""
+"Crée un projet public vide. Si C<--group>/C<--group-id> est utilisé, le "
+"projet est créé dans le répertoire du groupe, sinon dans celui de "
+"l'utilisateur."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:177
+#, no-wrap
+msgid ""
+" salsa --user yadd create_repo test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts create_repo test\n"
+"\n"
+msgstr ""
+" salsa --user yadd create_repo test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts create_repo test\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:180
+msgid "B<del_repo>"
+msgstr "B<del_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:182
+msgid "Delete a repository."
+msgstr "Supprimer un dépôt."
+
+#. type: =item
+#: ../scripts/salsa.pl:184
+msgid "B<fork>"
+msgstr "B<fork>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:186
+msgid ""
+"Forks a project in group/user repository and set \"upstream\" to original "
+"project. Example:"
+msgstr ""
+"Duplique (fork) un projet dans le répertoire du groupe/utilisateur et insère "
+"une cible git \"upstream\" pointant sur le projet d'origine. Exemple :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:189
+#, no-wrap
+msgid ""
+" $ salsa fork js-team/node-mongodb --verbose\n"
+" ...\n"
+" salsa.pl info: node-mongodb ready in node-mongodb/\n"
+" $ cd node-mongodb\n"
+" $ git remote --verbose show\n"
+" origin git@salsa.debian.org:me/node-mongodb (fetch)\n"
+" origin git@salsa.debian.org:me/node-mongodb (push)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (fetch)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (push)\n"
+"\n"
+msgstr ""
+" $ salsa fork js-team/node-mongodb --verbose\n"
+" ...\n"
+" salsa.pl info: node-mongodb ready in node-mongodb/\n"
+" $ cd node-mongodb\n"
+" $ git remote --verbose show\n"
+" origin git@salsa.debian.org:me/node-mongodb (fetch)\n"
+" origin git@salsa.debian.org:me/node-mongodb (push)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (fetch)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (push)\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:199
+msgid "For a group:"
+msgstr "Pour un groupe :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:201
+#, no-wrap
+msgid ""
+" salsa fork --group js-team user/node-foo\n"
+"\n"
+msgstr ""
+" salsa fork --group js-team user/node-foo\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:203
+msgid "B<forks>"
+msgstr "B<forks>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:205
+msgid "List forks of project(s)."
+msgstr "Liste les duplications (forks) du/des projet(s)."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:207
+#, no-wrap
+msgid ""
+" salsa forks qa/qa debian/devscripts\n"
+"\n"
+msgstr ""
+" salsa forks qa/qa debian/devscripts\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:209 ../scripts/salsa.pl:320
+msgid ""
+"Project can be set using full path or using B<--group>/B<--group-id> or B<--"
+"user>/B<--user-id>, else it is searched in current user namespace."
+msgstr ""
+"Le projet peut être indiqué en utilisant le chemin complet ou B<--group>/B<--"
+"group-id> ou encore B<--user>/B<--user-id> ; sinon il est recherché dans "
+"l'espace de l'utilisateur."
+
+#. type: =item
+#: ../scripts/salsa.pl:212
+msgid "B<push>"
+msgstr "B<push>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:214
+msgid ""
+"Push relevant packaging refs to origin Git remote. To be run from packaging "
+"working directory."
+msgstr ""
+"Poussez les références pertinentes du paquet vers le dépôt Git \"origin\". À "
+"exécuter à partir du répertoire de travail d'empaquetage."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:217
+#, no-wrap
+msgid ""
+" salsa push\n"
+"\n"
+msgstr ""
+" salsa push\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:219
+msgid ""
+"It pushes the following refs to the configured remote for the debian-branch "
+"or, falling back, to the \"origin\" remote:"
+msgstr ""
+"Il pousse les références suivantes vers le dépôt amont configuré pour la "
+"branche debian-branch ou, à défaut, vers le dépôt \"origin\" :"
+
+#. type: =item
+#: ../scripts/salsa.pl:224
+msgid "\"master\" branch (or whatever is set to debian-branch in gbp.conf)"
+msgstr ""
+"branche \"master\" (ou celle indiqué dans debian-branch du fichier gbp.conf)"
+
+#. type: =item
+#: ../scripts/salsa.pl:226
+msgid "\"upstream\" branch (or whatever is set to upstream-branch in gbp.conf)"
+msgstr ""
+"branche \"upstream\" (ou celle indiqué dans upstream-branch du fichier gbp."
+"conf)"
+
+#. type: =item
+#: ../scripts/salsa.pl:228
+msgid "\"pristine-tar\" branch"
+msgstr "Branche \"pristine-tar\""
+
+#. type: =item
+#: ../scripts/salsa.pl:230
+msgid "tags named \"debian/*\" (or whatever is set to debian-tag in gbp.conf)"
+msgstr ""
+"les tags nommés \"debian/*\" (ou suivant ce qui est indiqué dans debian-tag "
+"du fichier gbp.conf)"
+
+#. type: =item
+#: ../scripts/salsa.pl:232
+msgid ""
+"tags named \"upstream/*\" (or whatever is set to upstream-tag in gbp.conf)"
+msgstr ""
+"les tags nommés \"upstream/*\" (ou suivant ce qui est indiqué dans upstream-"
+"tag di fichier gbp.conf)"
+
+#. type: =item
+#: ../scripts/salsa.pl:234
+msgid "all tags, if the package's source format is \"3.0 (native)\""
+msgstr "tous les tags si le format source du paquet est \"3.0 (native)\""
+
+#. type: =item
+#: ../scripts/salsa.pl:238
+msgid "B<ls> or B<list_repos>"
+msgstr "B<ls> or B<list_repos>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:240
+msgid ""
+"Shows projects owned by user or group. If second argument exists, search "
+"only matching projects"
+msgstr ""
+"Montre les projets propriété de l'utilisateur ou du groupe. Si un second "
+"argument est donné, restreint la recherche aux projets correspondants"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:243
+#, no-wrap
+msgid ""
+" salsa --group js-team list_repos\n"
+" salsa --user yadd list_repos foo*\n"
+"\n"
+msgstr ""
+" salsa --group js-team list_repos\n"
+" salsa --user yadd list_repos foo*\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:246
+msgid "B<last_ci_status> or B<ci>"
+msgstr "B<last_ci_status> or B<ci>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:248
+msgid ""
+"Displays last continuous integration result. Use B<--verbose> to see URL of "
+"pipeline when result isn't B<success>. Unless B<--no-fail> is set, B<salsa "
+"last_ci_status> will stop on first \"failed\" status."
+msgstr ""
+"Affiche le dernier résultat de l'intégration continue. Utiliser B<--verbose> "
+"pour afficher l'URL du résultat lorsque le résultat est différent de "
+"B<success>. À moins que l'option B<--no-fail> ne soit choisie, B<salsa "
+"last_ci_status> s'arrêtera au premier statut \"failed\" trouvé."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:252
+#, no-wrap
+msgid ""
+" salsa --group js-team last_ci_status --all --no-fail\n"
+" salsa --user yadd last_ci_status foo\n"
+" salsa last_ci_status js-team/nodejs\n"
+"\n"
+msgstr ""
+" salsa --group js-team last_ci_status --all --no-fail\n"
+" salsa --user yadd last_ci_status foo\n"
+" salsa last_ci_status js-team/nodejs\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:256
+msgid ""
+"This commands returns the number of \"failed\" status found. \"success\" "
+"entries are displayed using STDOUT while other are displayed I<(with "
+"details)> using STDERR. Then you can easily see only failures using:"
+msgstr ""
+"Cette commande retourne le nombre de statuts \"failed\" trouvés. Les entrées "
+"\"success\" sont affichées en utilisant la sortie standard STDOUT et les "
+"autres sont affichées I<(avec les détails)> en utilisant STDERR? Ainsi on "
+"peut facilement ne voir que les échecs en utilisant :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:260
+#, no-wrap
+msgid ""
+" salsa --group js-team last_ci_status --all --no-fail >/dev/null\n"
+"\n"
+msgstr ""
+" salsa --group js-team last_ci_status --all --no-fail >/dev/null\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:262
+msgid "B<pipeline>, B<schedule>"
+msgstr "B<pipeline>, B<schedule>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:264
+msgid "Control pipeline schedule"
+msgstr "Contrôle la planification d'un pipeline"
+
+#. type: =item
+#: ../scripts/salsa.pl:266
+msgid "B<pipelines>, B<schedules>"
+msgstr "B<pipelines>, B<schedules>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:268
+msgid "Lists current pipeline schedule items."
+msgstr "Répertorie les éléments de planification du pipeline actuel."
+
+#. type: textblock
+#: ../scripts/salsa.pl:270
+msgid "You can use B<--no-fail> and B<--all> options here."
+msgstr "Les options <--no-fail> et B<--all> sont utilisables ici."
+
+#. type: =item
+#: ../scripts/salsa.pl:272
+msgid "B<merge_request>, B<mr>"
+msgstr "B<merge_request>, B<mr>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:274
+msgid "Creates a merge request."
+msgstr "Crée une \"merge request\"."
+
+#. type: textblock
+#: ../scripts/salsa.pl:276
+msgid ""
+"Suppose you created a fork using B<salsa fork>, modify some things in a new "
+"branch using one commit and want to propose it to original project I<(branch "
+"\"master\")>. You just have to launch this in source directory:"
+msgstr ""
+"Supposons qu'un dépôt ait été créé avec B<salsa fork>, qu'une modification "
+"en un seul commit ait été fait et que l'on souhaite la proposer au projet "
+"originel I<(branche \"master\")>. Il suffit de lancer ceci dans le "
+"répertoire source :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:280
+#, no-wrap
+msgid ""
+" salsa mr\n"
+"\n"
+msgstr ""
+" salsa mr\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:282
+msgid "Other example:"
+msgstr "Autres exemples :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:284
+#, no-wrap
+msgid ""
+" salsa mr --mr-dst-project debian/foo --mr-dst-branch debian/master\n"
+"\n"
+msgstr ""
+" salsa mr --mr-dst-project debian/foo --mr-dst-branch debian/master\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:286
+msgid "or simply"
+msgstr "ou simplement"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:288
+#, no-wrap
+msgid ""
+" salsa mr debian/foo debian/master\n"
+"\n"
+msgstr ""
+" salsa mr debian/foo debian/master\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:290
+msgid ""
+"Note that unless destination project has been set using command line, "
+"B<salsa merge_request> will search it in the following order:"
+msgstr ""
+"Noter qu'à moins que le projet de destination ait été explicitement indiqué "
+"dans la ligne de commande, B<salsa merge_request> le cherche dans l'ordre "
+"suivant :"
+
+#. type: =item
+#: ../scripts/salsa.pl:295
+msgid "using GitLab API: salsa will detect from where this project was forked"
+msgstr ""
+"en utilisant l'API Gitlab: salsa cherche à détecter d'où ce projet a été "
+"dupliqué"
+
+#. type: =item
+#: ../scripts/salsa.pl:297
+msgid "using \"upstream\" origin"
+msgstr "en utilisant la source amont \"upstream\""
+
+#. type: =item
+#: ../scripts/salsa.pl:299
+msgid "else salsa will use source project as destination project"
+msgstr "sinon en utilisant le projet lui-même comme destination"
+
+#. type: textblock
+#: ../scripts/salsa.pl:303
+msgid ""
+"To force salsa to use source project as destination project, you can use "
+"\"same\":"
+msgstr ""
+"Pour forcer salsa à utiliser le projet source comme destination, on peut "
+"utiliser \"same\" :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:306
+#, no-wrap
+msgid ""
+" salsa mr --mr-dst-project same\n"
+" # or\n"
+" salsa mr same\n"
+"\n"
+msgstr ""
+" salsa mr --mr-dst-project same\n"
+" # or\n"
+" salsa mr same\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:310
+msgid ""
+"New merge request will be created using last commit title and description."
+msgstr ""
+"Une nouvelle \"merge request\" sera créée en utilisant le titre et la "
+"description du dernier commit."
+
+#. type: textblock
+#: ../scripts/salsa.pl:312
+msgid "See B<--mr-*> options for more."
+msgstr "See B<--mr-*> options for more."
+
+#. type: =item
+#: ../scripts/salsa.pl:314
+msgid "B<merge_requests>, B<mrs>"
+msgstr "B<merge_requests>, B<mrs>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:316
+msgid "List opened merge requests for project(s)"
+msgstr "Liste les \"merge requests\" ouvertes pour ce(s) projet(s)"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:318
+#, no-wrap
+msgid ""
+" salsa mrs qa/qa debian/devscripts\n"
+"\n"
+msgstr ""
+" salsa mrs qa/qa debian/devscripts\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:323
+msgid "B<protect_branch>"
+msgstr "B<protect_branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:325
+msgid "Protect/unprotect a branch."
+msgstr "Protège/dé-protège une branche."
+
+#. type: =item
+#: ../scripts/salsa.pl:329
+msgid "Set protection"
+msgstr "Mettre une protection"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:331
+#, no-wrap
+msgid ""
+" # project branch merge push\n"
+" salsa --group js-team protect_branch node-mongodb master m d\n"
+"\n"
+msgstr ""
+" # project branch merge push\n"
+" salsa --group js-team protect_branch node-mongodb master m d\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:334
+msgid "\"merge\" and \"push\" can be one of:"
+msgstr "\"merge\" et \"push\" peuvent être au choix :"
+
+#. type: =item
+#: ../scripts/salsa.pl:338
+msgid "B<o>, B<owner>: owner only"
+msgstr "B<o>, B<owner>: propriétaire uniquement"
+
+#. type: =item
+#: ../scripts/salsa.pl:340
+msgid "B<m>, B<maintainer>: B<o> + maintainers allowed"
+msgstr "B<m>, B<maintainer>: B<o> + mainteneurs autorisés"
+
+#. type: =item
+#: ../scripts/salsa.pl:342
+msgid "B<d>, B<developer>: B<m> + developers allowed"
+msgstr "B<d>, B<developer>: B<m> + développeurs autorisés"
+
+#. type: =item
+#: ../scripts/salsa.pl:344
+msgid "B<r>, B<reporter>: B<d> + reporters allowed"
+msgstr "B<r>, B<reporter>: B<d> + rapporteurs autorisés"
+
+#. type: =item
+#: ../scripts/salsa.pl:346
+msgid "B<g>, B<guest>: B<r> + guest allowed"
+msgstr "B<g>, B<guest>: B<r> + invités autorisés"
+
+#. type: =item
+#: ../scripts/salsa.pl:350
+msgid "Unprotect"
+msgstr "Dé-protéger"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:352
+#, no-wrap
+msgid ""
+" salsa --group js-team protect_branch node-mongodb master no\n"
+"\n"
+msgstr ""
+" salsa --group js-team protect_branch node-mongodb master no\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:356
+msgid "B<protected_branches>"
+msgstr "B<protected_branches>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:358
+msgid "List protected branches"
+msgstr "Liste les branches protégées"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:360
+#, no-wrap
+msgid ""
+" salsa --group js-team protected_branches node-mongodb\n"
+"\n"
+msgstr ""
+" salsa --group js-team protected_branches node-mongodb\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:362
+msgid "B<push_repo>"
+msgstr "B<push_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:364
+msgid ""
+"Create a new project from a local Debian source directory configured with "
+"git."
+msgstr ""
+"Créer un nouveau projet depuis un répertoire local de source Debian "
+"configuré avec git."
+
+#. type: textblock
+#: ../scripts/salsa.pl:367
+msgid "B<push_repo> executes the following steps:"
+msgstr "B<push_repo> executes the following steps:"
+
+#. type: =item
+#: ../scripts/salsa.pl:371
+msgid "gets project name using debian/changelog file;"
+msgstr "récupère le nom de projet en utilisant le fichier debian/changelog ;"
+
+#. type: =item
+#: ../scripts/salsa.pl:373
+msgid "launches B<git remote add upstream ...>;"
+msgstr "lance B<git remote add upstream ...> ;"
+
+#. type: =item
+#: ../scripts/salsa.pl:375
+msgid "launches B<create_repo>;"
+msgstr "lance B<create_repo> ;"
+
+#. type: =item
+#: ../scripts/salsa.pl:377
+msgid "pushes local repo."
+msgstr "pousse le dépôt local."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:383
+#, no-wrap
+msgid ""
+" salsa --user yadd push_repo ./test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts push_repo .\n"
+"\n"
+msgstr ""
+" salsa --user yadd push_repo ./test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts push_repo .\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:386
+msgid "B<rename_branch>"
+msgstr "B<rename_branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:388
+msgid ""
+"Rename branch given in B<--source-branch> with name given in B<--dest-"
+"branch>. You can use B<--no-fail>, B<--all> and B<--all-archived> options "
+"here."
+msgstr ""
+"Renomme la branche indiquée dans B<--source-branch> avec le nom donné dans "
+"B<--dest-branch>. On peut utiliser les options B<--no-fail>, B<--all> et B<--"
+"all-archived> ici."
+
+#. type: =item
+#: ../scripts/salsa.pl:391
+msgid "B<search>, B<search_project>, B<search_repo>"
+msgstr "B<search>, B<search_project>, B<search_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:393
+msgid ""
+"Search for a project using given string. Shows name, owner id and other "
+"information."
+msgstr ""
+"Cherche un projet en utilisant la chaîne donnée. Montre le nom, l'id du "
+"propriétaire et d'autres informations."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:396
+#, no-wrap
+msgid ""
+" salsa search devscripts\n"
+" salsa search debian/devscripts\n"
+" salsa search 18475\n"
+"\n"
+msgstr ""
+" salsa search devscripts\n"
+" salsa search debian/devscripts\n"
+" salsa search 18475\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:400
+msgid "B<update_repo>"
+msgstr "B<update_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:402
+msgid ""
+"Configure repo(s) using parameters given to command line. A repo name has "
+"to be given unless B<--all> or B<--all-archived> is set. Prefer to use "
+"B<update_safe>."
+msgstr ""
+"Configure le(s) dépôt(s) en utilisant les paramètres donnés dans la ligne de "
+"commande. Un nom de dépôt doit être donné à moins que B<--all> ou B<--all-"
+"archived>ne soit utilisé. Préférer B<update_safe>."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:406
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_repo test\n"
+" salsa --group js-team update_repo --all\n"
+" salsa --group js-team --rename-head update_repo test1 test2 test3\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+msgstr ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_repo test\n"
+" salsa --group js-team update_repo --all\n"
+" salsa --group js-team --rename-head update_repo test1 test2 test3\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:411
+msgid ""
+"By default when using B<--all>, salsa will fail on first error. If you want "
+"to continue, set B<--no-fail>. In this case, salsa will display a warning "
+"for each project that has fail but continue with next project. Then to see "
+"full errors, set B<--verbose>."
+msgstr ""
+"Par défaut lorsque B<--all> est utilisé, salsa échoue à la première erreur. "
+"Pour pouvoir continuer, indiquer B<--no-fail>. Dans ce cas, salsa affichera "
+"un avertissement pour chaque projet en échec mais continuera avec le projet "
+"suivant. Pour voir alors les erreurs complètes, utiliser B<--verbose>."
+
+#. type: =item
+#: ../scripts/salsa.pl:416
+msgid "B<update_safe>"
+msgstr "B<update_safe>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:418
+msgid ""
+"Launch B<check_repo> and ask before launching B<update_repo> (unless B<--"
+"yes>)."
+msgstr ""
+"Lance B<check_repo> et demande avant de lancer B<update_repo> (sauf si B<--"
+"yes>)."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:420
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_safe test\n"
+" salsa --group js-team update_safe --all\n"
+" salsa --group js-team --rename-head update_safe test1 test2 test3\n"
+" salsa update_safe js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+msgstr ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_safe test\n"
+" salsa --group js-team update_safe --all\n"
+" salsa --group js-team --rename-head update_safe test1 test2 test3\n"
+" salsa update_safe js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/salsa.pl:427
+msgid "Other"
+msgstr "Autre"
+
+#. type: =item
+#: ../scripts/salsa.pl:431
+msgid "B<purge_cache>"
+msgstr "B<purge_cache>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:433
+msgid "Empty local cache."
+msgstr "Cache local vide."
+
+#. type: =head2
+#: ../scripts/salsa.pl:439
+msgid "General options"
+msgstr "Options générales"
+
+#. type: =item
+#: ../scripts/salsa.pl:443
+msgid "B<-C>, B<--chdir>"
+msgstr "B<-C>, B<--chdir>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:445
+msgid "Change directory before launching command"
+msgstr "Changer de répertoire avant de lancer la commande"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:447
+#, no-wrap
+msgid ""
+" salsa -C ~/debian co debian/libapache2-mod-fcgid\n"
+"\n"
+msgstr ""
+" salsa -C ~/debian co debian/libapache2-mod-fcgid\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:449
+msgid "B<--cache-file>"
+msgstr "B<--cache-file>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:451
+msgid ""
+"File to store cached values. Default to B<~/.cache/salsa.json>. An empty "
+"value disables cache."
+msgstr ""
+"Fichier où stocker les valeurs cachées. Défaut : B<~/.cache/salsa.json>. Une "
+"valeur vide désactive le cache."
+
+#. type: textblock
+#: ../scripts/salsa.pl:454
+msgid "C<.devscripts> value: B<SALSA_CACHE_FILE>"
+msgstr "Valeur C<.devscripts> : B<SALSA_CACHE_FILE>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:458
+msgid "Disable cache usage. Same as B<--cache-file ''>"
+msgstr "Désactive le cache. Identique à B<--cache-file ''>"
+
+#. type: =item
+#: ../scripts/salsa.pl:460 ../scripts/uscan.pl:1538
+msgid "B<--conffile>, B<--conf-file>"
+msgstr "B<--conffile>, B<--conf-file>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:462 ../scripts/uscan.pl:1540
+msgid ""
+"Add or replace default configuration files (C</etc/devscripts.conf> and C<~/."
+"devscripts>). This can only be used as the first option given on the command-"
+"line."
+msgstr ""
+"Ajoute ou remplace les fichiers de configuration par défaut (C</etc/"
+"devscripts.conf> and C<~/.devscripts>). L'option ne peut être utilisée qu'en "
+"première position de la ligne de commande."
+
+#. type: =item
+#: ../scripts/salsa.pl:468 ../scripts/uscan.pl:1546
+msgid "replace:"
+msgstr "remplacer :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:470
+#, no-wrap
+msgid ""
+" salsa --conf-file test.conf <command>...\n"
+" salsa --conf-file test.conf --conf-file test2.conf <command>...\n"
+"\n"
+msgstr ""
+" salsa --conf-file test.conf <command>...\n"
+" salsa --conf-file test.conf --conf-file test2.conf <command>...\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:473 ../scripts/uscan.pl:1550
+msgid "add:"
+msgstr "ajouter :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:475
+#, no-wrap
+msgid ""
+" salsa --conf-file +test.conf <command>...\n"
+" salsa --conf-file +test.conf --conf-file +test2.conf <command>...\n"
+"\n"
+msgstr ""
+" salsa --conf-file +test.conf <command>...\n"
+" salsa --conf-file +test.conf --conf-file +test2.conf <command>...\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:478 ../scripts/uscan.pl:1554
+msgid ""
+"If one B<--conf-file> has no C<+>, default configuration files are ignored."
+msgstr ""
+"Si l'un des B<--conf-file> ne contient pas de C<+>, les fichiers de "
+"configuration par défaut sont ignorés."
+
+#. type: textblock
+#: ../scripts/salsa.pl:484 ../scripts/uscan.pl:1560
+msgid ""
+"Don't read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+"Ne lire aucun fichier de configuration. L'option ne peut être utilisée qu'en "
+"première position de la ligne de commande."
+
+#. type: textblock
+#: ../scripts/salsa.pl:489
+msgid "Enable debugging output"
+msgstr "Active l'affichage verbeux"
+
+#. type: =item
+#: ../scripts/salsa.pl:491
+msgid "B<--group>"
+msgstr "B<--group>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:493
+msgid "Team to use. Use C<salsa search_group name> to find it."
+msgstr "Équipe à utiliser. Utiliser C<salsa search_group nom> pour le trouver."
+
+#. type: textblock
+#: ../scripts/salsa.pl:495
+msgid "If you want to use a subgroup, you have to set its full path:"
+msgstr "Pour utiliser un sous-groupe, il faut en saisir le chemin complet :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:497
+#, no-wrap
+msgid ""
+" salsa --group perl-team/modules/packages check_repo lemonldap-ng\n"
+"\n"
+msgstr ""
+" salsa --group perl-team/modules/packages check_repo lemonldap-ng\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:499
+msgid "C<.devscripts> value: B<SALSA_GROUP>"
+msgstr "Valeur C<.devscripts> : B<SALSA_GROUP>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:501
+msgid ""
+"Be careful when you use B<SALSA_GROUP> in your C<.devscripts> file. Every "
+"B<salsa> command will be executed in group space, for example if you want to "
+"propose a little change in a project using B<salsa fork> + B<salsa mr>, this "
+"\"fork\" will be done in group space unless you set a B<--user>/B<--user-"
+"id>. Prefer to use an alias in your C<.bashrc> file. Example:"
+msgstr ""
+"Attention en utilisant B<SALSA_GROUP> dans votre fichier C<.devscripts>. "
+"Toutes les commandes B<salsa> seront exécutées dans l'espace du groupe. Par "
+"exemple si vous voulez proposer un léger changement dans un projet en "
+"utilisant B<salsa fork> + B<salsa mr>, ce \"fork\" sera fait dans l'espace "
+"du groupe sauf si vous indiquez un B<--user>/B<--user-id>. Préférez utiliser "
+"un alias dans votre fichier C<.bashrc>. Exemple :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:507
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --group js-team\"\n"
+"\n"
+msgstr ""
+" alias jsteam_admin=\"salsa --group js-team\"\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:511 ../scripts/salsa.pl:540
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --conf-file ~/.js.conf\n"
+"\n"
+msgstr ""
+" alias jsteam_admin=\"salsa --conf-file ~/.js.conf\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:513
+msgid "or to use both .devscripts and .js.conf:"
+msgstr "ou pour utiliser à la fois .devscripts et .js.conf :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:515
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --conf-file +~/.js.conf\n"
+"\n"
+msgstr ""
+" alias jsteam_admin=\"salsa --conf-file +~/.js.conf\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:517
+msgid "then you can fix B<SALSA_GROUP> in C<~/.js.conf>"
+msgstr "on peut alors indiquer B<SALSA_GROUP> dans C<~/.js.conf>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:519
+msgid ""
+"To enable bash completion for your alias, add this in your .bashrc file:"
+msgstr ""
+"Pour activer l'autocomplétion bash pour l'alias, ajouter ceci dans le "
+"fichier C<.bashrc> :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:521
+#, no-wrap
+msgid ""
+" _completion_loader salsa\n"
+" complete -F _salsa_completion jsteam_admin\n"
+"\n"
+msgstr ""
+" _completion_loader salsa\n"
+" complete -F _salsa_completion jsteam_admin\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:524
+msgid "B<--group-id>"
+msgstr "B<--group-id>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:526
+msgid "Group id to use. Use C<salsa search_group name> to find it."
+msgstr "Groupe à utiliser. Utiliser C<salsa search_group nom> pour le trouver."
+
+#. type: textblock
+#: ../scripts/salsa.pl:528
+msgid "C<.devscripts> value: B<SALSA_GROUP_ID>"
+msgstr "Valeur C<.devscripts> : B<SALSA_GROUP_ID>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:530
+msgid ""
+"Be careful when you use B<SALSA_GROUP_ID> in your C<.devscripts> file. Every "
+"B<salsa> command will be executed in group space, for example if you want to "
+"propose a little change in a project using B<salsa fork> + B<salsa mr>, this "
+"\"fork\" will be done in group space unless you set a B<--user>/B<--user-"
+"id>. Prefer to use an alias in your C<.bashrc> file. Example:"
+msgstr ""
+"Attention en utilisant B<SALSA_GROUP> dans votre fichier C<.devscripts>. "
+"Toutes les commandes B<salsa> seront exécutées dans l'espace du groupe. Par "
+"exemple si vous voulez proposer un léger changement dans un projet en "
+"utilisant B<salsa fork> + B<salsa mr>, ce \"fork\" sera créé dans l'espace "
+"du groupe sauf si vous indiquez un B<--user>/B<--user-id>. Préférez utiliser "
+"un alias dans votre fichier C<.bashrc>. Exemple :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:536
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --group-id 2666\"\n"
+"\n"
+msgstr ""
+" alias jsteam_admin=\"salsa --group-id 2666\"\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:542
+msgid "then you can fix B<SALSA_GROUP_ID> in C<~/.js.conf>"
+msgstr "on peut alors indiquer B<SALSA_GROUP_ID> dans C<~/.js.conf>"
+
+#. type: =item
+#: ../scripts/salsa.pl:544
+msgid "B<--help>: displays this manpage"
+msgstr "B<--help>: affiche cette page de manuel"
+
+#. type: =item
+#: ../scripts/salsa.pl:546
+msgid "B<-i>, B<--info>"
+msgstr "B<-i>, B<--info>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:548
+msgid "Prompt before sensible changes."
+msgstr "Demander avant les changements sensibles."
+
+#. type: textblock
+#: ../scripts/salsa.pl:550
+msgid "C<.devscripts> value: B<SALSA_INFO> (yes/no)"
+msgstr "Valeur C<.devscripts> : B<SALSA_INFO> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:552
+msgid "B<--path>"
+msgstr "B<--path>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:554
+msgid "Repo path. Default to group or user path."
+msgstr "Chemin du dépôt. Par défaut, chemin du groupe ou de l'utilisateur."
+
+#. type: textblock
+#: ../scripts/salsa.pl:556
+msgid "C<.devscripts> value: B<SALSA_REPO_PATH>"
+msgstr "Valeur C<.devscripts> : B<SALSA_REPO_PATH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:558
+msgid "B<--token>"
+msgstr "B<--token>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:560
+msgid "Token value (see above)."
+msgstr "Valeur du jeton (voir ci-avant)."
+
+#. type: =item
+#: ../scripts/salsa.pl:562
+msgid "B<--token-file>"
+msgstr "B<--token-file>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:564
+msgid "File to find token (see above)."
+msgstr "Fichier où trouver le jeton (voir ci-avant)."
+
+#. type: textblock
+#: ../scripts/salsa.pl:568
+msgid ""
+"Username to use. If neither B<--group>, B<--group-id>, B<--user> or B<--user-"
+"id> is set, salsa uses current user id (corresponding to salsa private "
+"token)."
+msgstr ""
+"Id de l'utilisateur à utiliser. Si aucun B<--group>, B<--group-id>, B<--"
+"user> or B<--user-id> n'est indiqué, salsa utilise l'id du propriétaire du "
+"jeton."
+
+#. type: =item
+#: ../scripts/salsa.pl:571
+msgid "B<--user-id>"
+msgstr "B<--user-id>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:573
+msgid ""
+"User id to use. Use C<salsa search_user name> to find one. If neither B<--"
+"group>, B<--group-id>, B<--user> or B<--user-id> is set, salsa uses current "
+"user id (corresponding to salsa private token)."
+msgstr ""
+"Id de l'utilisateur à utiliser. Utiliser C<salsa search_user nom> pour le "
+"trouver. Si aucun B<--group>, B<--group-id>, B<--user> ou B<--user-id> n'est "
+"indiqué, salsa utilise l'id du propriétaire du jeton."
+
+#. type: textblock
+#: ../scripts/salsa.pl:577
+msgid "C<.devscripts> value: B<SALSA_USER_ID>"
+msgstr "Valeur C<.devscripts> : B<SALSA_USER_ID>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:581
+msgid "Enable verbose output."
+msgstr "Affiche plus de logs."
+
+#. type: =item
+#: ../scripts/salsa.pl:583
+msgid "B<--yes>"
+msgstr "B<--yes>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:585
+msgid "Never ask for consent."
+msgstr "Ne jamais demander de consentement."
+
+#. type: textblock
+#: ../scripts/salsa.pl:587
+msgid "C<.devscripts> value: B<SALSA_YES> (yes/no)"
+msgstr "Valeur C<.devscripts> : B<SALSA_YES> (yes/no)"
+
+#. type: =head2
+#: ../scripts/salsa.pl:591
+msgid "List/search repo options"
+msgstr "Options de liste/recherche"
+
+#. type: =item
+#: ../scripts/salsa.pl:595
+msgid "B<--archived>, B<--no-archived>"
+msgstr "B<--archived>, B<--no-archived>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:597
+msgid ""
+"Instead of looking to active projects, list or search in archived projects. "
+"Note that you can't have both archived and unarchived projects in the same "
+"request. Default: no I<(ie --no-archived)>."
+msgstr ""
+"Au lieu d'examiner dans les projets actifs, liste ou cherche dans les "
+"projets archivés. Noter qu'on ne peut avoir des projets archivés et non-"
+"archivés dans la même requête. Défaut: no I<(ie --no-archived)>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:601
+msgid "C<.devscripts> value: B<SALSA_ARCHIVED> (yes/no)"
+msgstr "Valeur C<.devscripts> : B<SALSA_ARCHIVED> (yes/no)"
+
+#. type: =head2
+#: ../scripts/salsa.pl:605
+msgid "Update/create repo options"
+msgstr "Options pour mettre à jour ou créer des dépôts"
+
+#. type: =item
+#: ../scripts/salsa.pl:609
+msgid "B<--all>, B<--all-archived>"
+msgstr "B<--all>, B<--all-archived>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:611
+msgid ""
+"When set, all projects of group/user are affected by command. B<--all> will "
+"filter all active projects, whereas B<--all-archived> will include active "
+"and archived projects."
+msgstr ""
+"Si activé, tous les projets du groupe/utilisateur sont affectés par la "
+"commande. B<--all> sélectionnera tous les projets actifs alors que B<--all-"
+"archived> inclura les projets actifs et archivés."
+
+#. type: =item
+#: ../scripts/salsa.pl:617
+msgid "B<--skip>: ignore project with B<--all> or B<--all-achived>. Example:"
+msgstr ""
+"B<--skip> : ignorer les projet (contexte B<--all> ou B<--all-achived>). "
+"Exemple :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:619
+#, no-wrap
+msgid ""
+" salsa update_repo --tagpending --all --skip qa --skip devscripts\n"
+"\n"
+msgstr ""
+" salsa update_repo --tagpending --all --skip qa --skip devscripts\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:621
+msgid ""
+"C<.devscripts> value: B<SALSA_SKIP>. To set multiples values, use spaces. "
+"Example"
+msgstr ""
+"Valeur C<.devscripts> : B<SALSA_SKIP>. Pour indiquer plusieurs valeurs, "
+"utiliser des espaces. Example"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:624
+#, no-wrap
+msgid ""
+" SALSA_SKIP=qa devscripts\n"
+"\n"
+msgstr ""
+" SALSA_SKIP=qa devscripts\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:626
+msgid "B<--skip-file>: ignore projects in this file (1 project per line)"
+msgstr ""
+"B<--skip-file> : ignorer les projets dont les noms sont inclus dans ce "
+"ficher (1 projet par ligne)"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:628
+#, no-wrap
+msgid ""
+" salsa update_repo --tagpending --all --skip-file ~/.skip\n"
+"\n"
+msgstr ""
+" salsa update_repo --tagpending --all --skip-file ~/.skip\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:630
+msgid "C<.devscripts> value: B<SALSA_SKIP_FILE>"
+msgstr "Valeur C<.devscripts> : B<SALSA_SKIP_FILE>"
+
+#. type: =item
+#: ../scripts/salsa.pl:634
+msgid "B<--build-timeout>"
+msgstr "B<--build-timeout>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:636
+msgid "The maximum amount of time, in seconds, that a job can run."
+msgstr "Temps maximum d'exécution d'un job en secondes."
+
+#. type: textblock
+#: ../scripts/salsa.pl:638
+msgid "Default: 3600 (60 minutes)"
+msgstr "Défaut: 3600 (60 minutes)"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:640
+#, no-wrap
+msgid ""
+" salsa update_safe myrepo --build-timeout 3600\n"
+"\n"
+msgstr ""
+" salsa update_safe myrepo --build-timeout 3600\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:642
+msgid "C<.devscripts> value: B<SALSA_BUILD_TIMEOUT>"
+msgstr "Valeur C<.devscripts> : B<SALSA_BUILD_TIMEOUT>"
+
+#. type: =item
+#: ../scripts/salsa.pl:644
+msgid "B<--avatar-path>"
+msgstr "B<--avatar-path>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:646
+msgid ""
+"Path to an image for the project's avatar. If path value contains \"%p\", "
+"it is replaced by project name."
+msgstr ""
+"Chemin vers une image pour l'avatar du projet. Si le chemin contient \"%p\", "
+"il sera remplacé par le nom du projet."
+
+#. type: textblock
+#: ../scripts/salsa.pl:649
+msgid "C<.devscripts> value: B<SALSA_AVATAR_PATH>"
+msgstr "Valeur C<.devscripts> : B<SALSA_AVATAR_PATH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:651
+msgid "B<--ci-config-path>"
+msgstr "B<--ci-config-path>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:653
+msgid ""
+"Configure configuration file path of GitLab CI. Default: empty. Example:"
+msgstr ""
+"Configure le chemin du fichier de configuration de la CI GitLab. Défaut : "
+"vide. Exemple :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:655
+#, no-wrap
+msgid ""
+" salsa update_safe --ci-config-path recipes/debian.yml@salsa-ci-team/pipeline debian/devscripts\n"
+"\n"
+msgstr ""
+" salsa update_safe --ci-config-path recipes/debian.yml@salsa-ci-team/pipeline debian/devscripts\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:657
+msgid "C<.devscripts> value: B<SALSA_CI_CONFIG_PATH>"
+msgstr "Valeur C<.devscripts> : B<SALSA_CI_CONFIG_PATH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:659
+msgid "B<--desc>, B<--no-desc>"
+msgstr "B<--desc>, B<--no-desc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:661
+msgid "Configure repo description using pattern given in B<desc-pattern>"
+msgstr ""
+"Configure la description du dépôt en utilisant l'expression donnée avec B<--"
+"desc-pattern>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:663
+msgid "C<.devscripts> value: B<SALSA_DESC> (yes/no)"
+msgstr "Valeur C<.devscripts> : B<SALSA_DESC> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:665
+msgid "B<--desc-pattern>"
+msgstr "B<--desc-pattern>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:667
+msgid ""
+"Repo description pattern. Default to \"Debian package %p\". \"%p\" is "
+"replaced by repo name, while \"%P\" is replaced by repo name given in "
+"command (may contains full path)."
+msgstr ""
+"Expression de description des dépôts. Défaut : \"Debian package %p\". "
+"\"%p\" est remplacé par le nom du dépôt, \"%P\" est remplacé par le nom du "
+"dépôt donné dans la commande (peut contenir le chemin complet)."
+
+#. type: textblock
+#: ../scripts/salsa.pl:671
+msgid "C<.devscripts> value: B<SALSA_DESC_PATTERN>"
+msgstr "Valeur C<.devscripts> : B<SALSA_DESC_PATTERN>"
+
+#. type: =item
+#: ../scripts/salsa.pl:673
+msgid "B<--email>, B<--no-email>, B<--disable-email>"
+msgstr "B<--email>, B<--no-email>, B<--disable-email>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:675
+msgid "Enable, ignore or disable email-on-push."
+msgstr "Active, ignore ou désactive email-on-push."
+
+#. type: textblock
+#: ../scripts/salsa.pl:677
+msgid "C<.devscripts> value: B<SALSA_EMAIL> (yes/ignore/no, default: ignore)"
+msgstr ""
+"Valeur C<.devscripts> : B<SALSA_EMAIL> (yes/ignore/no, défaut : ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:679
+msgid "B<--email-recipient>"
+msgstr "B<--email-recipient>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:681
+msgid "Email-on-push recipient. Can be multi valued:"
+msgstr "Destinataire Email-on-push. Peut être multi-valué :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:683
+#, no-wrap
+msgid ""
+" $ salsa update_safe myrepo \\\n"
+" --email-recipient foo@foobar.org \\\n"
+" --email-recipient bar@foobar.org\n"
+"\n"
+msgstr ""
+" $ salsa update_safe myrepo \\\n"
+" --email-recipient foo@foobar.org \\\n"
+" --email-recipient bar@foobar.org\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:687
+msgid "If recipient value contains \"%p\", it is replaced by project name."
+msgstr ""
+"Si la chaîne destinataire contient la macro \"%p\", elle sera remplacée par "
+"le nom du projet."
+
+#. type: textblock
+#: ../scripts/salsa.pl:689
+msgid ""
+"C<.devscripts> value: B<SALSA_EMAIL_RECIPIENTS> (use spaces to separate "
+"multiples recipients)"
+msgstr ""
+"Valeur C<.devscripts> : B<SALSA_EMAIL_RECIPIENTS> (utiliser des espaces pour "
+"séparer les destinataires multiples)"
+
+#. type: =item
+#: ../scripts/salsa.pl:692
+msgid "B<--issues>"
+msgstr "B<--issues>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:694
+msgid "Set issues feature with permissions."
+msgstr "Activer la création de tickets avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:696
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/private/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_ISSUES> (yes/ignore/no, défaut: yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:698
+msgid "B<--repo>"
+msgstr "B<--repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:700
+msgid "Set repository feature with permissions."
+msgstr "Activer la fonctionnalité répertoires avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:702
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REPO> (yes/private/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_REPO> (yes/ignore/no, défaut: yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:704
+msgid "B<--mr>"
+msgstr "B<--mr>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:706
+msgid "Set merge requests feature with permissions."
+msgstr "Activer la création de \"merge-requests\" avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:708
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/private/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_MR> (yes/ignore/no, défaut: yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:710
+msgid "B<--forks>, B<--forks-mr>"
+msgstr "B<--forks>, B<--forks-mr>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:712
+msgid "Set forking a repository feature with permissions."
+msgstr "Activer la possibilité de fork avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:714
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_FORKS> (yes/private/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_FORKS> (yes/private/no, défaut: yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:716
+msgid "B<--lfs>"
+msgstr "B<--lfs>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:718
+msgid "Set Large File Storage (LFS) feature."
+msgstr "Activer la fonctionnalité \"Large File Storage\" (LFS)."
+
+#. type: textblock
+#: ../scripts/salsa.pl:720
+msgid "C<.devscripts> values: B<SALSA_ENABLE_LFS> (yes/no, default: yes)"
+msgstr "Valeurs C<.devscripts> : B<SALSA_ENABLE_LFS> (yes/no, défaut: yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:722
+msgid "B<--packages>"
+msgstr "B<--packages>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:724
+msgid "Set packages feature."
+msgstr "Active la fonctionnalité \"packages\"."
+
+#. type: textblock
+#: ../scripts/salsa.pl:726
+msgid "C<.devscripts> values: B<SALSA_ENABLE_PACKAGING> (yes/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_PACKAGING> (yes/no, défaut: yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:728
+msgid "B<--jobs>"
+msgstr "B<--jobs>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:730
+msgid "Set jobs feature with permissions."
+msgstr "Activer la fonctionnalité \"jobs\" avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:732
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_JOBS> (yes/private/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_JOBS> (yes/private/no, défaut: yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:734
+msgid "B<--container>"
+msgstr "B<--container>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:736
+msgid "Set container feature with permissions."
+msgstr "Activer la fonctionnalité \"container\" avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:738
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_CONTAINER> (yes/private/no, default: "
+"yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_CONTAINER> (yes/private/no, défaut : "
+"yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:740
+msgid "B<--analytics>"
+msgstr "B<--analytics>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:742
+msgid "Set analytics feature with permissions."
+msgstr "Activer la fonctionnalité \"analytics\" avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:744
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_ANALYTICS> (yes/private/no, default: "
+"yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_ANALYTICS> (yes/private/no, défaut : "
+"yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:746
+msgid "B<--requirements>"
+msgstr "B<--requirements>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:748
+msgid "Set requirements feature with permissions."
+msgstr "Activer la fonctionnalité \"requirements\" avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:750
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REQUIREMENTS> (yes/private/no, "
+"default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_REQUIREMENTS> (yes/private/no, "
+"défaut : yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:752
+msgid "B<--wiki>"
+msgstr "B<--wiki>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:754
+msgid "Set wiki feature with permissions."
+msgstr "Activer la fonctionnalité \"wiki\" avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:756
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_WIKI> (yes/private/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_WIKI> (yes/private/no, défaut : yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:758
+msgid "B<--snippets>"
+msgstr "B<--snippets>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:760
+msgid "Set snippets feature with permissions."
+msgstr "Activer la fonctionnalité \"snippets\" avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:762
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_SNIPPETS> (yes/private/no, default: "
+"yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_WIKI> (yes/private/no, défaut : yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:764
+msgid "B<--pages>"
+msgstr "B<--pages>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:766
+msgid "Set pages feature with permissions."
+msgstr "Activer la fonctionnalité \"pages\" avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:768
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_PAGES> (yes/private/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_PAGES> (yes/private/no, défaut : yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:770
+msgid "B<--releases>"
+msgstr "B<--releases>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:772
+msgid "Set releases feature with permissions."
+msgstr "Activer la fonctionnalité \"releases\" avec permissions."
+
+#. type: textblock
+#: ../scripts/salsa.pl:774
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_RELEASES> (yes/private/no, default: "
+"yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_RELEASES> (yes/private/no, défaut : "
+"yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:776
+msgid "B<--auto-devops>"
+msgstr "B<--auto-devops>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:778
+msgid "Set auto devops feature."
+msgstr "Activer la fonctionnalité \"auto devops\"."
+
+#. type: textblock
+#: ../scripts/salsa.pl:780
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_AUTO_DEVOPS> (yes/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_AUTO_DEVOPS> (yes/no, défaut : yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:782
+msgid "B<--request-acc>"
+msgstr "B<--request-acc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:784
+msgid "Set request access feature."
+msgstr "Activer les demandes d'accès."
+
+#. type: textblock
+#: ../scripts/salsa.pl:786
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REQUEST_ACC> (yes/no, default: yes)"
+msgstr ""
+"Valeurs C<.devscripts> : B<SALSA_ENABLE_REQUEST_ACC> (yes/no, défaut : yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:788
+msgid "B<--enable-remove-source-branch>, B<--disable-remove-source-branch>"
+msgstr "B<--enable-remove-source-branch>, B<--disable-remove-source-branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:790
+msgid ""
+"Enable or disable deleting source branch option by default for all new merge "
+"requests."
+msgstr ""
+"Activer ou désactiver l'option d'effacement de branche source par défaut "
+"pour toutes les nouvelles \"merge requests\"."
+
+#. type: textblock
+#: ../scripts/salsa.pl:793
+msgid ""
+"C<.devscripts> values: B<SALSA_REMOVE_SOURCE_BRANCH> (yes/no, default: yes)"
+msgstr ""
+"Valeur C<.devscripts> : B<SALSA_REMOVE_SOURCE_BRANCH> (yes/no, défaut : yes)"
+
+#. type: =item
+#: ../scripts/salsa.pl:795
+msgid "B<--irc-channel>"
+msgstr "B<--irc-channel>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:797
+msgid ""
+"IRC channel for KGB or Irker. Can be used more than one time only with B<--"
+"irker>."
+msgstr ""
+"Canal IRC pour KGB et Irker. Peut être utilisé plusieurs fois uniquement "
+"avec B<--irker>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:800
+msgid ""
+"B<Important>: channel must not include the first \"#\". If salsa finds a "
+"channel starting with \"#\", it will consider that the channel starts with 2 "
+"\"#\"!"
+msgstr ""
+"B<Important> : le canal ne doit pas inclure le premier \"#\". Si salsa "
+"trouve une chaîne commençant par \"#\", il considerera que le canal démarre "
+"par 2 \"#\" !"
+
+#. type: textblock
+#: ../scripts/salsa.pl:803
+msgid "C<.devscript> value: B<SALSA_IRC_CHANNEL>."
+msgstr "Valeur C<.devscripts> : B<SALSA_IRC_CHANNEL>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:805
+msgid "Multiple values must be space separated."
+msgstr "Les valeurs multiples doivent être séparées par des espaces."
+
+#. type: textblock
+#: ../scripts/salsa.pl:807
+msgid ""
+"Since configuration files are read using B<sh>, be careful when using \"#\": "
+"you must enclose the channel with quotes, else B<sh> will consider it as a "
+"comment and will ignore this value."
+msgstr ""
+"Comme le fichier de configuration est lu en utilisant B<sh>, être prudent "
+"lorsque \"#\" est utilisé : il faut alors encadré le canal par des "
+"guillemets, sinon B<sh> le considerera comme commentaire et ignorera cette "
+"valeur."
+
+#. type: =item
+#: ../scripts/salsa.pl:811
+msgid "B<--irker>, B<--no-irker>, B<--disable-irker>"
+msgstr "B<--irker>, B<--no-irker>, B<--disable-irker>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:813
+msgid "Enable, ignore or disable Irker service"
+msgstr "Active, ignore ou désactive Irker"
+
+#. type: textblock
+#: ../scripts/salsa.pl:815
+msgid "C<.devscripts> values: B<SALSA_IRKER> (yes/ignore/no, default: ignore)"
+msgstr ""
+"Valeur C<.devscripts> : B<SALSA_IRKER> (yes/ignore/no, défaut : ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:817
+msgid "B<--irker-host>"
+msgstr "B<--irker-host>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:819
+msgid "Irker host. Default: ruprecht.snow-crash.org"
+msgstr "Hôte Irker. Défaut : ruprecht.snow-crash.org"
+
+#. type: textblock
+#: ../scripts/salsa.pl:821
+msgid "C<.devscripts> value: B<SALSA_IRKER_HOST>"
+msgstr "Valeur C<.devscripts> : B<SALSA_IRKER_HOST>"
+
+#. type: =item
+#: ../scripts/salsa.pl:823
+msgid "B<--irker-port>"
+msgstr "B<--irker-port>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:825
+msgid "Irker port. Default: empty (default value)"
+msgstr "Hôte Irker. Défaut : vide (valeur par défaut)"
+
+#. type: textblock
+#: ../scripts/salsa.pl:827
+msgid "C<.devscripts> value: B<SALSA_IRKER_PORT>"
+msgstr "Valeur C<.devscripts> : B<SALSA_IRKER_Port>"
+
+#. type: =item
+#: ../scripts/salsa.pl:829
+msgid "B<--kgb>, B<--no-kgb>, B<--disable-kgb>"
+msgstr "B<--kgb>, B<--no-kgb>, B<--disable-kgb>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:831
+msgid "Enable, ignore or disable KGB webhook."
+msgstr "Active, ignore ou désactive le webhook KGB."
+
+#. type: textblock
+#: ../scripts/salsa.pl:833
+msgid "C<.devscripts> value: B<SALSA_KGB> (yes/ignore/no, default: ignore)"
+msgstr "Valeur C<.devscripts> : B<SALSA_KGB> (yes/ignore/no, défaut : ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:835
+msgid "B<--kgb-options>"
+msgstr "B<--kgb-options>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:837
+msgid ""
+"List of KGB enabled options (comma separated). Default: issues_events, "
+"merge_requests_events, note_events, pipeline_events, push_events, "
+"tag_push_events, wiki_page_events, enable_ssl_verification"
+msgstr ""
+"Liste des options KGB activées (séparées par des virgules). Défaut : "
+"issues_events, merge_requests_events, note_events, pipeline_events, "
+"push_events, tag_push_events, wiki_page_events, enable_ssl_verification"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:841
+#, no-wrap
+msgid ""
+" $ salsa update_safe debian/devscripts --kgb --irc-channel devscripts \\\n"
+" --kgb-options 'merge_requests_events,issues_events,enable_ssl_verification'\n"
+"\n"
+msgstr ""
+" $ salsa update_safe debian/devscripts --kgb --irc-channel devscripts \\\n"
+" --kgb-options 'merge_requests_events,issues_events,enable_ssl_verification'\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:844
+msgid ""
+"List of available options: confidential_comments_events, "
+"confidential_issues_events, confidential_note_events, "
+"enable_ssl_verification, issues_events, job_events, merge_requests_events, "
+"note_events, pipeline_events, tag_push_events, wiki_page_events"
+msgstr ""
+"Liste des options disponibles : confidential_comments_events, "
+"confidential_issues_events, confidential_note_events, "
+"enable_ssl_verification, issues_events, job_events, merge_requests_events, "
+"note_events, pipeline_events, tag_push_events, wiki_page_events"
+
+#. type: textblock
+#: ../scripts/salsa.pl:849
+msgid "C<.devscripts> value: B<SALSA_KGB_OPTIONS>"
+msgstr "Valeur C<.devscripts> : B<SALSA_KGB_OPTIONS>"
+
+#. type: =item
+#: ../scripts/salsa.pl:851
+msgid "B<--no-fail>"
+msgstr "B<--no-fail>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:853
+msgid ""
+"Don't stop on error when using B<update_repo> with B<--all> or B<--all-"
+"archived>."
+msgstr ""
+"Ne pas s'arrêter à la première erreur lorsque B<update_repo> est utilisé "
+"avec B<--all> ou B<--all-archived>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:855
+msgid "C<.devscripts> value: B<SALSA_NO_FAIL> (yes/no)"
+msgstr "Valeur C<.devscripts> : B<SALSA_NO_FAIL> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:857
+msgid "B<--request-access>"
+msgstr "B<--request-access>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:859
+msgid "Allow users to request member access."
+msgstr "Autoriser les utilisateurs à demander un accès membre."
+
+#. type: textblock
+#: ../scripts/salsa.pl:861
+msgid "C<.devscripts> value: B<SALSA_REQUEST_ACCESS> (yes/no)"
+msgstr "Valeur C<.devscripts> : B<SALSA_REQUEST_ACCESS> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:863
+msgid "B<--rename-head>, B<--no-rename-head>"
+msgstr "B<--rename-head>, B<--no-rename-head>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:865
+msgid ""
+"Rename HEAD branch given by B<--source-branch> into B<--dest-branch> and "
+"change \"default branch\" of project. Works only with B<update_repo>."
+msgstr ""
+"Renommer la branche HEAD indiquée par B<--source-branch> en B<--dest-branch> "
+"et changer la branche par défaut. Ne fonctionne qu'avec B<update_repo>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:868
+msgid "C<.devscripts> value: B<SALSA_RENAME_HEAD> (yes/no)"
+msgstr "Valeur C<.devscripts> : B<SALSA_RENAME_HEAD> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:872
+msgid "B<--source-branch>: default \"master\""
+msgstr "B<--source-branch> : défaut \"master\""
+
+#. type: textblock
+#: ../scripts/salsa.pl:874
+msgid "C<.devscripts> value: B<SALSA_SOURCE_BRANCH>"
+msgstr "Valeur C<.devscripts> : B<SALSA_SOURCE_BRANCH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:876
+msgid "B<--dest-branch>: default \"debian/master\""
+msgstr "B<--dest-branch> : défaut \"debian/master\""
+
+#. type: textblock
+#: ../scripts/salsa.pl:878
+msgid "C<.devscripts> value: B<SALSA_DEST_BRANCH>"
+msgstr "Valeur C<.devscripts> : B<SALSA_DEST_BRANCH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:882
+msgid "B<--tagpending>, B<--no-tagpending>, B<--disable-tagpending>"
+msgstr "B<--tagpending>, B<--no-tagpending>, B<--disable-tagpending>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:884
+msgid "Enable, ignore or disable \"tagpending\" webhook."
+msgstr "Active, ignore ou désactive le webhook \"tagpending\"."
+
+#. type: textblock
+#: ../scripts/salsa.pl:886
+msgid ""
+"C<.devscripts> value: B<SALSA_TAGPENDING> (yes/ignore/no, default: ignore)"
+msgstr ""
+"Valeur C<.devscripts> : B<SALSA_TAGPENDING> (yes/ignore/no, défaut : ignore)"
+
+#. type: =head2
+#: ../scripts/salsa.pl:890
+msgid "Pipeline schedules"
+msgstr "Calendriers des pipelines"
+
+#. type: =item
+#: ../scripts/salsa.pl:894
+msgid "B<--schedule-desc>"
+msgstr "B<--schedule-desc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:896
+msgid "Description of the pipeline schedule."
+msgstr "Description de la planification du pipeline."
+
+#. type: =item
+#: ../scripts/salsa.pl:898
+msgid "B<--schedule-ref>"
+msgstr "B<--schedule-ref>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:900
+msgid "Branch or tag name that is triggered."
+msgstr "Nom de la branche ou du tag déclenché."
+
+#. type: =item
+#: ../scripts/salsa.pl:902
+msgid "B<--schedule-cron>"
+msgstr "B<--schedule-cron>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:904
+msgid "Cron schedule, for example: 0 1 * * *."
+msgstr "Calendrier \"cron\", par exemple: 0 1 * * *."
+
+#. type: =item
+#: ../scripts/salsa.pl:906
+msgid "B<--schedule-tz>"
+msgstr "B<--schedule-tz>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:908
+msgid "Time zone to run cron schedule. Default: UTC"
+msgstr "Fuseau horaire pour lancer les événements \"cron\". Défaut: UTC"
+
+#. type: =item
+#: ../scripts/salsa.pl:910
+msgid "B<--schedule-enable>, B<--schedule-disable>"
+msgstr "B<--schedule-enable>, B<--schedule-disable>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:912
+msgid "Enable/disable the pipeline schedule to run. Default: disabled"
+msgstr ""
+"Active/désactive la planification du pipeline à exécuter. Défaut: désactivé"
+
+#. type: =item
+#: ../scripts/salsa.pl:914
+msgid "B<--schedule-run>"
+msgstr "B<--schedule-run>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:916
+msgid ""
+"Trigger B<--schedule-desc> scheduled pipeline to run immediately. Default:"
+msgstr ""
+"Déclencher le pipeline sélectionné par B<--schedule-desc> pour qu'il "
+"s'exécute immédiatement. Défaut :"
+
+#. type: =item
+#: ../scripts/salsa.pl:918
+msgid "B<--schedule-delete>"
+msgstr "B<--schedule-delete>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:920
+msgid "Delete B<--schedule-desc> pipeline schedule"
+msgstr "Supprimer la planification du pipeline décrit par B<--schedule-desc>"
+
+#. type: =head2
+#: ../scripts/salsa.pl:924
+msgid "Merge requests options"
+msgstr "Options pour les \"merge requests\""
+
+#. type: =item
+#: ../scripts/salsa.pl:928
+msgid "B<--mr-title>"
+msgstr "B<--mr-title>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:930
+msgid "Title for merge request. Default: last commit title."
+msgstr "Titre à utiliser. Défaut : titre du dernier commit."
+
+#. type: =item
+#: ../scripts/salsa.pl:932
+msgid "B<--mr-desc>"
+msgstr "B<--mr-desc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:934
+msgid "Description of new MR. Default:"
+msgstr "Description à utiliser. Défaut :"
+
+#. type: =item
+#: ../scripts/salsa.pl:938
+msgid "empty if B<--mr-title> is set"
+msgstr "vide is B<--mr-title> est indiqué"
+
+#. type: =item
+#: ../scripts/salsa.pl:940
+msgid "last commit description if any"
+msgstr "description du dernier commit si elle existe"
+
+#. type: =item
+#: ../scripts/salsa.pl:944
+msgid "B<--mr-dst-branch> (or second command line argument)"
+msgstr "B<--mr-dst-branch>(ou second argument de la ligne de commande)"
+
+#. type: textblock
+#: ../scripts/salsa.pl:946
+msgid "Destination branch. Default to \"master\"."
+msgstr "Branche de destination. Défaut : \"master\"."
+
+#. type: =item
+#: ../scripts/salsa.pl:948
+msgid "B<--mr-dst-project> (or first command line argument)"
+msgstr "B<--mr-dst-projet>(ou premier argument de la ligne de commande)"
+
+#. type: textblock
+#: ../scripts/salsa.pl:950
+msgid ""
+"Destination project. Default: project from which the current project was "
+"forked; or, if not found, \"upstream\" value found using B<git remote --"
+"verbose show>; or using source project."
+msgstr ""
+"Projet de destination. Défaut : projet duquel ce projet a été cloné ; sinon, "
+"la valeur \"upstream\" retournée en utilisant B<git remote --verbose show> ; "
+"à défaut le projet courant."
+
+#. type: textblock
+#: ../scripts/salsa.pl:954
+msgid ""
+"If B<--mr-dst-project> is set to B<same>, salsa will use source project as "
+"destination."
+msgstr ""
+"Si B<--mr-dst-project> est mis à B<same>, salsa utilisera le projet source "
+"comme destination."
+
+#. type: =item
+#: ../scripts/salsa.pl:957
+msgid "B<--mr-src-branch>"
+msgstr "B<--mr-src-branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:959
+msgid "Source branch. Default: current branch."
+msgstr "Branche source. Défaut : branche courante."
+
+#. type: =item
+#: ../scripts/salsa.pl:961
+msgid "B<--mr-src-project>"
+msgstr "B<--mr-src-project>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:963
+msgid ""
+"Source project. Default: current project found using B<git remote --verbose "
+"show>."
+msgstr ""
+"Projet source. Défaut : projet courante trouvé en utilisant B<git remote --"
+"verbose show>."
+
+#. type: =item
+#: ../scripts/salsa.pl:966
+msgid "B<--mr-allow-squash>, B<--no-mr-allow-squash>"
+msgstr "B<--mr-allow-squash>, B<--no-mr-allow-squash>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:968
+msgid "Allow upstream project to squash your commits, this is the default."
+msgstr ""
+"Autorise le projet amont à regrouper les commits (squash), c'est la valeur "
+"par défaut."
+
+#. type: textblock
+#: ../scripts/salsa.pl:970
+msgid "C<.devscripts> value: B<SALSA_MR_ALLOW_SQUASH> (yes/no)"
+msgstr "Valeur C<.devscripts> : B<SALSA_MR_ALLOW_SQUASH> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:972
+msgid "B<--mr-remove-source-branch>, B<--no-mr-remove-source-branch>"
+msgstr "B<--mr-remove-source-branch>, B<--no-mr-remove-source-branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:974
+msgid "Remove source branch if merge request is accepted. Default: no."
+msgstr "Effacer la branche source si la requête est acceptée. Défaut : no."
+
+#. type: textblock
+#: ../scripts/salsa.pl:976
+msgid "C<.devscripts> value: B<SALSA_MR_REMOVE_SOURCE_BRANCH> (yes/no)"
+msgstr "Valeur C<.devscripts> : B<SALSA_MR_REMOVE_SOURCE_BRANCH> (yes/no)"
+
+#. type: =head2
+#: ../scripts/salsa.pl:980
+msgid "Options to manage other Gitlab instances"
+msgstr "Options pour gérer d'autres instance GitLab"
+
+#. type: =item
+#: ../scripts/salsa.pl:984
+msgid "B<--api-url>"
+msgstr "B<--api-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:986
+msgid "GitLab API. Default: L<https://salsa.debian.org/api/v4>."
+msgstr "API GitLab. Défaut : L<https://salsa.debian.org/api/v4>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:988
+msgid "C<.devscripts> value: B<SALSA_API_URL>"
+msgstr "Valeur C<.devscripts> : B<SALSA_API_URL>"
+
+#. type: =item
+#: ../scripts/salsa.pl:990
+msgid "B<--git-server-url>"
+msgstr "B<--git-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:992
+msgid "Default to \"git@salsa.debian.org:\""
+msgstr "Défaut : \"git@salsa.debian.org:\""
+
+#. type: textblock
+#: ../scripts/salsa.pl:994
+msgid "C<.devscripts> value: B<SALSA_GIT_SERVER_URL>"
+msgstr "Valeur C<.devscripts> : B<SALSA_GIT_SERVER_URL>"
+
+#. type: =item
+#: ../scripts/salsa.pl:996
+msgid "B<--irker-server-url>"
+msgstr "B<--irker-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:998
+msgid "Default to \"ircs://irc.oftc.net:6697/\""
+msgstr "Défaut : \"ircs://irc.oftc.net:6697/\""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1000
+msgid "C<.devscripts> value: B<SALSA_IRKER_SERVER_URL>"
+msgstr "Valeur C<.devscripts> : B<SALSA_IRKER_SERVER_URL>"
+
+#. type: =item
+#: ../scripts/salsa.pl:1002
+msgid "B<--kgb-server-url>"
+msgstr "B<--kgb-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1004
+msgid "Default to L<http://kgb.debian.net:9418/webhook/?channel=>"
+msgstr "Défault : L<http://kgb.debian.net:9418/webhook/?channel=>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1006
+msgid "C<.devscripts> value: B<SALSA_KGB_SERVER_URL>"
+msgstr "Valeur C<.devscripts> : B<SALSA_KGB_SERVER_URL>"
+
+#. type: =item
+#: ../scripts/salsa.pl:1008
+msgid "B<--tagpending-server-url>"
+msgstr "B<--tagpending-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1010
+msgid "Default to L<https://webhook.salsa.debian.org/tagpending/>"
+msgstr "Défaut : L<https://webhook.salsa.debian.org/tagpending/>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1012
+msgid "C<.devscripts> value: B<SALSA_TAGPENDING_SERVER_URL>"
+msgstr "Valeur C<.devscripts> : B<SALSA_TAGPENDING_SERVER_URL>"
+
+#. type: =head3
+#: ../scripts/salsa.pl:1016
+msgid "Configuration file example"
+msgstr "Exemple de fichier de configuration"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1018
+msgid ""
+"Example to use salsa with L<https://gitlab.ow2.org> (group \"lemonldap-ng\"):"
+msgstr ""
+"Exemple pour utiliser salsa avec L<https://gitlab.ow2.org> (groupe "
+"\"lemonldap-ng\"):"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:1020
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=`cat ~/.ow2-gitlab-token`\n"
+" SALSA_API_URL=https://gitlab.ow2.org/api/v4\n"
+" SALSA_GIT_SERVER_URL=git@gitlab.ow2.org:\n"
+" SALSA_GROUP_ID=34\n"
+"\n"
+msgstr ""
+" SALSA_TOKEN=`cat ~/.ow2-gitlab-token`\n"
+" SALSA_API_URL=https://gitlab.ow2.org/api/v4\n"
+" SALSA_GIT_SERVER_URL=git@gitlab.ow2.org:\n"
+" SALSA_GROUP_ID=34\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1025
+msgid "Then to use it, add something like this in your C<.bashrc> file:"
+msgstr ""
+"Ensuite pour l'utiliser, ajouter quelque chose comme suit dans votre fichier "
+"C<.bashrc> :"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:1027
+#, no-wrap
+msgid ""
+" alias llng_admin='salsa --conffile ~/.salsa-ow2.conf'\n"
+"\n"
+msgstr ""
+" alias llng_admin='salsa --conffile ~/.salsa-ow2.conf'\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1031
+msgid "B<dpt-salsa>"
+msgstr "B<dpt-salsa>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1035
+msgid "Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+msgstr "Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1039
+msgid "Copyright (C) 2018, Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+msgstr "Droits d'auteur (C) 2018, Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1041
+msgid ""
+"It contains code formerly found in L<dpt-salsa> I<(pkg-perl-tools)> "
+"copyright 2018, gregor herrmann E<lt>gregoa@debian.orgE<gt>."
+msgstr ""
+"Il contient du code copié depuis L<dpt-salsa> I<(pkg-perl-tools)>, droits "
+"d'auteur (C) 2018, gregor herrmann E<lt>gregoa@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:1044
+msgid ""
+"This library 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."
+msgstr ""
+"Ce programme est un logiciel libre ; il est permis de le distribuer et/ou de "
+"le modifier selon les termes de la GNU General Public License, telle que "
+"publiée par la Free Software Foundation, version 2 ou ultérieure."
+
+#. type: textblock
+#: ../scripts/salsa.pl:1049
+msgid ""
+"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."
+msgstr ""
+"Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE "
+"GARANTIE; sans même la garantie implicite de QUALITÉ MARCHANDE ou "
+"d'ADÉQUATION À UN USAGE PARTICULIER. Voir la licence publique générale GNU "
+"pour plus de détails."
+
+#. type: textblock
+#: ../scripts/salsa.pl:1054
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see L<http://www.gnu.org/licenses/>."
+msgstr ""
+"Vous devriez avoir reçu une copie de la licence publique générale GNU avec "
+"ce programme. Sinon, voir L<http://www.gnu.org/licenses/>."
+
+#. type: TH
+#: ../doc/suspicious-source.1:15
+#, no-wrap
+msgid "SUSPICIOUS-SOURCE"
+msgstr "SUSPICIOUS-SOURCE"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:20
+msgid ""
+"suspicious-source - search for files that do not meet the GPL's definition "
+"of \"source\" for a work"
+msgstr ""
+"suspicious-source - Rechercher des fichiers qui ne sont pas sous la \"forme "
+"la plus adéquate pour les modifications\" demandée par la GPL"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:23
+msgid "B<suspicious-source> [I<options>]"
+msgstr "B<suspicious-source> [I<options>]"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:30
+msgid ""
+"B<suspicious-source> outputs a list of files which are probably not the "
+"source form of a work. This should be run in the root of a source tree to "
+"find files which might not be, in the definition from the GNU GPL, the "
+"\"preferred form of the work for making modifications to it\"."
+msgstr ""
+"B<suspicious-source> affiche une liste de fichiers qui ne sont pas des "
+"fichiers source usuels. Il devrait être exécuté depuis le répertoire racine "
+"d'une arborescence source pour trouver les fichiers qui risquent de ne pas "
+"être sous la \"forme la plus adéquate pour les modifications\" telle que "
+"définie par la GPL ou d'autres licences."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:33
+msgid ""
+"The files inside version control system directories (like I<.bzr/> or I<CVS/"
+">) are not considered."
+msgstr ""
+"Les fichiers des répertoires de systèmes de gestion de version (comme I<.bzr/"
+"> or I<CVS/>) ne sont pas pris en compte."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:38 ../doc/wrap-and-sort.1:39
+msgid "Show this help message and exit."
+msgstr "Afficher ce message d'aide et quitter."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:41
+msgid "Print more information."
+msgstr "Afficher plus de renseignements."
+
+#. type: TP
+#: ../doc/suspicious-source.1:41
+#, no-wrap
+msgid "B<-d >I<directory>, B<--directory=>I<directory>"
+msgstr "B<-d> I<répertoire>, B<--directory=>I<répertoire>"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:44
+msgid ""
+"Check the files in the specified I<directory> instead of the current "
+"directory."
+msgstr ""
+"Vérifier les fichiers du I<répertoire> indiqué plutôt que ceux du répertoire "
+"actuel."
+
+#. type: TP
+#: ../doc/suspicious-source.1:44
+#, no-wrap
+msgid "B<-m >I<mimetype>, B<--mimetype=>I<mimetype>"
+msgstr "B<-m> I<typemime>, B<--mimetype=>I<typemime>"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:47
+msgid "Add I<mimetype> to list of white-listed MIME types."
+msgstr "Ajouter I<typemime> à la liste des types MIME acceptés."
+
+#. type: TP
+#: ../doc/suspicious-source.1:47
+#, no-wrap
+msgid "B<-e >I<extension>, B<--extension=>I<extension>"
+msgstr "B<-e> I<extension>, B<--extension=>I<extension>"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:50
+msgid "Add I<extension> to list of white-listed extensions."
+msgstr "Ajouter I<extension> à la liste des extensions acceptées."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:54
+msgid ""
+"B<suspicious-source> and this manpage have been written by Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+msgstr ""
+"B<suspicious-source> et cette page de manuel ont été écrites par Benjamin "
+"Drung E<lt>I<bdrung@debian.org>E<gt>."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:55 ../doc/wrap-and-sort.1:102
+msgid "Both are released under the ISC license."
+msgstr "Toutes deux sont publiées sous la License ISC."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:5
+msgid "svnpath - output svn url with support for tags and branches"
+msgstr "svnpath - Afficher l'URL svn avec la gestion des tags et des branches"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:9
+msgid "B<svnpath>"
+msgstr "B<svnpath>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:11
+msgid "B<svnpath tags>"
+msgstr "B<svnpath tags>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:13
+msgid "B<svnpath branches>"
+msgstr "B<svnpath branches>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:15
+msgid "B<svnpath trunk>"
+msgstr "B<svnpath trunk>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:19
+msgid "B<svnpath> is intended to be run in a Subversion working copy."
+msgstr ""
+"B<svnpath> est destiné à être utilisé dans une copie de travail Subversion."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:21
+msgid ""
+"In its simplest usage, B<svnpath> with no parameters outputs the svn url for "
+"the repository associated with the working copy."
+msgstr ""
+"Dans son utilisation la plus simple, B<svnpath> sans paramètre affiche l'URL "
+"svn pour le référentiel associé à la copie de travail."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:24
+msgid ""
+"If a parameter is given, B<svnpath> attempts to instead output the url that "
+"would be used for the tags, branches, or trunk. This will only work if it's "
+"run in the top-level directory that is subject to tagging or branching."
+msgstr ""
+"Si un paramètre est donné, B<svnpath> essaie d'afficher à la place l'URL qui "
+"serait utilisée pour les tags, les branches ou le tronc. Cela ne "
+"fonctionnera que si la commande est lancée dans le niveau supérieur qui sera "
+"sujet aux marquages et aux mises en branches."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:28
+msgid ""
+"For example, if you want to tag what's checked into Subversion as version "
+"1.0, you could use a command like this:"
+msgstr ""
+"Par exemple, si vous voulez marquer ce qui est dans Subversion comme la "
+"version 1.0, vous pouvez utiliser une commande telle que :"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:31
+#, no-wrap
+msgid ""
+" svn cp $(svnpath) $(svnpath tags)/1.0\n"
+"\n"
+msgstr ""
+" svn cp $(svnpath) $(svnpath tags)/1.0\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:33
+msgid ""
+"That's much easier than using svn info to look up the repository url and "
+"manually modifying it to derive the url to use for the tag, and typing in "
+"something like this:"
+msgstr ""
+"C'est beaucoup plus simple que d'utiliser svn info pour regarder l'URL du "
+"référentiel et de la modifier manuellement pour en déduire l'URL à utiliser "
+"pour l'étiquette, et de taper quelque chose comme :"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:37
+#, no-wrap
+msgid ""
+" svn cp svn+ssh://my.server.example/svn/project/trunk svn+ssh://my.server.example/svn/project/tags/1.0\n"
+"\n"
+msgstr ""
+" svn cp svn+ssh://mon.serveur.exemple/svn/project/trunk svn+ssh://mon.serveur.exemple/svn/project/tags/1.0\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:39
+msgid ""
+"svnpath uses a simple heuristic to convert between the trunk, tags, and "
+"branches paths. It replaces the first occurrence of B<trunk>, B<tags>, or "
+"B<branches> with the name of what you're looking for. This will work ok for "
+"most typical Subversion repository layouts."
+msgstr ""
+"svnpath utilise une heuristique simple pour convertir les chemins entre "
+"trunk, tags et branches. Elle remplace la première occurrence de B<trunk>, "
+"B<tags> ou B<branches> avec le nom que vous recherchez. Cela fonctionnera "
+"dans la plupart des configurations Subversion habituelles."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:44
+msgid ""
+"If you have an atypical layout and it does not work, you can add a F<~/."
+"svnpath> file. This file is perl code, which can modify the path in $url. "
+"For example, the author uses this file:"
+msgstr ""
+"Si vous avez une configuration inhabituelle et que cela ne fonctionne pas, "
+"vous pouvez ajouter un fichier F<~/.svnpath>. Ce fichier est du code perl, "
+"qui peut modifier le chemin dans $url. Par exemple :"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:48
+#, no-wrap
+msgid ""
+" #!/usr/bin/perl\n"
+" # svnpath personal override file\n"
+"\n"
+msgstr ""
+" #!/usr/bin/perl\n"
+" # fichier de remplacement personnel pour svnpath\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:51
+#, no-wrap
+msgid ""
+" # For d-i I sometimes work from a full d-i tree branch. Remove that from\n"
+" # the path to get regular tags or branches directories.\n"
+" $url=~s!d-i/(rc|beta)[0-9]+/!!;\n"
+" $url=~s!d-i/sarge/!!;\n"
+" 1\n"
+"\n"
+msgstr ""
+" # Pour l'installateur Debian, il est parfois utile de travailler\n"
+" # avec une branche complète. Il faut donc supprimer cela du chemin\n"
+" # pour obtenir les répertoires tags et branches habituels.\n"
+" $url=~s!d-i/(rc|beta)[0-9]+/!!;\n"
+" $url=~s!d-i/sarge/!!;\n"
+" 1\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:94
+msgid "GPL version 2 or later"
+msgstr "GPL version 2 ou ultérieure"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:98
+msgid "Joey Hess <joey@kitenet.net>"
+msgstr "Joey Hess <joey@kitenet.net>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:82
+msgid ""
+"tagpending - tags bugs that are to be closed in the latest changelog as "
+"pending"
+msgstr ""
+"tagpending - Placer l'étiquette \"pending\" sur tous les bogues à fermer "
+"dans le dernier groupe d'entrée du fichier changelog"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:86
+msgid "B<tagpending> [I<options>]"
+msgstr "B<tagpending> [I<options>]"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:90
+msgid ""
+"B<tagpending> parses debian/changelog to determine which bugs would be "
+"closed if the package were uploaded. Each bug is then marked as pending, "
+"using B<bts>(1) if it is not already so."
+msgstr ""
+"B<tagpending> analyse les fichiers I<debian/changelog> afin de trouver quels "
+"bogues seront fermés si le paquet était envoyé. Chaque bogue est ensuite "
+"marqué avec une étiquette \"pending\", en utilisant B<bts>(1), si elle n'est "
+"pas déjà présente."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:100
+msgid "Check whether any bugs require tagging, but do not actually do so."
+msgstr ""
+"Vérifier si l'étiquette \"pending\" doit être placée sur certains bogues, "
+"sans placer cette étiquette."
+
+#. type: =item
+#: ../scripts/tagpending.pl:102
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:104
+msgid "Do not output any messages."
+msgstr "Ne pas afficher de messages."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:108
+msgid "List each bug checked and tagged in turn."
+msgstr "Lister tous les bogues vérifiés et qui ont l'étiquette."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:112
+msgid "Do not query the BTS, but (re)tag all bugs closed in the changelog."
+msgstr ""
+"Ne pas interroger le BTS, mais (re)placer l'étiquette sur les bogues fermés "
+"dans le I<changelog>."
+
+#. type: =item
+#: ../scripts/tagpending.pl:114
+msgid "B<--comments>"
+msgstr "B<--comments>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:116
+msgid ""
+"Include the changelog header line and the entries relating to the tagged "
+"bugs as comments in the generated mail. This is the default."
+msgstr ""
+"Inclure l'en-tête du journal des modifications et les entrées liées aux "
+"bogues à marquer, en tant que commentaires, dans le courrier créé. C'est le "
+"comportement par défaut."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:119
+msgid ""
+"Note that when used in combination with B<--to>, the header line output will "
+"always be that of the most recent version."
+msgstr ""
+"Remarquez, lors d'une utilisation avec l'option B<--to>, que la ligne d'en-"
+"tête utilisée sera toujours celle de la version la plus récente."
+
+#. type: =item
+#: ../scripts/tagpending.pl:122
+msgid "B<--no-comments>"
+msgstr "B<--no-comments>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:124
+msgid "Do not include changelog entries in the generated mail."
+msgstr ""
+"Ne pas inclure les entrées du fichier I<changelog> dans le courrier créé."
+
+#. type: =item
+#: ../scripts/tagpending.pl:126
+msgid "B<-c>, B<--confirm>"
+msgstr "B<-C>, B<--confirm>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:128
+msgid "Tag bugs as both confirmed and pending."
+msgstr "Placer à la fois l'étiquette \"confirmed\" et \"pending\"."
+
+#. type: =item
+#: ../scripts/tagpending.pl:130
+msgid "B<-t>, B<--to> I<version>"
+msgstr "B<-t>, B<--to> I<version>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:132
+msgid "Parse changelogs for all versions strictly greater than I<version>."
+msgstr ""
+"Analyser les entrées du fichier I<changelog> plus récentes (strictement) que "
+"la I<version>."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:134
+msgid "Equivalent to B<dpkg-parsechangelog>'s B<-v> option."
+msgstr "C'est équivalent à l'option B<-v> de B<dpkg-parsechangelog>."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:138
+msgid ""
+"Display the message which would be sent to the BTS and, except when B<--"
+"noact> was used, prompt for confirmation before sending it."
+msgstr ""
+"Afficher le message qui sera envoyé au BTS et, à moins que l'option B<--"
+"noact> ne soit utilisée, demander une confirmation avant de l'envoyer."
+
+#. type: =item
+#: ../scripts/tagpending.pl:141
+msgid "B<-w>, B<--wnpp>"
+msgstr "B<-w>, B<--wnpp>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:143
+msgid ""
+"For each bug that does not appear to belong to the current package, check "
+"whether it is filed against wnpp. If so, tag it. This allows e.g. ITAs and "
+"ITPs closed in an upload to be tagged."
+msgstr ""
+"Pour chaque bogue qui ne semble pas appartenir au paquet en cours, vérifier "
+"s'il est attribué au paquet wnpp, et si oui l'étiqueter. Cela permet "
+"d'ajouter des étiquettes aux bogues ITA ou ITP qui sont fermés par l'envoi "
+"d'un paquet, par exemple."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:151
+msgid "B<bts>(1) and B<dpkg-parsechangelog>(1)"
+msgstr "B<bts>(1), B<dpkg-parsechangelog>(1)"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:427
+msgid ""
+"This program is Copyright 2008 by Adam D. Barratt <adam@adam-barratt.org.uk>."
+msgstr ""
+"Ce programme a été écrit par Adam D. Barratt <adam@adam-barratt.org.uk>, "
+"Copyright (C) 2008."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:430
+msgid ""
+"The shell script tagpending, on which this program is based, is Copyright "
+"2004 by Joshua Kwan <joshk@triplehelix.org> with changes copyright 2004-7 by "
+"their respective authors."
+msgstr ""
+"Le script shell tagpending, sur lequel se programme est basé est Copyright "
+"2004 par Joshua Kwan <joshk@triplehelix.org> avec des modifications "
+"copyright 2004-2007 par ses différents auteurs."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:25
+msgid "transition-check - check a package list for involvement in transitions"
+msgstr ""
+"transition-check - Vérifier si un paquet est impliqué dans des transitions"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:29
+msgid "B<transition-check> B<--help>|B<--version>"
+msgstr "B<transition-check> B<--help>|B<--version>"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:31
+msgid ""
+"B<transition-check> [B<-f>|B<--filename=>I<FILENAME>] [I<source package "
+"list>]"
+msgstr ""
+"B<transition-check> [B<-f>|B<--filename=>I<FICHIER>] [I<liste de paquets "
+"source>]"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:35
+msgid ""
+"B<transition-check> checks whether any of the listed source packages are "
+"involved in a transition for which uploads to unstable are currently blocked."
+msgstr ""
+"B<transition-check> vérifie si l'un des paquets source listés est impliqué "
+"dans une transition pour laquelle les envois sont bloqués actuellement."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:39
+msgid ""
+"If neither a filename nor a list of packages is supplied, B<transition-"
+"check> will use the source package name from I<debian/control>."
+msgstr ""
+"Si ni un fichier ni une liste de paquets n'est fourni, B<transition-check> "
+"utilisera le nom de paquet source indiqué dans I<debian/control>."
+
+#. type: =item
+#: ../scripts/transition-check.pl:46
+msgid "B<-f>, B<--filename=>I<filename>"
+msgstr "B<-f>, B<--filename=>I<fichier>"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:48
+msgid ""
+"Read a source package name from I<filename>, which should be a Debian "
+"package control file or I<.changes> file, and add that package to the list "
+"of packages to check."
+msgstr ""
+"Lire le nom de paquet source depuis I<fichier>, qui doit être un fichier de "
+"contrôle Debian ou un fichier I<.changes>, et ajoute ce paquet à la liste "
+"des paquets à vérifier."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:56
+msgid ""
+"The exit status indicates whether any of the packages examined were found to "
+"be involved in a transition."
+msgstr ""
+"La valeur de retour indique si un des paquets examinés est impliqué dans une "
+"transition."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:63
+msgid ""
+"Either B<--help> or B<--version> was used, or none of the packages examined "
+"was involved in a transition."
+msgstr ""
+"Soit les options B<--help> ou B<--version> ont été utilisées ou aucun des "
+"paquets examinés n'est impliqué dans une transition."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:68
+msgid "At least one package examined is involved in a current transition."
+msgstr ""
+"Au moins un paquet examiné est impliqué actuellement dans une transition."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:74
+msgid ""
+"This code is copyright by Adam D. Barratt <I<adam@adam-barratt.org.uk>>, all "
+"rights reserved."
+msgstr ""
+"Ce programme est soumis au copyright de Adam D. Barratt <I<adam@adam-barratt."
+"org.uk>>, Tous droits réservés."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:83
+msgid "Adam D. Barratt <I<adam@adam-barratt.org.uk>>"
+msgstr "Adam D. Barratt <I<adam@adam-barratt.org.uk>>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:36
+msgid "uscan - scan/watch upstream sources for new releases of software"
+msgstr ""
+"uscan - Tester ou surveiller la disponibilité d'une nouvelle version amont"
+
+#. type: textblock
+#: ../scripts/uscan.pl:40
+msgid "B<uscan> [I<options>] [I<path>]"
+msgstr "B<uscan> [I<options>] [I<chemin>]"
+
+#. type: textblock
+#: ../scripts/uscan.pl:44
+msgid ""
+"For basic usage, B<uscan> is executed without any arguments from the root of "
+"the Debianized source tree where you see the F<debian/> directory, or a "
+"directory containing multiple source trees."
+msgstr ""
+"Pour une utilisation basique, B<uscan> est exécuté sans aucun paramètre à "
+"partir de la racine d'une arborescence source debianisée où on voit le "
+"répertoire F<debian/> ou un répertoire contenant plusieurs arborescences "
+"sources."
+
+#. type: textblock
+#: ../scripts/uscan.pl:48
+msgid ""
+"Unless --watchfile is given, B<uscan> looks recursively for valid source "
+"trees starting from the current directory (see the below section L<Directory "
+"name checking> for details)."
+msgstr ""
+"Sauf si B<--watchfile> est indiqué, B<uscan> recherche récursivement les "
+"arborescences source valides en partant du répertoire courant (voir la "
+"section L<Vérification du nom du répertoire> ci-dessous pour plus de "
+"détails)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:52
+msgid "For each valid source tree found, typically the following happens:"
+msgstr ""
+"Pour chaque arborescence valide trouvée, typiquement la séquence est la "
+"suivante :"
+
+#. type: =item
+#: ../scripts/uscan.pl:56
+msgid ""
+"* B<uscan> reads the first entry in F<debian/changelog> to determine the "
+"source package name I<< <spkg> >> and the last upstream version."
+msgstr ""
+"* B<uscan> lit la première entrée dans F<debian/changelog> pour déterminer "
+"le nom du paquet source I<< <spkg> >> et la dernière version amont."
+
+#. type: =item
+#: ../scripts/uscan.pl:59
+msgid ""
+"* B<uscan> process the watch lines F<debian/watch> from the top to the "
+"bottom in a single pass."
+msgstr ""
+"* B<uscan> traite les lignes de veille F<debian/watch> de haut en bas en une "
+"passe unique."
+
+#. type: =item
+#: ../scripts/uscan.pl:64
+msgid ""
+"* B<uscan> downloads a web page from the specified I<URL> in F<debian/watch>."
+msgstr ""
+"* B<uscan> télécharge une page web à partir de l'I<URL> spécifiée dans "
+"F<debian/watch>."
+
+#. type: =item
+#: ../scripts/uscan.pl:67
+msgid ""
+"* B<uscan> extracts hrefs pointing to the upstream tarball(s) from the web "
+"page using the specified I<matching-pattern> in F<debian/watch>."
+msgstr ""
+"* B<uscan> extrait les références href pointant vers l'archive amont (ou les "
+"archives) à partir de la page web en utilisant le I<motif_correspondant> "
+"dans F<debian/watch>."
+
+#. type: =item
+#: ../scripts/uscan.pl:70
+msgid ""
+"* B<uscan> downloads the upstream tarball with the highest version newer "
+"than the last upstream version."
+msgstr ""
+"* B<uscan> télécharge l'archive amont avec la version la plus haute plus "
+"récente que la dernière version amont."
+
+#. type: =item
+#: ../scripts/uscan.pl:73
+msgid ""
+"* B<uscan> saves the downloaded tarball to the parent B<../> directory: "
+"I<< ../<upkg>-<uversion>.tar.gz >>"
+msgstr ""
+"* B<uscan> sauvegarde l'archive téléchargée dans le répertoire parent B<../"
+"> : I<< ../<upkg>-<uversion>.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:76
+msgid ""
+"* B<uscan> invokes B<mk-origtargz> to create the source tarball: I<< ../"
+"<spkg>_<oversion>.orig.tar.gz >>"
+msgstr ""
+"* B<uscan> invoque B<mk-origtargz> pour créer l'archive source : I<< ../"
+"<spkg>_<oversion>.orig.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:81
+msgid ""
+"* For a multiple upstream tarball (MUT) package, the secondary upstream "
+"tarball will instead be named I<< ../<spkg>_<oversion>.orig-<component>.tar."
+"gz >>."
+msgstr ""
+"* Pour un paquet MUT (\"multiple upstream tarball\" - archive amont "
+"multiple), l'archive amont secondaire sera plutôt nommée I<< ../"
+"<spkg>_<oversion>.orig-<composante>.tar.gz >>."
+
+#. type: =item
+#: ../scripts/uscan.pl:86
+msgid "* Repeat until all lines in F<debian/watch> are processed."
+msgstr ""
+"* L'action est répétée jusqu'à ce que toutes les lignes de F<debian/watch> "
+"soient traitées."
+
+#. type: =item
+#: ../scripts/uscan.pl:90
+msgid ""
+"* B<uscan> invokes B<uupdate> to create the Debianized source tree: I<< ../"
+"<spkg>-<oversion>/* >>"
+msgstr ""
+"* B<uscan> invoque B<uupdate> pour créer l'arborescence source debianisée : "
+"I<< ../<spkg>-<oversion>/* >>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:95
+msgid "Please note the following."
+msgstr "Veuillez noter les informations suivantes."
+
+#. type: =item
+#: ../scripts/uscan.pl:99
+msgid ""
+"* For simplicity, the compression method used in examples is B<gzip> with B<."
+"gz> suffix. Other methods such as B<xz>, B<bzip2>, and B<lzma> with "
+"corresponding B<xz>, B<bz2> and B<lzma> suffixes may also be used."
+msgstr ""
+"* Pour des raisons de simplicité, la méthode de compression utilisée dans "
+"les exemples est B<gzip> avec le suffixe B<.gz>. Les autres méthodes telles "
+"que B<xz>, B<bzip2> et B<lzma>, avec les suffixes B<xz>, B<bz2> et B<lzma> "
+"correspondants peuvent également être utilisées."
+
+#. type: =item
+#: ../scripts/uscan.pl:103
+msgid ""
+"* The new B<version=4> enables handling of multiple upstream tarball (MUT) "
+"packages but this is a rare case for Debian packaging. For a single "
+"upstream tarball package, there is only one watch line and no I<< ../"
+"<spkg>_<oversion>.orig-<component>.tar.gz >> ."
+msgstr ""
+"* La nouvelle B<version=4> permet la gestion des paquets MUT, mais ce sont "
+"des cas rares parmi les paquets Debian. Pour un paquet d'archive simple, il "
+"n'y a qu'une ligne de veille et pas de I<< ../<spkg>_<oversion>.orig-"
+"<composante>.tar.gz >> ."
+
+#. type: =item
+#: ../scripts/uscan.pl:108
+msgid ""
+"* B<uscan> with the B<--verbose> option produces a human readable report of "
+"B<uscan>'s execution."
+msgstr ""
+"* B<uscan> avec l'option B<--verbose> produit un rapport lisible de son "
+"exécution."
+
+#. type: =item
+#: ../scripts/uscan.pl:111
+msgid ""
+"* B<uscan> with the B<--debug> option produces a human readable report of "
+"B<uscan>'s execution including internal variable states."
+msgstr ""
+"* B<uscan> avec l'option B<--debug> produit un rapport lisible de son "
+"exécution avec l'état des variables internes."
+
+#. type: =item
+#: ../scripts/uscan.pl:114
+msgid ""
+"* B<uscan> with the B<--extra-debug> option produces a human readable report "
+"of B<uscan>'s execution including internal variable states and remote "
+"content during \"search\" step."
+msgstr ""
+"* B<uscan> avec l'option B<--extra-debug> produit un rapport lisible de son "
+"exécution avec l'état des variables internes et le contenu distant lors de "
+"la phase \"recherche\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:118
+msgid ""
+"* B<uscan> with the B<--dehs> option produces an upstream package status "
+"report in XML format for other programs such as the Debian External Health "
+"System."
+msgstr ""
+"* B<uscan> avec l'option B<--dehs> produit un rapport d'état du paquet amont "
+"au format XML pour que d'autres programmes tels que Debian External Health "
+"System."
+
+#. type: =item
+#: ../scripts/uscan.pl:122
+msgid ""
+"* The primary objective of B<uscan> is to help identify if the latest "
+"version upstream tarball is used or not; and to download the latest upstream "
+"tarball. The ordering of versions is decided by B<dpkg --compare-versions>."
+msgstr ""
+"* L'objectif premier d'B<uscan> est d'aider à déterminer si c'est bien la "
+"dernière version de l'archive amont qui est utilisée et de télécharger cette "
+"version d'archive. L'ordre des versions est déterminée par B<dpkg --compare-"
+"versions>."
+
+#. type: =item
+#: ../scripts/uscan.pl:126
+msgid ""
+"* B<uscan> with the B<--safe> option limits the functionality of B<uscan> to "
+"its primary objective. Both the repacking of downloaded files and updating "
+"of the source tree are skipped to avoid running unsafe scripts. This also "
+"changes the default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+"* L'option B<--safe> d'B<uscan> limite ses fonctionnalités à ses objectifs "
+"premiers. À la fois le repaquetage des fichiers téléchargés et la mise à "
+"jour de l'arborescence source sont sautés pour éviter l'exécution de scripts "
+"non sécurisés. Cela change aussi les options par défaut à B<--no-download> "
+"et B<--skip-signature>."
+
+#. type: =head1
+#: ../scripts/uscan.pl:133
+msgid "FORMAT OF THE WATCH FILE"
+msgstr "FORMAT DU FICHIER DE VEILLE"
+
+#. type: textblock
+#: ../scripts/uscan.pl:135
+msgid ""
+"The current version 4 format of F<debian/watch> can be summarized as follows:"
+msgstr ""
+"Le format de la version 4 actuelle de F<debian/watch> peut être résumé comme "
+"suit :"
+
+#. type: =item
+#: ../scripts/uscan.pl:139
+msgid "* Leading spaces and tabs are dropped."
+msgstr "* Les espaces et les tabulations de début sont supprimées."
+
+#. type: =item
+#: ../scripts/uscan.pl:141
+msgid "* Empty lines are dropped."
+msgstr "* Les lignes vides sont supprimées."
+
+#. type: =item
+#: ../scripts/uscan.pl:143
+msgid "* A line started by B<#> (hash) is a comment line and dropped."
+msgstr ""
+"* Une ligne qui débute par B<#> (dièse) est une ligne de commentaire et elle "
+"est supprimée."
+
+#. type: =item
+#: ../scripts/uscan.pl:145
+msgid ""
+"* A single B<\\> (back slash) at the end of a line is dropped and the next "
+"line is concatenated after removing leading spaces and tabs. The "
+"concatenated line is parsed as a single line. (The existence or non-"
+"existence of the space before the tailing single B<\\> is significant.)"
+msgstr ""
+"* Un B<\\> unique (barre inverse oblique) à la fin d'une ligne est supprimé "
+"et la ligne suivante est concaténée après la suppression des espaces et des "
+"tabulations de début. La ligne concaténée est analysée comme une seule "
+"ligne. (L'existence ou l'inexistence d'une espace avant le B<\\> unique "
+"final est signifiant.)"
+
+#. type: =item
+#: ../scripts/uscan.pl:150
+msgid "* The first non-comment line is:"
+msgstr "* La première ligne non commentée est la suivante :"
+
+#. type: =item
+#: ../scripts/uscan.pl:154
+msgid "B<version=4>"
+msgstr "B<version=4>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:158
+msgid "This is a required line and the recommended version number."
+msgstr ""
+"Il s'agit d'une ligne obligatoire et c'est le numéro de la version "
+"recommandée."
+
+#. type: textblock
+#: ../scripts/uscan.pl:160
+msgid ""
+"If you use \"B<version=3>\" instead here, some features may not work as "
+"documented here. See L<HISTORY AND UPGRADING>."
+msgstr ""
+"Si vous utilisez ici \"B<version=3>\" à la place, certaines fonctionnalités "
+"peuvent ne pas fonctionner comme cela est documenté ici. Voir L<HISTORIQUE "
+"ET MISE À NIVEAU>."
+
+#. type: =item
+#: ../scripts/uscan.pl:163
+msgid ""
+"* The following non-comment lines (watch lines) specify the rules for the "
+"selection of the candidate upstream tarball URLs and are in one of the "
+"following three formats:"
+msgstr ""
+"* Les lignes suivantes non commentées (lignes de veille) précisent les "
+"règles de sélection des URL d'archive amont candidates et sont dans un des "
+"trois formats suivants :"
+
+#. type: =item
+#: ../scripts/uscan.pl:169
+msgid ""
+"* B<opts=\"> I<...> B<\"> B<http://>I<URL> I<matching-pattern> [I<version> "
+"[I<script>]]"
+msgstr ""
+"* B<opts=\"> I<...> B<\"> B<http://>I<URL> I<motif_correspondant> "
+"[I<version> [I<script>]]"
+
+#. type: =item
+#: ../scripts/uscan.pl:171
+msgid "* B<http://>I<URL> I<matching-pattern> [I<version> [I<script>]]"
+msgstr "* B<http://>I<URL> I<motif_correspondant> [I<version> [I<script>]]"
+
+#. type: =item
+#: ../scripts/uscan.pl:173
+msgid "* B<opts=\"> I<...> B<\">"
+msgstr "* B<opts=\"> I<...> B<\">"
+
+#. type: textblock
+#: ../scripts/uscan.pl:177
+msgid "Here,"
+msgstr "Ici,"
+
+#. type: =item
+#: ../scripts/uscan.pl:181
+msgid ""
+"* B<opts=\"> I<...> B<\"> specifies the behavior of B<uscan>. See L<WATCH "
+"FILE OPTIONS>."
+msgstr ""
+"* B<opts=\"> I<...> B<\"> précise le comportement d'B<uscan>. Voir L<OPTIONS "
+"DE FICHIER DE VEILLE>."
+
+#. type: =item
+#: ../scripts/uscan.pl:184
+msgid ""
+"* B<http://>I<URL> specifies the web page where upstream publishes the link "
+"to the latest source archive."
+msgstr ""
+"* B<http://>I<URL> précise la page web où l'amont publie le lien vers la "
+"dernière archive source."
+
+#. type: =item
+#: ../scripts/uscan.pl:189
+msgid "* B<https://>I<URL> may also be used, as may"
+msgstr "* B<https://>I<URL> peut être aussi utilisé, comme peut l'être"
+
+#. type: =item
+#: ../scripts/uscan.pl:191
+msgid "* B<ftp://>I<URL>"
+msgstr "* B<ftp://>I<URL>"
+
+#. type: =item
+#: ../scripts/uscan.pl:193
+msgid ""
+"* Some parts of I<URL> may be in the regex match pattern surrounded between "
+"B<(> and B<)> such as B</foo/bar-([\\.\\d]+)/>. (If multiple directories "
+"match, the highest version is picked.) Otherwise, the I<URL> is taken as "
+"verbatim."
+msgstr ""
+"* Certaines parties d'I<URL> peuvent être dans le motif de correspondance "
+"d'expression rationnelle entourées par B<(> et B<)> comme B</toto/titi-([\\."
+"\\d]+)/>. Si plusieurs répertoires correspondent, la version la plus élevée "
+"est choisie.) Autrement, l'I<URL> est prise textuellement."
+
+#. type: =item
+#: ../scripts/uscan.pl:200
+msgid ""
+"* I<matching-pattern> specifies the full string matching pattern for hrefs "
+"in the web page. See L<WATCH FILE EXAMPLES>."
+msgstr ""
+"* I<motif_correspondant> précise le motif de chaîne complet correspondant "
+"aux références hrefs dans la page web. Voir L<EXEMPLES DE FICHIER DE VEILLE>."
+
+#. type: =item
+#: ../scripts/uscan.pl:205
+msgid ""
+"* All matching parts in B<(> and B<)> are concatenated with B<.> (period) "
+"to form the upstream version."
+msgstr ""
+"* Toutes les parties correspondantes entre B<(> et B<)> sont concaténées "
+"avec un B<.> (point) pour former la version amont."
+
+#. type: =item
+#: ../scripts/uscan.pl:208
+msgid ""
+"* If the hrefs do not contain directories, you can combine this with the "
+"previous entry. I.e., B<http://>I<URL>B</>I<matching-pattern> ."
+msgstr ""
+"* Si les références href ne contiennent pas de répertoires, il est possible "
+"de les combiner avec l'entrée précédente. C'est-à-dire, B<http://>I<URL>B</"
+">I<motif_correspondant>."
+
+#. type: =item
+#: ../scripts/uscan.pl:213
+msgid ""
+"* I<version> restricts the upstream tarball which may be downloaded. The "
+"newest available version is chosen in each case."
+msgstr ""
+"* I<version> restreint le choix d'archive amont pouvant être téléchargée. La "
+"version la plus récente disponible est choisie dans tous les cas."
+
+#. type: =item
+#: ../scripts/uscan.pl:218
+msgid ""
+"* B<debian> I<(default)> requires the downloading upstream tarball to be "
+"newer than the version obtained from F<debian/changelog>."
+msgstr ""
+"* B<debian> réclame que l'archive amont à télécharger soit plus récente que "
+"la version obtenue à partir de F<debian/changelog>."
+
+#. type: =item
+#: ../scripts/uscan.pl:221
+msgid ""
+"* I<version-number> such as B<12.5> requires the upstream tarball to be "
+"newer than the I<version-number>."
+msgstr ""
+"* Un I<numéro_de_version> tel que B<12.5> requiert que l'archive amont soit "
+"plus récente que le I<numéro_de_version>."
+
+#. type: =item
+#: ../scripts/uscan.pl:224
+msgid ""
+"* B<same> requires the downloaded version of the secondary tarballs to be "
+"exactly the same as the one for the first upstream tarball downloaded. "
+"(Useful only for MUT)"
+msgstr ""
+"* B<same> requiert que la version téléchargée des archives secondaires soit "
+"exactement la même que celle de la première archive amont téléchargée. "
+"(Utile uniquement pour les paquets MUT)"
+
+#. type: =item
+#: ../scripts/uscan.pl:228
+msgid ""
+"* B<previous> restricts the version of the signature file. (Used with "
+"pgpmode=previous)"
+msgstr ""
+"* B<previous> limite la version du fichier de signature. (Utilisé avec "
+"pgpmode=previous)"
+
+#. type: =item
+#: ../scripts/uscan.pl:231
+msgid ""
+"* B<ignore> does not restrict the version of the secondary tarballs. (Maybe "
+"useful for MUT)"
+msgstr ""
+"* B<ignore> ne limite pas la version des archives secondaires. (Peut-être "
+"utile pour les paquets MUT)"
+
+#. type: =item
+#: ../scripts/uscan.pl:234
+msgid ""
+"* B<group> requires the downloading upstream tarball to be newer than the "
+"version obtained from F<debian/changelog>. Package version is the "
+"concatenation of all \"group\" upstream version."
+msgstr ""
+"* B<group> réclame que l'archive amont à télécharger soit plus récente que "
+"la version obtenue à partir de F<debian/changelog>. La version du paquet est "
+"la concaténation de toutes les versions amont."
+
+#. type: =item
+#: ../scripts/uscan.pl:238
+msgid ""
+"* B<checksum> requires the downloading upstream tarball to be newer than the "
+"version obtained from F<debian/changelog>. Package version is the "
+"concatenation of the version of the main tarball, followed by a checksum of "
+"all the tarballs using the \"checksum\" version system. At least the main "
+"upstream source has to be declared as \"group\"."
+msgstr ""
+"* B<checksum> exige que l'archive amont à télécharger soit plus récente que "
+"la version obtenue à partir de F<debian/changelog>. La version du paquet est "
+"la concaténation de la version de la prinicpale source, suivie de la somme "
+"de contrôle de toutes les versions amont utilisant le système de version "
+"\"checksum\". À minima, la source principale doit être déclarée comme "
+"\"group\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:246
+msgid ""
+"* I<script> is executed at the end of B<uscan> execution with appropriate "
+"arguments provided by B<uscan> I<(default: no action)>."
+msgstr ""
+"* I<script> est exécuté à la fin de l'exécution d'B<uscan> avec les "
+"paramètres appropriés fournis par B<uscan> I<(défaut: pas d'action)>."
+
+#. type: =item
+#: ../scripts/uscan.pl:251
+msgid ""
+"* The typical Debian package is a non-native package made from one upstream "
+"tarball. Only a single line of the watch line in one of the first two "
+"formats is usually used with its I<version> set to B<debian> and I<script> "
+"set to B<uupdate>."
+msgstr ""
+"* Le paquet Debian typique est un paquet non natif fait à partir d'une "
+"archive amont. Seulement une ligne unique du fichier de veille dans un des "
+"deux premiers formats est habituellement utilisée avec sa I<version> réglée "
+"à B<debian> et I<script> réglé à B<uupdate>."
+
+#. type: =item
+#: ../scripts/uscan.pl:256
+msgid "* A native package should not specify I<script>."
+msgstr "* Un paquet natif ne devrait pas spécifier de I<script>."
+
+#. type: =item
+#: ../scripts/uscan.pl:258
+msgid ""
+"* A multiple upstream tarball (MUT) package should specify B<uupdate> as "
+"I<script> in the last watch line and should skip specifying I<script> in the "
+"rest of the watch lines."
+msgstr ""
+"* Un paquet MUT (\"multiple upstream tarball\" – archive amont multiple) "
+"devrait indiquer B<uupdate> comme I<script> dans la dernière ligne de veille "
+"et ne devrait pas indiquer de I<script> dans le reste des lignes de veille."
+
+#. type: =item
+#: ../scripts/uscan.pl:264
+msgid ""
+"* The last format of the watch line is useful to set the persistent "
+"parameters: B<user-agent>, B<compression>. If this format is used, this "
+"must be followed by the I<URL> defining watch line(s)."
+msgstr ""
+"* Le dernier format des lignes de veille est utile pour configurer des "
+"paramètres permanents : B<user-agent>, B<compression>. Si ce format est "
+"utilisé, ces paramètres doivent être suivis de la (ou des) lignes(s) de "
+"veille définissant l'I<URL>."
+
+#. type: =item
+#: ../scripts/uscan.pl:268
+msgid ""
+"* [ and ] in the above format are there to mark the optional parts and "
+"should not be typed."
+msgstr ""
+"* [and] dans le format ci-dessus sont ici pour marquer les parties "
+"optionnelles et ne devraient pas être tapées."
+
+#. type: textblock
+#: ../scripts/uscan.pl:275
+msgid ""
+"There are a few special strings which are substituted by B<uscan> to make it "
+"easy to write the watch file."
+msgstr ""
+"Il y a quelques chaînes spéciales qui sont remplacées par B<uscan> pour "
+"faciliter l'écriture du fichier de veille."
+
+#. type: =item
+#: ../scripts/uscan.pl:280
+msgid "B<@PACKAGE@>"
+msgstr "B<@PACKAGE@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:282
+msgid ""
+"This is substituted with the source package name found in the first line of "
+"the F<debian/changelog> file."
+msgstr ""
+"Cette chaîne est remplacée par le nom de paquet source trouvé dans la "
+"première ligne du fichier F<debian/changelog>."
+
+#. type: =item
+#: ../scripts/uscan.pl:285
+msgid "B<@ANY_VERSION@>"
+msgstr "B<@ANY_VERSION@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:287
+msgid "This is substituted by the legal upstream version regex (capturing)."
+msgstr ""
+"Cette chaîne est remplacée par l'expression rationnelle de la version amont "
+"légale (capture)."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:289
+#, no-wrap
+msgid ""
+" [-_]?v?(\\d[\\-+\\.:\\~\\da-zA-Z]*)\n"
+"\n"
+msgstr ""
+" [-_]?v?(\\d[\\-+\\.:\\~\\da-zA-Z]*)\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:291
+msgid "B<@ARCHIVE_EXT@>"
+msgstr "B<@ARCHIVE_EXT@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:293
+msgid ""
+"This is substituted by the typical archive file extension regex (non-"
+"capturing)."
+msgstr ""
+"Cette chaîne est remplacée par l'expression rationnelle de l'extension "
+"habituelle de fichier d'archive (sans capture)."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:295
+#, no-wrap
+msgid ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))\n"
+"\n"
+msgstr ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:297
+msgid "B<@SIGNATURE_EXT@>"
+msgstr "B<@SIGNATURE_EXT@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:299
+msgid ""
+"This is substituted by the typical signature file extension regex (non-"
+"capturing)."
+msgstr ""
+"Cette chaîne est remplacée par l'expression rationnelle de l'extension "
+"habituelle de fichier de signature (sans capture)."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:301
+#, no-wrap
+msgid ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))'(?:\\.(?:asc|pgp|gpg|sig|sign))'\n"
+"\n"
+msgstr ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))'(?:\\.(?:asc|pgp|gpg|sig|sign))'\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:303
+msgid "B<@DEB_EXT@>"
+msgstr "B<@DEB_EXT@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:305
+msgid "This is substituted by the typical Debian extension regexp (capturing)."
+msgstr ""
+"Cette chaîne est remplacée par l'expression rationnelle de habituelle de "
+"Debian (sans capture)."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:307
+#, no-wrap
+msgid ""
+" [\\+~](debian|dfsg|ds|deb)(\\.)?(\\d+)?$\n"
+"\n"
+msgstr ""
+" [\\+~](debian|dfsg|ds|deb)(\\.)?(\\d+)?$\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:311
+msgid ""
+"Some file extensions are not included in the above intentionally to avoid "
+"false positives. You can still set such file extension patterns manually."
+msgstr ""
+"Certaines extensions de fichiers ne sont volontairement pas incluses dans la "
+"liste précédente pour éviter des faux positifs. Il vous est encore possible "
+"de rajouter ces motifs d'extension de fichier manuellement."
+
+#. type: =head1
+#: ../scripts/uscan.pl:314
+msgid "WATCH FILE OPTIONS"
+msgstr "OPTIONS DE FICHIER DE VEILLE"
+
+#. type: textblock
+#: ../scripts/uscan.pl:316
+msgid ""
+"B<uscan> reads the watch options specified in B<opts=\"> I<...> B<\"> to "
+"customize its behavior. Multiple options I<option1>, I<option2>, "
+"I<option3>, ... can be set as B<opts=\">I<option1>B<,> I<option2>B<,> "
+"I<option3>B<,> I< ... >B<\"> . The double quotes are necessary if options "
+"contain any spaces."
+msgstr ""
+"B<uscan> lit les options de veille spécifiées dans B<opts=\"> I<...> B<\"> "
+"pour personnaliser son comportement. De multiples options I<option1>, "
+"I<option2>, I<option3>, ..., peuvent être configurées de cette manière : "
+"B<opts=\">I<option1>B<,> I<option2>B<,> I<option3>B<,> I< ... >B<\">. Les "
+"guillemets doubles sont nécessaires si les options contiennent des espaces."
+
+#. type: textblock
+#: ../scripts/uscan.pl:321
+msgid ""
+"Unless otherwise noted as persistent, most options are valid only within "
+"their containing watch line."
+msgstr ""
+"À moins qu'elles ne soient notées par ailleurs comme persistantes, la "
+"plupart des options ne sont valables que dans la ligne de veille qui les "
+"contient."
+
+#. type: textblock
+#: ../scripts/uscan.pl:324
+msgid "The available watch options are:"
+msgstr "Les options de veille disponibles sont :"
+
+#. type: =item
+#: ../scripts/uscan.pl:328
+msgid "B<component=>I<component>"
+msgstr "B<component=>I<composante>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:330
+msgid ""
+"Set the name of the secondary source tarball as I<< <spkg>_<oversion>.orig-"
+"<component>.tar.gz >> for a MUT package."
+msgstr ""
+"Configurer le nom de l'archive source secondaire comme I<< <spkg>_<oversion>."
+"orig-<composante>.tar.gz >> pour un paquet MUT."
+
+#. type: =item
+#: ../scripts/uscan.pl:333
+msgid "B<ctype=>I<component-type>"
+msgstr "B<ctype=>I<component-type>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:335
+msgid ""
+"Set the type of component I<(only \"nodejs\" and \"perl\" are available for "
+"now)>. This will help uscan to find current version if component version is "
+"ignored."
+msgstr ""
+"Indique le type du composant I<(seuls \"nodejs\" et \"perl\" sont disponible "
+"actuellement)>. Ceci aide uscan à trouver la version courante si la version "
+"du composant est ignorée."
+
+#. type: textblock
+#: ../scripts/uscan.pl:338
+msgid ""
+"When using B<ctype=nodejs>, uscan tries to find a version in C<package."
+"json>, when using B<ctype=perl>, uscan tries to find a version in C<META."
+"json>. If a version is found, it is used as current version for this "
+"component, regardless version found in Debian version string. This permits a "
+"better change detection when using I<ignore> or I<checksum> as Debian "
+"version."
+msgstr ""
+"Lorsque B<ctype=nodejs> est utilisé, uscan recherche une version dans "
+"C<package.json>, lorsque B<ctype=perl> est utilisé, uscan recherche une "
+"version dans C<META.json>. Si une version est trouvée, elle est utilisée "
+"comme version courante du composant, en ignorant la version trouvée dans la "
+"chaîne de version de Debian. Ceci permet une meilleure détection des "
+"changements lorsque I<ignore> ou I<checksum> sont utilisés dans la version "
+"Debian."
+
+#. type: =item
+#: ../scripts/uscan.pl:344
+msgid "B<compression=>I<method>"
+msgstr "B<compression=>I<méthode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:346
+msgid ""
+"Set the compression I<method> when the tarball is repacked (persistent)."
+msgstr ""
+"Configurer la I<méthode> de compression quand l'archive est rempaquetée "
+"(persistant)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:348
+msgid ""
+"Available I<method> values are what mk-origtargz supports, so B<xz>, B<gzip> "
+"(alias B<gz>), B<bzip2> (alias B<bz2>), B<lzma>, B<default>. The default "
+"method is currently B<xz>. When uscan is launched in a debian source "
+"repository which format is \"1.0\" or undefined, the method switches to "
+"B<gzip>."
+msgstr ""
+"Les valeurs de I<méthode> disponibles sont B<xz>, B<gzip> (alias B<gz>), "
+"B<bzip2> (alias B<bz2>) B<lzma> et B<default>. La valeur par défaut est "
+"B<xz>. Lorsque uscan est lancé dans un répertoire source Debian et que le "
+"format est \"1.0\" ou n'est pas défini, la méthode par défaut devient "
+"B<gzip>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:354
+msgid ""
+"Please note the repacking of the upstream tarballs by B<mk-origtargz> "
+"happens only if one of the following conditions is satisfied:"
+msgstr ""
+"Veuillez noter que le rempaquetage des archives amont par B<mk-origtargz> ne "
+"se produit que si une des conditions suivantes est satisfaite :"
+
+#. type: =item
+#: ../scripts/uscan.pl:359
+msgid ""
+"* B<USCAN_REPACK> is set in the devscript configuration. See L<DEVSCRIPT "
+"CONFIGURATION VARIABLES>."
+msgstr ""
+"* B<USCAN_REPACK> est configuré dans la configuration de devscript. Voir "
+"L<VARIABLES DE CONFIGURATION DE DEVSCRIPT>."
+
+#. type: =item
+#: ../scripts/uscan.pl:362
+msgid "* B<--repack> is set on the commandline. See <COMMANDLINE OPTIONS>."
+msgstr ""
+"* B<--repack> est configuré en ligne de commande. Voir <OPTIONS DE LIGNE DE "
+"COMMANDE>."
+
+#. type: =item
+#: ../scripts/uscan.pl:364
+msgid "* B<repack> is set in the watch line as B<opts=\"repack,>I<...>B<\">."
+msgstr ""
+"* B<repack> est configuré sur la ligne de veille de cette manière : "
+"B<opts=\"repack,>I<...>B<\">."
+
+#. type: =item
+#: ../scripts/uscan.pl:366
+msgid "* The upstream archive is of B<zip> type including B<jar>, B<xpi>, ..."
+msgstr "* L'archive amont est de type B<zip>, y compris B<jar>, B<xpi>, ..."
+
+#. type: =item
+#: ../scripts/uscan.pl:368
+msgid "* The upstream archive is of B<zstd> (Zstandard) type."
+msgstr "* L'archive amont est de type B<zstdi> (Zstandard)."
+
+#. type: =item
+#: ../scripts/uscan.pl:370
+msgid ""
+"* B<Files-Excluded> or B<Files-Excluded->I<component> stanzas are set in "
+"F<debian/copyright> to make B<mk-origtargz> invoked from B<uscan> remove "
+"files from the upstream tarball and repack it. See L<COPYRIGHT FILE "
+"EXAMPLES> and mk-origtargz(1)."
+msgstr ""
+"* Les alinéas B<Files-Excluded> ou B<Files-Excluded->I<composante> sont "
+"configurés dans F<debian/copyright> pour que B<mk-origtargz> invoqué à "
+"partir d'B<uscan> supprime les fichiers de l'archive amont et la "
+"rempaquette. Voir L<EXEMPLES DE FICHIER DE COPYRIGHT> et mk-origtargz(1)."
+
+#. type: =item
+#: ../scripts/uscan.pl:377
+msgid "B<repack>"
+msgstr "B<repack>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:379
+msgid ""
+"Force repacking of the upstream tarball using the compression I<method>."
+msgstr ""
+"Forcer le rempaquetage de l'archive amont avec la I<méthode> de compression."
+
+#. type: =item
+#: ../scripts/uscan.pl:381
+msgid "B<repacksuffix=>I<suffix>"
+msgstr "B<repacksuffix=>I<suffixe>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:383
+msgid ""
+"Add I<suffix> to the Debian package upstream version only when the source "
+"tarball is repackaged. This rule should be used only for a single upstream "
+"tarball package."
+msgstr ""
+"Ajouter un I<suffixe> à la version du paquet Debian amont seulement lorsque "
+"l'archive source est rempaquetée. Cette règle peut être utilisée seulement "
+"pour un unique paquet d'archive amont."
+
+#. type: =item
+#: ../scripts/uscan.pl:387
+msgid "B<mode=>I<mode>"
+msgstr "B<mode=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:389
+msgid "Set the archive download I<mode>."
+msgstr "Configurer le I<mode> de téléchargement de l'archive."
+
+#. type: =item
+#: ../scripts/uscan.pl:393
+msgid "B<LWP>"
+msgstr "B<LWP>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:395
+msgid ""
+"This mode is the default one which downloads the specified tarball from the "
+"archive URL on the web. Automatically internal B<mode> value is updated to "
+"either B<http> or B<ftp> by URL."
+msgstr ""
+"Il s'agit du mode par défaut qui télécharge l'archive spécifiée à partir de "
+"l'URL sur le web. La valeur interne B<mode> est automatiquement mise à jour "
+"soit vers B<http> soit vers B<ftp> d'après l'URL."
+
+#. type: textblock
+#: ../scripts/uscan.pl:401
+msgid ""
+"This mode accesses the upstream git archive directly with the B<git> command "
+"and packs the source tree with the specified tag via I<matching-pattern> "
+"into I<spkg-version>B<.tar.xz>."
+msgstr ""
+"Ce mode accède directement à l'archive git amont avec la commande B<git> et "
+"empaquette l'arborescence source avec l'étiquette spécifiée par "
+"I<motif_correspondant> dans I<spkg-version>B<.tar.xz>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:405
+msgid ""
+"If the upstream publishes the released tarball via its web interface, please "
+"use it instead of using this mode. This mode is the last resort method."
+msgstr ""
+"Si l'amont fournit l'archive publiée au travers de son interface web, "
+"veuillez utiliser celle-ci plutôt que ce mode. Ce mode est le dernier "
+"recours."
+
+#. type: textblock
+#: ../scripts/uscan.pl:408
+msgid ""
+"For git mode, I<matching-pattern> specifies the full string matching pattern "
+"for tags instead of hrefs. If I<matching-pattern> is set to B<refs/tags/"
+">I<tag-matching-pattern>, B<uscan> downloads source from the B<refs/tags/"
+">I<matched-tag> of the git repository. The upstream version is extracted "
+"from concatenating the matched parts in B<(> ... B<)> with B<.> . See "
+"L<WATCH FILE EXAMPLES>."
+msgstr ""
+"Dans le mode git, I<motif_correspondant> spécifie le motif correspondant "
+"complet de la chaîne pour les étiquettes au lieu des références href. Si "
+"I<motif_correspondant> est réglé à B<refs/tags/>I<étiquette-"
+"motif_correspondant>, B<uscan> télécharge le fichier source à partir de "
+"B<refs/tags/>I<étiquette-correspondante> du dépôt git. La version amont est "
+"extraite en concaténant les parties correspondantes de B<(> ... B<)> avec B<."
+">. Voir L<EXEMPLES DE FICHIER DE VEILLE>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:415
+msgid ""
+"If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads source from the "
+"B<HEAD> of the git repository and the pertinent I<version> is automatically "
+"generated with the date and hash of the B<HEAD> of the git repository."
+msgstr ""
+"Si I<motif_correspondant> est réglé à B<HEAD>, B<uscan> télécharge le "
+"fichier source à partir du B<HEAD> du dépôt git et la I<version> pertinente "
+"est automatiquement générée avec la date et l'empreinte du B<HEAD> du dépôt "
+"git."
+
+#. type: textblock
+#: ../scripts/uscan.pl:419
+msgid ""
+"If I<matching-pattern> is set to B<refs/heads/>I<branch>, B<uscan> downloads "
+"source from the named I<branch> of the git repository."
+msgstr ""
+"Si I<motif_correspondant> est réglé à B<refs/heads/>I<branche>, B<uscan> "
+"télécharge le fichier source à partir de la I<branche> nommée du dépôt git."
+
+#. type: textblock
+#: ../scripts/uscan.pl:422
+msgid ""
+"The local repository is temporarily created as a bare git repository "
+"directory under the destination directory where the downloaded archive is "
+"generated. This is normally erased after the B<uscan> execution. This "
+"local repository is kept if B<--debug> option is used."
+msgstr ""
+"Le dépôt local est créé temporairement comme un sous-répertoire de dépôt git "
+"brut du répertoire de destination où l'archive téléchargée est générée. Il "
+"est normalement effacé après l'exécution d'B<uscan>. Ce dépôt local est "
+"conservé si l'option B<--debug> est utilisée."
+
+#. type: textblock
+#: ../scripts/uscan.pl:427
+msgid ""
+"If the current directory is a git repository and the searched repository is "
+"listed among the registered \"remotes\", then uscan will use it instead of "
+"cloning separately. The only local change is that uscan will run a "
+"\"fetch\" command to refresh the repository."
+msgstr ""
+"Si le répertoire courant est un dépôt git et si le dépôt recherché est listé "
+"dans les sources amont I<(\"remote\")>, alors uscan l'utilisera au lieu de "
+"dupliquer le dépôt dans un répertoire temporaire. Le seul changement dans le "
+"répertoire local est une mise à jour I<(\"fetch\")>."
+
+#. type: =item
+#: ../scripts/uscan.pl:432
+msgid "B<svn>"
+msgstr "B<svn>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:434
+msgid ""
+"This mode accesses the upstream Subversion archive directly with the B<svn> "
+"command and packs the source tree."
+msgstr ""
+"Ce mode accède directement à l'archive Subversion amont avec la commande "
+"B<svn> et empaquette l'arborescence source."
+
+#. type: textblock
+#: ../scripts/uscan.pl:437
+msgid ""
+"For svn mode, I<matching-pattern> specifies the full string matching pattern "
+"for directories under Subversion repository directory, specified via URL. "
+"The upstream version is extracted from concatenating the matched parts in "
+"B<(> ... B<)> with B<.> ."
+msgstr ""
+"Dans le mode svn, I<motif_correspondant> spécifie le motif correspondant "
+"complet de la chaîne pour les répertoires su dépôt Subversion. La version "
+"amont est extraite en concaténant les parties correspondantes de B<(> ... "
+"B<)> avec B<.>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:442
+msgid ""
+"If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads the latest "
+"source tree of the URL. The upstream version is then constructed by "
+"appending the last revision of the URL to B<0.0~svn>."
+msgstr ""
+"Si I<matching-pattern> est réglé à B<HEAD>, B<uscan> télécharge la dernière "
+"arborescence de l'URL. La version amont est construite en ajoutant "
+"B<0.0~svn> à la dernière révision."
+
+#. type: textblock
+#: ../scripts/uscan.pl:446
+msgid ""
+"As commit signing is not possible with Subversion, the default B<pgpmode> is "
+"set to B<none> when B<mode=svn>. Settings of B<pgpmode> other than "
+"B<default> and B<none> are reported as errors."
+msgstr ""
+"Comme la signature des commits n'est pas possible avec Subversion, "
+"B<pgpmode> est mis d'office à B<none> lorsque B<mode=svn>. Les valeurs de "
+"B<pgpmode> autres que B<default> et B<none> affichent des erreurs."
+
+#. type: =item
+#: ../scripts/uscan.pl:452
+msgid "B<pretty=>I<rule>"
+msgstr "B<pretty=>I<règle>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:454
+msgid ""
+"Set the upstream version string to an arbitrary format as an optional "
+"B<opts> argument when the I<matching-pattern> is B<HEAD> or B<heads/"
+">I<branch> for B<git> mode. For the exact syntax, see the B<git-log> "
+"manpage under B<tformat>. The default is B<pretty=0.0~git%cd.%h>. No "
+"B<uversionmangle> rules is applicable for this case."
+msgstr ""
+"Configurer la chaîne de version amont à un format arbitraire comme un "
+"argument optionnel de B<opts> quand le I<motif_correspondant> est B<HEAD> ou "
+"B<heads/>I<branch> pour le mode B<git>. Pour connaître la syntaxe exacte, "
+"voir la page de manuel de B<git-log> avec B<tformat>. Le format par défaut "
+"est B<pretty=0.0~git%cd.%h>. Aucune règle B<uversionmangle> n'est applicable "
+"dans ce cas."
+
+#. type: textblock
+#: ../scripts/uscan.pl:460
+msgid ""
+"When B<pretty=describe> is used, the upstream version string is the output "
+"of the \"B<git describe --tags | sed s/-/./g>\" command instead. For "
+"example, if the commit is the B<5>-th after the last tag B<v2.17.12> and its "
+"short hash is B<ged992511>, then the string is B<v2.17.12.5.ged992511> . "
+"For this case, it is good idea to add B<uversionmangle=s/^/0.0~/> or "
+"B<uversionmangle=s/^v//> to make the upstream version string compatible with "
+"Debian. B<uversionmangle=s/^v//> may work as well. Please note that in "
+"order for B<pretty=describe> to function well, upstream need to avoid "
+"tagging with random alphabetic tags."
+msgstr ""
+"Lorsque B<pretty=describe> est utilisé, la chaîne de version amont est la "
+"sortie de la commande \"B<git describe --tags | sed s/-/./g>\"requi à la "
+"place. Par exemple, si l'envoi (commit) est le B<cinquième> après la "
+"dernière étiquette B<v2.17.12> et son empreinte courte est B<ged992511>, "
+"alors, la chaîne est B<v2.17.12.5.ged992511>. Dans ce cas, c'est une bonne "
+"idée d'ajouter B<uversionmangle=s/^/0.0~/> ou B<uversionmangle=s/^v//> pour "
+"rendre la chaîne de la version amont compatible avec Debian. "
+"B<uversionmangle=s/^v//> peut aussi bien fonctionner. Veuillez noter qu'afin "
+"que B<pretty=describe> fonctionne bien, l'amont doit éviter d'étiqueter avec "
+"des étiquettes alphabétiques aléatoires."
+
+#. type: textblock
+#: ../scripts/uscan.pl:469
+msgid ""
+"The B<pretty=describe> forces to set B<gitmode=full> to make a full local "
+"clone of the repository automatically."
+msgstr ""
+"L'option B<pretty=describe> contraint à configurer B<gitmode=full> pour "
+"créer automatiquement un clone local complet du dépôt."
+
+#. type: =item
+#: ../scripts/uscan.pl:472
+msgid "B<date=>I<rule>"
+msgstr "B<date=>I<règle>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:474
+msgid ""
+"Set the date string used by the B<pretty> option to an arbitrary format as "
+"an optional B<opts> argument when the I<matching-pattern> is B<HEAD> or "
+"B<heads/>I<branch> for B<git> mode. For the exact syntax, see the "
+"B<strftime> manpage. The default is B<date=%Y%m%d>."
+msgstr ""
+"Configurer la chaîne de date utilisée par l'option B<pretty> à un format "
+"arbitraire comme un paramètre optionnel de B<opts> quand le "
+"I<motif_correspondant> est B<HEAD> ou B<heads/>I<branch> pour le mode "
+"B<git>. Pour connaître la syntaxe exacte, voir la page de manuel "
+"B<strftime>. Le format par défaut est B<date=%Y%m%d>."
+
+#. type: =item
+#: ../scripts/uscan.pl:479
+msgid "B<gitexport=>I<mode>"
+msgstr "B<gitexport=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:481
+msgid ""
+"Set the git archive export operation I<mode>. The default is "
+"B<gitexport=default>. Set this to B<gitexport=all> to include all files in "
+"the .orig.tar archive, ignoring any I<export-ignore> git attributes defined "
+"by the upstream."
+msgstr ""
+"Indique le I<mode> d'opération des exports d'archive git. La valeur par "
+"défaut est B<gitexport=default>. Mettre ceci à B<gitexport=all> pour inclure "
+"tous les fichiers dans l'archive .orig.tar, en ignorant tous les attributs "
+"git I<export-ignore> définis par l'amont."
+
+#. type: textblock
+#: ../scripts/uscan.pl:486
+msgid "This option is valid only in git mode."
+msgstr "Cette option n'est valide qu'en mode \"git\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:488
+msgid "B<gitmode=>I<mode>"
+msgstr "B<gitmode=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:490
+msgid ""
+"Set the git clone operation I<mode>. The default is B<gitmode=shallow>. For "
+"some dumb git server, you may need to manually set B<gitmode=full> to force "
+"full clone operation."
+msgstr ""
+"Configurer le I<mode> de l'opération git clone. La valeur par défaut est "
+"B<gitmode=shallow>. Pour certains serveurs git simples (\"dumb\"), il peut "
+"être nécessaire de configurer soi-même la valeur B<gitmode=full> pour "
+"imposer une opération de clonage complète."
+
+#. type: textblock
+#: ../scripts/uscan.pl:494
+msgid ""
+"If the current directory is a git repository and the searched repository is "
+"listed among the registered \"remotes\", then uscan will use it instead of "
+"cloning separately."
+msgstr ""
+"Si le répertoire courant est un dépôt git et si le dépôt recherché est listé "
+"dans les sources amont I<(\"remote\")>, alors uscan l'utilisera au lieu de "
+"dupliquer le dépôt dans un répertoire temporaire."
+
+#. type: =item
+#: ../scripts/uscan.pl:498
+msgid "B<pgpmode=>I<mode>"
+msgstr "B<pgpmode=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:500
+msgid "Set the PGP/GPG signature verification I<mode>."
+msgstr "Configurer le I<mode> de vérification de signature PGP/GPG."
+
+#. type: =item
+#: ../scripts/uscan.pl:504
+msgid "B<auto>"
+msgstr "B<auto>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:506
+msgid ""
+"B<uscan> checks possible URLs for the signature file and autogenerates a "
+"B<pgpsigurlmangle> rule to use it."
+msgstr ""
+"B<uscan> vérifie les URL possibles pour le fichier de signature et génère "
+"automatiquement une règle B<pgpsigurlmangle> pour l'utiliser."
+
+#. type: =item
+#: ../scripts/uscan.pl:509
+msgid "B<default>"
+msgstr "B<default>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:511
+msgid ""
+"Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature "
+"file URL string from the upstream tarball URL. (default)"
+msgstr ""
+"Utiliser B<pgpsigurlmangle=>I<règles> pour créer la chaîne d'URL du fichier "
+"de signature amont candidat à partir de l'URL de l'archive amont. (Par "
+"défaut)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:514
+msgid ""
+"If the specified B<pgpsigurlmangle> is missing, B<uscan> checks possible "
+"URLs for the signature file and suggests adding a B<pgpsigurlmangle> rule."
+msgstr ""
+"Si le B<pgpsigurlmangle> spécifié est manquant, B<uscan> vérifie les URL "
+"possible pour le fichier de signature et suggère l'ajout d'une règle "
+"B<pgpsigurlmangle>."
+
+#. type: =item
+#: ../scripts/uscan.pl:517
+msgid "B<mangle>"
+msgstr "B<mangle>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:519
+msgid ""
+"Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature "
+"file URL string from the upstream tarball URL."
+msgstr ""
+"Utiliser B<pgpsigurlmangle=>I<règles> pour créer la chaîne d'URL du fichier "
+"de signature amont candidat à partir de l'URL de l'archive amont."
+
+#. type: =item
+#: ../scripts/uscan.pl:522
+msgid "B<next>"
+msgstr "B<next>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:524
+msgid ""
+"Verify this downloaded tarball file with the signature file specified in the "
+"next watch line. The next watch line must be B<pgpmode=previous>. "
+"Otherwise, no verification occurs."
+msgstr ""
+"Vérifier ce fichier d'archive téléchargé avec le fichier de signature "
+"spécifié dans la ligne de veille suivante. La ligne de veille suivante doit "
+"être B<pgpmode=previous>. Autrement, aucune vérification n'est effectuée."
+
+#. type: =item
+#: ../scripts/uscan.pl:528
+msgid "B<previous>"
+msgstr "B<previous>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:530
+msgid ""
+"Verify the downloaded tarball file specified in the previous watch line with "
+"this signature file. The previous watch line must be B<pgpmode=next>."
+msgstr ""
+"Vérifier le fichier d'archive téléchargé spécifié dans la ligne de veille "
+"précédente avec ce fichier de signature. La ligne de veille précédente doit "
+"être B<pgpmode=next>."
+
+#. type: =item
+#: ../scripts/uscan.pl:533
+msgid "B<self>"
+msgstr "B<self>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:535
+msgid ""
+"Verify the downloaded file I<foo.ext> with its self signature and extract "
+"its content tarball file as I<foo>."
+msgstr ""
+"Vérifier le fichier I<toto.ext> téléchargé avec sa propre signature et "
+"extraire son fichier archive de contenu en I<toto>."
+
+#. type: =item
+#: ../scripts/uscan.pl:538
+msgid "B<gittag>"
+msgstr "B<gittag>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:540
+msgid "Verify tag signature if B<mode=git>."
+msgstr "Vérifie la signature du tag si B<mode=git>."
+
+#. type: =item
+#: ../scripts/uscan.pl:542
+msgid "B<none>"
+msgstr "B<none>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:544
+msgid "No signature available. (No warning.)"
+msgstr "Pas de signature disponible. (Pas d'alerte.)"
+
+#. type: =item
+#: ../scripts/uscan.pl:548
+msgid "B<searchmode=>I<mode>"
+msgstr "B<searchmode=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:550
+msgid "Set the parsing search mode."
+msgstr "Configurer le mode de recherche."
+
+#. type: =item
+#: ../scripts/uscan.pl:554
+msgid ""
+"B<html> I<(default)>: search pattern in \"href\" parameter of E<lt>aE<gt> "
+"HTML tags"
+msgstr ""
+"B<html> I<(défaut))>: recherche l'expression dans les paramètres \"href\" "
+"des tags HTML E<lt>aE<gt>"
+
+#. type: =item
+#: ../scripts/uscan.pl:557
+msgid "B<plain>: search pattern in the full page"
+msgstr "B<plain>: recherche l'expression dans la page entière"
+
+#. type: textblock
+#: ../scripts/uscan.pl:559
+msgid ""
+"This is useful if page content is not HTML but JSON. Example with npmjs.com:"
+msgstr ""
+"C'est utile si le contenu de la page n'est pas au format HTML mais au format "
+"JSON. Exemple avec npmjs.com :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:562
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-(\\d[\\d\\.]*)@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-(\\d[\\d\\.]*)@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:569
+msgid "B<decompress>"
+msgstr "B<decompress>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:571
+msgid ""
+"Decompress compressed archive before the pgp/gpg signature verification."
+msgstr ""
+"Décompresser l'archive compressée avant la vérification de la signature PGP/"
+"GPG."
+
+#. type: =item
+#: ../scripts/uscan.pl:573
+msgid "B<bare>"
+msgstr "B<bare>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:575
+msgid ""
+"Disable all site specific special case code such as URL redirector uses and "
+"page content alterations. (persistent)"
+msgstr ""
+"Désactiver tout le code \"special code\" spécifique au site telles que les "
+"utilisations de redirecteur d'URL et les altérations de contenu de page. "
+"(Persistant)"
+
+#. type: =item
+#: ../scripts/uscan.pl:578
+msgid "B<user-agent=>I<user-agent-string>"
+msgstr "B<user-agent=>I<chaîne_user-agent>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:580
+msgid ""
+"Set the user-agent string used to contact the HTTP(S) server as I<user-agent-"
+"string>. (persistent)"
+msgstr ""
+"Configurer la chaîne user-agent utilisée pour contacter le serveur HTTP(S) "
+"comme I<chaîne_user-agent>. (Persistant)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:583
+msgid ""
+"B<user-agent> option should be specified by itself in the watch line without "
+"I<URL>, to allow using semicolons and commas in it."
+msgstr ""
+"L'option B<user-agent> devrait être précisée par elle-même dans la ligne de "
+"veille sans I<URL>, pour permettre l'utilisation de point-virgules et de "
+"virgules."
+
+#. type: =item
+#: ../scripts/uscan.pl:586
+msgid "B<pasv>, B<passive>"
+msgstr "B<pasv>, B<passive>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:588
+msgid "Use PASV mode for the FTP connection."
+msgstr "Utiliser le mode passif (\"PASV\") pour les connexions FTP."
+
+#. type: textblock
+#: ../scripts/uscan.pl:590
+msgid ""
+"If PASV mode is required due to the client side network environment, set "
+"B<uscan> to use PASV mode via L<COMMANDLINE OPTIONS> or L<DEVSCRIPT "
+"CONFIGURATION VARIABLES> instead."
+msgstr ""
+"Si le mode PASV (passif) est requis à cause de l'environnement réseau côté "
+"client, configurer B<uscan> pour qu'il utilise le mode PASV avec les "
+"L<OPTIONS DE LIGNE DE COMMANDE> ou plutôt avec les L<VARIABLES DE "
+"CONFIGURATION DE DEVSCRIPT>."
+
+#. type: =item
+#: ../scripts/uscan.pl:594
+msgid "B<active>, B<nopasv>"
+msgstr "B<active>, B<nopasv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:596
+msgid "Don't use PASV mode for the FTP connection."
+msgstr "Ne pas utiliser le mode PASV (passif) pour les connexions FTP."
+
+#. type: =item
+#: ../scripts/uscan.pl:598
+msgid "B<unzipopt=>I<options>"
+msgstr "B<unzipopt> [I<options>]"
+
+#. type: textblock
+#: ../scripts/uscan.pl:600
+msgid ""
+"Add the extra options to use with the B<unzip> command, such as B<-a>, B<-"
+"aa>, and B<-b>, when executed by B<mk-origtargz>."
+msgstr ""
+"Ajouter les options supplémentaires à utiliser avec la commande B<unzip> "
+"telles que B<-a>, B<-aa> et B<-b> lors de l'exécution par B<mk-origtargz>."
+
+#. type: =item
+#: ../scripts/uscan.pl:603
+msgid "B<dversionmangle=>I<rules>"
+msgstr "B<dversionmangle=>I<règles>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:605
+msgid ""
+"Normalize the last upstream version string found in F<debian/changelog> to "
+"compare it to the available upstream tarball version. Removal of the Debian "
+"specific suffix such as B<s/@DEB_EXT@//> is usually done here."
+msgstr ""
+"Normaliser la dernière chaîne de version amont trouvée dans F<debian/"
+"changelog> pour la comparer avec la version de l'archive amont disponible. "
+"Le retrait de suffixes spécifiques à Debian tels que B<s/\\+dfsg\\d*$//> est "
+"habituellement réalisé à ce moment là."
+
+#. type: textblock
+#: ../scripts/uscan.pl:609
+msgid ""
+"You can also use B<dversionmangle=auto>, this is exactly the same than "
+"B<dversionmangle=s/@DEB_EXT@//>"
+msgstr ""
+"Il est également possible d'utiliser B<dversionmangle=auto>, ce qui est "
+"exactement la même chose que B<dversionmangle=s/@DEB_EXT@//>"
+
+#. type: =item
+#: ../scripts/uscan.pl:612
+msgid "B<dirversionmangle=>I<rules>"
+msgstr "B<dirversionmangle=>I<règles>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:614
+msgid ""
+"Normalize the directory path string matching the regex in a set of "
+"parentheses of B<http://>I<URL> as the sortable version index string. This "
+"is used as the directory path sorting index only."
+msgstr ""
+"Normaliser la chaîne du chemin du répertoire correspondant à l'expression "
+"rationnelle dans un ensemble de parenthèses de B<http://>I<URL> comme chaîns "
+"d'index de version triable. Cela est utilisé seulement comme l'index triable "
+"de chemin de répertoire."
+
+#. type: textblock
+#: ../scripts/uscan.pl:618 ../scripts/uscan.pl:634
+msgid "Substitution such as B<s/PRE/~pre/; s/RC/~rc/> may help."
+msgstr "Une substitution telle que B<s/PRE/~pre/; s/RC/~rc/> peut aider."
+
+#. type: =item
+#: ../scripts/uscan.pl:620
+msgid "B<pagemangle=>I<rules>"
+msgstr "B<pagemangle=>I<règles>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:622
+msgid ""
+"Normalize the downloaded web page string. (Don't use this unless this is "
+"absolutely needed. Generally, B<g> flag is required for these I<rules>.)"
+msgstr ""
+"Normaliser la chaîne de page web téléchargée. (À n'utiliser qu'en cas de "
+"nécessité absolue. En général, l'étiquette B<g> est requise pour ces "
+"I<règles>.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:625
+msgid ""
+"This is handy if you wish to access Amazon AWS or Subversion repositories in "
+"which <a href=\"...\"> is not used."
+msgstr ""
+"Cela est pratique si vous souhaitez accéder à Amazon AWS ou à des dépôts "
+"Subversion dans lesquels <a href=\"...\"> n'est pas utilisé."
+
+#. type: =item
+#: ../scripts/uscan.pl:628
+msgid "B<uversionmangle=>I<rules>"
+msgstr "B<uversionmangle=>I<règles>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:630
+msgid ""
+"Normalize the candidate upstream version strings extracted from hrefs in the "
+"source of the web page. This is used as the version sorting index when "
+"selecting the latest upstream version."
+msgstr ""
+"Normaliser les chaînes de version amont candidate extraites des références "
+"href dans le code source de la page web. Cela est utilisé comme l'index de "
+"tri de version lors de la sélection de la dernière version amont."
+
+#. type: =item
+#: ../scripts/uscan.pl:636
+msgid "B<versionmangle=>I<rules>"
+msgstr "B<versionmangle=>I<règles>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:638
+msgid ""
+"Syntactic shorthand for B<uversionmangle=>I<rules>B<, "
+"dversionmangle=>I<rules>"
+msgstr ""
+"Il s'agit d'un raccourci syntactique pour B<uversionmangle=>I<règles>,"
+"B<dversionmangle>=I<règles>"
+
+#. type: =item
+#: ../scripts/uscan.pl:640
+msgid "B<hrefdecode=percent-encoding>"
+msgstr "B<hrefdecode=percent-encoding>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:642
+msgid ""
+"Convert the selected upstream tarball href string from the percent-encoded "
+"hexadecimal string to the decoded normal URL string for obfuscated web "
+"sites. Only B<percent-encoding> is available and it is decoded with B<s/"
+"%([A-Fa-f\\d]{2})/chr hex $1/eg>."
+msgstr ""
+"Convertir la chaîne des références href de l'archive amont sélectionnée de "
+"lachaîne hexadécimale encodée en pourcent vers la chaîne de l'URL normale "
+"décodée pour les sites web embrouillés. Seulement B<percent-encoding> "
+"estdisponible et il est décodé avec la commande B<s/%([A-Fa-f\\d]{2})/chr "
+"hex $1/eg>."
+
+#. type: =item
+#: ../scripts/uscan.pl:647
+msgid "B<downloadurlmangle=>I<rules>"
+msgstr "B<downloadurlmangle=>I<règles>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:649
+msgid ""
+"Convert the selected upstream tarball href string into the accessible URL "
+"for obfuscated web sites. This is run after B<hrefdecode>."
+msgstr ""
+"Convertir la chaîne des références href de l'archive amont sélectionnée dans "
+"l'URL accessible des sites web embrouillés. L'exécution intervient après "
+"B<hrefdecode>."
+
+#. type: =item
+#: ../scripts/uscan.pl:652
+msgid "B<filenamemangle=>I<rules>"
+msgstr "B<filenamemangle=>I<règles>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:654
+msgid ""
+"Generate the upstream tarball filename from the selected href string if "
+"I<matching-pattern> can extract the latest upstream version I<< <uversion> "
+">> from the selected href string. Otherwise, generate the upstream tarball "
+"filename from its full URL string and set the missing I<< <uversion> >> from "
+"the generated upstream tarball filename."
+msgstr ""
+"Générer le nom de fichier de l'archive amont à partir de la chaîne des "
+"références href sélectionnée si I<motif_correspondant> peut extraire l'I<< "
+"<uversion> >> de la dernière version amont à partir de la chaîne des "
+"références href sélectionnée. Autrement, générer le nom de fichier de "
+"l'archive amont à partir de la chaîne de l'URL complète et configurer l'I<< "
+"<uversion> >> manquant à partir du nom de fichier de l'archive amont généré."
+
+#. type: textblock
+#: ../scripts/uscan.pl:660
+msgid ""
+"Without this option, the default upstream tarball filename is generated by "
+"taking the last component of the URL and removing everything after any '?' "
+"or '#'."
+msgstr ""
+"Sans cette option, le nom de fichier de l'archive amont par défaut est "
+"généré en prenant la dernière composante de l'URL et en retirant tout ce qui "
+"est après un \"?\" ou un \"#\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:664
+msgid "B<pgpsigurlmangle=>I<rules>"
+msgstr "B<pgpsigurlmangle=>I<règles>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:666
+msgid ""
+"Generate the candidate upstream signature file URL string from the upstream "
+"tarball URL."
+msgstr ""
+"Générer la chaîne d'URL du fichier de signature amont candidat à partir de "
+"l'URL de l'archive amont."
+
+#. type: =item
+#: ../scripts/uscan.pl:669
+msgid "B<oversionmangle=>I<rules>"
+msgstr "B<oversionmangle=>I<règles>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:671
+msgid ""
+"Generate the version string I<< <oversion> >> of the source tarball I<< "
+"<spkg>_<oversion>.orig.tar.gz >> from I<< <uversion> >>. This should be "
+"used to add a suffix such as B<+dfsg> to a MUT package."
+msgstr ""
+"Générer la chaîne de version I<< <oversion> >> de l'archive source I<< "
+"<spkg><spkg>_<oversion>.orig.tar.gz >> à partir de I<< <uversion> >>. Cela "
+"devrait être utilisé pour ajouter un suffixe tel que B<+dfsg> à un paquet "
+"MUT."
+
+#. type: textblock
+#: ../scripts/uscan.pl:677
+msgid ""
+"Here, the mangling rules apply the I<rules> to the pertinent string. "
+"Multiple rules can be specified in a mangling rule string by making a "
+"concatenated string of each mangling I<rule> separated by B<;> (semicolon)."
+msgstr ""
+"Ici, les règles de manipulation appliquent les I<règles> à la chaîne "
+"pertinente. De multiples règles peuvent être précisées dans une chaîne de "
+"règle de manipulation en créant une chaîne concaténée de chaque I<règle> de "
+"manipulation séparée par des B<;> (point-virgule)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:681
+msgid ""
+"Each mangling I<rule> cannot contain B<;> (semicolon), B<,> (comma), or "
+"B<\"> (double quote)."
+msgstr ""
+"Les I<règles> de manipulation ne peuvent pas comporter de B<;> (point-"
+"virgule), B<,> (virgule) ni de B<\"> (guillemet double)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:684
+msgid ""
+"Each mangling I<rule> behaves as if a Perl command \"I<$string> B<=~> "
+"I<rule>\" is executed. There are some notable details."
+msgstr ""
+"Chaque I<règle> de manipulation se comporte comme si une commande Perl "
+"\"I<$string> B<=~> I<règle>\" était exécutée. Il y a quelques particularités "
+"notables."
+
+#. type: =item
+#: ../scripts/uscan.pl:689
+msgid "* I<rule> may only use the B<s>, B<tr>, and B<y> operations."
+msgstr ""
+"* Une I<règle> peut seulement utiliser les opérations B<s>, B<tr> et B<y>."
+
+#. type: =item
+#: ../scripts/uscan.pl:693
+msgid "B<s/>I<regex>B</>I<replacement>B</>I<options>"
+msgstr "B<s/>I<expression_rationnelle>B</>I<remplacement>B</>I<options>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:695
+msgid ""
+"Regex pattern match and replace the target string. Only the B<g>, B<i> and "
+"B<x> flags are available. Use the B<$1> syntax for back references (No "
+"B<\\1> syntax). Code execution is not allowed (i.e. no B<(?{})> or B<(??"
+"{})> constructs)."
+msgstr ""
+"Rechercher la correspondance du motif d'expression rationnelle et remplacer "
+"la chaîne cible. Les étiquettes B<g>, B<i> et B<x> sont les seules "
+"disponibles. Utiliser la syntaxe B<$1> pour des références arrières (pas de "
+"syntaxe B<\\1>). L'exécution de code n'est pas permise (c'est-à-dire pas de "
+"constructions B<(?{})> ou B<(??{})>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:700
+msgid "B<y/>I<source>B</>I<dest>B</> or B<tr/>I<source>B</>I<dest>B</>"
+msgstr "B<y/>I<source>B</>I<dest>B</> ou B<tr/>I<source>B</>I<dest>B</>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:702
+msgid "Transliterate the characters in the target string."
+msgstr "Translittérer les caractères de la chaîne cible."
+
+#. type: =head1
+#: ../scripts/uscan.pl:708
+msgid "EXAMPLE OF EXECUTION"
+msgstr "EXEMPLE D'EXÉCUTION"
+
+#. type: textblock
+#: ../scripts/uscan.pl:710
+msgid ""
+"B<uscan> reads the first entry in F<debian/changelog> to determine the "
+"source package name and the last upstream version."
+msgstr ""
+"B<uscan> lit la première entrée dans F<debian/changelog> pour déterminer le "
+"nom du paquet source et la dernière version amont."
+
+#. type: textblock
+#: ../scripts/uscan.pl:713
+msgid "For example, if the first entry of F<debian/changelog> is:"
+msgstr "Par exemple, si la première entrée de F<debian/changelog> est :"
+
+#. type: =item
+#: ../scripts/uscan.pl:717
+msgid "* I<< bar >> (B<3:2.03+dfsg-4>) unstable; urgency=low"
+msgstr "* I<< titi >> (B<3:2.03+dfsg-4>) unstable; urgency=low"
+
+#. type: textblock
+#: ../scripts/uscan.pl:721
+msgid ""
+"then, the source package name is I<< bar >> and the last Debian package "
+"version is B<3:2.03+dfsg-4>."
+msgstr ""
+"alors, le nom du paquet source est I<< titi >> et la version la plus récente "
+"du paquet Debian est B<3:2.03+dfsg-4>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:724
+msgid ""
+"The last upstream version is normalized to B<2.03+dfsg> by removing the "
+"epoch and the Debian revision."
+msgstr ""
+"La dernière version amont est normalisée à B<2.03+dfsg> en retirant l'epoch "
+"et la révision Debian."
+
+#. type: textblock
+#: ../scripts/uscan.pl:727
+msgid ""
+"If the B<dversionmangle> rule exists, the last upstream version is further "
+"normalized by applying this rule to it. For example, if the last upstream "
+"version is B<2.03+dfsg> indicating the source tarball is repackaged, the "
+"suffix B<+dfsg> is removed by the string substitution B<s/\\+dfsg\\d*$//> to "
+"make the (dversionmangled) last upstream version B<2.03> and it is compared "
+"to the candidate upstream tarball versions such as B<2.03>, B<2.04>, ... "
+"found in the remote site. Thus, set this rule as:"
+msgstr ""
+"Si la règle B<dversionmangle> existe, la dernière version amont est "
+"normalisée plus profondément en lui appliquant cette règle. Par exemple, si "
+"la dernière version amont est B<2.03+dfsg> indiquant que l'archive source a "
+"été rempaquetée, le suffixe B<+dfsg> est retiré par la substitution de "
+"chaîne B<s/\\+dfsg\\d*$//> pour produire la dernière version amont B<2.03> "
+"(traitée avec dversionmangle) et est comparée aux versions d'archive amont "
+"candidates comme B<2.03>, B<2.04>, ..., qui se trouvent sur le site distant. "
+"Donc, configurer la règle ainsi :"
+
+#. type: =item
+#: ../scripts/uscan.pl:737
+msgid "* B<opts=\"dversionmangle=s/\\+dfsg\\d*$//\">"
+msgstr "* B<opts=\"dversionmangle=s/\\+dfsg\\d*$//\">"
+
+#. type: textblock
+#: ../scripts/uscan.pl:741
+msgid ""
+"B<uscan> downloads a web page from B<http://>I<URL> specified in F<debian/"
+"watch>."
+msgstr ""
+"B<uscan> télécharge une page web à partir de l'adresse B<http://>I<URL> "
+"spécifiée dans F<debian/watch>."
+
+#. type: =item
+#: ../scripts/uscan.pl:746
+msgid ""
+"* If the directory name part of I<URL> has no parentheses, B<(> and B<)>, it "
+"is taken as verbatim."
+msgstr ""
+"* Si la partie nom du répertoire de l'I<URL> n'a pas de parenthèse, B<(> et "
+"B<)>, il est pris tel quel."
+
+#. type: =item
+#: ../scripts/uscan.pl:749
+msgid ""
+"* If the directory name part of I<URL> has parentheses, B<(> and B<)>, then "
+"B<uscan> recursively searches all possible directories to find a page for "
+"the newest version. If the B<dirversionmangle> rule exists, the generated "
+"sorting index is used to find the newest version. If a specific version is "
+"specified for the download, the matching version string has priority over "
+"the newest version."
+msgstr ""
+"* Si la partie nom du répertoire de l'I<URL> a des parenthèses B<(> et B<)>, "
+"alors B<uscan> cherche de façon récursive tous les répertoires possibles "
+"pour trouver une page avec la nouvelle version. Si la règle "
+"B<dirversionmangle> existe, l'index de tri généré est utilisé pour trouver "
+"la version la plus récente. Si une version particulière est spécifiée pour "
+"le téléchargement, la chaîne de version correspondante a la priorité sur la "
+"version la plus récente."
+
+#. type: textblock
+#: ../scripts/uscan.pl:758
+msgid "For example, this B<http://>I<URL> may be specified as:"
+msgstr ""
+"Par exemple, cette adresse B<http://>I<URL> peut être spécifiée ainsi :"
+
+#. type: =item
+#: ../scripts/uscan.pl:762
+msgid "* B<http://www.example.org/@ANY_VERSION@/>"
+msgstr "* B<http://www.example.org/@ANY_VERSION@/>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:766
+msgid ""
+"Please note the trailing B</> in the above to make B<@ANY_VERSION@> as the "
+"directory."
+msgstr ""
+"Veuillez noter le B</> final dans l'adresse ci-dessus pour faire de "
+"B<@ANY_VERSION@> le répertoire."
+
+#. type: textblock
+#: ../scripts/uscan.pl:769
+msgid ""
+"If the B<pagemangle> rule exists, the whole downloaded web page as a string "
+"is normalized by applying this rule to it. This is very powerful tool and "
+"needs to be used with caution. If other mangling rules can be used to "
+"address your objective, do not use this rule."
+msgstr ""
+"Si la règle B<pagemangle> existe, la totalité de la page web téléchargée, "
+"considérée comme une chaîne, est normalisée en y appliquant la règle. C'est "
+"un outil très puissant qui doit être utilisé avec prudence. Si d'autres "
+"règles de manipulation peuvent être utilisées pour répondre à vos objectifs, "
+"n'utilisez pas cette règle."
+
+#. type: textblock
+#: ../scripts/uscan.pl:774
+msgid ""
+"The downloaded web page is scanned for hrefs defined in the B<< <a href=\" "
+">> I<...> B<< \"> >> tag to locate the candidate upstream tarball hrefs. "
+"These candidate upstream tarball hrefs are matched by the Perl regex pattern "
+"I<matching-pattern> such as B<< DL-(?:[\\d\\.]+?)/foo-(.+)\\.tar\\.gz >> to "
+"narrow down the candidates. This pattern match needs to be anchored at the "
+"beginning and the end. For example, candidate hrefs may be:"
+msgstr ""
+"Des références href, définies dans l'étiquette B<< <a href=\" >> I<...> B<< "
+"\"> >>, sont recherchées dans la page web téléchargée pour localiser les "
+"références de l'archive amont candidate. Ces références de l'archive amont "
+"candidate sont sélectionnées par le motif d'expression rationnelle Perl "
+"I<motif-correspondant>, tel que B<< DL-(?:[\\d\\.]+?)/toto-(.+)\\.tar\\.gz "
+">> pour réduire le nombre de candidates. Ce motif de sélection doit être "
+"borné au début et à la fin. Par exemple, les références candidates peuvent "
+"être :"
+
+#. type: =item
+#: ../scripts/uscan.pl:783
+msgid "* B<< DL-2.02/foo-2.02.tar.gz >>"
+msgstr "* B<< DL-2.02/toto-2.02.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:785
+msgid "* B<< DL-2.03/foo-2.03.tar.gz >>"
+msgstr "* B<< DL-2.03/toto-2.03.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:787
+msgid "* B<< DL-2.04/foo-2.04.tar.gz >>"
+msgstr "* B<< DL-2.04/toto-2.04.tar.gz >>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:791
+msgid ""
+"Here the matching string of B<(.+)> in I<matching-pattern> is considered as "
+"the candidate upstream version. If there are multiple matching strings of "
+"capturing patterns in I<matching-pattern>, they are all concatenated with B<."
+"> (period) to form the candidate upstream version. Make sure to use the non-"
+"capturing regex such as B<(?:[\\d\\.]+?)> instead for the variable text "
+"matching part unrelated to the version."
+msgstr ""
+"Ici, la chaîne de sélection B<(.+)> dans I<motif-correspondant> est "
+"considérée comme la version amont candidate. S'il y a plusieurs chaînes "
+"correspondantes de motifs de capture dans I<motif-correspondant>, elles sont "
+"toutes concaténées avec un point (B<.>) pour former la version amont "
+"candidate. Il convient de s'assurer d'utiliser des expressions rationnelles "
+"non capturantes telles que B<(?:[\\d\\.]+?)> à la place pour la partie "
+"correspondant à du texte variable sans rapport avec la version."
+
+#. type: textblock
+#: ../scripts/uscan.pl:798
+msgid "Then, the candidate upstream versions are:"
+msgstr "Les versions amont candidates sont alors :"
+
+#. type: =item
+#: ../scripts/uscan.pl:802
+msgid "* B<2.02>"
+msgstr "* B<2.02>"
+
+#. type: =item
+#: ../scripts/uscan.pl:804
+msgid "* B<2.03>"
+msgstr "* B<2.03>"
+
+#. type: =item
+#: ../scripts/uscan.pl:806
+msgid "* B<2.04>"
+msgstr "* B<2.04>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:810
+msgid ""
+"The downloaded tarball filename is basically set to the same as the filename "
+"in the remote URL of the selected href."
+msgstr ""
+"Le nom de fichier de l'archive téléchargée est simplement fixé comme le nom "
+"de fichier dans l'URL distante de la référence href sélectionnée."
+
+#. type: textblock
+#: ../scripts/uscan.pl:813
+msgid ""
+"If the B<uversionmangle> rule exists, the candidate upstream versions are "
+"normalized by applying this rule to them. (This rule may be useful if the "
+"upstream version scheme doesn't sort correctly to identify the newest "
+"version.)"
+msgstr ""
+"Si la règle <uversionmangle> existe, les versions amont candidates sont "
+"normalisées en leur appliquant cette règle. (Cette règle peut être utilisée "
+"si le schéma de la version amont ne permet pas un tri qui identifie "
+"correctement la version la plus récente.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:817
+msgid ""
+"The upstream tarball href corresponding to the newest (uversionmangled) "
+"candidate upstream version newer than the (dversionmangled) last upstream "
+"version is selected."
+msgstr ""
+"La référence href de l'archive amont correspondant à la version amont "
+"candidate la plus récente (traitée par uversionmangle), plus récente que la "
+"dernière version amont (traitée par dversionmangle) est sélectionnée."
+
+#. type: textblock
+#: ../scripts/uscan.pl:821
+msgid ""
+"If multiple upstream tarball hrefs corresponding to a single version with "
+"different extensions exist, the highest compression one is chosen. "
+"(Priority: B<< tar.xz > tar.lzma > tar.bz2 > tar.gz >>.)"
+msgstr ""
+"Si plusieurs références href d'archive amont correspondant à une version "
+"unique existent avec différentes extensions, c'est la plus forte compression "
+"qui est choisie. (Ordre de priorité : B<< tar.xz > tar.lzma > tar.bz2 > tar."
+"gz >>.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:825
+msgid ""
+"If the selected upstream tarball href is the relative URL, it is converted "
+"to the absolute URL using the base URL of the web page. If the B<< <base "
+"href=\" >> I< ... > B<< \"> >> tag exists in the web page, the selected "
+"upstream tarball href is converted to the absolute URL using the specified "
+"base URL in the base tag, instead."
+msgstr ""
+"Si la référence href de l'archive amont sélectionnée est une URL relative, "
+"elle est convertie en URL absolue avec l'URL de base de la page web. Si "
+"l'étiquette B<< <base href=\" >> I< ... > B<< \"> >> existe sur la page web, "
+"la référence href de l'archive amont est convertie en URL absolue en "
+"utilisant plutôt l'URL de base spécifiée dans l'étiquette de base."
+
+#. type: textblock
+#: ../scripts/uscan.pl:831
+msgid ""
+"If the B<downloadurlmangle> rule exists, the selected upstream tarball href "
+"is normalized by applying this rule to it. (This is useful for some sites "
+"with the obfuscated download URL.)"
+msgstr ""
+"Si la règle B<downloadurlmangle> existe, la référence href de l'archive "
+"amont sélectionnée est normalisée en lui appliquant cette règle. (Cela est "
+"utile sur certains sites avec des URL de téléchargement embrouillées.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:835
+msgid ""
+"If the B<filenamemangle> rule exists, the downloaded tarball filename is "
+"generated by applying this rule to the selected href if I<matching-pattern> "
+"can extract the latest upstream version I<< <uversion> >> from the selected "
+"href string. Otherwise, generate the upstream tarball filename from its full "
+"URL string and set the missing I<< <uversion> >> from the generated upstream "
+"tarball filename."
+msgstr ""
+"Si la règle B<filenamemangle> existe, le nom de fichier d'archive téléchargé "
+"est généré en appliquant cette règle à la référence href sélectionnée si le "
+"I<motif-correspondant> peut extraire la dernière version amont I<< "
+"<uversion> >> à partir de la chaîne de la référence href sélectionnée. "
+"Autrement, le nom de fichier d'archive amont est généré à partir de sa "
+"chaîne d'URL complète et règle le I<< <uversion> >> manquant à partir du nom "
+"de fichier d'archive amont généré."
+
+#. type: textblock
+#: ../scripts/uscan.pl:842
+msgid ""
+"Without the B<filenamemangle> rule, the default upstream tarball filename is "
+"generated by taking the last component of the URL and removing everything "
+"after any '?' or '#'."
+msgstr ""
+"En absence de règle B<filenamemangle>, le nom de fichier d'archive amont par "
+"défaut est généré en prenant la dernière composante de l'URL et en retirant "
+"tout ce qu'il y a après un \"?\" ou un \"#\"."
+
+#. type: textblock
+#: ../scripts/uscan.pl:846
+msgid ""
+"B<uscan> downloads the selected upstream tarball to the parent B<../> "
+"directory. For example, the downloaded file may be:"
+msgstr ""
+"B<uscan> télécharge l'archive amont sélectionnée dans le répertoire parent "
+"B<../>. Par exemple, le fichier téléchargé peut être :"
+
+#. type: =item
+#: ../scripts/uscan.pl:851
+msgid "* F<../foo-2.04.tar.gz>"
+msgstr "* F<../toto-2.04.tar.gz>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:855
+msgid ""
+"Let's call this downloaded version B<2.04> in the above example generically "
+"as I<< <uversion> >> in the following."
+msgstr ""
+"De façon générique, nous appellerons par la suite cette version B<2.04> "
+"téléchargée dans l'exemple ci-dessus sous le nom de I<< <uversion> >>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:858
+msgid ""
+"If the B<pgpsigurlmangle> rule exists, the upstream signature file URL is "
+"generated by applying this rule to the (downloadurlmangled) selected "
+"upstream tarball href and the signature file is tried to be downloaded from "
+"it."
+msgstr ""
+"Si la règle B<pgpsigurlmangle> existe, l'URL du fichier de signature amont "
+"est générée en appliquant cette règle à la référence href de l'archive amont "
+"sélectionnée (traitée par downloadurlmangle) et on tente de télécharger le "
+"fichier de signature à partir de cette URL."
+
+#. type: textblock
+#: ../scripts/uscan.pl:862
+msgid ""
+"If the B<pgpsigurlmangle> rule doesn't exist, B<uscan> warns user if the "
+"matching upstream signature file is available from the same URL with their "
+"filename being suffixed by the 5 common suffix B<asc>, B<gpg>, B<pgp>, "
+"B<sig> and B<sign>. (You can avoid this warning by setting B<pgpmode=none>.)"
+msgstr ""
+"Si la règle B<pgpsigurlmangle> n'existe pas, B<uscan> prévient l'utilisateur "
+"si le fichier de signature amont correspondant est disponible à partir de la "
+"même URL, en ajoutant à son nom de fichier les cinq suffixes courants "
+"B<asc>, B<gpg>, B<pgp>, B<sig> et B<sign>. (On peut éviter cet avertissement "
+"avec le réglage B<pgpmode=none>.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:867
+msgid ""
+"If the signature file is downloaded, the downloaded upstream tarball is "
+"checked for its authenticity against the downloaded signature file using the "
+"armored keyring F<debian/upstream/signing-key.asc> (see L<KEYRING FILE "
+"EXAMPLES>). If its signature is not valid, or not made by one of the listed "
+"keys, B<uscan> will report an error."
+msgstr ""
+"Si le fichier de signature est téléchargé, l'authenticité de l'archive amont "
+"téléchargée est vérifiée par rapport au fichier de signature téléchargé en "
+"utilisant le trousseau blindé F<debian/upstream/signing-key.asc>. (Voir "
+"L<EXEMPLES DE FICHIER DE TROUSSEAU>). Si la signature n’est pas valable, ou "
+"si la clef ne fait pas partie du trousseau, B<uscan> signalera une erreur."
+
+#. type: textblock
+#: ../scripts/uscan.pl:873
+msgid ""
+"If the B<oversionmangle> rule exists, the source tarball version I<oversion> "
+"is generated from the downloaded upstream version I<uversion> by applying "
+"this rule. This rule is useful to add suffix such as B<+dfsg> to the version "
+"of all the source packages of the MUT package for which the repacksuffix "
+"mechanism doesn't work."
+msgstr ""
+"Si la règle B<oversionmangle> existe, la version d'archive source "
+"I<oversion> est générée à partir de la version amont téléchargée I<uversion> "
+"en appliquant cette règle. Elle est utile pour ajouter un suffixe tel que "
+"B<+dfsg> à la version de tous les paquets source du paquet MUT pour lequel "
+"le mécanisme de suffixe de rempaquetage ne fonctionne pas."
+
+#. type: textblock
+#: ../scripts/uscan.pl:879
+msgid ""
+"B<uscan> invokes B<mk-origtargz> to create the source tarball properly named "
+"for the source package with B<.orig.> (or B<< .orig-<component>. >> for the "
+"secondary tarballs) in its filename."
+msgstr ""
+"B<uscan> invoque B<mk-origtargz> pour créer l'archive source nommée "
+"correctement pour le paquet source avec B<.orig.> (ou B<< .orig-<component>. "
+">> pour les archives secondaires) dans son nom de fichier."
+
+#. type: =item
+#: ../scripts/uscan.pl:885
+msgid "case A: packaging of the upstream tarball as is"
+msgstr "cas A : empaquetage de l'archive amont telle quelle"
+
+#. type: textblock
+#: ../scripts/uscan.pl:887
+msgid ""
+"B<mk-origtargz> creates a symlink I<< ../bar_<oversion>.orig.tar.gz >> "
+"linked to the downloaded local upstream tarball. Here, I<< bar >> is the "
+"source package name found in F<debian/changelog>. The generated symlink may "
+"be:"
+msgstr ""
+"B<mk-origtargz> crée un lien symbolique I<< ../titi_<oversion>.orig.tar.gz "
+">> avec l'archive locale amont téléchargée. Ici, << titi >> est le nom du "
+"paquet source trouvé dans F<debian/changelog>. Le lien symbolique généré "
+"peut être :"
+
+#. type: =item
+#: ../scripts/uscan.pl:893
+msgid "* F<../bar_2.04.orig.tar.gz> -> F<foo-2.04.tar.gz> (as is)"
+msgstr "* F<../titi_2.04.orig.tar.gz> -> F<toto-2.04.tar.gz> (tel quel)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:897
+msgid ""
+"Usually, there is no need to set up B<opts=\"dversionmangle=> I<...> B<\"> "
+"for this case."
+msgstr ""
+"Habituellement, il n'y a pas besoin de paramétrer B<opts=\"dversionmangle=> "
+"I<...> B<\"> dans ce cas."
+
+#. type: =item
+#: ../scripts/uscan.pl:900
+msgid "case B: packaging of the upstream tarball after removing non-DFSG files"
+msgstr ""
+"cas B : empaquetage de l'archive amont après le retrait des fichiers non-DFSG"
+
+#. type: textblock
+#: ../scripts/uscan.pl:902
+msgid ""
+"B<mk-origtargz> checks the filename glob of the B<Files-Excluded> stanza in "
+"the first section of F<debian/copyright>, removes matching files to create a "
+"repacked upstream tarball. Normally, the repacked upstream tarball is "
+"renamed with I<suffix> to I<< ../bar_<oversion><suffix>.orig.tar.gz >> using "
+"the B<repacksuffix> option for the single upstream package. Here I<< "
+"<oversion> >> is updated to be I<< <oversion><suffix> >>."
+msgstr ""
+"B<mk-origtargz> vérifie le motif générique (\"glob\") des noms de fichiers "
+"du paragraphe B<Files-Excluded> dans la première section de F<debian/"
+"copyright>, retire les fichiers correspondants pour créer une archive amont "
+"rempaquetée. Normalement, l'archive amont rempaquetée est renommée en I<< ../"
+"bar_<oversion><suffixe>.orig.tar.gz >> avec I<suffixe>, utilisant l'option "
+"B<repacksuffix> pour le seul paquet amont. Ici, I<< <oversion> >> est mis à "
+"jour en I<< <oversion><suffixe> >>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:909
+msgid ""
+"The removal of files is required if files are not DFSG-compliant. For such "
+"case, B<+dfsg> is used as I<suffix>."
+msgstr ""
+"Le retrait des fichiers est requis si les fichiers ne sont pas compatibles "
+"avec DFSG. Dans ce cas, B<+dfsg> est utilisé comme I<suffixe>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:912
+msgid ""
+"So the combined options are set as B<opts=\"dversionmangle=s/\\+dfsg\\d*$// ,"
+"repacksuffix=+dfsg\">, instead."
+msgstr ""
+"Alors, les options sont plutôt ainsi combinées B<opts=\"dversionmangle=s/\\"
+"+dfsg\\d*$// , repacksuffix=+dfsg\">."
+
+#. type: textblock
+#: ../scripts/uscan.pl:915
+msgid "For example, the repacked upstream tarball may be:"
+msgstr "Par exemple, l'archive amont rempaquetée peut être :"
+
+#. type: =item
+#: ../scripts/uscan.pl:919
+msgid "* F<../bar_2.04+dfsg.orig.tar.gz> (repackaged)"
+msgstr "* F<../titi_2.04+dfsg.orig.tar.gz> (rempaqueté)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:925
+msgid ""
+"B<uscan> normally invokes \"B<uupdate> B<--find --upstream-version> "
+"I<oversion> \" for the version=4 watch file."
+msgstr ""
+"B<uscan> invoque normalement \"B<uupdate> B<--find --upstream-version> "
+"I<oversion>\" pour le fichier de veille version=4."
+
+#. type: textblock
+#: ../scripts/uscan.pl:928
+msgid ""
+"Please note that B<--find> option is used here since B<mk-origtargz> has "
+"been invoked to make B<*.orig.tar.gz> file already. B<uscan> picks I<< bar "
+">> from F<debian/changelog>."
+msgstr ""
+"Veuillez noter que l'option B<--find> est ici utilisée dans la mesure où "
+"B<mk-origtargz> a déjà été invoquée pour construire le fichier B<*.orig.tar."
+"gz>. B<uscan> choisit I<< bar >> à partir de F<debian/changelog>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:932
+msgid ""
+"It creates the new upstream source tree under the I<< ../bar-<oversion> >> "
+"directory and Debianize it leveraging the last package contents."
+msgstr ""
+"Il crée la nouvelle arborescence source amont sous le répertoire I<< ../bar-"
+"<oversion> >> et l'adapte à Debian en exploitant le contenu du dernier "
+"paquet."
+
+#. type: =head1
+#: ../scripts/uscan.pl:935
+msgid "WATCH FILE EXAMPLES"
+msgstr "EXEMPLES DE FICHIER DE VEILLE"
+
+#. type: textblock
+#: ../scripts/uscan.pl:937
+msgid ""
+"When writing the watch file, you should rely on the latest upstream source "
+"announcement web page. You should not try to second guess the upstream "
+"archive structure if possible. Here are the typical F<debian/watch> files."
+msgstr ""
+"Lors de l'écriture du fichier de veille, vous devriez vous servir de la "
+"dernière page d’annonce web de la source amont. Vous ne devriez pas, si "
+"possible, essayer de deviner la structure de l'archive amont. Voici des "
+"fichiers F<debian/watch> typiques."
+
+#. type: textblock
+#: ../scripts/uscan.pl:941
+msgid ""
+"Please note that executing B<uscan> with B<-v> or B<-vv> reveals what "
+"exactly happens internally."
+msgstr ""
+"Veuillez noter que l'exécution de B<uscan> avec B<-v> ou B<-vv> révèlece qui "
+"se passe précisément en interne."
+
+#. type: textblock
+#: ../scripts/uscan.pl:944
+msgid ""
+"The existence and non-existence of a space the before tailing B<\\> (back "
+"slash) are significant."
+msgstr ""
+"L'existence ou l'absence d'une espace avant le B<\\> (\"back slash\") final "
+"est significatif."
+
+#. type: textblock
+#: ../scripts/uscan.pl:947
+msgid ""
+"Some undocumented shorter configuration strings are used in the below "
+"EXAMPLES to help you with typing. These are intentional ones. B<uscan> is "
+"written to accept such common sense abbreviations but don't push the limit."
+msgstr ""
+"Certaines chaînes de configuration plus courtes non documentées sont "
+"utilisées dans les EXEMPLES ci-dessous pour faciliter votre saisie. Elles "
+"sont intentionnelles. B<uscan> est écrit pour accepter de tellesabréviations "
+"de bon sens, mais il ne faut pas exagérer."
+
+#. type: =head2
+#: ../scripts/uscan.pl:951
+msgid "HTTP site (basic)"
+msgstr "Site HTTP (de base)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:953
+msgid "Here is an example for the basic single upstream tarball."
+msgstr "Voici un exemple d'archive amont simple basique."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:955
+#, no-wrap
+msgid ""
+" version=4\n"
+" http://example.com/~user/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" http://example.com/~user/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:959
+#, no-wrap
+msgid ""
+"Or without using the substitution strings (not recommended):\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-([\\d\\.]+)\\.tar\\.gz\n"
+"\n"
+msgstr ""
+"Ou sans utiliser les chaînes de substitution (non recommandé):\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-([\\d\\.]+)\\.tar\\.gz\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:963
+#, no-wrap
+msgid ""
+" version=4\n"
+"\n"
+msgstr ""
+" version=4\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:965
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz>, this watch file downloads "
+"and creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+"Pour le paquet source amont B<toto-2.0.tar.gz>, ce fichier de veille "
+"télécharge et crée le fichier B<orig.tar> Debian B<toto_2.0.orig.tar.gz>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:968
+msgid "HTTP site (pgpsigurlmangle)"
+msgstr "Site HTTP (pgpsigurlmangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:970
+msgid ""
+"Here is an example for the basic single upstream tarball with the matching "
+"signature file in the same file path."
+msgstr ""
+"Voici un exemple d'archive amont simple de base avec le fichier de signature "
+"correspondant dans le même chemin de fichier."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:973
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.asc%\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.asc%\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:977
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz> and the upstream signature "
+"file B<foo-2.0.tar.gz.asc>, this watch file downloads these files, verifies "
+"the authenticity using the keyring F<debian/upstream/signing-key.asc> and "
+"creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+"Pour le paquet source amont B<toto-2.0.tar.gz> et le fichier de signature "
+"amont B<toto-2.0.tar.gz.asc>, ce fichier de veille télécharge ces fichiers, "
+"vérifie l'authenticité avec le trousseau F<debian/upstream/signing-key.asc> "
+"et crée le fichier B<orig.tar> Debian B<toto_2.0.orig.tar.gz>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:982
+msgid ""
+"Here is another example for the basic single upstream tarball with the "
+"matching signature file on decompressed tarball in the same file path."
+msgstr ""
+"Voici un autre exemple d'archive amont simple de base avec le fichier de "
+"signature correspondant sur l'archive décompressée dans le même chemin de "
+"fichier."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:985
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%@ARCHIVE_EXT@$%.asc%,decompress\" \\\n"
+" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%@ARCHIVE_EXT@$%.asc%,decompress\" \\\n"
+" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:990
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz> and the upstream signature "
+"file B<foo-2.0.tar.asc>, this watch file downloads these files, verifies the "
+"authenticity using the keyring F<debian/upstream/signing-key.asc> and "
+"creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+"Pour le paquet source amont B<toto-2.0.tar.gz> et le fichier de signature "
+"amont B<toto-2.0.tar.asc>, ce fichier de veille télécharge ces fichiers, "
+"vérifie l'authenticité avec le trousseau F<debian/upstream/signing-key.asc> "
+"et crée le fichier B<orig.tar> Debian B<toto_2.0.orig.tar.gz>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:995
+msgid "HTTP site (pgpmode=next/previous)"
+msgstr "Site HTTP (pgpmode = next/previous)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:997
+msgid ""
+"Here is an example for the basic single upstream tarball with the matching "
+"signature file in the unrelated file path."
+msgstr ""
+"Voici un exemple d'archive amont simple basique avec le fichier de signature "
+"correspondant dans un chemin de fichier indépendant."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1000
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ previous\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ previous\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1006
+msgid ""
+"B<(?:\\d+)> part can be any random value. The tarball file can have B<53>, "
+"while the signature file can have B<33>."
+msgstr ""
+"La partie B<(?:\\d+)> peut être une valeur aléatoire. Le fichier d'archive "
+"peut avoir la valeur B<53>, alors que le fichier de signature peut avoir la "
+"valeur B<33>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1009
+msgid ""
+"B<([\\d\\.]+)> part for the signature file has a strict requirement to match "
+"that for the upstream tarball specified in the previous line by having "
+"B<previous> as I<version> in the watch line."
+msgstr ""
+"La partie B<([\\d\\.]+)> pour le fichier de signature est soumise à "
+"l'exigence stricte de correspondre à cela pour l'archive amont spécifiée "
+"dans la ligne précédente en ayant B<previous> comme I<version> dans la ligne "
+"de veille."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1013
+msgid "HTTP site (flexible)"
+msgstr "Site HTTP (flexible)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1015
+msgid ""
+"Here is an example for the maximum flexibility of upstream tarball and "
+"signature file extensions."
+msgstr ""
+"Voici un exemple pour une extrême flexibilité des extensions de l'archive "
+"amont et du fichier de signature."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1018
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ \\\n"
+" previous\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ \\\n"
+" previous\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1025
+msgid "HTTP site (basic MUT)"
+msgstr "Site HTTP (MUT de base)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1027
+msgid "Here is an example for the basic multiple upstream tarballs."
+msgstr "Voici un exemple pour les archives amont multiples de base."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1029
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=bar\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=baz\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobaz-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=bar\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=baz\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobaz-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1040
+msgid ""
+"For the main upstream source package B<foo-2.0.tar.gz> and the secondary "
+"upstream source packages B<foobar-2.0.tar.gz> and B<foobaz-2.0.tar.gz> which "
+"install under F<bar/> and F<baz/>, this watch file downloads and creates the "
+"Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>, B<foo_2.0.orig-bar.tar.gz> "
+"and B<foo_2.0.orig-baz.tar.gz>. Also, these upstream tarballs are verified "
+"by their signature files."
+msgstr ""
+"Pour le paquet source amont principal B<toto-2.0.tar.gz> et les paquets "
+"source amont secondaires B<tototiti-2.0.tar.gz> et B<tototitiz-2.0.tar.gz> "
+"qui installent dans les répertoires F<titi/> and F<titiz/>, ce fichier de "
+"veille télécharge et crée le fichier Debian B<orig.tar>, B<toto_2.0.orig.tar."
+"gz>, B<toto_2.0.orig-titi.tar.gz> et B<toto_2.0.orig-titiz.tar.gz>. Les "
+"fichiers de signature de ces archives amont sont aussi vérifiées."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1047
+msgid "HTTP site (recursive directory scanning)"
+msgstr "Site HTTP (recherche récursive de répertoire)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1049
+msgid ""
+"Here is an example with the recursive directory scanning for the upstream "
+"tarball and its signature files released in a directory named after their "
+"version."
+msgstr ""
+"Voici un exemple avec recherche récursive de répertoire de l'archive amont "
+"et de ses fichiers de signature publiés dans un répertoire nommé d'après "
+"leur version."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1053
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, dirversionmangle=s/-PRE/~pre/;s/-RC/~rc/\" \\\n"
+" http://tmrc.mit.edu/mirror/twisted/Twisted/@ANY_VERSION@/ \\\n"
+" Twisted-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, dirversionmangle=s/-PRE/~pre/;s/-RC/~rc/\" \\\n"
+" http://tmrc.mit.edu/mirror/twisted/Twisted/@ANY_VERSION@/ \\\n"
+" Twisted-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1058
+msgid "Here, the web site should be accessible at the following URL:"
+msgstr "Ici, le site web devrait être accessible à l'URL suivante :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1060
+#, no-wrap
+msgid ""
+" http://tmrc.mit.edu/mirror/twisted/Twisted/\n"
+"\n"
+msgstr ""
+" http://tmrc.mit.edu/mirror/twisted/Twisted/\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1062
+msgid ""
+"Here, B<dirversionmangle> option is used to normalize the sorting order of "
+"the directory names."
+msgstr ""
+"Ici, l'option B<dirversionmangle> est utilisée pour normaliser l'ordre de "
+"tri des noms de répertoire."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1065
+msgid "HTTP site (alternative shorthand)"
+msgstr "Site HTTP (raccourci alternatif)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1067
+msgid ""
+"For the bare HTTP site where you can directly see archive filenames, the "
+"normal watch file:"
+msgstr ""
+"Pour le site HTTP simple où il est possible de voir directement les noms de "
+"fichiers de l'archive, le fichier de veille normal :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1070
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/ \\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/ \\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1075
+msgid ""
+"can be rewritten in an alternative shorthand form only with a single string "
+"covering URL and filename:"
+msgstr ""
+"peut être réécrit dans une forme raccourcie alternative avec une seule "
+"chaîne englobant l'URL et le nom de fichier :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1078
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1082
+msgid ""
+"In version=4, initial white spaces are dropped. Thus, this alternative "
+"shorthand form can also be written as:"
+msgstr ""
+"Dans version=4, les espaces blancs initiaux sont retirés. Donc, cette forme "
+"raccourcie alternative peut aussi être écrite ainsi :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1085
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/\\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/\\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1090
+msgid ""
+"Please note the subtle difference of a space before the tailing B<\\> "
+"between the first and the last examples."
+msgstr ""
+"Veuillez noter la légère différence d'une espace avant le B<\\> final entre "
+"le premier et le dernier exemple."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1093
+msgid "HTTP site (funny version)"
+msgstr "Site HTTP (version exotique)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1095
+msgid ""
+"For a site which has funny version numbers, the parenthesized groups will be "
+"joined with B<.> (period) to make a sanitized version number."
+msgstr ""
+"Pour un site qui possède des numéros de version exotiques, les groupes entre "
+"parenthèses devront être joints par des points (B<.>) pour créer un numéro "
+"de version sain."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1098
+#, no-wrap
+msgid ""
+" version=4\n"
+" http://www.site.com/pub/foobar/foobar_v(\\d+)_(\\d+)@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" http://www.site.com/pub/foobar/foobar_v(\\d+)_(\\d+)@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1101
+msgid "HTTP site (DFSG)"
+msgstr "Site HTTP (DFSG)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1103
+msgid ""
+"The upstream part of the Debian version number can be mangled to indicate "
+"the source package was repackaged to clean up non-DFSG files:"
+msgstr ""
+"La partie amont du numéro de version Debian peut être modifiée pour indiquer "
+"que le paquet source a été rempaqueté pour retirer les fichiers non-DFSG :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1106
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"dversionmangle=s/\\+dfsg\\d*$//,repacksuffix=+dfsg\" \\\n"
+" http://some.site.org/some/path/foobar-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"dversionmangle=s/\\+dfsg\\d*$//,repacksuffix=+dfsg\" \\\n"
+" http://some.site.org/some/path/foobar-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1110 ../scripts/uscan.pl:1165
+msgid "See L<COPYRIGHT FILE EXAMPLES>."
+msgstr "Voir L<EXEMPLES DE FICHIER DE COPYRIGHT>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1112
+msgid "HTTP site (filenamemangle)"
+msgstr "Site HTTP (filenamemangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1114
+msgid ""
+"The upstream tarball filename is found by taking the last component of the "
+"URL and removing everything after any '?' or '#'."
+msgstr ""
+"Le nom de fichier de l'archive amont est découvert en prenant le dernier "
+"composant de l'URL et en retirant tout ce qui se trouve après un \"?\" ou un "
+"\"#\"."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1117
+msgid ""
+"If this does not fit to you, use B<filenamemangle>. For example, F<< <A "
+"href=\"http://foo.bar.org/dl/?path=&dl=foo-0.1.1.tar.gz\"> >> could be "
+"handled as:"
+msgstr ""
+"Si cela ne vous convient pas, utiliser B<filenamemangle>. Par exemple, F<< "
+"<A href=\"http://toto.titi.org/dl/?path=&dl=foo-0.1.1.tar.gz\"> >> peut être "
+"traité ainsi :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1121
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/$1/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl=foo-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/$1/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl=foo-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1125
+msgid ""
+"F<< <A href=\"http://foo.bar.org/dl/?path=&dl_version=0.1.1\"> >> could be "
+"handled as:"
+msgstr ""
+"F<< <A href=\"http://toto.titi.org/dl/?path=&dl_version=0.1.1\"> >> peut "
+"être géré comme ceci :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1128
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/foo-$1\\.tar\\.gz/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl_version=@ANY_VERSION@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/foo-$1\\.tar\\.gz/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl_version=@ANY_VERSION@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1132
+msgid ""
+"If the href string has no version using <I>matching-pattern>, the version "
+"can be obtained from the full URL using B<filenamemangle>."
+msgstr ""
+"Si la chaîne de référence href n'a pas de version utilisant <I>motif-"
+"correspondant>, la version peut être obtenue à partir de l'URL complète avec "
+"B<filenamemangle>."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1135
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s&.*/dl/(.*)/foo\\.tar\\.gz&foo-$1\\.tar\\.gz& \\\n"
+" http://foo.bar.org/dl/@ANY_VERSION@/ foo.tar.gz\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=filenamemangle=s&.*/dl/(.*)/foo\\.tar\\.gz&foo-$1\\.tar\\.gz& \\\n"
+" http://foo.bar.org/dl/@ANY_VERSION@/ foo.tar.gz\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1139
+msgid "HTTP site (downloadurlmangle)"
+msgstr "Site HTTP (downloadurlmangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1141
+msgid ""
+"The option B<downloadurlmangle> can be used to mangle the URL of the file to "
+"download. This can only be used with B<http://> URLs. This may be "
+"necessary if the link given on the web page needs to be transformed in some "
+"way into one which will work automatically, for example:"
+msgstr ""
+"L'option B<downloadurlmangle> peut être utilisée pour modifier l'URL du "
+"fichier à télécharger. Cela ne peut être utilisé qu'avec des URL B<http://> "
+"et peut être nécessaire si le lien donné sur la page web doit être "
+"transformé de manière à ce que cela fonctionne automatiquement, par exemple :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1146
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=downloadurlmangle=s/prdownload/download/ \\\n"
+" http://developer.berlios.de/project/showfiles.php?group_id=2051 \\\n"
+" http://prdownload.berlios.de/softdevice/vdr-softdevice-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=downloadurlmangle=s/prdownload/download/ \\\n"
+" http://developer.berlios.de/project/showfiles.php?group_id=2051 \\\n"
+" http://prdownload.berlios.de/softdevice/vdr-softdevice-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1151
+msgid "HTTP site (oversionmangle, MUT)"
+msgstr "Site HTTP (oversionmangle, MUT)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1153
+msgid ""
+"The option B<oversionmangle> can be used to mangle the version of the source "
+"tarball (B<.orig.tar.gz> and B<.orig-bar.tar.gz>). For example, B<+dfsg> "
+"can be added to the upstream version as:"
+msgstr ""
+"L'option B<oversionmangle> peut être utilisée pour manipuler la version de "
+"l'archive source (B<.orig.tar.gz> et B<.orig-bar.tar.gz>). Par exemple, "
+"B<+dfsg> peut être ajouté à la version amont comme ceci :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1157
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=oversionmangle=s/(.*)/$1+dfsg/ \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"component=bar\" \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/bar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=oversionmangle=s/(.*)/$1+dfsg/ \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"component=bar\" \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/bar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1167
+msgid "HTTP site (pagemangle)"
+msgstr "Site HTTP (pagemangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1169
+msgid ""
+"The option B<pagemangle> can be used to mangle the downloaded web page "
+"before applying other rules. The non-standard web page without proper B<< "
+"<a href=\" >> << ... >> B<< \"> >> entries can be converted. For example, "
+"if F<foo.html> uses B<< <a bogus=\" >> I<< ... >> B<< \"> >>, this can be "
+"converted to the standard page format with:"
+msgstr ""
+"L'option B<pagemangle> peut être utilisée pour modifier la page web "
+"téléchargée avant d'appliquer d'autres règles. Une page web non standard "
+"sans entrées B<< <a href=\" >> << ... >> B<< \"> >> correctes peut être "
+"convertie. Par exemple, si F<toto.html> utilise B<< <un faux site=\" >> "
+"I<< ... >> B<< \"> >>, la conversion vers un format de page standard peut "
+"être réalisée avec :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1175
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=pagemangle=\"s/<a\\s+bogus=/<a href=/g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=pagemangle=\"s/<a\\s+bogus=/<a href=/g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1180
+msgid "Please note the use of B<g> here to replace all occurrences."
+msgstr ""
+"Veuillez notez ici l'utilisation de B<g> pour remplacer toutes les "
+"occurrences."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1182
+msgid ""
+"If F<foo.html> uses B<< <Key> >> I<< ... >> B<< </Key> >>, this can be "
+"converted to the standard page format with:"
+msgstr ""
+"Si F<toto.html> utilise B<< <Key> >> I<< ... >> B<< </Key> >>, la conversion "
+"vers un format de page standard peut être réalisée avec :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1185
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pagemangle=s%<Key>([^<]*)</Key>%<Key><a href=\"$1\">$1</a></Key>%g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pagemangle=s%<Key>([^<]*)</Key>%<Key><a href=\"$1\">$1</a></Key>%g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1190
+msgid "FTP site (basic):"
+msgstr "Site FTP (de base) :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1192
+#, no-wrap
+msgid ""
+" version=4\n"
+" ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1195
+msgid "FTP site (regex special characters):"
+msgstr "Site FTP (expressions rationnelles) :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1197
+#, no-wrap
+msgid ""
+" version=4\n"
+" ftp://ftp.worldforge.org/pub/worldforge/libs/\\\n"
+" Atlas-C++/transitional/Atlas-C\\+\\+-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" ftp://ftp.worldforge.org/pub/worldforge/libs/\\\n"
+" Atlas-C++/transitional/Atlas-C\\+\\+-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1201
+msgid ""
+"Please note that this URL is connected to be I< ... >B<libs/Atlas-C++/"
+">I< ... > . For B<++>, the first one in the directory path is verbatim while "
+"the one in the filename is escaped by B<\\>."
+msgstr ""
+"Veuillez noter que cette URL est connectée pour être I< ... >B<libs/Atlas-C+"
+"+/>I< ... >. Pour les B<++>, le premier dans le chemin du répertoire est "
+"verbatim, tandis que celui qui est dans le nom de fichier est protégé par "
+"B<\\>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1205
+msgid "FTP site (funny version)"
+msgstr "Site FTP (version exotique)"
+
+# NOTE: Ca reste encore cryptique
+#. type: textblock
+#: ../scripts/uscan.pl:1207
+msgid ""
+"This is another way of handling site with funny version numbers, this time "
+"using mangling. (Note that multiple groups will be concatenated before "
+"mangling is performed, and that mangling will only be performed on the "
+"basename version number, not any path version numbers.)"
+msgstr ""
+"Voici une autre manière pour des sites ayant des numéros de version "
+"bizarres, en effectuant une modification cette fois. (Remarquez que "
+"plusieurs groupes seront concaténés avant d'effectuer la modification, et "
+"que les modifications ne seront effectuées que sur le numéro de version de "
+"base, et pas dans les numéros de versions contenus dans les chemins.)"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1213
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"uversionmangle=s/^/0.0./\" \\\n"
+" ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/\\\n"
+" development/Wine-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"uversionmangle=s/^/0.0./\" \\\n"
+" ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/\\\n"
+" development/Wine-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1218
+msgid "sf.net"
+msgstr "sf.net"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1220
+msgid ""
+"For SourceForge based projects, qa.debian.org runs a redirector which allows "
+"a simpler form of URL. The format below will automatically be rewritten to "
+"use the redirector with the watch file:"
+msgstr ""
+"Pour les projets hébergés sur SourceForge, qa.debian.org fournit un "
+"redirecteur qui permet une forme plus simple d'URL. Le format ci-dessous "
+"sera automatiquement réécrit pour utiliser le redirecteur avec le fichier de "
+"veille :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1224
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://sf.net/<project>/ <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://sf.net/<project>/ <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1227
+msgid "For B<audacity>, set the watch file as:"
+msgstr "Pour B<audacity>, configurer le fichier de veille ainsi :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1229
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://sf.net/audacity/ audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://sf.net/audacity/ audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1232 ../scripts/uscan.pl:1272
+msgid ""
+"Please note, you can still use normal functionalities of B<uscan> to set up "
+"a watch file for this site without using the redirector."
+msgstr ""
+"Veuillez noter, qu'il est encore possible d'utiliser les fonctionnalités "
+"normales de B<uscan> pour configurer un fichier de veille pour ce site sans "
+"utiliser le redirecteur."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1235
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"uversionmangle=s/-pre/~pre/, \\\n"
+" filenamemangle=s%(?:.*)audacity-minsrc-(.+)\\.tar\\.xz/download%\\\n"
+" audacity-$1.tar.xz%\" \\\n"
+" http://sourceforge.net/projects/audacity/files/audacity/@ANY_VERSION@/ \\\n"
+" (?:.*)audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@/download\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"uversionmangle=s/-pre/~pre/, \\\n"
+" filenamemangle=s%(?:.*)audacity-minsrc-(.+)\\.tar\\.xz/download%\\\n"
+" audacity-$1.tar.xz%\" \\\n"
+" http://sourceforge.net/projects/audacity/files/audacity/@ANY_VERSION@/ \\\n"
+" (?:.*)audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@/download\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1242
+msgid "Here, B<%> is used as the separator instead of the standard B</>."
+msgstr "Ici, B<%> est utilisé comme séparateur à la place du B</> standard."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1244
+msgid "github.com"
+msgstr "github.com"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1246
+msgid ""
+"For GitHub based projects, you can use the tags or releases page. The "
+"archive URL uses only the version as the filename. You can rename the "
+"downloaded upstream tarball from into the standard F<< <project>-<version>."
+"tar.gz >> using B<filenamemangle>:"
+msgstr ""
+"Pour les projets hébergés sur GitHub, il est possible d'utiliser la page "
+"d'étiquettes ou de versions. L’URL de l’archive utilise seulement la version "
+"comme nom de fichier. Il est possible renommer l'archive amont téléchargée "
+"au format standard F<< <project>-<version>.tar.gz >> avec B<filenamemangle> :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1251
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"filenamemangle=s%(?:.*?)?v?@ANY_VERSION@(@ARCHIVE_EXT@)%@PACKAGE@-$1$2%\" \\\n"
+" https://github.com/<user>/<project>/tags \\\n"
+" (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"filenamemangle=s%(?:.*?)?v?@ANY_VERSION@(@ARCHIVE_EXT@)%@PACKAGE@-$1$2%\" \\\n"
+" https://github.com/<user>/<project>/tags \\\n"
+" (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1256
+msgid "PyPI"
+msgstr "PyPI"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1258
+msgid ""
+"For PyPI based projects, pypi.debian.net runs a redirector which allows a "
+"simpler form of URL. The format below will automatically be rewritten to use "
+"the redirector with the watch file:"
+msgstr ""
+"Pour les projets hébergés sur PyPI, pypi.debian.net fournit un redirecteur "
+"qui permet une forme plus simple d'URL. Le format ci-dessous sera "
+"automatiquement réécrit pour utiliser le redirecteur avec le fichier de "
+"veille :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1262
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://pypi.python.org/packages/source/<initial>/<project>/ \\\n"
+" <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://pypi.python.org/packages/source/<initial>/<project>/ \\\n"
+" <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1266
+msgid "For B<cfn-sphere>, set the watch file as:"
+msgstr "Pour B<cfn-sphere>, configurer le fichier ainsi :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1268
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://pypi.python.org/packages/source/c/cfn-sphere/ \\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://pypi.python.org/packages/source/c/cfn-sphere/ \\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1275
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=none\" \\\n"
+" https://pypi.python.org/pypi/cfn-sphere/ \\\n"
+" https://pypi.python.org/packages/.*/.*/.*/\\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@#.*\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpmode=none\" \\\n"
+" https://pypi.python.org/pypi/cfn-sphere/ \\\n"
+" https://pypi.python.org/packages/.*/.*/.*/\\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@#.*\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1281
+msgid "code.google.com"
+msgstr "code.google.com"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1283
+msgid ""
+"Sites which used to be hosted on the Google Code service should have "
+"migrated to elsewhere (github?). Please look for the newer upstream site if "
+"available."
+msgstr ""
+"Les sites habituellement hébergés sur le service Google Code devraient avoir "
+"migré ailleurs (github ?). Veuillez rechercher les sites amont les plus "
+"récents s'ils sont disponibles."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1286
+msgid "npmjs.org (node modules)"
+msgstr "npmjs.org (modules Node)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1288
+msgid ""
+"npmjs.org modules are published in JSON files. Here is a way to read them:"
+msgstr ""
+"Les modules npmjs.org sont publiés au format JSON. Voici un moyen de les "
+"lire :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1290
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1295
+msgid "grouped package"
+msgstr "paquet groupé"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1297
+msgid ""
+"Some node modules are split into multiple little upstream package. Here is a "
+"way to group them:"
+msgstr ""
+"Certains modules Node sont découpés en de multiples petits paquets. Voici un "
+"moyen de les grouper :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1300
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1314
+msgid ""
+"Package version is then the concatenation of upstream versions separated by "
+"\"+~\"."
+msgstr ""
+"La version du paquet est alors la concaténation des versions amont séparées "
+"par \"+~\"."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1317
+msgid ""
+"To avoid having a too long version, the \"checksum\" method can be used. In "
+"this case, the main source has to be declared as \"group\":"
+msgstr ""
+"Pour éviter d'avoir un trop long numéro de version, la méthode \"checksum\" "
+"peut être utilisée. Dans ce cas la principale source doit être déclarée "
+"comme \"group\" :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1320
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1334
+msgid ""
+"The \"checksum\" is made up of the separate sum of each number composing the "
+"component versions. Following is an example with 3 components whose "
+"versions are \"1.2.4\", \"2.0.1\" and \"10.0\", with the main tarball having "
+"version \"2.0.6\":"
+msgstr ""
+"Le \"checksum\" est composé des sommes séparées de chaque chiffre composant "
+"la version des composants. Ci-dessous un exemple avec 3 composants dont les "
+"versions respectives sont : \"1.2.4\", \"2.0.1\" et \"10.0\", et la version "
+"de la source principale \"2.0.6\" :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1338
+#, no-wrap
+msgid ""
+" Main: 2.0.6\n"
+" Comp1: 1 . 2 . 4\n"
+" Comp2: 2 . 0 . 1\n"
+" Comp3: 10 . 0\n"
+" ================================\n"
+" Result : 1+2+10 . 2+0+0 . 4+1\n"
+" Checksum: 13 . 2 . 5\n"
+" ================================\n"
+" Final Version: 2.0.6+~cs13.2.5\n"
+"\n"
+msgstr ""
+" Main: 2.0.6\n"
+" Comp1: 1 . 2 . 4\n"
+" Comp2: 2 . 0 . 1\n"
+" Comp3: 10 . 0\n"
+" ================================\n"
+" Result : 1+2+10 . 2+0+0 . 4+1\n"
+" Checksum: 13 . 2 . 5\n"
+" ================================\n"
+" Final Version: 2.0.6+~cs13.2.5\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1348
+msgid ""
+"uscan will also display the original version string before being encoded "
+"into the checksum, which can for example be used in a debian/changelog entry "
+"to easily follow the changes:"
+msgstr ""
+"uscan affichera également la chaîne de version originale avant encodage en "
+"checksum, ce qui peut être utilisé par exemple dans une entrée de debian/"
+"changelog pour suivre facilement les changements :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1352
+#, no-wrap
+msgid ""
+" 2.0.6+~1.2.4+~2.0.1+~10.0\n"
+"\n"
+msgstr ""
+" 2.0.6+~1.2.4+~2.0.1+~10.0\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1354
+msgid ""
+"B<Note>: This feature currently accepts only versions composed of digits and "
+"full stops (`.`)."
+msgstr ""
+"B<Note>: cette fonctionnalité n'accepte actuellement que les versions "
+"composées exclusivement de chiffres et de points (\".\")."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1357
+msgid "direct access to the git repository (tags)"
+msgstr "accès direct au dépôt git (étiquettes)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1359
+msgid ""
+"If the upstream only publishes its code via the git repository and its code "
+"has no web interface to obtain the release tarball, you can use B<uscan> "
+"with the tags of the git repository to track and package the new upstream "
+"release."
+msgstr ""
+"Si l'équipe amont ne publie son code que dans un dépôt git et que son code "
+"n'a pas d'interface web pour obtenir l'archive publiée, il est possible "
+"d'utiliser B<uscan> avec les étiquettes du dépôt git pour suivre et "
+"empaqueter la nouvelle publication amont."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1363
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=git, gitmode=full, pgpmode=none\" \\\n"
+" http://git.ao2.it/tweeper.git \\\n"
+" refs/tags/v@ANY_VERSION@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=git, gitmode=full, pgpmode=none\" \\\n"
+" http://git.ao2.it/tweeper.git \\\n"
+" refs/tags/v@ANY_VERSION@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1368
+msgid "Please note \"B<git ls-remote>\" is used to obtain references for tags."
+msgstr ""
+"Veuillez noter que \"B<git ls-remote>\" est utilisé pour obtenir les "
+"références des étiquettes."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1370
+msgid ""
+"If a tag B<v20.5> is the newest tag, the above example downloads "
+"I<spkg>B<-20.5.tar.xz> after making a full clone of the git repository which "
+"is needed for dumb git server."
+msgstr ""
+"Si l'étiquette B<v20.5> est l'étiquette la plus récente, l'exemple ci-dessus "
+"télécharge I<spkg>B<-20.5.tar.xz> après avoir fait un clone complet du dépôt "
+"git nécessaire au serveur git simple."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1374
+msgid "If tags are signed, set B<pgpmode=gittag> to verify them."
+msgstr "Si les tags sont signés, utiliser B<pgpmode=gittag> pour les vérifier."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1376
+msgid "direct access to the git repository (HEAD)"
+msgstr "accès direct au dépôt git (HEAD)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1378
+msgid ""
+"If the upstream only publishes its code via the git repository and its code "
+"has no web interface nor the tags to obtain the released tarball, you can "
+"use B<uscan> with the HEAD of the git repository to track and package the "
+"new upstream release with an automatically generated version string."
+msgstr ""
+"Si l'équipe amont ne publie son code que dans un dépôt git et que son code "
+"n'a pas d'interface web ni les étiquettes pour obtenir l'archive publiée, il "
+"est possible d'utiliser B<uscan> avec le HEAD du dépôt git pour suivre et "
+"empaqueter la nouvelle publication amont avec une chaîne de version générée "
+"automatiquement."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1383
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=git, pgpmode=none\" \\\n"
+" https://github.com/Debian/dh-make-golang \\\n"
+" HEAD\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=git, pgpmode=none\" \\\n"
+" https://github.com/Debian/dh-make-golang \\\n"
+" HEAD\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1388
+msgid ""
+"Please note that a local shallow copy of the git repository is made with "
+"\"B<git clone --bare --depth=1> ...\" normally in the target directory. "
+"B<uscan> generates the new upstream version with \"B<git log --date=format:"
+"%Y%m%d --pretty=0.0~git%cd.%h>\" on this local copy of repository as its "
+"default behavior."
+msgstr ""
+"Veuillez noter qu'une copie superficielle locale du dépôt git est réalisée "
+"avec la commande \"B<git clone --bare --depth=1> ...\" normalement dans le "
+"répertoire cible. B<uscan> génère la nouvelle version amont avec \"B<git log "
+"--date=%Y%m%d --pretty=0.0~git%cd.%h>\" sur cette copie locale du dépôt, "
+"comme comportement par défaut."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1394
+msgid ""
+"The generation of the upstream version string may the adjusted to your taste "
+"by adding B<pretty> and B<date> options to the B<opts> arguments."
+msgstr ""
+"La création de la chaîne de version amont peut être ajustée à votre goût en "
+"ajoutant les options B<pretty> et B<date> aux arguments de B<opts>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1397
+msgid "direct access to the Subversion repository (tags)"
+msgstr "accès direct au dépôt Subversion (étiquettes)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1399
+msgid ""
+"If the upstream only publishes its code via the Subversion repository and "
+"its code has no web interface to obtain the release tarball, you can use "
+"B<uscan> with the tags of the Subversion repository to track and package the "
+"new upstream release."
+msgstr ""
+"Si l'équipe amont ne publie son code que dans un dépôt Subversion et que son "
+"code n'a pas d'interface web pour obtenir l'archive publiée, il est possible "
+"d'utiliser B<uscan> avec les étiquettes du dépôt Subversion pour suivre et "
+"empaqueter la nouvelle publication amont."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1404
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/tags/ \\\n"
+" @ANY_VERSION@\\/\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/tags/ \\\n"
+" @ANY_VERSION@\\/\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1409
+msgid "direct access to the Subversion repository (HEAD)"
+msgstr "accès direct au dépôt Subversion (HEAD)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1411
+msgid ""
+"If the upstream only publishes its code via the Subversion repository and "
+"its code has no web interface to obtain the release tarball, you can use "
+"B<uscan> to get the most recent source of a subtree in the repository with "
+"an automatically generated version string."
+msgstr ""
+"Si l'équipe amont ne publie son code que dans un dépôt Subversion et que son "
+"code n'a pas d'interface web ni les étiquettes pour obtenir l'archive "
+"publiée, il est possible d'utiliser B<uscan> pour obtenir les dernières "
+"sources d'une sous-arborescence avec une chaîne de version générée "
+"automatiquement."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1416
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/trunk/ \\\n"
+" HEAD\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/trunk/ \\\n"
+" HEAD\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1421
+msgid ""
+"By default, B<uscan> generates the new upstream version by appending the "
+"revision number to \"0.0~svn\". This can later be changed using "
+"B<uversionmangle>."
+msgstr ""
+"Par défaut, B<uscan> génère la nouvelle version en ajoutant \"0.0~svn\" au "
+"numéro de révision. Ce peut être changé en utilisant B<uversionmangle>."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1424
+msgid "COPYRIGHT FILE EXAMPLES"
+msgstr "EXEMPLES DE FICHIER DE COPYRIGHT"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1426
+msgid ""
+"Here is an example for the F<debian/copyright> file which initiates "
+"automatic repackaging of the upstream tarball into I<< <spkg>_<oversion>."
+"orig.tar.gz >> (In F<debian/copyright>, the B<Files-Excluded> and B<Files-"
+"Excluded->I<component> stanzas are a part of the first paragraph and there "
+"is a blank line before the following paragraphs which contain B<Files> and "
+"other stanzas.):"
+msgstr ""
+"Voici un exemple de fichier F<debian/copyright> qui déclenche le "
+"rempaquetage automatique de l'archive amont en I<< <spkg>_<oversion>.orig."
+"tar.gz >> (dans F<debian/copyright>, les alinéas B<Files-Excluded> et "
+"B<Files-Excluded->I<component> font partie du premier paragraphe et il "
+"existe un ligne vide avant les paragraphes suivants qui contiennent B<Files> "
+"et d'autres alinéas.) :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1433
+#, no-wrap
+msgid ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+msgstr ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1440 ../scripts/uscan.pl:1461
+#, no-wrap
+msgid ""
+" Files: *\n"
+" Copyright: ...\n"
+" ...\n"
+"\n"
+msgstr ""
+" Files: *\n"
+" Copyright: ...\n"
+" ...\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1444
+msgid ""
+"Here is another example for the F<debian/copyright> file which initiates "
+"automatic repackaging of the multiple upstream tarballs into I<< "
+"<spkg>_<oversion>.orig.tar.gz >> and I<< <spkg>_<oversion>.orig-bar.tar.gz "
+">>:"
+msgstr ""
+"Voici un autre exemple de fichier F<debian/copyright> qui déclenche le "
+"rempaquetage automatique d'archives amont multiples en I<< <spkg>_<oversion>."
+"orig.tar.gz >> et I<< <spkg>_<oversion>.orig-bar.tar.gz >>:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1449
+#, no-wrap
+msgid ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+" Files-Excluded-bar: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+msgstr ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+" Files-Excluded-bar: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1465
+msgid "See mk-origtargz(1)."
+msgstr "Voir B<mk-origtargz>(1)."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1467
+msgid "KEYRING FILE EXAMPLES"
+msgstr "EXEMPLES DE FICHIER DE TROUSSEAU"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1469
+msgid ""
+"Let's assume that the upstream \"B<< uscan test key (no secret) "
+"<none@debian.org> >>\" signs its package with a secret OpenPGP key and "
+"publishes the corresponding public OpenPGP key. This public OpenPGP key can "
+"be identified in 3 ways using the hexadecimal form."
+msgstr ""
+"Supposons que la \"B<< clef de test d'uscan (non secrète) <none@debian.org> "
+">>\" amont signe son paquet avec une clef secrète OpenPGP et publie la clef "
+"publique OpenPGP correspondante. Cette clef publique OpenPGP peut être "
+"identifiée de trois façons différentes avec sa forme hexadécimale."
+
+#. type: =item
+#: ../scripts/uscan.pl:1476
+msgid ""
+"* The fingerprint as the 20 byte data calculated from the public OpenPGP "
+"key. E. g., 'B<CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF>'"
+msgstr ""
+"* L'empreinte sous la forme des 20 octets de données calculés à partir de la "
+"clef publique OpenPGP. Par exemple \"B<CF21 8F0E 7EAB F584 B7E2 0402 C77E "
+"2D68 7254 3FAF>"
+
+#. type: =item
+#: ../scripts/uscan.pl:1479
+msgid ""
+"* The long keyid as the last 8 byte data of the fingerprint. E. g., "
+"'B<C77E2D6872543FAF>'"
+msgstr ""
+"* L'identificateur long \" long keyid\") sous la forme des 8 derniers octets "
+"de données de l'empreinte. Par exemple, \"B<C77E2D6872543FAF>\""
+
+#. type: =item
+#: ../scripts/uscan.pl:1482
+msgid ""
+"* The short keyid is the last 4 byte data of the fingerprint. E. g., "
+"'B<72543FAF>'"
+msgstr ""
+"* L'identificateur court (\"short keyid\") sous la forme des 4 derniers "
+"octets de données de l'empreinte. Par exemple, \"B<72543FAF>\""
+
+#. type: textblock
+#: ../scripts/uscan.pl:1487
+msgid ""
+"Considering the existence of the collision attack on the short keyid, the "
+"use of the long keyid is recommended for receiving keys from the public key "
+"servers. You must verify the downloaded OpenPGP key using its full "
+"fingerprint value which you know is the trusted one."
+msgstr ""
+"Compte tenu de l'existence des attaques par collisions sur les "
+"identificateurs courts, il est recommandé d'utiliser l'identificateur long "
+"pour recevoir des clefs à partir des serveurs de clefs publiques. Vous devez "
+"vérifier la clef OpenPGP téléchargée en utilisant la valeur de son empreinte "
+"complète dont vous savez qu'elle est sûre."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1492
+msgid ""
+"The armored keyring file F<debian/upstream/signing-key.asc> can be created "
+"by using the B<gpg> (or B<gpg2>) command as follows."
+msgstr ""
+"Le fichier de trousseau blindé F<debian/upstream/signing-key.asc> peut être "
+"créé en utilisant la commande B<gpg> (ou B<gpg2>) comme suit."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1495
+#, no-wrap
+msgid ""
+" $ gpg --recv-keys \"C77E2D6872543FAF\"\n"
+" ...\n"
+" $ gpg --finger \"C77E2D6872543FAF\"\n"
+" pub 4096R/72543FAF 2015-09-02\n"
+" Key fingerprint = CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF\n"
+" uid uscan test key (no secret) <none@debian.org>\n"
+" sub 4096R/52C6ED39 2015-09-02\n"
+" $ cd path/to/<upkg>-<uversion>\n"
+" $ mkdir -p debian/upstream\n"
+" $ gpg --export --export-options export-minimal --armor \\\n"
+" 'CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF' \\\n"
+" >debian/upstream/signing-key.asc\n"
+"\n"
+msgstr ""
+" $ gpg --recv-keys \"C77E2D6872543FAF\"\n"
+" ...\n"
+" $ gpg --finger \"C77E2D6872543FAF\"\n"
+" pub 4096R/72543FAF 2015-09-02\n"
+" Key fingerprint = CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF\n"
+" uid uscan test key (no secret) <none@debian.org>\n"
+" sub 4096R/52C6ED39 2015-09-02\n"
+" $ cd chemin/vers/<upkg>-<uversion>\n"
+" $ mkdir -p debian/upstream\n"
+" $ gpg --export --export-options export-minimal --armor \\\n"
+" 'CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF' \\\n"
+" >debian/upstream/signing-key.asc\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1508
+msgid ""
+"The binary keyring files, F<debian/upstream/signing-key.pgp> and F<debian/"
+"upstream-signing-key.pgp>, are still supported but deprecated."
+msgstr ""
+"Les fichiers de trousseau binaires, F<debian/upstream/signing-key.pgp> et "
+"F<debian/upstream-signing-key.pgp>, sont encore gérés, mais ils sont "
+"obsolètes."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1511
+msgid ""
+"If a group of developers sign the package, you need to list fingerprints of "
+"all of them in the argument for B<gpg --export ...> to make the keyring to "
+"contain all OpenPGP keys of them."
+msgstr ""
+"Si un groupe de développeurs signe le paquet, il faut la liste des "
+"empreintes de chacun d'entre eux dans le paramètre pour B<gpg --export ...> "
+"afin que le trousseau contienne toutes leurs clefs OpenPGP."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1515
+msgid ""
+"Sometimes you may wonder who made a signature file. You can get the public "
+"keyid used to create the detached signature file F<foo-2.0.tar.gz.asc> by "
+"running B<gpg> as:"
+msgstr ""
+"Parfois, on se demande qui a créé le fichier de signature. Il est possible "
+"d'obtenir l’identificateur de la clef publique utilisé pour créer le fichier "
+"de signature séparé F<toto-2.0.tar.gz.asc> en exécutant B<gpg> ainsi :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1519
+#, no-wrap
+msgid ""
+" $ gpg -vv foo-2.0.tar.gz.asc\n"
+" gpg: armor: BEGIN PGP SIGNATURE\n"
+" gpg: armor header: Version: GnuPG v1\n"
+" :signature packet: algo 1, keyid C77E2D6872543FAF\n"
+" \tversion 4, created 1445177469, md5len 0, sigclass 0x00\n"
+" \tdigest algo 2, begin of digest 7a c7\n"
+" \thashed subpkt 2 len 4 (sig created 2015-10-18)\n"
+" \tsubpkt 16 len 8 (issuer key ID C77E2D6872543FAF)\n"
+" \tdata: [4091 bits]\n"
+" gpg: assuming signed data in `foo-2.0.tar.gz'\n"
+" gpg: Signature made Sun 18 Oct 2015 11:11:09 PM JST using RSA key ID 72543FAF\n"
+" ...\n"
+"\n"
+msgstr ""
+" $ gpg -vv toto-2.0.tar.gz.asc\n"
+" gpg: armor: BEGIN PGP SIGNATURE\n"
+" gpg: armor header: Version: GnuPG v1\n"
+" :signature packet: algo 1, keyid C77E2D6872543FAF\n"
+" \tversion 4, created 1445177469, md5len 0, sigclass 0x00\n"
+" \tdigest algo 2, begin of digest 7a c7\n"
+" \thashed subpkt 2 len 4 (sig created 2015-10-18)\n"
+" \tsubpkt 16 len 8 (issuer key ID C77E2D6872543FAF)\n"
+" \tdata: [4091 bits]\n"
+" gpg: assuming signed data in `toto-2.0.tar.gz'\n"
+" gpg: Signature made Sun 18 Oct 2015 11:11:09 PM JST using RSA key ID 72543FAF\n"
+" ...\n"
+"\n"
+
+#. type: =head1
+#: ../scripts/uscan.pl:1532
+msgid "COMMANDLINE OPTIONS"
+msgstr "OPTIONS DE LIGNE DE COMMANDE"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1534
+msgid "For the basic usage, B<uscan> does not require to set these options."
+msgstr ""
+"Pour un usage basique d'B<uscan>, la configuration de ces options n'est pas "
+"nécessaire."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1548
+#, no-wrap
+msgid ""
+" uscan --conf-file test.conf --verbose\n"
+"\n"
+msgstr ""
+" uscan --conf-file test.conf --verbose\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1552
+#, no-wrap
+msgid ""
+" uscan --conf-file +test.conf --verbose\n"
+"\n"
+msgstr ""
+" uscan --conf-file +test.conf --verbose\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:1563
+msgid "B<--no-verbose>"
+msgstr "B<--no-verbose>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1565
+msgid "Don't report verbose information. (default)"
+msgstr "Ne pas rapporter d'informations verbeuses. (Par défaut)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1569
+msgid "Report verbose information."
+msgstr "Rapporter des informations verbeuses."
+
+#. type: =item
+#: ../scripts/uscan.pl:1571
+msgid "B<--debug>, B<-vv>"
+msgstr "B<--debug>, B<-vv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1573
+msgid "Report verbose information and some internal state values."
+msgstr ""
+"Rapporter des informations verbeuses et les valeurs de certains états "
+"internes."
+
+#. type: =item
+#: ../scripts/uscan.pl:1575
+msgid "B<--extra-debug>, B<-vvv>"
+msgstr "B<--extra-debug>, B<-vvv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1577
+msgid ""
+"Report verbose information including the downloaded web pages as processed "
+"to STDERR for debugging."
+msgstr ""
+"Rapporter des informations verbeuses y compris les pages web téléchargées "
+"traitées sur la sortie d'erreur standard pour débogage."
+
+#. type: =item
+#: ../scripts/uscan.pl:1580
+msgid "B<--dehs>"
+msgstr "B<--dehs>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1582
+msgid ""
+"Send DEHS style output (XML-type) to STDOUT, while send all other uscan "
+"output to STDERR."
+msgstr ""
+"Envoyer la sortie de style DEHS (type XML) sur la sortie standard, tout en "
+"envoyant toutes les autres sorties de uscan sur la sortie d'erreur standard."
+
+#. type: =item
+#: ../scripts/uscan.pl:1585
+msgid "B<--no-dehs>"
+msgstr "B<--no-dehs>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1587
+msgid "Use only traditional uscan output format. (default)"
+msgstr ""
+"Utiliser seulement le format de sortie traditionnel de uscan. (Par défaut)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1589
+msgid "B<--download>, B<-d>"
+msgstr "B<--download>, B<-d>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1591
+msgid "Download the new upstream release. (default)"
+msgstr "Télécharger la nouvelle version amont. (Par défaut)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1593
+msgid "B<--force-download>, B<-dd>"
+msgstr "B<--force-download>, B<-dd>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1595
+msgid ""
+"Download the new upstream release even if up-to-date. (may not overwrite the "
+"local file)"
+msgstr ""
+"Télécharger la nouvelle version amont même si elle est à jour (peut ne pas "
+"écraser les fichiers locaux)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1597
+msgid "B<--overwrite-download>, B<-ddd>"
+msgstr "B<--overwrite-download>, B<-ddd>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1599
+msgid ""
+"Download the new upstream release even if up-to-date. (may overwrite the "
+"local file)"
+msgstr ""
+"Télécharger le fichier amont même si le paquet est à jour (peut écraser les "
+"fichiers locaux)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1601
+msgid "B<--no-download>, B<--nodownload>"
+msgstr "B<--no-download>, B<--nodownload>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1603
+msgid "Don't download and report information."
+msgstr "Ne pas télécharger ni rapporter d'information."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1605
+msgid "Previously downloaded tarballs may be used."
+msgstr "Des archives précédemment téléchargées peuvent être utilisées."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1607
+msgid "Change default to B<--skip-signature>."
+msgstr "Passage du comportement par défaut à B<--skip-signature>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1609
+msgid "B<--signature>"
+msgstr "B<--signature>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1611
+msgid "Download signature. (default)"
+msgstr "Télécharger la signature. (Par défaut)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1613
+msgid "B<--no-signature>"
+msgstr "B<--no-signature>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1615
+msgid "Don't download signature but verify if already downloaded."
+msgstr ""
+"Ne pas télécharger la signature, mais vérifier si elle a déjà été "
+"téléchargée."
+
+#. type: =item
+#: ../scripts/uscan.pl:1617
+msgid "B<--skip-signature>"
+msgstr "B<-skip-signature>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1619
+msgid "Don't bother download signature nor verifying signature."
+msgstr "Ne pas s'occuper de télécharger ni de vérifier la signature."
+
+#. type: =item
+#: ../scripts/uscan.pl:1621
+msgid "B<--safe>, B<--report>"
+msgstr "B<--safe>, B<--report>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1623
+msgid ""
+"Avoid running unsafe scripts by skipping both the repacking of the "
+"downloaded package and the updating of the new source tree."
+msgstr ""
+"Éviter l'exécution de scripts non sécurisés en sautant à la fois le "
+"rempaquetage du paquet téléchargé et la mise à jour de l'arborescence de la "
+"nouvelle source."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1626
+msgid "Change default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+"Passage du comportement par défaut à B<--no-download> et B<--skip-signature>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1628
+msgid ""
+"When the objective of running B<uscan> is to gather the upstream package "
+"status under the security conscious environment, please make sure to use "
+"this option."
+msgstr ""
+"Quand l'objectif de l'exécution de B<uscan> est de recueillir l'état du "
+"paquet amont sous un environnement conscient de la sécurité, veuillez vous "
+"assurer d'utiliser cette option."
+
+#. type: =item
+#: ../scripts/uscan.pl:1631
+msgid "B<--report-status>"
+msgstr "B<--report-status>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1633
+msgid "This is equivalent of setting \"B<--verbose --safe>\"."
+msgstr "Équivaut à utiliser l'option B<--verbose --safe>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1635
+msgid "B<--download-version> I<version>"
+msgstr "B<--download-version> I<version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1637
+msgid ""
+"Specify the I<version> which the upstream release must match in order to be "
+"considered, rather than using the release with the highest version. (a best "
+"effort feature)"
+msgstr ""
+"Indiquer la I<version> à laquelle la version amont doit correspondre pour "
+"être prise en compte, plutôt qu'utiliser celle avec le numéro de version le "
+"plus important. (fonctionnalité optimale)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1641
+msgid "B<--download-debversion> I<version>"
+msgstr "B<--download-debversion> I<version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1643
+msgid ""
+"Specify the Debian package version to download the corresponding upstream "
+"release version. The B<dversionmangle> and B<uversionmangle> rules are "
+"considered. (a best effort feature)"
+msgstr ""
+"Préciser la version du paquet Debian dont il faut télécharger la version "
+"amont correspondante. Les règles B<dversionmangle> et B<uversionmangle> sont "
+"prises en compte. (fonctionnalité optimale)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1647
+msgid "B<--download-current-version>"
+msgstr "B<--download-current-version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1649
+msgid "Download the currently packaged version. (a best effort feature)"
+msgstr "Télécharger la version actuelle du paquet. (fonctionnalité optimale)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1654 ../scripts/uscan.pl:1658
+msgid ""
+"See the below section L<Directory name checking> for an explanation of this "
+"option."
+msgstr ""
+"Veuillez consulter la section L<Vérification du nom du répertoire> ci-dessus "
+"pour une explication de cette option."
+
+#. type: =item
+#: ../scripts/uscan.pl:1660
+msgid ""
+"B<--destdir> I<path> Normally, B<uscan> changes its internal current "
+"directory to the package's source directory where the F<debian/> is "
+"located. Then the destination directory for the downloaded tarball and "
+"other files is set to the parent directory F<../> from this internal current "
+"directory."
+msgstr ""
+"B<--destdir> I<chemin> Normalement, B<uscan> change son répertoire courant "
+"interne pour le répertoire source du paquet où le répertoire F<debian/> est "
+"situé. Ensuite, le répertoire de destination de l'archive téléchargée et des "
+"autres fichiers est défini sur le répertoire parent F<../> à partir de ce "
+"répertoire courant interne."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1666
+msgid ""
+"This default destination directory can be overridden by setting B<--destdir> "
+"option to a particular I<path>. If this I<path> is a relative path, the "
+"destination directory is determined in relative to the internal current "
+"directory of B<uscan> execution. If this I<path> is a absolute path, the "
+"destination directory is set to I<path> irrespective of the internal current "
+"directory of B<uscan> execution."
+msgstr ""
+"Le répertoire de destination par défaut peut être remplacé en définissant "
+"l'option B<--destdir> vers un I<chemin> particulier. Si ce I<chemin> est un "
+"chemin relatif, le répertoire de destination est déterminé relativement au "
+"répertoire courant interne d'exécution d'B<uscan>. Si ce I<chemin> est un "
+"chemin absolu, le répertoire de destination est fixé à "
+"I<chemin>indépendamment du répertoire courant interne d'exécution d'B<uscan>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1673
+msgid ""
+"The above is true not only for the simple B<uscan> run in the single source "
+"tree but also for the advanced scanning B<uscan> run with subdirectories "
+"holding multiple source trees."
+msgstr ""
+"Ce qui précède est vrai non seulement pour l'exécution unique d'B<uscan> "
+"dans une arborescence de sources unique, mais aussi pour l'exécution par "
+"B<uscan> d'une recherche avancée dans des sous-répertoires contenant "
+"plusieurs arborescences de sources."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1677
+msgid ""
+"One exception is when B<--watchfile> and B<--package> are used together. "
+"For this case, the internal current directory of B<uscan> execution and the "
+"default destination directory are set to the current directory F<.> where "
+"B<uscan> is started. The default destination directory can be overridden by "
+"setting B<--destdir> option as well."
+msgstr ""
+"Une exception existe quand les options B<--watchfile> et B<--package> sont "
+"utilisées ensemble. Dans ce cas, le répertoire courant interne d'exécution "
+"d'B<uscan> et le répertoire de destination par défaut sont définis au "
+"répertoire courant F<.> où B<uscan> est lancé. Le répertoire de destination "
+"par défaut peut être remplacé en définissant aussi l'option B<--destdir>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1685
+msgid ""
+"Specify the name of the package to check for rather than examining F<debian/"
+"changelog>; this requires the B<--upstream-version> (unless a version is "
+"specified in the F<watch> file) and B<--watchfile> options as well. "
+"Furthermore, no directory scanning will be done and nothing will be "
+"downloaded. This option automatically sets B<--no-download> and B<--skip-"
+"signature>; and probably most useful in conjunction with the DEHS system "
+"(and B<--dehs>)."
+msgstr ""
+"Indiquer le nom du paquet à contrôler plutôt qu'examiner I<debian/"
+"changelog> ; cela nécessite les options B<--upstream-version> (à moins "
+"qu'une option ne soit précisée dans le fichier I<watch>) et B<--watchfile>. "
+"De plus, aucun répertoire ne sera scanné et rien ne sera téléchargé. Cette "
+"option configure automatiquement B<--no-download> et B<--skip-signature> ; "
+"elle est probablement la plus utile en conjonction avec le système DEHS (et "
+"B<--dehs>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1692
+msgid "B<--upstream-version> I<upstream-version>"
+msgstr "B<--upstream-version> I<version-amont>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1694
+msgid ""
+"Specify the current upstream version rather than examine F<debian/watch> or "
+"F<debian/changelog> to determine it. This is ignored if a directory scan is "
+"being performed and more than one F<debian/watch> file is found."
+msgstr ""
+"Indiquer la version amont actuelle plutôt qu'examiner le fichier F<debian/"
+"watch> ou le journal des modifications de Debian pour le déterminer. C'est "
+"ignoré si un balayage de répertoire est fait et que plus d'un fichier "
+"F<debian/watch> est trouvé."
+
+#. type: =item
+#: ../scripts/uscan.pl:1698
+msgid "B<--watchfile> I<watchfile>"
+msgstr "B<--watchfile> I<watchfile>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1700
+msgid ""
+"Specify the I<watchfile> rather than perform a directory scan to determine "
+"it. If this option is used without B<--package>, then B<uscan> must be "
+"called from within the Debian package source tree (so that F<debian/"
+"changelog> can be found simply by stepping up through the tree)."
+msgstr ""
+"Indiquer le fichier I<watch> plutôt que faire un balayage de répertoire pour "
+"le déterminer. Si cette option est utilisée sans B<--package>, B<uscan> "
+"devra être appelé depuis l'arborescence du paquet Debian source (de sorte "
+"que F<debian/changelog> puisse être trouvé simplement par une recherche dans "
+"l'arborescence)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1705
+msgid ""
+"One exception is when B<--watchfile> and B<--package> are used together. "
+"B<uscan> can be called from anywhare and the internal current directory of "
+"B<uscan> execution and the default destination directory are set to the "
+"current directory F<.> where B<uscan> is started."
+msgstr ""
+"Une exception existe quand les options B<--watchfile> et B<--package> sont "
+"utilisées ensemble. B<uscan> peut être appelé à partir de n'importe quel "
+"répertoire et le répertoire courant interne d'exécution d'B<uscan> et le "
+"répertoire de destination par défaut sont définis au répertoire courant F<.> "
+"où B<uscan> est lancé."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1710
+msgid "See more in the B<--destdir> explanation."
+msgstr "Vous trouverez plus d'informations dans l'explication de B<--destdir>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1712
+msgid "B<--bare>"
+msgstr "B<--bare>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1714
+msgid ""
+"Disable all site specific special case codes to perform URL redirections and "
+"page content alterations."
+msgstr ""
+"Désactiver tout le code \"special code\" spécifique au site pour réaliser "
+"les redirections d'URL et les altérations de contenu de page."
+
+#. type: =item
+#: ../scripts/uscan.pl:1717
+msgid "B<--http-header>"
+msgstr "B<--http-header>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1719
+msgid ""
+"Add specified header in HTTP requests for matching url. This option can be "
+"used more than one time, values must be in the form \"baseUrl@Name=value. "
+"Example:"
+msgstr ""
+"Ajoute l'en-tête spécifié dans les requêtes HTTP correspondant à l'url. "
+"Cette option peut être multivaluée, les valeurs doivent être de la forme "
+"\"baseUrl@NomEnTête=valeur\". Exemple :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1722
+#, no-wrap
+msgid ""
+" uscan --http-header https://example.org@My-Token=qwertyuiop\n"
+"\n"
+msgstr ""
+" uscan --http-header https://example.org@My-Token=azertyuiop\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1724
+msgid "Security:"
+msgstr "Sécurité :"
+
+#. type: =item
+#: ../scripts/uscan.pl:1728
+msgid ""
+"The given I<baseUrl> must exactly match the base url before '/'. Examples:"
+msgstr ""
+"L'URL I<baseUrl> doit exactement correspondre à l'URL de base avant \"/\". "
+"Exemples :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1731
+#, no-wrap
+msgid ""
+" | --http-header value | Good for | Never used |\n"
+" +------------------------------------+-----------------------------+------------+\n"
+" | https://example.org.com@Hdr=Value | https://example.org.com/... | |\n"
+" | https://example.org.com/@Hdr=Value | | X |\n"
+" | https://e.com:1879@Hdr=Value | https://e.com:1879/... | |\n"
+" | https://e.com:1879/dir@Hdr=Value | https://e.com:1879/dir/... | |\n"
+" | https://e.com:1879/dir/@Hdr=Value | | X |\n"
+"\n"
+msgstr ""
+" | valeur --http-header | Bonne pour | Inutilisée |\n"
+" +------------------------------------+-----------------------------+------------+\n"
+" | https://example.org.com@Hdr=Value | https://example.org.com/... | |\n"
+" | https://example.org.com/@Hdr=Value | | X |\n"
+" | https://e.com:1879@Hdr=Value | https://e.com:1879/... | |\n"
+" | https://e.com:1879/dir@Hdr=Value | https://e.com:1879/dir/... | |\n"
+" | https://e.com:1879/dir/@Hdr=Value | | X |\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:1739
+msgid ""
+"It is strongly recommended to not use this feature to pass a secret token "
+"over unciphered connection I<(http://)>"
+msgstr ""
+"Il est vivement recommandé de ne pas utiliser cette fonctionnalité pour "
+"passer un jeton secret via une connexion non chiffrée I<(http://)>"
+
+#. type: =item
+#: ../scripts/uscan.pl:1742
+msgid ""
+"You can use C<USCAN_HTTP_HEADER> variable (in C<~/.devscripts>) to hide "
+"secret token from scripts"
+msgstr ""
+"On peut utiliser la variable C<USCAN_HTTP_HEADER> (dans C<~/.devscripts>) "
+"pour masquer les jetons secrets des scripts"
+
+#. type: =item
+#: ../scripts/uscan.pl:1747
+msgid "B<--no-exclusion>"
+msgstr "B<--no-exclusion>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1749
+msgid ""
+"Don't automatically exclude files mentioned in F<debian/copyright> field "
+"B<Files-Excluded>."
+msgstr ""
+"Ne pas exclure automatiquement les fichiers mentionnés dans le champ B<Files-"
+"Excluded> de F<debian/copyright>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1751
+msgid "B<--pasv>"
+msgstr "B<--pasv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1753
+msgid "Force PASV mode for FTP connections."
+msgstr "Forcer le mode passif (\"PASV\") pour les connexions FTP."
+
+#. type: =item
+#: ../scripts/uscan.pl:1755
+msgid "B<--no-pasv>"
+msgstr "B<--no-pasv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1757
+msgid "Don't use PASV mode for FTP connections."
+msgstr "Ne pas utiliser le mode passif (PASV) pour les connexions FTP."
+
+#. type: TP
+#: ../scripts/uscan.pl:1759 ../scripts/uupdate.1:83
+#, no-wrap
+msgid "B<--no-symlink>"
+msgstr "B<--no-symlink>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1761
+msgid "Don't rename nor repack upstream tarball."
+msgstr "Ne pas renommer ni rempaqueter l'archive amont."
+
+#. type: =item
+#: ../scripts/uscan.pl:1763
+msgid "B<--timeout> I<N>"
+msgstr "B<--timeout> I<N>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1765
+msgid "Set timeout to I<N> seconds (default 20 seconds)."
+msgstr "Définir le temps d'attente à I<N> secondes (20 secondes par défaut)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1767
+msgid "B<--user-agent>, B<--useragent>"
+msgstr "B<--user-agent>, B<--useragent>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1769
+msgid "Override the default user agent header."
+msgstr "Utiliser un champ \"user agent\" différent de celui par défaut."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1773
+msgid "Give brief usage information."
+msgstr "Afficher un bref message d'aide."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1781
+msgid ""
+"B<uscan> also accepts following options and passes them to B<mk-origtargz>:"
+msgstr ""
+"B<uscan> accepte aussi les options suivantes et les passe à B<mk-origtargz> :"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1787
+msgid ""
+"Make B<orig.tar.gz> (with the appropriate extension) symlink to the "
+"downloaded files. (This is the default behavior.)"
+msgstr ""
+"Faire des fichiers résultants B<orig.tar.gz> (avec l'extension appropriée) "
+"des liens symboliques vers les fichiers téléchargés (c'est le comportement "
+"par défaut)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1792
+msgid "Instead of symlinking as described above, copy the downloaded files."
+msgstr ""
+"Au lieu de créer des liens symboliques comme décrit précédemment, copier les "
+"fichiers téléchargés."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1796
+msgid "Instead of symlinking as described above, rename the downloaded files."
+msgstr ""
+"Au lieu de créer des liens symboliques comme décrit précédemment, renommer "
+"les fichiers téléchargés."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1800
+msgid ""
+"After having downloaded an lzma tar, xz tar, bzip tar, gz tar, zip, jar, "
+"xpi, zstd archive, repack it to the specified compression (see B<--"
+"compression>)."
+msgstr ""
+"Après avoir téléchargé une archive lzma tar, xz tar, bzip tar, gz tar, zip, "
+"jar, xpi, zstd, le rempaqueter à la compression spécifiée (voir B<--"
+"compression>)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1803
+msgid ""
+"The unzip package must be installed in order to repack zip and jar archives, "
+"the mozilla-devscripts package must be installed to repack xpi archives, the "
+"xz-utils package must be installed to repack lzma or xz tar archives, and "
+"zstd must be installed to repack zstd archives."
+msgstr ""
+"Le paquet B<unzip> doit être installé pour rempaqueter les archives zip et "
+"jar, le paquet mozilla-devscripts pour les archives xpi, et le paquet B<xz-"
+"utils> pour les archives tar compressées avec lzma ou xz et le paquet "
+"B<zstd> pour les archives zstd."
+
+#. type: =item
+#: ../scripts/uscan.pl:1808
+msgid "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> ]"
+msgstr "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> ]"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1810
+msgid ""
+"In the case where the upstream sources are repacked (either because B<--"
+"repack> option is given or F<debian/copyright> contains the field B<Files-"
+"Excluded>), it is possible to control the compression method via the "
+"parameter. The default is B<gzip> for normal tarballs, and B<xz> for "
+"tarballs generated directly from the git repository."
+msgstr ""
+"Au cas où les sources amont sont rempaquetés (soit parce que l’option B<--"
+"repack> est donnée, soit parce que F<debian/copyright> contient le champ "
+"B<Files-Excluded>), la méthode de compression peut être contrôlée avec le "
+"paramètre I<comp>. La méthode par défaut est B<gzip> pour les archives "
+"normales, et B<xz> pour les archives générées directement à partir du dépôt "
+"git."
+
+#. type: =item
+#: ../scripts/uscan.pl:1816
+msgid "B<--copyright-file> I<copyright-file>"
+msgstr "B<--copyright-file> I<fichier_de_copyright>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1818
+msgid ""
+"Exclude files mentioned in B<Files-Excluded> in the given I<copyright-"
+"file>. This is useful when running B<uscan> not within a source package "
+"directory."
+msgstr ""
+"Exclure les fichiers mentionnés dans le champ B<Files-Excluded> du "
+"I<fichier_de_copyright> donné. C’est utile lors de l’utilisation d’B<uscan> "
+"en dehors d’un répertoire de paquet source."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1823
+msgid "DEVSCRIPT CONFIGURATION VARIABLES"
+msgstr "VARIABLES DE CONFIGURATION DE DEVSCRIPT"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1825
+msgid ""
+"For the basic usage, B<uscan> does not require to set these configuration "
+"variables."
+msgstr ""
+"Pour une utilisation de base d'B<uscan>, la configuration de ces variables "
+"n'est pas nécessaire."
+
+# NOTE: presque identique à un autre ?
+#. type: textblock
+#: ../scripts/uscan.pl:1828
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. These may "
+"be overridden by command line options. Environment variable settings are "
+"ignored for this purpose. If the first command line option given is B<--"
+"noconf>, then these files will not be read. The currently recognized "
+"variables are:"
+msgstr ""
+"Les deux fichiers de configuration F</etc/devscripts.conf> et F<~/."
+"devscripts> sont évalués dans cet ordre par un interpréteur de commandes "
+"(\"shell\") pour placer les variables de configuration. Des options de ligne "
+"de commande peuvent être utilisées pour neutraliser les paramètres des "
+"fichiers de configuration. Les paramètres des variables d'environnement sont "
+"ignorés à cette fin. Si la première option donnée en ligne de commande est "
+"B<--noconf>, alors ces fichiers ne sont pas évalués. Les variables "
+"actuellement identifiées sont :"
+
+#. type: =item
+#: ../scripts/uscan.pl:1837
+msgid "B<USCAN_DOWNLOAD>"
+msgstr "B<USCAN_DOWNLOAD>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1839
+msgid "Download or report only:"
+msgstr "Télécharger ou rapporter l'information seulement:"
+
+#. type: =item
+#: ../scripts/uscan.pl:1843
+msgid ""
+"B<no>: equivalent to B<--no-download>, newer upstream files will not be "
+"downloaded."
+msgstr ""
+"B<3> : équivaut à B<--no-download>, les nouveaux fichiers ne seront pas "
+"téléchargés."
+
+#. type: =item
+#: ../scripts/uscan.pl:1846
+msgid ""
+"B<yes>: equivalent to B<--download>, newer upstream files will be "
+"downloaded. This is the default behavior."
+msgstr ""
+"B<yes>: equivaut à B<--download>, les nouveaux fichiers amont seront "
+"téléchargés. C'est le comportement par défaut."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1849
+msgid "See also B<--force-download> and B<--overwrite-download>."
+msgstr "Voir aussi B<--force-download> and B<--overwrite-download>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1853
+msgid "B<USCAN_SAFE>"
+msgstr "B<USCAN_SAFE>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1855
+msgid ""
+"If this is set to B<yes>, then B<uscan> avoids running unsafe scripts by "
+"skipping both the repacking of the downloaded package and the updating of "
+"the new source tree; this is equivalent to the B<--safe> options; this also "
+"sets the default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+"Si elle est définie à B<yes>, alors B<uscan> évite l'exécution de scripts "
+"non sécurisés en sautant à la fois le rempaquetage du paquet téléchargé et "
+"la mise à jour de l'arborescence de la nouvelle source ; c'est l'équivalent "
+"des options B<--safe> ; cela définit aussi les options par défaut à B<--no-"
+"download> et B<--skip-signature>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1860
+msgid "B<USCAN_PASV>"
+msgstr "B<USCAN_PASV>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1862
+msgid ""
+"If this is set to yes or no, this will force FTP connections to use PASV "
+"mode or not to, respectively. If this is set to default, then B<Net::FTP(3)> "
+"makes the choice (primarily based on the B<FTP_PASSIVE> environment "
+"variable)."
+msgstr ""
+"Si elle est définie à I<yes> ou I<no>, cela force respectivement à utiliser "
+"ou à ne pas utiliser le mode passif pour les connexions FTP. Si elle est "
+"définie à I<default>, alors B<Net::FTP>(3) fait un choix (basé "
+"principalement sur la variable d'environnement B<FTP_PASSIVE>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1866
+msgid "B<USCAN_TIMEOUT>"
+msgstr "B<USCAN_TIMEOUT>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1868
+msgid ""
+"If set to a number I<N>, then set the timeout to I<N> seconds. This is "
+"equivalent to the B<--timeout> option."
+msgstr ""
+"Si cette option est définie à un nombre I<N>, alors définir le temps limite "
+"à I<N> secondes. C'est équivalent à l'option B<--timeout>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1871
+msgid "B<USCAN_SYMLINK>"
+msgstr "B<USCAN_SYMLINK>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1873
+msgid ""
+"If this is set to no, then a I<pkg>_I<version>B<.orig.tar.{gz|bz2|lzma|xz}> "
+"symlink will not be made (equivalent to the B<--no-symlink> option). If it "
+"is set to B<yes> or B<symlink>, then the symlinks will be made. If it is set "
+"to B<rename>, then the files are renamed (equivalent to the B<--rename> "
+"option)."
+msgstr ""
+"Si cette option est mise à I<no>, un lien symbolique vers "
+"I<paquet>_I<version>B<.orig.tar.{gz|bz2|lzma|xz}> ne sera pas créé "
+"(équivalent à l'option B<--no-symlink>). Si elle est à B<yes> ou B<symlink>, "
+"les liens symboliques seront créés. Si elle est à I<rename>, les fichiers "
+"sont renommés (équivalent à l'option B<--rename>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1878
+msgid "B<USCAN_DEHS_OUTPUT>"
+msgstr "B<USCAN_DEHS_OUTPUT>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1880
+msgid ""
+"If this is set to B<yes>, then DEHS-style output will be used. This is "
+"equivalent to the B<--dehs> option."
+msgstr ""
+"Si cette option est à B<yes>, alors la sortie sera de type DEHS, comme si "
+"l'option B<--dehs> était utilisée."
+
+#. type: =item
+#: ../scripts/uscan.pl:1883
+msgid "B<USCAN_VERBOSE>"
+msgstr "B<USCAN_VERBOSE>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1885
+msgid ""
+"If this is set to B<yes>, then verbose output will be given. This is "
+"equivalent to the B<--verbose> option."
+msgstr ""
+"Si elle est définie à B<yes>, alors la sortie sera verbeuse, comme si "
+"l'option B<--verbose> était utilisée."
+
+#. type: =item
+#: ../scripts/uscan.pl:1888
+msgid "B<USCAN_USER_AGENT>"
+msgstr "B<USCAN_USER_AGENT>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1890
+msgid ""
+"If set, the specified user agent string will be used in place of the "
+"default. This is equivalent to the B<--user-agent> option."
+msgstr ""
+"Si elle est définie, elle spécifie la chaîne à utiliser pour annoncer le "
+"navigateur (\"user agent\") à la place de la valeur par défaut. C'est "
+"équivalent à l'option B<--user-agent>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1893
+msgid "B<USCAN_DESTDIR>"
+msgstr "B<USCAN_DESTDIR>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1895
+msgid ""
+"If set, the downloaded files will be placed in this directory. This is "
+"equivalent to the B<--destdir> option."
+msgstr ""
+"Si elle est définie, elle désigne le répertoire où les fichiers téléchargés "
+"seront placés. C'est équivalent à l'option B<--destdir>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1898
+msgid "B<USCAN_REPACK>"
+msgstr "B<USCAN_REPACK>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1900
+msgid ""
+"If this is set to yes, then after having downloaded a bzip tar, lzma tar, xz "
+"tar, zip or zstd archive, uscan will repack it to the specified compression "
+"(see B<--compression>). This is equivalent to the B<--repack> option."
+msgstr ""
+"Si elle est définie à B<yes>, alors après avoir téléchargé une archive tar "
+"compressée avec bzip, lzma, xz ou zstd ou une archive ZIP, B<uscan> recréera "
+"une archive compressée du type défini (voir B<--compression>). C'est "
+"équivalent à l'option B<--repack>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1904
+msgid "B<USCAN_EXCLUSION>"
+msgstr "B<USCAN_EXCLUSION>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1906
+msgid ""
+"If this is set to no, files mentioned in the field B<Files-Excluded> of "
+"F<debian/copyright> will be ignored and no exclusion of files will be "
+"tried. This is equivalent to the B<--no-exclusion> option."
+msgstr ""
+"Si elle est définie à I<no>, les fichiers mentionnés dans le champ B<Files-"
+"Excluded> de I<debian/copyright> seront ignorés et aucune exclusion de "
+"fichiers ne sera tentée. C'est équivalent à l'option B<--no-exclusion>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1910
+msgid "B<USCAN_HTTP_HEADER>"
+msgstr "B<USCAN_HTTP_HEADER>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1912
+msgid ""
+"If set, the specified http header will be used if URL match. This is "
+"equivalent to B<--http-header> option."
+msgstr ""
+"Si définie, l'en-tête spécifié sera utilisé pour toutes les URLs "
+"correspondantes. C'est équivalent à l'option B<--http-header>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1919
+msgid ""
+"The exit status gives some indication of whether a newer version was found "
+"or not; one is advised to read the output to determine exactly what happened "
+"and whether there were any warnings to be noted."
+msgstr ""
+"La valeur de retour indique si une nouvelle version a été trouvée ; il est "
+"conseillé de lire la sortie pour déterminer exactement ce qu'il s'est passé "
+"et pour voir s'il n'y a pas eu d'avertissement."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1927
+msgid ""
+"Either B<--help> or B<--version> was used, or for some F<watch> file which "
+"was examined, a newer upstream version was located."
+msgstr ""
+"Soit les options B<--help> ou B<--version> ont été utilisées, soit une "
+"nouvelle version amont a été trouvée pour un des fichiers F<watch> examinés."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1932
+msgid ""
+"No newer upstream versions were located for any of the F<watch> files "
+"examined."
+msgstr ""
+"Aucune nouvelle version amont n'a été trouvée pour les fichiers F<watch> "
+"examinés."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1936
+msgid "ADVANCED FEATURES"
+msgstr "FONCTIONNALITÉS AVANCÉES"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1938
+msgid ""
+"B<uscan> has many other enhanced features which are skipped in the above "
+"section for the simplicity. Let's check their highlights."
+msgstr ""
+"B<uscan> possède beaucoup d'autres fonctionnalités qui sont sautées dans la "
+"section ci-dessus, pour être plus simple. Regardons leurs points marquants."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1941
+msgid ""
+"B<uscan> can be executed with I<path> as its argument to change the starting "
+"directory of search from the current directory to I<path> ."
+msgstr ""
+"B<uscan> peut être exécuté avec I<chemin> comme paramètre pour passer le "
+"répertoire de départ de recherche du répertoire courant à I<chemin>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1944
+msgid ""
+"If you are not sure what exactly is happening behind the scene, please "
+"enable the B<--verbose> option. If this is not enough, enable the B<--"
+"debug> option too see all the internal activities."
+msgstr ""
+"Si vous ne savez pas exactement ce qui se passe dans les coulisses, veuillez "
+"activer l'option B<--verbose>. Si ce n'est pas suffisant, activez l'option "
+"B<--debug> pour voir toutes les actions internes."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1948
+msgid ""
+"See L<COMMANDLINE OPTIONS> and L<DEVSCRIPT CONFIGURATION VARIABLES> for "
+"other variations."
+msgstr ""
+"Voir L<OPTIONS DE LIGNE DE COMMANDE> et L<VARIABLES DE CONFIGURATION DE "
+"DEVSCRIPT> pour d'autres variantes."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1951
+msgid "Custom script"
+msgstr "Script personnalisé"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1953
+msgid ""
+"The optional I<script> parameter in F<debian/watch> means to execute "
+"I<script> with options after processing this line if specified."
+msgstr ""
+"Le paramètre optionnel I<script> dans F<debian/watch> signifie exécuter "
+"I<script> avec des options après avoir traité cette ligne si elle est "
+"spécifiée."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1956
+msgid ""
+"See L<HISTORY AND UPGRADING> for how B<uscan> invokes the custom I<script>."
+msgstr ""
+"Voir L<HISTORIQUE ET MISE À NIVEAU> pour voir comment B<uscan> invoque le "
+"<script> personnalisé."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1958
+msgid ""
+"For compatibility with other tools such as B<git-buildpackage>, it may not "
+"be wise to create custom scripts with random behavior. In general, "
+"B<uupdate> is the best choice for the non-native package and custom scripts, "
+"if created, should behave as if B<uupdate>. For possible use case, see "
+"L<http://bugs.debian.org/748474> as an example."
+msgstr ""
+"Pour des raisons de compatibilité avec d'autres outils tels que B<git-"
+"buildpackage>, il peut être judicieux de ne pas créer des scripts "
+"personnalisés au comportement aléatoire. En général, B<uupdate> est le "
+"meilleur choix pour un paquet non natif, et les scripts personnalisés, s'ils "
+"existent, devraient se comporter comme B<uupdate>. Pour des cas "
+"d'utilisation potentiels, voir L<http://bugs.debian.org/748474> comme "
+"exemple."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1964
+msgid "URL diversion"
+msgstr "Détournement d'URL"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1966
+msgid ""
+"Some popular web sites changed their web page structure causing maintenance "
+"problems to the watch file. There are some redirection services created to "
+"ease maintenance of the watch file. Currently, B<uscan> makes automatic "
+"diversion of URL requests to the following URLs to cope with this situation."
+msgstr ""
+"Certains sites populaires ont changé leur structure de page web provoquant "
+"des problèmes de maintenance du fichier de veille. Des services de "
+"redirection ont été créés pour faciliter sa maintenance. Actuellement, "
+"B<uscan> fait un détournement automatique des requêtes d'URL pour les URL "
+"suivantes afin de gérer cette situation."
+
+#. type: =item
+#: ../scripts/uscan.pl:1973
+msgid "* L<http://sf.net>"
+msgstr "* L<http://sf.net>"
+
+#. type: =item
+#: ../scripts/uscan.pl:1975
+msgid "* L<http://pypi.python.org>"
+msgstr "* L<http://pypi.python.org>"
+
+# NOTE: "and in order to promote efficiency" ?
+#. type: textblock
+#: ../scripts/uscan.pl:1981
+msgid ""
+"Similarly to several other scripts in the B<devscripts> package, B<uscan> "
+"explores the requested directory trees looking for F<debian/changelog> and "
+"F<debian/watch> files. As a safeguard against stray files causing potential "
+"problems, and in order to promote efficiency, it will examine the name of "
+"the parent directory once it finds the F<debian/changelog> file, and check "
+"that the directory name corresponds to the package name. It will only "
+"attempt to download newer versions of the package and then perform any "
+"requested action if the directory name matches the package name. Precisely "
+"how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Comme plusieurs autres scripts du paquet B<devscripts>, B<uscan> parcourt "
+"l'arborescence du répertoire demandé à la recherche de fichiers F<debian/"
+"changelog> et F<debian/watch>. Pour se protéger contre certains fichiers "
+"égarés qui pourraient poser problème, et pour des raisons d'efficacité, il "
+"examine le nom du répertoire parent une fois qu'il a trouvé le fichier "
+"F<debian/changelog>, et vérifie que le nom du répertoire correspond au nom "
+"du paquet. Il ne cherchera à télécharger les nouvelles versions d'un paquet "
+"et à effectuer l'action demandée que si le nom du répertoire correspond au "
+"nom du paquet. La façon précise utilisée est contrôlée par les deux "
+"variables du fichier de configuration B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> et "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, et les options en ligne de commande "
+"associées B<--check-dirname-level> et B<--check-dirname-regex>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2004
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for F<debian/changelog>, that is, the directory containing F<debian/"
+"changelog> is not the directory from which B<uscan> was invoked. This is "
+"the default behavior."
+msgstr ""
+"Ne vérifie le nom du répertoire que s'il a fallu changer de répertoire pour "
+"trouver le fichier F<debian/changelog>, c'est-à-dire que le répertoire qui "
+"contient F<debian/changelog> n'est pas le répertoire dans lequel B<uscan> a "
+"été invoqué. C'est le comportement par défaut."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2015
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by pwd(1)) matches the regex given by the configuration file "
+"option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option B<--"
+"check-dirname-regex> I<regex>. Here regex is a Perl regex (see "
+"perlre(3perl)), which will be anchored at the beginning and the end. If "
+"regex contains a B</>, then it must match the full directory path. If not, "
+"then it must match the full directory name. If regex contains the string "
+"I<package>, this will be replaced by the source package name, as determined "
+"from the F<debian/changelog>. The default value for the regex is: "
+"I<package>B<(-.+)?>, thus matching directory names such as I<package> and "
+"I<package>-I<version>."
+msgstr ""
+"Le nom du répertoire est vérifié en testant si le nom du répertoire actuel "
+"(donné par B<pwd>(1)) correspond à l'expression rationnelle donnée par la "
+"variable B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> du fichier de configuration ou "
+"par l'option B<--check-dirname-regex> I<expression_rationnelle>. Il s'agit "
+"d'une expression rationnelle Perl (voir B<perlre>(1)), qui sera ancrée à son "
+"début et à sa fin. Si elle contient un B</>, alors elle doit correspondre au "
+"chemin complet. Sinon, elle doit correspondre au nom de répertoire complet. "
+"Si elle contient la chaîne I<paquet>, cette chaîne sera remplacée par le nom "
+"du paquet source déterminé par le fichier F<debian/changelog>. La valeur par "
+"défaut de cette expression rationnelle est : I<paquet>B<(-.+)?>, ce qui "
+"correspond aux répertoires nommés I<paquet> ou I<paquet->I<version>."
+
+#. type: =head1
+#: ../scripts/uscan.pl:2026
+msgid "HISTORY AND UPGRADING"
+msgstr "HISTORIQUE ET MISE À NIVEAU"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2028
+msgid ""
+"This section briefly describes the backwards-incompatible F<watch> file "
+"features which have been added in each F<watch> file version, and the first "
+"version of the B<devscripts> package which understood them."
+msgstr ""
+"Cette section décrit brièvement les incompatibilités inverses des "
+"fonctionnalités du fichier F<watch> qui ont été ajoutées dans chaque version "
+"du fichier F<watch> et la première version du paquet B<devscripts> qui les "
+"comprenait."
+
+#. type: =item
+#: ../scripts/uscan.pl:2034
+msgid "Pre-version 2"
+msgstr "Versions antérieures à 2"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2036
+msgid ""
+"The F<watch> file syntax was significantly different in those days. Don't "
+"use it. If you are upgrading from a pre-version 2 F<watch> file, you are "
+"advised to read this manpage and to start from scratch."
+msgstr ""
+"La syntaxe du fichier F<watch> était très différente à l'époque. Ne "
+"l'utilisez plus. Si vous mettez votre fichier F<watch> à niveau depuis une "
+"version antérieure à 2, il est recommandé de lire cette page de manuel et de "
+"recommencer à zéro."
+
+#. type: =item
+#: ../scripts/uscan.pl:2040
+msgid "Version 2"
+msgstr "Version 2"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2042
+msgid ""
+"B<devscripts> version 2.6.90: The first incarnation of the current style of "
+"F<watch> files. This version is also deprecated and will be rejected after "
+"the Debian 11 release."
+msgstr ""
+"B<devscripts> version 2.6.90 : la première incarnation du style actuel de "
+"fichier F<watch>. Cette version est également dépréciée et sera rejetée dès "
+"la publication de Debian 11."
+
+#. type: =item
+#: ../scripts/uscan.pl:2046
+msgid "Version 3"
+msgstr "Version 3"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2048
+msgid ""
+"B<devscripts> version 2.8.12: Introduced the following: correct handling of "
+"regex special characters in the path part, directory/path pattern matching, "
+"version number in several parts, version number mangling. Later versions "
+"have also introduced URL mangling."
+msgstr ""
+"B<devscripts> version 2.8.12 a introduit les choses suivantes : manipulation "
+"correcte des expressions rationnelles dans la partie du chemin, recherche de "
+"motif d'un répertoire/chemin, numéro de version dans plusieurs parties, "
+"numéro de version modifiable. Les versions suivantes ont introduit la "
+"modification des liens."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2053
+msgid ""
+"If you are upgrading from version 2, the key incompatibility is if you have "
+"multiple groups in the pattern part; whereas only the first one would be "
+"used in version 2, they will all be used in version 3. To avoid this "
+"behavior, change the non-version-number groups to be B<(?:> I< ...> B<)> "
+"instead of a plain B<(> I< ... > B<)> group."
+msgstr ""
+"Si vous êtes en train de vous mettre à niveau depuis la version 2, "
+"l'incompatibilité principale est lorsqu'il existe plusieurs groupes dans la "
+"partie des motifs. Alors que seul le premier était utilisé dans la "
+"version 2, ils le seront tous dans la version 3. Pour éviter ce "
+"comportement, modifiez les groupes non liés au numéro de version en B<(?:> "
+"I< ...> B<)> au lieu d'un groupe ordinaire B<(> I< ... > B<)>."
+
+#. type: =item
+#: ../scripts/uscan.pl:2061
+msgid ""
+"* B<uscan> invokes the custom I<script> as \"I<script> B<--upstream-version> "
+"I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\"."
+msgstr ""
+"* B<uscan> invoque le I<script> personnalisé comme ceci : I<script> B<--"
+"upstream-version> I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>."
+
+#. type: =item
+#: ../scripts/uscan.pl:2064
+msgid ""
+"* B<uscan> invokes the standard B<uupdate> as \"B<uupdate> B<--no-symlink --"
+"upstream-version> I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\"."
+msgstr ""
+"* B<uscan> invoque B<uupdate> standard comme ceci : \"B<uupdate> B<--no-"
+"symlink --upstream-version> I<version> B<../>I<spkg>B<_>I<version>B<.orig."
+"tar.gz>\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:2069
+msgid "Version 4"
+msgstr "Version 4"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2071
+msgid ""
+"B<devscripts> version 2.15.10: The first incarnation of F<watch> files "
+"supporting multiple upstream tarballs."
+msgstr ""
+"B<devscripts> version 2.15.10 : la première incarnation des fichiers "
+"F<watch> prenant en charge les archives amont multiples."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2074
+msgid ""
+"The syntax of the watch file is relaxed to allow more spaces for readability."
+msgstr ""
+"La syntaxe du fichier de veille est assouplie pour permettre plus d'espaces "
+"de lisibilité."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2076
+msgid ""
+"If you have a custom script in place of B<uupdate>, you may also encounter "
+"problems updating from Version 3."
+msgstr ""
+"Si vous avez un script personnalisé à la place de B<uupdate>, vous pouvez "
+"aussi rencontrer des problèmes lors de la mise à jour à partir de la "
+"version 3."
+
+#. type: =item
+#: ../scripts/uscan.pl:2081
+msgid ""
+"* B<uscan> invokes the custom I<script> as \"I<script> B<--upstream-version> "
+"I<version>\"."
+msgstr ""
+"* B<uscan> invoque le I<script> personnalisé comme ceci : \"I<script> B<--"
+"upstream-version> I<version>\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:2084
+msgid ""
+"* B<uscan> invokes the standard B<uupdate> as \"B<uupdate> B<--find> B<--"
+"upstream-version> I<version>\"."
+msgstr ""
+"* B<uscan> invoque B<uupdate> standard comme ceci : \"B<uupdate> B<--find> "
+"B<--upstream-version> I<version>\"."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2089
+msgid ""
+"Restriction for B<--dehs> is lifted by redirecting other output to STDERR "
+"when it is activated."
+msgstr ""
+"Les restrictions pour B<--dehs> sont levées en redirigeant les autres "
+"sorties sur la sortie d'erreur standard lorsque elle est active."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2096
+msgid "dpkg(1), mk-origtargz(1), perlre(1), uupdate(1), devscripts.conf(5)"
+msgstr "dpkg(1), mk-origtargz(1), perlre(1), uupdate(1), devscripts.conf(5)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2100
+msgid ""
+"The original version of uscan was written by Christoph Lameter "
+"<clameter@debian.org>. Significant improvements, changes and bugfixes were "
+"made by Julian Gilbey <jdg@debian.org>. HTTP support was added by Piotr "
+"Roszatycki <dexter@debian.org>. The program was rewritten in Perl by Julian "
+"Gilbey. Xavier Guimard converted it in object-oriented Perl using L<Moo>."
+msgstr ""
+"La version initiale de uscan a été écrite par Christoph Lameter "
+"<clameter@debian.org>. Des améliorations significatives, d'autres "
+"modifications et des corrections de bogues ont été apportées par Julian "
+"Gilbey <jdg@debian.org>. La prise en charge d'HTTP a été ajouté par Piotr "
+"Roszatycki <dexter@debian.org>. Le programme a été réécrit en Perl par "
+"Julian Gilbey. Xavier Guimard l'a convertit en Perl orienté-objet en "
+"utilisant L<Moo>."
+
+#. type: TH
+#: ../scripts/uupdate.1:1
+#, no-wrap
+msgid "UUPDATE"
+msgstr "UUPDATE"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:4
+msgid "uupdate - upgrade a source code package from an upstream revision"
+msgstr "uupdate - Mettre à jour un paquet source depuis une version amont"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:6
+msgid "B<uupdate> [I<options>] I<new_upstream_archive> [I<version>]"
+msgstr "B<uupdate> [I<options>] I<nouvelle_archive_amont> [I<version>]"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:8
+msgid "B<uupdate> [I<options>] B<--find>|B<-f>"
+msgstr "B<uupdate> [I<options>] B<-find>|B<-f>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:10
+msgid "B<uupdate> [I<options>] B<--patch>|B<-p> I<patch_file>"
+msgstr "B<uupdate> [I<options>] B<--patch>|B<-p> I<fichier_rustine>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:22
+msgid ""
+"B<uupdate> modifies an existing Debian source code archive to reflect an "
+"upstream update supplied as a patch or from a wholly new source code "
+"archive. The utility needs to be invoked from the top directory of the old "
+"source code directory, and if a relative name is given for the new archive "
+"or patch file, it will be looked for first relative to the execution "
+"directory and then relative to the parent of the source tree. (For example, "
+"if the changelog file is I</usr/local/src/foo/foo-1.1/debian/changelog>, "
+"then the archive or patch file will be looked for relative to I</usr/local/"
+"src/foo>.) Note that the patch file or archive cannot be within the source "
+"tree itself. The full details of what the code does are given below."
+msgstr ""
+"B<uupdate> modifie une archive source Debian existante pour intégrer une "
+"mise à jour amont fournie par une rustine, ou une archive source complète. "
+"L'utilitaire doit être invoqué depuis le répertoire de plus haut niveau de "
+"l'ancien répertoire des sources, et si un nom relatif est donné pour la "
+"nouvelle archive ou rustine, la recherche démarrera par le répertoire "
+"d'exécution puis relativement au répertoire parent de l'arborescence des "
+"sources. (Par exemple, si le fichier I<changelog> est I</usr/local/src/toto/"
+"toto-1.1/debian/changelog>, alors l'archive ou la rustine sera recherchée "
+"relativement à I</usr/local/src/toto>). Remarquez que l'archive ou la "
+"rustine ne peuvent pas se trouver dans l'arborescence des sources elle-même. "
+"Les détails complets sur ce que fait le code sont donnés plus bas."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:32
+msgid ""
+"Currently supported source code file types are I<.tar.gz>, I<.tar.bz2>, I<."
+"tar.Z>, I<.tgz>, I<.tar>, I<.tar.lzma>, I<.tar.xz>, I<.7z> and I<.zip> "
+"archives. Also supported are already unpacked source code archives; simply "
+"give the path of the source code directory. Supported patch file types are "
+"B<gzip>-compressed, B<bzip2>-compressed, B<lzma>-compressed, B<xz>-"
+"compressed and uncompressed patch files. The file types are identified by "
+"the file names, so they must use the standard suffixes."
+msgstr ""
+"Les types de fichier pris en charge pour le code source sont les archives I<."
+"tar.gz>, I<.tar.bz2>, I<.tar.Z>, I<.tgz>, I<.tar>, I<.tar.lzma>, I<.tar.xz>, "
+"I<.7z> et I<.zip>. Les archives de code source non compressées sont "
+"également gérées, il suffit dans ce cas de donner le nom du répertoire du "
+"code source. Les types de fichier pour les rustines sont les fichiers non "
+"compressés ou compressés avec B<gzip>, B<bzip2>, B<lzma>, ou B<xz>. Le type "
+"de fichier est identifié par le nom du fichier, qui doit donc utiliser un "
+"suffixe standard."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:42
+msgid ""
+"Usually B<uupdate> will be able to deduce the version number from the source "
+"archive name (as long as it only contains digits and periods). If that "
+"fails, you need to specify the version number explicitly (without the Debian "
+"release number which will always be initially ``1'', or ``0ubuntu1'' on "
+"Ubuntu-detected systems). This can be done with an initial B<--upstream-"
+"version> or B<-v> option, or in the case of an archive, with a version "
+"number after the filename. (The reason for the latter is so that B<uupdate> "
+"can be called directly from B<uscan>.)"
+msgstr ""
+"B<uupdate> est en règle générale capable de déduire le numéro de version "
+"grâce au nom de l'archive source (si ce numéro de version ne contient que "
+"des chiffres et points). En cas d'échec, vous devez spécifier le numéro de "
+"version explicitement (sans le numéro de livraison Debian, qui sera toujours "
+"initialisé à \"1\", ou \"0ubuntu1\" sur les systèmes Ubuntu reconnus). Cela "
+"peut se faire avec les options B<--upstream-version> ou B<-v> ou, dans le "
+"cas d'une archive, avec un numéro de version à la fin du nom de fichier. (La "
+"raison d'être de cette deuxième méthode est que B<uupdate> peut alors être "
+"appelé directement depuis B<uscan>.)"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:47
+msgid ""
+"Since B<uupdate> uses B<debuild> to clean the current archive before trying "
+"to apply a patch file, it accepts a B<--rootcmd> or B<-r> option allowing "
+"the user to specify a gain-root command to be used. The default is to use "
+"B<fakeroot>."
+msgstr ""
+"Comme B<uupdate> utilise B<debuild> pour nettoyer l'archive actuelle avant "
+"d'essayer d'appliquer une rustine, il accepte les options B<--rootcmd> ou B<-"
+"r> pour spécifier la commande à utiliser pour obtenir les droits du "
+"superutilisateur. Par défaut, B<fakeroot> est utilisé."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:54
+msgid ""
+"If an archive is being built, the pristine upstream source should be used to "
+"create the I<.orig.tar.gz> file wherever possible. This means that MD5 sums "
+"or other similar methods can be used to easily compare the upstream source "
+"to Debian's copy of the upstream version. This is the default behaviour, "
+"and can be switched off using the B<--no-pristine> option below."
+msgstr ""
+"Lorsqu'une archive est créée, les sources amont vierges doivent être "
+"utilisées pour créer le fichier I<.orig.tar.gz> autant que possible. Cela "
+"signifie qu'une somme MD5 ou tout autre moyen peut être utilisé pour "
+"facilement comparer les sources amont et la copie Debian de la version "
+"amont. C'est le comportement par défaut, qui peut être désactivé en "
+"utilisant l'option B<--no-pristine> décrite ci-dessous."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:56
+msgid "This is a summary of what was explained above."
+msgstr "Voici un résumé de ce qui est expliqué ci-dessus."
+
+#. type: TP
+#: ../scripts/uupdate.1:60
+#, no-wrap
+msgid "B<--upstream-version >I<version>, B<-v >I<version>"
+msgstr "B<--upstream-version >I<version>, B<-v >I<version>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:63
+msgid "Specify the version number of the upstream package explicitly."
+msgstr "Indique explicitement le numéro de version du paquet amont."
+
+#. type: TP
+#: ../scripts/uupdate.1:63
+#, no-wrap
+msgid "B<--force-bad-version, -b >"
+msgstr "B<--force-bad-version>, B<-b>"
+
+#. type: TP
+#: ../scripts/uupdate.1:66
+#, no-wrap
+msgid "B<--rootcmd >I<gain-root-command>, B<-r >I<gain-root-command>"
+msgstr "B<--rootcmd> I<commande-pour-devenir-superutilisateur>, B<-r> I<commande-pour-devenir-superutilisateur>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:70
+msgid ""
+"Specify the command to be used to become root to build the package and is "
+"passed onto B<debuild>(1) if it is specified."
+msgstr ""
+"Indique la commande utilisée pour devenir superutilisateur pour la "
+"construction du paquet, et qui sera passée à B<debuild>(1) si elle est "
+"fournie."
+
+#. type: TP
+#: ../scripts/uupdate.1:70
+#, no-wrap
+msgid "B<--pristine>, B<-u>"
+msgstr "B<--pristine>, B<-u>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:75
+msgid ""
+"Treat the source as pristine upstream source and symlink to it from "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> whenever possible. This "
+"option has no meaning for patches. This is the default behaviour."
+msgstr ""
+"Traite les sources comme les sources amont vierges et crée un lien "
+"symbolique vers I<E<lt>paquetE<gt>_E<lt>versionE<gt>.orig.tar.gz> si "
+"possible. Cette option est sans importance pour les rustines. C'est le "
+"comportement par défaut."
+
+#. type: TP
+#: ../scripts/uupdate.1:75
+#, no-wrap
+msgid "B<--no-pristine>"
+msgstr "B<--no-pristine>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:78
+msgid ""
+"Do not attempt to make a I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> "
+"symlink."
+msgstr ""
+"Ne cherche pas à créer de lien symbolique "
+"I<E<lt>paquetE<gt>_E<lt>versionE<gt>.orig.tar.gz>."
+
+#. type: TP
+#: ../scripts/uupdate.1:78
+#, no-wrap
+msgid "B<--symlink>, B<-s>"
+msgstr "B<--symlink>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:83
+msgid ""
+"Simply create a symlink when moving a new upstream I<.tar.gz> archive to the "
+"new I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> location. This is "
+"the default behaviour."
+msgstr ""
+"Crée simplement un lien symbolique lors du déplacement de la nouvelle "
+"archive amont I<.tar.gz> vers son nouvel emplacement "
+"I<E<lt>paquetE<gt>_E<lt>versionE<gt>.orig.tar.gz>. Il s'agit du comportement "
+"par défaut."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:88
+msgid ""
+"Copy the upstream I<.tar.gz> to the new location instead of making a "
+"symlink, if I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> is missing. "
+"Otherwise, do nothing."
+msgstr ""
+"Copie l'archive I<.tar.gz> amont au nouvel emplacement au lieu de faire un "
+"lien symbolique, si I<E<lt>paquetE<gt>_E<lt>versionE<gt>.orig.tar.gz> est "
+"manquant. Autrement, ne fait rien."
+
+#. type: TP
+#: ../scripts/uupdate.1:88
+#, no-wrap
+msgid "B<--find, -f>"
+msgstr "B<--find>, B<-f>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:98
+msgid ""
+"Find all upstream tarballs in I<../> which match "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig.tar.{gz|bz2|lzma|xz}> or "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig-E<lt>componentE<gt>.tar.{gz|bz2|lzma|"
+"xz}> ; B<--upstream-version> required; pristine source required; not valid "
+"for B<--patch>; This option uses B<dpkg-source> as the backend to enable "
+"support for the multiple upstream tarballs and to resolve minor bugs "
+"reported previously. The use of this option is highly recommended."
+msgstr ""
+"Trouver toutes les archives dans I<../> qui correspondent à "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig.tar.{gz|bz2|lzma|xz}> ou "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig-E<lt>componentE<gt>.tar.{gz|bz2|lzma|"
+"xz}> ; B<--upstream-version> requis ; sources primitives requises ; pas "
+"valable pour B<--patch>. Cette option utilise B<dpkg-source> comme moteur "
+"pour activer la prise en charge d'archives amont multiples et pour résoudre "
+"des bogues mineurs rapportés antérieurement. L'utilisation de cette option "
+"est fortement recommandée."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:101
+msgid "Give verbose output."
+msgstr "Donner une sortie bavarde."
+
+#. type: TP
+#: ../scripts/uupdate.1:113
+#, no-wrap
+msgid "B<UUPDATE_PRISTINE>"
+msgstr "B<UUPDATE_PRISTINE>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:117
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-pristine> command "
+"line parameter being used."
+msgstr ""
+"Si elle est définie à I<no>, alors c'est comme si l'option B<--no-pristine> "
+"était utilisée."
+
+#. type: TP
+#: ../scripts/uupdate.1:117
+#, no-wrap
+msgid "B<UUPDATE_SYMLINK_ORIG>"
+msgstr "B<UUPDATE_SYMLINK_ORIG>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:121
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-symlink> command "
+"line parameter being used."
+msgstr ""
+"Si elle est définie à I<no>, alors c'est comme si l'option B<--no-symlink> "
+"était utilisée."
+
+#. type: TP
+#: ../scripts/uupdate.1:121
+#, no-wrap
+msgid "B<UUPDATE_ROOTCMD>"
+msgstr "B<UUPDATE_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:124
+msgid "This is equivalent to the B<--rootcmd> option."
+msgstr "Équivaut à utiliser l'option B<--rootcmd>."
+
+#. type: SH
+#: ../scripts/uupdate.1:124
+#, no-wrap
+msgid "ACTIONS TAKEN ON AN ARCHIVE"
+msgstr "ACTIONS EFFECTUÉES SUR UNE ARCHIVE"
+
+#. type: TP
+#: ../scripts/uupdate.1:125 ../scripts/uupdate.1:158
+#, no-wrap
+msgid "B<Figure out new version number>"
+msgstr "B<Récupération du numéro de version>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:131
+msgid ""
+"Unless an explicit version number is provided, the archive name is analyzed "
+"for a sequence of digits separated by dots. If something like that is "
+"found, it is taken to be the new upstream version number. If not, "
+"processing is aborted."
+msgstr ""
+"À moins que le numéro de version ne soit explicitement fourni, le nom de "
+"l'archive est analysé pour rechercher une séquence de chiffres séparés par "
+"des points. Si quelque chose comme ça est trouvé, ce sera utilisé comme "
+"nouveau numéro de version amont. Sinon, le processus est interrompu."
+
+#. type: TP
+#: ../scripts/uupdate.1:131
+#, no-wrap
+msgid "B<Create the .orig.tar.gz archive>"
+msgstr "B<Création de l'archive .orig.tar.gz>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:136
+msgid ""
+"If the B<--pristine> or B<-u> option is specified and the upstream archive "
+"is a I<.tar.gz> or I<.tgz> archive, then this will be copied directly to "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz>."
+msgstr ""
+"Si les options B<--pristine> ou B<-u> sont utilisées et que l'archive amont "
+"est une archive I<.tar.gz> ou I<.tgz>, alors elle est copiée directement "
+"dans I<E<lt>paquetE<gt>_E<lt>versionE<gt>.orig.tar.gz>."
+
+#. type: TP
+#: ../scripts/uupdate.1:136
+#, no-wrap
+msgid "B<Unpacking>"
+msgstr "B<Décompression>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:141
+msgid ""
+"The archive is unpacked and placed in a directory with the correct name "
+"according to Debian policy: package-upstream_version.orig. Processing is "
+"aborted if this directory already exists."
+msgstr ""
+"L'archive est décompressée et placée dans un répertoire avec le nom défini "
+"dans la Charte Debian : paquet-version_amont.orig. Le processus est "
+"interrompu si ce répertoire existe déjà."
+
+#. type: TP
+#: ../scripts/uupdate.1:141 ../scripts/uupdate.1:169
+#, no-wrap
+msgid "B<Patching>"
+msgstr "B<Application de la rustine>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:149
+msgid ""
+"The I<.diffs.gz> from the current version are applied to the unpackaged "
+"archive. A non-zero exit status and warning message will occur if the "
+"patches did not apply cleanly or if no patch file was found. Also, the list "
+"of rejected patches will be shown. The file I<debian/rules> is made "
+"executable and all of the I<.orig> files created by B<patch> are deleted."
+msgstr ""
+"La rustine (\"patch\") I<.diff.gz> de la version actuelle est appliquée à "
+"l'archive décompressée. Un message d'avertissement est affiché avant de "
+"quitter avec une valeur de retour non nulle si la rustine ne s'applique pas "
+"sans problème ou si elle n'a pas été trouvée. La liste des rustines rejetées "
+"est également affichée. Le fichier I<debian/rules> est rendu exécutable et "
+"tous les fichiers I<.orig> créés par B<patch> sont détruits."
+
+#. type: TP
+#: ../scripts/uupdate.1:149 ../scripts/uupdate.1:181
+#, no-wrap
+msgid "B<Changelog update>"
+msgstr "B<Mise à jour du fichier changelog>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:153 ../scripts/uupdate.1:185
+msgid ""
+"A changelog entry with the new version number is generated with the text "
+"``New upstream release.''."
+msgstr ""
+"Une entrée du fichier I<changelog> avec la nouvelle version est créée avec "
+"le texte \"New upstream release\" (nouvelle version amont)."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:157 ../scripts/uupdate.1:189
+msgid ""
+"When used on Ubuntu systems, B<dpkg-vendor> detection is used to set the "
+"Debian revision to ``0ubuntu1''. You may change I<debian/changelog> "
+"manually afterwards."
+msgstr ""
+"Sur les systèmes Ubuntu, la détection B<dpkg-vendor> est utilisée pour "
+"configurer le numéro de livraison Debian à \"0ubuntu1\". Vous devriez "
+"ensuite modifier I<debian/changelog> vous-même."
+
+#. type: SH
+#: ../scripts/uupdate.1:157
+#, no-wrap
+msgid "ACTIONS TAKEN ON A PATCH FILE"
+msgstr "ACTIONS APPLIQUÉES À UN FICHIER DE RUSTINES"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:164
+msgid ""
+"Unless an explicit version number is provided, the patch file name is "
+"analyzed for a sequence of digits separated by dots. If something like that "
+"is found, it is taken to be the new upstream version number. If not, "
+"processing is aborted."
+msgstr ""
+"À moins qu'un numéro de version ne soit explicitement fourni, le fichier de "
+"rustines est analysé afin de rechercher une séquence de chiffres séparés par "
+"des points. Si une telle séquence est trouvée, elle est utilisée comme "
+"nouveau numéro de version amont. Sinon, le processus est interrompu."
+
+#. type: TP
+#: ../scripts/uupdate.1:164
+#, no-wrap
+msgid "B<Clean the current source tree>"
+msgstr "B<Nettoyage de l'arborescence source actuelle>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:169
+msgid ""
+"The command B<debuild clean> is executed within the current Debian source "
+"archive to clean it. If a B<-r> option is given to B<uupdate>, it is passed "
+"on to B<debuild>."
+msgstr ""
+"La commande B<debuild clean> est exécutée dans l'archive de l'architecture "
+"source Debian pour la nettoyer. Si une option B<-r> est fournie à "
+"B<uupdate>, elle est passée à B<debuild>."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:181
+msgid ""
+"The current source archive (I<.orig.tar.gz>) is unpacked and the patch "
+"applied to the original sources. If this is successful, then the I<.orig> "
+"directory is renamed to reflect the new version number and the current "
+"Debian source directory is copied to a directory with the new version "
+"number, otherwise processing is aborted. The patch is then applied to the "
+"new copy of the Debian source directory. The file I<debian/rules> is made "
+"executable and all of the I<.orig> files created by B<patch> are deleted. "
+"If there was a problem with the patching, a warning is issued and the "
+"program will eventually exit with non-zero exit status."
+msgstr ""
+"L'archive source actuelle (I<.orig.tar.gz>) est décompressée et la rustine "
+"est appliquée aux sources originelles. En cas de succès, le répertoire I<."
+"orig> est renommé de façon à refléter le nouveau numéro de version, et le "
+"répertoire source Debian actuel est copié vers un répertoire avec le nouveau "
+"numéro de version. Sinon, le processus est interrompu. La rustine est "
+"appliquée à la nouvelle copie du répertoire source Debian. Le fichier "
+"I<debian/rules> est rendu exécutable, et tous les fichiers I<.orig> créés "
+"par B<patch> sont détruits. En cas de problème lors de l'application de la "
+"rustine, un avertissement est affiché et le programme quittera avec une "
+"valeur de retour non nulle."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:194
+msgid "B<debuild>(1), B<fakeroot>(1), B<patch>(1), B<devscripts.conf>(5)"
+msgstr "B<debuild>(1), B<fakeroot>(1), B<patch>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:196
+msgid "B<The Debian Policy Manual>"
+msgstr "La B<Charte Debian>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:199
+msgid ""
+"The original version of B<uupdate> was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. Several changes and improvements have been "
+"made by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"La version initiale de B<uupdate> a été écrite par Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. Plusieurs modifications et améliorations ont "
+"été apportées par Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../doc/what-patch.1:1
+#, no-wrap
+msgid "WHAT-PATCH"
+msgstr "WHAT-PATCH"
+
+#. type: Plain text
+#: ../doc/what-patch.1:4
+msgid "what-patch - detect which patch system a Debian package uses"
+msgstr ""
+"what-patch - Détecter le système de correctif utilisé dans un paquet Debian"
+
+#. type: Plain text
+#: ../doc/what-patch.1:7
+msgid "B<what-patch> [I<options>]"
+msgstr "B<what-patch> [I<options>]"
+
+#. type: Plain text
+#: ../doc/what-patch.1:11
+msgid ""
+"B<what-patch> examines the I<debian/rules> file to determine which patch "
+"system the Debian package is using."
+msgstr ""
+"B<what-patch> examine le fichier I<debian/rules> pour déterminer le système "
+"de correctif utilisé dans un paquet Debian."
+
+#. type: Plain text
+#: ../doc/what-patch.1:14
+msgid ""
+"B<what-patch> should be run from the root directory of the Debian source "
+"package."
+msgstr ""
+"B<what-patch> devrait être exécutée depuis le répertoire racine d'un paquet "
+"source Debian."
+
+#. type: Plain text
+#: ../doc/what-patch.1:17
+msgid "Listed below are the command line options for B<what-patch>:"
+msgstr "Les options suivantes sont utilisables avec B<what-patch> :"
+
+#. type: Plain text
+#: ../doc/what-patch.1:20
+msgid "Display a help message and exit."
+msgstr "Afficher un message d'aide et quitter."
+
+#. type: TP
+#: ../doc/what-patch.1:20
+#, no-wrap
+msgid "B<-v>"
+msgstr "B<-v>"
+
+#. type: Plain text
+#: ../doc/what-patch.1:26
+msgid ""
+"Enable verbose mode. This will include the listing of any files modified "
+"outside or the I<debian/> directory and report any additional details about "
+"the patch system if available."
+msgstr ""
+"Activer la sortie bavarde. Cela comprend la liste de tous les fichiers "
+"modifiés hors du répertoire I<debian/> et un compte-rendu détaillé du "
+"système de correctif s'il est disponible."
+
+#. type: Plain text
+#: ../doc/what-patch.1:32
+msgid ""
+"B<what-patch> was written by Kees Cook E<lt>kees@ubuntu.comE<gt>, Siegfried-"
+"A. Gevatter E<lt>rainct@ubuntu.comE<gt>, and Daniel Hahler "
+"E<lt>ubuntu@thequod.deE<gt>, among others. This manual page was written by "
+"Jonathan Patrick Davies E<lt>jpds@ubuntu.comE<gt>."
+msgstr ""
+"B<what-patch> a été écrite par Kees Cook E<lt>I<kees@ubuntu.com>E<gt>, "
+"Siegfried-A. Gevatter E<lt>I<rainct@ubuntu.com>E<gt> et Daniel Hahler "
+"E<lt>I<ubuntu@thequod.de>E<gt>, parmi d'autres. Cette page de manuel a été "
+"écrite par Jonathan Patrick Davies E<lt>I<jpds@ubuntu.com>E<gt>."
+
+#. type: Plain text
+#: ../doc/what-patch.1:38
+msgid ""
+"The Ubuntu MOTU team has some documentation about patch systems at the "
+"Ubuntu wiki: I<https://wiki.ubuntu.com/PackagingGuide/PatchSystems>"
+msgstr ""
+"L'équipe de MOTU Ubuntu a documenté ces systèmes de correctifs dans le wiki "
+"d'Ubuntu : I<https://wiki.ubuntu.com/PackagingGuide/PatchSystems>"
+
+#. type: Plain text
+#: ../doc/what-patch.1:42
+msgid "B<cdbs-edit-patch>(1), B<dbs-edit-patch>(1), B<dpatch-edit-patch>(1)"
+msgstr "B<cdbs-edit-patch>(1), B<dbs-edit-patch>(1), B<dpatch-edit-patch>(1)"
+
+#. type: TH
+#: ../scripts/whodepends.1:1
+#, no-wrap
+msgid "WHODEPENDS"
+msgstr "WHODEPENDS"
+
+#. type: Plain text
+#: ../scripts/whodepends.1:4
+msgid "whodepends - check which maintainers' packages depend on a package"
+msgstr ""
+"whodepends - Vérifier quels paquets (et responsables) dépendent d'un autre"
+
+#. type: Plain text
+#: ../scripts/whodepends.1:6
+msgid "B<whodepends> [I<package>] [I<options>]"
+msgstr "B<whodepends> [I<paquet>] [I<options>]"
+
+#. type: Plain text
+#: ../scripts/whodepends.1:10
+msgid ""
+"B<whodepends> gives the names, e-mail addresses and the packages they "
+"maintain of all maintainers who have packages depending on the given package."
+msgstr ""
+"B<whodepends> donne le nom de tous les responsables qui ont un paquet qui "
+"dépend d'un paquet donné, ainsi que leurs adresses électroniques et le nom "
+"des paquets concernés."
+
+#. type: Plain text
+#: ../scripts/whodepends.1:19
+msgid "B<whodepends> is not very efficient."
+msgstr "B<whodepends> n'est pas vraiment efficace."
+
+#. type: Plain text
+#: ../scripts/whodepends.1:20
+msgid ""
+"B<whodepends> has been written by Moshe Zadka E<lt>moshez@debian.orgE<gt>."
+msgstr "B<whodepends> a été écrit par Moshe Zadka E<lt>moshez@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/who-uploads.1:1
+#, no-wrap
+msgid "WHO-UPLOADS"
+msgstr "WHO-UPLOADS"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:4
+msgid "who-uploads - identify the uploaders of Debian source packages"
+msgstr ""
+"who-uploads - Identifier les personnes ayant envoyé des paquets source Debian"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:6
+msgid "B<who-uploads> [I<options>] I<source_package> ..."
+msgstr "B<who-uploads> [I<options>] I<paquet_source> ..."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:12
+msgid ""
+"B<who-uploads> uses the Package Tracking System (PTS) to identify the "
+"uploaders of the three most recent versions of the given source packages. "
+"Note that the uploaders are identified using their B<gpg>(1) or B<gpg2>(1) "
+"keys; installing a recent version of the I<debian-keyring> package should "
+"provide most of the required keys."
+msgstr ""
+"B<who-uploads> utilise le système de suivi des paquets (PTS) pour identifier "
+"les personnes ayant envoyé les trois versions les plus récentes des paquets "
+"source donnés. Remarquez que ces personnes sont identifiées avec leurs clefs "
+"B<gpg>(1) ou B<gpg2>(1). L'installation d'une version récente du paquet "
+"I<debian-keyring> devrait fournir la plupart des clefs nécessaires."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:15
+msgid ""
+"Note that because the PTS uses source packages, you must give the source "
+"package names, not the binary package names."
+msgstr ""
+"Remarquez que puisque le PTS utilise les paquets source, vous devez donner "
+"les noms des paquets source, et non ceux des paquets binaires."
+
+#. type: TP
+#: ../scripts/who-uploads.1:16
+#, no-wrap
+msgid "B<-M>, B<--max-uploads=>I<N>"
+msgstr "B<-M>, B<--max-uploads=>I<N>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:21
+msgid ""
+"Specify the maximum number of uploads to display for each package; the "
+"default is 3. Note that you may not see this many uploads if there are not "
+"this many recorded in the PTS."
+msgstr ""
+"Indique le nombre maximum d'envois à afficher pour chaque paquet. La valeur "
+"par défaut est 3. Remarquez qu'un nombre inférieur peut être affiché s'il "
+"n'y a pas suffisamment d'envois enregistrés dans le PTS."
+
+#. type: TP
+#: ../scripts/who-uploads.1:21
+#, no-wrap
+msgid "B<--keyring >I<keyring>"
+msgstr "B<--keyring> I<trousseau>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:25
+msgid ""
+"Add I<keyring> to the list of keyrings to be searched for the uploader's GPG "
+"key."
+msgstr ""
+"Ajoute un I<trousseau> de clefs à la liste des trousseaux à utiliser pour "
+"identifier la clef GPG des personnes ayant envoyé un paquet."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:34
+msgid ""
+"By default, B<who-uploads> uses the three Debian keyrings I</usr/share/"
+"keyrings/debian-keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg>, "
+"and I</usr/share/keyrings/debian-maintainers.gpg> (although this default can "
+"be changed in the configuration file, see below). Specifying this option "
+"means that the default keyrings will not be examined. The B<--keyring> "
+"option overrides this one."
+msgstr ""
+"Par défaut, B<who-uploads> utilise les trois trousseaux Debian I</usr/share/"
+"keyrings/debian-keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg> et "
+"I</usr/share/keyrings/debian-maintainers.gpg> (même si cette valeur peut "
+"être modifiée dans le fichier de configuration, voyez ci-dessous). En "
+"spécifiant cette option, les trousseaux par défaut ne seront pas examinés. "
+"L'option B<--keyring> remplace cette valeur."
+
+#. type: TP
+#: ../scripts/who-uploads.1:34
+#, no-wrap
+msgid "B<--date>"
+msgstr "B<--date>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:37
+msgid "Show the date of the upload alongside the uploader's details"
+msgstr ""
+"Afficher la date de l'envoi avec les détails sur la personne ayant effectué "
+"l'envoi"
+
+#. type: TP
+#: ../scripts/who-uploads.1:37
+#, no-wrap
+msgid "B<--nodate>, B<--no-date>"
+msgstr "B<--nodate>, B<--no-date>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:41
+msgid ""
+"Do not show the date of the upload alongside the uploader's details. This "
+"is the default behaviour."
+msgstr ""
+"Ne pas afficher la date de l'envoi avec les détails sur la personne ayant "
+"effectué l'envoi. C'est le comportement par défaut."
+
+#. type: TP
+#: ../scripts/who-uploads.1:57
+#, no-wrap
+msgid "B<WHOUPLOADS_DATE>"
+msgstr "B<WHOUPLOADS_DATE>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:61
+msgid ""
+"Show the date of the upload alongside the uploader's details. By default, "
+"this is \"no\"."
+msgstr ""
+"Afficher la date de l'envoi avec les détails sur la personne ayant effectué "
+"l'envoi. La valeur par défaut est \"no\"."
+
+#. type: TP
+#: ../scripts/who-uploads.1:61
+#, no-wrap
+msgid "B<WHOUPLOADS_MAXUPLOADS>"
+msgstr "B<WHOUPLOADS_MAXUPLOADS>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:65
+msgid ""
+"The maximum number of uploads to display for each package. By default, this "
+"is 3."
+msgstr ""
+"Nombre maximum d'envois à afficher pour chaque paquet. La valeur par défaut "
+"est 3."
+
+#. type: TP
+#: ../scripts/who-uploads.1:65
+#, no-wrap
+msgid "B<WHOUPLOADS_KEYRINGS>"
+msgstr "B<WHOUPLOADS_KEYRINGS>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:73
+msgid ""
+"This is a colon-separated list of the default keyrings to be used. By "
+"default, it is the three Debian keyrings I</usr/share/keyrings/debian-"
+"keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg>, and I</usr/share/"
+"keyrings/debian-maintainers.gpg>."
+msgstr ""
+"Il s'agit d'une liste séparée par des deux-points des trousseaux par défaut "
+"à utiliser. Par défaut, il s'agit des trois trousseaux Debian I</usr/share/"
+"keyrings/debian-keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg> et "
+"I</usr/share/keyrings/debian-maintainers.gpg>."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:76
+msgid ""
+"The original version of B<who-uploads> was written by Adeodato Sim\\['o] "
+"E<lt>dato@net.com.org.esE<gt>. The current version is by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Le programme B<who-uploads> a été initialement écrit par Adeodato Sim\\['o] "
+"E<lt>dato@net.com.org.esE<gt>. La version actuelle est écrite par Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:50
+msgid "who-permits-upload - look-up Debian Maintainer access control lists"
+msgstr ""
+"who-permits-upload - Rechercher dans les listes de contrôle d’accès de "
+"mainteneurs Debian"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:54
+msgid ""
+"B<who-permits-upload> [B<-h>] [B<-s> I<keyring>] [B<-d> I<dm_url>] [B<-s> "
+"I<search_type>] I<query> [I<query> ...]"
+msgstr ""
+"B<who-permits-upload> [B<-h>] [B<-s> I<trousseau>] [B<-d> I<url_dm>] [B<-s> "
+"I<type_de_recherche>] I<requête> [I<requête> ...]"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:58
+msgid ""
+"B<who-permits-upload> looks up the given Debian Maintainer (DM) upload "
+"permissions from ftp-master.debian.org and parses them in a human readable "
+"way. The tool can search by DM name, sponsor (the person who granted the "
+"permission) and by package."
+msgstr ""
+"B<who-permits-upload> recherche les droits d’envoi du mainteneur Debian (DM) "
+"donné sur ftp-master.debian.org et les analyse de façon lisible. L’outil "
+"permet de rechercher par nom de DM, parrain (la personne ayant octroyé les "
+"droits) et par paquet."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:66
+msgid "B<--dmfile=>I<dm_url>, B<-d> I<dm_url>"
+msgstr "B<--dmfile=>I<url_dm>, B<-d> I<url_dm>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:68
+msgid ""
+"Retrieve the DM permission file from the supplied URL. When this option is "
+"not present, the default value I<https://ftp-master.debian.org/dm.txt> is "
+"used."
+msgstr ""
+"Récupérer le fichier de droits de DM depuis l’URL fournie. Quand cette "
+"option n’est pas présente, la valeur par défaut I<https://ftp-master.debian."
+"org/dm.txt> est utilisée."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:73
+msgid "Display a usage summary and exit."
+msgstr "Afficher une description de l'utilisation et quitter."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:75
+msgid "B<--keyring=>I<keyring>, B<-s> I<keyring>"
+msgstr "B<--keyring=>I<trousseau>, B<-s> I<trousseau>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:77
+msgid ""
+"Use the supplied GnuPG keyrings to look-up GPG fingerprints from the DM "
+"permission file. When not present, the default Debian Developer and "
+"Maintainer keyrings are used (I</usr/share/keyrings/debian-keyring.gpg> and "
+"I</usr/share/keyrings/debian-maintainers.gpg>, installed by the I<debian-"
+"keyring> package)."
+msgstr ""
+"Utiliser les trousseaux GnuPG fournis pour rechercher les empreintes GPG du "
+"fichier de droits de DM. En absence, les trousseaux de développeurs et "
+"mainteneurs Debian par défaut sont utilisés (I</usr/share/keyrings/debian-"
+"keyring.gpg> et I</usr/share/keyrings/debian-maintainers.gpg>, installés par "
+"le paquet I<debian-keyring>)."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:83
+msgid "Separate keyrings with a colon \":\"."
+msgstr "Séparez les trousseaux par un deux-points \":\"."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:85
+msgid "B<--search=>I<search_type>, B<-s> I<search_type>"
+msgstr "B<--search=>I<type_de_recherche>, B<-s> I<type_de_recherche>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:87
+msgid ""
+"Modify the look-up behavior. This influences the interpretation of the "
+"I<query> argument. Supported search types are:"
+msgstr ""
+"Modifier le comportement de recherche. Cela influence l’interprétation du "
+"paramètre I<requête>. Les types de recherche possibles sont :"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:94
+msgid ""
+"Search for a source package name. This is also the default when B<--search> "
+"is omitted. Since package names are unique, this will return given ACLs - "
+"if any - for a single package."
+msgstr ""
+"Rechercher un nom de paquet source. C’est aussi le comportement par défaut "
+"quand B<--search> est omis. Puisque les noms de paquets sont uniques, cela "
+"renverra les listes de contrôle d’accès – s’il y en a – pour un seul paquet."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:98
+msgid "B<uid>"
+msgstr "B<uid>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:100
+msgid ""
+"Search for a Debian Maintainer. This should be (a fraction of) a name. It "
+"will return all ACLs assigned to matching maintainers."
+msgstr ""
+"Rechercher un mainteneur Debian. Cela devrait être un(e partie de) nom. Cela "
+"renverra toutes les listes de contrôle d’accès associées aux mainteneurs "
+"correspondants."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:103
+msgid "B<sponsor>"
+msgstr "B<sponsor>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:105
+msgid ""
+"Search for a sponsor (i.e. a Debian Developer) who granted DM permissions. "
+"This will return all ACLs given by the supplied developer."
+msgstr ""
+"Rechercher un parrain (c’est-à-dire un développeur Debian) qui a octroyé des "
+"droits de DM. Cela renverra toutes les listes de contrôle d’accès données "
+"par le développeur indiqué."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:108
+msgid "Note that this is an expensive operation which may take some time."
+msgstr ""
+"Remarquez qu’il s’agit d’une opération coûteuse qui pourrait prendre un peu "
+"de temps."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:112
+msgid "I<query>"
+msgstr "I<requête>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:114
+msgid ""
+"A case sensitive argument to be looked up in the ACL permission file. The "
+"exact interpretation of this argument is dependent by the B<--search> "
+"argument."
+msgstr ""
+"Un paramètre sensible à la casse à rechercher dans le fichier de droits de "
+"liste de contrôle d’accès. L’interprétation exacte de ce paramètre dépend du "
+"paramètre de B<--search>."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:117
+msgid "This argument can be repeated."
+msgstr "Ce paramètre peut être répété."
+
+#. type: =head1
+#: ../scripts/who-permits-upload.pl:121
+msgid "EXIT VALUE"
+msgstr "VALEUR DE RETOUR"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:127
+msgid "Success"
+msgstr "Réussite"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:131
+msgid "An error occurred"
+msgstr "Une erreur s'est produite"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:135
+msgid "The command line was not understood"
+msgstr "La ligne de commande n’a pas été comprise"
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:143
+msgid "who-permits-upload --search=sponsor arno@debian.org"
+msgstr "who-permits-upload --search=sponsor arno@debian.org"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:145
+msgid ""
+"Search for all DM upload permissions given by the UID \"arno@debian.org\". "
+"Note, that only primary UIDs will match."
+msgstr ""
+"Rechercher tous les droits de DM donnés par l’identifiant utilisateur "
+"\"arno@debian.org\". Remarquez que seuls les identifiants utilisateur "
+"primaires correspondront."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:148
+msgid "who-permits-upload -s=sponsor \"Arno Töll\""
+msgstr "who-permits-upload -s=sponsor \"Arno Töll\""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:150
+msgid "Same as above, but use a full name instead."
+msgstr "Comme précédemment, mais en utilisant un nom complet à la place."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:152
+msgid "who-permits-upload apache2"
+msgstr "who-permits-upload apache2"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:154
+msgid "Look up who gave upload permissions for the apache2 source package."
+msgstr ""
+"Rechercher qui a donné les droits d’envoi pour le paquet source apache2."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:156
+msgid "who-permits-upload --search=uid \"Paul Tagliamonte\""
+msgstr "who-permits-upload --search=uid \"Paul Tagliamonte\""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:158
+msgid "Look up all DM upload permissions given to \"Paul Tagliamonte\"."
+msgstr ""
+"Rechercher tous les droits d’envoi de DM donnés à \"Paul Tagliamonte\"."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:164
+msgid ""
+"B<who-permits-upload> was written by Arno Töll <arno@debian.org> and is "
+"licensed under the terms of the General Public License (GPL) version 2 or "
+"later."
+msgstr ""
+"B<who-permits-upload> a été écrit par Arno Töll E<lt>arno@debian.orgE<gt> et "
+"est distribué sous licence publique générale (GPL), version 2 ou ultérieure."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:169
+msgid "B<gpg>(1), B<gpg2>(1), B<who-uploads>(1)"
+msgstr "B<gpg>(1), B<gpg2>(1), B<who-uploads>(1)"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:171
+msgid ""
+"S<I<https://lists.debian.org/debian-devel-announce/2012/09/msg00008.html>>"
+msgstr ""
+"S<I<https://lists.debian.org/debian-devel-announce/2012/09/msg00008.html>>"
+
+#. type: TH
+#: ../scripts/wnpp-alert.1:1
+#, no-wrap
+msgid "WNPP-ALERT"
+msgstr "WNPP-ALERT"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:4
+msgid "wnpp-alert - check for installed packages up for adoption or orphaned"
+msgstr ""
+"wnpp-alert - Rechercher les paquets installés offerts à l'adoption ou "
+"orphelins"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:6
+msgid "B<wnpp-alert >[B<--diff>] [I<package> ...]"
+msgstr "B<wnpp-alert> [B<--diff>] [I<paquet> ...]"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:8
+msgid "B<wnpp-alert --help>|B<--version>"
+msgstr "B<wnpp-alert --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:14
+msgid ""
+"B<wnpp-alert> downloads the lists of packages which have been orphaned (O), "
+"are up for adoption (RFA), or the maintainer has asked for help (RFH) from "
+"the WNPP webpages, and then outputs a list of packages installed on the "
+"system, or matching the listed packages, which are in those lists."
+msgstr ""
+"B<wnpp-alert> télécharge la liste des paquets orphelins (O), la liste des "
+"paquets offerts à l'adoption (RFA), ou la liste des paquets dont le "
+"responsable a demandé de l'aide (RFH) depuis les pages web WNPP, puis "
+"affiche la liste des paquets installés sur le système, ou qui correspondent "
+"aux paquets fournis, qui se trouvent dans ces listes."
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:17
+msgid ""
+"Note that WNPP, and therefore B<wnpp-alert>'s output, is source package "
+"based."
+msgstr ""
+"Remarquez que WNPP, et donc la sortie de B<wnpp-alert>, est basé sur des "
+"paquets source."
+
+#. type: TP
+#: ../scripts/wnpp-alert.1:18
+#, no-wrap
+msgid "B<--diff>, B<-d>"
+msgstr "B<--diff>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:23
+msgid ""
+"If the I<$XDG_CACHE_HOME/devscripts> directory exists, compare the output of "
+"B<wnpp-alert> to the previous output (cached in the file I<wnpp-diff>) and "
+"output the differences."
+msgstr ""
+"Si le répertoire I<$XDG_CACHE_HOME/devscripts> existe, comparer la sortie de "
+"B<wnpp-alert> à la sortie précédente (en cache dans le fichier I<wnpp-diff>) "
+"et afficher les différences."
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:31 ../scripts/wnpp-check.1:28
+msgid "https://www.debian.org/devel/wnpp"
+msgstr "https://www.debian.org/devel/wnpp"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:34
+msgid ""
+"B<wnpp-alert> was written by Arthur Korn E<lt>arthur@korn.chE<gt> and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt> for the devscripts "
+"package. It is in the public domain."
+msgstr ""
+"B<wnpp-alert> a été écrit par Arthur Korn E<lt>arthur@korn.chE<gt> et "
+"modifié par Julian Gilbey E<lt>jdg@debian.orgE<gt> pour le paquet "
+"devscripts. Il se trouve dans le domaine public."
+
+#. type: TH
+#: ../scripts/wnpp-check.1:1
+#, no-wrap
+msgid "WNPP-CHECK"
+msgstr "WNPP-CHECK"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:4
+msgid ""
+"wnpp-check - check if a package is being packaged or if this has been "
+"requested"
+msgstr ""
+"wnpp-check - Vérifier si un paquet est en cours de création ou si sa "
+"création a été demandée"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:6
+msgid "B<wnpp-check> [B<--exact>] I<package> ..."
+msgstr "B<wnpp-check> [B<--exact>] I<paquet> ..."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:8
+msgid "B<wnpp-check --help>|B<--version>"
+msgstr "B<wnpp-check --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:13
+msgid ""
+"B<wnpp-check> downloads the lists of packages which are listed as being "
+"packaged (ITPed) or for which a package has been requested (RFPed) from the "
+"WNPP website and lists any packages supplied on the command line which "
+"appear in those lists."
+msgstr ""
+"B<wnpp-check> télécharge la liste des paquets en cours de création (ITP) et "
+"la liste des paquets dont la création a été demandée (RFP) sur le site web "
+"WNPP, et liste les paquets qui sont fournis sur la ligne de commande et "
+"apparaissent dans ces listes."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:16
+msgid ""
+"Note that WNPP, and therefore B<wnpp-check>'s output, is source package "
+"based."
+msgstr ""
+"Remarquez que WNPP, et donc la sortie de B<wnpp-check>, est basé sur des "
+"paquets source."
+
+#. type: TP
+#: ../scripts/wnpp-check.1:17
+#, no-wrap
+msgid "B<--exact>, B<-e>"
+msgstr "B<--exact>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:20
+msgid ""
+"Require an exact package name match, rather than the default substring match."
+msgstr ""
+"Une correspondance exacte du nom de paquet est exigée, plutôt que la "
+"correspondance par défaut avec une sous-chaîne."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:32
+msgid "None of the packages supplied has an open ITP or RFP"
+msgstr "Aucun des paquets fournis n'a d'ITP ou de RFP ouvert"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:36
+msgid ""
+"Either an error occurred or at least one package supplied has an open ITP or "
+"RFP"
+msgstr ""
+"Une erreur est survenue ou au moins un des paquets a un bogue ITP ou RFP "
+"ouvert"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:42
+msgid ""
+"B<wnpp-check> was written by David Paleino E<lt>d.paleino@gmail.comE<gt>; "
+"this man page was written by Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt> for the devscripts package. B<wnpp-check> was originally based on "
+"B<wnpp-alert>, which was written by Arthur Korn E<lt>arthur@korn.chE<gt> and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt> for the devscripts "
+"package. Both scripts are in the public domain."
+msgstr ""
+"B<wnpp-check> a été écrit par David Paleino E<lt>d.paleino@gmail.comE<gt> ; "
+"cette page de manuel a été écrite par Adam D. Barratt E<lt>adam@adam-barratt."
+"org.ukE<gt> pour le paquet devscripts. B<wnpp-check> a été créé à partir de "
+"B<wnpp-alert>, qui a été écrit par Arthur Korn E<lt>arthur@korn.chE<gt> et "
+"modifié par Julian Gilbey E<lt>jdg@debian.orgE<gt> pour le paquet "
+"devscripts. Les deux scripts sont dans le domaine publique."
+
+#. type: TH
+#: ../doc/wrap-and-sort.1:15
+#, no-wrap
+msgid "WRAP-AND-SORT"
+msgstr "WRAP-AND-SORT"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:18
+msgid ""
+"wrap-and-sort - wrap long lines and sort items in Debian packaging files"
+msgstr ""
+"wrap-and-sort - Couper les lignes longues et trier les objets des fichiers "
+"d'empaquetage"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:21
+msgid "B<wrap-and-sort> [I<options>]"
+msgstr "B<wrap-and-sort> [I<options>]"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:30
+msgid ""
+"B<wrap-and-sort> wraps the package lists in Debian control files. By default "
+"the lists will only split into multiple lines if the entries are longer than "
+"the maximum line length limit of 79 characters. B<wrap-and-sort> sorts the "
+"package lists in Debian control files and all I<.dirs>, I<.docs>, I<."
+"examples>, I<.info>, I<.install>, I<.links>, I<.maintscript>, and I<."
+"manpages> files. Beside that B<wrap-and-sort> removes trailing spaces in "
+"these files."
+msgstr ""
+"B<wrap-and-sort> renvoie à la ligne les listes de paquets des fichiers de "
+"contrôle Debian. Par défaut, les listes ne seront coupées que si les entrées "
+"sont plus longues que la taille maximale de ligne, c’est-à-dire "
+"79 caractères. B<wrap-and-sort> trie la liste de paquets des fichiers de "
+"contrôle Debian et de tous les fichiers I<.dirs>, I<.docs>, I<.examples>, I<."
+"info>, I<.install>, I<.links>, I<.maintscript> et I<.manpages>. De plus, "
+"B<wrap-and-sort> supprime les espaces de fin de ligne de ces fichiers."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:34
+msgid ""
+"This script should be run in the root of a Debian package tree. It searches "
+"for I<control>, I<control*.in>, I<copyright>, I<copyright.in>, I<install>, "
+"and I<*.install> in the I<debian> directory."
+msgstr ""
+"Cette commande devrait être exécutée depuis la racine d'un paquet source "
+"Debian. Elle cherche les fichiers I<control>, I<control*.in>, I<copyright>, "
+"I<copyright.in>, I<install> et I<*.install> dans le répertoire I<debian>."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:39
+#, no-wrap
+msgid "B<-a>, B<--wrap-always>"
+msgstr "B<-a>, B<--wrap-always>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:43
+msgid ""
+"Wrap all package lists in the Debian I<control> file even if they do not "
+"exceed the line length limit and could fit in one line."
+msgstr ""
+"Utiliser une ligne par paquet dans le fichier I<control> de Debian, même si "
+"la liste ne dépasse pas la taille limite et pourrait tenir sur une ligne."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:43
+#, no-wrap
+msgid "B<-s>, B<--short-indent>"
+msgstr "B<-s>, B<--short-indent>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:47
+msgid ""
+"Only indent wrapped lines by one space (default is in-line with the field "
+"name)."
+msgstr ""
+"N'indenter les lignes coupées que d'une espace (par défaut, elle sont "
+"alignées avec le nom du champ)."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:47
+#, no-wrap
+msgid "B<-b>, B<--sort-binary-packages>"
+msgstr "B<-b>, B<--sort-binary-packages>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:50
+msgid "Sort binary package paragraphs by name."
+msgstr "Trier les paragraphes du paquet binaire par nom."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:50
+#, no-wrap
+msgid "B<-k>, B<--keep-first>"
+msgstr "B<-k>, B<--keep-first>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:53
+msgid "When sorting binary package paragraphs, leave the first one at the top."
+msgstr ""
+"Lors du tri les paragraphes du paquet binaire, laisser le premier en haut."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:57
+msgid ""
+"Unqualified B<debhelper>(7) configuration files are applied to the first "
+"package."
+msgstr ""
+"Les fichiers de configuration de B<debhelper>(7) sans condition sont "
+"appliqués au premier paquet."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:57
+#, no-wrap
+msgid "B<-n>, B<--no-cleanup>"
+msgstr "B<-n>, B<--no-cleanup>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:60
+msgid "Do not remove trailing whitespaces."
+msgstr "Ne pas supprimer les blancs."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:60
+#, no-wrap
+msgid "B<-t>, B<--trailing-comma>"
+msgstr "B<-t>, B<--trailing-comma>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:65
+msgid ""
+"Add a trailing comma at the end of the sorted fields. This minimizes future "
+"differences in the VCS commits when additional dependencies are appended or "
+"removed."
+msgstr ""
+"Ajouter une virgule finale pour terminer les champs ordonnés. Cela réduira "
+"les prochaines différences, dans les systèmes de suivi de version, lors de "
+"l'ajout ou la suppression de dépendances."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:65
+#, no-wrap
+msgid "B<-d >I<path>, B<--debian-directory=>I<path>"
+msgstr "B<-d> I<chemin>, B<--directory=>I<chemin>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:68
+msgid "Location of the I<debian> directory (default: I<./debian>)."
+msgstr "Emplacement du répertoire I<debian> (I<./debian> par défaut)."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:68
+#, no-wrap
+msgid "B<-f >I<file>, B<--file=>I<file>"
+msgstr "B<-f> I<fichier>, B<--file=>I<fichier>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:73
+msgid ""
+"Wrap and sort only the specified I<file>. You can specify this parameter "
+"multiple times. All supported files will be processed if no files are "
+"specified."
+msgstr ""
+"Ne couper et trier que le I<fichier> indiqué. Vous pouvez utiliser ce "
+"paramètre plusieurs fois. Tous les fichiers pris en charge seront traités si "
+"aucun fichier n'est indiqué."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:76
+msgid "Print all files that are touched."
+msgstr "Afficher tous les fichiers modifiés."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:76
+#, no-wrap
+msgid "B<--max-line-length=>I<max_line_length>"
+msgstr "B<--max-line-length=>I<taille_maximale_ligne>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:80
+msgid ""
+"Set the maximum allowed line length. Package lists in the Debian I<control> "
+"file that exceed this length limit will be wrapped."
+msgstr ""
+"Définir la taille maximale de ligne permise. Les listes de paquet dans le "
+"fichier I<control> de Debian qui dépassent cette taille limite seront "
+"ajustées."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:82
+msgid "The default maximum line length is 79 characters."
+msgstr "Par défaut, la taille maximale de ligne est de 79 caractères."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:82
+#, no-wrap
+msgid "B<-N>, B<--dry-run>"
+msgstr "B<-d>, B<--debug>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:85
+msgid ""
+"Do not modify any file, instead only print the files that would be modified."
+msgstr ""
+"Ne pas modifier de fichiers, mais afficher les fichiers qui devraient être "
+"modifiés."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:86
+#, no-wrap
+msgid "B<--experimental-rts-parser>"
+msgstr "B<--experimental-rts-parser>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:90
+msgid ""
+"Enable the experimental round-trip safe parser. When enabled, most comments "
+"in deb822 control will be preserved."
+msgstr ""
+"Activez l'analyseur expérimental sécurisé aller-retour. Lorsqu'il est "
+"activé, la plupart des commentaires dans le contrôle deb822 seront conservés."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:94
+msgid ""
+"The option is a temporary means to enable users to opt-in to this new "
+"experimental feature. The option will be removed once the new parser is "
+"mature enough and is ready to unconditionally replace the previous parser."
+msgstr ""
+"L'option est un moyen temporaire de permettre aux utilisateurs de choisir "
+"cette nouvelle fonctionnalité expérimentale. L'option sera supprimée une "
+"fois que le nouvel analyseur sera suffisamment mature et prêt à remplacer "
+"sans condition l'analyseur précédent."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:97
+msgid ""
+"This option requires python-debian version 0.1.43 or later to work. "
+"However, some features will require 0.1.44 or later."
+msgstr ""
+"Cette option nécessite python-debian version 0.1.43 ou supérieure. Toutefois "
+"certaines fonctionnalités nécessitent une version au moins égale à 0.1.44."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:101
+msgid ""
+"B<wrap-and-sort> and this manpage have been written by Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+msgstr ""
+"B<wrap-and-sort> et cette page de manuel ont été écrites par Benjamin Drung "
+"E<lt>I<bdrung@debian.org>E<gt>."
+
+#. type: TH
+#: ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "DEVSCRIPTS.CONF"
+msgstr "DEVSCRIPTS.CONF"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:4
+msgid "devscripts.conf - configuration file for the devscripts package"
+msgstr "devscripts.conf - Fichier de configuration du paquet devscripts"
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../doc/devscripts.conf.5:9
+msgid ""
+"The B<devscripts> package provides a collection of scripts which may be of "
+"use to Debian developers and others wishing to build Debian packages. Many "
+"of these have options which can be configured on a system-wide and per-user "
+"basis."
+msgstr ""
+"Le paquet B<devscripts> fournit un ensemble de scripts qui peuvent être "
+"utiles aux développeurs Debian et à tous ceux qui souhaitent construire des "
+"paquets Debian. Beaucoup d'entre eux ont des options qui peuvent être "
+"configurées dans des fichiers de configuration au niveau du système ou par "
+"utilisateur."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:15
+msgid ""
+"Every script in the B<devscripts> package which makes use of values from "
+"these configuration files describes the specific settings recognised in its "
+"own manpage. (For a list of the scripts, either see I</usr/share/doc/"
+"devscripts/README.gz> or look at the output of I<dpkg -L devscripts | grep /"
+"usr/bin>.)"
+msgstr ""
+"Tous les scripts du paquet B<devscripts> qui utilisent des valeurs de ces "
+"fichiers de configuration décrivent les paramètres reconnus par chacun "
+"d'entre eux dans leurs pages de manuel respectives. (Consultez I</usr/share/"
+"doc/devscripts/README.gz> pour avoir une liste des scripts ou utilisez la "
+"sortie de I<dpkg -L devscripts | grep /usr/bin>.)"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:24
+msgid ""
+"The two configuration files are I</etc/devscripts.conf> for system-wide "
+"defaults and I<~/.devscripts> for per-user settings. They are written with "
+"B<bash>(1) syntax, but should only have comments and simple variable "
+"assignments in them; they are both sourced (if present) by many of the "
+"B<devscripts> scripts. Variables corresponding to simple switches should "
+"have one of the values I<yes> and I<no>; any other setting is regarded as "
+"equivalent to the default setting."
+msgstr ""
+"Les deux fichiers de configuration sont I</etc/devscripts.conf> au niveau "
+"système et I<~/.devscripts> pour les paramètres propres à un utilisateur. "
+"Ils sont écrits dans la syntaxe B<bash>(1), mais ne doivent comporter que "
+"des commentaires ou des affectations de variable simples. Ils sont évalués "
+"tous les deux par beaucoup des scripts du paquet B<devscripts>. Les "
+"variables booléennes peuvent prendre pour valeurs I<yes> (oui) ou I<no> "
+"(non) ; toute autre valeur sera interprétée comme la valeur par défaut."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:28
+msgid ""
+"All variable names are written in uppercase, and begin with the script "
+"name. Package-wide variables begin with \"DEVSCRIPTS\", and are listed "
+"below, as well as in the relevant manpages."
+msgstr ""
+"Toutes les variables sont écrites en majuscules, et commencent par le nom du "
+"script. Les variables globales au paquet commencent par \"DEVSCRIPTS\", et "
+"sont listées ci-dessous et dans les pages de manuel appropriées."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:36
+msgid ""
+"For a list of all of the available options variables, along with their "
+"default settings, see the example configuration file I</usr/share/doc/"
+"devscripts/devscripts.conf.ex>. This is copied to I</etc/devscripts.conf> "
+"when the B<devscripts> package is first installed. Information about "
+"configuration options introduced in newer versions of the package will be "
+"appended to I</etc/devscripts.conf> when the package is upgraded."
+msgstr ""
+"Pour une liste de toutes les variables disponibles, avec leur valeur par "
+"défaut, veuillez consulter l'exemple de fichier de configuration I</usr/"
+"share/doc/devscripts/devscripts.conf.ex>. Celui-ci est copié dans I</etc/"
+"devscripts.conf> quand le paquet B<devscripts> est installé pour la première "
+"fois. Les informations concernant les options ajoutées dans les nouvelles "
+"versions du paquet sont ajoutées à la fin de I</etc/devscripts.conf> quand "
+"le paquet est mis à jour."
+
+# NOTE: et --noconf ?
+#. type: Plain text
+#: ../doc/devscripts.conf.5:40
+msgid ""
+"Every script which reads the configuration files can be forced to ignore "
+"them by using B<--no-conf> as the I<first> command-line option."
+msgstr ""
+"Il est possible d'empêcher la lecture des fichiers de configuration, pour "
+"les scripts qui les utilisent, en utilisant l'option B<--no-conf> comme "
+"I<première> option de la ligne de commande."
+
+#. type: SH
+#: ../doc/devscripts.conf.5:40
+#, no-wrap
+msgid "PACKAGE-WIDE VARIABLES"
+msgstr "VARIABLES GLOBALES AU PAQUET"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:42
+msgid "The currently recognised package-wide variables are:"
+msgstr "Les options globales au paquet actuellement reconnues sont :"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:54
+msgid ""
+"These variables control scripts which change directory to find a I<debian/"
+"changelog> file or suchlike, and some other miscellaneous cases. In order "
+"to prevent unwanted, even possibly dangerous, behaviour, these variables "
+"control when actions will be performed. The scripts which currently make "
+"use of these variables are: B<debc>, B<debchange>/B<dch>, B<debclean>, "
+"B<debi>, B<debrelease>, B<debuild> and B<uscan>, but this list may change "
+"with time (and I may not remember to update this manpage). Please see the "
+"manpages of individual scripts for details of the specific behaviour for "
+"each script."
+msgstr ""
+"Ces variables permettent de contrôler les scripts qui changent de répertoire "
+"afin de trouver un fichier I<debian/changelog> ou un fichier y ressemblant, "
+"et quelques autres cas. Pour empêcher des comportements indésirables, et "
+"pouvant être dangereux, ces variables contrôlent le moment où les actions "
+"sont effectuées. Les scripts qui utilisent actuellement ces variables sont : "
+"B<debc>, B<debchange>/B<dch>, B<debclean>, B<debi>, B<debrelease>, "
+"B<debuild> et B<uscan>, mais cette liste peut être amenée à être modifiée "
+"(et il se peut que cette page de manuel ne soit pas mise à jour). Veuillez "
+"consulter les pages de manuel des différents scripts pour les détails des "
+"comportements de ceux-ci."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:58
+msgid "B<devscripts>(1) and I</usr/share/doc/devscripts/README.gz.>"
+msgstr "B<devscripts>(1) et I</usr/share/doc/devscripts/README.gz>"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:60
+msgid ""
+"This manpage was written for the B<devscripts> package by the package "
+"maintainer Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Cette page de manuel a été écrite pour le paquet B<devscripts> par le "
+"responsable du paquet, Julian Gilbey E<lt>jdg@debian.orgE<gt>."
diff --git a/po4a/po/pt.po b/po4a/po/pt.po
new file mode 100644
index 0000000..1f78270
--- /dev/null
+++ b/po4a/po/pt.po
@@ -0,0 +1,30325 @@
+# Translation of devscripts manpage to European Portuguese
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is distributed under the same license as the devscripts package.
+#
+# Américo Monteiro <a_monteiro@gmx.com>, 2020 - 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: devscripts 2.22.2\n"
+"POT-Creation-Date: 2023-04-05 11:18+0200\n"
+"PO-Revision-Date: 2022-09-04 23:47+0100\n"
+"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n"
+"Language-Team: Portuguese <>\n"
+"Language: pt\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"
+"X-Generator: Lokalize 20.12.0\n"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1
+#, no-wrap
+msgid "ANNOTATE-OUTPUT"
+msgstr "ANNOTATE-OUTPUT"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1 ../scripts/archpath.1:1
+#: ../scripts/checkbashisms.1:1 ../scripts/cvs-debc.1:1 ../scripts/cvs-debi.1:1
+#: ../scripts/cvs-debrelease.1:1 ../scripts/cvs-debuild.1:1 ../scripts/dcmd.1:1
+#: ../scripts/debc.1:1 ../scripts/debchange.1:1 ../scripts/debclean.1:1
+#: ../scripts/debdiff.1:1 ../scripts/debdiff-apply.1:15 ../scripts/debi.1:1
+#: ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1
+#: ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/dep3changelog.1:1
+#: ../doc/devscripts.1:1 ../scripts/dpkg-genbuilddeps.1:1 ../doc/edit-patch.1:1
+#: ../scripts/dscextract.1:1 ../scripts/dscverify.1:1
+#: ../scripts/getbuildlog.1:1 ../scripts/grep-excuses.1:1
+#: ../scripts/list-unreleased.1:1 ../scripts/manpage-alert.1:1
+#: ../scripts/mergechanges.1:1 ../scripts/nmudiff.1:1
+#: ../scripts/plotchangelog.1:1 ../scripts/pts-subscribe.1:1
+#: ../scripts/rc-alert.1:1 ../doc/suspicious-source.1:15 ../scripts/uupdate.1:1
+#: ../doc/what-patch.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../doc/wrap-and-sort.1:15 ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "Debian Utilities"
+msgstr "Utilitários Debian"
+
+#. type: TH
+#: ../scripts/annotate-output.1:1 ../scripts/archpath.1:1
+#: ../scripts/checkbashisms.1:1 ../scripts/cvs-debc.1:1 ../scripts/cvs-debi.1:1
+#: ../scripts/cvs-debrelease.1:1 ../scripts/cvs-debuild.1:1 ../scripts/dcmd.1:1
+#: ../scripts/debc.1:1 ../scripts/debchange.1:1 ../scripts/debclean.1:1
+#: ../scripts/debdiff.1:1 ../scripts/debdiff-apply.1:15 ../scripts/debi.1:1
+#: ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1
+#: ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/dep3changelog.1:1
+#: ../doc/devscripts.1:1 ../scripts/dpkg-depcheck.1:1
+#: ../scripts/dpkg-genbuilddeps.1:1 ../doc/edit-patch.1:1
+#: ../scripts/dscextract.1:1 ../scripts/dscverify.1:1
+#: ../scripts/getbuildlog.1:1 ../scripts/grep-excuses.1:1
+#: ../scripts/list-unreleased.1:1 ../scripts/manpage-alert.1:1
+#: ../scripts/mergechanges.1:1 ../scripts/nmudiff.1:1
+#: ../scripts/plotchangelog.1:1 ../scripts/pts-subscribe.1:1
+#: ../scripts/rc-alert.1:1 ../doc/suspicious-source.1:15 ../scripts/uupdate.1:1
+#: ../doc/what-patch.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../doc/wrap-and-sort.1:15 ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "DEBIAN"
+msgstr "DEBIAN"
+
+#. type: SH
+#: ../scripts/annotate-output.1:2 ../scripts/archpath.1:2 ../scripts/bts.pl:39
+#: ../scripts/build-rdeps.pl:22 ../scripts/chdist.pl:18
+#: ../scripts/checkbashisms.1:2 ../scripts/cowpoke.1:18 ../scripts/cvs-debc.1:2
+#: ../scripts/cvs-debi.1:2 ../scripts/cvs-debrelease.1:2
+#: ../scripts/cvs-debuild.1:2 ../scripts/dcmd.1:2 ../scripts/dd-list.1:18
+#: ../scripts/debc.1:2 ../scripts/debchange.1:2 ../scripts/debcheckout.pl:24
+#: ../scripts/debclean.1:2 ../scripts/debcommit.pl:3 ../scripts/debdiff.1:2
+#: ../scripts/debdiff-apply.1:17 ../scripts/debi.1:2 ../scripts/debpkg.1:2
+#: ../scripts/debrepro.pod:1 ../scripts/debrelease.1:2
+#: ../scripts/deb-why-removed.pl:196 ../scripts/debrsign.1:2
+#: ../scripts/debsign.1:2 ../scripts/debsnap.1:3 ../scripts/debuild.1:2
+#: ../scripts/desktop2menu.pl:24 ../scripts/dep3changelog.1:2
+#: ../doc/devscripts.1:2 ../scripts/dget.pl:565 ../scripts/diff2patches.1:2
+#: ../scripts/dpkg-depcheck.1:2 ../scripts/dpkg-genbuilddeps.1:2
+#: ../doc/edit-patch.1:2 ../scripts/dscextract.1:2 ../scripts/dscverify.1:2
+#: ../scripts/getbuildlog.1:2 ../scripts/git-deborig.pl:20
+#: ../scripts/grep-excuses.1:2 ../scripts/hardening-check.pl:521
+#: ../scripts/list-unreleased.1:2 ../scripts/ltnu.pod:1
+#: ../scripts/manpage-alert.1:2 ../scripts/mass-bug.pl:21
+#: ../scripts/mergechanges.1:2 ../scripts/mk-build-deps.pl:24
+#: ../scripts/mk-origtargz.pl:25 ../scripts/namecheck.pl:3
+#: ../scripts/nmudiff.1:2 ../scripts/origtargz.pl:20
+#: ../scripts/plotchangelog.1:2 ../scripts/pts-subscribe.1:2
+#: ../scripts/rc-alert.1:2 ../scripts/rmadison.pl:260 ../scripts/sadt.pod:17
+#: ../scripts/salsa.pl:3 ../doc/suspicious-source.1:17 ../scripts/svnpath.pl:3
+#: ../scripts/tagpending.pl:80 ../scripts/transition-check.pl:23
+#: ../scripts/uscan.pl:34 ../scripts/uupdate.1:2 ../doc/what-patch.1:2
+#: ../scripts/whodepends.1:2 ../scripts/who-uploads.1:2
+#: ../scripts/who-permits-upload.pl:48 ../scripts/wnpp-alert.1:2
+#: ../scripts/wnpp-check.1:2 ../doc/wrap-and-sort.1:16
+#: ../doc/devscripts.conf.5:2
+#, no-wrap
+msgid "NAME"
+msgstr "NOME"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:4
+msgid "annotate-output - annotate program output with time and stream"
+msgstr "annotate-output - anota resultados de programa com hora e fluxo"
+
+#. type: SH
+#: ../scripts/annotate-output.1:4 ../scripts/archpath.1:4 ../scripts/bts.pl:191
+#: ../scripts/build-rdeps.pl:26 ../scripts/chdist.pl:22
+#: ../scripts/checkbashisms.1:4 ../scripts/cowpoke.1:20 ../scripts/cvs-debc.1:4
+#: ../scripts/cvs-debi.1:4 ../scripts/cvs-debrelease.1:4
+#: ../scripts/cvs-debuild.1:4 ../scripts/dcmd.1:4 ../scripts/dd-list.1:21
+#: ../scripts/debc.1:4 ../scripts/debchange.1:4 ../scripts/debcheckout.pl:28
+#: ../scripts/debclean.1:4 ../scripts/debcommit.pl:7 ../scripts/debdiff.1:4
+#: ../scripts/debdiff-apply.1:20 ../scripts/debi.1:4 ../scripts/debpkg.1:4
+#: ../scripts/debrepro.pod:5 ../scripts/debrelease.1:4
+#: ../scripts/deb-why-removed.pl:200 ../scripts/debrsign.1:4
+#: ../scripts/debsign.1:4 ../scripts/debsnap.1:6 ../scripts/debuild.1:4
+#: ../scripts/desktop2menu.pl:28 ../scripts/dep3changelog.1:4
+#: ../scripts/dget.pl:569 ../scripts/dpkg-depcheck.1:4
+#: ../scripts/dpkg-genbuilddeps.1:4 ../doc/edit-patch.1:6
+#: ../scripts/dscextract.1:4 ../scripts/dscverify.1:4
+#: ../scripts/getbuildlog.1:4 ../scripts/git-deborig.pl:24
+#: ../scripts/grep-excuses.1:4 ../scripts/hardening-check.pl:525
+#: ../scripts/list-unreleased.1:4 ../scripts/ltnu.pod:5
+#: ../scripts/manpage-alert.1:4 ../scripts/mass-bug.pl:25
+#: ../scripts/mergechanges.1:4 ../scripts/mk-build-deps.pl:28
+#: ../scripts/mk-origtargz.pl:29 ../scripts/nmudiff.1:4
+#: ../scripts/origtargz.pl:24 ../scripts/plotchangelog.1:4
+#: ../scripts/pts-subscribe.1:4 ../scripts/rc-alert.1:4
+#: ../scripts/rmadison.pl:264 ../scripts/sadt.pod:21 ../scripts/salsa.pl:7
+#: ../doc/suspicious-source.1:21 ../scripts/svnpath.pl:7
+#: ../scripts/tagpending.pl:84 ../scripts/transition-check.pl:27
+#: ../scripts/uscan.pl:38 ../scripts/uupdate.1:4 ../doc/what-patch.1:5
+#: ../scripts/whodepends.1:4 ../scripts/who-uploads.1:4
+#: ../scripts/who-permits-upload.pl:52 ../scripts/wnpp-alert.1:4
+#: ../scripts/wnpp-check.1:4 ../doc/wrap-and-sort.1:18
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr "SUMÁRIO"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:6
+msgid "B<annotate-output> [I<options>] I<program> [I<args> ...]"
+msgstr "B<annotate-output> [I<options>] I<program> [I<args> ...]"
+
+#. type: SH
+#: ../scripts/annotate-output.1:6 ../scripts/archpath.1:12
+#: ../scripts/bts.pl:195 ../scripts/build-rdeps.pl:30 ../scripts/chdist.pl:26
+#: ../scripts/checkbashisms.1:8 ../scripts/cowpoke.1:24 ../scripts/cvs-debc.1:6
+#: ../scripts/cvs-debi.1:6 ../scripts/cvs-debrelease.1:7
+#: ../scripts/cvs-debuild.1:7 ../scripts/dcmd.1:6 ../scripts/dd-list.1:26
+#: ../scripts/debc.1:6 ../scripts/debchange.1:8 ../scripts/debcheckout.pl:40
+#: ../scripts/debclean.1:6 ../scripts/debcommit.pl:11 ../scripts/debdiff.1:15
+#: ../scripts/debdiff-apply.1:27 ../scripts/debi.1:6 ../scripts/debpkg.1:6
+#: ../scripts/debrepro.pod:9 ../scripts/debrelease.1:6
+#: ../scripts/deb-reversion.dbk:82 ../scripts/deb-why-removed.pl:204
+#: ../scripts/debrsign.1:7 ../scripts/debsign.1:6 ../scripts/debsnap.1:14
+#: ../scripts/debuild.1:10 ../scripts/desktop2menu.pl:34
+#: ../scripts/dep3changelog.1:6 ../doc/devscripts.1:4 ../scripts/dget.pl:579
+#: ../scripts/diff2patches.1:10 ../scripts/dpkg-depcheck.1:6
+#: ../scripts/dpkg-genbuilddeps.1:6 ../doc/edit-patch.1:11
+#: ../scripts/dscextract.1:6 ../scripts/dscverify.1:6
+#: ../scripts/getbuildlog.1:8 ../scripts/git-deborig.pl:28
+#: ../scripts/grep-excuses.1:6 ../scripts/hardening-check.pl:532
+#: ../scripts/list-unreleased.1:6 ../scripts/ltnu.pod:13
+#: ../scripts/manpage-alert.1:6 ../scripts/mass-bug.pl:29
+#: ../scripts/mergechanges.1:6 ../scripts/mk-build-deps.pl:34
+#: ../scripts/mk-origtargz.pl:39 ../scripts/nmudiff.1:6
+#: ../scripts/origtargz.pl:34 ../scripts/plotchangelog.1:7
+#: ../scripts/pts-subscribe.1:8 ../scripts/rc-alert.1:8
+#: ../scripts/rmadison.pl:272 ../scripts/sadt.pod:25 ../scripts/salsa.pl:30
+#: ../doc/suspicious-source.1:24 ../scripts/svnpath.pl:17
+#: ../scripts/tagpending.pl:88 ../scripts/transition-check.pl:33
+#: ../scripts/uscan.pl:42 ../scripts/uupdate.1:10 ../doc/what-patch.1:8
+#: ../scripts/whodepends.1:6 ../scripts/who-uploads.1:6
+#: ../scripts/who-permits-upload.pl:56 ../scripts/wnpp-alert.1:8
+#: ../scripts/wnpp-check.1:8 ../doc/wrap-and-sort.1:22
+#: ../doc/devscripts.conf.5:4
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr "DESCRIÇÃO"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:10
+msgid ""
+"B<annotate-output> will execute the specified program, while prepending "
+"every line with the current time and O for stdout and E for stderr."
+msgstr ""
+"B<annotate-output> irá executar o programa especificado, antecedendo cada "
+"linha com a hora actual e O para stdout e E para stderr."
+
+#. type: SH
+#: ../scripts/annotate-output.1:11 ../scripts/bts.pl:247
+#: ../scripts/build-rdeps.pl:46 ../scripts/chdist.pl:33
+#: ../scripts/checkbashisms.1:23 ../scripts/cowpoke.1:29
+#: ../scripts/cvs-debc.1:24 ../scripts/cvs-debi.1:28
+#: ../scripts/cvs-debrelease.1:21 ../scripts/cvs-debuild.1:32
+#: ../scripts/dcmd.1:15 ../scripts/dd-list.1:58 ../scripts/debc.1:64
+#: ../scripts/debchange.1:149 ../scripts/debcheckout.pl:68
+#: ../scripts/debclean.1:63 ../scripts/debcommit.pl:19 ../scripts/debdiff.1:52
+#: ../scripts/debdiff-apply.1:61 ../scripts/debi.1:65
+#: ../scripts/debrepro.pod:92 ../scripts/debrelease.1:56
+#: ../scripts/deb-reversion.dbk:128 ../scripts/deb-why-removed.pl:209
+#: ../scripts/debrsign.1:30 ../scripts/debsign.1:39 ../scripts/debsnap.1:26
+#: ../scripts/debuild.1:256 ../scripts/dep3changelog.1:15
+#: ../scripts/dget.pl:620 ../scripts/diff2patches.1:16
+#: ../scripts/dpkg-depcheck.1:15 ../scripts/dscextract.1:14
+#: ../scripts/dscverify.1:17 ../scripts/getbuildlog.1:24
+#: ../scripts/git-deborig.pl:47 ../scripts/grep-excuses.1:14
+#: ../scripts/hardening-check.pl:593 ../scripts/list-unreleased.1:12
+#: ../scripts/ltnu.pod:27 ../scripts/manpage-alert.1:12
+#: ../scripts/mass-bug.pl:59 ../scripts/mk-build-deps.pl:44
+#: ../scripts/mk-origtargz.pl:64 ../scripts/nmudiff.1:24
+#: ../scripts/origtargz.pl:100 ../scripts/plotchangelog.1:43
+#: ../scripts/pts-subscribe.1:18 ../scripts/rc-alert.1:17
+#: ../scripts/rmadison.pl:281 ../scripts/sadt.pod:42 ../scripts/salsa.pl:437
+#: ../doc/suspicious-source.1:34 ../scripts/tagpending.pl:94
+#: ../scripts/transition-check.pl:42 ../scripts/uupdate.1:54
+#: ../doc/what-patch.1:15 ../scripts/whodepends.1:10
+#: ../scripts/who-uploads.1:15 ../scripts/who-permits-upload.pl:62
+#: ../scripts/wnpp-alert.1:17 ../scripts/wnpp-check.1:16
+#: ../doc/wrap-and-sort.1:35
+#, no-wrap
+msgid "OPTIONS"
+msgstr "OPÇÕES"
+
+#. type: TP
+#: ../scripts/annotate-output.1:12
+#, no-wrap
+msgid "B<+FORMAT>"
+msgstr "B<+FORMAT>"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:16
+msgid ""
+"Controls the timestamp format, as per B<date>(1). Defaults to \"%H:%M:%S\"."
+msgstr ""
+"Controla o formato de carimbo horário, como para B<date>(1). A predefinição "
+"é \"%H:%M:%S\"."
+
+#. type: TP
+#: ../scripts/annotate-output.1:16 ../scripts/chdist.pl:37
+#: ../scripts/dd-list.1:59 ../scripts/debcheckout.pl:96
+#: ../scripts/debdiff-apply.1:62 ../scripts/debsnap.1:73 ../scripts/dget.pl:680
+#: ../scripts/dpkg-depcheck.1:96 ../scripts/getbuildlog.1:25
+#: ../scripts/mk-build-deps.pl:111 ../scripts/rmadison.pl:305
+#: ../scripts/sadt.pod:64 ../doc/suspicious-source.1:35 ../doc/what-patch.1:17
+#: ../doc/wrap-and-sort.1:36
+#, no-wrap
+msgid "B<-h>, B<--help>"
+msgstr "B<-h>, B<--help>"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:19 ../scripts/debchange.1:402
+#: ../scripts/debclean.1:90 ../scripts/debrelease.1:102
+#: ../scripts/debsign.1:102 ../scripts/dep3changelog.1:19
+#: ../scripts/dscverify.1:40 ../scripts/nmudiff.1:89
+#: ../scripts/pts-subscribe.1:31 ../scripts/uupdate.1:104
+#: ../scripts/who-uploads.1:48
+msgid "Display a help message and exit successfully."
+msgstr "Mostra uma mensagem de ajuda e termina com sucesso."
+
+#. type: =head1
+#: ../scripts/annotate-output.1:20 ../scripts/dscextract.1:30
+#: ../scripts/ltnu.pod:84
+#, no-wrap
+msgid "EXAMPLE"
+msgstr "EXEMPLO"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:30
+#, no-wrap
+msgid ""
+"$ annotate-output make\n"
+"21:41:21 I: Started make\n"
+"21:41:21 O: gcc -Wall program.c\n"
+"21:43:18 E: program.c: Couldn't compile, and took me ages to find out\n"
+"21:43:19 E: collect2: ld returned 1 exit status\n"
+"21:43:19 E: make: *** [all] Error 1\n"
+"21:43:19 I: Finished with exitcode 2\n"
+msgstr ""
+"$ annotate-output make\n"
+"21:41:21 I: Started make\n"
+"21:41:21 O: gcc -Wall program.c\n"
+"21:43:18 E: program.c: Couldn't compile, and took me ages to find out\n"
+"21:43:19 E: collect2: ld returned 1 exit status\n"
+"21:43:19 E: make: *** [all] Error 1\n"
+"21:43:19 I: Finished with exitcode 2\n"
+
+#. type: SH
+#: ../scripts/annotate-output.1:32 ../scripts/debsnap.1:156
+#: ../scripts/rc-alert.1:119 ../scripts/whodepends.1:17
+#, no-wrap
+msgid "BUGS"
+msgstr "BUGS"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:36
+msgid ""
+"Since stdout and stderr are processed in parallel, it can happen that some "
+"lines received on stdout will show up before later-printed stderr lines (and "
+"vice-versa)."
+msgstr ""
+"Como stdout e stderr são processados em paralelo, pode acontecer que algumas "
+"linhas recebidas no stdout irão aparecer antes que linhas de escrita-tardia "
+"do stderr (e vice-versa)."
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:41
+msgid ""
+"This is unfortunately very hard to fix with the current annotation "
+"strategy. A fix would involve switching to PTRACE'ing the process. Giving "
+"nice a (much) higher priority over the executed program could however cause "
+"this behaviour to show up less frequently."
+msgstr ""
+"Isto é infelizmente muito difícil de corrigir com a estratégia de anotação "
+"actual. Uma correcção iria envolver a comutação para fazer PTRACE ao "
+"processo. Dando ao nice uma prioridade (muito) mais alta sobre o programa "
+"executado poderia fazer com que este comportamento surgisse com menos "
+"frequência."
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:46
+msgid ""
+"The program does not work as well when the output is not linewise. In "
+"particular, when an interactive program asks for input, the question might "
+"not be shown until after you have answered it. This will give the "
+"impression that the annotated program has hung, while it has not."
+msgstr ""
+"O programa não funciona tão bem quando os resultados não definem bem as "
+"linhas. Em particular, quando um programa interactivo pede uma entrada, a "
+"pergunta pode não aparecer até que você a responda. Isto dá a impressão de "
+"que o programa annotated pendurou, mas isso não aconteceu."
+
+#. type: SH
+#: ../scripts/annotate-output.1:47 ../scripts/bts.pl:4316
+#: ../scripts/checkbashisms.1:72 ../scripts/cowpoke.1:379
+#: ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62
+#: ../scripts/cvs-debrelease.1:64 ../scripts/cvs-debuild.1:53
+#: ../scripts/dcmd.1:107 ../scripts/debc.1:125 ../scripts/debchange.1:482
+#: ../scripts/debcheckout.pl:231 ../scripts/debclean.1:110
+#: ../scripts/debcommit.pl:954 ../scripts/debdiff.1:251
+#: ../scripts/debdiff-apply.1:111 ../scripts/debi.1:132
+#: ../scripts/debrepro.pod:171 ../scripts/debrelease.1:132
+#: ../scripts/deb-reversion.dbk:247 ../scripts/deb-why-removed.pl:247
+#: ../scripts/debrsign.1:66 ../scripts/debsign.1:132 ../scripts/debsnap.1:138
+#: ../scripts/debuild.1:447 ../scripts/dep3changelog.1:28
+#: ../scripts/dget.pl:742 ../scripts/diff2patches.1:45
+#: ../scripts/dpkg-depcheck.1:118 ../scripts/dpkg-genbuilddeps.1:30
+#: ../scripts/dscverify.1:78 ../scripts/git-deborig.pl:79
+#: ../scripts/grep-excuses.1:61 ../scripts/hardening-check.pl:680
+#: ../scripts/list-unreleased.1:19 ../scripts/ltnu.pod:105
+#: ../scripts/mk-origtargz.pl:210 ../scripts/nmudiff.1:121
+#: ../scripts/origtargz.pl:162 ../scripts/plotchangelog.1:124
+#: ../scripts/pts-subscribe.1:51 ../scripts/rc-alert.1:121
+#: ../scripts/rmadison.pl:404 ../scripts/sadt.pod:74 ../scripts/salsa.pl:1029
+#: ../scripts/tagpending.pl:149 ../scripts/uscan.pl:2094
+#: ../scripts/uupdate.1:189 ../doc/what-patch.1:35
+#: ../scripts/who-permits-upload.pl:167 ../scripts/wnpp-alert.1:29
+#: ../scripts/wnpp-check.1:26 ../doc/devscripts.conf.5:54
+#, no-wrap
+msgid "SEE ALSO"
+msgstr "VEJA TAMBÉM"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:49
+msgid "B<date>(1)"
+msgstr "B<date>(1)"
+
+#. type: SH
+#: ../scripts/annotate-output.1:50
+#, no-wrap
+msgid "SUPPORT"
+msgstr "SUPORTE"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:54
+msgid ""
+"This program is community-supported (meaning: you'll need to fix it "
+"yourself). Patches are however appreciated, as is any feedback (positive or "
+"negative)."
+msgstr ""
+"Este programa é suportado pela comunidade (significa: você irá precisar de "
+"ser o próprio a corrigi-lo). No entanto as patches são bem vindas, assim "
+"como qualquer feedback (positivo ou negativo)."
+
+#. type: SH
+#: ../scripts/annotate-output.1:55 ../scripts/archpath.1:54
+#: ../scripts/build-rdeps.pl:547 ../scripts/checkbashisms.1:74
+#: ../scripts/cowpoke.1:385 ../scripts/cvs-debc.1:63 ../scripts/cvs-debi.1:67
+#: ../scripts/cvs-debrelease.1:68 ../scripts/cvs-debuild.1:58
+#: ../scripts/dcmd.1:110 ../scripts/dd-list.1:107 ../scripts/debc.1:129
+#: ../scripts/debchange.1:488 ../scripts/debcheckout.pl:236
+#: ../scripts/debclean.1:113 ../scripts/debcommit.pl:950
+#: ../scripts/debdiff.1:259 ../scripts/debi.1:135 ../scripts/debpkg.1:23
+#: ../scripts/debrepro.pod:175 ../scripts/debrelease.1:136
+#: ../scripts/deb-reversion.dbk:292 ../scripts/debrsign.1:70
+#: ../scripts/debsign.1:144 ../scripts/debuild.1:459
+#: ../scripts/desktop2menu.pl:52 ../scripts/dep3changelog.1:26
+#: ../scripts/dget.pl:734 ../scripts/diff2patches.1:48
+#: ../scripts/dpkg-genbuilddeps.1:36 ../scripts/dscextract.1:32
+#: ../scripts/dscverify.1:83 ../scripts/getbuildlog.1:41
+#: ../scripts/git-deborig.pl:83 ../scripts/grep-excuses.1:63
+#: ../scripts/hardening-check.pl:668 ../scripts/list-unreleased.1:21
+#: ../scripts/manpage-alert.1:28 ../scripts/mass-bug.pl:566
+#: ../scripts/mergechanges.1:28 ../scripts/mk-build-deps.pl:141
+#: ../scripts/mk-origtargz.pl:214 ../scripts/namecheck.pl:24
+#: ../scripts/nmudiff.1:125 ../scripts/origtargz.pl:166
+#: ../scripts/plotchangelog.1:126 ../scripts/pts-subscribe.1:56
+#: ../scripts/rc-alert.1:125 ../scripts/rmadison.pl:408
+#: ../scripts/salsa.pl:1033 ../scripts/svnpath.pl:96
+#: ../scripts/transition-check.pl:81 ../scripts/uscan.pl:2098
+#: ../scripts/uupdate.1:196 ../scripts/whodepends.1:19
+#: ../scripts/who-uploads.1:73 ../scripts/who-permits-upload.pl:162
+#: ../scripts/wnpp-alert.1:31 ../scripts/wnpp-check.1:36
+#: ../doc/devscripts.conf.5:58
+#, no-wrap
+msgid "AUTHOR"
+msgstr "AUTOR"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:59
+msgid ""
+"B<annotate-output> was written by Jeroen van Wolffelaar "
+"E<lt>jeroen@wolffelaar.nlE<gt>. This manpage comes under the same copyright "
+"as annotate-output itself, read /usr/bin/annotate-output (or wherever you "
+"install it) for the details."
+msgstr ""
+"B<annotate-output> foi escrito por Jeroen van Wolffelaar "
+"E<lt>jeroen@wolffelaar.nlE<gt>. Este manual vem sob o mesmo copyright que o "
+"próprio annotate-output, leia /usr/bin/annotate-output (ou onde você o "
+"instalar) para os detalhes."
+
+#. type: TH
+#: ../scripts/archpath.1:1
+#, no-wrap
+msgid "ARCHPATH"
+msgstr "ARCHPATH"
+
+#. type: Plain text
+#: ../scripts/archpath.1:4
+msgid ""
+"archpath - output arch (tla/Bazaar) archive names, with support for branches"
+msgstr ""
+"archpath - gera nomes de arquivo arch (tla/Bazaar), com suporte para "
+"ramificações"
+
+#. type: Plain text
+#: ../scripts/archpath.1:6
+msgid "B<archpath>"
+msgstr "B<archpath>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:9
+msgid "B<archpath> I<branch>"
+msgstr "B<archpath> I<branch>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:12
+msgid "B<archpath> I<branch>B<-->I<version>"
+msgstr "B<archpath> I<branch>B<-->I<version>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:15
+msgid ""
+"B<archpath> is intended to be run in an arch (tla or Bazaar) working copy."
+msgstr ""
+"B<archpath> destina-se a ser corrido numa cópia de trabalho de arch (tla ou "
+"Bazaar)."
+
+#. type: Plain text
+#: ../scripts/archpath.1:20
+msgid ""
+"In its simplest usage, B<archpath> with no parameters outputs the package "
+"name (archive/category--branch--version) associated with the working copy."
+msgstr ""
+"Na sua utilização mais simples, B<archpath> sem parâmetros escreve o nome do "
+"pacote (arquivo/categoria--ramo--versão) associado à cópia de trabalho."
+
+#. type: Plain text
+#: ../scripts/archpath.1:28
+msgid ""
+"If a parameter is given, it may either be a branch--version, in which case "
+"B<archpath> will output a corresponding package name in the current archive "
+"and category, or a plain branch name (without \\(oq--\"), in which case "
+"B<archpath> will output a corresponding package name in the current archive "
+"and category and with the same version as the current working copy."
+msgstr ""
+"Se for dado um parâmetro, pode ser ou ramo--versão, que neste caso o "
+"B<archpath> ira escrever um nome de pacote correspondente no arquivo e "
+"categoria actual, ou um nome de ramo simples (sem \\(oq--\"), que neste caso "
+"o B<archpath> irá escrever um nome de pacote correspondente no arquivo e "
+"categoria actual e com a mesma versão que a cópia de trabalho actual."
+
+#. type: Plain text
+#: ../scripts/archpath.1:32
+msgid ""
+"This is useful for branching. For example, if you're using Bazaar and you "
+"want to create a branch for a new feature, you might use a command like this:"
+msgstr ""
+"Isto é útil para ramificações. Por exemplo, se você usa o Bazaar e quer "
+"criar um ramo para uma nova funcionalidade, você pode usar um comando tal "
+"como este:"
+
+#. type: Plain text
+#: ../scripts/archpath.1:37
+#, no-wrap
+msgid "CW<baz branch $(archpath) $(archpath new-feature)>\n"
+msgstr "CW<baz branch $(archpath) $(archpath new-feature)>\n"
+
+#. type: Plain text
+#: ../scripts/archpath.1:43
+msgid ""
+"Or if you want to tag your current code onto a \\(oqreleases\\(cq branch as "
+"version 1.0, you might use a command like this:"
+msgstr ""
+"Ou se você deseja etiquetar o seu código actual num ramo \\(oqreleases\\(cq "
+"como na versão 1.0, você pode usar um comando como este:"
+
+#. type: Plain text
+#: ../scripts/archpath.1:48
+#, no-wrap
+msgid "CW<baz branch $(archpath) $(archpath releases--1.0)>\n"
+msgstr "CW<baz branch $(archpath) $(archpath releases--1.0)>\n"
+
+#. type: Plain text
+#: ../scripts/archpath.1:54
+msgid ""
+"That's much easier than using \\(oqbaz tree-version\\(cq to look up the "
+"package name and manually modifying the result."
+msgstr ""
+"Isto é muito mais fácil do que usar \\(oqbaz tree-version\\(cq para procurar "
+"o nome do pacote e modificar manualmente o resultado."
+
+#. type: Plain text
+#: ../scripts/archpath.1:57
+msgid "B<archpath> was written by"
+msgstr "B<archpath> foi escrito por"
+
+#. type: Plain text
+#: ../scripts/archpath.1:59
+msgid "Colin Watson E<lt>cjwatson@debian.orgE<gt>."
+msgstr "Colin Watson E<lt>cjwatson@debian.orgE<gt>."
+
+#. type: Plain text
+#: ../scripts/archpath.1:63
+msgid ""
+"Like B<archpath>, this manual page is released under the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+"Tal como B<archpath>, este manual é lançado sob a GNU General Public "
+"License, versão 2 ou posterior."
+
+#. type: textblock
+#: ../scripts/bts.pl:41
+msgid ""
+"bts - developers' command line interface to the Debian Bug Tracking System"
+msgstr ""
+"bts - interface de linha de comandos para desenvolvedores para o Debian Bug "
+"Tracking System"
+
+#. type: textblock
+#: ../scripts/bts.pl:193
+msgid ""
+"B<bts> [I<options>] I<command> [I<args>] [B<#>I<comment>] [B<.>|B<,> "
+"I<command> [I<args>] [B<#>I<comment>]] ..."
+msgstr ""
+"B<bts> [I<options>] I<command> [I<args>] [B<#>I<comment>] [B<.>|B<,> "
+"I<command> [I<args>] [B<#>I<comment>]] ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:197
+msgid ""
+"This is a command line interface to the Debian Bug Tracking System (BTS), "
+"intended mainly for use by developers. It lets the BTS be manipulated using "
+"simple commands that can be run at the prompt or in a script, does various "
+"sanity checks on the input, and constructs and sends a mail to the BTS "
+"control address for you. A local cache of web pages and e-mails from the BTS "
+"may also be created and updated."
+msgstr ""
+"Isto é uma interface de linha de comandos para o Sistema de Acompanhamento "
+"de Bugs Debian (BTS), destinado principalmente a ser usado por "
+"desenvolvedores. Permite que o BTS seja manipulado usando comandos simples "
+"que podem correr no aviso de comando ou num script, faz vários testes de "
+"sanidade aos dados introduzidos, e constrói e envia um mail para o endereço "
+"de controle do BTS por si. Também pode ser criada a actualizada uma cache de "
+"páginas web e e-mails vindos do BTS."
+
+#. type: textblock
+#: ../scripts/bts.pl:205
+msgid ""
+"In general, the command line interface is the same as what you would write "
+"in a mail to control@bugs.debian.org, just prefixed with \"bts\". For "
+"example:"
+msgstr ""
+"Em geral, a interface de linha de comandos é o mesmo que você escreve um "
+"mail para control@bugs.debian.org, apenas prefixado com \"bts\". Por exemplo:"
+
+#. type: verbatim
+#: ../scripts/bts.pl:209
+#, no-wrap
+msgid ""
+" % bts severity 69042 normal\n"
+" % bts merge 69042 43233\n"
+" % bts retitle 69042 blah blah\n"
+"\n"
+msgstr ""
+" % bts severity 69042 normal\n"
+" % bts merge 69042 43233\n"
+" % bts retitle 69042 blah blah\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:213
+msgid ""
+"A few additional commands have been added for your convenience, and this "
+"program is less strict about what constitutes a valid bug number. For "
+"example, \"severity Bug#85942 normal\" is understood, as is \"severity "
+"#85942 normal\". (Of course, your shell may regard \"#\" as a comment "
+"character though, so you may need to quote it!)"
+msgstr ""
+"Alguns comandos adicionais foram adicionados para sua conveniência, e este "
+"programa é menos estrito acerca do que constitui um número de bug válido. "
+"Por exemplo, \"severity Bug#85942 normal\" é compreendido, como \"severity "
+"#85942 normal\". (Claro, a sua shell pode considerar \"#\" como um "
+"caractere de comentário, assim você pode precisar de o citar!)"
+
+#. type: textblock
+#: ../scripts/bts.pl:219
+msgid ""
+"Also, for your convenience, this program allows you to abbreviate commands "
+"to the shortest unique substring (similar to how cvs lets you abbreviate "
+"commands). So it understands things like \"bts cl 85942\"."
+msgstr ""
+"Também, para sua conveniência, este programa permite-lhe abreviar os "
+"comandos à sua sub-string única mais curta (semelhante em como o cvs permite-"
+"lhe abreviar comandos), Assim compreende coisas como \"bts cl 85942\"."
+
+#. type: textblock
+#: ../scripts/bts.pl:223
+msgid ""
+"It is also possible to include a comment in the mail sent to the BTS. If "
+"your shell does not strip out the comment in a command like \"bts severity "
+"30321 normal #inflated severity\", then this program is smart enough to "
+"figure out where the comment is, and include it in the email. Note that "
+"most shells do strip out such comments before they get to the program, "
+"unless the comment is quoted. (Something like \"bts severity #85942 "
+"normal\" will not be treated as a comment!)"
+msgstr ""
+"É também possível incluir um comentário no mail enviado ao BTS. Se a sua "
+"shell não retirar o comentário na linha de comandos como \"bts severity "
+"30321 normal #inflated severity\", então este programa é esperto o "
+"suficiente para descobrir onde está o comentário, e incluí-lo no email. "
+"Note que a maioria das shells cortam tais comentários antes de eles chegarem "
+"ao programa, a menos que o comentário seja citado. (Algo como \"bts severity "
+"#85942 normal\" não será tratado como um comentário!)"
+
+#. type: textblock
+#: ../scripts/bts.pl:231
+msgid ""
+"You can specify multiple commands by separating them with a single dot, "
+"rather like B<update-rc.d>; a single comma may also be used; all the "
+"commands will then be sent in a single mail. It is important the dot/comma "
+"is surrounded by whitespace so it is not mistaken for part of a command. "
+"For example (quoting where necessary so that B<bts> sees the comment):"
+msgstr ""
+"Você pode especificar múltiplos comandos ao separa-los com um único ponto, "
+"algo como B<update-rc.d>; também pode ser usado uma vírgula única; todos os "
+"comandos serão então enviados num único mail. É importante que o ponto/"
+"vírgula esteja rodeado por espaços em branco para não ser confundido como "
+"parte de um comando. Por exemplo (citando onde necessário para que o B<bts> "
+"veja o comentário):"
+
+#. type: verbatim
+#: ../scripts/bts.pl:237
+#, no-wrap
+msgid ""
+" % bts severity 95672 normal , merge 95672 95673 \\#they are the same!\n"
+"\n"
+msgstr ""
+" % bts severity 95672 normal , merge 95672 95673 \\#they are the same!\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:239
+msgid ""
+"The abbreviation \"it\" may be used to refer to the last mentioned bug "
+"number, so you could write:"
+msgstr ""
+"A abreviação \"it\" pode ser usada para referir o número de bug mencionado "
+"em último, assim você pode escrever:"
+
+#. type: verbatim
+#: ../scripts/bts.pl:242
+#, no-wrap
+msgid ""
+" % bts severity 95672 wishlist , retitle it \"bts: please add a --foo option\"\n"
+"\n"
+msgstr ""
+" % bts severity 95672 wishlist , retitle it \"bts: please add a --foo option\"\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:244
+msgid ""
+"Please use this program responsibly, and do take our users into "
+"consideration."
+msgstr ""
+"Por favor use este programa com responsabilidade, e tenha os nossos "
+"utilizadores em consideração."
+
+#. type: textblock
+#: ../scripts/bts.pl:249
+msgid ""
+"B<bts> examines the B<devscripts> configuration files as described below. "
+"Command line options override the configuration file settings, though."
+msgstr ""
+"B<bts> examina os ficheiros de configuração do B<devscripts> como descrito "
+"em baixo. Contudo, as opções de linha de comandos sobrepõem as definições "
+"dos ficheiros de configuração."
+
+#. type: =item
+#: ../scripts/bts.pl:255
+msgid "B<-o>, B<--offline>"
+msgstr "B<-o>, B<--offline>"
+
+#. type: textblock
+#: ../scripts/bts.pl:257
+msgid ""
+"Make B<bts> use cached bugs for the B<show> and B<bugs> commands, if a cache "
+"is available for the requested data. See the B<cache> command, below for "
+"information on setting up a cache."
+msgstr ""
+"Faz o B<bts> usar bugs em cache para os comandos B<show> e B<bugs>, se "
+"estiver disponível uma cache para os dados requisitados. Veja o comando "
+"B<cache> command, em baixo para informação sobre como definir uma cache."
+
+#. type: =item
+#: ../scripts/bts.pl:261
+msgid "B<--online>, B<--no-offline>"
+msgstr "B<--online>, B<--no-offline>"
+
+#. type: textblock
+#: ../scripts/bts.pl:263
+msgid ""
+"Opposite of B<--offline>; overrides any configuration file directive to work "
+"offline."
+msgstr ""
+"Oposto de B<--offline>; sobrepõe qualquer directiva de ficheiro de "
+"configuração para trabalhar em offline."
+
+#. type: =item
+#: ../scripts/bts.pl:266
+msgid "B<-n>, B<--no-action>"
+msgstr "B<-n>, B<--no-action>"
+
+#. type: textblock
+#: ../scripts/bts.pl:268
+msgid "Do not send emails but print them to standard output."
+msgstr "Não envia os emails mas escreve-os na saída standard."
+
+#. type: =item
+#: ../scripts/bts.pl:270
+msgid "B<--cache>, B<--no-cache>"
+msgstr "B<--cache>, B<--no-cache>"
+
+#. type: textblock
+#: ../scripts/bts.pl:272
+msgid ""
+"Should we attempt to cache new versions of BTS pages when performing B<show>/"
+"B<bugs> commands? Default is to cache."
+msgstr ""
+"Devemos tentar pôr em cache novas versões de páginas BTS ao executar "
+"comandos B<show>/B<bugs>? A predefinição é pôr em cache."
+
+#. type: =item
+#: ../scripts/bts.pl:275
+msgid "B<--cache-mode=>{B<min>|B<mbox>|B<full>}"
+msgstr "B<--cache-mode=>{B<min>|B<mbox>|B<full>}"
+
+#. type: textblock
+#: ../scripts/bts.pl:277
+msgid ""
+"When running a B<bts cache> command, should we only mirror the basic bug "
+"(B<min>), or should we also mirror the mbox version (B<mbox>), or should we "
+"mirror the whole thing, including the mbox and the boring attachments to the "
+"BTS bug pages and the acknowledgement emails (B<full>)? Default is B<min>."
+msgstr ""
+"Ao correr um comando B<bts cache> command, deveremos apenas espelhar o bug "
+"básico (B<min>), ou devemos também espelhar a versão mbox (B<mbox>), ou "
+"devemos espelhar tudo, incluindo a mbox e os anexos aborrecidos às páginas "
+"de bug do BTS e os emails de reconhecimento (B<full>)? A predefinição é "
+"B<min>."
+
+#. type: =item
+#: ../scripts/bts.pl:283
+msgid "B<--cache-delay=>I<seconds>"
+msgstr "B<--cache-delay=>I<seconds>"
+
+#. type: textblock
+#: ../scripts/bts.pl:285
+msgid ""
+"Time in seconds to delay between each download, to avoid hammering the BTS "
+"web server. Default is 5 seconds."
+msgstr ""
+"Tempo em segundos de atraso entre cada download, para evitar martelar o "
+"servidor web do BTS. A predefinição é 5 segundos."
+
+#. type: =item
+#: ../scripts/bts.pl:288
+msgid "B<--mbox>"
+msgstr "B<--mbox>"
+
+#. type: textblock
+#: ../scripts/bts.pl:290
+msgid ""
+"Open a mail reader to read the mbox corresponding to a given bug number for "
+"B<show> and B<bugs> commands."
+msgstr ""
+"Abre um leitor de mail para ler o mbox correspondente a um dado número de "
+"bug para os comandos B<show> e B<bugs>."
+
+#. type: =item
+#: ../scripts/bts.pl:293
+msgid "B<--mailreader=>I<READER>"
+msgstr "B<--mailreader=>I<READER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:295
+msgid ""
+"Specify the command to read the mbox. Must contain a \"B<%s>\" string "
+"(unquoted!), which will be replaced by the name of the mbox file. The "
+"command will be split on white space and will not be passed to a shell. "
+"Default is 'B<mutt -f %s>'. (Also, B<%%> will be substituted by a single "
+"B<%> if this is needed.)"
+msgstr ""
+"Especifica o comando para ler o mbox. Tem de conter uma string "
+"\"B<%s>\" (sem citações), que irá ser substituída pelo nome do ficheiro "
+"mbox. O comando será divido com um espaço em branco e não será passado para "
+"a shell. A predefinição é 'B<mutt -f %s>'. (Também, B<%%> irá ser "
+"substituído por um único B<%> se for necessário.)"
+
+#. type: =item
+#: ../scripts/bts.pl:301
+msgid "B<--cc-addr=>I<CC_EMAIL_ADDRESS>"
+msgstr "B<--cc-addr=>I<CC_EMAIL_ADDRESS>"
+
+#. type: textblock
+#: ../scripts/bts.pl:303
+msgid ""
+"Send carbon copies to a list of users. I<CC_EMAIL_ADDRESS> should be a comma-"
+"separated list of email addresses. Multiple options add more CCs."
+msgstr ""
+"Envia cópias CC para uma lista de utilizadores. I<CC_EMAIL_ADDRESS> deve ser "
+"uma lista de endereços email separados por vírgulas. Múltiplas opções "
+"adicionam mais CCs."
+
+#. type: =item
+#: ../scripts/bts.pl:306
+msgid "B<--use-default-cc>"
+msgstr "B<--use-default-cc>"
+
+#. type: textblock
+#: ../scripts/bts.pl:308
+msgid ""
+"Add the addresses specified in the configuration file option "
+"B<BTS_DEFAULT_CC> to the list specified using B<--cc-addr>. This is the "
+"default."
+msgstr ""
+"Adiciona os endereços especificados na opção de ficheiro de configuração "
+"B<BTS_DEFAULT_CC> à lista especificada usando B<--cc-addr>. Isto é a "
+"predefinição."
+
+#. type: =item
+#: ../scripts/bts.pl:312
+msgid "B<--no-use-default-cc>"
+msgstr "B<--no-use-default-cc>"
+
+#. type: textblock
+#: ../scripts/bts.pl:314
+msgid ""
+"Do not add addresses specified in B<BTS_DEFAULT_CC> to the carbon copy list."
+msgstr ""
+"Não adiciona o endereço especificado em B<BTS_DEFAULT_CC> à lista CC (carbon "
+"copy)."
+
+#. type: =item
+#: ../scripts/bts.pl:317 ../scripts/mass-bug.pl:112
+msgid "B<--sendmail=>I<SENDMAILCMD>"
+msgstr "B<--sendmail=>I<SENDMAILCMD>"
+
+#. type: textblock
+#: ../scripts/bts.pl:319
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will not be passed to a shell. Default is F</usr/sbin/sendmail>. The "
+"B<-t> option will be automatically added if the command is F</usr/sbin/"
+"sendmail> or F</usr/sbin/exim*>. For other mailers, if they require a B<-t> "
+"option, this must be included in the I<SENDMAILCMD>, for example: B<--"
+"sendmail=\"/usr/sbin/mymailer -t\">."
+msgstr ""
+"Especifica o comando B<sendmail>. O comando será dividido em espaço em "
+"branco e não será passado para a shell. A predefinição é F</usr/sbin/"
+"sendmail>. A opção B<-t> será adicionada automaticamente se o comando for "
+"F</usr/sbin/sendmail> ou F</usr/sbin/exim*>. Para outros correios, se eles "
+"requerem uma opção B<-t>, isso tem de ser incluído na I<SENDMAILCMD>, por "
+"exemplo: B<--sendmail=\"/usr/sbin/mymailer -t\">."
+
+#. type: TP
+#: ../scripts/bts.pl:326 ../scripts/nmudiff.1:34
+#, no-wrap
+msgid "B<--mutt>"
+msgstr "B<--mutt>"
+
+#. type: textblock
+#: ../scripts/bts.pl:328
+msgid ""
+"Use B<mutt> for sending of mails. Default is not to use B<mutt>, except for "
+"some commands."
+msgstr ""
+"Usa B<mutt> para enviar os mails. A predefinição é não usar o B<mutt>, "
+"excepto para alguns comandos."
+
+#. type: textblock
+#: ../scripts/bts.pl:331
+msgid ""
+"Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in "
+"order to use B<mutt> to send emails."
+msgstr ""
+"Note que uma de B<$DEBEMAIL> ou B<$EMAIL> tem de estar definida no ambiente "
+"de modo a usar B<mutt> para enviar emails."
+
+#. type: TP
+#: ../scripts/bts.pl:334 ../scripts/nmudiff.1:39
+#, no-wrap
+msgid "B<--no-mutt>"
+msgstr "B<--no-mutt>"
+
+#. type: textblock
+#: ../scripts/bts.pl:336
+msgid "Don't use B<mutt> for sending of mails."
+msgstr "Não usa B<mutt> para o envio de mails."
+
+#. type: =item
+#: ../scripts/bts.pl:338
+msgid "B<--soap-timeout=>I<SECONDS>"
+msgstr "B<--soap-timeout=>I<SECONDS>"
+
+#. type: textblock
+#: ../scripts/bts.pl:340
+msgid ""
+"Specify a timeout for SOAP calls as used by the B<select> and B<status> "
+"commands."
+msgstr ""
+"Especifica um limite de tempo para chamadas SOAP como usado pelos comandos "
+"B<select> e B<status>."
+
+#. type: =item
+#: ../scripts/bts.pl:342
+msgid "B<--smtp-host=>I<SMTPHOST>"
+msgstr "B<--smtp-host=>I<SMTPHOST>"
+
+#. type: textblock
+#: ../scripts/bts.pl:344
+msgid ""
+"Specify an SMTP host. If given, B<bts> will send mail by talking directly "
+"to this SMTP host rather than by invoking a B<sendmail> command."
+msgstr ""
+"Especifica uma máquina SMTP. Se fornecido, B<bts> irá enviar mail ao falar "
+"directamente com esta máquina SMTP em vez de invocar um comando B<sendmail>."
+
+#. type: textblock
+#: ../scripts/bts.pl:347
+msgid ""
+"The host name may be followed by a colon (\":\") and a port number in order "
+"to use a port other than the default. It may also begin with \"ssmtp://\" "
+"or \"smtps://\" to indicate that SMTPS should be used."
+msgstr ""
+"O nome da máquina pode ser seguido de dois pontos (\":\") e um número de "
+"porto de modo a usar um porto diferente do predefinido. Também pode começar "
+"com \"ssmtp://\" ou \"smtps://\" para indicar que deve ser usado SMTPS."
+
+#. type: textblock
+#: ../scripts/bts.pl:351
+msgid ""
+"If SMTPS not specified, B<bts> will still try to use STARTTLS if it's "
+"advertised by the SMTP host."
+msgstr ""
+"Se não for especificado SMTPS, B<bts> irá ainda tentar usar STARTTLS se tal "
+"for anunciado pela máquina SMTP."
+
+#. type: textblock
+#: ../scripts/bts.pl:354
+msgid ""
+"Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in "
+"order to use direct SMTP connections to send emails."
+msgstr ""
+"Note que uma de B<$DEBEMAIL> ou B<$EMAIL> tem de ser definida no ambiente de "
+"modo a se usar ligações SMTP directas para enviar emails."
+
+#. type: textblock
+#: ../scripts/bts.pl:357
+msgid ""
+"Note that when sending directly via an SMTP host, specifying addresses in "
+"B<--cc-addr> or B<BTS_DEFAULT_CC> that the SMTP host will not relay will "
+"cause the SMTP host to reject the entire mail."
+msgstr ""
+"Note que ao enviar directamente via máquina SMTP, especificar endereços em "
+"B<--cc-addr> ou B<BTS_DEFAULT_CC> que a máquina SMTP não retransmita irá "
+"fazer a máquina SMTP rejeitar o mail inteiro."
+
+#. type: textblock
+#: ../scripts/bts.pl:361
+msgid ""
+"Note also that the use of the B<reassign> command may, when either B<--mutt> "
+"or B<--force-interactive> mode is enabled, lead to the automatic addition of "
+"a Cc to I<$newpackage>@packages.debian.org. In these cases, the note above "
+"regarding relaying applies. The submission interface (port 587) on "
+"reportbug.debian.org does not support relaying and, as such, should not be "
+"used as an SMTP server for B<bts> under the circumstances described in this "
+"paragraph."
+msgstr ""
+"Note também que o uso do comando B<reassign> pode, quando os modos B<--mutt> "
+"ou B<--force-interactive> estão activos, levar à adição automática de um Cc "
+"para I<$newpackage>@packages.debian.org. Nestes casos, a nota em cima sobre "
+"retransmissões aplica-se, A interface de submissão (porto 587) em reportbug."
+"debian.org não suporta retransmitir e, como tal, não deve ser usada como um "
+"servidor SMTP para B<bts> sob as circunstâncias descritas neste parágrafo."
+
+#. type: =item
+#: ../scripts/bts.pl:368
+msgid "B<--smtp-username=>I<USERNAME>, B<--smtp-password=>I<PASSWORD>"
+msgstr "B<--smtp-username=>I<USERNAME>, B<--smtp-password=>I<PASSWORD>"
+
+#. type: textblock
+#: ../scripts/bts.pl:370
+msgid ""
+"Specify the credentials to use when connecting to the SMTP server specified "
+"by B<--smtp-host>. If the server does not require authentication then these "
+"options should not be used."
+msgstr ""
+"Especifica as credenciais a usar quando liga ao servidor SMTP especificado "
+"por B<--smtp-host>. Se o servidor não requerer autenticação então estas "
+"opções não devem ser usadas."
+
+#. type: textblock
+#: ../scripts/bts.pl:374
+msgid ""
+"If a username is specified but not a password, B<bts> will prompt for the "
+"password before sending the mail."
+msgstr ""
+"Se for especificado um nome de utilizador mas não uma palavra passe, B<bts> "
+"irá pedir a palavra passe antes de enviar o mail."
+
+#. type: =item
+#: ../scripts/bts.pl:377
+msgid "B<--smtp-helo=>I<HELO>"
+msgstr "B<--smtp-helo=>I<HELO>"
+
+#. type: textblock
+#: ../scripts/bts.pl:379
+msgid ""
+"Specify the name to use in the I<HELO> command when connecting to the SMTP "
+"server; defaults to the contents of the file F</etc/mailname>, if it exists."
+msgstr ""
+"Especifica o nome a usar no comando I<HELO> quando liga ao servidor SMTP; "
+"por predefinição usa o conteúdo do ficheiro F</etc/mailname>, se existir."
+
+#. type: textblock
+#: ../scripts/bts.pl:383
+msgid ""
+"Note that some SMTP servers may reject the use of a I<HELO> which either "
+"does not resolve or does not appear to belong to the host using it."
+msgstr ""
+"Note que alguns servidores SMTP podem rejeitar o uso de um I<HELO> que ou "
+"não resolve ou parece não pertencer à máquina que o usa."
+
+#. type: =item
+#: ../scripts/bts.pl:386
+msgid "B<--bts-server>"
+msgstr "B<--bts-server>"
+
+#. type: textblock
+#: ../scripts/bts.pl:388
+msgid "Use a debbugs server other than https://bugs.debian.org."
+msgstr "Usa um servidor debbugs diferente de https://bugs.debian.org."
+
+#. type: =item
+#: ../scripts/bts.pl:390
+msgid "B<-f>, B<--force-refresh>"
+msgstr "B<-f>, B<--force-refresh>"
+
+#. type: textblock
+#: ../scripts/bts.pl:392
+msgid ""
+"Download a bug report again, even if it does not appear to have changed "
+"since the last B<cache> command. Useful if a B<--cache-mode=full> is "
+"requested for the first time (otherwise unchanged bug reports will not be "
+"downloaded again, even if the boring bits have not been downloaded)."
+msgstr ""
+"Descarrega um relatório de bug outra vez, mesmo que este não pareça ter sido "
+"alterado desde o último comando B<cache>. Útil se for pedido um B<--cache-"
+"mode=full> pela primeira vez (caso contrário os relatórios de bug não "
+"alterados não serão descarregados de novo, mesmo que os bits aborrecedores "
+"não tenham sido descarregados)."
+
+#. type: =item
+#: ../scripts/bts.pl:398
+msgid "B<--no-force-refresh>"
+msgstr "B<--no-force-refresh>"
+
+#. type: textblock
+#: ../scripts/bts.pl:400
+msgid "Suppress any configuration file B<--force-refresh> option."
+msgstr "Suprime qualquer opção B<--force-refresh> de ficheiro de configuração."
+
+#. type: =item
+#: ../scripts/bts.pl:402
+msgid "B<--only-new>"
+msgstr "B<--only-new>"
+
+#. type: textblock
+#: ../scripts/bts.pl:404
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have."
+msgstr ""
+"Descarrega apenas os novos bugs ao fazer cache. Não verifica se há "
+"actualizações nos bugs que já temos."
+
+#. type: =item
+#: ../scripts/bts.pl:407
+msgid "B<--include-resolved>"
+msgstr "B<--include-resolved>"
+
+#. type: textblock
+#: ../scripts/bts.pl:409
+msgid ""
+"When caching bug reports, include those that are marked as resolved. This "
+"is the default behaviour."
+msgstr ""
+"Ao fazer cache aos relatórios de bug, incluir aqueles que estão marcados "
+"como resolvidos. Este é o comportamento predefinido."
+
+#. type: =item
+#: ../scripts/bts.pl:412
+msgid "B<--no-include-resolved>"
+msgstr "B<--no-include-resolved>"
+
+#. type: textblock
+#: ../scripts/bts.pl:414
+msgid ""
+"Reverse the behaviour of the previous option. That is, do not cache bugs "
+"that are marked as resolved."
+msgstr ""
+"Reverte o comportamento da opção anterior. Isto é, não põe em cache bugs "
+"marcados como resolvidos."
+
+#. type: =item
+#: ../scripts/bts.pl:417
+msgid "B<--no-ack>"
+msgstr "B<--no-ack>"
+
+#. type: textblock
+#: ../scripts/bts.pl:419
+msgid ""
+"Suppress acknowledgment mails from the BTS. Note that this will only affect "
+"the copies of messages CCed to bugs, not those sent to the control bot."
+msgstr ""
+"Suprime os mails de confirmação do BTS. Note que isto irá apenas afectar as "
+"cópias das mensagens copiadas por CC para os bugs, e não aquelas enviadas "
+"para o bot de controlo."
+
+#. type: =item
+#: ../scripts/bts.pl:423
+msgid "B<--ack>"
+msgstr "B<--ack>"
+
+#. type: textblock
+#: ../scripts/bts.pl:425
+msgid "Do not suppress acknowledgement mails. This is the default behaviour."
+msgstr ""
+"Não suprime os mails de reconhecimento. Este é o comportamento predefinido."
+
+#. type: =item
+#: ../scripts/bts.pl:427 ../scripts/tagpending.pl:136
+msgid "B<-i>, B<--interactive>"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:429
+msgid ""
+"Before sending an e-mail to the control bot, display the content and allow "
+"it to be edited, or the sending cancelled."
+msgstr ""
+"Antes de enviar um e-mail para o bot de controle, mostra o conteúdo e "
+"permite que este seja editado, ou o envio cancelado."
+
+#. type: =item
+#: ../scripts/bts.pl:432
+msgid "B<--force-interactive>"
+msgstr "B<--force-interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:434
+msgid ""
+"Similar to B<--interactive>, with the exception that an editor is spawned "
+"before prompting for confirmation of the message to be sent."
+msgstr ""
+"Semelhante a B<--interactive>, com a excepção que um editor é chamado antes "
+"de pedir confirmação para a mensagem ser enviada."
+
+#. type: =item
+#: ../scripts/bts.pl:437
+msgid "B<--no-interactive>"
+msgstr "B<--no-interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:439
+msgid ""
+"Send control e-mails without confirmation. This is the default behaviour."
+msgstr ""
+"Envia e-mails de controle sem confirmação. Este é o comportamento "
+"predefinido."
+
+#. type: =item
+#: ../scripts/bts.pl:441 ../scripts/build-rdeps.pl:105 ../scripts/dget.pl:635
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: textblock
+#: ../scripts/bts.pl:443
+msgid ""
+"When running B<bts cache>, only display information about newly cached "
+"pages, not messages saying already cached. If this option is specified "
+"twice, only output error messages (to stderr)."
+msgstr ""
+"Ao correr B<bts cache>, apenas mostra informação sobre as páginas novas "
+"postas em cache, e não as mensagens que já estavam em cache. Se esta opção "
+"for especificada duas vezes, só gera mensagens de erro (para o stderr)."
+
+#. type: TP
+#: ../scripts/bts.pl:447 ../scripts/cvs-debrelease.1:57
+#: ../scripts/cvs-debuild.1:38 ../scripts/debc.1:95 ../scripts/debchange.1:390
+#: ../scripts/debclean.1:80 ../scripts/debdiff.1:166 ../scripts/debi.1:102
+#: ../scripts/debrelease.1:95 ../scripts/debsign.1:95 ../scripts/debuild.1:258
+#: ../scripts/dpkg-depcheck.1:92 ../scripts/dscverify.1:24
+#: ../scripts/grep-excuses.1:15 ../scripts/mass-bug.pl:121
+#: ../scripts/nmudiff.1:72 ../scripts/rmadison.pl:346 ../scripts/salsa.pl:482
+#: ../scripts/uscan.pl:1558 ../scripts/uupdate.1:56 ../scripts/who-uploads.1:41
+#, no-wrap
+msgid "B<--no-conf>, B<--noconf>"
+msgstr "B<--no-conf>, B<--noconf>"
+
+#. type: Plain text
+#: ../scripts/bts.pl:449 ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:99
+#: ../scripts/debchange.1:394 ../scripts/debclean.1:84 ../scripts/debdiff.1:170
+#: ../scripts/debi.1:106 ../scripts/debrelease.1:99 ../scripts/debsign.1:99
+#: ../scripts/debuild.1:262 ../scripts/dpkg-depcheck.1:96
+#: ../scripts/dscverify.1:28 ../scripts/grep-excuses.1:19
+#: ../scripts/mass-bug.pl:123 ../scripts/nmudiff.1:76 ../scripts/uupdate.1:60
+#: ../scripts/who-uploads.1:45
+msgid ""
+"Do not read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+"Não lê nenhuns ficheiros de configuração. Isto só pode ser usado como "
+"primeira opção dada na linha de comandos."
+
+#. type: =head1
+#: ../scripts/bts.pl:813 ../scripts/chdist.pl:55 ../scripts/salsa.pl:59
+msgid "COMMANDS"
+msgstr "COMANDOS"
+
+#. type: textblock
+#: ../scripts/bts.pl:815
+msgid ""
+"For full details about the commands, see the BTS documentation. L<https://"
+"www.debian.org/Bugs/server-control>"
+msgstr ""
+"Para todos os detalhes sobre os comandos, veja a documentação do BTS. "
+"L<https://www.debian.org/Bugs/server-control>"
+
+#. type: =item
+#: ../scripts/bts.pl:820
+msgid ""
+"B<show> [I<options>] [I<bug number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<show> [I<options>] [I<bug number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:822
+msgid ""
+"B<show> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<show> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:824
+msgid ""
+"B<show> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<show> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:826
+msgid "B<show> [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr "B<show> [B<release-critical> | B<release-critical/>... | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:828
+msgid "This is a synonym for B<bts bugs>."
+msgstr "Isto é um sinónimo para B<bts bugs>."
+
+#. type: =item
+#: ../scripts/bts.pl:836
+msgid ""
+"B<bugs> [I<options>] [I<bug_number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<bugs> [I<options>] [I<bug_number> | I<package> | I<maintainer> | B<:> ] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:838
+msgid ""
+"B<bugs> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<bugs> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:840
+msgid ""
+"B<bugs> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] "
+"[I<opt>B<=>I<val> ...]"
+msgstr ""
+"B<bugs> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:842
+msgid "B<bugs> [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr "B<bugs> [B<release-critical> | B<release-critical/>... | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:844
+msgid ""
+"Display the page listing the requested bugs in a web browser using sensible-"
+"browser(1)."
+msgstr ""
+"Mostra a página listando os bugs requeridos num navegador web usando "
+"sensible-browser(1)."
+
+#. type: textblock
+#: ../scripts/bts.pl:847
+msgid ""
+"Options may be specified after the B<bugs> command in addition to or instead "
+"of options at the start of the command line: recognised options at this "
+"point are: B<-o>/B<--offline>/B<--online>, B<-m>/B<--mbox>, B<--mailreader> "
+"and B<-->[B<no->]B<cache>. These are described earlier in this manpage. If "
+"either the B<-o> or B<--offline> option is used, or there is already an up-"
+"to-date copy in the local cache, the cached version will be used."
+msgstr ""
+"As opções pode ser especificadas após o comando B<bugs> em adição a este ou "
+"em vez disso de opções no inicio da linha de comandos: as opções "
+"reconhecidas neste ponto são: B<-o>/B<--offline>/B<--online>, B<-m>/B<--"
+"mbox>, B<--mailreader> e B<-->[B<no->]B<cache>. Estas estão descritas antes "
+"neste manual. Se uma das opções B<-o> ou B<--offline> for usada, ou já "
+"existir cópia actualizada na cache local, será usada a versão em cache."
+
+#. type: textblock
+#: ../scripts/bts.pl:854
+msgid "The meanings of the possible arguments are as follows:"
+msgstr "Os significados dos possíveis argumentos são os seguintes:"
+
+#. type: =item
+#: ../scripts/bts.pl:858
+msgid "(none)"
+msgstr "(none)"
+
+#. type: textblock
+#: ../scripts/bts.pl:860
+msgid ""
+"If nothing is specified, B<bts bugs> will display your bugs, assuming that "
+"either B<DEBEMAIL> or B<EMAIL> (examined in that order) is set to the "
+"appropriate email address."
+msgstr ""
+"Se nada for especificado, B<bts bugs> irá mostrar os seus bugs, assumindo "
+"que um de B<DEBEMAIL> ou B<EMAIL> (examinado por esta ordem) está definido "
+"para o endereço de email apropriado."
+
+#. type: =item
+#: ../scripts/bts.pl:864
+msgid "I<bug_number>"
+msgstr "I<bug_number>"
+
+#. type: textblock
+#: ../scripts/bts.pl:866
+msgid "Display bug number I<bug_number>."
+msgstr "Mostra o número do bug I<bug_number>."
+
+#. type: =item
+#: ../scripts/bts.pl:868
+msgid "I<package>"
+msgstr "I<package>"
+
+#. type: textblock
+#: ../scripts/bts.pl:870
+msgid "Display the bugs for the package I<package>."
+msgstr "Mostra os bugs para o pacote I<package>."
+
+#. type: =item
+#: ../scripts/bts.pl:872
+msgid "B<src:>I<package>"
+msgstr "B<src:>I<package>"
+
+#. type: textblock
+#: ../scripts/bts.pl:874
+msgid "Display the bugs for the source package I<package>."
+msgstr "Mostra os bugs para o pacote fonte I<package>."
+
+#. type: =item
+#: ../scripts/bts.pl:876
+msgid "I<maintainer>"
+msgstr "I<maintainer>"
+
+#. type: textblock
+#: ../scripts/bts.pl:878
+msgid "Display the bugs for the maintainer email address I<maintainer>."
+msgstr ""
+"Mostra os bugs para para o endereço de email do maintainer I<maintainer> que "
+"é quem faz a manutenção do pacote."
+
+#. type: =item
+#: ../scripts/bts.pl:880
+msgid "B<from:>I<submitter>"
+msgstr "B<from:>I<submitter>"
+
+#. type: textblock
+#: ../scripts/bts.pl:882
+msgid "Display the bugs for the submitter email address I<submitter>."
+msgstr "Mostra os bugs para o endereço de email de quem submeteu I<submitter>."
+
+#. type: =item
+#: ../scripts/bts.pl:884
+msgid "B<tag:>I<tag>"
+msgstr "B<tag:>I<tag>"
+
+#. type: textblock
+#: ../scripts/bts.pl:886
+msgid "Display the bugs which are tagged with I<tag>."
+msgstr "Mostra os bugs que estão etiquetados com I<tag>."
+
+#. type: =item
+#: ../scripts/bts.pl:888
+msgid "B<usertag:>I<tag>"
+msgstr "B<usertag:>I<tag>"
+
+#. type: textblock
+#: ../scripts/bts.pl:890
+msgid ""
+"Display the bugs which are tagged with usertag I<tag>. See the BTS "
+"documentation for more information on usertags. This will require the use "
+"of a B<users=>I<email> option."
+msgstr ""
+"Mostra os bugs que estão etiquetados com a usertag I<tag>. Veja a "
+"documentação do BTS para mais informação sobre usertags. Isto irá requerer "
+"o uso da opção B<users=>I<email>."
+
+#. type: =item
+#: ../scripts/bts.pl:894
+msgid "B<:>"
+msgstr "B<:>"
+
+#. type: textblock
+#: ../scripts/bts.pl:896
+msgid ""
+"Details of the bug tracking system itself, along with a bug-request page "
+"with more options than this script, can be found on https://bugs.debian."
+"org/. This page itself will be opened if the command 'bts bugs :' is used."
+msgstr ""
+"Detalhes do próprio sistema de acompanhamento de bugs, juntamente com uma "
+"página de pedido-de-bug com mais opções que este script, que pode ser "
+"encontrado em https://bugs.debian.org/. Esta própria página será aberta se "
+"o comando 'bts bugs :' for usado."
+
+#. type: =item
+#: ../scripts/bts.pl:901
+msgid "B<release-critical>, B<RC>"
+msgstr "B<release-critical>, B<RC>"
+
+#. type: textblock
+#: ../scripts/bts.pl:903
+msgid ""
+"Display the front page of the release-critical pages on the BTS. This is a "
+"synonym for https://bugs.debian.org/release-critical/index.html. It is also "
+"possible to say release-critical/debian/main.html and the like. RC is a "
+"synonym for release-critical/other/all.html."
+msgstr ""
+"Mostra a página frontal das páginas crítico-de-lançamento no BTS. Isto é um "
+"sinónimo de https://bugs.debian.org/release-critical/index.html. É também "
+"possível dizer release-critical/debian/main.html e semelhante. RC é um "
+"sinónimo de release-critical/other/all.html."
+
+#. type: textblock
+#: ../scripts/bts.pl:910
+msgid ""
+"After the argument specifying what to display, you can optionally specify "
+"options to use to format the page or change what it displayed. These are "
+"passed to the BTS in the URL downloaded. For example, pass dist=stable to "
+"see bugs affecting the stable version of a package, version=1.0 to see bugs "
+"affecting that version of a package, or reverse=yes to display newest "
+"messages first in a bug log."
+msgstr ""
+"Após o argumento que especifica o que mostrar, você pode opcionalmente "
+"especificar opções a usar para formatar a página ou mudar o que é mostrado. "
+"Estas são passadas ao BTS no URL descarregado. Por exemplo, passe "
+"dist=stable para ver bugs que afectam a versão estável de um pacote, "
+"version=1.0 para ver bugs que afectam essa versão de um pacote, ou "
+"reverse=yes para mostrar as mensagens mais recentes em primeiro lugar num "
+"relatório de bug."
+
+#. type: textblock
+#: ../scripts/bts.pl:917
+msgid ""
+"If caching has been enabled (that is, B<--no-cache> has not been used, and "
+"B<BTS_CACHE> has not been set to B<no>), then any page requested by B<bts "
+"show> will automatically be cached, and be available offline thereafter. "
+"Pages which are automatically cached in this way will be deleted on "
+"subsequent \"B<bts show>|B<bugs>|B<cache>\" invocations if they have not "
+"been accessed in 30 days. Warning: on a filesystem mounted with the "
+"\"noatime\" option, running \"B<bts show>|B<bugs>\" does not update the "
+"cache files' access times; a cached bug will then be subject to auto-"
+"cleaning 30 days after its initial download, even if it has been accessed in "
+"the meantime."
+msgstr ""
+"Se a cache estiver activa (isto é, se B<--no-cache> não for usado, e "
+"B<BTS_CACHE> não estiver definido para B<no>), então qualquer página "
+"requisitada pelo B<bts show> será colocada em cache automaticamente, e "
+"ficará disponível offline dai em diante. As páginas que são automaticamente "
+"colocadas em cache deste modo serão apagadas em invocações \"B<bts show>|"
+"B<bugs>|B<cache>\" subsequentes se não foram acedidas em 30 dias. Aviso: Num "
+"sistema de ficheiros montado com a opção \"noatime\", correr \"B<bts show>|"
+"B<bugs>\" não faz actualizar os os tempos de acesso dos ficheiros de cache; "
+"um bug em cache irá então ser sujeito a auto-limpeza 30 dias após a sua "
+"descarga inicial, mesmo que tenha sido acedido entretanto."
+
+#. type: textblock
+#: ../scripts/bts.pl:928
+msgid ""
+"Any other B<bts> commands following this on the command line will be "
+"executed after the browser has been exited."
+msgstr ""
+"Quaisquer outros comandos B<bts> seguintes a isto na linha de comandos serão "
+"executados após o navegador ter terminado."
+
+#. type: textblock
+#: ../scripts/bts.pl:931
+msgid ""
+"The desired browser can be specified and configured by setting the "
+"B<BROWSER> environment variable. The conventions follow those defined by "
+"Eric Raymond at http://www.catb.org/~esr/BROWSER/; we here reproduce the "
+"relevant part."
+msgstr ""
+"O navegador desejado pode ser especificado e configurado ao definir a "
+"variável de ambiente B<BROWSER>. As convenções seguem aquelas definidas por "
+"Eric Raymond em http://www.catb.org/~esr/BROWSER/; aqui reproduzimos a parte "
+"relevante."
+
+#. type: textblock
+#: ../scripts/bts.pl:936
+msgid ""
+"The value of B<BROWSER> may consist of a colon-separated series of browser "
+"command parts. These should be tried in order until one succeeds. Each "
+"command part may optionally contain the string B<%s>; if it does, the URL to "
+"be viewed is substituted there. If a command part does not contain B<%s>, "
+"the browser is to be launched as if the URL had been supplied as its first "
+"argument. The string B<%%> must be substituted as a single %."
+msgstr ""
+"O valor de B<BROWSER> pode consistir duma série separada-por-dois-pontos de "
+"partes de comando do navegador. Estes devem ser tentados por ordem até que "
+"um tenha sucesso. Cada parte de comando pode opcionalmente conter a string "
+"B<%s>; se a tiver, o URL a ser visualizado é substituído aqui. Se uma parte "
+"de comando não conter B<%s>, o navegador deve ser lançado como se o URL "
+"fosse fornecido como seu primeiro argumento. A string B<%%> tem de ser "
+"substituída por um único %."
+
+#. type: textblock
+#: ../scripts/bts.pl:944
+msgid ""
+"Rationale: We need to be able to specify multiple browser commands so "
+"programs obeying this convention can do the right thing in either X or "
+"console environments, trying X first. Specifying multiple commands may also "
+"be useful for people who share files like F<.profile> across multiple "
+"systems. We need B<%s> because some popular browsers have remote-invocation "
+"syntax that requires it. Unless B<%%> reduces to %, it won't be possible to "
+"have a literal B<%s> in the string."
+msgstr ""
+"Razão: Precisamos de poder especificar múltiplos comandos de navegador para "
+"que os programas que obedeçam a esta convenção possam fazer o correcto tanto "
+"em ambiente X ou de consola, tentando primeiro o X. Especificar múltiplos "
+"comandos pode também ser útil para pessoas que partilham ficheiros como F<."
+"profile> entre múltiplos sistemas. Precisamos de B<%s> porque alguns "
+"navegadores populares têm sintaxe de invocação-remota que o requer. A menos "
+"que B<%%> seja reduzido para %, não nos será possível ter um B<%s> literal "
+"na string."
+
+#. type: textblock
+#: ../scripts/bts.pl:952
+msgid "For example, on most Linux systems a good thing to do would be:"
+msgstr ""
+"Por exemplo, na maioria dos sistemas Linux uma coisa boa a fazer seria:"
+
+#. type: textblock
+#: ../scripts/bts.pl:954
+msgid "BROWSER='mozilla -raise -remote \"openURL(%s,new-window)\":links'"
+msgstr "BROWSER='mozilla -raise -remote \"openURL(%s,new-window)\":links'"
+
+#. type: =item
+#: ../scripts/bts.pl:1031
+msgid "B<select> [I<key>B<:>I<value> ...]"
+msgstr "B<select> [I<key>B<:>I<value> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1033
+msgid ""
+"Uses the SOAP interface to output a list of bugs which match the given "
+"selection requirements."
+msgstr ""
+"Usa a interface SOAP para escrever uma lista de bugs que correspondem aos "
+"requerimentos de selecção fornecidos."
+
+#. type: textblock
+#: ../scripts/bts.pl:1036
+msgid "The following keys are allowed, and may be given multiple times."
+msgstr "São aceites as seguinte chaves, e podem ser dadas várias vezes."
+
+#. type: =item
+#: ../scripts/bts.pl:1040 ../scripts/bts.pl:1915
+#: ../scripts/who-permits-upload.pl:92
+msgid "B<package>"
+msgstr "B<package>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1042 ../scripts/bts.pl:1917
+msgid "Binary package name."
+msgstr "Nome do pacote binário."
+
+#. type: =item
+#: ../scripts/bts.pl:1044 ../scripts/bts.pl:1919
+msgid "B<source>"
+msgstr "B<source>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1046 ../scripts/bts.pl:1921
+msgid "Source package name."
+msgstr "Nome do pacote fonte."
+
+#. type: =item
+#: ../scripts/bts.pl:1048
+msgid "B<maintainer>"
+msgstr "B<maintainer>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1050
+msgid "E-mail address of the maintainer."
+msgstr "Endereço de e-mail do maintainer."
+
+#. type: =item
+#: ../scripts/bts.pl:1052 ../scripts/bts.pl:1899
+msgid "B<submitter>"
+msgstr "B<submitter>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1054 ../scripts/bts.pl:1901
+msgid "E-mail address of the submitter."
+msgstr "Endereço de e-mail de quem submeteu."
+
+#. type: =item
+#: ../scripts/bts.pl:1056 ../scripts/bts.pl:1927
+msgid "B<severity>"
+msgstr "B<severity>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1058 ../scripts/bts.pl:1929
+msgid "Bug severity."
+msgstr "Severidade do bug."
+
+#. type: =item
+#: ../scripts/bts.pl:1060
+msgid "B<status>"
+msgstr "B<status>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1062
+msgid "Status of the bug. One of B<open>, B<done>, or B<forwarded>."
+msgstr "Estado do bug. Um de B<open>, B<done>, ou B<forwarded>."
+
+#. type: =item
+#: ../scripts/bts.pl:1064 ../scripts/bts.pl:1923
+msgid "B<tag>"
+msgstr "B<tag>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1066
+msgid ""
+"Tags applied to the bug. If B<users> is specified, may include usertags in "
+"addition to the standard tags."
+msgstr ""
+"Etiquetas aplicadas ao bug. Se for especificado B<users>, pode incluir "
+"etiquetas de utilizador adicionalmente às etiquetas standard."
+
+#. type: =item
+#: ../scripts/bts.pl:1069 ../scripts/bts.pl:1931
+msgid "B<owner>"
+msgstr "B<owner>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1071 ../scripts/bts.pl:1933
+msgid "Bug's owner."
+msgstr "Dono do bug."
+
+#. type: =item
+#: ../scripts/bts.pl:1073
+msgid "B<correspondent>"
+msgstr "B<correspondent>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1075
+msgid "Address of someone who sent mail to the log."
+msgstr "Endereço de alguém que enviou mail para o relatório."
+
+#. type: =item
+#: ../scripts/bts.pl:1077 ../scripts/bts.pl:1935
+msgid "B<affects>"
+msgstr "B<affects>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1079
+msgid "Bugs which affect this package."
+msgstr "Bugs que afectam este pacote."
+
+#. type: =item
+#: ../scripts/bts.pl:1081
+msgid "B<bugs>"
+msgstr "B<bugs>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1083
+msgid "List of bugs to search within."
+msgstr "Lista de bugs para procurar dentro."
+
+#. type: =item
+#: ../scripts/bts.pl:1085
+msgid "B<users>"
+msgstr "B<users>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1087
+msgid "Users to use when looking up usertags."
+msgstr "Utilizadores a usar quando procura por usertags."
+
+#. type: =item
+#: ../scripts/bts.pl:1089 ../scripts/bts.pl:1939
+msgid "B<archive>"
+msgstr "B<archive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1091 ../scripts/bts.pl:1941
+msgid ""
+"Whether to search archived bugs or normal bugs; defaults to B<0> (i.e. only "
+"search normal bugs). As a special case, if archive is B<both>, both archived "
+"and unarchived bugs are returned."
+msgstr ""
+"Se se deve procurar bugs arquivados ou bugs normais: predefinido para B<0> "
+"(isto é, apenas procura bugs normais). Como um caso especial, se o arquivo "
+"for B<both>, são retornados tanto bugs arquivados como não arquivados."
+
+#. type: textblock
+#: ../scripts/bts.pl:1097
+msgid ""
+"For example, to select the set of bugs submitted by jrandomdeveloper@example."
+"com and tagged B<wontfix>, one would use"
+msgstr ""
+"Por exemplo, para selecionar um conjunto de bugs submetidos por "
+"jrandomdeveloper@example.com e apontar a B<wontfix>, deverá ser usado"
+
+#. type: textblock
+#: ../scripts/bts.pl:1100
+msgid "bts select submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr "bts select submitter:jrandomdeveloper@example.com tag:wontfix"
+
+#. type: textblock
+#: ../scripts/bts.pl:1102 ../scripts/bts.pl:1953
+msgid ""
+"If a key is used multiple times then the set of bugs selected includes those "
+"matching any of the supplied values; for example"
+msgstr ""
+"Se uma chave for usada várias vezes então o conjunto de bugs selecionados "
+"inclui aqueles que correspondem a quaisquer dos valores fornecidos; por "
+"exemplo"
+
+#. type: textblock
+#: ../scripts/bts.pl:1105
+msgid "bts select package:foo severity:wishlist severity:minor"
+msgstr "bts select package:foo severity:wishlist severity:minor"
+
+#. type: textblock
+#: ../scripts/bts.pl:1107
+msgid "returns all bugs of package foo with either wishlist or minor severity."
+msgstr ""
+"retorna todos os bugs do pacote foo seja com severidade wishlist ou minor."
+
+#. type: =item
+#: ../scripts/bts.pl:1120
+msgid ""
+"B<status> [I<bug> | B<file:>I<file> | B<fields:>I<field>[B<,>I<field> ...] | "
+"B<verbose>] ..."
+msgstr ""
+"B<status> [I<bug> | B<file:>I<file> | B<fields:>I<field>[B<,>I<field> ...] | "
+"B<verbose>] ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:1122
+msgid ""
+"Uses the SOAP interface to output status information for the given bugs (or "
+"as read from the listed files -- use B<-> to indicate STDIN)."
+msgstr ""
+"Usa a interface SOAP para escrever informação de estado para os bugs dados "
+"(ou como lida a partir dos ficheiros listados -- use B<-> para indicar "
+"STDIN)."
+
+#. type: textblock
+#: ../scripts/bts.pl:1125
+msgid "By default, all populated fields for a bug are displayed."
+msgstr ""
+"Por predefinição, são mostrados todos os campos preenchidos para um bug."
+
+#. type: textblock
+#: ../scripts/bts.pl:1127
+msgid "If B<verbose> is given, empty fields will also be displayed."
+msgstr "Se for dado <verbose>, são também mostrados os campos vazios."
+
+#. type: textblock
+#: ../scripts/bts.pl:1129
+msgid ""
+"If B<fields> is given, only those fields will be displayed. No validity "
+"checking is performed on any specified fields."
+msgstr ""
+"Se for dado B<fields>, apenas esses campos serão mostrados. Nenhuma "
+"verificação de validade é executada em nenhum dos campos especificados."
+
+#. type: =item
+#: ../scripts/bts.pl:1201
+msgid "B<clone> I<bug> I<new_ID> [I<new_ID> ...]"
+msgstr "B<clone> I<bug> I<new_ID> [I<new_ID> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1203
+msgid ""
+"The B<clone> control command allows you to duplicate a I<bug> report. It is "
+"useful in the case where a single report actually indicates that multiple "
+"distinct bugs have occurred. \"New IDs\" are negative numbers, separated by "
+"spaces, which may be used in subsequent control commands to refer to the "
+"newly duplicated bugs. A new report is generated for each new ID."
+msgstr ""
+"O comando de controle B<clone> permite-lhe duplicar um relatório de I<bug>. "
+"É útil no caso de um único relatório na realidade indicar que ocorreram "
+"vários bugs distintos. Os \"New IDs\" são números negativos, separados por "
+"espaços, que podem ser usados em comandos de controle subsequentes para "
+"referirem aos novos bugs duplicados. É gerado um novo relatório para cada "
+"novo ID."
+
+#. type: =item
+#: ../scripts/bts.pl:1253
+msgid "B<done> I<bug> [I<version>]"
+msgstr "B<done> I<bug> [I<version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1255
+msgid ""
+"Mark a I<bug> as Done. This forces interactive mode since done messages "
+"should include an explanation why the bug is being closed. You should "
+"specify which I<version> of the package closed the bug, if possible."
+msgstr ""
+"Marca um I<bug> como Done (concluído). Isto força modo interactivo pois as "
+"mensagens de conclusão devem incluir uma explicação de porque o bug está a "
+"ser fechado. Você deve especificar qual I<versão> do pacote fechou o bug, se "
+"possível."
+
+#. type: =item
+#: ../scripts/bts.pl:1273
+msgid "B<reopen> I<bug> [I<submitter>]"
+msgstr "B<reopen> I<bug> [I<submitter>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1275
+msgid "Reopen a I<bug>, with optional I<submitter>."
+msgstr "Reabre um I<bug>, com I<submitter> opcional."
+
+#. type: =item
+#: ../scripts/bts.pl:1286
+msgid "B<archive> I<bug>"
+msgstr "B<archive> I<bug>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1288
+msgid ""
+"Archive a I<bug> that has previously been archived but is currently not. "
+"The I<bug> must fulfill all of the requirements for archiving with the "
+"exception of those that are time-based."
+msgstr ""
+"Arquiva um I<bug> que foi anteriormente arquivado mas actualmente não está. "
+"O I<bug> deve cumprir com todos os requerimentos para arquivamento com a "
+"excepção daqueles que são baseados em tempo."
+
+#. type: =item
+#: ../scripts/bts.pl:1300
+msgid "B<unarchive> I<bug>"
+msgstr "B<unarchive> I<bug>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1302
+msgid "Unarchive a I<bug> that is currently archived."
+msgstr "Desarquiva um I<bug> que está presentemente arquivado."
+
+#. type: =item
+#: ../scripts/bts.pl:1312
+msgid "B<retitle> I<bug> I<title>"
+msgstr "B<retitle> I<bug> I<title>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1314
+msgid "Change the I<title> of the I<bug>."
+msgstr "Muda o I<title> (título) do I<bug>."
+
+#. type: =item
+#: ../scripts/bts.pl:1327
+msgid "B<summary> I<bug> [I<messagenum>]"
+msgstr "B<summary> I<bug> [I<messagenum>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1329
+msgid "Select a message number that should be used as the summary of a I<bug>."
+msgstr ""
+"Seleciona um número de mensagem que deve ser usada como o sumário de um "
+"I<bug>."
+
+#. type: textblock
+#: ../scripts/bts.pl:1332
+msgid "If no message number is given, the summary is cleared."
+msgstr "Se nenhum número de mensagem for dado, o sumário é limpo."
+
+#. type: =item
+#: ../scripts/bts.pl:1343
+msgid "B<submitter> I<bug> [I<bug> ...] I<submitter-email>"
+msgstr "B<submitter> I<bug> [I<bug> ...] I<submitter-email>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1345
+msgid ""
+"Change the submitter address of a I<bug> or a number of bugs, with B<!> "
+"meaning `use the address on the current email as the new submitter address'."
+msgstr ""
+"Muda o endereço de quem submeteu um I<bug> ou o número de bugs, com B<!> a "
+"significar `usar o endereço em email actual como o novo endereço a usar'."
+
+#. type: =item
+#: ../scripts/bts.pl:1363
+msgid "B<reassign> I<bug> [I<bug> ...] I<package> [I<version>]"
+msgstr "B<reassign> I<bug> [I<bug> ...] I<package> [I<version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1365
+msgid ""
+"Reassign a I<bug> or a number of bugs to a different I<package>. The "
+"I<version> field is optional; see the explanation at L<https://www.debian."
+"org/Bugs/server-control>."
+msgstr ""
+"Re-atribui um I<bug> ou um número de bugs a um I<package> diferente. O campo "
+"I<version> é opcional; veja a explicação em L<https://www.debian.org/Bugs/"
+"server-control>."
+
+#. type: =item
+#: ../scripts/bts.pl:1397
+msgid "B<found> I<bug> [I<version>]"
+msgstr "B<found> I<bug> [I<version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1399
+msgid ""
+"Indicate that a I<bug> was found to exist in a particular package version. "
+"Without I<version>, the list of fixed versions is cleared and the bug is "
+"reopened."
+msgstr ""
+"Indica que um I<bug> foi descoberto a existir numa versão particular do "
+"pacote. Sem I<version>, a lista de versões corrigidas é limpa e o bug é "
+"reaberto.."
+
+#. type: =item
+#: ../scripts/bts.pl:1417
+msgid "B<notfound> I<bug> I<version>"
+msgstr "B<notfound> I<bug> I<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1419
+msgid ""
+"Remove the record that I<bug> was encountered in the given version of the "
+"package to which it is assigned."
+msgstr ""
+"Remove o registo que o I<bug> foi encontrado numa dada versão do pacote ao "
+"qual foi atribuído."
+
+#. type: =item
+#: ../scripts/bts.pl:1432
+msgid "B<fixed> I<bug> I<version>"
+msgstr "B<fixed> I<bug> I<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1434
+msgid ""
+"Indicate that a I<bug> was fixed in a particular package version, without "
+"affecting the I<bug>'s open/closed status."
+msgstr ""
+"Indica que um I<bug> foi corrigido numa versão particular do pacote, sem "
+"afectar o estado do aberto/fechado do I<bug>."
+
+#. type: =item
+#: ../scripts/bts.pl:1446
+msgid "B<notfixed> I<bug> I<version>"
+msgstr "B<notfixed> I<bug> I<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1448
+msgid ""
+"Remove the record that a I<bug> was fixed in the given version of the "
+"package to which it is assigned."
+msgstr ""
+"Remove o registo que um I<bug> foi corrigido numa dada versão do pacote ao "
+"qual foi atribuído."
+
+#. type: textblock
+#: ../scripts/bts.pl:1451
+msgid ""
+"This is equivalent to the sequence of commands \"B<found> I<bug> "
+"I<version>\", \"B<notfound> I<bug> I<version>\"."
+msgstr ""
+"Isto é equivalente à sequência de comandos \"B<found> I<bug> I<version>\", "
+"\"B<notfound> I<bug> I<version>\"."
+
+#. type: =item
+#: ../scripts/bts.pl:1464
+msgid "B<block> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+msgstr "B<block> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1466
+msgid "Note that a I<bug> is blocked from being fixed by a set of other bugs."
+msgstr ""
+"Nota que um I<bug> fica bloqueado de ser corrigido por um conjunto de outros "
+"bugs."
+
+#. type: =item
+#: ../scripts/bts.pl:1486
+msgid "B<unblock> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+msgstr "B<unblock> I<bug> B<by>|B<with> I<bug> [I<bug> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1488
+msgid ""
+"Note that a I<bug> is no longer blocked from being fixed by a set of other "
+"bugs."
+msgstr ""
+"Nota que um I<bug> não está mais bloqueado de ser corrigido por um conjunto "
+"de outros bugs."
+
+#. type: =item
+#: ../scripts/bts.pl:1508
+msgid "B<merge> I<bug> I<bug> [I<bug> ...]"
+msgstr "B<merge> I<bug> I<bug> [I<bug> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1510
+msgid "Merge a set of bugs together."
+msgstr "Funde um conjunto de bugs juntamente."
+
+#. type: =item
+#: ../scripts/bts.pl:1527
+msgid "B<forcemerge> I<bug> I<bug> [I<bug> ...]"
+msgstr "B<forcemerge> I<bug> I<bug> [I<bug> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1529
+msgid ""
+"Forcibly merge a set of bugs together. The first I<bug> listed is the master "
+"bug, and its settings (those which must be equal in a normal B<merge>) are "
+"assigned to the bugs listed next."
+msgstr ""
+"Funde à força um conjunto de bugs juntamente. O primeiro I<bug> listado é o "
+"bug mestre, e as suas definições (aquelas que devem ser iguais numa B<merge> "
+"normal) são atribuídas aos bugs listados a seguir."
+
+#. type: =item
+#: ../scripts/bts.pl:1548
+msgid "B<unmerge> I<bug>"
+msgstr "B<unmerge> I<bug>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1550
+msgid "Unmerge a I<bug>."
+msgstr "Desfaz a fusão de um I<bug>."
+
+#. type: =item
+#: ../scripts/bts.pl:1560
+msgid "B<tag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<tag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:1562
+msgid "B<tags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<tags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1564
+msgid ""
+"Set or unset a I<tag> on a I<bug>. The tag may either be the exact tag name "
+"or it may be abbreviated to any unique tag substring. (So using B<fixed> "
+"will set the tag B<fixed>, not B<fixed-upstream>, for example, but B<fix> "
+"would not be acceptable.) Multiple tags may be specified as well. The two "
+"commands (tag and tags) are identical. At least one tag must be specified, "
+"unless the B<=> flag is used, where the command"
+msgstr ""
+"Define ou remove definição a um I<tag> num I<bug>. A etiqueta pode ou ser o "
+"nome exacto da etiqueta ou pode ser abreviada para qualquer sub-string única "
+"da etiqueta. (Assim usar B<fixed> irá definir a etiqueta B<fixed>, e não "
+"B<fixed-upstream>, por exemplo, mas B<fix> não será aceite.) Podem também "
+"ser especificadas múltiplas etiquetas. Os dois comandos (tag e tags) são "
+"idênticos. Pelo menos uma etiqueta tem de ser especificada, a menos que a "
+"bandeira B<=> seja usada, onde o comando"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1571
+#, no-wrap
+msgid ""
+" bts tags <bug> =\n"
+"\n"
+msgstr ""
+" bts tags <bug> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1573
+msgid "will remove all tags from the specified I<bug>."
+msgstr "irá remover todas as etiquetas do I<bug> especificado."
+
+#. type: textblock
+#: ../scripts/bts.pl:1575
+msgid ""
+"Adding/removing the B<security> tag will add \"team\\@security.debian.org\" "
+"to the Cc list of the control email."
+msgstr ""
+"Adicionar/remover a etiqueta B<security> irá adicionar \"team\\@security."
+"debian.org\" à lista Cc do email de controle."
+
+#. type: textblock
+#: ../scripts/bts.pl:1578
+msgid ""
+"The list of valid tags and their significance is available at L<https://www."
+"debian.org/Bugs/Developer#tags>. The current valid tags are:"
+msgstr ""
+"A lista de etiquetas válidas e seus significados está disponível em "
+"L<https://www.debian.org/Bugs/Developer#tags>. As etiquetas actualmente "
+"válidas são:"
+
+#. type: textblock
+#: ../scripts/bts.pl:1582
+msgid ""
+"patch, wontfix, moreinfo, unreproducible, fixed, help, security, upstream, "
+"pending, d-i, confirmed, ipv6, lfs, fixed-upstream, l10n, newcomer, a11y, "
+"ftbfs"
+msgstr ""
+"patch, wontfix, moreinfo, unreproducible, fixed, help, security, upstream, "
+"pending, d-i, confirmed, ipv6, lfs, fixed-upstream, l10n, newcomer, a11y, "
+"ftbfs"
+
+#. type: textblock
+#: ../scripts/bts.pl:1586
+msgid ""
+"There is also a tag for each release of Debian since \"potato\". Note that "
+"this list may be out of date, see the website for the most up to date source."
+msgstr ""
+"Existe também uma etiqueta para cada lançamento de Debian desde \"potato\". "
+"Note que esta lista pode estar desatualizada, veja o sitio web para uma "
+"fonte mais atualizada."
+
+#. type: =item
+#: ../scripts/bts.pl:1671
+msgid "B<affects> I<bug> [B<+>|B<->|B<=>] I<package> [I<package> ...]"
+msgstr "B<affects> I<bug> [B<+>|B<->|B<=>] I<package> [I<package> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1673
+msgid ""
+"Indicates that a I<bug> affects a I<package> other than that against which "
+"it is filed, causing the I<bug> to be listed by default in the I<package> "
+"list of the other I<package>. This should generally be used where the "
+"I<bug> is severe enough to cause multiple reports from users to be assigned "
+"to the wrong package. At least one I<package> must be specified, unless the "
+"B<=> flag is used, where the command"
+msgstr ""
+"Indica que um I<bug> afecta outro I<package> para além daquele contra qual "
+"foi preenchido, fazendo com que o I<bug> seja listado por predefinição na "
+"lista I<package> do outro I<package>. Isto deve geralmente ser usado onde o "
+"I<bug> é suficientemente severo para causar vários relatórios de "
+"utilizadores a serem atribuídos ao pacote errado. Pelo menos um I<package> "
+"tem de ser especificado, a menos que seja usada a bandeira B<=>, onde o "
+"comando"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1679
+#, no-wrap
+msgid ""
+" bts affects <bug> =\n"
+"\n"
+msgstr ""
+" bts affects <bug> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1681
+msgid "will remove all indications that I<bug> affects other packages."
+msgstr "irá remover todas as indicações em que o I<bug> afecta outros pacotes."
+
+#. type: =item
+#: ../scripts/bts.pl:1715
+msgid "B<user> I<email>"
+msgstr "B<user> I<email>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1717
+msgid "Specify a user I<email> address before using the B<usertags> command."
+msgstr ""
+"Especifica um endereço I<email> de utilizador antes de usar o comando "
+"B<usertags>."
+
+#. type: =item
+#: ../scripts/bts.pl:1734
+msgid "B<usertag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<usertag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:1736
+msgid "B<usertags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+msgstr "B<usertags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1738
+msgid ""
+"Set or unset a user tag on a I<bug>. The I<tag> must be the exact tag name "
+"wanted; there are no defaults or checking of tag names. Multiple tags may "
+"be specified as well. The two commands (B<usertag> and B<usertags>) are "
+"identical. At least one I<tag> must be specified, unless the B<=> flag is "
+"used, where the command"
+msgstr ""
+"Define ou remove definição a um I<bug>. A I<tag> tem de ser o nome de "
+"etiqueta exacto desejado; onde não há predefinições nem verificações de nome "
+"de etiqueta. Também pode ser especificadas várias etiquetas. Os dois "
+"comandos (B<usertag> e B<usertags>) são idênticos. Pelo menos uma I<tag> tem "
+"de ser especificada, a menos que a bandeira B<=> seja usada, onde o comando"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1744
+#, no-wrap
+msgid ""
+" bts usertags <bug> =\n"
+"\n"
+msgstr ""
+" bts usertags <bug> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1746
+msgid "will remove all user tags from the specified I<bug>."
+msgstr "irá remover todas as etiquetas de utilizador do I<bug> especificado."
+
+#. type: =item
+#: ../scripts/bts.pl:1776
+msgid "B<claim> I<bug> [I<claim>]"
+msgstr "B<claim> I<bug> [I<claim>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1778
+msgid ""
+"Record that you have claimed a I<bug> (e.g. for a bug squashing party). "
+"I<claim> should be a unique token allowing the bugs you have claimed to be "
+"identified; an e-mail address is often used."
+msgstr ""
+"Regista que você reivindicou um I<bug> (ex. para uma festa de esmagar bugs). "
+"I<claim> deve ser um testemunho único que permita que os bugs que você "
+"reivindicou sejam identificados; é muitas vezes usado um endereço de e-mail."
+
+#. type: textblock
+#: ../scripts/bts.pl:1782 ../scripts/bts.pl:1802
+msgid ""
+"If no I<claim> is specified, the environment variable B<DEBEMAIL> or "
+"B<EMAIL> (checked in that order) is used."
+msgstr ""
+"Se não for especificado I<claim>, é usada a variável de ambiente B<DEBEMAIL> "
+"ou B<EMAIL>."
+
+#. type: =item
+#: ../scripts/bts.pl:1798
+msgid "B<unclaim> I<bug> [I<claim>]"
+msgstr "B<unclaim> I<bug> [I<claim>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1800
+msgid "Remove the record that you have claimed a bug."
+msgstr "Remove o registo que você reivindicou um bug. "
+
+#. type: =item
+#: ../scripts/bts.pl:1818
+msgid "B<severity> I<bug> I<severity>"
+msgstr "B<severity> I<bug> I<severity>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1820
+msgid ""
+"Change the I<severity> of a I<bug>. Available severities are: B<wishlist>, "
+"B<minor>, B<normal>, B<important>, B<serious>, B<grave>, B<critical>. The "
+"severity may be abbreviated to any unique substring."
+msgstr ""
+"Muda a I<severity> de um I<bug>. As severidades disponíveis são: "
+"B<wishlist>, B<minor>, B<normal>, B<important>, B<serious>, B<grave>, "
+"B<critical>. A severidade pode ser abreviada para qualquer substring única."
+
+#. type: =item
+#: ../scripts/bts.pl:1840
+msgid "B<forwarded> I<bug> I<address>"
+msgstr "B<forwarded> I<bug> I<address>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1842
+msgid ""
+"Mark the I<bug> as forwarded to the given I<address> (usually an email "
+"address or a URL for an upstream bug tracker)."
+msgstr ""
+"Marca o I<bug> como reencaminhado para o I<address> dado (geralmente um "
+"endereço de email ou um URL para um seguidor de bugs do autor)."
+
+#. type: =item
+#: ../scripts/bts.pl:1862
+msgid "B<notforwarded> I<bug>"
+msgstr "B<notforwarded> I<bug>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1864
+msgid "Mark a I<bug> as not forwarded."
+msgstr "Marca um I<bug> como não reencaminhado."
+
+#. type: =item
+#: ../scripts/bts.pl:1874
+msgid "B<package> [I<package> ...]"
+msgstr "B<package> [I<package> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1876
+msgid ""
+"The following commands will only apply to bugs against the listed "
+"I<package>s; this acts as a safety mechanism for the BTS. If no packages "
+"are listed, this check is turned off again."
+msgstr ""
+"Os seguintes comandos irão apenas aplicar a bugs contra os I<package>s "
+"listados; isto actua como um mecanismo de segurança para o BTS. Se nenhum "
+"pacote estiver listado, esta verificação é desligada outra vez."
+
+#. type: =item
+#: ../scripts/bts.pl:1890
+msgid "B<limit> [I<key>[B<:>I<value>]] ..."
+msgstr "B<limit> [I<key>[B<:>I<value>]] ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:1892
+msgid ""
+"The following commands will only apply to bugs which meet the specified "
+"criterion; this acts as a safety mechanism for the BTS. If no I<value>s are "
+"listed, the limits for that I<key> are turned off again. If no I<key>s are "
+"specified, all limits are reset."
+msgstr ""
+"Os seguintes comandos só irão aplicar a bugs que têm os critérios "
+"especificados; isto actua como mecanismo de segurança para o BTS. Se não "
+"existirem I<value>s listados, os limites para essa I<key> são desligados de "
+"novo. Se nenhuma I<key>s for especificada, todos os limites são reiniciados."
+
+#. type: =item
+#: ../scripts/bts.pl:1903
+msgid "B<date>"
+msgstr "B<date>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1905
+msgid "Date the bug was submitted."
+msgstr "Data em que o bug foi submetido."
+
+#. type: =item
+#: ../scripts/bts.pl:1907
+msgid "B<subject>"
+msgstr "B<subject>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1909
+msgid "Subject of the bug."
+msgstr "Assunto do bug."
+
+#. type: =item
+#: ../scripts/bts.pl:1911
+msgid "B<msgid>"
+msgstr "B<msgid>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1913
+msgid "Message-id of the initial bug report."
+msgstr "Id de mensagem do relatório de bug inicial."
+
+#. type: textblock
+#: ../scripts/bts.pl:1925
+msgid "Tags applied to the bug."
+msgstr "Etiquetas aplicadas ao bug."
+
+#. type: textblock
+#: ../scripts/bts.pl:1937
+msgid "Bugs affecting this package."
+msgstr "Bugs que afectam este pacote."
+
+#. type: textblock
+#: ../scripts/bts.pl:1947
+msgid ""
+"For example, to limit the set of bugs affected by the subsequent control "
+"commands to those submitted by jrandomdeveloper@example.com and tagged "
+"B<wontfix>, one would use"
+msgstr ""
+"Por exemplo, para limitar um conjunto de bugs afectados pelos comandos de "
+"controle subsequentes a aqueles submetidos por jrandomdeveloper@example.com "
+"e etiquetados B<wontfix>, pode-se usar"
+
+#. type: textblock
+#: ../scripts/bts.pl:1951
+msgid "bts limit submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr "bts limit submitter:jrandomdeveloper@example.com tag:wontfix"
+
+#. type: textblock
+#: ../scripts/bts.pl:1956
+msgid "bts limit package:foo severity:wishlist severity:minor"
+msgstr "bts limit package:foo severity:wishlist severity:minor"
+
+#. type: textblock
+#: ../scripts/bts.pl:1958
+msgid ""
+"only applies the subsequent control commands to bugs of package foo with "
+"either B<wishlist> or B<minor> severity."
+msgstr ""
+"apenas aplica os comandos de controle subsequentes a bugs do pacote foo com "
+"severidade ou B<wishlist> ou B<minor>."
+
+#. type: =item
+#: ../scripts/bts.pl:2033
+msgid "B<owner> I<bug> I<owner-email>"
+msgstr "B<owner> I<bug> I<owner-email>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2035
+msgid ""
+"Change the \"owner\" address of a I<bug>, with B<!> meaning `use the address "
+"on the current email as the new owner address'."
+msgstr ""
+"Muda o endereço de \"dono\" dum I<bug>, com B<!> a significar `usa o "
+"endereço do email actual como o endereço novo do dono'."
+
+#. type: textblock
+#: ../scripts/bts.pl:2038
+msgid "The owner of a bug accepts responsibility for dealing with it."
+msgstr "O dono de um bug aceita a responsabilidade de lidar com ele."
+
+#. type: =item
+#: ../scripts/bts.pl:2050
+msgid "B<noowner> I<bug>"
+msgstr "B<noowner> I<bug>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2052
+msgid "Mark a bug as having no \"owner\"."
+msgstr "Marca um bug como não tendo \"owner\" (dono)."
+
+#. type: =item
+#: ../scripts/bts.pl:2062
+msgid "B<subscribe> I<bug> [I<email>]"
+msgstr "B<subscribe> I<bug> [I<email>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2064
+msgid ""
+"Subscribe the given I<email> address to the specified I<bug> report. If no "
+"email address is specified, the environment variable B<DEBEMAIL> or B<EMAIL> "
+"(in that order) is used. If those are not set, or B<!> is given as email "
+"address, your default address will be used."
+msgstr ""
+"Subscreve o endereço de I<email> dado ao relatório de I<bug> especificado. "
+"Se não for especificado nenhum endereço de email, é usada a variável de "
+"ambiente B<DEBEMAIL> ou B<EMAIL> (por esta ordem). Se estas não estiverem "
+"definidas, ou se for dado B<!> como endereço de email, será usado o seu "
+"endereço predefinido."
+
+#. type: textblock
+#: ../scripts/bts.pl:2069
+msgid ""
+"After executing this command, you will be sent a subscription confirmation "
+"to which you have to reply. When subscribed to a bug report, you receive "
+"all relevant emails and notifications. Use the unsubscribe command to "
+"unsubscribe."
+msgstr ""
+"Após executar este comando, ser-lhe-à enviada uma confirmação de subscrição "
+"à qual você tem de responder. Quando subscrito a um relatório de bug, você "
+"recebe todos os emails relevantes e notificações. Use o comando unsubscribe "
+"para cancelar a subscrição."
+
+#. type: =item
+#: ../scripts/bts.pl:2092
+msgid "B<unsubscribe> I<bug> [I<email>]"
+msgstr "B<unsubscribe> I<bug> [I<email>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2094
+msgid ""
+"Unsubscribe the given email address from the specified bug report. As with "
+"subscribe above, if no email address is specified, the environment variables "
+"B<DEBEMAIL> or B<EMAIL> (in that order) is used. If those are not set, or "
+"B<!> is given as email address, your default address will be used."
+msgstr ""
+"Cancela a subscrição do endereço de email dado do relatório de bug "
+"especificado. Tal como a subscrição em cima, se nenhum endereço de email for "
+"especificado, são usadas as variáveis de ambiente B<DEBEMAIL> ou B<EMAIL> "
+"(por esta ordem). Se estas não estiverem definidas, ou for dado B<!> como "
+"endereço de email, será usado o seu endereço predefinido."
+
+#. type: textblock
+#: ../scripts/bts.pl:2099
+msgid ""
+"After executing this command, you will be sent an unsubscription "
+"confirmation to which you have to reply. Use the B<subscribe> command to, "
+"well, subscribe."
+msgstr ""
+"Após a execução deste comando, ser-lhe-à enviada uma conformação de remoção "
+"de subscrição à qual você tem de responder. Use o comando B<subscribe> para "
+"subscrever."
+
+#. type: =item
+#: ../scripts/bts.pl:2122
+msgid "B<reportspam> I<bug> ..."
+msgstr "B<reportspam> I<bug> ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:2124
+msgid ""
+"The B<reportspam> command allows you to report a I<bug> report as containing "
+"spam. It saves one from having to go to the bug web page to do so."
+msgstr ""
+"O comando B<reportspam> permite-lhe reportar um relatório de I<bug> como "
+"conteúdo de spam. Permite fazê-lo se ter que ir à página web do bug para o "
+"fazer."
+
+#. type: =item
+#: ../scripts/bts.pl:2161
+msgid "B<spamreport> I<bug> ..."
+msgstr "B<spamreport> I<bug> ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:2163
+msgid "B<spamreport> is a synonym for B<reportspam>."
+msgstr "B<spamreport> é um sinónimo de B<reportspam>."
+
+#. type: =item
+#: ../scripts/bts.pl:2171
+msgid ""
+"B<cache> [I<options>] [I<maint_email> | I<pkg> | B<src:>I<pkg> | B<from:"
+">I<submitter>]"
+msgstr ""
+"B<cache> [I<options>] [I<maint_email> | I<pkg> | B<src:>I<pkg> | B<from:"
+">I<submitter>]"
+
+#. type: =item
+#: ../scripts/bts.pl:2173
+msgid ""
+"B<cache> [I<options>] [B<release-critical> | B<release-critical/>... | B<RC>]"
+msgstr ""
+"B<cache> [I<options>] [B<release-critical> | B<release-critical/>... | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2175
+msgid ""
+"Generate or update a cache of bug reports for the given email address or "
+"package. By default it downloads all bugs belonging to the email address in "
+"the B<DEBEMAIL> environment variable (or the B<EMAIL> environment variable "
+"if B<DEBEMAIL> is unset). This command may be repeated to cache bugs "
+"belonging to several people or packages. If multiple packages or addresses "
+"are supplied, bugs belonging to any of the arguments will be cached; those "
+"belonging to more than one of the arguments will only be downloaded once. "
+"The cached bugs are stored in F<$XDG_CACHE_HOME/devscripts/bts/> or, if "
+"B<XDG_CACHE_HOME> is not set, in F<~/.cache/devscripts/bts/>."
+msgstr ""
+"Gera ou actualiza uma cache de relatórios de bug para um dado endereço de "
+"email ou pacote. Por predefinição descarrega todos os bugs pertencentes ao "
+"endereço de email na variável de ambiente B<DEBEMAIL> (ou na variável de "
+"ambiente B<EMAIL> se B<DEBEMAIL> não estiver definida). Este comando pode "
+"ser repetido para colocar em cache bugs que pertençam, a várias pessoas ou "
+"pacotes. Se forem fornecidos vários pacotes ou endereços, serão postos em "
+"cache bugs que pertençam a qualquer um dos argumentos; aqueles que pertençam "
+"a mais do que um dos argumentos serão descarregados apenas uma vez. Os bugs "
+"em cache são guardados em F<$XDG_CACHE_HOME/devscripts/bts/> ou, se "
+"B<XDG_CACHE_HOME> não estiver definido, em F<~/.cache/devscripts/bts/>."
+
+#. type: textblock
+#: ../scripts/bts.pl:2186
+msgid "You can use the cached bugs with the B<-o> switch. For example:"
+msgstr "Você pode usar os bugs em cache com o comutador B<-o>. Por exemplo:"
+
+#. type: verbatim
+#: ../scripts/bts.pl:2188
+#, no-wrap
+msgid ""
+" bts -o bugs\n"
+" bts -o show 12345\n"
+"\n"
+msgstr ""
+" bts -o bugs\n"
+" bts -o show 12345\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:2191
+msgid ""
+"Also, B<bts> will update the files in it in a piecemeal fashion as it "
+"downloads information from the BTS using the B<show> command. You might thus "
+"set up the cache, and update the whole thing once a week, while letting the "
+"automatic cache updates update the bugs you frequently refer to during the "
+"week."
+msgstr ""
+"Também, B<bts> irá actualizar os ficheiros num estilo fragmentado conforme "
+"vai descarregando informação do BTS usando o comando B<show>. Você pode "
+"assim definir a cache, e actualizar tudo uma vez por semana, enquanto deixa "
+"as actualizações de cache automáticas actualizar os bugs que você refere "
+"frequentemente durante a semana."
+
+#. type: textblock
+#: ../scripts/bts.pl:2197
+msgid ""
+"Some options affect the behaviour of the B<cache> command. The first is the "
+"setting of B<--cache-mode>, which controls how much B<bts> downloads of the "
+"referenced links from the bug page, including boring bits such as the "
+"acknowledgement emails, emails to the control bot, and the mbox version of "
+"the bug report. It can take three values: B<min> (the minimum), B<mbox> "
+"(download the minimum plus the mbox version of the bug report) or B<full> "
+"(the whole works). The second is B<--force-refresh> or B<-f>, which forces "
+"the download, even if the cached bug report is up-to-date. The B<--include-"
+"resolved> option indicates whether bug reports marked as resolved should be "
+"downloaded during caching."
+msgstr ""
+"Algumas opções afectam o comportamento do comando B<cache>. A primeira é a "
+"definição de B<--cache-mode>, que controla quando o B<bts> descarrega dos "
+"links referenciados a partir da pagina do bug, incluindo bits aborrecidos "
+"como os emails de confirmação, emails para o bot de controle, e a versão "
+"mbox do relatório de bug. Pode tomar três valores: B<min> (o mínimo), "
+"B<mbox> (descarrega o mínimo mais a versão mbox do relatório de bug) ou "
+"B<full> (todo o trabalho). A segunda é B<--force-refresh> ou B<-f>, a qual "
+"força a descarga, mesmo que o relatório de bug em cache esteja actualizado. "
+"A opção B<--include-resolved> indica se os relatórios de bug marcados como "
+"resolvidos devem ser descarregados durante a criação da cache."
+
+#. type: textblock
+#: ../scripts/bts.pl:2208
+msgid ""
+"Each of these is configurable from the configuration file, as described "
+"below. They may also be specified after the B<cache> command as well as at "
+"the start of the command line."
+msgstr ""
+"Cada uma destas é configurável a partir do ficheiro de configuração, como "
+"descrito em baixo. Elas também podem ser especificadas após o comando "
+"B<cache> assim como no inicio da linha de comandos."
+
+#. type: textblock
+#: ../scripts/bts.pl:2212
+msgid ""
+"Finally, B<-q> or B<--quiet> will suppress messages about caches being up-to-"
+"date, and giving the option twice will suppress all cache messages (except "
+"for error messages)."
+msgstr ""
+"Finalmente, B<-q> ou B<--quiet> farão suprimir mensagens acerca das caches "
+"estarem actualizadas, e dando a opção duas vezes fará suprimir todas as "
+"mensagens de cache messages (excepto mensagens de erro)."
+
+#. type: textblock
+#: ../scripts/bts.pl:2216
+msgid ""
+"Beware of caching RC, though: it will take a LONG time! (With 1000+ RC bugs "
+"and a delay of 5 seconds between bugs, you're looking at a minimum of 1.5 "
+"hours, and probably significantly more than that.)"
+msgstr ""
+"No entanto, cuidado ao fazer cache a RC: Irá demorar MUITO tempo! (Com + de "
+"1000 bugs RC e um atraso de 5 segundos entre bugs, espera-lhe um mínimo de "
+"1,5 horas, e provavelmente muito mais do que isso.)"
+
+#. type: =item
+#: ../scripts/bts.pl:2351
+msgid "B<cleancache> I<package> | B<src:>I<package> | I<maintainer>"
+msgstr "B<cleancache> I<package> | B<src:>I<package> | I<maintainer>"
+
+#. type: =item
+#: ../scripts/bts.pl:2353
+msgid ""
+"B<cleancache from:>I<submitter> | B<tag:>I<tag> | B<usertag:>I<tag> | "
+"I<number> | B<ALL>"
+msgstr ""
+"B<cleancache from:>I<submitter> | B<tag:>I<tag> | B<usertag:>I<tag> | "
+"I<number> | B<ALL>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2355
+msgid ""
+"Clean the cache for the specified I<package>, I<maintainer>, etc., as "
+"described above for the B<bugs> command, or clean the entire cache if B<ALL> "
+"is specified. This is useful if you are going to have permanent network "
+"access or if the database has become corrupted for some reason. Note that "
+"for safety, this command does not default to the value of B<DEBEMAIL> or "
+"B<EMAIL>."
+msgstr ""
+"Limpa a cache para o I<package>, I<maintainer>, etc. especificado, como "
+"descrito em cima para o comando B<bugs>, ou limpa a cache inteira de for "
+"especificado B<ALL>. Isto é útil se você vai ter acesso de rede permanente "
+"ou se a base de dados se corrompeu por alguma razão. Note que para "
+"segurança, este comando não está predefinido para o valor de B<DEBEMAIL> ou "
+"B<EMAIL>."
+
+#. type: =item
+#: ../scripts/bts.pl:2403
+msgid "B<listcachedbugs> [I<number>]"
+msgstr "B<listcachedbugs> [I<number>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2405
+msgid ""
+"List cached bug ids (intended to support bash completion). The optional "
+"number argument restricts the list to those bug ids that start with that "
+"number."
+msgstr ""
+"Lista ids de bugs em cache (destinados ao suporte de completação de bash). O "
+"argumento de número opcional restringe a lista a ids de bugs que começam com "
+"esse número."
+
+#. type: =item
+#: ../scripts/bts.pl:2437
+msgid "B<version>"
+msgstr "B<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2439
+msgid "Display version and copyright information."
+msgstr "Mostra informação de versão e copyright."
+
+#. type: =item
+#: ../scripts/bts.pl:2454
+msgid "B<help>"
+msgstr "B<help>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2456
+msgid ""
+"Display a short summary of commands, suspiciously similar to parts of this "
+"man page."
+msgstr ""
+"Mostra um sumário curto de comandos, suspeitamente semelhante a partes deste "
+"manual."
+
+#. type: SH
+#: ../scripts/bts.pl:4190 ../scripts/debuild.1:88 ../scripts/diff2patches.1:40
+#: ../scripts/pts-subscribe.1:34
+#, no-wrap
+msgid "ENVIRONMENT VARIABLES"
+msgstr "VARIÁVEIS DE AMBIENTE"
+
+#. type: =item
+#: ../scripts/bts.pl:4194
+msgid "B<DEBEMAIL>"
+msgstr "B<DEBEMAIL>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4196
+msgid ""
+"If this is set, the From: line in the email will be set to use this email "
+"address instead of your normal email address (as would be determined by "
+"B<mail>)."
+msgstr ""
+"Se isto estiver definido, a linha From: no email irá ser definida para usar "
+"este endereço de email em vez do seu endereço de email normal (como seria "
+"determinado por B<mail>)."
+
+#. type: =item
+#: ../scripts/bts.pl:4200
+msgid "B<DEBFULLNAME>"
+msgstr "B<DEBFULLNAME>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4202
+msgid ""
+"If B<DEBEMAIL> is set, B<DEBFULLNAME> is examined to determine the full name "
+"to use; if this is not set, B<bts> attempts to determine a name from your "
+"F<passwd> entry."
+msgstr ""
+"Se B<DEBEMAIL> estiver definido, B<DEBFULLNAME> é examinado para determinar "
+"no nome completo a usar; se isto não estiver definido, B<bts> tenta "
+"determinar um nome a partir da sua entrada F<passwd>."
+
+#. type: =item
+#: ../scripts/bts.pl:4206
+msgid "B<BROWSER>"
+msgstr "B<BROWSER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4208
+msgid ""
+"If set, it specifies the browser to use for the B<show> and B<bugs> "
+"options. See the description above."
+msgstr ""
+"Se definido, especifica o navegador a usar para as opções B<show> e B<bugs>. "
+"Veja a descrição em cima."
+
+#. type: SH
+#: ../scripts/bts.pl:4213 ../scripts/debc.1:102 ../scripts/debchange.1:405
+#: ../scripts/debcheckout.pl:180 ../scripts/debclean.1:93
+#: ../scripts/debcommit.pl:104 ../scripts/debdiff.1:188 ../scripts/debi.1:109
+#: ../scripts/debrelease.1:105 ../scripts/debrsign.1:57
+#: ../scripts/debsign.1:105 ../scripts/debuild.1:327 ../scripts/dget.pl:690
+#: ../scripts/dpkg-depcheck.1:102 ../scripts/dscverify.1:43
+#: ../scripts/grep-excuses.1:46 ../scripts/mass-bug.pl:141
+#: ../scripts/nmudiff.1:92 ../scripts/plotchangelog.1:106
+#: ../scripts/pts-subscribe.1:42 ../scripts/rmadison.pl:355
+#: ../scripts/uupdate.1:107 ../scripts/who-uploads.1:51
+#, no-wrap
+msgid "CONFIGURATION VARIABLES"
+msgstr "VARIÁVEIS DE CONFIGURAÇÃO"
+
+#. type: textblock
+#: ../scripts/bts.pl:4215 ../scripts/debcommit.pl:106
+#: ../scripts/mass-bug.pl:143
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+"Os dois ficheiros de configuração F</etc/devscripts.conf> e F<~/.devscripts> "
+"são por essa ordem fonte para uma shell para definirem variáveis de "
+"configuração. Podem ser usadas opções de linha de comandos para sobrepor "
+"definições de ficheiros de configuração. As definições de variáveis de "
+"ambiente são ignoradas para este objectivo. As variáveis actualmente "
+"reconhecidas são:"
+
+#. type: =item
+#: ../scripts/bts.pl:4223
+msgid "B<BTS_OFFLINE>"
+msgstr "B<BTS_OFFLINE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4225
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--offline> command "
+"line parameter being used. Only has an effect on the B<show> and B<bugs> "
+"commands. The default is B<no>. See the description of the B<show> command "
+"above for more information."
+msgstr ""
+"Se isto estiver definido para B<yes>, então é o mesmo que usar o parâmetro "
+"de linha de comandos B<--offline>. Apenas tem efeito nos comandos B<show> e "
+"B<bugs>. A predefinição é B<no>. Veja a descrição do comando B<show> em "
+"cima para mais informação."
+
+#. type: =item
+#: ../scripts/bts.pl:4230
+msgid "B<BTS_CACHE>"
+msgstr "B<BTS_CACHE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4232
+msgid ""
+"If this is set to B<no>, then it is the same as the B<--no-cache> command "
+"line parameter being used. Only has an effect on the B<show> and B<bug> "
+"commands. The default is B<yes>. Again, see the B<show> command above for "
+"more information."
+msgstr ""
+"Se isto estiver definido para B<no>, então é o mesmo que usar o parâmetro de "
+"linha de comandos B<--no-cache>. Apenas tem efeito nos comandos B<show> e "
+"B<bug>. A predefinição é B<yes>. De novo, veja a descrição do comando "
+"B<show> em cima para mais informação."
+
+#. type: =item
+#: ../scripts/bts.pl:4237
+msgid "B<BTS_CACHE_MODE=>{B<min>,B<mbox>,B<full>}"
+msgstr "B<BTS_CACHE_MODE=>{B<min>,B<mbox>,B<full>}"
+
+#. type: textblock
+#: ../scripts/bts.pl:4239
+msgid ""
+"How much of the BTS should we mirror when we are asked to cache something? "
+"Just the minimum, or also the mbox or the whole thing? The default is "
+"B<min>, and it has the same meaning as the B<--cache-mode> command line "
+"parameter. Only has an effect on the cache. See the B<cache> command for "
+"more information."
+msgstr ""
+"Quando do BTS devemos espelhar quando nos pedem para pôr algo em cache? "
+"Apenas o mínimo, também a mbox ou mesmo tudo? A predefinição é B<min>, e tem "
+"o mesmo significado que o parâmetro de linha de comandos B<--cache-mode>. "
+"Apenas tem efeito na cache. Veja o comando B<cache> para mais informação."
+
+#. type: =item
+#: ../scripts/bts.pl:4245
+msgid "B<BTS_FORCE_REFRESH>"
+msgstr "B<BTS_FORCE_REFRESH>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4247
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--force-refresh> "
+"command line parameter being used. Only has an effect on the B<cache> "
+"command. The default is B<no>. See the B<cache> command for more "
+"information."
+msgstr ""
+"Se isto estiver definido para B<yes>, então é o mesmo que usar o parâmetro "
+"de linha de comandos B<--force-refresh> Apenas tem efeito no comando "
+"B<cache>. A predefinição é B<no>. Veja o comando B<cache> para mais "
+"informação."
+
+#. type: =item
+#: ../scripts/bts.pl:4252
+msgid "B<BTS_MAIL_READER>"
+msgstr "B<BTS_MAIL_READER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4254
+msgid ""
+"If this is set, specifies a mail reader to use instead of B<mutt>. Same as "
+"the B<--mailreader> command line option."
+msgstr ""
+"Se isto estiver definido, especifica o leitor de mail a usar em vez do "
+"B<mutt>. O mesmo que a opção de linha de comandos B<--mailreader>."
+
+#. type: TP
+#: ../scripts/bts.pl:4257 ../scripts/mass-bug.pl:151 ../scripts/nmudiff.1:117
+#, no-wrap
+msgid "B<BTS_SENDMAIL_COMMAND>"
+msgstr "B<BTS_SENDMAIL_COMMAND>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4259 ../scripts/mass-bug.pl:153
+msgid ""
+"If this is set, specifies a B<sendmail> command to use instead of F</usr/"
+"sbin/sendmail>. Same as the B<--sendmail> command line option."
+msgstr ""
+"Se isto estiver definido, especifica o comando B<sendmail> a usar em vez de "
+"F</usr/sbin/sendmail>. O mesmo que a opção de linha de comandos B<--"
+"sendmail>."
+
+#. type: =item
+#: ../scripts/bts.pl:4262
+msgid "B<BTS_ONLY_NEW>"
+msgstr "B<BTS_ONLY_NEW>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4264
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have. The default is B<no>. Same as the B<--only-new> command line "
+"option."
+msgstr ""
+"Descarrega apenas os novos bugs ao fazer a cache. Não verifica se há "
+"actualizações nos bugs que já temos. A predefinição é B<no>. Igual à opção "
+"de linha de comandos B<--only-new>."
+
+#. type: =item
+#: ../scripts/bts.pl:4268
+msgid "B<BTS_SMTP_HOST>"
+msgstr "B<BTS_SMTP_HOST>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4270
+msgid ""
+"If this is set, specifies an SMTP host to use for sending mail rather than "
+"using the B<sendmail> command. Same as the B<--smtp-host> command line "
+"option."
+msgstr ""
+"Se isto estiver definido, especifica uma máquina SMTP a usar para enviar "
+"mail em vez de usar o comandos B<sendmail>. Igual à opção de linha de "
+"comandos B<--smtp-host>."
+
+#. type: textblock
+#: ../scripts/bts.pl:4274
+msgid ""
+"Note that this option takes priority over B<BTS_SENDMAIL_COMMAND> if both "
+"are set, unless the B<--sendmail> option is used."
+msgstr ""
+"Note que esta opção tem prioridade sobre B<BTS_SENDMAIL_COMMAND> se ambas "
+"estiverem definidas, a menos que seja usada a opção B<--sendmail>."
+
+#. type: =item
+#: ../scripts/bts.pl:4277
+msgid "B<BTS_SMTP_AUTH_USERNAME>, B<BTS_SMTP_AUTH_PASSWORD>"
+msgstr "B<BTS_SMTP_AUTH_USERNAME>, B<BTS_SMTP_AUTH_PASSWORD>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4279
+msgid ""
+"If these options are set, then it is the same as the B<--smtp-username> and "
+"B<--smtp-password> options being used."
+msgstr ""
+"Se estas opções estiverem definidas, então é o mesmo que usar as opções B<--"
+"smtp-username> e B<--smtp-password>."
+
+#. type: =item
+#: ../scripts/bts.pl:4282
+msgid "B<BTS_SMTP_HELO>"
+msgstr "B<BTS_SMTP_HELO>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4284
+msgid "Same as the B<--smtp-helo> command line option."
+msgstr "O mesmo que a opção de linha de comandos B<--smtp-helo>."
+
+#. type: =item
+#: ../scripts/bts.pl:4286
+msgid "B<BTS_INCLUDE_RESOLVED>"
+msgstr "B<BTS_INCLUDE_RESOLVED>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4288
+msgid ""
+"If this is set to B<no>, then it is the same as the B<--no-include-resolved> "
+"command line parameter being used. Only has an effect on the B<cache> "
+"command. The default is B<yes>. See the B<cache> command for more "
+"information."
+msgstr ""
+"Se isto estiver definido para B<no>, então é o mesmo que usar o parâmetro de "
+"linha de comandos B<--no-include-resolved> Apenas tem efeito no comando "
+"B<cache>. A predefinição é B<yes>. Veja o comando B<cache> para mais "
+"informação."
+
+#. type: =item
+#: ../scripts/bts.pl:4293
+msgid "B<BTS_SUPPRESS_ACKS>"
+msgstr "B<BTS_SUPPRESS_ACKS>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4295
+msgid ""
+"If this is set to B<yes>, then it is the same as the B<--no-ack> command "
+"line parameter being used. The default is B<no>."
+msgstr ""
+"Se isto estiver definido para B<yes>, então é o mesmo que usar o parâmetro "
+"de linha de comandos B<--no-ack>. A predefinição é B<no>."
+
+#. type: =item
+#: ../scripts/bts.pl:4298
+msgid "B<BTS_INTERACTIVE>"
+msgstr "B<BTS_INTERACTIVE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4300
+msgid ""
+"If this is set to B<yes> or B<force>, then it is the same as the B<--"
+"interactive> or B<--force-interactive> command line parameter being used. "
+"The default is B<no>."
+msgstr ""
+"Se isto estiver definido para B<yes> ou B<force>, então é o mesmo que usar "
+"os parâmetros de linha de comandos B<--interactive> ou B<--force-"
+"interactive>. A predefinição é B<no>."
+
+#. type: =item
+#: ../scripts/bts.pl:4304
+msgid "B<BTS_DEFAULT_CC>"
+msgstr "B<BTS_DEFAULT_CC>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4306
+msgid ""
+"Specify a list of e-mail addresses to which a carbon copy of the generated e-"
+"mail to the control bot should automatically be sent."
+msgstr ""
+"Especifica uma lista de endereços de e-mail para os quais deve ser enviada "
+"automaticamente uma cópia de carvão (CC) do mail gerado para o bot de "
+"controle."
+
+#. type: =item
+#: ../scripts/bts.pl:4309
+msgid "B<BTS_SERVER>"
+msgstr "B<BTS_SERVER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4311
+msgid ""
+"Specify the name of a debbugs server which should be used instead of https://"
+"bugs.debian.org."
+msgstr ""
+"Especifica o nome de um servidor de debbugs que deve ser usado em vez de "
+"https://bugs.debian.org."
+
+#. type: textblock
+#: ../scripts/bts.pl:4318
+msgid ""
+"Please see L<https://www.debian.org/Bugs/server-control> for more details on "
+"how to control the BTS using emails and L<https://www.debian.org/Bugs/> for "
+"more information about the BTS."
+msgstr ""
+"Por favor veja L<https://www.debian.org/Bugs/server-control> para mais "
+"detalhes sobre como controlar o BTS usando emails e L<https://www.debian.org/"
+"Bugs/> para mais informação sobre o BTS."
+
+#. type: textblock
+#: ../scripts/bts.pl:4322
+msgid "querybts(1), reportbug(1), pts-subscribe(1), devscripts.conf(5)"
+msgstr "querybts(1), reportbug(1), pts-subscribe(1), devscripts.conf(5)"
+
+#. type: =head1
+#: ../scripts/bts.pl:4324 ../scripts/chdist.pl:131 ../scripts/debsnap.1:146
+#: ../scripts/mass-bug.pl:559 ../scripts/tagpending.pl:425
+#, no-wrap
+msgid "COPYRIGHT"
+msgstr "COPYRIGHT"
+
+#. type: textblock
+#: ../scripts/bts.pl:4326
+msgid ""
+"This program is Copyright (C) 2001-2003 by Joey Hess <joeyh@debian.org>. "
+"Many modifications have been made, Copyright (C) 2002-2005 Julian Gilbey "
+"<jdg@debian.org> and Copyright (C) 2007 Josh Triplett <josh@freedesktop.org>."
+msgstr ""
+"Este programa tem Copyright (C) 2001-2003 de Joey Hess <joeyh@debian.org>. "
+"Muitas modificações foram feitas, Copyright (C) 2002-2005 Julian Gilbey "
+"<jdg@debian.org> e Copyright (C) 2007 Josh Triplett <josh@freedesktop.org>."
+
+#. type: textblock
+#: ../scripts/bts.pl:4331 ../scripts/chdist.pl:136 ../scripts/mass-bug.pl:563
+msgid ""
+"It is licensed under the terms of the GPL, either version 2 of the License, "
+"or (at your option) any later version."
+msgstr ""
+"Tem licença sobre os termos de GPL, seja versão 2 da licença, ou (por sua "
+"opção) qualquer versão posterior."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:24
+msgid ""
+"build-rdeps - find packages that depend on a specific package to build "
+"(reverse build depends)"
+msgstr ""
+"build-rdeps - procura pacotes que dependem de um pacote específico para "
+"compilar (dependências reversas de compilação)"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:28
+msgid "B<build-rdeps> I<package>"
+msgstr "B<build-rdeps> I<package>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:32
+msgid ""
+"B<build-rdeps> searches for all packages that build-depend on the specified "
+"package."
+msgstr ""
+"B<build-rdeps> procura por todos os pacotes que dependem de um pacote "
+"específico para compilação."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:34
+msgid ""
+"The default behaviour is to just `grep` for the given dependency in the "
+"Build-Depends field of apt's Sources files."
+msgstr ""
+"O comportamento predefinido é apenas fazer`grep` para a dependência dada no "
+"campo Build-Depends nos ficheiros Sources do apt."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:37
+msgid ""
+"If the package dose-extra >= 4.0 is installed, then a more complete reverse "
+"build dependency computation is carried out. In particular, with that "
+"package installed, build-rdeps will find transitive reverse dependencies, "
+"respect architecture and build profile restrictions, take Provides "
+"relationships, Conflicts, Pre-Depends, Build-Depends-Arch and versioned "
+"dependencies into account and correctly resolve multiarch relationships for "
+"crossbuild reverse dependency resolution. (This tends to be a slow process "
+"due to the complexity of the package interdependencies.)"
+msgstr ""
+"Se o pacote dose-extra >= 4.0 estiver instalado, então é levada a cabo uma "
+"computação de dependência de compilação reversa mais completa. Em "
+"particular, com esse pacote instalado, o build-rdeps irá encontrar "
+"dependências reversas transitivas, respeitar restrições de arquitectura e "
+"perfis de compilação, tomar relacionamentos de Provides, Conflicts, Pre-"
+"Depends, Build-Depends-Arch e dependências relacionadas com a versão em "
+"conta e resolver correctamente relacionamentos de multi-arquitectura para "
+"resolução de dependências reversas de compilação-cruzada. (Isto tem "
+"tendência a ser um processo lento devido à complexidade das inter-"
+"dependências dos pacotes.)"
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:50
+msgid "B<-u>, B<--update>"
+msgstr "B<-u>, B<--update>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:52
+msgid "Run apt-get update before searching for build-depends."
+msgstr "Corre apt-get update antes de procurar por dependências de compilação."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:54
+msgid "B<-s>, B<--sudo>"
+msgstr "B<-s>, B<--sudo>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:56
+msgid "Use sudo when running apt-get update. Has no effect if -u is omitted."
+msgstr "Usa sudo ao correr apt-get update. Não tem efeito se -u for omitido."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:58
+msgid "B<--distribution>"
+msgstr "B<--distribution>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:60
+msgid "Select another distribution, which is searched for build-depends."
+msgstr ""
+"Seleciona outra distribuição, que é procurada para dependências de "
+"compilação."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:62
+msgid "B<--only-main>"
+msgstr "B<--only-main>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:64
+msgid "Ignore contrib and non-free"
+msgstr "Ignora contrib e non-free"
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:66
+msgid "B<--exclude-component>"
+msgstr "B<--exclude-component>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:68
+msgid "Ignore the given component (e.g. main, contrib, non-free)."
+msgstr "Ignora o componente dado (ex. main, contrib, non-free)."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:70
+msgid "B<--origin>"
+msgstr "B<--origin>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:72
+msgid "Restrict the search to only the specified origin (such as \"Debian\")."
+msgstr ""
+"Restringe a procura apenas à origem especificada (tal como \"Debian\")."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:74
+msgid "B<-m>, B<--print-maintainer>"
+msgstr "B<-m>, B<--print-maintainer>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:76
+msgid "Print the value of the maintainer field for each package."
+msgstr "Escreve o valor do campo maintainer para cada pacote."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:78
+msgid "B<--host-arch>"
+msgstr "B<--host-arch>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:80
+msgid ""
+"Explicitly set the host architecture. The default is the value of `dpkg-"
+"architecture -qDEB_HOST_ARCH`. This option only works if dose-extra >= 4.0 "
+"is installed."
+msgstr ""
+"Define explicitamente a arquitectura da máquina. A predefinição é o valor de "
+"`dpkg-architecture -qDEB_HOST_ARCH`. Esta opção apenas funciona se dose-"
+"extra >= 4.0 estiver instalado."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:84
+msgid "B<--build-arch>"
+msgstr "B<--build-arch>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:86
+msgid ""
+"Explicitly set the build architecture. The default is the value of `dpkg-"
+"architecture -qDEB_BUILD_ARCH`. This option only works if dose-extra >= 4.0 "
+"is installed."
+msgstr ""
+"Define explicitamente a arquitectura de compilação. A predefinição é o valor "
+"de `dpkg-architecture -qDEB_BUILD_ARCH`. Esta opção apenas funciona se dose-"
+"extra >= 4.0 estiver instalado."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:90
+msgid "B<--no-arch-all>, B<--no-arch-any>"
+msgstr "B<--no-arch-all>, B<--no-arch-any>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:92
+msgid ""
+"Ignore Build-Depends-Indep or Build-Depends-Arch while looking for reverse "
+"dependencies."
+msgstr ""
+"Ignora Build-Depends-Indep ou Build-Depends-Arch enquanto procura por "
+"dependências reversas."
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:95 ../scripts/nmudiff.1:29
+#, no-wrap
+msgid "B<--old>"
+msgstr "B<--old>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:97
+msgid ""
+"Force the old simple behaviour without dose-ceve support even if dose-extra "
+">= 4.0 is installed. (This tends to be faster.)"
+msgstr ""
+"Força o comportamento simples e antigo sem o suporte a dose-ceve mesmo que o "
+"dose-extra >= 4.0 esteja instalado. (Isto tende a ser mais rápido.)"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:100
+msgid ""
+"Notice, that the old behaviour only finds direct dependencies, ignores "
+"virtual dependencies, does not find transitive dependencies and does not "
+"take version relationships, architecture restrictions, build profiles or "
+"multiarch relationships into account."
+msgstr ""
+"Note que o comportamento antigo apenas encontra dependências diretas, ignora "
+"as dependências virtuais, não encontra dependências transitivas e não tem em "
+"conta relacionamentos de versões, restrições de arquitectura, perfis de "
+"compilação ou relacionamentos de multi-arquitectura."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:107
+msgid ""
+"Don't print meta information (header, counter). Making it easier to use in "
+"scripts."
+msgstr ""
+"Não escreve a meta informação (cabeçalho, contador). Facilitando o uso em "
+"scripts."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:110
+msgid "B<-d>, B<--debug>"
+msgstr "B<-d>, B<--debug>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:112
+msgid "Run the debug mode"
+msgstr "Corre o modo de depuração"
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:114 ../scripts/cowpoke.1:131
+#: ../scripts/debclean.1:87 ../scripts/diff2patches.1:22
+#: ../scripts/grep-excuses.1:23 ../scripts/mass-bug.pl:126
+#: ../scripts/nmudiff.1:86 ../scripts/plotchangelog.1:92
+#: ../scripts/uscan.pl:1771
+#, no-wrap
+msgid "B<--help>"
+msgstr "B<--help>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:116
+msgid "Show the usage information."
+msgstr "Mostra informação de utilização."
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:118 ../scripts/chdist.pl:49
+#: ../scripts/cowpoke.1:135 ../scripts/debchange.1:402 ../scripts/debclean.1:90
+#: ../scripts/debrelease.1:102 ../scripts/deb-why-removed.pl:229
+#: ../scripts/debsign.1:102 ../scripts/debsnap.1:77
+#: ../scripts/dep3changelog.1:19 ../scripts/diff2patches.1:25
+#: ../scripts/dscverify.1:40 ../scripts/grep-excuses.1:26
+#: ../scripts/mass-bug.pl:130 ../scripts/nmudiff.1:89
+#: ../scripts/plotchangelog.1:95 ../scripts/pts-subscribe.1:31
+#: ../scripts/rmadison.pl:342 ../scripts/uscan.pl:1775 ../scripts/uupdate.1:104
+#: ../scripts/who-uploads.1:48
+#, no-wrap
+msgid "B<--version>"
+msgstr "B<--version>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:120
+msgid "Show the version information."
+msgstr "Mostra informação de versão."
+
+#. type: SH
+#: ../scripts/build-rdeps.pl:124 ../scripts/debpkg.1:12
+#, no-wrap
+msgid "REQUIREMENTS"
+msgstr "REQUERIMENTOS"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:126
+msgid ""
+"The tool requires apt Sources files to be around for the checked "
+"components. In the default case this means that in /var/lib/apt/lists files "
+"need to be around for main, contrib and non-free."
+msgstr ""
+"A ferramenta requer que ficheiros Sources do apt estejam por perto para os "
+"componentes verificados. No caso predefinido isto significa que em /var/lib/"
+"apt/lists precisam haver ficheiros para main, contrib e non-free."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:130
+msgid ""
+"In practice this means one needs to add one deb-src line for each component, "
+"e.g."
+msgstr ""
+"Na prática, isto significa que é preciso adicionar uma linha deb-src para "
+"cada componente, ex."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:133
+msgid "deb-src http://<mirror>/debian <dist> main contrib non-free"
+msgstr "deb-src http://<mirror>/debian <dist> main contrib non-free"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:135
+msgid ""
+"and run apt-get update afterwards or use the update option of this tool."
+msgstr ""
+"e corra apt-get update logo após ou use a opção update desta ferramenta."
+
+#. type: =head1
+#: ../scripts/build-rdeps.pl:539 ../scripts/debcommit.pl:943
+#: ../scripts/desktop2menu.pl:43 ../scripts/namecheck.pl:30
+#: ../scripts/svnpath.pl:92 ../scripts/transition-check.pl:72
+msgid "LICENSE"
+msgstr "LICENÇA"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:541
+msgid ""
+"This code is copyright by Patrick Schoenfeld <schoenfeld@debian.org>, all "
+"rights reserved. This program comes with ABSOLUTELEY NO WARRANTY. You are "
+"free to redistribute this code under the terms of the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+"Este código tem copyright por Patrick Schoenfeld <schoenfeld@debian.org>, "
+"todos os direitos reservados. Este programa vem com ABSOLUTAMENTE NENHUMA "
+"GARANTIA. Você é livre de re-distribuir este código sob os termos da GNU "
+"General Public License, versão 2 ou posterior."
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:549
+msgid "Patrick Schoenfeld <schoenfeld@debian.org>"
+msgstr "Patrick Schoenfeld <schoenfeld@debian.org>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:20
+msgid "chdist - script to easily play with several distributions"
+msgstr "chdist - script para facilitar a lida com várias distribuições"
+
+#. type: textblock
+#: ../scripts/chdist.pl:24
+msgid "B<chdist> [I<options>] [I<command>] [I<command parameters>]"
+msgstr "B<chdist> [I<options>] [I<command>] [I<command parameters>]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:28
+msgid ""
+"B<chdist> is a rewrite of what used to be known as 'MultiDistroTools' (or "
+"mdt). Its use is to create 'APT trees' for several distributions, making it "
+"easy to query the status of packages in other distribution without using "
+"chroots, for instance."
+msgstr ""
+"B<chdist> é uma rescrita do que era conhecido por 'MultiDistroTools' (ou "
+"mdt). É usado para criar 'árvores-APT' para várias distribuições, "
+"facilitando a pesquisa dos estados de pacotes em outra distribuição sem se "
+"usar chroots, por exemplo."
+
+#. type: textblock
+#: ../scripts/chdist.pl:39 ../scripts/mass-bug.pl:128
+msgid "Provide a usage message."
+msgstr "Fornece a mensagem de utilização."
+
+#. type: =item
+#: ../scripts/chdist.pl:41
+msgid "B<-d>, B<--data-dir> I<DIR>"
+msgstr "B<-d>, B<--data-dir> I<DIR>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:43
+msgid "Choose data directory (default: F<~/.chdist/>)."
+msgstr "Escolhe o directório de dados (predefinição: F<~/.chdist/>)."
+
+#. type: =item
+#: ../scripts/chdist.pl:45
+msgid "B<-a>, B<--arch> I<ARCH>"
+msgstr "B<-a>, B<--arch> I<ARCH>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:47
+msgid "Choose architecture (default: `B<dpkg --print-architecture>`)."
+msgstr "Escolhe a arquitectura (predefinição: `B<dpkg --print-architecture>`)."
+
+#. type: textblock
+#: ../scripts/chdist.pl:51 ../scripts/deb-reversion.dbk:239
+#: ../scripts/mass-bug.pl:132 ../scripts/uscan.pl:1777
+msgid "Display version information."
+msgstr "Mostra informação da versão."
+
+#. type: =item
+#: ../scripts/chdist.pl:59
+msgid "B<create> I<DIST> [I<URL> I<RELEASE> I<SECTIONS>]"
+msgstr "B<create> I<DIST> [I<URL> I<RELEASE> I<SECTIONS>]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:61
+msgid "Prepare a new tree named I<DIST>"
+msgstr "Prepara uma nova árvore chamada I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:63
+msgid "B<apt> I<DIST> <B<update>|B<source>|B<show>|B<showsrc>|...>"
+msgstr "B<apt> I<DIST> <B<update>|B<source>|B<show>|B<showsrc>|...>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:65
+msgid "Run B<apt> inside I<DIST>"
+msgstr "Corre B<apt> dentro de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:67
+msgid "B<apt-get> I<DIST> <B<update>|B<source>|...>"
+msgstr "B<apt-get> I<DIST> <B<update>|B<source>|...>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:69
+msgid "Run B<apt-get> inside I<DIST>"
+msgstr "Corre B<apt-get> dentro de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:71
+msgid "B<apt-cache> I<DIST> <B<show>|B<showsrc>|...>"
+msgstr "B<apt-cache> I<DIST> <B<show>|B<showsrc>|...>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:73
+msgid "Run B<apt-cache> inside I<DIST>"
+msgstr "Corre B<apt-cache> dentro de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:75
+msgid "B<apt-file> I<DIST> <B<update>|B<search>|...>"
+msgstr "B<apt-file> I<DIST> <B<update>|B<search>|...>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:77
+msgid "Run B<apt-file> inside I<DIST>"
+msgstr "Corre B<apt-file> dentro de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:79
+msgid "B<apt-rdepends> I<DIST> [...]"
+msgstr "B<apt-rdepends> I<DIST> [...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:81
+msgid "Run B<apt-rdepends> inside I<DIST>"
+msgstr "Corre B<apt-rdepends> dentro de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:83
+msgid "B<aptitude> I<DIST> [...]"
+msgstr "B<aptitude> I<DIST> [...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:85
+msgid "Run B<aptitude> inside I<DIST>"
+msgstr "Corre B<aptitude> dentro de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:87
+msgid "B<src2bin> I<DIST SRCPKG>"
+msgstr "B<src2bin> I<DIST SRCPKG>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:89
+msgid "List binary packages for I<SRCPKG> in I<DIST>"
+msgstr "Lista pacotes binários para I<SRCPKG> em I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:91
+msgid "B<bin2src> I<DIST BINPKG>"
+msgstr "B<bin2src> I<DIST BINPKG>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:93
+msgid "List source package for I<BINPKG> in I<DIST>"
+msgstr "Lista pacote fonte para I<BINPKG> em I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:95
+msgid "B<compare-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+msgstr "B<compare-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+
+#. type: =item
+#: ../scripts/chdist.pl:97
+msgid "B<compare-bin-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+msgstr "B<compare-bin-packages> I<DIST1 DIST2> [I<DIST3>, ...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:99
+msgid "List versions of packages in several I<DIST>ributions"
+msgstr "Lista versões de pacotes em várias I<DIST>ribuições."
+
+#. type: =item
+#: ../scripts/chdist.pl:101
+msgid "B<compare-versions> I<DIST1 DIST2>"
+msgstr "B<compare-versions> I<DIST1 DIST2>"
+
+#. type: =item
+#: ../scripts/chdist.pl:103
+msgid "B<compare-bin-versions> I<DIST1 DIST2>"
+msgstr "B<compare-bin-versions> I<DIST1 DIST2>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:105
+msgid ""
+"Same as B<compare-packages>/B<compare-bin-packages>, but also runs B<dpkg --"
+"compare-versions> and display where the package is newer."
+msgstr ""
+"O mesmo que B<compare-packages>/B<compare-bin-packages>, mas também corre "
+"B<dpkg --compare-versions> e mostra onde o pacote é mais recente."
+
+#. type: =item
+#: ../scripts/chdist.pl:108
+msgid "B<compare-src-bin-packages> I<DIST>"
+msgstr "B<compare-src-bin-packages> I<DIST>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:110
+msgid "Compare sources and binaries for I<DIST>"
+msgstr "Compara fontes e binários para I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:112
+msgid "B<compare-src-bin-versions> I<DIST>"
+msgstr "B<compare-src-bin-versions> I<DIST>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:114
+msgid ""
+"Same as B<compare-src-bin-packages>, but also run B<dpkg --compare-versions> "
+"and display where the package is newer"
+msgstr ""
+"O mesmo que B<compare-src-bin-packages>, mas também corre B<dpkg --compare-"
+"versions> e mostra onde o pacote é mais recente."
+
+#. type: =item
+#: ../scripts/chdist.pl:117
+msgid "B<grep-dctrl-packages> I<DIST> [...]"
+msgstr "B<grep-dctrl-packages> I<DIST> [...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:119
+msgid "Run B<grep-dctrl> on F<*_Packages> inside I<DIST>"
+msgstr "Corre B<grep-dctrl> em F<*_Packages> dentro de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:121
+msgid "B<grep-dctrl-sources> I<DIST> [...]"
+msgstr "B<grep-dctrl-sources> I<DIST> [...]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:123
+msgid "Run B<grep-dctrl> on F<*_Sources> inside I<DIST>"
+msgstr "Corre B<grep-dctrl> em F<*_Sources> dentro de I<DIST>"
+
+#. type: =item
+#: ../scripts/chdist.pl:125
+msgid "B<list>"
+msgstr "B<list>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:127
+msgid "List available I<DIST>s"
+msgstr "Lista I<DIST>s disponíveis"
+
+#. type: textblock
+#: ../scripts/chdist.pl:133
+msgid ""
+"This program is copyright 2007 by Lucas Nussbaum and Luk Claes. This program "
+"comes with ABSOLUTELY NO WARRANTY."
+msgstr ""
+"Este programa tem copyright 2007 por Lucas Nussbaum e Luk Claes. Este "
+"programa não tem ABSOLUTAMENTE NENHUMA GARANTIA."
+
+#. type: TH
+#: ../scripts/checkbashisms.1:1
+#, no-wrap
+msgid "CHECKBASHISMS"
+msgstr "CHECKBASHISMS"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:4
+msgid "checkbashisms - check for bashisms in /bin/sh scripts"
+msgstr "checkbashisms - procura por bashisms em scripts /bin/sh"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:6
+msgid "B<checkbashisms> I<script> ..."
+msgstr "B<checkbashisms> I<script> ..."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:8
+msgid "B<checkbashisms --help>|B<--version>"
+msgstr "B<checkbashisms --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:14
+msgid ""
+"B<checkbashisms>, based on one of the checks from the B<lintian> system, "
+"performs basic checks on I</bin/sh> shell scripts for the possible presence "
+"of bashisms. It takes the names of the shell scripts on the command line, "
+"and outputs warnings if possible bashisms are detected."
+msgstr ""
+"B<checkbashisms>, baseado numa das verificações do sistema B<lintian>, "
+"executa verificações básicas em scripts de shell I</bin/sh> para a presença "
+"possível de bashisms. Recebe os nomes dos scripts shell na linha de "
+"comandos, e escreve avisos se forem detetados possíveis bashisms."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:19
+msgid ""
+"Note that the definition of a bashism in this context roughly equates to \"a "
+"shell feature that is not required to be supported by POSIX\"; this means "
+"that some issues flagged may be permitted under optional sections of POSIX, "
+"such as XSI or User Portability."
+msgstr ""
+"Note que a definição de bashism neste contexto equivale aproximadamente a "
+"\"uma falha de shell que não é necessário que seja suportada pelo POSIX\"; "
+"Isto significa que alguns problemas sinalizados possam ser permitidos sob "
+"secções opcionais do POSIX, tais como XSI ou Portabilidade de Utilizador."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:23
+msgid ""
+"In cases where POSIX and Debian Policy disagree, B<checkbashisms> by default "
+"allows extensions permitted by Policy but may also provide options for "
+"stricter checking."
+msgstr ""
+"Em casos onde o POSIX e a Política Debian discordam, o B<checkbashisms> por "
+"predefinição permite extensões permitidas pela Política mas também "
+"disponibiliza opções para verificações mais estritas."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:24 ../scripts/debchange.1:399
+#: ../scripts/debdiff.1:176 ../scripts/debrelease.1:99 ../scripts/debsign.1:99
+#: ../scripts/dep3changelog.1:16 ../scripts/dscverify.1:37
+#: ../scripts/pts-subscribe.1:28 ../scripts/rc-alert.1:21
+#: ../scripts/uupdate.1:101 ../scripts/whodepends.1:11
+#: ../scripts/who-uploads.1:45 ../scripts/who-permits-upload.pl:71
+#: ../scripts/wnpp-alert.1:23 ../scripts/wnpp-check.1:20
+#, no-wrap
+msgid "B<--help>, B<-h>"
+msgstr "B<--help>, B<-h>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:27 ../scripts/debdiff.1:179
+#: ../scripts/manpage-alert.1:16 ../scripts/mk-build-deps.pl:113
+#: ../scripts/rc-alert.1:24 ../scripts/wnpp-alert.1:26
+#: ../scripts/wnpp-check.1:23
+msgid "Show a summary of options."
+msgstr "Mostra um sumário de opções."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:27
+#, no-wrap
+msgid "B<--newline>, B<-n>"
+msgstr "B<--newline>, B<-n>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:30
+msgid ""
+"Check for \"B<echo -n>\" usage (non POSIX but required by Debian Policy "
+"10.4.)"
+msgstr ""
+"Verifica por uso de \"B<echo -n>\" (não POSIX mas requerido pela Debian "
+"Policy 10.4.)"
+
+#. type: TP
+#: ../scripts/checkbashisms.1:30
+#, no-wrap
+msgid "B<--posix>, B<-p>"
+msgstr "B<--posix>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:34
+msgid ""
+"Check for issues which are non POSIX but required to be supported by Debian "
+"Policy 10.4 (implies B<-n>)."
+msgstr ""
+"Verifica por problemas que são não POSIX mas requeridos serem suportados por "
+"Debian Policy 10.4 (implica B<-n>)."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:34
+#, no-wrap
+msgid "B<--force>, B<-f>"
+msgstr "B<--force>, B<-f>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:39
+msgid ""
+"Force each script to be checked, even if it would normally not be (for "
+"instance, it has a bash or non POSIX shell shebang or appears to be a shell "
+"wrapper)."
+msgstr ""
+"Força cada script a ser verificado, mesmo que normalmente não o fosse (por "
+"exemplo, tem shebang de shell bash ou não-POSIX ou parece ser um invólucro "
+"de shell)."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:39
+#, no-wrap
+msgid "B<--lint>, B<-l>"
+msgstr "B<--lint>, B<-l>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:43
+msgid ""
+"Act like a linter, for integration into a text editor. Possible bashisms "
+"will be printed in stdout, like so:"
+msgstr ""
+"Actua como um vinculador, para integração com um editor de texto. Os "
+"bashisms possíveis são escritos no stdout, como:"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:45
+msgid "I<{filename}:{lineno}:1: warning: possible bashism; {explanation}>"
+msgstr "I<{filename}:{lineno}:1: warning: possible bashism; {explanation}>"
+
+#. type: TP
+#: ../scripts/checkbashisms.1:45
+#, no-wrap
+msgid "B<--extra>, B<-x>"
+msgstr "B<--extra>, B<-x>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:52
+msgid ""
+"Highlight lines which, whilst they do not contain bashisms, may be useful in "
+"determining whether a particular issue is a false positive which may be "
+"ignored. For example, the use of \"B<$BASH_ENV>\" may be preceded by "
+"checking whether \"B<$BASH>\" is set."
+msgstr ""
+"Destacar quais as linhas, embora não contenham bashisms, pode ser útil em "
+"determinar se um problema particular é um falso positivo o qual pode ser "
+"ignorado. Por exemplo, o uso de \"B<$BASH_ENV>\" pode ser precedido por "
+"verificar se \"B<$BASH>\" está definido."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:52
+#, no-wrap
+msgid "B<--early-fail>, B<-e>"
+msgstr "B<--early-fail>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:55
+msgid "Exit right after a first error is seen."
+msgstr "Termina logo após o primeiro erro ser encontrado."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:55 ../scripts/debdiff.1:179
+#: ../scripts/rc-alert.1:24 ../scripts/whodepends.1:14
+#: ../scripts/wnpp-alert.1:26 ../scripts/wnpp-check.1:23
+#, no-wrap
+msgid "B<--version>, B<-v>"
+msgstr "B<--version>, B<-v>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:58 ../scripts/debdiff.1:182
+#: ../scripts/getbuildlog.1:31 ../scripts/grep-excuses.1:29
+#: ../scripts/manpage-alert.1:19 ../scripts/mk-build-deps.pl:117
+#: ../scripts/rc-alert.1:27 ../scripts/whodepends.1:17
+#: ../scripts/wnpp-alert.1:29 ../scripts/wnpp-check.1:26
+msgid "Show version and copyright information."
+msgstr "Mostra informação de versão e copyright."
+
+#. type: SH
+#: ../scripts/checkbashisms.1:58 ../scripts/debdiff.1:247
+#, no-wrap
+msgid "EXIT VALUES"
+msgstr "VALORES DE SAÍDA"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:62
+msgid ""
+"The exit value will be 0 if no possible bashisms or other problems were "
+"detected. Otherwise it will be the sum of the following error values:"
+msgstr ""
+"O valor de saída será 0 se não for detetado nenhum possível bashisms ou "
+"outros problemas. Caso contrário, será a soma dos seguintes valores de erro:"
+
+#. type: TP
+#: ../scripts/checkbashisms.1:62 ../scripts/dscextract.1:24
+#: ../scripts/wnpp-check.1:32
+#, no-wrap
+msgid "1"
+msgstr "1"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:65
+msgid "A possible bashism was detected."
+msgstr "Foi detetado um possível bashism."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:65 ../scripts/dscextract.1:27
+#, no-wrap
+msgid "2"
+msgstr "2"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:69
+msgid ""
+"A file was skipped for some reason, for example, because it was unreadable "
+"or not found. The warning message will give details."
+msgstr ""
+"Um ficheiro foi saltado por alguma razão, por exemplo, porque não era "
+"legível ou não foi encontrado. A mensagem de aviso irá dar detalhes."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:69
+#, no-wrap
+msgid "4"
+msgstr "4"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:72
+msgid "No bashisms were detected in a bash script."
+msgstr "Nenhum bashism foi detetado num script bash."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:74
+msgid "B<lintian>(1)"
+msgstr "B<lintian>(1)"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:77
+msgid ""
+"B<checkbashisms> was originally written as a shell script by Yann Dirson "
+"E<lt>I<dirson@debian.org>E<gt> and rewritten in Perl with many more features "
+"by Julian Gilbey E<lt>I<jdg@debian.org>E<gt>."
+msgstr ""
+"B<checkbashisms> foi escrito originalmente como um script de shell por Yann "
+"Dirson E<lt>I<dirson@debian.org>E<gt> e rescrito em Perl com muitas mais "
+"funcionalidades por Julian Gilbey E<lt>I<jdg@debian.org>E<gt>."
+
+#. type: TH
+#: ../scripts/cowpoke.1:5
+#, no-wrap
+msgid "COWPOKE"
+msgstr "COWPOKE"
+
+#. type: TH
+#: ../scripts/cowpoke.1:5
+#, no-wrap
+msgid "April 28, 2008"
+msgstr "28 Abril 2008"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:20
+msgid "cowpoke - Build a Debian source package in a remote cowbuilder instance"
+msgstr ""
+"cowpoke - Compila um pacote fonte Debian numa instância cowbuilder remota"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:23
+msgid "B<cowpoke> [I<options>]I< packagename.dsc>"
+msgstr "B<cowpoke> [I<options>]I< packagename.dsc>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:27
+msgid ""
+"Uploads a Debian source package to a B<cowbuilder> host and builds it, "
+"optionally also signing and uploading the result to an incoming queue."
+msgstr ""
+"Envia um pacote fonte Debian para uma máquina B<cowbuilder> e compila-o, "
+"opcionalmente também o assina e envia o resultado para uma fila de entrada."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:31 ../scripts/debsnap.1:28
+msgid "The following options are available:"
+msgstr "As seguintes opções estão disponíveis:"
+
+#. type: TP
+#: ../scripts/cowpoke.1:32
+#, no-wrap
+msgid "B<--arch=>I<architecture>"
+msgstr "B<--arch=>I<architecture>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:38
+msgid ""
+"Specify the Debian architecture(s) to build for. A space separated list of "
+"architectures may be used to build for all of them in a single pass. Valid "
+"arch names are those returned by B<dpkg-architecture>(1) for "
+"B<DEB_BUILD_ARCH>."
+msgstr ""
+"Especifica as arquitectura(s) Debian para onde compilar. Pode ser usada uma "
+"lista de arquitecturas separadas por espaços para se compilar para todas "
+"elas num único passo. Os nomes de arquitecturas válidos são aqueles "
+"retornados por B<dpkg-architecture>(1) para B<DEB_BUILD_ARCH>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:39
+#, no-wrap
+msgid "B<--dist=>I<distribution>"
+msgstr "B<--dist=>I<distribution>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:47
+msgid ""
+"Specify the Debian distribution(s) to build for. A space separated list of "
+"distributions may be used to build for all of them in a single pass. Either "
+"codenames (such as B<sid>, or B<squeeze>) or distribution names (such as "
+"B<unstable>, or B<experimental>) may be used, but you should usually stick "
+"to using one or the other consistently as this name may be used in file "
+"paths and to locate old packages for comparison reporting."
+msgstr ""
+"Especifica as distribuições Debian para onde compilar. Pode ser usada uma "
+"lista de distribuições separadas por espaços para se compilar para todas "
+"elas num único passo. Pode ser usados ou nomes de código (como B<sid>, ou "
+"B<squeeze>) ou nomes de distribuições (como B<unstable>, ou "
+"B<experimental>), mas você deve geralmente manter-se a usar um ou o outro "
+"consistentemente pois este nome pode ser usado em caminhos de ficheiro e "
+"para localizar pacotes antigos para relatórios de comparação."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:55
+msgid ""
+"It is now also possible to use locally defined names with this option, when "
+"used in conjunction with the B<BASE_DIST> option in a configuration file. "
+"This permits the maintenance and use of specially configured build chroots, "
+"which can source package dependencies from the backports archives or a local "
+"repository, or have other unusual configuration options set, without "
+"polluting the chroots you use for clean package builds intended for upload "
+"to the main repositories. See the description of B<BASE_DIST> below."
+msgstr ""
+"É também possível usar nomes definidos localmente com esta opção quando "
+"usada em conjunto com a opção B<BASE_DIST> num ficheiro de configuração. "
+"Isto permite a manutenção e o uso de chroots de compilação configuradas "
+"especialmente, que podem usar como fonte de dependências de pacotes os "
+"arquivos backports ou um repositório local, ou se você tem outro conjunto de "
+"opções de configuração pouco usual, sem poluir as chroots que você usa para "
+"limpar compilações de pacotes destinados a serem enviados para os "
+"repositórios principais. Veja a descrição de B<BASE_DIST> em baixo."
+
+#. type: TP
+#: ../scripts/cowpoke.1:56
+#, no-wrap
+msgid "B<--buildd=>I<host>"
+msgstr "B<--buildd=>I<host>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:59
+msgid "Specify the remote host to build on."
+msgstr "Especifica a máquina remota onde compilar."
+
+#. type: TP
+#: ../scripts/cowpoke.1:60
+#, no-wrap
+msgid "B<--buildd-user=>I<name>"
+msgstr "B<--buildd-user=>I<name>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:63
+msgid "Specify the remote user to build as."
+msgstr "Especifica o utilizador remoto para compilar como."
+
+#. type: TP
+#: ../scripts/cowpoke.1:64 ../scripts/debchange.1:199
+#, no-wrap
+msgid "B<--create>"
+msgstr "B<--create>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:69
+msgid ""
+"Create the remote B<cowbuilder> root if it does not already exist. If this "
+"option is not passed it is an error for the specified B<--dist> or B<--arch> "
+"to not have an existing B<cowbuilder> root in the expected location."
+msgstr ""
+"Cria a raiz B<cowbuilder> remota se esta não existir já. Se esta opção não "
+"for passada é um erro para a B<--dist> ou B<--arch> especificada não ter uma "
+"raiz B<cowbuilder> existente na localização esperada."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:74
+msgid ""
+"The B<--buildd-user> must have permission to create the B<RESULT_DIR> on the "
+"build host, or an admin with the necessary permission must first create it "
+"and give that user (or some group they are in) write access to it, for this "
+"option to succeed."
+msgstr ""
+"O B<--buildd-user> tem de ter permissões para criar o B<RESULT_DIR> na "
+"máquina de compilação, ou então um administrador com as permissões "
+"necessárias tem de primeiro o criar e dar a esse utilizador (ou a algum "
+"grupo a que ele pertença) acesso de escrita a ele, para que esta opção tenha "
+"sucesso."
+
+#. type: TP
+#: ../scripts/cowpoke.1:75
+#, no-wrap
+msgid "B<--return=>[I<path>]"
+msgstr "B<--return=>[I<path>]"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:79
+msgid ""
+"Copy results of the build to I<path>. If I<path> is not specified, then "
+"return them to the current directory. The given I<path> must exist, it will "
+"not be created."
+msgstr ""
+"Copia resultados da compilação para I<path>. Se I<path> não for "
+"especificado, então retorna-os para o directório actual. O I<path> dado tem "
+"de existir, não será criado."
+
+#. type: TP
+#: ../scripts/cowpoke.1:80
+#, no-wrap
+msgid "B<--no-return>"
+msgstr "B<--no-return>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:84
+msgid ""
+"Do not copy results of the build to B<RETURN_DIR> (overriding a path set for "
+"it in the configuration files)."
+msgstr ""
+"Não copia os resultados da compilação para B<RETURN_DIR> (sobrepondo um "
+"caminho definido para isso nos ficheiros de configuração)."
+
+#. type: TP
+#: ../scripts/cowpoke.1:85
+#, no-wrap
+msgid "B<--dpkg-opts=>I<'opt1 opt2 ...'>"
+msgstr "B<--dpkg-opts=>I<'opt1 opt2 ...'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:90
+msgid ""
+"Specify additional options to be passed to B<dpkg-buildpackage>(1). "
+"Multiple options are delimited with spaces. This will override any options "
+"specified in B<DEBBUILDOPTS> in the build host's I<pbuilderrc>."
+msgstr ""
+"Especifica opções adicionais a serem passadas a B<dpkg-buildpackage>(1). "
+"Múltiplas opções são delimitadas com espaços. Isto irá sobrepor quaisquer "
+"opções especificadas em B<DEBBUILDOPTS> em I<pbuilderrc> da máquina de "
+"compilação."
+
+#. type: TP
+#: ../scripts/cowpoke.1:91
+#, no-wrap
+msgid "B<--create-opts=>I<'cowbuilder option'>"
+msgstr "B<--create-opts=>I<'cowbuilder option'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:97
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> when a "
+"chroot is first created (using the B<--create> option above). If multiple "
+"arguments need to be passed, this option should be specified separately for "
+"each of them."
+msgstr ""
+"Especifica argumentos adicionais a serem passados literalmente a "
+"B<cowbuilder> quando uma chroot é criada pela primeira vez (usando a opção "
+"B<--create> de cima). Se precisarem de ser passados vários argumentos, esta "
+"opção deve ser especificada separadamente para cada um deles."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:99
+msgid ""
+"E.g., B<--create-opts \"--othermirror\" --create-opts \"deb http:// ...\">"
+msgstr ""
+"Ex., B<--create-opts \"--othermirror\" --create-opts \"deb http:// ...\">"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:102
+msgid ""
+"This option will override any B<CREATE_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+"Esta opção irá sobrepor qualquer B<CREATE_OPTS> especificada para uma chroot "
+"nos ficheiros de configuração do cowpoke."
+
+#. type: TP
+#: ../scripts/cowpoke.1:103
+#, no-wrap
+msgid "B<--update-opts=>I<'cowbuilder option'>"
+msgstr "B<--update-opts=>I<'cowbuilder option'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:108
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> if the "
+"base of the chroot is updated. If multiple arguments need to be passed, "
+"this option should be specified separately for each of them."
+msgstr ""
+"Especifica argumentos adicionais a serem passados literalmente a "
+"B<cowbuilder> se a base da chroot for actualizada. Se precisarem de ser "
+"passados vários argumentos, esta opção deve ser especificada separadamente "
+"para cada um deles."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:111
+msgid ""
+"This option will override any B<UPDATE_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+"Esta opção irá sobrepor quaisquer B<UPDATE_OPTS> especificadas para uma "
+"chroot nos ficheiros de configuração do cowpoke."
+
+#. type: TP
+#: ../scripts/cowpoke.1:112
+#, no-wrap
+msgid "B<--build-opts=>I<'cowbuilder option'>"
+msgstr "B<--build-opts=>I<'cowbuilder option'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:117
+msgid ""
+"Specify additional arguments to be passed verbatim to B<cowbuilder> when a "
+"package build is performed. If multiple arguments need to be passed, this "
+"option should be specified separately for each of them."
+msgstr ""
+"Especifica argumentos adicionais a serem passados literalmente a "
+"B<cowbuilder> quando é executada uma compilação de pacote. Se precisarem de "
+"ser passados vários argumentos, esta opção deve ser especificada "
+"separadamente para cada um deles."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:120
+msgid ""
+"This option will override any B<BUILD_OPTS> specified for a chroot in the "
+"cowpoke configuration files."
+msgstr ""
+"Esta opção irá sobrepor quaisquer B<BUILD_OPTS> especificadas para uma "
+"chroot nos ficheiros de configuração do cowpoke."
+
+#. type: TP
+#: ../scripts/cowpoke.1:121
+#, no-wrap
+msgid "B<--sign=>I<keyid>"
+msgstr "B<--sign=>I<keyid>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:125
+msgid ""
+"Specify the key to sign packages with. This will override any B<SIGN_KEYID> "
+"specified for a chroot in the cowpoke configuration files."
+msgstr ""
+"Especifica a chave com que assinar os pacotes. Esta opção irá sobrepor "
+"quaisquer B<SIGN_KEYID> especificadas para uma chroot nos ficheiros de "
+"configuração do cowpoke."
+
+#. type: TP
+#: ../scripts/cowpoke.1:126
+#, no-wrap
+msgid "B<--upload=>I<queue>"
+msgstr "B<--upload=>I<queue>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:130
+msgid ""
+"Specify the dput queue to upload signed packages to. This will override any "
+"B<UPLOAD_QUEUE> specified for a chroot in the cowpoke configuration files."
+msgstr ""
+"Especifica a fila dput para onde enviar pacotes assinados. Esta opção irá "
+"sobrepor quaisquer B<UPLOAD_QUEUE> especificadas para uma chroot nos "
+"ficheiros de configuração do cowpoke."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:134
+msgid ""
+"Display a brief summary of the available options and current configuration."
+msgstr "Mostra um breve sumário das opções disponíveis e configuração actual."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:138
+msgid "Display the current version information."
+msgstr "Mostra informação da versão actual."
+
+#. type: SH
+#: ../scripts/cowpoke.1:140 ../scripts/debsnap.1:82
+#, no-wrap
+msgid "CONFIGURATION OPTIONS"
+msgstr "OPÇÕES DE CONFIGURAÇÃO"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:146
+msgid ""
+"When B<cowpoke> is run the following configuration options are read from "
+"global, per-user, and per-project configuration files if present. File "
+"paths may be absolute or relative, the latter being relative to the "
+"B<BUILDD_USER>'s home directory. Since the paths are typically quoted when "
+"used, tilde expansion will B<not> be performed on them."
+msgstr ""
+"Quando o B<cowpoke> é corrido, as seguintes opções de configuração são lidas "
+"de ficheiros de configuração globais, por-utilizador, e por-projeto se "
+"presentes. Os caminhos dos ficheiros podem ser absolutos ou relativos, Os "
+"últimos sendo relativos ao directório home de B<BUILDD_USER>. Como os "
+"caminhos são tipicamente citados quando usados, a expansão de til B<não> "
+"será executada neles."
+
+#. type: SS
+#: ../scripts/cowpoke.1:147
+#, no-wrap
+msgid "Global defaults"
+msgstr "Predefinições globais"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:149
+msgid ""
+"These apply to every I<arch> and I<dist> in a single cowpoke invocation."
+msgstr ""
+"Isto aplica-se a todos I<arch> e I<dist> numa única invocação do cowpoke"
+
+#. type: TP
+#: ../scripts/cowpoke.1:150
+#, no-wrap
+msgid "B<BUILDD_HOST>"
+msgstr "B<BUILDD_HOST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:154
+msgid ""
+"The network address or fqdn of the build machine where B<cowbuilder> is "
+"configured. This may be overridden by the B<--buildd> command line option."
+msgstr ""
+"O endereço de rede ou fqdn da máquina de compilação onde o B<cowbuilder> é "
+"configurado. Isto pode ser sobreposto pela opção de linha de comandos B<--"
+"buildd>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:154
+#, no-wrap
+msgid "B<BUILDD_USER>"
+msgstr "B<BUILDD_USER>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:160
+msgid ""
+"The unprivileged user name for operations on the build machine. This "
+"defaults to the local name of the user executing B<cowpoke> (or to a "
+"username that is specified in your SSH configuration for B<BUILDD_HOST>), "
+"and may be overridden by the B<--buildd-user> command line option."
+msgstr ""
+"O nome de utilizador sem privilégios para operações na máquina de "
+"compilação. Isto usa por predefinição o nome local do utilizador que executa "
+"o B<cowpoke> (ou para um nome de utilizador que esteja especificado na sua "
+"configuração de SSH para B<BUILDD_HOST>), e pode ser sobreposto pela opção "
+"de linha de comandos B<--buildd-user>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:160
+#, no-wrap
+msgid "B<BUILDD_ARCH>"
+msgstr "B<BUILDD_ARCH>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:167
+msgid ""
+"The Debian architecture(s) to build for. This must match the "
+"B<DEB_BUILD_ARCH> of the build chroot being used. It defaults to the local "
+"machine architecture where B<cowpoke> is executed, and may be overridden by "
+"the B<--arch> command line option. A (quoted) space separated list of "
+"architectures may be used here to build for all of them in a single pass."
+msgstr ""
+"As arquitectura(s) Debian para qual compilar. Isto tem de corresponder a "
+"B<DEB_BUILD_ARCH> da chroot de compilação a ser usada. Predefinido para a "
+"arquitectura da máquina local onde é executado o B<cowpoke>, e pode ser "
+"sobreposto pela opção de linha de comandos B<--arch>. Uma lista (citada) de "
+"arquitecturas separadas por espaços pode ser usada aqui para se compilar "
+"para todas elas num único passo."
+
+#. type: TP
+#: ../scripts/cowpoke.1:167
+#, no-wrap
+msgid "B<BUILDD_DIST>"
+msgstr "B<BUILDD_DIST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:172
+msgid ""
+"The Debian distribution(s) to build for. A (quoted) space separated list of "
+"distributions may be used to build for all of them in a single pass. This "
+"may be overridden by the B<--dist> command line option."
+msgstr ""
+"A(s) distribuições Debian para as quais compilar. Pode ser usada uma lista "
+"(citada) de distribuições separadas por espaços para se compilar para todas "
+"elas num único passo. Isto pode ser sobreposto pela opção de linha de "
+"comandos B<--dist>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:173
+#, no-wrap
+msgid "B<INCOMING_DIR>"
+msgstr "B<INCOMING_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:177
+msgid ""
+"The directory path on the build machine where the source package will "
+"initially be placed. This must be writable by the B<BUILDD_USER>."
+msgstr ""
+"O caminho de directório na máquina de compilação onde o pacote fonte será "
+"inicialmente colocado. O B<BUILDD_USER> tem de ter acesso de escrita a isto."
+
+#. type: TP
+#: ../scripts/cowpoke.1:177
+#, no-wrap
+msgid "B<PBUILDER_BASE>"
+msgstr "B<PBUILDER_BASE>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:182
+msgid ""
+"The filesystem root for all pbuilder CoW and result files. I<Arch> and "
+"I<dist> specific subdirectories will normally be created under this. The "
+"apt cache and temporary build directory will also be located under this path."
+msgstr ""
+"A raiz do sistema de ficheiros para todos pbuilder CoW e ficheiros "
+"resultantes. Os sub-directórios específicos de I<Arch> e I<dist> irão "
+"normalmente ser criados sob este. A cache do apt e o directório de "
+"compilação temporário serão também localizados sob este caminho."
+
+#. type: TP
+#: ../scripts/cowpoke.1:183
+#, no-wrap
+msgid "B<SIGN_KEYID>"
+msgstr "B<SIGN_KEYID>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:194
+msgid ""
+"If this option is set, it is expected to contain the gpg key ID to pass to "
+"B<debsign>(1) if the packages are to be remotely signed. You will be "
+"prompted to confirm whether you wish to sign the packages after all builds "
+"are complete. If this option is unset or an empty string, no attempt to "
+"sign packages will be made. It may be overridden on an I<arch> and I<dist> "
+"specific basis using the I<arch>B<_>I<dist>B<_SIGN_KEYID> option described "
+"below, or per-invocation with the B<--sign> command line option."
+msgstr ""
+"Se esta opção estiver definida, espera-se que contenha o ID de chave gpg a "
+"passar ao B<debsign>(1) se os pacotes devem ser assinados remotamente. Ser-"
+"lhe-a pedido para confirmar se deseja assinar os pacotes após todas as "
+"compilações estarem completas. Se esta opção não estiver definida ou for uma "
+"string vazia, não será feito nenhuma tentativa de assinar pacotes. Pode ser "
+"sobreposta numa base especifica I<arch> e I<dist> usando a opção "
+"I<arch>B<_>I<dist>B<_SIGN_KEYID> descrita abaixo, ou por-invocação com a "
+"opção de linha de comandos B<--sign>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:195
+#, no-wrap
+msgid "B<UPLOAD_QUEUE>"
+msgstr "B<UPLOAD_QUEUE>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:206
+msgid ""
+"If this option is set, it is expected to contain a 'host' specification for "
+"B<dput>(1) which will be used to upload them after they are signed. You "
+"will be prompted to confirm whether you wish to upload the packages after "
+"they are signed. If this option is unset or an empty string, no attempt to "
+"upload packages will be made. If B<SIGN_KEYID> is not set, this option will "
+"be ignored entirely. It may be overridden on an I<arch> and I<dist> "
+"specific basis using the I<arch>B<_>I<dist>B<_UPLOAD_QUEUE> option described "
+"below, or per-invocation with the B<--upload> command line option."
+msgstr ""
+"Se esta opção estiver definida, espera-se que contenha uma especificação "
+"'host' para B<dput>(1) a qual será usada para os enviar após estarem "
+"assinados. Ser-lhe-a pedido para confirmar se deseja enviar os pacotes após "
+"estarem assinados. Se esta opção não estiver definida ou for uma string "
+"vazia, não será feito nenhuma tentativa de enviar pacotes. Se B<SIGN_KEYID> "
+"não estiver definido, esta opção será inteiramente ignorada. Pode ser "
+"sobreposta numa base especifica I<arch> e I<dist> usando a opção "
+"I<arch>B<_>I<dist>B<_UPLOAD_QUEUE> descrita abaixo, ou por-invocação com a "
+"opção de linha de comandos B<--upload>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:208
+#, no-wrap
+msgid "B<BUILDD_ROOTCMD>"
+msgstr "B<BUILDD_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:216
+msgid ""
+"The command to use to gain root privileges on the remote build machine. If "
+"unset the default is B<sudo>(8). This is only required to invoke "
+"B<cowbuilder> and allow it to enter its chroot, so you may restrict this "
+"user to only being able to run that command with escalated privileges. "
+"Something like this in sudoers will enable invoking B<cowbuilder> without an "
+"additional password entry required:"
+msgstr ""
+"O comando a usar para ganhar privilégios de root na máquina de compilação "
+"remota. Se não definido a predefinição é B<sudo>(8). Isto é apenas requerido "
+"para invocar B<cowbuilder> e permitir-lhe entrar na sua chroot, assim você "
+"pode restringir este utilizador a apenas ser capaz de correr esse comando "
+"com privilégios escalados. Algo como isto em sudoers irá permitir invocar "
+"B<cowbuilder> sem se requerer uma palavra passe adicional:"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:220
+msgid "youruser ALL = NOPASSWD: /usr/sbin/cowbuilder"
+msgstr "youruser ALL = NOPASSWD: /usr/sbin/cowbuilder"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:227
+msgid ""
+"Alternatively you could use SSH with a forwarded key, or whatever other "
+"mechanism suits your local access policy. Using B<su -c> isn't really "
+"suitable here due to its quoting requirements being somewhat different to "
+"the rest."
+msgstr ""
+"Alternativamente você pode usar SSH com uma chave reencaminhada, ou qualquer "
+"outro mecanismo apropriado para a sua política de acesso local. Usar B<su -"
+"c> não é realmente apropriado aqui devido aos seus requerimentos de citação "
+"serem algo diferentes do resto."
+
+#. type: TP
+#: ../scripts/cowpoke.1:228
+#, no-wrap
+msgid "B<DEBOOTSTRAP>"
+msgstr "B<DEBOOTSTRAP>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:232
+msgid ""
+"The utility to use when creating a new build root. Alternatives are "
+"B<debootstrap> or B<cdebootstrap>."
+msgstr ""
+"O utilitário a usar quando se cria uma nova raiz de compilação. As "
+"alternativas são B<debootstrap> ou B<cdebootstrap>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:233
+#, no-wrap
+msgid "B<RETURN_DIR>"
+msgstr "B<RETURN_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:239
+msgid ""
+"If set, package files resulting from the build will be copied to the path "
+"(local or remote) that this is set to, after the build completes. The path "
+"must exist, it will not be created. This option is unset by default and can "
+"be overridden with B<--return> or B<--no-return>."
+msgstr ""
+"Se definido, os ficheiros de pacotes resultantes da compilação serão "
+"copiados para o caminho (local ou remoto) que está aqui definido, após a "
+"compilação estar completa. O caminho tem de existir, ele não será criado. "
+"Esta opção não está definida por predefinição e pode ser sobreposta com B<--"
+"return> ou B<--no-return>."
+
+#. type: SS
+#: ../scripts/cowpoke.1:241
+#, no-wrap
+msgid "Arch and dist specific options"
+msgstr "Opções especificas da arquitectura e distribuição"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:244
+msgid ""
+"These are variables of the form: $arch_$distB<_VAR> which apply only for a "
+"particular target arch/dist build."
+msgstr ""
+"Estas são variáveis do formato: $arch_$distB<_VAR> que se aplicam apenas a "
+"um alvo arch/dist particular de compilação."
+
+#. type: TP
+#: ../scripts/cowpoke.1:245
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_RESULT_DIR>"
+msgstr "I<arch>B<_>I<dist>B<_RESULT_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:256
+msgid ""
+"The directory path on the build machine where the resulting packages (source "
+"and binary) will be found, and where older versions of the package that were "
+"built previously may be found. If any such older packages exist, B<debdiff> "
+"will be used to compare the new package with the previous version after the "
+"build is complete, and the result will be included in the build log. Files "
+"in it must be readable by the B<BUILDD_USER> for sanity checking with "
+"B<lintian>(1) and B<debdiff>(1), and for upload with B<dput>(1). If this "
+"option is not specified for some arch and dist combination then it will "
+"default to I<$PBUILDER_BASE/$arch/$dist/result>"
+msgstr ""
+"O caminho de directório na máquina de compilação onde os pacotes resultantes "
+"(fonte e binário) irão ser encontrados, e onde as versões anteriores do "
+"pacote que foram compiladas antes podem ser encontradas. Se tais pacotes "
+"antigos existirem, o B<debdiff> será usado para comparar o novo pacote com a "
+"versão anterior após a compilação estar completa, e o resultado será "
+"incluído no relatório de compilação. Os ficheiros que lá estão têm de ser "
+"legíveis pelo B<BUILDD_USER> para verificação de sanidade com B<lintian>(1) "
+"e B<debdiff>(1), e para envio com B<dput>(1). Se esta opção não for "
+"especificada para alguma combinação de arquitectura ou distribuição então "
+"irá se predefinir para I<$PBUILDER_BASE/$arch/$dist/result>"
+
+#. type: TP
+#: ../scripts/cowpoke.1:257
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BASE_PATH>"
+msgstr "I<arch>B<_>I<dist>B<_BASE_PATH>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:263
+msgid ""
+"The directory where the CoW master files are to be found (or created if the "
+"B<--create> command line option was passed). If this option is not "
+"specified for some arch or dist then it will default to I<$PBUILDER_BASE/"
+"$arch/$dist/base.cow>"
+msgstr ""
+"O directório onde os ficheiros mestre CoW devem ser encontrados (ou criados "
+"se for passada a opção de linha de comandos B<--create>). Se esta opção não "
+"for especificada para alguma combinação de arquitectura ou distribuição "
+"então irá se predefinir para I<$PBUILDER_BASE/$arch/$dist/base.cow>"
+
+#. type: TP
+#: ../scripts/cowpoke.1:264
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BASE_DIST>"
+msgstr "I<arch>B<_>I<dist>B<_BASE_DIST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:274
+msgid ""
+"The code name to pass as the B<--distribution> option for cowbuilder instead "
+"of I<dist>. This is necessary when I<dist> is a locally significant name "
+"assigned to some specially configured build chroot, such as "
+"'wheezy_backports', and not the formal suite name of a distro release known "
+"to debootstrap. This option cannot be overridden on the command line, since "
+"it would rarely, if ever, make any sense to change it for individual "
+"invocations of B<cowpoke>. If this option is not specified for an arch and "
+"dist combination then it will default to I<dist>."
+msgstr ""
+"O nome de código a passar como opção B<--distribution> para cowbuilder em "
+"vez de I<dist>. Isto é necessário quando I<dist> é um nome com significado "
+"local para alguma chroot de compilação de configuração especial, tal como "
+"'wheezy_backports', e não é o nome de suite formal de um lançamento de "
+"distribuição conhecido do debootstrap. Esta opção não pode ser sobreposta na "
+"linha de comandos, pois raramente, se alguma vez, faria algum sentido muda-"
+"lo para invocações individuais do B<cowpoke>. Se esta opção não for "
+"especificada para alguma combinação de arquitectura ou distribuição então "
+"irá se predefinir para I<dist>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:275
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_CREATE_OPTS>"
+msgstr "I<arch>B<_>I<dist>B<_CREATE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:283
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"when this chroot is created for the first time (using the B<--create> "
+"option). This is useful when options like B<--othermirror> are wanted to "
+"create specialised chroot configurations such as 'wheezy_backports'. By "
+"default this is unset. All values set in it will be overridden if the B<--"
+"create-opts> option is passed on the command line."
+msgstr ""
+"Uma matriz bash que contem opções adicionais a passar literalmente ao "
+"B<cowbuilder> quando esta chroot é criada pela primeira vez (usando a opção "
+"B<--create>). Isto é útil quando opções como B<--othermirror> são precisas "
+"para criar configurações de chroot especializadas tais como "
+"'wheezy_backports'. Por predefinição isto não está definido. Todos os "
+"valores definidos nela serão sobrepostos se a opção B<--create-opts> for "
+"passada na linha de comandos."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:288
+msgid ""
+"Each element in this array corresponds to a single argument (in the ARGV "
+"sense) that will be passed to cowbuilder. This ensures that arguments "
+"which may contain whitespace or have strange quoting requirements or other "
+"special characters will not be mangled before they get to cowbuilder."
+msgstr ""
+"Cada elemento desta matriz corresponde a um único argumento (no sentido "
+"ARGV) que será passado ao cowbuilder. Isto assegura que argumentos que podem "
+"conter espaços em branco ou têm requerimentos estranhos de citações ou "
+"outros caracteres especiais não serão mutilados antes de chegarem ao "
+"cowbuilder."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:290
+msgid "Bash arrays are initialised using the following form:"
+msgstr "Matrizes bash são inicializadas usando o seguinte formato:"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:292
+#, no-wrap
+msgid " OPTS=( \"arg1\" \"arg 2\" \"--option\" \"value\" \"--opt=val\" \"etc. etc.\" )\n"
+msgstr " OPTS=( \"arg1\" \"arg 2\" \"--option\" \"value\" \"--opt=val\" \"etc. etc.\" )\n"
+
+#. type: TP
+#: ../scripts/cowpoke.1:293
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_UPDATE_OPTS>"
+msgstr "I<arch>B<_>I<dist>B<_UPDATE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:298
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"each time the base of this chroot is updated. It behaves similarly to the "
+"B<CREATE_OPTS> option above, except for acting when the chroot is updated."
+msgstr ""
+"Uma matriz bash que contem opções adicionais a passar literalmente ao "
+"B<cowbuilder> a cada vez que a base desta chroot é actualizada. Comporta-se "
+"de modo semelhante à opção B<CREATE_OPTS> em cima, excepto que actua quando "
+"a chroot é actualizada."
+
+#. type: TP
+#: ../scripts/cowpoke.1:299
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_BUILD_OPTS>"
+msgstr "I<arch>B<_>I<dist>B<_BUILD_OPTS>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:306
+msgid ""
+"A bash array containing additional options to pass verbatim to B<cowbuilder> "
+"each time a package build is performed in this chroot. This is useful when "
+"you want to use some option like B<--twice> which cowpoke does not directly "
+"need to care about. It otherwise behaves similarly to B<UPDATE_OPTS> above "
+"except that it acts during the build phase of B<cowbuilder>."
+msgstr ""
+"Uma matriz bash que contem opções adicionais a passar literalmente ao "
+"B<cowbuilder> a cada vez que uma compilação de pacote é executada nesta "
+"chroot. Isto é útil quando você quer usar alguma opção tipo B<--twice> que o "
+"cowpoke não precisa se preocupar directamente. Caso contrário comporta-se de "
+"modo semelhante a B<UPDATE_OPTS> em cima excepto que actua durante a fase de "
+"compilação do B<cowbuilder>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:307
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_SIGN_KEYID>"
+msgstr "I<arch>B<_>I<dist>B<_SIGN_KEYID>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:311
+msgid ""
+"An optional arch and dist specific override for the global B<SIGN_KEYID> "
+"option."
+msgstr ""
+"Uma arquitectura opcional e sobreposição especifica de distribuição para a "
+"opção global B<SIGN_KEYID>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:312
+#, no-wrap
+msgid "I<arch>B<_>I<dist>B<_UPLOAD_QUEUE>"
+msgstr "I<arch>B<_>I<dist>B<_UPLOAD_QUEUE>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:316
+msgid ""
+"An optional arch and dist specific override for the global B<UPLOAD_QUEUE> "
+"option."
+msgstr ""
+"Uma arquitectura opcional e sobreposição especifica de distribuição para a "
+"opção global B<UPLOAD_QUEUE>."
+
+#. type: SH
+#: ../scripts/cowpoke.1:318
+#, no-wrap
+msgid "CONFIGURATION FILES"
+msgstr "FICHEIROS DE CONFIGURAÇÃO"
+
+#. type: TP
+#: ../scripts/cowpoke.1:319
+#, no-wrap
+msgid "I</etc/cowpoke.conf>"
+msgstr "I</etc/cowpoke.conf>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:322
+msgid "Global configuration options. Will override hardcoded defaults."
+msgstr ""
+"Opções de configuração global. Irão sobrepor as predefinições enraizadas."
+
+#. type: TP
+#: ../scripts/cowpoke.1:322
+#, no-wrap
+msgid "I<~/.cowpoke>"
+msgstr "I<~/.cowpoke>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:325 ../scripts/debsnap.1:137
+msgid ""
+"Per-user configuration options. Will override any global configuration."
+msgstr ""
+"Opções de configuração por-utilizador. Irão sobrepor qualquer configuração "
+"global."
+
+#. type: TP
+#: ../scripts/cowpoke.1:325
+#, no-wrap
+msgid "I<.cowpoke>"
+msgstr "I<.cowpoke>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:329
+msgid ""
+"Per-project configuration options. Will override any per-user or global "
+"configuration if B<cowpoke> is called from the directory where they exist."
+msgstr ""
+"Opções de configuração por-projeto. Irão sobrepor qualquer configuração por-"
+"utilizador ou global se o B<cowpoke> for chamado a partir do directório onde "
+"elas existam."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:333
+msgid ""
+"If the environment variable B<COWPOKE_CONF> is set, it specifies an "
+"additional configuration file which will override all of those above. "
+"Options specified explicitly on the command line override all configuration "
+"files."
+msgstr ""
+"Se a variável de ambiente B<COWPOKE_CONF> estiver definida, especifica um "
+"ficheiro de configuração adicional que irá sobrepor a todos os de cima. As "
+"opções especificadas explicitamente na linha de comandos sobrepõem todos os "
+"ficheiros de configuração."
+
+#. type: SH
+#: ../scripts/cowpoke.1:335
+#, no-wrap
+msgid "COWBUILDER CONFIGURATION"
+msgstr "CONFIGURAÇÃO DO COWBUILDER"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:344
+msgid ""
+"There is nothing particularly special required to configure a B<cowbuilder> "
+"instance for use with B<cowpoke>. Simply create them in the flavour you "
+"require with `B<cowbuilder --create>` according to the B<cowbuilder> "
+"documentation, then configure B<cowpoke> with the user, arch, and path "
+"information required to access it, on the machines you wish to invoke it "
+"from (or alternatively configure B<cowpoke> with the path, arch and "
+"distribution information and pass the B<--create> option to it on the first "
+"invocation). The build host running B<cowbuilder> does not require "
+"B<cowpoke> installed locally."
+msgstr ""
+"Não há nada particularmente especial requerido para configurar uma instância "
+"de B<cowbuilder> para usar com B<cowpoke>. Simplesmente crie-os ao gosto que "
+"precisar com `B<cowbuilder --create>` de acordo com a documentação do "
+"B<cowbuilder>, depois configure o B<cowpoke> com a informação de utilizador, "
+"arquitectura e caminho necessário para o acesso, nas máquinas em que a "
+"partir delas deseja o invocar (ou em alternativa configure o B<cowpoke> com "
+"informação do caminho, arquitectura e distribuição e passe a opção B<--"
+"create> a ele na primeira invocação). A máquina de compilação que corre o "
+"B<cowbuilder> não requer o B<cowpoke> instalado localmente."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:354
+msgid ""
+"The build machine should have the B<lintian> and B<devscripts> packages "
+"installed for post-build sanity checking. Upon completion, the build log "
+"and the results of automated checks will be recorded in the "
+"B<INCOMING_DIR>. If you wish to upload signed packages the build machine "
+"will also need B<dput>(1) installed and configured to use the 'I<host>' "
+"alias specified by B<UPLOAD_QUEUE>. If B<rsync>(1) is available on both the "
+"local and build machine, then it will be used to transfer the source package "
+"(this may save on some transfers of the I<orig.tar.*> when building "
+"subsequent Debian revisions)."
+msgstr ""
+"A máquina de compilação deve ter os pacotes B<lintian> e B<devscripts> "
+"instalados para verificações de sanidade pós-compilação. Após conclusão, o "
+"relatório de compilação e os resultados das verificações automatizadas serão "
+"guardadas em B<INCOMING_DIR>. Se você deseja enviar os pacotes assinados, a "
+"máquina de compilação irá também precisar de B<dput>(1) instalado e "
+"configurado para usar o alias 'I<host>' especificado por B<UPLOAD_QUEUE>. Se "
+"B<rsync>(1) estiver disponível em ambas máquinas local e de compilação, "
+"então irá ser usado para transferir o pacote fonte (isto pode poupar algumas "
+"transferências de I<orig.tar.*> quando se compila revisões Debian "
+"subsequentes)."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:360
+msgid ""
+"The user executing B<cowpoke> must have SSH access to the build machine as "
+"the B<BUILDD_USER>. That user must be able to invoke B<cowbuilder> as root "
+"by using the B<BUILDD_ROOTCMD>. Signing keys are not required to be "
+"installed on the build machine (and will be ignored there if they are). If "
+"the package is signed, keys will be expected on the machine that executes "
+"B<cowpoke>."
+msgstr ""
+"O utilizador que executa o B<cowpoke> tem de ter acesso SSH à máquina de "
+"compilação como o B<BUILDD_USER>. Esse utilizador tem de ser capaz de "
+"invocar B<cowbuilder> como root usando B<BUILDD_ROOTCMD>. Não é requerido "
+"que as chaves de assinaturas estejam instaladas na máquina de compilação (e "
+"serão ignoradas se estiverem). Se o pacote for assinado, as chaves são "
+"esperadas na máquina que executa o B<cowpoke>."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:367
+msgid ""
+"When B<cowpoke> is invoked, it will first attempt to update the "
+"B<cowbuilder> image if that has not already been done on the same day. This "
+"is checked by the presence or absence of a I<cowbuilder-$arch-$dist-update-"
+"log-$date> file in the B<INCOMING_DIR>. You may move, remove, or touch this "
+"file if you wish the image to be updated more or less often than that. Its "
+"contents log the output of B<cowbuilder> during the update (or creation) of "
+"the build root."
+msgstr ""
+"Quando o B<cowpoke> é invocado, irá primeiro tentar actualizar a imagem de "
+"B<cowbuilder> se isso não foi já feito no mesmo dia. Isto é verificado pela "
+"presença ou ausência de um ficheiro I<cowbuilder-$arch-$dist-update-log-"
+"$date> em B<INCOMING_DIR>. Você pode mover, remover, ou tocar este ficheiro "
+"se desejar que a imagem seja actualizada com mais ou menos frequência que "
+"isso. O seu conteúdo regista o resultado de B<cowbuilder> durante a "
+"actualização (ou criação) da raiz de compilação."
+
+#. type: =head1
+#: ../scripts/cowpoke.1:369 ../scripts/origtargz.pl:85
+#: ../scripts/rmadison.pl:396
+#, no-wrap
+msgid "NOTES"
+msgstr "NOTAS"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:378
+msgid ""
+"Since B<cowbuilder> creates a chroot, and to do that you need root, "
+"B<cowpoke> also requires some degree of root access. So all the horrible "
+"things that can go wrong with that may well one day rain down upon you. "
+"B<cowbuilder> has been known to accidentally wipe out bind-mounted "
+"filesystems outside the chroot, and worse than that can easily happen. So "
+"be careful, keep good backups of things you don't want to lose on your build "
+"machine, and use B<cowpoke> to keep all that on a machine that isn't your "
+"bleeding edge dev box with your last few hours of uncommitted work."
+msgstr ""
+"Como o B<cowbuilder> cria uma chroot, e para fazer isso você precisa de "
+"root, o B<cowpoke> também requer algum grau de acesso de root. Assim todas "
+"as coisas horríveis que pode correr mal podem um dia cair-lhe em cima. O "
+"B<cowbuilder> é conhecido por acidentalmente limpar sistemas de ficheiros "
+"montados em vinculo fora da chroot, e pior do que isso pode facilmente "
+"acontecer. Por isso tenha cuidado, tenha boas cópias de salvaguarda das "
+"coisas que não deseja perder da sua máquina de compilação, e use B<cowpoke> "
+"para manter tudo isso numa máquina que não é a sua caixa principal de "
+"desenvolvimento onde tem horas de trabalho não submetido."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:384
+msgid "B<cowbuilder>(1), B<pbuilder>(1), B<ssh-agent>(1), B<sudoers>(5)"
+msgstr "B<cowbuilder>(1), B<pbuilder>(1), B<ssh-agent>(1), B<sudoers>(5)"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:388
+msgid "B<cowpoke> was written by Ron E<lt>I<ron@debian.org>E<gt>."
+msgstr "B<cowpoke> foi escrito por Ron E<lt>I<ron@debian.org>E<gt>."
+
+#. type: TH
+#: ../scripts/cvs-debc.1:1 ../scripts/cvs-debrelease.1:1
+#, no-wrap
+msgid "CVS-DEBC"
+msgstr "CVS-DEBC"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:4
+msgid ""
+"cvs-debc - view contents of a cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+"cvs-debc - visualiza o conteúdo de um pacote gerado por cvs-buildpackage/cvs-"
+"debuild"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:6
+msgid "B<cvs-debc> [I<options>] [I<package> ...]"
+msgstr "B<cvs-debc> [I<options>] [I<package> ...]"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:17
+msgid ""
+"B<cvs-debc> is run from the CVS working directory after B<cvs-buildpackage> "
+"or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to locate the I<."
+"changes> file generated in that run. It then displays information about the "
+"I<.deb> files which were generated in that run, by running B<dpkg-deb -I> "
+"and B<dpkg-deb -c> on every I<.deb> archive listed in the I<.changes> file, "
+"assuming that all of the I<.deb> archives live in the same directory as the "
+"I<.changes> file. It is useful for ensuring that the expected files have "
+"ended up in the Debian package."
+msgstr ""
+"B<cvs-debc> corre a partir do directório de trabalho CVS após B<cvs-"
+"buildpackage> ou B<cvs-debuild>. Usa o sistema B<cvs-buildpackage> para "
+"localizar o ficheiro I<.changes> gerado nessa execução. Depois mostra "
+"informação acerca dos ficheiros I<.deb> que foram gerados nessa execução, ao "
+"correr B<dpkg-deb -I> e B<dpkg-deb -c> em cada arquivo I<.deb> listado no "
+"ficheiro I<.changes>, assumindo que todos os arquivos I<.deb> vivem no mesmo "
+"directório que o ficheiro I<.changes>. É útil para assegurar que os "
+"ficheiros esperados acabaram no pacote Debian."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:20
+msgid ""
+"If a list of packages is given on the command line, then only those debs "
+"with names in this list of packages will be processed."
+msgstr ""
+"Se na linha de comandos for dada uma lista de pacotes, então apenas serão "
+"processados esses debs com nomes nesta lista de pacotes."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:24 ../scripts/cvs-debi.1:23
+#: ../scripts/cvs-debrelease.1:21
+msgid ""
+"Note that unlike B<cvs-buildpackage>, the only way to specify the source "
+"package name is with the B<-P> option; you cannot simply have it as the last "
+"command-line parameter."
+msgstr ""
+"Note que ao contrário de B<cvs-buildpackage>, a única maneira de especificar "
+"o nome do pacote fonte é com a opção B<-P>; você não pode simplesmente tê-lo "
+"como o último parâmetro da linha de comandos."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:28 ../scripts/cvs-debi.1:32
+msgid ""
+"All current B<cvs-buildpackage> options are silently accepted; however, only "
+"the ones listed below have any effect. For more details on all of them, see "
+"the B<cvs-buildpackage>(1) manpage."
+msgstr ""
+"Todas as opções do B<cvs-buildpackage> actuais são aceites em silêncio; no "
+"entanto, apenas aquelas listadas abaixo têm algum efeito. Para mais detalhes "
+"sobre todas elas, veja o manual do B<cvs-buildpackage>(1)."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:28 ../scripts/cvs-debi.1:32
+#: ../scripts/cvs-debrelease.1:30 ../scripts/debc.1:65 ../scripts/debi.1:66
+#: ../scripts/debrelease.1:67 ../scripts/debrsign.1:35 ../scripts/debsign.1:72
+#, no-wrap
+msgid "B<-a>I<debian-architecture>, B<-t>I<GNU-system-type>"
+msgstr "B<-a>I<debian-architecture>, B<-t>I<GNU-system-type>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:34 ../scripts/cvs-debi.1:38
+#: ../scripts/cvs-debrelease.1:36 ../scripts/debc.1:71 ../scripts/debi.1:72
+#: ../scripts/debrsign.1:41 ../scripts/debsign.1:78
+msgid ""
+"See B<dpkg-architecture>(1) for a description of these options. They affect "
+"the search for the I<.changes> file. They are provided to mimic the "
+"behaviour of B<dpkg-buildpackage> when determining the name of the I<."
+"changes> file."
+msgstr ""
+"Veja B<dpkg-architecture>(1) para uma descrição destas opções. Elas afectam "
+"a procura pelo ficheiro I<.changes>. São disponibilizadas para imitar o "
+"comportamento do B<dpkg-buildpackage> ao determinar o nome do ficheiro I<."
+"changes>."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:34 ../scripts/cvs-debi.1:38
+#: ../scripts/cvs-debrelease.1:36
+#, no-wrap
+msgid "B<-M>I<module>"
+msgstr "B<-M>I<module>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:37 ../scripts/cvs-debi.1:41
+#: ../scripts/cvs-debrelease.1:39
+msgid "The name of the CVS module."
+msgstr "O nome do módulo CVS."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:37 ../scripts/cvs-debi.1:41
+#: ../scripts/cvs-debrelease.1:39
+#, no-wrap
+msgid "B<-P>I<package>"
+msgstr "B<-P>I<package>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:40 ../scripts/cvs-debi.1:44
+#: ../scripts/cvs-debrelease.1:42
+msgid "The name of the package."
+msgstr "O nome do pacote."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:40 ../scripts/cvs-debi.1:44
+#: ../scripts/cvs-debrelease.1:42
+#, no-wrap
+msgid "B<-V>I<version>"
+msgstr "B<-V>I<version>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:43 ../scripts/cvs-debi.1:47
+#: ../scripts/cvs-debrelease.1:45
+msgid "The version number of the package."
+msgstr "O número de versão do pacote."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:43 ../scripts/cvs-debi.1:47
+#: ../scripts/cvs-debrelease.1:45
+#, no-wrap
+msgid "B<-T>I<tag>"
+msgstr "B<-T>I<tag>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:46 ../scripts/cvs-debi.1:50
+#: ../scripts/cvs-debrelease.1:48
+msgid "The CVS tag to use for exporting sources."
+msgstr "A etiqueta CVS a usar para exportar fontes."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:46 ../scripts/cvs-debi.1:50
+#: ../scripts/cvs-debrelease.1:48
+#, no-wrap
+msgid "B<-R>I<root\\ directory>"
+msgstr "B<-R>I<root\\ directory>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:49 ../scripts/cvs-debi.1:53
+#: ../scripts/cvs-debrelease.1:51
+msgid "Root of the original sources archive."
+msgstr "Raiz do arquivo de fontes original."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:49 ../scripts/cvs-debi.1:53
+#: ../scripts/cvs-debrelease.1:51
+#, no-wrap
+msgid "B<-W>I<work directory>"
+msgstr "B<-W>I<work directory>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:52 ../scripts/cvs-debi.1:56
+#: ../scripts/cvs-debrelease.1:54
+msgid "The full path name for the cvs-buildpackage working directory."
+msgstr ""
+"O nome de caminho completo para o directório de trabalho do cvs-buildpackage."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:52 ../scripts/cvs-debi.1:56
+#: ../scripts/cvs-debrelease.1:54
+#, no-wrap
+msgid "B<-x>I<prefix>"
+msgstr "B<-x>I<prefix>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:55 ../scripts/cvs-debi.1:59
+#: ../scripts/cvs-debrelease.1:57
+msgid "This option provides the CVS default module prefix."
+msgstr "Esta opção fornece o prefixo de módulo predefinido do CVS."
+
+#. type: TP
+#: ../scripts/cvs-debc.1:55 ../scripts/cvs-debi.1:59
+#: ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:99 ../scripts/debi.1:106
+#: ../scripts/debrsign.1:50
+#, no-wrap
+msgid "B<--help>, B<--version>"
+msgstr "B<--help>, B<--version>"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62
+#: ../scripts/cvs-debrelease.1:64 ../scripts/debc.1:102 ../scripts/debi.1:109
+#: ../scripts/debrsign.1:53
+msgid "Show help message and version information respectively."
+msgstr "Mostra mensagem de ajuda e informação de versão, respetivamente."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:63
+msgid "B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1), B<debc>(1)"
+msgstr "B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1), B<debc>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:67 ../scripts/cvs-debi.1:71
+msgid ""
+"B<cvs-buildpackage> was written by Manoj Srivastava, and the current version "
+"of B<debi> was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>. They have "
+"been combined into this program by Julian Gilbey."
+msgstr ""
+"B<cvs-buildpackage> foi escrito por Manoj Srivastava, e a versão actual de "
+"B<debi> foi escrita por by Julian Gilbey E<lt>jdg@debian.orgE<gt>. Ambos "
+"foram combinados neste programa por Julian Gilbey."
+
+#. type: TH
+#: ../scripts/cvs-debi.1:1
+#, no-wrap
+msgid "CVS-DEBI"
+msgstr "CVS-DEBI"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:4
+msgid "cvs-debi - install cvs-buildpackage/cvs-debuild generated package"
+msgstr "cvs-debi - instala um pacote gerado pelo cvs-buildpackage/cvs-debuild"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:6
+msgid "B<cvs-debi> [I<options>] [I<package> ...]"
+msgstr "B<cvs-debi> [I<options>] [I<package> ...]"
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:16
+msgid ""
+"B<cvs-debi> is run from the CVS working directory after B<cvs-buildpackage> "
+"or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to locate the I<."
+"changes> file generated in that run. It then runs B<debpkg -i> on every I<."
+"deb> archive listed in the I<.changes> file to install them, assuming that "
+"all of the I<.deb> archives live in the same directory as the I<.changes> "
+"file. Note that you probably don't want to run this program on a I<."
+"changes> file relating to a different architecture after cross-compiling the "
+"package!"
+msgstr ""
+"B<cvs-debi> corre a partir do directório de trabalho CVS após B<cvs-"
+"buildpackage> ou B<cvs-debuild>. Usa o sistema B<cvs-buildpackage> para "
+"localizar o ficheiro I<.changes> gerado nessa execução. Depois corre o "
+"B<debpkg -i> em cada arquivo I<.deb> listado no ficheiro I<.changes> para os "
+"instalar, assumindo que todos os arquivos I<.deb> vivem no mesmo directório "
+"que o ficheiro I<.changes>. Note que provavelmente você não vai querer "
+"correr este programa num ficheiro I<.changes> relacionado a uma arquitectura "
+"diferente após uma compilação cruzada do pacote."
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:19 ../scripts/debi.1:24
+msgid ""
+"If a list of packages is given on the command line, then only those debs "
+"with names in this list of packages will be installed."
+msgstr ""
+"Se na linha de comandos for dada uma lista de pacotes, então apenas serão "
+"instalados esses debs com nomes nesta lista de pacotes."
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:28 ../scripts/debi.1:29
+msgid ""
+"Since installing a package requires root privileges, B<debi> calls B<debpkg> "
+"rather than B<dpkg> directly. Thus B<debi> will only be useful if it is "
+"either being run as root or B<debpkg> can be run as root. See B<debpkg>(1) "
+"for more details."
+msgstr ""
+"Como instalar um pacote requer privilégios de root, B<debi> chama B<debpkg> "
+"em vez de B<dpkg> directamente. Assim o B<debi> apenas será útil se for "
+"corrido como root ou o se o B<debpkg> puder ser corrido como root. Veja "
+"B<debpkg>(1) para mais detalhes."
+
+#. type: Plain text
+#: ../scripts/cvs-debi.1:67
+msgid "B<cvs-buildpackage>(1), B<cvs-debc>(1), B<cvs-debuild>(1), B<debi>(1)"
+msgstr "B<cvs-buildpackage>(1), B<cvs-debc>(1), B<cvs-debuild>(1), B<debi>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:4
+msgid ""
+"cvs-debrelease - upload a cvs-buildpackage/cvs-debuild generated package"
+msgstr ""
+"cvs-debrelease - envia um pacote gerado pelo cvs-buildpackage/cvs-debuild"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:7
+msgid ""
+"B<cvs-debrelease> [I<cvs-debrelease options>] [B<--dopts> [I<dupload/dput "
+"options>]]"
+msgstr ""
+"B<cvs-debrelease> [I<cvs-debrelease options>] [B<--dopts> [I<dupload/dput "
+"options>]]"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:17
+msgid ""
+"B<cvs-debrelease> is run from the CVS working directory after B<cvs-"
+"buildpackage> or B<cvs-debuild>. It uses the B<cvs-buildpackage> system to "
+"locate the I<.changes> file generated in that run. It then uploads the "
+"package using B<debrelease>(1), which in turn calls either B<dupload> or "
+"B<dput>. Note that the B<--dopts> option must be specified to distinguish "
+"the B<cvs-debrelease> options from the B<dupload> or B<dput> options. Also, "
+"the B<devscripts> configuration files will be read, as described in the "
+"B<debrelease>(1) manpage."
+msgstr ""
+"B<cvs-debrelease> corre a partir do directório de trabalho CVS após B<cvs-"
+"buildpackage> ou B<cvs-debuild>. Usa o sistema B<cvs-buildpackage> para "
+"localizar o ficheiro I<.changes> gerado nessa execução. Depois envia o "
+"pacote usando B<debrelease>(1), que por sua vez chama ou B<dupload> ou "
+"B<dput>. Note que a opção B<--dopts> tem de ser especificada para "
+"distinguir as opções B<cvs-debrelease> das opções B<dupload> ou B<dput>. "
+"Também serão lidos os ficheiros de configuração do B<devscripts>, como "
+"descrito no manual do B<debrelease>(1)."
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:26
+msgid ""
+"All current B<cvs-buildpackage> options are silently accepted; however, only "
+"the ones listed below have any effect. For more details on all of them, see "
+"the B<cvs-buildpackage>(1) manpage. All B<debrelease> options (as listed "
+"below) are also accepted."
+msgstr ""
+"Todas as opções do B<cvs-buildpackage> actuais são aceites em silêncio; no "
+"entanto, apenas aquelas listadas abaixo têm algum efeito. Para mais detalhes "
+"sobre todas elas, veja o manual do B<cvs-buildpackage>(1). São também "
+"aceites todas as opções do B<debrelease> (como listadas em baixo)."
+
+#. type: TP
+#: ../scripts/cvs-debrelease.1:26 ../scripts/debrelease.1:57
+#, no-wrap
+msgid "B<--dupload>, B<--dput>"
+msgstr "B<--dupload>, B<--dput>"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:30 ../scripts/debrelease.1:61
+msgid ""
+"This specifies which uploader program to use; the default is B<dupload>."
+msgstr ""
+"Isto especifica qual o programa de envio a usar; a predefinição é B<dupload>."
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:68
+msgid "B<cvs-buildpackage>(1), B<cvs-debuild>(1), B<debrelease>(1)"
+msgstr "B<cvs-buildpackage>(1), B<cvs-debuild>(1), B<debrelease>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:72
+msgid ""
+"B<cvs-buildpackage> was written by Manoj Srivastava, and the current version "
+"of B<debrelease> was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>. "
+"They have been combined into this program by Julian Gilbey."
+msgstr ""
+"B<cvs-buildpackage> foi escrito por Manoj Srivastava, e a versão actual do "
+"B<debrelease> foi escrita por Julian Gilbey E<lt>jdg@debian.orgE<gt>. Elas "
+"foram combinadas neste programa por Julian Gilbey."
+
+#. type: TH
+#: ../scripts/cvs-debuild.1:1
+#, no-wrap
+msgid "CVS-DEBUILD"
+msgstr "CVS-DEBUILD"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:4
+msgid "cvs-debuild - build a Debian package using cvs-buildpackage and debuild"
+msgstr ""
+"cvs-debuild - compila um pacote Debian usando cvs-buildpackage e debuild"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:7
+msgid ""
+"B<cvs-debuild> [I<debuild options>] [I<cvs-buildpackage options>] [B<--"
+"lintian-opts> I<lintian options>]"
+msgstr ""
+"B<cvs-debuild> [I<debuild options>] [I<cvs-buildpackage options>] [B<--"
+"lintian-opts> I<lintian options>]"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:13
+msgid ""
+"B<cvs-debuild> is a wrapper around B<cvs-buildpackage> to run it with "
+"B<debuild> as the package-building program. (This cannot simply be "
+"accomplished using the B<-C> option of B<cvs-buildpackage>, as it does not "
+"know how to handle all of the special B<debuild> options.)"
+msgstr ""
+"B<cvs-debuild> é um invólucro em volta de B<cvs-buildpackage> para corrê-lo "
+"com B<debuild> como o programa de compilação de pacote. (Isto não pode ser "
+"conseguido simplesmente com a opção e B<-C> de B<cvs-buildpackage>, pois não "
+"sabe como lidar com todas as opções especiais do B<debuild>.)"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:22
+msgid ""
+"The program simply stashes the B<debuild> and B<lintian> options, and passes "
+"them to B<debuild> when it is called by B<cvs-buildpackage>. All of the "
+"standard B<debuild> options may be used (as listed below), but note that the "
+"root command specified by any B<--rootcmd> or B<-r> command-line option will "
+"be passed as an option to B<cvs-buildpackage>. The first non-B<debuild> "
+"option detected will signal the start of the B<cvs-buildpackage> options."
+msgstr ""
+"O programa simplesmente empilha as opções do B<debuild> e B<lintian>, e "
+"passa-as ao B<debuild> quando é chamado pelo B<cvs-buildpackage>. Todas as "
+"opções standard do B<debuild> podem ser usadas (como listadas em baixo), mas "
+"note que o comando root especificado por qualquer opção de linha de comandos "
+"B<--rootcmd> ou B<-r> será passada como opção ao B<cvs-buildpackage>. A "
+"primeira opção não-B<debuild> detetada irá sinalizar o início das opções "
+"B<cvs-buildpackage>."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:29
+msgid ""
+"The selection of the root command is slightly subtle: if there are any "
+"command-line options, these will be used. If not, then if B<cvs-"
+"buildpackage> is set up to use a default root command, that will be used. "
+"Finally, if neither of these are the case, then B<debuild> will use its "
+"procedures to determine an appropriate command, as described in its "
+"documentation."
+msgstr ""
+"A selecção do comando de root é ligeiramente subtil; se existirem opções de "
+"linha de comandos, estas serão usadas. Se não, então se B<cvs-buildpackage> "
+"estiver definido para usar um comando de root predefinido, esse será usado. "
+"Finalmente, se nenhum destes for o caso, então B<debuild> irá usar os seus "
+"procedimentos para determinar um comando apropriado, como descrito na sua "
+"documentação."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:32
+msgid ""
+"See the manpages for B<debuild>(1) and B<cvs-buildpackage> for more "
+"information about the behaviour of each."
+msgstr ""
+"Veja o manual de B<debuild>(1) e B<cvs-buildpackage> para mais informação "
+"sobre o comportamento de cada um deles."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:38
+msgid ""
+"The following are the B<debuild> options recognised by B<cvs-debuild>. All "
+"B<cvs-buildpackage> and B<lintian> options are simply passed to the "
+"appropriate program. For explanations of the meanings of these variables, "
+"see B<debuild>(1)."
+msgstr ""
+"As seguintes são as opções B<debuild> reconhecidas pelo B<cvs-debuild>. "
+"Todas as opções de B<cvs-buildpackage> e B<lintian> são simplesmente "
+"passadas ao programa apropriado. Para explicação sobre o significado destas "
+"variáveis, veja B<debuild>(1)."
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:40 ../scripts/debuild.1:262
+#, no-wrap
+msgid "B<--rootcmd=>I<gain-root-command>, B<-r>I<gain-root-command>"
+msgstr "B<--rootcmd=>I<gain-root-command>, B<-r>I<gain-root-command>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:42 ../scripts/debuild.1:265
+#, no-wrap
+msgid "B<--preserve-env>"
+msgstr "B<--preserve-env>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:44 ../scripts/debuild.1:268
+#, no-wrap
+msgid "B<--preserve-envvar=>I<var>, B<-e>I<var>"
+msgstr "B<--preserve-envvar=>I<var>, B<-e>I<var>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:46 ../scripts/debuild.1:275
+#, no-wrap
+msgid "B<--set-envvar=>I<var>B<=>I<value>, B<-e>I<var>B<=>I<value>"
+msgstr "B<--set-envvar=>I<var>B<=>I<value>, B<-e>I<var>B<=>I<value>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:48
+#, no-wrap
+msgid "B<--lintian>, B<--no-lintian>"
+msgstr "B<--lintian>, B<--no-lintian>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:50
+#, no-wrap
+msgid "B<--ignore-dirname>, B<--check-dirname>"
+msgstr "B<--ignore-dirname>, B<--check-dirname>"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:53
+msgid "These should not be needed, but it is provided nevertheless."
+msgstr ""
+"estes não deverão ser necessários, mas mesmo assim são disponibilizados."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:58
+msgid ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1), B<lintian>(1)"
+msgstr ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1), B<lintian>(1)"
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:59
+msgid "This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr "Este programa foi escrito por Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/dcmd.1:1
+#, no-wrap
+msgid "DCMD"
+msgstr "DCMD"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:4
+msgid "dcmd - expand file lists of .dsc/.changes files in the command line"
+msgstr ""
+"dcmd - expande listas de ficheiros de ficheiros .dsc/.changes na linha de "
+"comandos"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:6
+msgid "B<dcmd> [I<options>] [I<command>] [I<changes-file>|I<dsc-file>] ..."
+msgstr "B<dcmd> [I<options>] [I<command>] [I<changes-file>|I<dsc-file>] ..."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:11
+msgid ""
+"B<dcmd> replaces any reference to a I<.dsc> or I<.changes> file in the "
+"command line with the list of files in its 'Files' section, plus the file "
+"itself. It allows easy manipulation of all the files involved in an upload "
+"(for I<.changes> files) or a source package (for I<.dsc> files)."
+msgstr ""
+"B<dcmd> substitui qualquer referência a um ficheiro I<.dsc> ou I<.changes> "
+"na linha de comandos pela lista de ficheiros na sua secção 'Files', mais o "
+"próprio ficheiro. Permite manipulação fácil de todos os ficheiro envolvidos "
+"num envio (para ficheiros I<.changes>) ou num pacote fonte (para ficheiros "
+"I<.dsc>)."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:15
+msgid ""
+"If I<command> is omitted (that is the first argument is an existing I<.dsc> "
+"or I<.changes> file), the expanded list of files is printed to stdout, one "
+"file by line. Useful for usage in backticks."
+msgstr ""
+"Se I<command> for omitido (isto é se o primeiro argumento for um ficheiro I<."
+"dsc> ou I<.changes> existente), a lista de ficheiros expandida é escrita no "
+"stdout, um ficheiro por linha. Útil para utilização em backticks."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:19
+msgid ""
+"There are a number of options which may be used in order to select only a "
+"subset of the files listed in the I<.dsc> or I<.changes> file. If a "
+"requested file is not found, an error message will be printed."
+msgstr ""
+"Existe um número de opções que podem ser usadas de modo a seleccionar apenas "
+"um subconjunto dos ficheiros listados no ficheiro I<.dsc> ou I<.changes>. Se "
+"um ficheiro requisitado não for encontrado, será escrita uma mensagem de "
+"erro."
+
+#. type: TP
+#: ../scripts/dcmd.1:19
+#, no-wrap
+msgid "B<--dsc>"
+msgstr "B<--dsc>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:22
+msgid "Select the I<.dsc> file."
+msgstr "Seleciona o ficheiro I<.dsc>."
+
+#. type: TP
+#: ../scripts/dcmd.1:22
+#, no-wrap
+msgid "B<--schanges>"
+msgstr "B<--schanges>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:25
+msgid "Select I<.changes> files for the 'source' architecture."
+msgstr "Seleciona ficheiros I<.changes> para a arquitectura 'fonte'."
+
+#. type: TP
+#: ../scripts/dcmd.1:25
+#, no-wrap
+msgid "B<--bchanges>"
+msgstr "B<--bchanges>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:28
+msgid "Select I<.changes> files for binary architectures."
+msgstr "Seleciona ficheiros I<.changes> para as arquitecturas binárias."
+
+#. type: TP
+#: ../scripts/dcmd.1:28
+#, no-wrap
+msgid "B<--changes>"
+msgstr "B<--changes>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:31
+msgid "Select I<.changes> files. Implies B<--schanges> and B<--bchanges>."
+msgstr ""
+"Seleciona ficheiros I<.changes>. Implica B<--schanges> e B<--bchanges>."
+
+#. type: TP
+#: ../scripts/dcmd.1:31
+#, no-wrap
+msgid "B<--archdeb>"
+msgstr "B<--archdeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:34
+msgid "Select architecture-dependent binary packages (I<.deb> files)."
+msgstr ""
+"Seleciona pacotes binários dependentes da arquitectura (ficheiros I<.deb>)."
+
+#. type: TP
+#: ../scripts/dcmd.1:34
+#, no-wrap
+msgid "B<--indepdeb>"
+msgstr "B<--indepdeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:37
+msgid "Select architecture-independent binary packages (I<.deb> files)."
+msgstr ""
+"Seleciona pacotes binários independentes da arquitectura (ficheiros I<.deb>)."
+
+#. type: TP
+#: ../scripts/dcmd.1:37
+#, no-wrap
+msgid "B<--deb>"
+msgstr "B<--deb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:40
+msgid ""
+"Select binary packages (I<.deb> files). Implies B<--archdeb> and B<--"
+"indepdeb>."
+msgstr ""
+"Seleciona pacote binários (ficheiros I<.deb>). Implica B<--archdeb> e B<--"
+"indepdeb>."
+
+#. type: TP
+#: ../scripts/dcmd.1:40
+#, no-wrap
+msgid "B<--archudeb>"
+msgstr "B<--archudeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:43
+msgid "Select architecture-dependent I<.udeb> binary packages."
+msgstr "Seleciona pacotes binários I<.udeb> dependentes da arquitectura."
+
+#. type: TP
+#: ../scripts/dcmd.1:43
+#, no-wrap
+msgid "B<--indepudeb>"
+msgstr "B<--indepudeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:46
+msgid "Select architecture-independent I<.udeb> binary packages."
+msgstr "Seleciona pacotes binários I<.udeb> independentes da arquitectura."
+
+#. type: TP
+#: ../scripts/dcmd.1:46
+#, no-wrap
+msgid "B<--udeb>"
+msgstr "B<--udeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:49
+msgid ""
+"Select I<.udeb> binary packages. Implies B<--archudeb> and B<--indepudeb>."
+msgstr ""
+"Seleciona pacote binários I<.udeb>. Implica B<--archudeb> e B<--indepudeb>."
+
+#. type: TP
+#: ../scripts/dcmd.1:49
+#, no-wrap
+msgid "B<--tar>,\\ B<--orig>"
+msgstr "B<--tar>,\\ B<--orig>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:52
+msgid "Select the upstream I<.tar> file."
+msgstr "Seleciona o ficheiro I<.tar> da origem."
+
+#. type: TP
+#: ../scripts/dcmd.1:52
+#, no-wrap
+msgid "B<--diff>,\\ B<--debtar>"
+msgstr "B<--diff>,\\ B<--debtar>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:55
+msgid "Select the Debian I<.debian.tar> or I<.diff> file."
+msgstr "Seleciona o ficheiro I<.debian.tar> ou I<.diff> Debian."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:58
+msgid ""
+"Each option may be prefixed by B<--no> to indicate that all files I<not> "
+"matching the specification should be selected."
+msgstr ""
+"Cada opção pode ser prefixada com B<--no> para indicar que todos os "
+"ficheiros que I<não> correspondam à especificação devem ser selecionados."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:62
+msgid ""
+"It is not possible to combine positive filtering options (e.g. B<--dsc>) "
+"and negative filtering options (e.g. B<--no-changes>) in the same B<dcmd> "
+"invocation."
+msgstr ""
+"Não é possível combinar opções de filtragem positivas (ex. B<--dsc>) e "
+"opções de filtragem negativas (ex B<--no-changes>) na mesma invocação de "
+"B<dcmd>."
+
+#. type: TP
+#: ../scripts/dcmd.1:62
+#, no-wrap
+msgid "B<--no-fail-on-missing>, B<-r>"
+msgstr "B<--no-fail-on-missing>, B<-r>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:65
+msgid "If any of the requested files were not found, do not output an error."
+msgstr ""
+"Se qualquer um dos ficheiros requeridos não for encontrado, não gera um erro."
+
+#. type: TP
+#: ../scripts/dcmd.1:65
+#, no-wrap
+msgid "B<--package>, B<-p>"
+msgstr "B<--package>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:68
+msgid "Output package name part only."
+msgstr "Gera apenas a parte do nome do pacote."
+
+#. type: TP
+#: ../scripts/dcmd.1:68
+#, no-wrap
+msgid "B<--sort>, B<-s>"
+msgstr "B<--sort>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:71
+msgid "Sort output alphabetically."
+msgstr "Ordena resultados alfabeticamente."
+
+#. type: TP
+#: ../scripts/dcmd.1:71
+#, no-wrap
+msgid "B<--tac>, B<-t>"
+msgstr "B<--tac>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:74
+msgid "Reverse output order."
+msgstr "Reverte a ordem dos resultados."
+
+#. type: =head1
+#: ../scripts/dcmd.1:75 ../scripts/debsnap.1:109 ../scripts/debuild.1:404
+#: ../scripts/dget.pl:719 ../scripts/getbuildlog.1:31 ../scripts/rc-alert.1:96
+#: ../scripts/who-permits-upload.pl:139
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "EXEMPLOS"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:77
+msgid "Copy the result of a build to another machine:"
+msgstr "Copiar o resultado da compilação para outra máquina:"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:85
+#, no-wrap
+msgid ""
+"$ dcmd scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.dsc 100% 490 0.5KB/s 00:00\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.changes 100% 1095 1.1KB/s 00:00\n"
+"$\n"
+msgstr ""
+"$ dcmd scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.dsc 100% 490 0.5KB/s 00:00\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.changes 100% 1095 1.1KB/s 00:00\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:90
+#, no-wrap
+msgid ""
+"$ dcmd --diff --deb scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"$\n"
+msgstr ""
+"$ dcmd --diff --deb scp rcs_5.7-23_amd64.changes elegiac:/tmp\n"
+"rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00\n"
+"rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:93
+msgid "Check the contents of a source package:"
+msgstr "Verificar o conteúdo de um pacote fonte:"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:100
+#, no-wrap
+msgid ""
+"$ dcmd md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"f0ceeae96603e823eacba6721a30b5c7 rcs_5.7-23.diff.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+msgstr ""
+"$ dcmd md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"f0ceeae96603e823eacba6721a30b5c7 rcs_5.7-23.diff.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:105
+#, no-wrap
+msgid ""
+"$ dcmd --no-diff md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+msgstr ""
+"$ dcmd --no-diff md5sum rcs_5.7-23.dsc\n"
+"8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz\n"
+"5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc\n"
+"$\n"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:110
+msgid "B<dpkg-genchanges>(1), B<dpkg-source>(1)"
+msgstr "B<dpkg-genchanges>(1), B<dpkg-source>(1)"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:112
+msgid ""
+"This program was written by Romain Francoise E<lt>rfrancoise@debian.orgE<gt> "
+"and is released under the GPL, version 2 or later."
+msgstr ""
+"Este programa foi escrito por Romain Francoise E<lt>rfrancoise@debian."
+"orgE<gt> e é lançado sob GPL, versão 2 ou posterior."
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "DD-LIST"
+msgstr "DD-LIST"
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "2011-10-27"
+msgstr "2011-10-27"
+
+#. type: TH
+#: ../scripts/dd-list.1:16
+#, no-wrap
+msgid "Debian"
+msgstr "Debian"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:21
+msgid "dd-list - nicely list .deb packages and their maintainers"
+msgstr "dd-list - lista pacotes .deb e seus maintainers em modo bonito"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:26
+msgid ""
+"B<dd-list> [B<-hiusV>] [B<--help>] [B<--stdin>] [B<--sources "
+">I<Sources_file>] [B<--dctrl>] [B<--version>] [B<--uploaders>] "
+"[I<package> ...]"
+msgstr ""
+"B<dd-list> [B<-hiusV>] [B<--help>] [B<--stdin>] [B<--sources "
+">I<Sources_file>] [B<--dctrl>] [B<--version>] [B<--uploaders>] "
+"[I<package> ...]"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:30
+msgid ""
+"B<dd-list> produces nicely formatted lists of Debian (.deb) packages and "
+"their maintainers."
+msgstr ""
+"B<dd-list> produz listas em formato bonito de pacotes Debian (.deb) e dos "
+"seus responsáveis de manutenção (maintainers)."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:37
+msgid ""
+"Input is a list of source or binary package names on the command line (or "
+"the standard input if B<--stdin> is given). Output is a list of the "
+"following format, where package names are source packages by default:"
+msgstr ""
+"Recebe uma lista de nomes de pacotes fonte ou binário na linha de comandos "
+"(ou na entrada standard se for dado B<--stdin>). O resultado é uma lista do "
+"seguinte formato, onde os nomes de pacotes são pacotes fonte por "
+"predefinição."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:41
+#, no-wrap
+msgid "J. Random Developer E<lt>jrandom@debian.orgE<gt>\n"
+msgstr "J. Random Developer E<lt>jrandom@debian.orgE<gt>\n"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:44
+#, no-wrap
+msgid ""
+"j-random-package\n"
+"j-random-other\n"
+msgstr ""
+"j-random-package\n"
+"j-random-other\n"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:47
+#, no-wrap
+msgid "Diana Hacker E<lt>diana@example.orgE<gt>\n"
+msgstr "Diana Hacker E<lt>diana@example.orgE<gt>\n"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:50
+#, no-wrap
+msgid ""
+"fun-package\n"
+"more-fun-package\n"
+msgstr ""
+"fun-package\n"
+"more-fun-package\n"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:58
+msgid ""
+"This is useful when you want, for example, to produce a list of packages "
+"that need to attention from their maintainers, e.g., to be rebuilt when a "
+"library version transition happens."
+msgstr ""
+"Isto é útil quando deseja, por exemplo, produzir uma lista de pacotes que "
+"precisam da atenção dos seus maintainers, ex., para serem recompilados "
+"quando acontecem uma transição de versão de biblioteca."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:62
+msgid "Print brief help message."
+msgstr "Escreve mensagem breve de ajuda."
+
+#. type: TP
+#: ../scripts/dd-list.1:62
+#, no-wrap
+msgid "B<-i>, B<--stdin>"
+msgstr "B<-i>, B<--stdin>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:66
+msgid ""
+"Read package names from the standard input, instead of taking them from the "
+"command line. Package names are whitespace delimited."
+msgstr ""
+"Lê os nomes dos pacotes a partir da entrada standard, em vez de os obter da "
+"linha de comandos. Os nomes de pacotes são delimitados por espaços em branco."
+
+#. type: TP
+#: ../scripts/dd-list.1:66
+#, no-wrap
+msgid "B<-d>, B<--dctrl>"
+msgstr "B<-d>, B<--dctrl>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:73
+msgid ""
+"Read package list from standard input in the format of a Debian package "
+"control file. This includes the status file, or output of apt-cache. This is "
+"the fastest way to use dd-list, as it uses the maintainer information from "
+"the input instead of looking up the maintainer of each listed package."
+msgstr ""
+"Lê a lista de pacotes a partir da entrada standard no formato de um ficheiro "
+"de controle de pacote Debian. Isto incluir o ficheiro de estado, ou o "
+"resultado de apt-cache. Este é o modo mais rápido de usar o dd-list, pois "
+"usa a informação do maintainer a partir da entrada em vez de procurar pelo "
+"maintainer de cada pacote listado."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:76
+msgid ""
+"If no I<Source:> line is given, the I<Package:> name is used for output, "
+"which might be a binary package name."
+msgstr ""
+"Se nenhuma linha I<Source:> for dada, é usado o nome do I<Package:> para "
+"resultado, o qual pode ser um nome de pacote binário."
+
+#. type: TP
+#: ../scripts/dd-list.1:76
+#, no-wrap
+msgid "B<-z>, B<--uncompress>"
+msgstr "B<-z>, B<--uncompress>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:80
+msgid ""
+"Try to uncompress the --dctrl input before parsing. Supported compression "
+"formats are gz, bzip2 or xz."
+msgstr ""
+"Tenta descomprimir a entrada --dctrl antes da análise. Formatos de "
+"compressão suportados são gz, bzip2 ou xz."
+
+#. type: TP
+#: ../scripts/dd-list.1:80
+#, no-wrap
+msgid "B<-s>, B<--sources> I<Sources_file>"
+msgstr "B<-s>, B<--sources> I<Sources_file>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:86
+msgid ""
+"Read package information from the specified I<Sources_file>s. This can be "
+"given multiple times. The files can be gz, bzip2 or xz compressed. If the "
+"filename does not end in I<.gz>, I<.bz2> or I<.xz>, then the B<-z> option "
+"must be used."
+msgstr ""
+"Lê a informação do pacote a partir de I<Sources_file>s especificados. Isto "
+"pode ser dado várias vezes. Os ficheiros pode ser comprimidos em gz, bzip2 "
+"ou xz. Se o nome do ficheiro não acabar em I<.gz>, I<.bz2> ou I<.xz>, então "
+"a opção B<-z> tem de ser usada."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:90
+msgid ""
+"If no I<Sources_file>s are specified, dd-list will ask apt-get for an "
+"appropriate set of sources (if I<apt> is at version greater than 1.1.8), "
+"else any files matching I</var/lib/apt/lists/*_source_Sources> will be used."
+msgstr ""
+"Se nenhuns I<Sources_file>s forem especificados, o dd-list irá perguntar ao "
+"apt-get por um conjunto de fontes apropriado (se o I<apt> for duma versão "
+"maior que 1.1.8), caso contrário serão usados quaisquer ficheiros que "
+"correspondam a I</var/lib/apt/lists/*_source_Sources>."
+
+#. type: TP
+#: ../scripts/dd-list.1:90
+#, no-wrap
+msgid "B<-u>, B<--uploaders>"
+msgstr "B<-u>, B<--uploaders>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:95
+msgid ""
+"Also list developers who are named as uploaders of packages, not only the "
+"maintainers; this is the default behaviour, use --nouploaders to prevent it. "
+"Uploaders are indicated with \"(U)\" appended to the package name."
+msgstr ""
+"Também lista desenvolvedores que são chamados de uploaders de pacotes, não "
+"apenas os maintainers; este é o comportamento predefinido, use --nouploaders "
+"para o prevenir. Os uploaders são indicados com um \"(U)\" acrescentado ao "
+"nome do pacote."
+
+#. type: TP
+#: ../scripts/dd-list.1:95
+#, no-wrap
+msgid "B<-nou>, B<--nouploaders>"
+msgstr "B<-nou>, B<--nouploaders>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:98
+msgid "Only list package Maintainers, do not list Uploaders."
+msgstr "Apenas lista Maintainers do pacote, não lista os Uploaders."
+
+#. type: TP
+#: ../scripts/dd-list.1:98
+#, no-wrap
+msgid "B<-b>, B<--print-binary>"
+msgstr "B<-b>, B<--print-binary>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:103
+msgid ""
+"Use binary package names in the output instead of source package names (has "
+"no effect with B<--dctrl> if the I<Package:> line contains source package "
+"names)."
+msgstr ""
+"Usa nomes de pacotes binários na entrada em vez de nomes de pacotes fonte "
+"(não tem efeito com B<--dctrl> se a linha I<Package:> conter nomes de "
+"pacotes fonte)."
+
+#. type: TP
+#: ../scripts/dd-list.1:103 ../scripts/dget.pl:684 ../scripts/getbuildlog.1:28
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:107
+msgid "Print the version."
+msgstr "Escreve a versão."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:109
+msgid "Lars Wirzenius E<lt>liw@iki.fiE<gt>"
+msgstr "Lars Wirzenius E<lt>liw@iki.fiE<gt>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:110
+msgid "Joey Hess E<lt>joeyh@debian.orgE<gt>"
+msgstr "Joey Hess E<lt>joeyh@debian.orgE<gt>"
+
+#. type: TH
+#: ../scripts/debc.1:1
+#, no-wrap
+msgid "DEBC"
+msgstr "DEBC"
+
+#. type: Plain text
+#: ../scripts/debc.1:4
+msgid "debc - view contents of a generated Debian package"
+msgstr "debc - visualiza o conteúdo de um pacote Debian gerado"
+
+#. type: Plain text
+#: ../scripts/debc.1:6
+msgid "B<debc> [I<options>] [I<changes file>] [I<package> ...]"
+msgstr "B<debc> [I<options>] [I<changes file>] [I<package> ...]"
+
+#. type: Plain text
+#: ../scripts/debc.1:25
+msgid ""
+"B<debc> figures out the current version of a package and displays "
+"information about the I<.deb> and I<.udeb> files which have been generated "
+"in the current build process. If a I<.changes> file is specified on the "
+"command line, the filename must end with I<.changes>, as this is how the "
+"program distinguishes it from package names. If not, then B<debc> has to be "
+"called from within the source code directory tree. In this case, it will "
+"look for the I<.changes> file corresponding to the current package version "
+"(by determining the name and version number from the changelog, and the "
+"architecture in the same way as B<dpkg-buildpackage>(1) does). It then runs "
+"B<dpkg-deb -I> and B<dpkg-deb -c> on every I<.deb> and I<.udeb> archive "
+"listed in the I<.changes> file to display information about the contents of "
+"the I<.deb> / I<.udeb> files. It precedes every I<.deb> or I<.udeb> file "
+"with the name of the file. It assumes that all of the I<.deb> / I<.udeb> "
+"archives live in the same directory as the I<.changes> file. It is useful "
+"for ensuring that the expected files have ended up in the Debian package."
+msgstr ""
+"B<debc> descobre a versão actual dum pacote e mostra informação acerca dos "
+"ficheiros I<.deb> e I<.udeb> que foram gerados no processo de compilação "
+"actual. Se um ficheiro I<.changes> for especificado na linha de comandos o "
+"nome do ficheiro tem de acabar com I<.changes>, pois é assim que o programa "
+"o distingue dos nomes de pacotes. Se não, então o B<debc> tem de ser chamado "
+"de dentro da árvore de directórios do código fonte. Neste caso, irá procurar "
+"o pelo ficheiro I<.changes> correspondente à versão actual do pacote (ao "
+"determinar o nome e número de versão a partir do registo de alterações, e da "
+"arquitectura do mesmo modo que o B<dpkg-buildpackage>(1) faz). Depois corre "
+"B<dpkg-deb -I> e B<dpkg-deb -c> em cada arquivo I<.deb> e I<.udeb> listado "
+"no ficheiro I<.changes> para mostrar informação acerca do conteúdo dos "
+"ficheiros I<.deb> / I<.udeb>. Precede cada ficheiro I<.deb> ou I<.udeb> com "
+"o nome do ficheiro. Assume que todos os arquivos I<.deb> / I<.udeb> vivem no "
+"mesmo directório que o ficheiro I<.changes>. É útil para assegurar que os "
+"ficheiros esperados acabaram no pacote Debian."
+
+#. type: Plain text
+#: ../scripts/debc.1:28
+msgid ""
+"If a list of packages is given on the command line, then only those debs or "
+"udebs with names in this list of packages will be processed."
+msgstr ""
+"Se for dada uma lista de pacotes na linha de comandos, então apenas os debs "
+"ou udebs com nomes nessa lista de pacotes serão processados."
+
+#. type: =head2
+#: ../scripts/debc.1:28 ../scripts/debchange.1:109 ../scripts/debclean.1:27
+#: ../scripts/debi.1:29 ../scripts/debrelease.1:20 ../scripts/debuild.1:51
+#: ../scripts/uscan.pl:1979
+#, no-wrap
+msgid "Directory name checking"
+msgstr "Verificação do nome do directório"
+
+#. type: Plain text
+#: ../scripts/debc.1:39
+msgid ""
+"In common with several other scripts in the B<devscripts> package, B<debc> "
+"will climb the directory tree until it finds a I<debian/changelog> file. As "
+"a safeguard against stray files causing potential problems, it will examine "
+"the name of the parent directory once it finds the I<debian/changelog> file, "
+"and check that the directory name corresponds to the package name. "
+"Precisely how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Em comum com vários outros scripts no pacote B<devscripts>, o B<debc> irá "
+"subir a árvore de directórios até encontrar um ficheiro I<debian/changelog>. "
+"Como segurança contra ficheiros errantes que podem causar problemas "
+"potenciais, irá examinar o nome do directório pai assim que encontra o "
+"ficheiro I<debian/changelog>, e verifica que o nome de directório "
+"corresponde ao nome do pacote. O modo preciso de como isto é feito é "
+"controlado por duas variáveis de ficheiro de configuração "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> e B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, e as "
+"suas opções de linha de comandos correspondentes B<--check-dirname-level> e "
+"B<--check-dirname-regex>."
+
+#. type: textblock
+#: ../scripts/debc.1:41 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:65
+#: ../scripts/uscan.pl:1994
+msgid "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> can take the following values:"
+msgstr "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> pode receber os seguintes valores:"
+
+#. type: =item
+#: ../scripts/debc.1:41 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:65
+#: ../scripts/uscan.pl:1925 ../scripts/uscan.pl:1998
+#, no-wrap
+msgid "B<0>"
+msgstr "B<0>"
+
+#. type: textblock
+#: ../scripts/debc.1:44 ../scripts/debchange.1:125 ../scripts/debclean.1:43
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:68
+#: ../scripts/uscan.pl:2000
+msgid "Never check the directory name."
+msgstr "Nunca verifica o nome do directório."
+
+#. type: =item
+#: ../scripts/debc.1:44 ../scripts/debchange.1:125 ../scripts/debclean.1:43
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:68
+#: ../scripts/uscan.pl:1930 ../scripts/uscan.pl:2002
+#, no-wrap
+msgid "B<1>"
+msgstr "B<1>"
+
+#. type: Plain text
+#: ../scripts/debc.1:48 ../scripts/debchange.1:129 ../scripts/debclean.1:47
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:72
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for I<debian/changelog>. This is the default behaviour."
+msgstr ""
+"Apenas verifica o nome do directório se tivermos de mudar de directório na "
+"nossa busca pelo I<debian/changelog>. Este é o comportamento predefinido."
+
+#. type: =item
+#: ../scripts/debc.1:48 ../scripts/debchange.1:129 ../scripts/debclean.1:47
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:72
+#: ../scripts/uscan.pl:2009
+#, no-wrap
+msgid "B<2>"
+msgstr "B<2>"
+
+#. type: textblock
+#: ../scripts/debc.1:51 ../scripts/debchange.1:132 ../scripts/debclean.1:50
+#: ../scripts/debi.1:52 ../scripts/debrelease.1:43 ../scripts/debuild.1:75
+#: ../scripts/uscan.pl:2011
+msgid "Always check the directory name."
+msgstr "Verifica sempre o nome do directório."
+
+#. type: Plain text
+#: ../scripts/debc.1:64 ../scripts/debclean.1:63 ../scripts/debi.1:65
+#: ../scripts/debrelease.1:56
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a '/', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'PACKAGE', this will be replaced by the source package name, as "
+"determined from the changelog. The default value for the regex is: "
+"\\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and PACKAGE-"
+"version."
+msgstr ""
+"O nome de directório é verificado ao testar se o nome do directório actual "
+"(como determinado por B<pwd>(1)) corresponde à expressão regular dada pela "
+"opção B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> de ficheiro de configuração ou pela "
+"opção de linha de comandos B<--check-dirname-regex> I<regex>. Aqui I<regex> "
+"é uma expressão regular Perl (veja B<perlre>(3perl)), a qual será ancorada "
+"no início e no final. Se a I<regex> conter um '/', então tem de corresponder "
+"ao caminho completo do directório. Se não, então tem de corresponder ao nome "
+"completo de directório. Se I<regex> conter a string \\'PACKAGE', isto será "
+"substituído pelo nome do pacote fonte, como determinado a partir do registo "
+"de alterações. O valor predefinido para a regex é: \\'PACKAGE(-.+)?', mais "
+"nomes de pacotes correspondentes como PACKAGE e PACKAGE-version."
+
+#. type: TP
+#: ../scripts/debc.1:71 ../scripts/debdiff.1:170 ../scripts/debi.1:72
+#: ../scripts/debrelease.1:81
+#, no-wrap
+msgid "B<--debs-dir> I<directory>"
+msgstr "B<--debs-dir> I<directory>"
+
+#. type: Plain text
+#: ../scripts/debc.1:77
+msgid ""
+"Look for the I<.changes>, I<.deb> and I<.udeb> files in I<directory> instead "
+"of the parent of the source directory. This should either be an absolute "
+"path or relative to the top of the source directory."
+msgstr ""
+"Procura os ficheiros I<.changes>, I<.deb> e I<.udeb> em I<directory> em vez "
+"de no pai do directório fonte. Isto te de ser ou um caminho absoluto ou "
+"relativo ao topo do directório fonte."
+
+#. type: =item
+#: ../scripts/debc.1:77 ../scripts/debchange.1:382 ../scripts/debclean.1:72
+#: ../scripts/debi.1:87 ../scripts/debrelease.1:87 ../scripts/debuild.1:313
+#: ../scripts/uscan.pl:1652
+#, no-wrap
+msgid "B<--check-dirname-level> I<N>"
+msgstr "B<--check-dirname-level> I<N>"
+
+#. type: Plain text
+#: ../scripts/debc.1:81 ../scripts/debc.1:85 ../scripts/debclean.1:76
+#: ../scripts/debclean.1:80 ../scripts/debi.1:91 ../scripts/debi.1:95
+#: ../scripts/debrelease.1:91 ../scripts/debrelease.1:95
+#: ../scripts/debuild.1:317 ../scripts/debuild.1:321
+msgid ""
+"See the above section B<Directory name checking> for an explanation of this "
+"option."
+msgstr ""
+"Veja a secção em cima B<Verificação do nome do directório> para uma "
+"explicação desta opção."
+
+#. type: =item
+#: ../scripts/debc.1:81 ../scripts/debchange.1:386 ../scripts/debclean.1:76
+#: ../scripts/debi.1:91 ../scripts/debrelease.1:91 ../scripts/debuild.1:317
+#: ../scripts/uscan.pl:1656
+#, no-wrap
+msgid "B<--check-dirname-regex> I<regex>"
+msgstr "B<--check-dirname-regex> I<regex>"
+
+#. type: TP
+#: ../scripts/debc.1:85
+#, no-wrap
+msgid "B<--list-changes>"
+msgstr "B<--list-changes>"
+
+#. type: Plain text
+#: ../scripts/debc.1:92
+msgid ""
+"List the filename of the .changes file, and do not display anything else. "
+"This option only makes sense if a .changes file is NOT passed explicitly in "
+"the command line. This can be used for example in a script that needs to "
+"reference the .changes file, without having to duplicate the heuristics for "
+"finding it that debc already implements."
+msgstr ""
+"Lista o nome do ficheiro do ficheiro .changes, e não mostra mais nada. Esta "
+"opção apenas faz sentido se um ficheiro .changes NÃO for passado "
+"explicitamente na linha de comandos. Isto pode ser usado, por exemplo, num "
+"script que precisa de referenciar o ficheiro .changes, sem ter que duplicar "
+"as heurísticas para encontrar aquilo que o debc já implementa."
+
+#. type: TP
+#: ../scripts/debc.1:92
+#, no-wrap
+msgid "B<--list-debs>"
+msgstr "B<--list-debs>"
+
+#. type: Plain text
+#: ../scripts/debc.1:95
+msgid ""
+"List the filenames of the .deb packages, and do not display their contents."
+msgstr ""
+"Lista os nomes de ficheiros dos pacotes .deb, e não mostra o seu conteúdo."
+
+#. type: Plain text
+#: ../scripts/debc.1:108 ../scripts/debchange.1:411 ../scripts/debclean.1:99
+#: ../scripts/debi.1:115 ../scripts/debrelease.1:111 ../scripts/debrsign.1:63
+#: ../scripts/debsign.1:111 ../scripts/nmudiff.1:98
+#: ../scripts/pts-subscribe.1:48 ../scripts/uupdate.1:113
+#: ../scripts/who-uploads.1:57
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced in that order to set configuration variables. Command line options "
+"can be used to override configuration file settings. Environment variable "
+"settings are ignored for this purpose. The currently recognised variables "
+"are:"
+msgstr ""
+"Os dois ficheiros de configuração I</etc/devscripts.conf> e I<~/.devscripts> "
+"são por esta ordem fontes para definir variáveis de configuração. Podem ser "
+"usadas opções de linha de comandos para sobrepor definições de ficheiros de "
+"configuração. As definições de variáveis de ambiente são ignoradas para este "
+"objectivo. As variáveis actualmente reconhecidas são:"
+
+#. type: TP
+#: ../scripts/debc.1:108 ../scripts/debdiff.1:237 ../scripts/debi.1:115
+#: ../scripts/debrelease.1:116 ../scripts/debsign.1:123
+#, no-wrap
+msgid "B<DEBRELEASE_DEBS_DIR>"
+msgstr "B<DEBRELEASE_DEBS_DIR>"
+
+#. type: Plain text
+#: ../scripts/debc.1:118
+msgid ""
+"This specifies the directory in which to look for the I<.changes>, I<.deb> "
+"and I<.udeb> files, and is either an absolute path or relative to the top of "
+"the source tree. This corresponds to the B<--debs-dir> command line "
+"option. This directive could be used, for example, if you always use "
+"B<pbuilder> or B<svn-buildpackage> to build your packages. Note that it "
+"also affects B<debrelease>(1) in the same way, hence the strange name of the "
+"option."
+msgstr ""
+"Isto especifica o directório onde procurar pelos ficheiros I<.changes>, I<."
+"deb> e I<.udeb>, e é ou um caminho absoluto ou relativo ao topo da árvore "
+"fonte. Isto corresponde à opção de linha de comandos B<--debs-dir>. Esta "
+"directiva pode ser usada, por exemplo, se você usar sempre B<pbuilder> ou "
+"B<svn-buildpackage> para compilar os seus pacotes. Note que também afecta "
+"B<debrelease>(1) do mesmo modo, daqui o nome estranho da opção."
+
+#. type: TP
+#: ../scripts/debc.1:118 ../scripts/debchange.1:419 ../scripts/debclean.1:103
+#: ../scripts/debi.1:125 ../scripts/debrelease.1:125 ../scripts/debuild.1:397
+#: ../doc/devscripts.conf.5:42
+#, no-wrap
+msgid "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL>, B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>"
+msgstr "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL>, B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>"
+
+#. type: Plain text
+#: ../scripts/debc.1:125 ../scripts/debclean.1:110 ../scripts/debi.1:132
+#: ../scripts/debrelease.1:132 ../scripts/debuild.1:404
+msgid ""
+"See the above section B<Directory name checking> for an explanation of these "
+"variables. Note that these are package-wide configuration variables, and "
+"will therefore affect all B<devscripts> scripts which check their value, as "
+"described in their respective manpages and in B<devscripts.conf>(5)."
+msgstr ""
+"Veja a secção em cima B<Verificação do nome do directório> para uma "
+"explicação sobre estas variáveis. Note que estas variáveis de configuração "
+"são globais-do-pacote, e irão por isso afectar todos os scripts do "
+"B<devscripts> que verifiquem os seus valores, como descrito nos seus "
+"respectivos manuais em B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/debc.1:129
+msgid "B<debdiff>(1), B<dpkg-deb>(1), B<devscripts.conf>(5)"
+msgstr "B<debdiff>(1), B<dpkg-deb>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debc.1:131
+msgid ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, based on an original script by "
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+msgstr ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, baseado no script original de "
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/debchange.1:1
+#, no-wrap
+msgid "DEBCHANGE"
+msgstr "DEBCHANGE"
+
+#. type: Plain text
+#: ../scripts/debchange.1:4
+msgid ""
+"debchange - Tool for maintenance of the debian/changelog file in a source "
+"package"
+msgstr ""
+"debchange - Ferramenta para manutenção do ficheiro debian/changelog num "
+"pacote fonte."
+
+#. type: Plain text
+#: ../scripts/debchange.1:6
+msgid "B<debchange> [I<options>] [I<text> ...]"
+msgstr "B<debchange> [I<options>] [I<text> ...]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:8
+msgid "B<dch> [I<options>] [I<text> ...]"
+msgstr "B<dch> [I<options>] [I<text> ...]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:33
+msgid ""
+"B<debchange> or its alias B<dch> will add a new comment line to the Debian "
+"changelog in the current source tree. This command must be run from within "
+"that tree. If the text of the change is given on the command line, "
+"B<debchange> will run in batch mode and simply add the text, with line "
+"breaks as necessary, at the appropriate place in I<debian/changelog> (or the "
+"changelog specified by options, as described below). If the text given on "
+"the command line is a null string, B<debchange> will run in batch mode "
+"without adding any text. If the text given on the command line is a space "
+"string, B<debchange> will run in batch mode and add a blank changelog "
+"entry. If no text is specified then B<debchange> will run the editor as "
+"determined by B<sensible-editor> for you to edit the file. (The environment "
+"variables B<VISUAL> and B<EDITOR> are used in this order to determine which "
+"editor to use.) Editors which understand the I<+n> option for starting the "
+"editing on a specified line will use this to move to the correct line of the "
+"file for editing. If the editor is quit without modifying the temporary "
+"file, B<debchange> will exit without touching the existing changelog. "
+"B<Note that the changelog is assumed to be encoded with the UTF-8 encoding. "
+"If it is not, problems may occur.> Please see the B<iconv>(1) manpage to "
+"find out how to convert changelogs from legacy encodings. Finally, a "
+"I<changelog> or I<NEWS> file can be created from scratch using the B<--"
+"create> option described below."
+msgstr ""
+"B<debchange> ou o seu alias B<dch> irá adicionar uma nova linha comentário "
+"ao changelog Debian na árvore fonte actual. Este comando tem de ser corrido "
+"de dentro dessa árvore. Se o texto da alteração for dado na linha de "
+"comandos, o B<debchange> irá correr em modo de lote e simplesmente adiciona "
+"o texto, com quebras de linha se necessário, no lugar apropriado em I<debian/"
+"changelog> (ou no changelog especificado pelas opções, como descrito em "
+"baixo). Se o texto dado na linha de comandos for uma string nula. o "
+"B<debchange> irá correr em modo de lote sem adicionar nenhum texto. Se o "
+"texto dado na linha de comandos for uma string de espaço, o B<debchange> irá "
+"correr em modo de lote e adicionar uma entrada em branco ao changelog. Se "
+"nenhum texto for especificado então o B<debchange> irá correr o editor "
+"determinado pelo B<sensible-editor> para que você edite o ficheiro. (As "
+"variáveis de ambiente B<VISUAL> e B<EDITOR> são usadas nesta ordem para "
+"determinar qual o editor a usar.) Editores que compreendem a opção I<+n> "
+"para iniciarem a edição numa linha específica irão usar isto para mover para "
+"a linha correcta do ficheiro para editar. Se o editor for terminado sem "
+"modificar o ficheiro temporário, o B<debchange> irá terminar sem tocar no "
+"changelog existente. B<Note que é assumido que o changelog está codificado "
+"com codificação UTF-8. Se não estiver, podem ocorrer problemas.> Por favor "
+"veja o manual do B<iconv>(1) para descobrir como converter changelogs de "
+"codificações antigas. Finalmente, um ficheiro I<changelog> ou I<NEWS> pode "
+"ser criado a partir do esboço usando a opção B<--create> descrita em baixo."
+
+#. type: Plain text
+#: ../scripts/debchange.1:46
+msgid ""
+"B<debchange> also supports automatically producing bug-closing changelog "
+"entries, using the B<--closes> option. This will usually query the BTS, the "
+"Debian Bug Tracking System (see https://bugs.debian.org/) to determine the "
+"title of the bug and the package in which it occurs. This behaviour can be "
+"stopped by giving a B<--noquery> option or by setting the configuration "
+"variable B<DEBCHANGE_QUERY_BTS> to I<no>, as described below. In either "
+"case, the editor (as described above) will always be invoked to give an "
+"opportunity to modify the entries, and the changelog will be accepted "
+"whether or not modifications are made. An extra changelog entry can be "
+"given on the command line in addition to the closes entries."
+msgstr ""
+"B<debchange> também suporta a produção automática de entradas no registo de "
+"alterações de fecho de bugs, usando a opção B<--closes>. Isto irá geralmente "
+"questionar o BTS, O Debian Bug Tracking System (veja https://bugs.debian."
+"org/) para determinar o título do bug e o pacote no qual ele ocorre. Este "
+"comportamento pode ser parado ao dar a opção B<--noquery> ou ao definir a "
+"variável de configuração B<DEBCHANGE_QUERY_BTS> para I<no>, como descrito em "
+"baixo. Em qualquer dos casos, o editor (como descrito em cima) será sempre "
+"invocado para dar uma oportunidade de modificar as entradas, e o changelog "
+"será aceite tenha ou não sido modificado. Pode ser dada na linha de comandos "
+"uma entrada extra ao changelog adicional às entradas de fechos."
+
+#. type: Plain text
+#: ../scripts/debchange.1:53
+msgid ""
+"At most one of B<--append>, B<--increment>, B<--edit>, B<--release>, and B<--"
+"newversion> may be specified as listed below. If no options are specified, "
+"B<debchange> will use heuristics to guess whether or not the package has "
+"been successfully released, and behave as if B<--increment> had been "
+"specified if the package has been released, or otherwise as if B<--append> "
+"has been specified."
+msgstr ""
+"No máximo pode ser especificado um de B<--append>, B<--increment>, B<--"
+"edit>, B<--release>, e B<--newversion> como listado em baixo. Se nenhuma "
+"opção for especificada, o B<debchange> irá usar heurísticas para adivinhar "
+"se ou não um pacote foi lançado com sucesso, e comporta-se com se B<--"
+"increment> fosse especificado se o pacote foi lançado, ou caso contrário se "
+"B<--append> foi especificado."
+
+#. type: Plain text
+#: ../scripts/debchange.1:68
+msgid ""
+"Two different sets of heuristics can be used, as controlled by the B<--"
+"release-heuristic> option or the B<DEBCHANGE_RELEASE_HEURISTIC> "
+"configuration variable. The default I<changelog> heuristic assumes the "
+"package has been released unless its changelog contains B<UNRELEASED> in the "
+"distribution field. If this heuristic is enabled then the distribution will "
+"default to B<UNRELEASED> in new changelog entries, and the B<--mainttrailer> "
+"option described below will be automatically enabled. This can be useful if "
+"a package can be released by different maintainers, or if you do not keep "
+"the upload logs. The alternate I<log> heuristic determines if a package has "
+"been released by looking for an appropriate B<dupload>(1) or B<dput>(1) log "
+"file in the parent directory. A warning will be issued if the log file is "
+"found but a successful upload is not recorded. This may be because the "
+"previous upload was performed with a version of B<dupload> prior to 2.1 or "
+"because the upload failed."
+msgstr ""
+"Podem ser usados dois conjuntos de heurísticas, controlados pela opção B<--"
+"release-heuristic> ou pela variável de configuração "
+"B<DEBCHANGE_RELEASE_HEURISTIC>. A heurística predefinida de I<changelog> "
+"assume que o pacote foi lançado a menos que o seu changelog contenha "
+"B<UNRELEASED> no campo distribution. Se esta heurística estiver activa então "
+"distribution irá ter por predefinição B<UNRELEASED> nas novas entradas do "
+"changelog, e a opção B<--mainttrailer> descrita em baixo será activada "
+"automaticamente. Isto pode ser útil se um pacote puder ser lançado por "
+"diferentes maintainers, ou se você não guarda os relatórios de envio. A "
+"heurística alternativa I<log> determina se um pacote foi lançado ao olhar "
+"para um ficheiro de relatório B<dupload>(1) ou B<dput>(1) apropriado no "
+"directório pai. Será emitido um aviso se o ficheiro de relatório for "
+"encontrado mas um envio com sucesso não foi registado. Isto pode acontecer "
+"porque o envio anterior foi feito com uma versão de B<dupload> anterior a "
+"2.1 ou porque o envio falhou."
+
+#. type: Plain text
+#: ../scripts/debchange.1:86
+msgid ""
+"If either B<--increment> or B<--newversion> is used, the name and email for "
+"the new version will be determined as follows. If the environment variable "
+"B<DEBFULLNAME> is set, this will be used for the maintainer full name; if "
+"not, then B<NAME> will be checked. If the environment variable B<DEBEMAIL> "
+"is set, this will be used for the email address. If this variable has the "
+"form \"name E<lt>emailE<gt>\", then the maintainer name will also be taken "
+"from here if neither B<DEBFULLNAME> nor B<NAME> is set. If this variable is "
+"not set, the same test is performed on the environment variable B<EMAIL>. "
+"Next, if the full name has still not been determined, then use "
+"B<getpwuid>(3) to determine the name from the password file. If this fails, "
+"use the previous changelog entry. For the email address, if it has not been "
+"set from B<DEBEMAIL> or B<EMAIL>, then look in I</etc/mailname>, then "
+"attempt to build it from the username and FQDN, otherwise use the email "
+"address in the previous changelog entry. In other words, it's a good idea "
+"to set B<DEBEMAIL> and B<DEBFULLNAME> when using this script."
+msgstr ""
+"Se for usado B<--increment> ou B<--newversion>, o nome e email para a nova "
+"versão serão determinados como se segue. Se a variável de ambiente "
+"B<DEBFULLNAME> estiver definida, será usada para o nome completo do "
+"maintainer. Se não, então será verificado B<NAME>. Se a variável de ambiente "
+"B<DEBEMAIL> estiver definida, será usada para o endereço de email. Se esta "
+"variável tiver o formulário \"name E<lt>emailE<gt>\", então será também "
+"obtido o nome do maintainer a partir daqui se nenhum de B<DEBFULLNAME> nem "
+"B<NAME> estiverem definidos. Se esta variável não estiver definida. é "
+"executado o mesmo teste na variável de ambiente B<EMAIL>. De seguida, se o "
+"nome completo ainda não foi determinado, então usa B<getpwuid>(3) para "
+"determinar o nome a partir do ficheiro da palavra passe. Se isto falhar, usa "
+"a entrada no registo de alterações anterior. Para o endereço email, se ainda "
+"não foi definido a partir de B<DEBEMAIL> ou B<EMAIL>, então procura em I</"
+"etc/mailname>, depois tenta construí-lo a partir do nome de utilizador e "
+"FQDN, caso contrário, usa o endereço de email na entrada do registo de "
+"alterações anterior. Por outras palavras, é uma boa ideia definir "
+"B<DEBEMAIL> e B<DEBFULLNAME> quando se usa este script."
+
+#. type: Plain text
+#: ../scripts/debchange.1:99
+msgid ""
+"Support is included for changelogs that record changes by multiple co-"
+"maintainers of a package. If an entry is appended to the current version's "
+"entries, and the maintainer is different from the maintainer who is listed "
+"as having done the previous entries, then lines will be added to the "
+"changelog to tell which maintainers made which changes. Currently only one "
+"of the several such styles of recording this information is supported, in "
+"which the name of the maintainer who made a set of changes appears on a line "
+"before the changes, inside square brackets. This can be switched on and off "
+"using the B<-->[B<no>]B<multimaint> option or the B<DEBCHANGE_MULTIMAINT> "
+"configuration file option; the default is to enable it. Note that if an "
+"entry has already been marked in this way, then this option will be silently "
+"ignored."
+msgstr ""
+"Está incluído suporte para changelogs que gravam alterações de múltiplos co-"
+"maintainers dum pacote. Se uma entrada for acrescentada às entradas da "
+"versão actual, e o maintainer for diferente do maintainer que fez registou a "
+"entrada anterior, então serão adicionadas linhas ao registo de alterações "
+"para dizer quais maintainers fizeram quais alterações. Actualmente apenas é "
+"suportado um dos vários estilos de guardar esta informação, no qual o nome "
+"do maintainer que fez um conjunto de alterações aparece numa linha antes das "
+"alterações, dentro de parênteses rectos. Isto pode ser ligado ou desligado "
+"usando a opção B<-->[B<no>]B<multimaint> da opção de ficheiro de "
+"configuração B<DEBCHANGE_MULTIMAINT> ; a predefinição é estar ligado. Note "
+"que se uma entrada já estiver sido marcada deste modo, então esta opção será "
+"ignorada em silêncio."
+
+#. type: Plain text
+#: ../scripts/debchange.1:105
+msgid ""
+"If the directory name of the source tree has the form I<package>-I<version>, "
+"then B<debchange> will also attempt to rename it if the (upstream) version "
+"number changes. This can be prevented by using the B<--preserve> command "
+"line or configuration file option as described below."
+msgstr ""
+"Se o nome de directório da árvore fonte tiver o formato I<package>-"
+"I<version>, então B<debchange> irá também tentar renome-a-lo se o número de "
+"versão (do autor) mudar. Isto pode ser prevenido usando a opção de linha de "
+"comandos ou de ficheiro de configuração B<--preserve> como descrito em baixo."
+
+#. type: Plain text
+#: ../scripts/debchange.1:109
+msgid ""
+"If B<--force-bad-version> or B<--allow-lower-version> is used, B<debchange> "
+"will not stop if the new version is less than the current one. This is "
+"especially useful while doing backports."
+msgstr ""
+"Se for usado B<--force-bad-version> ou B<--allow-lower-version>, o "
+"B<debchange> não irá parar se a nova versão for menor que a actual. Isto é "
+"especialmente útil quando se faz backports."
+
+#. type: Plain text
+#: ../scripts/debchange.1:120
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debchange> will climb the directory tree until it finds a I<debian/"
+"changelog> file. As a safeguard against stray files causing potential "
+"problems, it will examine the name of the parent directory once it finds the "
+"I<debian/changelog> file, and check that the directory name corresponds to "
+"the package name. Precisely how it does this is controlled by two "
+"configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+"Em comum com vários outros scripts no pacote B<devscripts>, o B<debchange> "
+"irá subir a árvore de directórios até encontrar um ficheiro I<debian/"
+"changelog>. Como segurança contra ficheiros errantes que podem causar "
+"problemas potenciais, irá examinar o nome do directório pai assim que "
+"encontra o ficheiro I<debian/changelog>, e verifica que o nome de directório "
+"corresponde ao nome do pacote. O modo preciso de como isto é feito é "
+"controlado por duas variáveis de ficheiro de configuração "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> e B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, e as "
+"suas opções de linha de comandos correspondentes B<--check-dirname-level> e "
+"B<--check-dirname-regex>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:145
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a 'B</>', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'B<PACKAGE>', this will be replaced by the source package name, as "
+"determined from the changelog. The default value for the regex is: "
+"\\'B<PACKAGE(-.+)?>', thus matching directory names such as B<PACKAGE> and "
+"B<PACKAGE->I<version>."
+msgstr ""
+"O nome de directório é verificado ao testar se o nome de directório actual "
+"(como determinado por B<pwd>(1)) corresponde à expressão regular dada pela "
+"opção de ficheiro de configuração B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> ou pela "
+"opção de linha de comandos B<--check-dirname-regex> I<regex>. Aqui I<regex> "
+"é uma expressão regular de Perl (veja B<perlre>(perl)), que será ancorada no "
+"início e no fim Se I<regex> conter um 'B</>', então tem de corresponder ao "
+"caminho de directório completo. Se não, então tem de corresponder ao nome de "
+"directório completo. Se I<regex> conter a string \\'B<PACKAGE>', isto será "
+"substituído pelo nome do pacote fonte, como determinado a partir do registo "
+"de alterações. O valor predefinido para a regex é: \\'B<PACKAGE(-.+)?>', "
+"assim correspondendo a nomes de directórios tais como B<PACKAGE> e B<PACKAGE-"
+">I<version>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:149
+msgid ""
+"The default changelog to be edited is I<debian/changelog>; however, this can "
+"be changed using the B<--changelog> or B<--news> options or the B<CHANGELOG> "
+"environment variable, as described below."
+msgstr ""
+"O registo de alterações predefinido a ser editado é I<debian/changelog>; no "
+"entanto, isto pode ser mudado usando as opções B<--changelog> ou B<--news> "
+"ou a variável de ambiente B<CHANGELOG>, como descrito em baixo."
+
+#. type: TP
+#: ../scripts/debchange.1:150
+#, no-wrap
+msgid "B<--append>, B<-a>"
+msgstr "B<--append>, B<-a>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:153
+msgid "Add a new changelog entry at the end of the current version's entries."
+msgstr ""
+"Adiciona uma nova entrada no changelog no final da entrada da versão actual."
+
+#. type: TP
+#: ../scripts/debchange.1:153
+#, no-wrap
+msgid "B<--increment>, B<-i>"
+msgstr "B<--increment>, B<-i>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:166
+msgid ""
+"Increment either the final component of the Debian release number or, if "
+"this is a native Debian package, the version number. On Ubuntu or Tanglu, "
+"this will also change the suffix from buildX to ubuntu1/tanglu1. Use B<-R>, "
+"B<--rebuild> for a no change rebuild increment. This creates a new section "
+"at the beginning of the changelog with appropriate headers and footers. "
+"Also, if this is a new version of a native Debian package, the directory "
+"name is changed to reflect this. If B<DEBCHANGE_RELEASE_HEURISTIC> is "
+"I<changelog> (default) and the current release is I<UNRELEASED>, this will "
+"only change the version of the current changelog stanza. Otherwise, this "
+"will create a new changelog stanza with the new version."
+msgstr ""
+"Incrementa ou o componente final do número de lançamento Debian ou, se este "
+"for um pacote nativo Debian, o número da versão. Em Ubuntu ou Tanglu, isto "
+"irá também mudar o sufixo de buildX para ubuntu1/tanglu1. Use B<-R>, B<--"
+"rebuild> para um incremento de recompilação sem alterações. Isto cria uma "
+"nova versão no inicio do registo de alterações com cabeçalhos e finais "
+"apropriados. Também, se isto for uma nova versão de um pacote nativo Debian, "
+"o nome do directório é mudado para refletir isto. Se "
+"B<DEBCHANGE_RELEASE_HEURISTIC> for I<changelog> (a predefinição) e o "
+"lançamento actual for I<UNRELEASED>, isto irá apenas mudar a estrofe do "
+"registo de alterações actual. Caso contrário, isto irá criar uma nova "
+"estrofe no registo de alterações com a nova versão."
+
+#. type: TP
+#: ../scripts/debchange.1:166
+#, no-wrap
+msgid "B<--newversion >I<version>, B<-v >I<version>"
+msgstr "B<--newversion >I<version>, B<-v >I<version>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:176
+msgid ""
+"This specifies the version number (including the Debian release part) "
+"explicitly and behaves as the B<--increment> option in other respects. It "
+"will also change the directory name if the upstream version number has "
+"changed. If B<DEBCHANGE_RELEASE_HEURISTIC> is I<changelog> (default) and "
+"the current release is I<UNRELEASED>, this will only change the version of "
+"the current changelog stanza. Otherwise, this will create a new changelog "
+"stanza with the new version."
+msgstr ""
+"Isto especifica o número da versão (incluindo a parte do lançamento Debian) "
+"explicitamente e comporta-se como a opção B<--increment> em outros aspectos. "
+"Também muda o nome do directório se o número de versão do autor tiver "
+"mudado. Se B<DEBCHANGE_RELEASE_HEURISTIC> for I<changelog> (predefinição) e "
+"o lançamento actual for I<UNRELEASED>, isto irá apenas mudar a versão da "
+"estrofe actual do registo de alterações. Caso contrário, isto irá criar uma "
+"nova estrofe de registo de alterações com a nova versão."
+
+#. type: TP
+#: ../scripts/debchange.1:176
+#, no-wrap
+msgid "B<--edit>, B<-e>"
+msgstr "B<--edit>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:179
+msgid "Edit the changelog in an editor."
+msgstr "Edita o changelog num editor."
+
+#. type: TP
+#: ../scripts/debchange.1:179
+#, no-wrap
+msgid "B<--release>, B<-r>"
+msgstr "B<--release>, B<-r>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:188
+msgid ""
+"Finalize the changelog for a release. Update the changelog timestamp. If "
+"the distribution is set to B<UNRELEASED>, change it to the distribution from "
+"the previous changelog entry (or another distribution as specified by B<--"
+"distribution>). If there are no previous changelog entries and an explicit "
+"distribution has not been specified, B<unstable> will be used (or the name "
+"of the current development release when run under Ubuntu)."
+msgstr ""
+"Finaliza o changelog para um lançamento. Actualiza a marca temporal do "
+"changelog. Se a distribuição estiver definida para B<UNRELEASED>, muda-a "
+"para a distribuição da entrada anterior no changelog (ou para outra "
+"distribuição como especificada por B<--distribution>). Se não existir "
+"nenhuma entrada anterior no changelog e não foi especificada uma "
+"distribuição explícita, será usado B<unstable> (ou o nome do lançamento "
+"actualmente em desenvolvimento quando corre sob Ubuntu)."
+
+#. type: TP
+#: ../scripts/debchange.1:188
+#, no-wrap
+msgid "B<--force-save-on-release>"
+msgstr "B<--force-save-on-release>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:193
+msgid ""
+"When B<--release> is used, an editor is opened to allow inspection of the "
+"changelog. The user is required to save the file to accept the modified "
+"changelog, otherwise the original will be kept (default)."
+msgstr ""
+"Quando é usado B<--release>, é aberto um editor para permitir inspeção ao "
+"changelog. É requerido que o utilizador salve o ficheiro para aceitar o "
+"changelog modificado, caso contrário será mantido o original (predefinição)."
+
+#. type: TP
+#: ../scripts/debchange.1:193
+#, no-wrap
+msgid "B<--no-force-save-on-release>"
+msgstr "B<--no-force-save-on-release>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:199
+msgid ""
+"Do not do so. Note that a dummy changelog entry may be supplied in order to "
+"achieve the same effect - e.g. B<debchange --release \"\">. The entry will "
+"not be added to the changelog but its presence will suppress the editor."
+msgstr ""
+"Não o faz. Note que pode ser aplicada uma entrada fantoche no changelog de "
+"modo a se conseguir o mesmo efeito - ex. B<debchange --release \"\">. A "
+"entrada não será adicionada ao registo de alterações mas a sua presença irá "
+"suprimir o editor."
+
+#. type: Plain text
+#: ../scripts/debchange.1:211
+msgid ""
+"This will create a new I<debian/changelog> file (or I<NEWS> if the B<--news> "
+"option is used). You must be in the top-level directory to use this; no "
+"directory name checking will be performed. The package name and version can "
+"either be specified using the B<--package> and B<--newversion> options, "
+"determined from the directory name using the B<--fromdirname> option or "
+"entered manually into the generated I<changelog> file. The maintainer name "
+"is determined from the environment if this is possible, and the distribution "
+"is specified either using the B<--distribution> option or in the generated "
+"I<changelog> file."
+msgstr ""
+"Isto irá criar um novo ficheiro I<debian/changelog> (ou I<NEWS> se for usada "
+"a opção B<--news>). Você tem de estar no directório de nível de topo para "
+"usar isto; não será executada a verificação do nome do directório. O nome do "
+"pacote e a versão podem ou ser especificados usando as opções B<--package> e "
+"B<--newversion>, determinados a partir do nome do directório usando a opção "
+"B<--fromdirname> ou introduzidos manualmente no ficheiro I<changelog> "
+"gerado. O nome do maintainer é determinado a partir do ambiente se isto for "
+"possível, e a distribuição é especificada ou usando a opção B<--"
+"distribution> ou no ficheiro I<changelog> gerado."
+
+#. type: TP
+#: ../scripts/debchange.1:211
+#, no-wrap
+msgid "B<--empty>"
+msgstr "B<--empty>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:218
+msgid ""
+"When used in combination with B<--create>, suppress the automatic addition "
+"of an \"B<initial release>\" changelog entry (so that the next invocation of "
+"B<debchange> adds the first entry). Note that this will cause a B<dpkg-"
+"parsechangelog> warning on the next invocation due to the lack of changes."
+msgstr ""
+"Quando usado em combinação com B<--create>, suprime a adição automática de "
+"entrada \"B<initial release>\" no changelog (para que a próxima invocação de "
+"B<debchange> adicione a primeira entrada). Note que isto irá provocar um "
+"aviso B<dpkg-parsechangelog> na próxima invocação devido à falta de "
+"alterações."
+
+#. type: =item
+#: ../scripts/debchange.1:218 ../scripts/mk-origtargz.pl:72
+#: ../scripts/uscan.pl:1683
+#, no-wrap
+msgid "B<--package> I<package>"
+msgstr "B<--package> I<package>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:223
+msgid ""
+"This specifies the package name to be used in the new changelog; this may "
+"only be used in conjunction with the B<--create>, B<--increment> and B<--"
+"newversion> options."
+msgstr ""
+"Isto especifica o nome do pacote a ser usado no novo changelog; isto só pode "
+"ser usado em conjunto com as opções B<--create>, B<--increment> e B<--"
+"newversion>."
+
+#. type: TP
+#: ../scripts/debchange.1:223
+#, no-wrap
+msgid "B<--nmu>, B<-n>"
+msgstr "B<--nmu>, B<-n>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:232
+msgid ""
+"Increment the Debian release number for a non-maintainer upload by either "
+"appending a \"B<.1>\" to a non-NMU version number (unless the package is "
+"Debian native, in which case \"B<+nmu1>\" is appended) or by incrementing an "
+"NMU version number, and add an NMU changelog comment. This happens "
+"automatically if the packager is neither in the B<Maintainer> nor the "
+"B<Uploaders> field in I<debian/control>, unless B<DEBCHANGE_AUTO_NMU> is set "
+"to I<no> or the B<--no-auto-nmu> option is used."
+msgstr ""
+"Incrementa o número de lançamento Debian para um envio de não-maintainer ou "
+"ao acrescentar um \"B<.1>\" a um número de versão não-NMU (a menos que o "
+"pacote seja nativo Debian, que neste caso é acrescentado \"B<+nmu1>\") ou ao "
+"incrementar um número de versão NMU e adiciona um comentário NMU ao registo "
+"de alterações. Isto acontece automaticamente se o pacote não estiver nem no "
+"campo B<Maintainer> nem B<Uploaders> em I<debian/control>, a menos que "
+"B<DEBCHANGE_AUTO_NMU> esteja definido para I<no> ou seja usada a opção B<--"
+"no-auto-nmu>."
+
+#. type: TP
+#: ../scripts/debchange.1:232
+#, no-wrap
+msgid "B<--bin-nmu>"
+msgstr "B<--bin-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:237
+msgid ""
+"Increment the Debian release number for a binary non-maintainer upload by "
+"either appending a \"B<+b1>\" to a non-binNMU version number or by "
+"incrementing a binNMU version number, and add a binNMU changelog comment."
+msgstr ""
+"Incrementa o número de lançamento Debian para um envio binário de não-"
+"maintainer ao ou acrescentar um \"B<+b1>\" a um número de versão não-binNMU "
+"ou ao incrementar um numero de versão binNMU, e adiciona um comentário de "
+"binNMU ao registo de alterações."
+
+#. type: TP
+#: ../scripts/debchange.1:237
+#, no-wrap
+msgid "B<--qa>, B<-q>"
+msgstr "B<--qa>, B<-q>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:241
+msgid ""
+"Increment the Debian release number for a Debian QA Team upload, and add a "
+"B<QA upload> changelog comment."
+msgstr ""
+"Incrementa o número de lançamento Debian para um envio de Equipa QA Debian, "
+"e adiciona um comentário B<QA upload> ao registo de alterações."
+
+#. type: TP
+#: ../scripts/debchange.1:241
+#, no-wrap
+msgid "B<--rebuild>, B<-R>"
+msgstr "B<--rebuild>, B<-R>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:245
+msgid ""
+"Increment the Debian release number for a no-change rebuild by appending a "
+"\"build1\" or by incrementing a rebuild version number."
+msgstr ""
+"Incrementa o número de lançamento Debian para uma recompilação de não-"
+"alterações ao acrescentar um \"build1\" ou ao incrementar um número de "
+"versão de recompilação."
+
+#. type: TP
+#: ../scripts/debchange.1:245
+#, no-wrap
+msgid "B<--security>, B<-s>"
+msgstr "B<--security>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:249
+msgid ""
+"Increment the Debian release number for a Debian Security Team non-"
+"maintainer upload, and add a B<Security Team upload> changelog comment."
+msgstr ""
+"Incrementa o número de lançamento Debian para um envio não-maintainer da "
+"Equipa de Segurança Debian, e adiciona um comentário B<Security Team upload> "
+"ao registo de alterações."
+
+#. type: TP
+#: ../scripts/debchange.1:249
+#, no-wrap
+msgid "B<--lts>"
+msgstr "B<--lts>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:253
+msgid ""
+"Increment the Debian release number for a LTS Security Team non-maintainer "
+"upload, and add a B<LTS Security Team upload> changelog comment."
+msgstr ""
+"Incrementa o número de lançamento Debian para um envio não-maintainer da "
+"Equipa de Segurança LTS, e adiciona um comentário B<LTS Security Team "
+"upload> ao registo de alterações."
+
+#. type: TP
+#: ../scripts/debchange.1:253
+#, no-wrap
+msgid "B<--team>"
+msgstr "B<--team>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:257
+msgid ""
+"Increment the Debian release number for a team upload, and add a B<Team "
+"upload> changelog comment."
+msgstr ""
+"Incrementa o número de lançamento Debian para um envio de equipa, e adiciona "
+"um comentário B<Team upload> ao registo de alterações."
+
+#. type: TP
+#: ../scripts/debchange.1:257
+#, no-wrap
+msgid "B<--upstream>, B<-U>"
+msgstr "B<--upstream>, B<-U>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:261
+msgid ""
+"Don't append B<distro-name1> to the version on a derived distribution. "
+"Increment the Debian version."
+msgstr ""
+"Não acrescenta B<distro-name1> à versão numa distribuição derivada. "
+"Incrementa a versão Debian."
+
+#. type: TP
+#: ../scripts/debchange.1:261
+#, no-wrap
+msgid "B<--bpo>"
+msgstr "B<--bpo>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:265
+msgid ""
+"Increment the Debian release number for an upload to bullseye-backports, and "
+"add a backport upload changelog comment."
+msgstr ""
+"Incrementa o número de lançamento Debian para um envio para bullseye-"
+"backports, e adiciona um comentário de envio backport ao registo de "
+"alterações."
+
+#. type: TP
+#: ../scripts/debchange.1:265
+#, no-wrap
+msgid "B<--stable>"
+msgstr "B<--stable>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:269
+msgid ""
+"Increment the Debian release number for an upload to the current stable "
+"release."
+msgstr ""
+"Incrementa o número de lançamento Debian para um envio para o lançamento "
+"estável actual."
+
+#. type: TP
+#: ../scripts/debchange.1:269
+#, no-wrap
+msgid "B<--local>, B<-l>I<suffix>"
+msgstr "B<--local>, B<-l>I<suffix>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:272
+#, no-wrap
+msgid " Add a suffix to the Debian version number for a local build.\n"
+msgstr " Adiciona um sufixo ao número de versão Debian para uma compilação local.\n"
+
+#. type: TP
+#: ../scripts/debchange.1:272
+#, no-wrap
+msgid "B<--force-bad-version>, B<-b>"
+msgstr "B<--force-bad-version>, B<-b>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:276 ../scripts/uupdate.1:66
+msgid ""
+"Force a version number to be less than the current one (e.g., when "
+"backporting)."
+msgstr ""
+"Força o número de versão a ser menor que o actual (ex. ao recuar para versão "
+"anterior (backporting))."
+
+#. type: TP
+#: ../scripts/debchange.1:276
+#, no-wrap
+msgid "B<--allow-lower-version >I<pattern>"
+msgstr "B<--allow-lower-version >I<pattern>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:280
+msgid ""
+"Allow a version number to be less than the current one if the new version "
+"matches the specified pattern."
+msgstr ""
+"Permite que um número de versão seja menor do que o actual se a nova versão "
+"corresponder ao padrão especificado."
+
+#. type: TP
+#: ../scripts/debchange.1:280
+#, no-wrap
+msgid "B<--force-distribution>"
+msgstr "B<--force-distribution>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:284
+msgid ""
+"Force the provided distribution to be used, even if it doesn't match the "
+"list of known distributions (e.g. for unofficial distributions)."
+msgstr ""
+"Força a distribuições fornecida a ser usada, mesmo que não corresponda à "
+"lista de distribuições conhecidas (ex. para distribuições não oficiais)."
+
+#. type: TP
+#: ../scripts/debchange.1:284
+#, no-wrap
+msgid "B<--auto-nmu>"
+msgstr "B<--auto-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:288
+msgid ""
+"Attempt to automatically determine whether a change to the changelog "
+"represents a Non Maintainer Upload. This is the default."
+msgstr ""
+"Tenta determinar automaticamente se uma alteração no changelog representa um "
+"Envio de Não-Maintainer. Isto é a predefinição."
+
+#. type: TP
+#: ../scripts/debchange.1:288
+#, no-wrap
+msgid "B<--no-auto-nmu>"
+msgstr "B<--no-auto-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:292
+msgid ""
+"Disable automatic NMU detection. Equivalent to setting "
+"B<DEBCHANGE_AUTO_NMU> to I<no>."
+msgstr ""
+"Desactiva detecção NMU automática. Equivalente a definir "
+"B<DEBCHANGE_AUTO_NMU> para I<no>."
+
+#. type: TP
+#: ../scripts/debchange.1:292
+#, no-wrap
+msgid "B<--fromdirname>, B<-d>"
+msgstr "B<--fromdirname>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:302
+msgid ""
+"This will take the upstream version number from the directory name, which "
+"should be of the form I<package>B<->I<version>. If the upstream version "
+"number has increased from the most recent changelog entry, then a new entry "
+"will be made with version number I<version>B<-1> (or I<version> if the "
+"package is Debian native), with the same epoch as the previous package "
+"version. If the upstream version number is the same, this option will "
+"behave in the same way as B<-i>."
+msgstr ""
+"Isto irá tomar o número de versão do autor a partir do nome do directório, o "
+"qual deve estar no formato I<package>B<->I<version>. Se o número de versão "
+"do autor tiver aumentado em relação à entrada mais recente no registo de "
+"alterações, então será feita uma nova entrada com número de versão "
+"I<version>B<-1> (ou I<version> se o pacote for nativo Debian, com o mesmo "
+"epoch que a versão anterior do pacote. Se o número de versão do autor é o "
+"mesmo, esta opção irá comportar-se do mesmo modo que B<-i>."
+
+#. type: TP
+#: ../scripts/debchange.1:302
+#, no-wrap
+msgid "B<--closes>I< nnnnn>[B<,>I<nnnnn >...]"
+msgstr "B<--closes>I< nnnnn>[B<,>I<nnnnn >...]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:308
+msgid ""
+"Add changelog entries to close the specified bug numbers. Also invoke the "
+"editor after adding these entries. Will generate warnings if the BTS cannot "
+"be contacted (and B<--noquery> has not been specified), or if there are "
+"problems with the bug report located."
+msgstr ""
+"Adiciona entradas changelog para fechar os números de bugs especificados. "
+"Também invoca o editor após adicionar estas entradas. Irá gerar avisos se o "
+"BTS não puder ser contactado (e se B<--noquery> não for especificado), ou se "
+"existirem problemas com o relatório de bug localizado."
+
+#. type: TP
+#: ../scripts/debchange.1:308
+#, no-wrap
+msgid "B<-->[B<no>]B<query>"
+msgstr "B<-->[B<no>]B<query>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:311
+msgid "Should we attempt to query the BTS when generating closes entries?"
+msgstr "Deveremos tentar consultar o BTS quando geramos entradas de fechos?"
+
+#. type: TP
+#: ../scripts/debchange.1:311
+#, no-wrap
+msgid "B<--preserve>, B<-p>"
+msgstr "B<--preserve>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:316
+msgid ""
+"Preserve the source tree directory name if the upstream version number (or "
+"the version number of a Debian native package) changes. See also the "
+"configuration variables section below."
+msgstr ""
+"Preserva o nome do directório da árvore fonte se o número de versão do autor "
+"(ou o número de versão de um pacote nativo Debian) mudar. Veja também a "
+"secção de variáveis de configuração em baixo."
+
+#. type: TP
+#: ../scripts/debchange.1:316
+#, no-wrap
+msgid "B<--no-preserve>, B<--nopreserve>"
+msgstr "B<--no-preserve>, B<--nopreserve>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:319
+msgid "Do not preserve the source tree directory name (default)."
+msgstr "Não preserva o nome do directório da árvore fonte (predefinição)."
+
+#. type: TP
+#: ../scripts/debchange.1:319
+#, no-wrap
+msgid "B<--vendor >I<vendor>"
+msgstr "B<--vendor >I<vendor>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:324
+msgid ""
+"Override the distributor ID over the default returned by dpkg-vendor. This "
+"name is used for heuristics applied to new package versions and for sanity "
+"checking of the target distribution."
+msgstr ""
+"Sobrepõe o ID de distribuidor sobre o predefinido retornado por dpkg-vendor. "
+"Este nome é usado para heurística aplicada a novas versões de pacote e para "
+"verificação de sanidade da distribuição alvo."
+
+#. type: TP
+#: ../scripts/debchange.1:324
+#, no-wrap
+msgid "B<--distribution >I<dist>, B<-D >I<dist>"
+msgstr "B<--distribution >I<dist>, B<-D >I<dist>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:329
+msgid ""
+"Use the specified distribution in the changelog entry being edited, instead "
+"of using the previous changelog entry's distribution for new entries or the "
+"existing value for existing entries."
+msgstr ""
+"Usa a distribuição especificada na entrada de changelog a ser editada, em "
+"vez de usar a distribuição da entrada anterior de changelog para novas "
+"entradas ou o valor existente para entradas existentes."
+
+#. type: TP
+#: ../scripts/debchange.1:329
+#, no-wrap
+msgid "B<--urgency >I<urgency>, B<-u >I<urgency>"
+msgstr "B<--urgency >I<urgency>, B<-u >I<urgency>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:334
+msgid ""
+"Use the specified urgency in the changelog entry being edited, instead of "
+"using the default \"B<medium>\" for new entries or the existing value for "
+"existing entries."
+msgstr ""
+"Usa a urgência especificada na entrada de changelog a ser editada, em vez de "
+"usar a predefinição \"B<medium>\" para novas entradas ou o valor existente "
+"para entradas existentes."
+
+#. type: TP
+#: ../scripts/debchange.1:334
+#, no-wrap
+msgid "B<--changelog >I<file>, B<-c >I<file>"
+msgstr "B<--changelog >I<file>, B<-c >I<file>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:340
+msgid ""
+"This will edit the changelog I<file> instead of the standard I<debian/"
+"changelog>. This option overrides any B<CHANGELOG> environment variable "
+"setting. Also, no directory traversing or checking will be performed when "
+"this option is used."
+msgstr ""
+"Isto irá editar o I<file> registo de alterações em vez do I<debian/"
+"changelog> standard. Esta opção sobrepõe qualquer definição de variável de "
+"ambiente B<CHANGELOG>. Também, não será executado cruzamento ou verificação "
+"de directório quando esta opção é usada."
+
+#. type: TP
+#: ../scripts/debchange.1:340
+#, no-wrap
+msgid "B<--news> [I<newsfile>]"
+msgstr "B<--news> [I<newsfile>]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:346
+msgid ""
+"This will edit I<newsfile> (by default, I<debian/NEWS>) instead of the "
+"regular changelog. Directory searching will be performed. The changelog "
+"will be examined in order to determine the current package version."
+msgstr ""
+"Isto irá editar I<newsfile> (por predefinição, I<debian/NEWS>) em vez do "
+"changelog regular. A procura de directório será executada. O changelog será "
+"examinado de modo a determinar a versão de pacote actual."
+
+#. type: TP
+#: ../scripts/debchange.1:346
+#, no-wrap
+msgid "B<-->[B<no>]B<multimaint>"
+msgstr "B<-->[B<no>]B<multimaint>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:351
+msgid ""
+"Should we indicate that parts of a changelog entry have been made by "
+"different maintainers? Default is yes; see the discussion above and also the "
+"B<DEBCHANGE_MULTIMAINT> configuration file option below."
+msgstr ""
+"Devemos indicar que partes de uma entrada no changelog foram feitas por "
+"diferentes maintainers? A predefinição é \"sim\": veja a discussão em cima e "
+"também a opção B<DEBCHANGE_MULTIMAINT> de ficheiro de configuração em baixo."
+
+#. type: TP
+#: ../scripts/debchange.1:351
+#, no-wrap
+msgid "B<-->[B<no>]B<multimaint-merge>"
+msgstr "B<-->[B<no>]B<multimaint-merge>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:356
+msgid ""
+"Should all changes made by the same author be merged into the same changelog "
+"section? Default is no; see the discussion above and also the "
+"B<DEBCHANGE_MULTIMAINT_MERGE> configuration file option below."
+msgstr ""
+"Devem todas as alterações feitas pelo mesmo autor serem fundidas na mesma "
+"secção do changelog? A predefinição é \"não\"; veja a discussão em cima e "
+"também a opção B<DEBCHANGE_MULTIMAINT_MERGE> de ficheiro de configuração em "
+"baixo."
+
+#. type: TP
+#: ../scripts/debchange.1:356
+#, no-wrap
+msgid "B<--maintmaint>, B<-m>"
+msgstr "B<--maintmaint>, B<-m>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:364
+msgid ""
+"Do not modify the maintainer details previously listed in the changelog. "
+"This is useful particularly for sponsors wanting to automatically add a "
+"sponsorship message without disrupting the other changelog details. Note "
+"that there may be some interesting interactions if multi-maintainer mode is "
+"in use; you will probably wish to check the changelog manually before "
+"uploading it in such cases."
+msgstr ""
+"Não modifica os detalhes do maintainer previamente listados no changelog. "
+"Isto é útil particularmente para patrocinadores que esperam por adicionar "
+"automaticamente uma mensagem de patrocínio sem perturbar os outros detalhes "
+"do changelog. Note que podem existir algumas interações de interesse se "
+"estiver em uso o modo multi-maintainer; provavelmente você vai querer "
+"verificar o changelog manualmente antes de o enviar em tais casos."
+
+#. type: TP
+#: ../scripts/debchange.1:364
+#, no-wrap
+msgid "B<--controlmaint>, B<-M>"
+msgstr "B<--controlmaint>, B<-M>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:372
+msgid ""
+"Use maintainer details from the I<debian/control> B<Maintainer> field rather "
+"than relevant environment variables (B<DEBFULLNAME>, B<DEBEMAIL>, etc.). "
+"This option might be useful to restore details of the main maintainer in the "
+"changelog trailer after a bogus edit (e.g. when B<-m> was intended but "
+"forgot) or when releasing a package in the name of the main maintainer (e.g. "
+"the team)."
+msgstr ""
+"Usa detalhes do maintainer do campo B<Maintainer> de I<debian/control> em "
+"vez das variáveis de ambiente relevantes (B<DEBFULLNAME>, B<DEBEMAIL>, "
+"etc.). Esta opção pode ser útil para restaurar detalhes do maintainer "
+"principal na antevisão do changelog após uma edição com falha (ex. quando B<-"
+"m> era destinado mas ficou esquecido) ou ao lançar um pacote no nome do "
+"maintainer principal (ex. a equipa)."
+
+#. type: TP
+#: ../scripts/debchange.1:372
+#, no-wrap
+msgid "B<-->[B<no>]B<mainttrailer>, B<-t>"
+msgstr "B<-->[B<no>]B<mainttrailer>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:382
+msgid ""
+"If B<mainttrailer> is set, it will avoid modifying the existing changelog "
+"trailer line (i.e. the maintainer and date-stamp details), unless used with "
+"options that require the trailer to be modified (e.g. B<--create>, B<--"
+"release>, B<-i>, B<--qa>, etc.) This option differs from B<--maintmaint> in "
+"that it will use multi-maintainer mode if appropriate, with the exception of "
+"editing the trailer. See also the B<DEBCHANGE_MAINTTRAILER> configuration "
+"file option below."
+msgstr ""
+"Se B<mainttrailer> estiver definido, irá evitar modificar a linha de "
+"antevisão do changelog existente (isto é, os detalhes do maintainer e marca "
+"data), a menos que usado com opções que requerem que a antevisão seja "
+"modificada (ex. B<--create>, B<--release>, B<-i>, B<--qa>, etc.) Esta opção "
+"difere de B<--maintmaint> em que irá usar modo multi-maintainer se "
+"apropriado, com a excepção de editar a antevisão. Veja também a opção de "
+"ficheiro de configuração B<DEBCHANGE_MAINTTRAILER> em baixo."
+
+#. type: Plain text
+#: ../scripts/debchange.1:386 ../scripts/debchange.1:390
+msgid ""
+"See the above section \"B<Directory name checking>\" for an explanation of "
+"this option."
+msgstr ""
+"Veja a secção em cima \"B<Verificação do nome do directório>\" para uma "
+"explicação desta opção."
+
+#. type: TP
+#: ../scripts/debchange.1:394
+#, no-wrap
+msgid "B<--release-heuristic> I<log>|I<changelog>"
+msgstr "B<--release-heuristic> I<log>|I<changelog>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:399
+msgid ""
+"Controls how B<debchange> determines if a package has been released, when "
+"deciding whether to create a new changelog entry or append to an existing "
+"changelog entry."
+msgstr ""
+"Controla como o B<debchange> determina se um pacote foi lançado, quando se "
+"decide se criar uma nova entrada changelog ou acrescentar a uma entrada "
+"changelog existente."
+
+#. type: Plain text
+#: ../scripts/debchange.1:405 ../scripts/debclean.1:93
+#: ../scripts/debrelease.1:105 ../scripts/debsign.1:105
+#: ../scripts/dep3changelog.1:22 ../scripts/dscverify.1:43
+#: ../scripts/nmudiff.1:92 ../scripts/pts-subscribe.1:34
+#: ../scripts/uupdate.1:107 ../scripts/who-uploads.1:51
+msgid "Display version and copyright information and exit successfully."
+msgstr "Mostra informação de versão e copyright e termina com sucesso."
+
+#. type: TP
+#: ../scripts/debchange.1:411
+#, no-wrap
+msgid "B<DEBCHANGE_PRESERVE>"
+msgstr "B<DEBCHANGE_PRESERVE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:415
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve> command "
+"line parameter being used."
+msgstr ""
+"Se isto for definido para I<yes>, então é o mesmo que usar o parâmetro de "
+"linha de comandos B<--preserve>."
+
+#. type: TP
+#: ../scripts/debchange.1:415
+#, no-wrap
+msgid "B<DEBCHANGE_QUERY_BTS>"
+msgstr "B<DEBCHANGE_QUERY_BTS>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:419
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--noquery> command "
+"line parameter being used."
+msgstr ""
+"Se isto for definido para I<no>, então é o mesmo que usar o parâmetro de "
+"linha de comandos B<--noquery>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:426
+msgid ""
+"See the above section \"B<Directory name checking>\" for an explanation of "
+"these variables. Note that these are package-wide configuration variables, "
+"and will therefore affect all B<devscripts> scripts which check their value, "
+"as described in their respective manpages and in B<devscripts.conf>(5)."
+msgstr ""
+"Veja a secção em cima \"B<Verificação do nome do directório>\" para uma "
+"explicação sobre estas variáveis. Note que estas variáveis de configuração "
+"são globais-do-pacote, e irão por isso afectar todos os scripts do "
+"B<devscripts> que verifiquem os seus valores, como descrito nos seus "
+"respectivos manuais em B<devscripts.conf>(5)."
+
+#. type: TP
+#: ../scripts/debchange.1:426
+#, no-wrap
+msgid "B<DEBCHANGE_RELEASE_HEURISTIC>"
+msgstr "B<DEBCHANGE_RELEASE_HEURISTIC>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:431
+msgid ""
+"Controls how B<debchange> determines if a package has been released, when "
+"deciding whether to create a new changelog entry or append to an existing "
+"changelog entry. Can be either I<log> or I<changelog>."
+msgstr ""
+"Controla como o B<debchange> determina se um pacote foi lançado, quando se "
+"decide se criar uma nova entrada changelog ou acrescentar a uma entrada "
+"changelog existente. Pode ser ou I<log> ou I<changelog>."
+
+#. type: TP
+#: ../scripts/debchange.1:431
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT>"
+msgstr "B<DEBCHANGE_MULTIMAINT>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:436
+msgid ""
+"If set to I<no>, B<debchange> will not introduce multiple-maintainer "
+"distinctions when a different maintainer appends an entry to an existing "
+"changelog. See the discussion above. Default is I<yes>."
+msgstr ""
+"Se definido para I<no>, o B<debchange> não irá introduzir distinções de "
+"múltiplos-maintainer quando um maintainer diferente acrescenta uma entrada "
+"num changelog existente, Veja a discussão em cima. A predefinição é I<yes>."
+
+#. type: TP
+#: ../scripts/debchange.1:436
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT_MERGE>"
+msgstr "B<DEBCHANGE_MULTIMAINT_MERGE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:442
+msgid ""
+"If set to I<yes>, when adding changes in multiple-maintainer mode "
+"B<debchange> will check whether previous changes by the current maintainer "
+"exist and add the new changes to the existing block rather than creating a "
+"new block. Default is I<no>."
+msgstr ""
+"Se definido para I<yes>, quando se adicionam alterações em modo de múltiplo-"
+"maintainer, o B<debchange> irá verificar se existem alterações prévias do "
+"maintainer actual e adiciona as novas alterações ao bloco existente em vez "
+"de criar um novo bloco. A predefinição é I<no>."
+
+#. type: TP
+#: ../scripts/debchange.1:442
+#, no-wrap
+msgid "B<DEBCHANGE_MAINTTRAILER>"
+msgstr "B<DEBCHANGE_MAINTTRAILER>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:446
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--nomainttrailer> "
+"command line parameter being used."
+msgstr ""
+"Se isto for definido para I<no>, então é o mesmo que usar o parâmetro de "
+"linha de comandos B<--nomainttrailer>."
+
+#. type: TP
+#: ../scripts/debchange.1:446
+#, no-wrap
+msgid "B<DEBCHANGE_TZ>"
+msgstr "B<DEBCHANGE_TZ>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:450
+msgid ""
+"Use this timezone for changelog entries. Default is the user/system "
+"timezone as shown by `B<date -R>` and affected by the environment variable "
+"B<TZ>."
+msgstr ""
+"Isto é o fuso horário para entradas no registo de alterações. A predefinição "
+"é fuso horário de utilizador/sistema como mostrado por `B<date -R>` e "
+"afectado pela variável de ambiente B<TZ>."
+
+#. type: TP
+#: ../scripts/debchange.1:450
+#, no-wrap
+msgid "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+msgstr "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:454
+msgid ""
+"If this is set, then it is the same as the B<--allow-lower-version> command "
+"line parameter being used."
+msgstr ""
+"Se isto for definido, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--allow-lower-version>."
+
+#. type: TP
+#: ../scripts/debchange.1:454
+#, no-wrap
+msgid "B<DEBCHANGE_AUTO_NMU>"
+msgstr "B<DEBCHANGE_AUTO_NMU>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:460
+msgid ""
+"If this is set to I<no> then B<debchange> will not attempt to automatically "
+"determine whether the current changelog stanza represents an NMU. The "
+"default is I<yes>. See the discussion of the B<--nmu> option above."
+msgstr ""
+"Se isto estiver definido para I<no> então o B<debchange> não irá tentar "
+"determinar automaticamente se a estrofe actual do changelog representa um "
+"NMU. A predefinição é I<yes>. Veja a discussão da opção B<--nmu> em cima."
+
+#. type: TP
+#: ../scripts/debchange.1:460
+#, no-wrap
+msgid "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+msgstr "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:464
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-force-save-on-"
+"release> command line parameter being used."
+msgstr ""
+"Se isto for definido para I<no>, então é o mesmo que usar o parâmetro de "
+"linha de comandos B<--no-force-save-on-release>."
+
+#. type: TP
+#: ../scripts/debchange.1:464
+#, no-wrap
+msgid "B<DEBCHANGE_VENDOR>"
+msgstr "B<DEBCHANGE_VENDOR>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:468
+msgid ""
+"Use this vendor instead of the default (dpkg-vendor output). See B<--"
+"vendor> for details."
+msgstr ""
+"Usa este fabricante em vez do predefinido (o resultado de dpkg-vendor). Veja "
+"B<--vendor> para detalhes."
+
+#. type: =head1
+#: ../scripts/debchange.1:468 ../scripts/dep3changelog.1:22
+#: ../doc/devscripts.1:16 ../doc/devscripts.1:20 ../scripts/ltnu.pod:68
+#: ../scripts/mass-bug.pl:136 ../scripts/mk-build-deps.pl:126
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "AMBIENTE"
+
+#. type: TP
+#: ../scripts/debchange.1:469 ../scripts/dep3changelog.1:23
+#, no-wrap
+msgid "B<DEBEMAIL>, B<EMAIL>, B<DEBFULLNAME>, B<NAME>"
+msgstr "B<DEBEMAIL>, B<EMAIL>, B<DEBFULLNAME>, B<NAME>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:472 ../scripts/dep3changelog.1:26
+msgid "See the above description of the use of these environment variables."
+msgstr ""
+"Veja a descrição em cima para a utilização destas variáveis de ambiente."
+
+#. type: TP
+#: ../scripts/debchange.1:472
+#, no-wrap
+msgid "B<CHANGELOG>"
+msgstr "B<CHANGELOG>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:478
+msgid ""
+"This variable specifies the changelog to edit in place of I<debian/"
+"changelog>. No directory traversal or checking is performed when this "
+"variable is set. This variable is overridden by the B<--changelog> command-"
+"line setting."
+msgstr ""
+"Esta variável especifica o registo de alterações a editar no lugar de "
+"I<debian/changelog>. Não são executadas transversais de directórios ou "
+"verificações quando esta variável está definida. Esta variável é sobreposta "
+"pela definição de linha de comandos B<--changelog>."
+
+#. type: TP
+#: ../scripts/debchange.1:478
+#, no-wrap
+msgid "B<VISUAL>, B<EDITOR>"
+msgstr "B<VISUAL>, B<EDITOR>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:482
+msgid ""
+"These environment variables (in this order) determine the editor used by "
+"B<sensible-editor>."
+msgstr ""
+"Estas variáveis de ambiente (por esta ordem) determinam o editor usado pelo "
+"B<sensible-editor>."
+
+#. type: Plain text
+#: ../scripts/debchange.1:488
+msgid ""
+"B<debc>(1), B<debclean>(1), B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+msgstr ""
+"B<debc>(1), B<debclean>(1), B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debchange.1:491
+msgid ""
+"The original author was Christoph Lameter E<lt>clameter@debian.orgE<gt>. "
+"Many substantial changes and improvements were made by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"O autor original foi Christoph Lameter E<lt>clameter@debian.orgE<gt>. Muitas "
+"alterações substanciais e melhoramentos feitos por Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:26
+msgid "debcheckout - checkout the development repository of a Debian package"
+msgstr ""
+"debcheckout - verifica o repositório de desenvolvimento de um pacote Debian"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:32
+msgid "B<debcheckout> [I<OPTIONS>] I<PACKAGE> [I<DESTDIR>]"
+msgstr "B<debcheckout> [I<OPTIONS>] I<PACKAGE> [I<DESTDIR>]"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:34
+msgid "B<debcheckout> [I<OPTIONS>] I<REPOSITORY_URL> [I<DESTDIR>]"
+msgstr "B<debcheckout> [I<OPTIONS>] I<REPOSITORY_URL> [I<DESTDIR>]"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:36
+msgid "B<debcheckout> B<--help>"
+msgstr "B<debcheckout> B<--help>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:42
+msgid ""
+"B<debcheckout> retrieves the information about the Version Control System "
+"used to maintain a given Debian package (the I<PACKAGE> argument), and then "
+"checks out the latest (potentially unreleased) version of the package from "
+"its repository. By default the repository is checked out to the I<PACKAGE> "
+"directory; this can be overridden by providing the I<DESTDIR> argument."
+msgstr ""
+"B<debcheckout> obtém a informação acerca do Sistema de Controle de Versão "
+"usado para manter um determinado pacote Debian (o argumento I<PACKAGE>), e "
+"depois verifica a versão mais recente (potencialmente não lançada) do pacote "
+"a partir do seu repositório. Por predefinição o repositório é copiado para o "
+"directório I<PACKAGE>, isto pode ser sobreposto ao fornecer o argumento "
+"I<DESTDIR>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:48
+msgid ""
+"The information about where the repository is available is expected to be "
+"found in B<Vcs-*> fields available in the source package record. For "
+"example, the B<vim> package exposes such information with a field like "
+"S<B<Vcs-Hg: http://hg.debian.org/hg/pkg-vim/vim>>, you can see it by "
+"grepping through B<apt-cache showsrc vim>."
+msgstr ""
+"A informação acerca de onde o repositório está disponível é esperada que "
+"esteja nos campos B<Vcs-*> disponíveis no registo do pacote fonte. Por "
+"exemplo, o pacote B<vim> expõe tal informação com um campo do tipo S<B<Vcs-"
+"Hg: http://hg.debian.org/hg/pkg-vim/vim>>, você pode vê-lo ao fazer grep por "
+"B<apt-cache showsrc vim>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:54
+msgid ""
+"If more than one source package record containing B<Vcs-*> fields is "
+"available, B<debcheckout> will select the record with the highest version "
+"number. Alternatively, a particular version may be selected from those "
+"available by specifying the package name as I<PACKAGE>=I<VERSION>."
+msgstr ""
+"Se estiver disponível mais do que um registo de pacote fonte que contenha "
+"campos B<Vcs-*>, o B<debcheckout> irá selecionar o registo com o número de "
+"versão mais alto. Em alternativa, pode ser selecionada uma versão particular "
+"dos disponíveis ao especificar o nome do pacote como I<PACKAGE>=I<VERSION>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:59
+msgid ""
+"If you already know the URL of a given repository you can invoke "
+"B<debcheckout> directly on it, but you will probably need to pass the "
+"appropriate B<-t> flag. That is, some heuristics are in use to guess the "
+"repository type from the URL; if they fail, you might want to override the "
+"guessed type using B<-t>."
+msgstr ""
+"Se você já souber o URL de um dado repositório você pode invocar o "
+"B<debcheckout> directamente nele, mas provavelmente irá precisar de passar a "
+"bandeira B<-t> apropriada. Isto é, são usadas algumas heurísticas para "
+"adivinhar o ripo de repositório a partir do URL; se estas falharem, você "
+"pode querer sobrepor o tipo adivinhado usando B<-t>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:65
+msgid ""
+"The currently supported version control systems are: Arch (arch), Bazaar "
+"(bzr), CVS (cvs), Darcs (darcs), Git (git), Mercurial (hg) and Subversion "
+"(svn)."
+msgstr ""
+"Os sistemas de controle de versão actualmente suportados são: Arch (arch), "
+"Bazaar (bzr), CVS (cvs), Darcs (darcs), Git (git), Mercurial (hg) e "
+"Subversion (svn)."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:70
+msgid "B<GENERAL OPTIONS>"
+msgstr "B<OPÇÕES GERAIS>"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:74
+msgid "B<-a>, B<--auth>"
+msgstr "B<-a>, B<--auth>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:76
+msgid ""
+"Work in authenticated mode; this means that for known repositories (mainly "
+"those hosted on S<I<https://salsa.debian.org>>) URL rewriting is attempted "
+"before checking out, to ensure that the repository can be committed to. For "
+"example, for Git repositories hosted on Salsa this means that S<I<git@salsa."
+"debian.org:...git>> will be used instead of S<I<https://salsa.debian.org/..."
+"git>>."
+msgstr ""
+"Trabalho em modo de autenticação; isto significa que para repositórios "
+"conhecidos (principalmente aqueles hospedados em S<I<https://salsa.debian."
+"org>>) é tentada a rescrita de URL antes da leitura a estes, para assegurar "
+"que se pode cometer para o repositório. Por exemplo, para repositórios Git "
+"hospedados em Salsa isto significa que será usado S<I<git@salsa.debian."
+"org:...git>> em vez de S<I<https://salsa.debian.org/...git>>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:83
+#, fuzzy
+#| msgid ""
+#| "There are built-in rules for salsa.debian.org, alioth.debian.org and "
+#| "github.com. Other hosts can be configured using B<DEBCHECKOUT_AUTH_URLS>."
+msgid ""
+"There are built-in rules for salsa.debian.org and github.com. Other hosts "
+"can be configured using B<DEBCHECKOUT_AUTH_URLS>."
+msgstr ""
+"Existem regras embutidas para salsa.debian.org, alioth.debian.org e github."
+"com. Outras máquinas podem ser configuradas usando B<DEBCHECKOUT_AUTH_URLS>."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:86
+msgid "B<-d>, B<--details>"
+msgstr "B<-d>, B<--details>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:88
+msgid ""
+"Only print a list of detailed information about the package repository, "
+"without checking it out; the output format is a list of fields, each field "
+"being a pair of TAB-separated field name and field value. The actual fields "
+"depend on the repository type. This action might require a network "
+"connection to the remote repository."
+msgstr ""
+"Apenas escreve uma lista de informação detalhada acerca do repositório do "
+"pacote, sem o verificar; o formato de resultado é uma lisa de campos, cada "
+"campo sendo um par de campo de nome e campo de valor separados por TAB. Os "
+"campos actuais dependem do tipo de repositório. Esta acção pode requerer uma "
+"ligação de rede ao repositório remoto."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:94
+msgid "Also see B<-p>. This option and B<-p> are mutually exclusive."
+msgstr "Veja também B<-p>. Esta opção e B<-p> são exclusivas mutuamente."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:98
+msgid "Print a detailed help message and exit."
+msgstr "Escreve mensagem detalhada de ajuda e termina."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:100
+msgid "B<-p>, B<--print>"
+msgstr "B<-p>, B<--print>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:102
+msgid ""
+"Only print a summary about package repository information, without checking "
+"it out; the output format is TAB-separated with two fields: repository type, "
+"repository URL. This action works offline, it only uses \"static\" "
+"information as known by APT's cache."
+msgstr ""
+"Apenas escreve um resumo de informação acerca do repositório do pacote, sem "
+"o verificar; o formato do resultado é um separador TAB com dois campos; tipo "
+"de repositório, URL do repos. Esta acção funciona sem ligação de rede, "
+"apenas usa informação \"estática\" conhecida pela cache do APT."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:107
+msgid "Also see B<-d>. This option and B<-d> are mutually exclusive."
+msgstr "Veja também B<-d>. Esta opção e B<-d> são exclusivas mutuamente."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:109
+msgid "B<-P> I<package>, B<--package> I<package>"
+msgstr "B<-P> I<package>, B<--package> I<package>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:111
+msgid ""
+"When checking out a repository URL, instead of trying to guess the package "
+"name from the URL, use this package name."
+msgstr ""
+"Quando verifica um URL de repositório, em vez de tentar adivinhar o nome do "
+"pacote a partir do URL, usa este nome de pacote."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:114
+msgid "B<-t> I<TYPE>, B<--type> I<TYPE>"
+msgstr "B<-t> I<TYPE>, B<--type> I<TYPE>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:116
+msgid ""
+"Override the repository type (which defaults to some heuristics based on the "
+"URL or, in case of heuristic failure, the fallback \"git\"); should be one "
+"of the currently supported repository types."
+msgstr ""
+"Sobrepõe o tipo de repositório (o que predefine para algumas heurísticas "
+"baseadas no URL ou, no caso de falha das heurísticas, no recurso \"git\"); "
+"deve ser um dos tipos de repositórios actualmente suportados."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:120
+msgid "B<-u> I<USERNAME>, B<--user> I<USERNAME>"
+msgstr "B<-u> I<USERNAME>, B<--user> I<USERNAME>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:122
+msgid ""
+"Specify the login name to be used in authenticated mode (see B<-a>). This "
+"option implies B<-a>: you don't need to specify both."
+msgstr ""
+"Especifica o nome de login a ser usado em modo de autenticação (veja B<-a>). "
+"Esta opção implica B<-a>: você não precisa de especificar ambas."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:125
+msgid "B<-f> I<FILE>, B<--file> I<FILE>"
+msgstr "B<-f> I<FICHEIRO>, B<--file> I<FICHEIRO>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:127
+msgid ""
+"Specify that the named file should be extracted from the repository and "
+"placed in the destination directory. May be used more than once to extract "
+"multiple files."
+msgstr ""
+"Especifica que o ficheiro nomeado deve ser extraído do repositório e "
+"colocado no directório de destino. Pode ser usado mais do que uma vez para "
+"extrair múltiplos ficheiros."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:131
+msgid "B<--source=never>|B<auto>|B<download-only>|B<always>"
+msgstr "B<--source=never>|B<auto>|B<download-only>|B<always>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:133
+msgid ""
+"Some packages only place the F<debian> directory in version control. "
+"B<debcheckout> can retrieve the remaining parts of the source using B<apt-"
+"get source> and move the files into the checkout."
+msgstr ""
+"Alguns pacotes apenas colocam o directório F<debian> no controle de versão. "
+"O B<debcheckout> consegue obter as partes restantes da fonte usando B<apt-"
+"get source> e mover os ficheiros para o destino."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:139
+msgid "B<never>"
+msgstr "B<never>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:141
+msgid "Only use the repository."
+msgstr "Apenas usa o repositório."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:143
+msgid "B<auto> (default)"
+msgstr "B<auto> (predefinido)"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:145
+msgid ""
+"If the repository only contains the F<debian> directory, retrieve the source "
+"package, unpack it, and also place the F<.orig.tar.gz> file into the current "
+"directory. Else, do nothing."
+msgstr ""
+"Se o repositório apenas conter o directório F<debian>, obtém o pacote fonte, "
+"desempacota-o, e também coloca o ficheiro F<.orig.tar.gz> no directório "
+"actual. Caso contrário, não faz nada."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:149
+msgid "B<download-only>"
+msgstr "B<download-only>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:151
+msgid "Always retrieve the I<.orig.tar.gz> file, but do not unpack it."
+msgstr "Obtém sempre o ficheiro I<.orig.tar.gz>, mas não o desempacota."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:153
+msgid "B<always>"
+msgstr "B<always>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:155
+msgid ""
+"Always retrieve the I<.orig.tar.gz> file, and if the repository only "
+"contains the F<debian> directory, unpack it."
+msgstr ""
+"Obtém sempre o ficheiro I<.orig.tar.gz>, e se o repositório apenas conter o "
+"directório F<debian>, desempacota-o."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:162
+msgid "B<VCS-SPECIFIC OPTIONS>"
+msgstr "B<OPÇÕES ESPECÍFICAS DE VCS>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:164
+msgid "I<GIT-SPECIFIC OPTIONS>"
+msgstr "I<OPÇÕES ESPECÍFICAS DE GIT>"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:168
+msgid "B<--git-track> I<BRANCHES>"
+msgstr "B<--git-track> I<RAMOS>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:170
+msgid ""
+"Specify a list of remote branches which will be set up for tracking (as in "
+"S<B<git branch --track>>, see B<git-branch>(1)) after the remote Git "
+"repository has been cloned. The list should be given as a space-separated "
+"list of branch names."
+msgstr ""
+"Especifica uma lista de ramos remotos que serão configurados para serem "
+"seguidos (como em S<B<git branch --track>>, veja B<git-branch>(1)) após o "
+"repositório Git remoto ter sido clonado. Esta lista deve fornecida como uma "
+"lista de nomes de ramos separados por espaços."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:175
+msgid ""
+"As a shorthand, the string \"B<*>\" can be given to require tracking of all "
+"remote branches."
+msgstr ""
+"Em resumo, pode ser dada a string \"B<*>\" para requerer seguimento todos os "
+"ramos remotos."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:182 ../scripts/rmadison.pl:357
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+"Os dois ficheiros de configuração F</etc/devscripts.conf> e F<~/.devscripts> "
+"são por essa ordem fonte para uma shell para definirem variáveis de "
+"configuração. Podem ser usadas opções de linha de comandos para sobrepor "
+"definições de ficheiros de configuração. As definições de variáveis de "
+"ambiente são ignoradas para este objectivo. As variáveis actualmente "
+"reconhecidas são:"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:190
+msgid "B<DEBCHECKOUT_AUTH_URLS>"
+msgstr "B<DEBCHECKOUT_AUTH_URLS>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:192
+msgid ""
+"This variable should be a space separated list of Perl regular expressions "
+"and replacement texts, which must come in pairs: I<REGEXP> I<TEXT> I<REGEXP> "
+"I<TEXT> ... and so on. Each pair denotes a substitution which is applied to "
+"repository URLs if other built-in means of building URLs for authenticated "
+"mode (see B<-a>) have failed."
+msgstr ""
+"Esta variável deve ser uma lista separada por espaços de expressões "
+"regulares Perl e textos de substituição, que devem vir aos pares : I<REGEXP> "
+"I<TEXT> I<REGEXP> I<TEXT> ... e assim continuando. Cada par denota uma "
+"substituição que é aplicada ao URL do repositório se todos os outros meios "
+"embutidos de construção de URLs para modo autenticado (veja <-a>) tiverem "
+"falhado."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:198
+msgid ""
+"References to matching substrings in the replacement texts are allowed as "
+"usual in Perl by the means of B<$1>, B<$2>, ... and so on."
+msgstr ""
+"As referências a sub-strings correspondentes nos textos de substituição são "
+"permitidas como é normal em Perl pelos meios de B<$1>, B<$2>, ... e assim "
+"continuando."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:201
+msgid ""
+"This setting is used to configure the \"authenticated mode\" location for "
+"repositories. The Debian repositories on S<salsa.debian.org> are implicitly "
+"defined, as is S<github.com>."
+msgstr ""
+"Esta definição é usada para configurar a localização \"modo autenticado\" "
+"para repositórios. Os repositórios Debian em S<salsa.debian.org> são "
+"implicitamente definidos, como sendo S<github.com>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:205
+msgid "Here is a sample snippet suitable for the configuration files:"
+msgstr ""
+"Aqui está um excerto exemplo apropriado para ficheiros de configuração:"
+
+#. type: verbatim
+#: ../scripts/debcheckout.pl:207
+#, no-wrap
+msgid ""
+" DEBCHECKOUT_AUTH_URLS='\n"
+" ^\\w+://(svn\\.example\\.com)/(.*) svn+ssh://$1/srv/svn/$2\n"
+" ^\\w+://(git\\.example\\.com)/(.*) git+ssh://$1/home/git/$2\n"
+" '\n"
+"\n"
+msgstr ""
+" DEBCHECKOUT_AUTH_URLS='\n"
+" ^\\w+://(svn\\.example\\.com)/(.*) svn+ssh://$1/srv/svn/$2\n"
+" ^\\w+://(git\\.example\\.com)/(.*) git+ssh://$1/home/git/$2\n"
+" '\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:212
+msgid ""
+"Note that whitespace is not allowed in either regexps or replacement texts. "
+"Also, given that configuration files are sourced by a shell, you probably "
+"want to use single quotes around the value of this variable."
+msgstr ""
+"Note que espaços em branco não são permitidos nem nas regexps nem nos textos "
+"de substituição. Também, dado que os ficheiros de configuração são lidos por "
+"uma shell, você provavelmente vai querer usar aspas simples em redor dos "
+"valores desta variável."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:217
+msgid "B<DEBCHECKOUT_SOURCE>"
+msgstr "B<DEBCHECKOUT_SOURCE>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:219
+msgid ""
+"This variable determines under what scenarios the associated orig.tar.gz for "
+"a package will be downloaded. See the B<--source> option for a description "
+"of the values."
+msgstr ""
+"Esta variável determina sob quais cenários será descarregado o orig.tar.gz "
+"associado para um pacote. Veja a opção B<--source> para uma descrição dos "
+"valores."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:223
+msgid "B<DEBCHECKOUT_USER>"
+msgstr "B<DEBCHECKOUT_USER>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:225
+msgid ""
+"This variable sets the username for authenticated mode. It can be overridden "
+"with the B<--user> option. Setting this variable does not imply the use of "
+"authenticated mode, it still has to be activated with B<--auth>."
+msgstr ""
+"Esta variável define o nome de utilizador para modo autenticado. Pode ser "
+"sobreposta com a opção B<--user>. Definir esta variável não implica o uso de "
+"modo autenticado, este ainda tem de ser activado com B<--auth>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:233
+msgid ""
+"B<apt-cache>(8), Section 6.2.5 of the Debian Developer's Reference (for more "
+"information about B<Vcs-*> fields): S<I<https://www.debian.org/doc/"
+"developers-reference/best-pkging-practices.html#bpp-vcs>>."
+msgstr ""
+"B<apt-cache>(8), Secção 6.2.5 do Debian Developer's Reference (para mais "
+"informação acerca dos campos B<Vcs-*>): S<I<https://www.debian.org/doc/"
+"developers-reference/best-pkging-practices.html#bpp-vcs>>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:238
+msgid ""
+"B<debcheckout> and this manpage have been written by Stefano Zacchiroli "
+"<I<zack@debian.org>>."
+msgstr ""
+"B<debcheckout> e este manual foram escritos por Stefano Zacchiroli "
+"<I<zack@debian.org>>."
+
+#. type: TH
+#: ../scripts/debclean.1:1
+#, no-wrap
+msgid "DEBCLEAN"
+msgstr "DEBCLEAN"
+
+#. type: Plain text
+#: ../scripts/debclean.1:4
+msgid "debclean - clean up a sourcecode tree"
+msgstr "debclean - .limpa uma árvore de código fonte"
+
+#. type: Plain text
+#: ../scripts/debclean.1:6
+msgid "B<debclean> [I<options>]"
+msgstr "B<debclean> [I<options>]"
+
+#. type: Plain text
+#: ../scripts/debclean.1:13
+msgid ""
+"B<debclean> walks through the directory tree starting at the directory tree "
+"in which it was invoked, and executes I<debuild -- clean> for each Debian "
+"source directory encountered. These directories are recognised by "
+"containing a debian/changelog file for a package whose name matches that of "
+"the directory. Name matching is described below."
+msgstr ""
+"O B<debclean> caminha por entre a árvore de directórios começando no "
+"directório no qual foi invocado, e executa I<debuild -- clean> para cada "
+"directório fonte Debian encontrado. Estes directórios são reconhecidos por "
+"conterem um ficheiro debian/changelog para um pacote cujo nome corresponde "
+"ao do directório. A correspondência de nomes é descrita em baixo."
+
+#. type: Plain text
+#: ../scripts/debclean.1:16
+msgid ""
+"If B<debclean> is invoked from a directory that is already a Debian source "
+"package, it will not descend into its subdirectories."
+msgstr ""
+"Se o B<debclean> for invocado de um directório que já é um pacote fonte "
+"Debian, não irá descer aos seus sub-directórios."
+
+#. type: Plain text
+#: ../scripts/debclean.1:25
+msgid ""
+"Also, if the B<--cleandebs> option is given, then in every directory "
+"containing a Debian source tree, all files named *.deb, *.changes and *."
+"build are removed. The .dsc, .diff.gz and the (.orig).tar.gz files are not "
+"touched so that the release can be reconstructed if necessary, and the ."
+"upload files are left so that B<debchange> functions correctly. The B<--"
+"nocleandebs> option prevents this extra cleaning behaviour and the B<--"
+"cleandebs> option forces it. The default is not to clean these files."
+msgstr ""
+"Também, se for dada a opção B<--cleandebs>, então em cada directório que "
+"contenha uma árvore fonte Debian, todos os ficheiros chamados *.deb, *."
+"changes e *.build são removidos. Os ficheiros .dsc, .diff.gz e o (.orig).tar."
+"gz não são tocados para que o lançamento possa ser reconstruido se "
+"necessário, e os ficheiros para enviar são deixados para que o B<debchange> "
+"funcione corretamente. A opção B<--nocleandebs> previne este comportamento "
+"de limpeza extra e a opção B<--cleandebs> força-o. A predefinição é não "
+"limpar estes ficheiros."
+
+#. type: Plain text
+#: ../scripts/debclean.1:27
+msgid "B<debclean> uses B<debuild>(1) to clean the source tree."
+msgstr "B<debclean> usa B<debuild>(1) para limpar a árvore fonte."
+
+#. type: Plain text
+#: ../scripts/debclean.1:38
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debclean> will walk through the directory tree searching for I<debian/"
+"changelog> files. As a safeguard against stray files causing potential "
+"problems, it will examine the name of the parent directory once it finds a "
+"I<debian/changelog> file, and check that the directory name corresponds to "
+"the package name. Precisely how it does this is controlled by two "
+"configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+"Em comum com vários outros scripts no pacote B<devscripts>, o B<debclean> "
+"irá andar entre a árvore de directórios à procura de ficheiros I<debian/"
+"changelog>. Como segurança contra ficheiros errantes que podem causar "
+"problemas potenciais, irá examinar o nome do directório pai assim que "
+"encontra um ficheiro I<debian/changelog>, e verifica que o nome de "
+"directório corresponde ao nome do pacote. O modo preciso de como isto é "
+"feito é controlado por duas variáveis de ficheiro de configuração "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> e B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, e as "
+"suas opções de linha de comandos correspondentes B<--check-dirname-level> e "
+"B<--check-dirname-regex>."
+
+#. type: TP
+#: ../scripts/debclean.1:64
+#, no-wrap
+msgid "B<--cleandebs>"
+msgstr "B<--cleandebs>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:68
+msgid ""
+"Also remove all .deb, .changes and .build files from the parent directory."
+msgstr ""
+"Também removo todos os ficheiro .deb, .changes e .build do directório pai."
+
+#. type: TP
+#: ../scripts/debclean.1:68
+#, no-wrap
+msgid "B<--nocleandebs>"
+msgstr "B<--nocleandebs>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:72
+msgid ""
+"Do not remove the .deb, .changes and .build files from the parent directory; "
+"this is the default behaviour."
+msgstr ""
+"Não remove os ficheiro .deb, .changes e .build do directório pai; este é o "
+"comportamento predefinido."
+
+#. type: TP
+#: ../scripts/debclean.1:84 ../scripts/debuild.1:321
+#, no-wrap
+msgid "B<-d>"
+msgstr "B<-d>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:87
+msgid "Do not run dpkg-checkbuilddeps to check build dependencies."
+msgstr ""
+"Não corre o dpkg-checkbuilddeps para verificar dependências de compilação."
+
+#. type: TP
+#: ../scripts/debclean.1:99
+#, no-wrap
+msgid "B<DEBCLEAN_CLEANDEBS>"
+msgstr "B<DEBCLEAN_CLEANDEBS>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:103
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--cleandebs> command "
+"line parameter being used."
+msgstr ""
+"Se isto for definido para I<yes>, então é o mesmo que usar o parâmetro de "
+"linha de comandos B<--cleandebs>."
+
+#. type: Plain text
+#: ../scripts/debclean.1:113
+msgid "B<debuild>(1), B<devscripts.conf>(5)"
+msgstr "B<debuild>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debclean.1:115
+msgid ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; modifications by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; modificações por Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:5
+msgid "debcommit - commit changes to a package"
+msgstr "debcommit - envia alterações para um pacote"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:9
+msgid "B<debcommit> [I<options>] [B<--all> | I<files to commit>]"
+msgstr "B<debcommit> [I<options>] [B<--all> | I<files to commit>]"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:13
+msgid ""
+"B<debcommit> generates a commit message based on new text in B<debian/"
+"changelog>, and commits the change to a package's repository. It must be run "
+"in a working copy for the package. Supported version control systems are: "
+"B<cvs>, B<git>, B<hg> (mercurial), B<svk>, B<svn> (Subversion), B<baz>, "
+"B<bzr>, B<tla> (arch), B<darcs>."
+msgstr ""
+"B<debcommit> gera uma mensagem de envio baseada no texto em B<debian/"
+"changelog>, e envia a alteração para um repositório de pacotes. Tem de ser "
+"corrido numa cópia de trabalho do pacote. Os sistemas de controle de versão "
+"suportados são: B<cvs>, B<git>, B<hg> (mercurial), B<svk>, B<svn> "
+"(Subversion), B<baz>, B<bzr>, B<tla> (arch), B<darcs>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:23
+msgid "B<-c>, B<--changelog> I<path>"
+msgstr "B<-c>, B<--changelog> I<path>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:25
+msgid ""
+"Specify an alternate location for the changelog. By default debian/changelog "
+"is used."
+msgstr ""
+"Especifica uma localização alternativa para o registo de alterações. Por "
+"predefinição é usado debian/changelog."
+
+#. type: =item
+#: ../scripts/debcommit.pl:28
+msgid "B<-r>, B<--release>"
+msgstr "B<-r>, B<--release>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:30
+msgid ""
+"Commit a release of the package. The version number is determined from "
+"debian/changelog, and is used to tag the package in the repository."
+msgstr ""
+"Envia o lançamento de um pacote. O número de versão é determinado de debian/"
+"changelog, e é usado para etiquetar o pacote no repositório."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:33
+msgid ""
+"Note that svn/svk tagging conventions vary, so debcommit uses svnpath(1) to "
+"determine where the tag should be placed in the repository."
+msgstr ""
+"Note que as convenções de etiquetagem svn/svk variam, assim o debcommit usa "
+"svnpath(1) para determinar onde deve ser colocada a etiqueta no repositório."
+
+#. type: =item
+#: ../scripts/debcommit.pl:37
+msgid "B<-R>, B<--release-use-changelog>"
+msgstr "B<-R>, B<--release-use-changelog>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:39
+msgid ""
+"When used in conjunction with B<--release>, if there are uncommitted changes "
+"to the changelog then derive the commit message from those changes rather "
+"than using the default message."
+msgstr ""
+"Quando usado em conjunto com B<--release>, se existirem alterações não "
+"enviadas para o registo de alterações então deriva a mensagem de envio "
+"dessas alterações em vez de usar a mensagem predefinida."
+
+#. type: =item
+#: ../scripts/debcommit.pl:43
+msgid "B<-m> I<text>, B<--message> I<text>"
+msgstr "B<-m> I<text>, B<--message> I<text>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:45
+msgid ""
+"Specify a commit message to use. Useful if the program cannot determine a "
+"commit message on its own based on debian/changelog, or if you want to "
+"override the default message."
+msgstr ""
+"Especifica a mensagem de envio a usar. Útil se o programa não conseguir "
+"determinar a mensagem de envio por si só baseado em debian/changelog, ou se "
+"desejar sobrepor a mensagem predefinida."
+
+#. type: =item
+#: ../scripts/debcommit.pl:49 ../scripts/tagpending.pl:98
+msgid "B<-n>, B<--noact>"
+msgstr "B<-n>, B<--noact>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:51
+msgid ""
+"Do not actually do anything, but do print the commands that would be run."
+msgstr "Não faz realmente nada, mas escreve os comandos que iriam correr."
+
+#. type: =item
+#: ../scripts/debcommit.pl:53
+msgid "B<-d>, B<--diff>"
+msgstr "B<-d>, B<--diff>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:55
+msgid ""
+"Instead of committing, do print the diff of what would have been committed "
+"if this option were not given. A typical usage scenario of this option is "
+"the generation of patches against the current working copy (e.g. when you "
+"don't have commit access right)."
+msgstr ""
+"Ao invés de enviar, escreve o diff do que seria enviado se esta opção não "
+"tivesse sido dada. Um cenário típico de utilização desta opção é a geração "
+"de patches contra a cópia de trabalho actual (ex. quando você não tem "
+"permissões de acesso para enviar)."
+
+#. type: =item
+#: ../scripts/debcommit.pl:60
+msgid "B<-C>, B<--confirm>"
+msgstr "B<-C>, B<--confirm>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:62
+msgid ""
+"Display the generated commit message and ask for confirmation before "
+"committing it. It is also possible to edit the message at this stage; in "
+"this case, the confirmation prompt will be re-displayed after the editing "
+"has been performed."
+msgstr ""
+"Mostra a mensagem de envio gerada e pede-lhe confirmação antes de a enviar. "
+"É também possível editar a mensagem neste ponto; neste caso, o aviso de "
+"confirmação será re-mostrado após a adição ter sido feita."
+
+#. type: =item
+#: ../scripts/debcommit.pl:66
+msgid "B<-e>, B<--edit>"
+msgstr "B<-e>, B<--edit>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:68
+msgid ""
+"Edit the generated commit message in your favorite editor before committing "
+"it."
+msgstr ""
+"Edita a mensagem de envio gerada no seu editor favorito antes de a enviar."
+
+#. type: TP
+#: ../scripts/debcommit.pl:71 ../scripts/dget.pl:624
+#: ../scripts/dpkg-depcheck.1:16
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:73
+msgid ""
+"Commit all files. This is the default operation when using a VCS other than "
+"git."
+msgstr ""
+"Envia todos os ficheiros. Esta é a operação predefinida quando se usa um VCS "
+"que não seja git."
+
+#. type: =item
+#: ../scripts/debcommit.pl:76
+msgid "B<-s>, B<--strip-message>, B<--no-strip-message>"
+msgstr "B<-s>, B<--strip-message>, B<--no-strip-message>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:78
+msgid ""
+"If this option is set and the commit message has been derived from the "
+"changelog, the characters \"* \" will be stripped from the beginning of the "
+"message."
+msgstr ""
+"Se esta opção estiver definida e a mensagem de envio seja derivada do "
+"registo de alterações, os caracteres \"* \" serão removidos do inicio da "
+"mensagem."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:82
+msgid ""
+"This option is set by default and ignored if more than one line of the "
+"message begins with \"[*+-] \"."
+msgstr ""
+"Esta opção é definida por predefinição e ignorada se mais do que uma linha "
+"da mensagem começar com \"[*+-] \"."
+
+#. type: =item
+#: ../scripts/debcommit.pl:85
+msgid "B<--sign-commit>, B<--no-sign-commit>"
+msgstr "B<--sign-commit>, B<--no-sign-commit>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:87
+msgid ""
+"If this option is set, then the commits that debcommit creates will be "
+"signed using gnupg. Currently this is only supported by git, hg, and bzr."
+msgstr ""
+"Se esta opção estiver definida, então os envios que o debcommit cria serão "
+"assinados usando gnupg. Actualmente isto só é suportado por git, hg, e bzr."
+
+#. type: =item
+#: ../scripts/debcommit.pl:90
+msgid "B<--sign-tags>, B<--no-sign-tags>"
+msgstr "B<--sign-tags>, B<--no-sign-tags>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:92
+msgid ""
+"If this option is set, then tags that debcommit creates will be signed using "
+"gnupg. Currently this is only supported by git."
+msgstr ""
+"Se esta opção estiver definida, então as etiquetas que o debcommit cria "
+"serão assinadas usando gnupg. Actualmente isto só é suportado por git."
+
+#. type: =item
+#: ../scripts/debcommit.pl:95
+msgid "B<--changelog-info>"
+msgstr "B<--changelog-info>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:97
+msgid ""
+"If this option is set, the commit author and date will be determined from "
+"the Maintainer and Date field of the first paragraph in F<debian/"
+"changelog>. This is mainly useful when using B<debchange>(1) with the B<--"
+"no-mainttrailer> option."
+msgstr ""
+"Se esta opção estiver definida, o autor e data de envio serão determinados a "
+"partir dos campos Maintainer e Date do primeiro parágrafo em F<debian/"
+"changelog>. Isto é principalmente útil quando se usa B<debchange>(1) com a "
+"opção B<--no-mainttrailer>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:114
+msgid "B<DEBCOMMIT_STRIP_MESSAGE>"
+msgstr "B<DEBCOMMIT_STRIP_MESSAGE>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:116
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-strip-message> "
+"command line parameter being used. The default is I<yes>."
+msgstr ""
+"Se definido para I<no>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--no-strip-message>. A predefinição é <yes>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:119
+msgid "B<DEBCOMMIT_SIGN_TAGS>"
+msgstr "B<DEBCOMMIT_SIGN_TAGS>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:121
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--sign-tags> command "
+"line parameter being used. The default is I<no>."
+msgstr ""
+"Se definido para I<yes>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--sign-tags>. A predefinição é <no>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:124
+msgid "B<DEBCOMMIT_SIGN_COMMITS>"
+msgstr "B<DEBCOMMIT_SIGN_COMMITS>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:126
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--sign-commit> "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+"Se definido para I<yes>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--sign-commit>. A predefinição é <no>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:129
+msgid "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+msgstr "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:131
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--release-use-"
+"changelog> command line parameter being used. The default is I<no>."
+msgstr ""
+"Se definido para I<yes>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--release-use-changelog>. A predefinição é <no>."
+
+#. type: TP
+#: ../scripts/debcommit.pl:134 ../scripts/debsign.1:117
+#, no-wrap
+msgid "B<DEBSIGN_KEYID>"
+msgstr "B<DEBSIGN_KEYID>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:136
+msgid ""
+"This is the key id used for signing tags. If not set, a default will be "
+"chosen by the revision control system."
+msgstr ""
+"Este é o id de chave usado para assinar etiquetas. Se não definido, é "
+"escolhido um predefinido pelo sistema de controle de revisão."
+
+#. type: =head1
+#: ../scripts/debcommit.pl:141
+msgid "VCS SPECIFIC FEATURES"
+msgstr "FUNCIONALIDADES ESPECÍFICAS DE VCS"
+
+#. type: =item
+#: ../scripts/debcommit.pl:145
+msgid "B<tla> / B<baz>"
+msgstr "B<tla> / B<baz>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:147
+msgid ""
+"If the commit message contains more than 72 characters, a summary will be "
+"created containing as many full words from the message as will fit within 72 "
+"characters, followed by an ellipsis."
+msgstr ""
+"Se a mensagem de envio conter mais de 72 caracteres, será criado um resumo "
+"contendo o máximo de palavras completas da mensagem que caibam nos 72 "
+"caracteres, seguidas por um elipse."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:153
+msgid ""
+"Each of the features described below is applicable only if the commit "
+"message has been automatically determined from the changelog."
+msgstr ""
+"Cada uma das características descritas em baixo são aplicáveis apenas se a "
+"mensagem de envio tiver sido determinada automaticamente a partir do registo "
+"de alterações."
+
+#. type: =item
+#: ../scripts/debcommit.pl:158 ../scripts/uscan.pl:399
+msgid "B<git>"
+msgstr "B<git>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:160
+msgid ""
+"If only a single change is detected in the changelog, B<debcommit> will "
+"unfold it to a single line and behave as if B<--strip-message> was used."
+msgstr ""
+"Se for detetada apenas uma única alteração no changelog, o B<debcommit> irá "
+"desdobra-la numa linha única e comportar-se como se fosse usado B<--strip-"
+"message>."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:163
+msgid ""
+"Otherwise, the first change will be unfolded and stripped to form a summary "
+"line and a commit message formed using the summary line followed by a blank "
+"line and the changes as extracted from the changelog. B<debcommit> will then "
+"spawn an editor so that the message may be fine-tuned before committing."
+msgstr ""
+"Caso contrário, a primeira alteração será desdobrada e desbastada para "
+"formar uma linha de resumo e uma mensagem de envio usando a linha de resumo "
+"seguida de uma linha vazia e das alterações como extraídas do changelog. O "
+"B<debcommit> irá então chamar um editor para que a mensagem seja afinada "
+"antes de ser enviada."
+
+#. type: =item
+#: ../scripts/debcommit.pl:168
+msgid "B<hg> / B<darcs>"
+msgstr "B<hg> / B<darcs>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:170
+msgid ""
+"The first change detected in the changelog will be unfolded to form a single "
+"line summary. If multiple changes were detected then an editor will be "
+"spawned to allow the message to be fine-tuned."
+msgstr ""
+"A primeira alteração detetada no changelog será desdobrada para formar uma "
+"única linha de resumo, se forem detetadas várias alterações então será "
+"chamado um editor para permitir que a mensagem seja afinada."
+
+#. type: =item
+#: ../scripts/debcommit.pl:174
+msgid "B<bzr>"
+msgstr "B<bzr>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:176
+msgid ""
+"If the changelog entry used for the commit message closes any bugs then B<--"
+"fixes> options to \"bzr commit\" will be generated to associate the revision "
+"and the bugs."
+msgstr ""
+"Se a entrada no changelog usada para a mensagem de envio fechar alguns bugs "
+"então serão geradas opções B<--fixes> para \"bzr commit\" para associar a "
+"revisão e os bugs."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:945
+msgid ""
+"This code is copyright by Joey Hess <joeyh@debian.org>, all rights "
+"reserved. This program comes with ABSOLUTELY NO WARRANTY. You are free to "
+"redistribute this code under the terms of the GNU General Public License, "
+"version 2 or later."
+msgstr ""
+"Este código tem copyright de Joey Hess <joeyh@debian.org>, todos os direitos "
+"reservados. Este programa vem com ABSOLUTAMENTE NENHUMA GARANTIA. Você é "
+"livre de re-distribuir este código sob os termos da GNU General Public "
+"License, versão 2 ou posterior."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:952 ../scripts/mass-bug.pl:568
+msgid "Joey Hess <joeyh@debian.org>"
+msgstr "Joey Hess <joeyh@debian.org>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:956
+msgid "B<debchange>(1), B<svnpath>(1)"
+msgstr "B<debchange>(1), B<svnpath>(1)"
+
+#. type: TH
+#: ../scripts/debdiff.1:1
+#, no-wrap
+msgid "DEBDIFF"
+msgstr "DEBDIFF"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:4
+msgid "debdiff - compare file lists in two Debian packages"
+msgstr "debdiff - compara listas de ficheiros em dois pacotes Debian"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:6
+msgid "B<debdiff> [I<options>]"
+msgstr "B<debdiff> [I<options>]"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:8
+msgid "B<debdiff> [I<options>] ... I<deb1 deb2>"
+msgstr "B<debdiff> [I<options>] ... I<deb1 deb2>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:10
+msgid "B<debdiff> [I<options>] ... I<changes1 changes2>"
+msgstr "B<debdiff> [I<options>] ... I<changes1 changes2>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:13
+msgid ""
+"B<debdiff> [I<options>] ... B<--from >I<deb1a deb1b ... >B<--to >I<deb2a "
+"deb2b ...>"
+msgstr ""
+"B<debdiff> [I<options>] ... B<--from >I<deb1a deb1b ... >B<--to >I<deb2a "
+"deb2b ...>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:15
+msgid "B<debdiff> [I<options>] ... I<dsc1 dsc2>"
+msgstr "B<debdiff> [I<options>] ... I<dsc1 dsc2>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:26
+msgid ""
+"B<debdiff> takes the names of two Debian package files (I<.deb>s or I<."
+"udeb>s) on the command line and compares their contents (considering only "
+"the files in the main package, not the maintenance scripts). It shows which "
+"files have been introduced and which removed between the two package files, "
+"and is therefore useful for spotting files which may have been inadvertently "
+"lost between revisions of the package. It also checks the file owners and "
+"permissions, and compares the control files of the two packages using the "
+"B<wdiff> program. If you want a deeper comparison of two Debian package "
+"files you can use the B<diffoscope> tool."
+msgstr ""
+"B<debdiff> recebe os nomes de dois ficheiros pacotes Debian (I<.deb>s ou I<."
+"udeb>s) na linha de comandos e compara o seu conteúdo (considerando apenas "
+"os ficheiros no pacote principal, não os scripts de manutenção). Mostra "
+"quais ficheiro foram introduzidos e quais removidos entre os dois ficheiros "
+"de pacotes, e é assim útil para descobrir ficheiros que possam ter sido "
+"perdidos inadvertidamente entre revisões do pacote. Também verifica os donos "
+"e permissões dos ficheiros, e compara os ficheiros de controle dos dois "
+"pacotes usando o programa B<wdiff>. Se desejar uma comparação mais profunda "
+"de dois ficheiros pacotes Debian pode usar a ferramenta B<diffoscope>."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:29
+msgid ""
+"If no arguments are given, B<debdiff> tries to compare the content of the "
+"current source directory with the last version of the package."
+msgstr ""
+"Se não forem dados argumentos, o B<debdiff> tenta comparar o conteúdo do "
+"directório fonte actual e a última versão do pacote."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:40
+msgid ""
+"B<debdiff> can also handle changes between groups of I<.deb> files in two "
+"ways. The first is to specify two I<.changes> files. In this case, the I<."
+"deb> files listed in the I<.changes> file will be compared, by taking the "
+"contents of all of the listed I<.deb> files together. (The I<.deb> files "
+"listed are assumed to be in the same directory as the I<.changes> file.) "
+"The second way is to list the I<.deb> files of interest specifically using "
+"the B<--from> ... B<--to> syntax. These both help if a package is broken up "
+"into smaller packages and one wishes to ensure that nothing is lost in the "
+"interim."
+msgstr ""
+"B<debdiff> também pode lidar com mudanças entre grupos de ficheiros I<.deb> "
+"em dois modos. O primeiro é especifica dois ficheiros I<.changes> files. "
+"Neste caso, os ficheiros I<.deb> listados no ficheiro I<.changes> irão ser "
+"comparados, ao tomar o conteúdo de todos os ficheiros I<.deb> listados "
+"juntamente. (Os ficheiros I<.deb> listados são assumidos como estando no "
+"mesmo directório que o ficheiro I<.changes>.) O segundo modo é listar os "
+"ficheiros I<.deb> de interesse especificamente usando a sintaxe B<--"
+"from> ... B<--to>. Estes ambos ajudam se um pacote está partido em pacotes "
+"menores e desejamos assegurar que nada é perdido entretanto."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:44
+msgid ""
+"B<debdiff> examines the B<devscripts> configuration files as described "
+"below. Command line options override the configuration file settings, "
+"though."
+msgstr ""
+"B<debdiff> examina os ficheiros de configuração do B<devscripts> como "
+"descrito em baixo. Ainda que as opções de linha de comandos sobrepõem as "
+"definições dos ficheiros de configuração."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:52
+msgid ""
+"If B<debdiff> is passed two source packages (I<.dsc> files) it will compare "
+"the contents of the source packages. If the source packages differ only in "
+"Debian revision number (that is, the I<.orig.tar.gz> files are the same in "
+"the two I<.dsc> files), then B<interdiff>(1) will be used to compare the two "
+"patch files if this program is available on the system, otherwise a B<diff> "
+"will be performed between the two source trees."
+msgstr ""
+"Se ao B<debdiff> for passado dois pacotes fonte (ficheiros I<.dsc>) irá "
+"comparar o conteúdo dos pacotes fonte. Se os pacotes fonte diferirem apenas "
+"no número de revisão Debian (isto é, os ficheiros I<.orig.tar.gz> são o "
+"mesmo nos dois ficheiros I<.dsc>), então será usado o B<interdiff>(1) para "
+"comparar os dois ficheiros de patch se este programa estiver disponível no "
+"sistema, caso contrário será executado um B<diff> entre as duas árvores "
+"fonte."
+
+#. type: TP
+#: ../scripts/debdiff.1:53
+#, no-wrap
+msgid "B<--dirs>, B<-d>"
+msgstr "B<--dirs>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:58
+msgid ""
+"The default mode of operation is to ignore directory names which appear in "
+"the file list, but they, too, will be considered if this option is given."
+msgstr ""
+"O modo predefinido de operação é ignorar nomes de directório que aparecem na "
+"lista de ficheiros, mas eles, também, serão considerados se esta opção for "
+"dada."
+
+#. type: TP
+#: ../scripts/debdiff.1:58
+#, no-wrap
+msgid "B<--nodirs>"
+msgstr "B<--nodirs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:62
+msgid ""
+"Ignore directory names which appear in the file list. This is the default "
+"and it can be used to override a configuration file setting."
+msgstr ""
+"Ignora nomes de directórios que aparecem na lista de ficheiros. Isto é a "
+"predefinição e pode ser usado para sobrepor uma definição de ficheiro de "
+"configuração."
+
+#. type: TP
+#: ../scripts/debdiff.1:62
+#, no-wrap
+msgid "B<--move>I< FROM TO>,B< -m>I< FROM TO>"
+msgstr "B<--move>I< FROM TO>,B< -m>I< FROM TO>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:73
+msgid ""
+"It sometimes occurs that various files or directories are moved around "
+"between revisions. This can be handled using this option. There are two "
+"arguments, the first giving the location of the directory or file in the "
+"first package, and the second in the second. Any files in the first listing "
+"whose names begin with the first argument are treated as having that "
+"substituted for the second argument when the file lists are compared. Any "
+"number of B<--move> arguments may be given; they are processed in the order "
+"in which they appear. This only affects comparing binary packages, not "
+"source packages."
+msgstr ""
+"Por vezes ocorre que vários ficheiros ou directórios são movidos de local "
+"entre revisões. Pode-se lidar com isto usando esta opção. Existem dois "
+"argumentos, o primeiro a dar a localização do directório ou ficheiro no "
+"primeiro pacote, e o segundo no segundo. Quaisquer ficheiros na primeira "
+"listagem cujos nomes começam com o primeiro argumento são tratados como "
+"tendo esse sido substituído pelo segundo argumento quando as listas de "
+"ficheiros são comparadas. Pode ser dado qualquer número de argumentos B<--"
+"move>; eles são processados pela ordem que aparecem. Isto apenas afecta ao "
+"se comparar pacotes binários, não pacotes fonte."
+
+#. type: TP
+#: ../scripts/debdiff.1:73
+#, no-wrap
+msgid "B<--move-regex>I< FROM TO>"
+msgstr "B<--move-regex>I< FROM TO>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:79
+msgid ""
+"This is the same as B<--move>, except that I<FROM> is treated as a regular "
+"expression and the B<perl> substitution command I<s/^FROM/TO/> is applied to "
+"the files. In particular, TO can make use of backreferences such as $1."
+msgstr ""
+"Isto é o mesmo que B<--move>, excepto que I<FROM> é tratado como uma "
+"expressão regular e o comando de substituição B<perl> I<s/^FROM/TO/> é "
+"aplicado aos ficheiros. Em particular, TO pode usar referências anteriores "
+"como $1."
+
+#. type: TP
+#: ../scripts/debdiff.1:79
+#, no-wrap
+msgid "B<--nocontrol>"
+msgstr "B<--nocontrol>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:84
+msgid ""
+"B<debdiff> will usually compare the respective control files of the packages "
+"using B<wdiff>(1). This option suppresses this part of the processing."
+msgstr ""
+"B<debdiff> irá geralmente comparar os ficheiros de controle respectivos dos "
+"pacotes usando B<wdiff>(1). Esta opção suprime esta parte do processamento."
+
+#. type: TP
+#: ../scripts/debdiff.1:84
+#, no-wrap
+msgid "B<--control>"
+msgstr "B<--control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:88
+msgid ""
+"Compare the respective control files; this is the default, and it can be "
+"used to override a configuration file setting."
+msgstr ""
+"Compara os ficheiros de controle respectivos; isto é a predefinição e pode "
+"ser usado para sobrepor uma definição de ficheiro de configuração."
+
+#. type: TP
+#: ../scripts/debdiff.1:88
+#, no-wrap
+msgid "B<--controlfiles>I< FILE>[B<,>I<FILE> ...]"
+msgstr "B<--controlfiles>I< FILE>[B<,>I<FILE> ...]"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:96
+msgid ""
+"Specify which control files to compare; by default this is just I<control>, "
+"but could include I<postinst>, I<config> and so on. Files will only be "
+"compared if they are present in both I<.debs> being compared. The special "
+"value I<ALL> compares all control files present in both packages, except for "
+"md5sums. This option can be used to override a configuration file setting."
+msgstr ""
+"Especifica quais os ficheiros de controle a comparar; por predefinição isto "
+"é apenas I<control>, mas pode incluir I<postinst>, I<config> e seguindo. Os "
+"ficheiros só serão comparados se estiverem presentes em ambos I<.debs> a "
+"serem comparados. O valor especial I<ALL> faz comparar todos os ficheiros de "
+"controle presentes em ambos pacotes, excepto os md5sums. Esta opção pode "
+"ser usada para sobrepor uma definição de ficheiro de configuração."
+
+#. type: TP
+#: ../scripts/debdiff.1:96
+#, no-wrap
+msgid "B<--wdiff-source-control>"
+msgstr "B<--wdiff-source-control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:100
+msgid ""
+"When processing source packages, compare control files using B<wdiff>. "
+"Equivalent to the B<--control> option for binary packages."
+msgstr ""
+"Quando processa pacotes fonte, compara ficheiros de controle usando "
+"B<wdiff>. Equivalente à opção B<--control> para pacotes binários."
+
+#. type: TP
+#: ../scripts/debdiff.1:100
+#, no-wrap
+msgid "B<--no-wdiff-source-control>"
+msgstr "B<--no-wdiff-source-control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:104
+msgid ""
+"Do not compare control files in source packages using B<wdiff>. This is the "
+"default."
+msgstr ""
+"Não compara ficheiros de controle em pacotes fonte usando o B<wdiff>. Isto "
+"é a predefinição."
+
+#. type: TP
+#: ../scripts/debdiff.1:104
+#, no-wrap
+msgid "B<--wp>, B<--wl>, B<--wt>"
+msgstr "B<--wp>, B<--wl>, B<--wt>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:109
+msgid ""
+"Pass a B<-p>, B<-l> or B<-t> option to B<wdiff> respectively. (This yields "
+"the whole B<wdiff> output rather than just the lines with any changes.)"
+msgstr ""
+"Passa uma opção B<-p>, B<-l> ou B<-t> para o B<wdiff> respetivamente. (Isto "
+"afecta o resultado global de B<wdiff> em vez de apenas as linhas com "
+"alterações.)"
+
+#. type: TP
+#: ../scripts/debdiff.1:109
+#, no-wrap
+msgid "B<--show-moved>"
+msgstr "B<--show-moved>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:116
+msgid ""
+"If multiple I<.deb> files are specified on the command line, either using I<."
+"changes> files or the B<--from>/B<--to> syntax, then this option will also "
+"show which files (if any) have moved between packages. (The package names "
+"are simply determined from the names of the I<.deb> files.)"
+msgstr ""
+"Se forem especificados vários ficheiros I<.deb> na linha de comandos, seja "
+"usando ficheiros I<.changes> ou a sintaxe B<--from>/B<--to>, então esta "
+"opção irá também mostrar quais ficheiros (se algum) foram movidos entre "
+"pacotes. (Os nomes dos pacotes são simplesmente determinados a partir dos "
+"nomes dos ficheiros I<.deb>.)"
+
+#. type: TP
+#: ../scripts/debdiff.1:116
+#, no-wrap
+msgid "B<--noshow-moved>"
+msgstr "B<--noshow-moved>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:120 ../scripts/debdiff.1:141
+msgid ""
+"The default behaviour; can be used to override a configuration file setting."
+msgstr ""
+"O comportamento predefinido; pode ser usando para sobrepor uma definição de "
+"ficheiro de configuração."
+
+#. type: TP
+#: ../scripts/debdiff.1:120
+#, no-wrap
+msgid "B<--renamed>I< FROM TO>"
+msgstr "B<--renamed>I< FROM TO>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:126
+msgid ""
+"If B<--show-moved> is being used and a package has been renamed in the "
+"process, this command instructs B<debdiff> to treat the package in the first "
+"list called I<FROM> as if it were called I<TO>. Multiple uses of this "
+"option are permitted."
+msgstr ""
+"Se B<--show-moved> está a ser usado e um pacote foi renomeado no processo, "
+"este comando instruí o B<debdiff> a tratar o pacote na primeira lista "
+"chamado I<FROM> como se fosse chamado I<TO>. São permitidas várias "
+"utilizações desta opção."
+
+#. type: TP
+#: ../scripts/debdiff.1:126
+#, no-wrap
+msgid "B<--exclude>I< PATTERN>"
+msgstr "B<--exclude>I< PATTERN>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:134
+msgid ""
+"Exclude files whose basenames match I<PATTERN>. Multiple uses of this "
+"option are permitted. Note that this option is passed on to B<diff> and has "
+"the same behaviour, so only the basename of the file is considered: in "
+"particular, B<--exclude='*.patch'> will work, but B<--exclude='debian/"
+"patches/*'> will have no practical effect."
+msgstr ""
+"Exclui ficheiros cujos nomes base correspondem a I<PATTERN>. São permitidas "
+"várias utilizações desta opção. Note que esta opção é passada ao B<diff> e "
+"tem o mesmo comportamento, assim apenas o nome base do ficheiro é "
+"considerado: em particular, B<--exclude='*.patch'> irá funcionar, mas B<--"
+"exclude='debian/patches/*'> não terá nenhum efeito prático."
+
+#. type: TP
+#: ../scripts/debdiff.1:134
+#, no-wrap
+msgid "B<--diffstat>"
+msgstr "B<--diffstat>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:137
+msgid "Include the result of B<diffstat> before the generated diff."
+msgstr "Inclui o resultado de B<diffstat> antes do diff gerado."
+
+#. type: TP
+#: ../scripts/debdiff.1:137
+#, no-wrap
+msgid "B<--no-diffstat>"
+msgstr "B<--no-diffstat>"
+
+#. type: TP
+#: ../scripts/debdiff.1:141
+#, no-wrap
+msgid "B<--auto-ver-sort>"
+msgstr "B<--auto-ver-sort>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:144
+msgid "When comparing source packages, do so in version order."
+msgstr "Quando compara pacotes fonte, fá-lo pela ordem da versão."
+
+#. type: TP
+#: ../scripts/debdiff.1:144
+#, no-wrap
+msgid "B<--no-auto-ver-sort>"
+msgstr "B<--no-auto-ver-sort>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:150
+msgid ""
+"Compare source packages in the order they were passed on the command-line, "
+"even if that means comparing a package with a higher version against one "
+"with a lower version. This is the default behaviour."
+msgstr ""
+"Compara pacotes fonte pela ordem em que foram passados na linha de comandos, "
+"mesmo que isso signifique comparar um pacote com uma versão maior com um de "
+"uma versão menor. Este é o comportamento predefinido."
+
+#. type: TP
+#: ../scripts/debdiff.1:150
+#, no-wrap
+msgid "B<--unpack-tarballs>"
+msgstr "B<--unpack-tarballs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:155
+msgid ""
+"When comparing source packages, also unpack tarballs found in the top level "
+"source directory to compare their contents along with the other files. This "
+"is the default behaviour."
+msgstr ""
+"Quando compara pacotes fonte, também desempacota os tarballs encontrados no "
+"directório de topo da fonte para comparar o seu conteúdo juntamente com os "
+"outros ficheiros. Este é o comportamento predefinido."
+
+#. type: TP
+#: ../scripts/debdiff.1:155
+#, no-wrap
+msgid "B<--no-unpack-tarballs>"
+msgstr "B<--no-unpack-tarballs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:158
+msgid "Do not unpack tarballs inside source packages."
+msgstr "Não desempacota os tarballs dentro de pacotes fonte."
+
+#. type: TP
+#: ../scripts/debdiff.1:158
+#, no-wrap
+msgid "B<--apply-patches>"
+msgstr "B<--apply-patches>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:162
+msgid ""
+"If the old and/or new package is in 3.0 (quilt) format, apply the quilt "
+"patches (and remove B<.pc/>) before comparison."
+msgstr ""
+"Se o pacote antigo e/ou novo está no formato 3.0 (quilt), aplica as patches "
+"quilt (e remove B<.pc/>) antes da comparação."
+
+#. type: TP
+#: ../scripts/debdiff.1:162
+#, no-wrap
+msgid "B<--no-apply-patches, --noapply-patches>"
+msgstr "B<--no-apply-patches, --noapply-patches>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:166
+msgid ""
+"If the old and/or new package is in 3.0 (quilt) format, do not apply the "
+"quilt patches before comparison. This is the default behaviour."
+msgstr ""
+"Se o pacote antigo e/ou novo está no formato 3.0 (quilt), não aplica as "
+"patches quilt antes da comparação. Este é o comportamento predefinido."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:176
+msgid ""
+"Look for the I<.dsc> files in I<directory> instead of the parent of the "
+"source directory. This should either be an absolute path or relative to the "
+"top of the source directory."
+msgstr ""
+"Procura os ficheiros I<.dsc> em I<directory> em vez de no pai do directório "
+"fonte. Isto te de ser ou um caminho absoluto ou relativo ao topo do "
+"directório fonte."
+
+#. type: =item
+#: ../scripts/debdiff.1:182 ../scripts/hardening-check.pl:621
+#, no-wrap
+msgid "B<--quiet>, B<-q>"
+msgstr "B<--quiet>, B<-q>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:185
+msgid "Be quiet if no differences were found."
+msgstr "Fica em silêncio se não encontrar diferenças."
+
+#. type: TP
+#: ../scripts/debdiff.1:185
+#, no-wrap
+msgid "B<--ignore-space>, B<-w>"
+msgstr "B<--ignore-space>, B<-w>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:188
+msgid "Ignore whitespace in diffs."
+msgstr "Ignora espaços em branco nos diffs."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:194
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variables are:"
+msgstr ""
+"Os dois ficheiros de configuração I</etc/devscripts.conf> I<~/.devscripts> "
+"são por essa ordem fonte para uma shell para definirem variáveis de "
+"configuração. Podem ser usadas opções de linha de comandos para sobrepor "
+"definições de ficheiros de configuração. As definições de variáveis de "
+"ambiente são ignoradas para este objectivo. As variáveis actualmente "
+"reconhecidas são:"
+
+#. type: TP
+#: ../scripts/debdiff.1:194
+#, no-wrap
+msgid "B<DEBDIFF_DIRS>"
+msgstr "B<DEBDIFF_DIRS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:198
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--dirs> command line "
+"parameter being used."
+msgstr ""
+"Se definido para I<yes>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--dirs>."
+
+#. type: TP
+#: ../scripts/debdiff.1:198
+#, no-wrap
+msgid "B<DEBDIFF_CONTROL>"
+msgstr "B<DEBDIFF_CONTROL>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:203
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--nocontrol> command "
+"line parameter being used. The default is I<yes>."
+msgstr ""
+"Se definido para I<no>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--nocontrol>. A predefinição é I<yes>."
+
+#. type: TP
+#: ../scripts/debdiff.1:203
+#, no-wrap
+msgid "B<DEBDIFF_CONTROLFILES>"
+msgstr "B<DEBDIFF_CONTROLFILES>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:208
+msgid ""
+"Which control files to compare, corresponding to the B<--controlfiles> "
+"command line option. The default is I<control>."
+msgstr ""
+"Quais ficheiros de controle a comparar, correspondendo à opção de linha de "
+"comandos B<--controlfiles>. A predefinição é I<control>."
+
+#. type: TP
+#: ../scripts/debdiff.1:208
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_MOVED>"
+msgstr "B<DEBDIFF_SHOW_MOVED>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:212
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--show-moved> command "
+"line parameter being used."
+msgstr ""
+"Se definido para I<yes>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--show-moved>."
+
+#. type: TP
+#: ../scripts/debdiff.1:212
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_OPT>"
+msgstr "B<DEBDIFF_WDIFF_OPT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:216
+msgid ""
+"This option will be passed to B<wdiff>; it should be one of B<-p>, B<-l> or "
+"B<-t>."
+msgstr ""
+"Esta opção será passada ao B<wdiff>; deverá ser um de B<-p>, B<-l> ou B<-t>."
+
+#. type: TP
+#: ../scripts/debdiff.1:216
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_DIFFSTAT>"
+msgstr "B<DEBDIFF_SHOW_DIFFSTAT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:220
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--diffstat> command "
+"line parameter being used."
+msgstr ""
+"Se definido para I<yes>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--diffstat>."
+
+#. type: TP
+#: ../scripts/debdiff.1:220
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+msgstr "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:224
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--wdiff-source-"
+"control> command line parameter being used."
+msgstr ""
+"Se definido para I<yes>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--wdiff-source-control>."
+
+#. type: TP
+#: ../scripts/debdiff.1:224
+#, no-wrap
+msgid "B<DEBDIFF_AUTO_VER_SORT>"
+msgstr "B<DEBDIFF_AUTO_VER_SORT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:228
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--auto-ver-sort> "
+"command line parameter being used."
+msgstr ""
+"Se definido para I<yes>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--auto-ver-sort>."
+
+#. type: TP
+#: ../scripts/debdiff.1:228
+#, no-wrap
+msgid "B<DEBDIFF_UNPACK_TARBALLS>"
+msgstr "B<DEBDIFF_UNPACK_TARBALLS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:232
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-unpack-tarballs> "
+"command line parameter being used."
+msgstr ""
+"Se definido para I<no>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--no-unpack-tarballs>."
+
+#. type: TP
+#: ../scripts/debdiff.1:232
+#, no-wrap
+msgid "B<DEBDIFF_APPLY_PATCHES>"
+msgstr "B<DEBDIFF_APPLY_PATCHES>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:237
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--apply-patches> "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+"Se definido para I<yes>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--apply-patches>. A predefinição é I<no>."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:247
+msgid ""
+"This specifies the directory in which to look for the I<.dsc> and files, and "
+"is either an absolute path or relative to the top of the source tree. This "
+"corresponds to the B<--debs-dir> command line option. This directive could "
+"be used, for example, if you always use B<pbuilder> or B<svn-buildpackage> "
+"to build your packages. Note that it also affects B<debrelease>(1) in the "
+"same way, hence the strange name of the option."
+msgstr ""
+"Isto especifica o directório onde procurar pelo I<.dsc> e ficheiros, e é ou "
+"um caminho absoluto ou relativo ao topo da árvore fonte. Isto corresponde à "
+"opção de linha de comandos B<--debs-dir>. Esta directiva pode ser usada, por "
+"exemplo, se você usar sempre B<pbuilder> ou B<svn-buildpackage> para "
+"compilar os seus pacotes. Note que também afecta B<debrelease>(1) do mesmo "
+"modo, daqui o nome estranho da opção."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:251
+msgid ""
+"Normally the exit value will be 0 if no differences are reported and 1 if "
+"any are reported. If there is some fatal error, the exit code will be 255."
+msgstr ""
+"Normalmente o valor de saída será 0 se nenhuma diferença for reportada e 1 "
+"se algo for reportado. Se existir um erro fatal, o código de saída será 255."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:259
+msgid ""
+"B<debdiff-apply>(1), B<diffstat>(1), B<dpkg-deb>(1), B<interdiff>(1), "
+"B<wdiff>(1), B<devscripts.conf>(5), B<diffoscope>(1)"
+msgstr ""
+"B<debdiff-apply>(1), B<diffstat>(1), B<dpkg-deb>(1), B<interdiff>(1), "
+"B<wdiff>(1), B<devscripts.conf>(5), B<diffoscope>(1)"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:264
+msgid ""
+"B<debdiff> was originally written as a shell script by Yann Dirson "
+"E<lt>dirson@debian.orgE<gt> and rewritten in Perl with many more features by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>. The software may be freely "
+"redistributed under the terms and conditions of the GNU General Public "
+"License, version 2."
+msgstr ""
+"B<debdiff> foi escrito originalmente como um script de shell por Yann Dirson "
+"E<lt>dirson@debian.orgE<gt> e reescrito em Perl com muitas mais "
+"funcionalidades por Julian Gilbey E<lt>jdg@debian.orgE<gt>. O software pode "
+"ser redistribuído livremente sob os termos da GNU General Public License, "
+"versão 2."
+
+#. type: TH
+#: ../scripts/debdiff-apply.1:15
+#, no-wrap
+msgid "DEBDIFF-APPLY"
+msgstr "DEBDIFF-APPLY"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:19
+msgid "debdiff-apply - apply a debdiff to a Debian source package"
+msgstr "debdiff-apply - aplica um debdiff a um pacote fonte Debian"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:23
+msgid "B<debdiff-apply> [options] [orig_dsc_or_dir] [patch_file]"
+msgstr "B<debdiff-apply> [options] [orig_dsc_or_dir] [patch_file]"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:26
+msgid "B<debdiff-apply> [options] E<lt> [patch_file]"
+msgstr "B<debdiff-apply> [options] E<lt> [patch_file]"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:32
+msgid ""
+"B<debdiff-apply> takes a I<patchfile> that describes the differences between "
+"two Debian source packages I<old> and I<new>, and applies it to a target "
+"Debian source package I<orig>."
+msgstr ""
+"B<debdiff-apply> recebe um I<patchfile> que descreve as diferenças entre "
+"dois pacotes fonte Debian I<old> e I<new>, e aplica-as ao pacote fonte "
+"Debian alvo I<orig>."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:38
+msgid ""
+"I<orig> could either be the same as I<old> or it could be different. "
+"I<patchfile> is expected to be a unified diff between two Debian source "
+"trees, as what B<debdiff>(1) normally generates."
+msgstr ""
+"I<orig> pode ou ser o mesmo que I<old> ou pode ser diferente. O I<patchfile> "
+"é esperado ser um diff unificado entre duas árvores fonte Debian, como o que "
+"o B<debdiff>(1) normalmente gera."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:42
+msgid ""
+"Any changes to I<debian/changelog> are dealt with specially, to avoid the "
+"conflicts that changelog diffs typically produce when applied naively. The "
+"exact behaviour may be tweaked in the future, so one should not rely on it."
+msgstr ""
+"Quaisquer alterações a I<debian/changelog> são tratadas especialmente, para "
+"evitar os conflitos que os diffs de registo de alterações tipicamente "
+"produzem quando aplicados ingenuamente. O comportamento exacto pode ser "
+"ajustado no futuro, portanto não se deve confiar nele."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:47
+msgid ""
+"If I<patchfile> does not apply to I<orig>, even after the special-casing of "
+"I<debian/changelog>, no changes are made and B<debdiff-apply>(1) will exit "
+"with a non-zero error code."
+msgstr ""
+"Se I<patchfile> não se aplicar a I<orig>, mesmo após o caso especial de "
+"I<debian/changelog>, não são feitas alterações e B<debdiff-apply>(1) irá "
+"terminar com um código de erro não-zero."
+
+#. type: SH
+#: ../scripts/debdiff-apply.1:48
+#, no-wrap
+msgid "ARGUMENTS"
+msgstr "ARGUMENTOS"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:49
+#, no-wrap
+msgid "orig_dsc_or_dir"
+msgstr "orig_dsc_or_dir"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:54
+msgid ""
+"Target to apply the patch to. This can either be an unpacked source tree, or "
+"a \\[char46]dsc file. In the former case, the directory is modified in-"
+"place; in the latter case, a second .dsc is created. Default: I<.>"
+msgstr ""
+"Alvo a onde aplica a patch. Isto pode ser ou uma árvore fonte desempacotada, "
+"ou um ficheiro \\[char46]dsc. No primeiro caso, o directório é modificado no "
+"lugar; no caso seguinte, é criado um segundo .dsc. Predefinição: I<.>"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:54
+#, no-wrap
+msgid "patch_file"
+msgstr "patch_file"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:60
+msgid ""
+"Patch file to apply, in the format output by B<debdiff>(1). Default: I<\\,/"
+"dev/stdin\\/>"
+msgstr ""
+"Ficheiro patch a aplicar, no formato gerado por B<debdiff>(1). Predefinição: "
+"I<\\,/dev/stdin\\/>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:65
+msgid "show this help message and exit"
+msgstr "mostra esta mensagem de ajuda e termina"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:65 ../scripts/debsnap.1:42 ../scripts/sadt.pod:46
+#: ../doc/suspicious-source.1:38 ../scripts/tagpending.pl:106
+#: ../doc/wrap-and-sort.1:73
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:68
+msgid "Output more information"
+msgstr "Gera mais informação"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:68
+#, no-wrap
+msgid "B<-c> CHANGELOG, B<--changelog> CHANGELOG"
+msgstr "B<-c> CHANGELOG, B<--changelog> CHANGELOG"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:71
+msgid "Path to debian/changelog; default: debian/changelog"
+msgstr "Caminho para debian/changelog; predefinição: debian/changelog"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:71
+#, no-wrap
+msgid "B<-D> DISTRIBUTION, B<--distribution> DISTRIBUTION"
+msgstr "B<-D> DISTRIBUIÇÃO, B<--distribution> DISTRIBUIÇÃO"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:75
+msgid ""
+"Distribution to use, if the patch doesn't already contain a changelog; "
+"default: experimental"
+msgstr ""
+"Distribuição a usar, se a patch não conter já um registo de alterações; "
+"predefinição: experimental"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:75
+#, no-wrap
+msgid "B<--repl>"
+msgstr "B<--repl>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:78
+msgid "Run the python REPL after processing."
+msgstr "Corre o REPL python após processamento."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:78
+#, no-wrap
+msgid "B<--source-version>"
+msgstr "B<--source-version>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:83
+msgid ""
+"Don't apply the patch; instead print out the version of the package that it "
+"is supposed to be applied to, or nothing if the patch does not specify a "
+"source version."
+msgstr ""
+"Não aplica a patch; em vez disso escreve a versão do pacote ao qual é "
+"suposto ser aplicada, ou nada se a patch não especificar uma versão fonte."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:83
+#, no-wrap
+msgid "B<--target-version>"
+msgstr "B<--target-version>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:89
+msgid ""
+"Don't apply the patch; instead print out the new version of the package "
+"B<debdiff-apply>(1) would generate, when the patch is applied to the the "
+"given target package, as specified by the other arguments."
+msgstr ""
+"Não aplica a patch; em vez disso escreve a nova versão do pacote que o "
+"B<debdiff-apply>(1) iria gerar, quando a patch é aplicada ao dado pacote "
+"alvo, como especificado pelos outros argumentos."
+
+#. type: SS
+#: ../scripts/debdiff-apply.1:89
+#, no-wrap
+msgid "For .dsc patch targets:"
+msgstr "Para .dsc alvos de patch:"
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:90
+#, no-wrap
+msgid "B<--no-clean>"
+msgstr "B<--no-clean>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:94
+msgid ""
+"Don't clean temporary directories after a failure, so you can examine what "
+"failed."
+msgstr ""
+"Não limpa os directórios temporários após uma falha, para que você possa "
+"examinar o que falhou."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:94
+#, no-wrap
+msgid "B<--quilt-refresh>"
+msgstr "B<--quilt-refresh>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:99
+msgid ""
+"If the building of the new source package fails, try to refresh patches "
+"using B<quilt>(1) then try building it again."
+msgstr ""
+"Se a compilação do novo pacote fonte falhar, tenta refrescar as patches "
+"usando B<quilt>(1) depois tenta compilar de novo."
+
+#. type: TP
+#: ../scripts/debdiff-apply.1:99
+#, no-wrap
+msgid "B<-d> DIRECTORY, B<--directory> DIRECTORY"
+msgstr "B<-d> DIRECTÓRIO, B<--directory> DIRECTÓRIO"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:104
+msgid ""
+"Extract the .dsc into this directory, which won't be cleaned up after "
+"B<debdiff-apply>(1) exits. If not given, then it will be extracted to a "
+"temporary directory."
+msgstr ""
+"Extrai o .dsc para este directório, o qual não será limpo após o B<debdiff-"
+"apply>(1) terminar. Se não fornecido, então será extraído para um directório "
+"temporário."
+
+#. type: SH
+#: ../scripts/debdiff-apply.1:105 ../scripts/debsnap.1:143
+#: ../doc/edit-patch.1:37 ../doc/suspicious-source.1:51 ../doc/what-patch.1:27
+#: ../doc/wrap-and-sort.1:98
+#, no-wrap
+msgid "AUTHORS"
+msgstr "AUTORES"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:108
+msgid ""
+"B<debdiff-apply> and this manual page were written by Ximin Luo "
+"E<lt>infinity0@debian.orgE<gt>"
+msgstr ""
+"B<debdiff-apply> e este manual foram escritos por Ximin Luo "
+"E<lt>infinity0@debian.orgE<gt>"
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:110 ../doc/what-patch.1:34
+msgid ""
+"Both are released under the GNU General Public License, version 3 or later."
+msgstr ""
+"Ambos são lançados sob a GNU General Public License, versão 3 ou posterior."
+
+#. type: Plain text
+#: ../scripts/debdiff-apply.1:112
+msgid "B<debdiff>(1)"
+msgstr "B<debdiff>(1)"
+
+#. type: TH
+#: ../scripts/debi.1:1
+#, no-wrap
+msgid "DEBI"
+msgstr "DEBI"
+
+#. type: Plain text
+#: ../scripts/debi.1:4
+msgid "debi - install current version of generated Debian package"
+msgstr "debi - instala a versão actual do pacote Debian gerado"
+
+#. type: Plain text
+#: ../scripts/debi.1:6
+msgid "B<debi> [I<options>] [I<changes file>] [I<package> ...]"
+msgstr "B<debi> [I<options>] [I<changes file>] [I<package> ...]"
+
+#. type: Plain text
+#: ../scripts/debi.1:21
+msgid ""
+"B<debi> figures out the current version of a package and installs it. If a "
+"I<.changes> file is specified on the command line, the filename must end "
+"with I<.changes>, as this is how the program distinguishes it from package "
+"names. If not, then B<debi> has to be called from within the source code "
+"directory tree. In this case, it will look for the I<.changes> file "
+"corresponding to the current package version (by determining the name and "
+"version number from the changelog, and the architecture in the same way as "
+"B<dpkg-buildpackage>(1) does). It then runs B<debpkg -i> on every I<.deb> "
+"archive listed in the I<.changes> file to install them, assuming that all of "
+"the I<.deb> archives live in the same directory as the I<.changes> file. "
+"Note that you probably don't want to run this program on a I<.changes> file "
+"relating to a different architecture after cross-compiling the package!"
+msgstr ""
+"B<debi> descobre a versão actual de um pacote e instala-o. Se um ficheiro I<."
+"changes> for especificado na linha de comandos, o nome de ficheiro tem de "
+"terminar com I<.changes>, pois é assim que o programa o distingue de nomes "
+"de pacotes. Se não, então B<debi> tem de ser chamado de dentro da árvore de "
+"directórios do código fonte. Neste caso, irá procurar o ficheiro I<.changes> "
+"correspondente À versão actual do pacote (ao determinar o nome e número de "
+"versão a partir do registo de alterações, e a arquitectura do mesmo modo que "
+"o B<dpkg-buildpackage>(1) faz). Depois corre B<debpkg -i> em cada arquivo I<."
+"deb> listado no ficheiro I<.changes> para os instalar, assumindo que todos "
+"os arquivos I<.deb> vivem no mesmo directório que o ficheiro I<.changes>. "
+"Note que provavelmente você não vai querer correr este programa num ficheiro "
+"I<.changes> relativo a uma arquitectura diferente após uma compilação "
+"cruzada do pacote."
+
+#. type: Plain text
+#: ../scripts/debi.1:40
+msgid ""
+"In common with several other scripts in the B<devscripts> package, B<debi> "
+"will climb the directory tree until it finds a I<debian/changelog> file. As "
+"a safeguard against stray files causing potential problems, it will examine "
+"the name of the parent directory once it finds the I<debian/changelog> file, "
+"and check that the directory name corresponds to the package name. "
+"Precisely how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Em comum com vários outros scripts no pacote B<devscripts>, o B<debi> irá "
+"subir a árvore de directórios até encontrar um ficheiro I<debian/changelog>. "
+"Como segurança contra ficheiros errantes que podem causar problemas "
+"potenciais, irá examinar o nome do directório pai assim que encontra o "
+"ficheiro I<debian/changelog>, e verifica que o nome de directório "
+"corresponde ao nome do pacote. O modo preciso de como isto é feito é "
+"controlado por duas variáveis de ficheiro de configuração "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> e B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, e as "
+"suas opções de linha de comandos correspondentes B<--check-dirname-level> e "
+"B<--check-dirname-regex>."
+
+#. type: Plain text
+#: ../scripts/debi.1:78 ../scripts/debrelease.1:87
+msgid ""
+"Look for the I<.changes> and I<.deb> files in I<directory> instead of the "
+"parent of the source directory. This should either be an absolute path or "
+"relative to the top of the source directory."
+msgstr ""
+"Procura os ficheiros I<.changes> e I<.deb> em I<directory> em vez de no pai "
+"do directório fonte. Isto te de ser ou um caminho absoluto ou relativo ao "
+"topo do directório fonte."
+
+#. type: TP
+#: ../scripts/debi.1:78
+#, no-wrap
+msgid "B<-m>, B<--multi>"
+msgstr "B<-m>, B<--multi>"
+
+#. type: Plain text
+#: ../scripts/debi.1:81
+msgid "Search for a multiarch I<.changes> file, as created by B<dpkg-cross>."
+msgstr ""
+"Procura por um ficheiro I<.changes> de multi-arquitectura, como criado pelo "
+"B<dpkg-cross>."
+
+#. type: TP
+#: ../scripts/debi.1:81
+#, no-wrap
+msgid "B<-u>, B<--upgrade>"
+msgstr "B<-u>, B<--upgrade>"
+
+#. type: Plain text
+#: ../scripts/debi.1:87
+msgid ""
+"Only upgrade packages already installed on the system, rather than "
+"installing all packages listed in the I<.changes> file. Useful for multi-"
+"binary packages when you don't want to have all the binaries installed at "
+"once."
+msgstr ""
+"Apenas actualiza pacotes já instalados no sistema, em vez de instalar todos "
+"os pacotes listados no ficheiro I<.changes>. Útil para pacotes multi-"
+"binário quando você não quer todos os binários instalados ao mesmo tempo."
+
+#. type: TP
+#: ../scripts/debi.1:95
+#, no-wrap
+msgid "B<--with-depends>"
+msgstr "B<--with-depends>"
+
+#. type: Plain text
+#: ../scripts/debi.1:98
+msgid "Attempt to satisfy the I<Depends> of a package when installing it."
+msgstr "Tenta satisfazer os I<Depends> de um pacote quando o instala."
+
+#. type: TP
+#: ../scripts/debi.1:98
+#, no-wrap
+msgid "B<--tool> I<tool>"
+msgstr "B<--tool> I<tool>"
+
+#. type: Plain text
+#: ../scripts/debi.1:102
+msgid ""
+"Use the specified I<tool> for installing the dependencies of the package(s) "
+"to be installed. By default, B<apt-get> is used."
+msgstr ""
+"Usa a I<tool> especificada para instalar as dependências dos pacote(s) a "
+"serem instalados. Por predefinição, é usado o B<apt-get>."
+
+#. type: Plain text
+#: ../scripts/debi.1:125
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and I<."
+"deb> files, and is either an absolute path or relative to the top of the "
+"source tree. This corresponds to the B<--debs-dir> command line option. "
+"This directive could be used, for example, if you always use B<pbuilder> or "
+"B<svn-buildpackage> to build your packages. Note that it also affects "
+"B<debrelease>(1) in the same way, hence the strange name of the option."
+msgstr ""
+"Isto especifica o directório onde procurar pelos ficheiros I<.changes> e I<."
+"deb>, e é ou um caminho absoluto ou relativo ao topo da árvore fonte. Isto "
+"corresponde à opção de linha de comandos B<--debs-dir>. Esta directiva pode "
+"ser usada, por exemplo, se você usar sempre B<pbuilder> ou B<svn-"
+"buildpackage> para compilar os seus pacotes. Note que também afecta "
+"B<debrelease>(1) do mesmo modo, daqui o nome estranho da opção."
+
+#. type: Plain text
+#: ../scripts/debi.1:135
+msgid "B<debpkg>(1), B<devscripts.conf>(5)"
+msgstr "B<debpkg>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debi.1:140
+msgid ""
+"B<debi> was originally written by Christoph Lameter E<lt>clameter@debian."
+"orgE<gt>. The now-defunct script B<debit> was originally written by James "
+"R. Van Zandt E<lt>jrv@vanzandt.mv.comE<gt>. They have been moulded into one "
+"script together with B<debc>(1) and parts extensively modified by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"B<debi> foi escrito originalmente por Christoph Lameter E<lt>clameter@debian."
+"orgE<gt>. O script agora-defunto B<debit> foi escrito originalmente por "
+"James R. Van Zandt E<lt>jrv@vanzandt.mv.comE<gt>. Eles foram moldados em um "
+"script juntamente com o B<debc>(1) e partes foram extensivamente modificadas "
+"por Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/debpkg.1:1
+#, no-wrap
+msgid "DEBPKG"
+msgstr "DEBPKG"
+
+#. type: Plain text
+#: ../scripts/debpkg.1:4
+msgid "debpkg - wrapper for dpkg"
+msgstr "debpkg - invólucro para dpkg"
+
+#. type: Plain text
+#: ../scripts/debpkg.1:6
+msgid "B<debpkg> I<dpkg-options>"
+msgstr "B<debpkg> I<dpkg-options>"
+
+#. type: Plain text
+#: ../scripts/debpkg.1:12
+msgid ""
+"B<debpkg> simply invokes B<dpkg>(1) but first becomes superuser so that "
+"B<dpkg> is able to install and remove packages. It also cleans the "
+"environment and resets PATH to a sane default: \"/usr/sbin:/usr/bin:/sbin:/"
+"bin:/usr/bin/X11\" so that local versions of programs are not run by "
+"accident."
+msgstr ""
+"O B<debpkg> simplesmente invoca B<dpkg>(1) mas primeiro torna-se super-"
+"utilizador para que o B<dpkg> seja capaz de instalar e remover pacotes. "
+"Também limpa o ambiente e reiniciar a PATH para a predefinição sã: \"/usr/"
+"sbin:/usr/bin:/sbin:/bin:/usr/bin/X11\" para que versões locais de programas "
+"não sejam corridas por acidente."
+
+#. type: Plain text
+#: ../scripts/debpkg.1:17
+msgid ""
+"B<debpkg> must be given superuser privileges in some way to function "
+"properly. B<Access to debpkg with those privileges is the same as having "
+"superuser access to your machine.> B<debpkg> will abort if it finds that it "
+"neither being run by root nor setuid root."
+msgstr ""
+"Ao B<debpkg> tem de ser dado privilégios de super-utilizador de algum modo "
+"para funcionar corretamente. B<O acesso ao debpkg com esses privilégios é o "
+"mesmo que ter acesso de super-utilizador à sua máquina.> O B<debpkg> irá "
+"abortar de descobrir que não está a ser corrido como root nem setuid root."
+
+#. type: Plain text
+#: ../scripts/debpkg.1:23
+msgid ""
+"The B<devscripts> package has been designed to allow B<debpkg> to be made "
+"setuid root. This works by using a compiled wrapper script, which means "
+"that B<suidperl> is not required. See B<dpkg-statoverride>(8) if you wish "
+"to make this program setuid root. B<sudo> or B<super> could also "
+"conceivably be used."
+msgstr ""
+"O pacote B<devscripts> foi desenhado para permitir ao B<debpkg> ser feito "
+"setuid root. Isto funciona ao usar um script invólucro compilado, o que "
+"significa que B<suidperl> não é requerido. Veja B<dpkg-statoverride>(8) se "
+"desejar tornar este programa setuid root. B<sudo> ou B<super> podem também "
+"ser usados de modo concebível."
+
+#. type: Plain text
+#: ../scripts/debpkg.1:25
+msgid ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; minor modifications made by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Christoph Lameter E<lt>clameter@debian.orgE<gt>; modificações menores feitas "
+"por Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:3
+msgid "debrepro - reproducibility tester for Debian packages"
+msgstr "debrepro - testador de reprodutibilidade para pacotes Debian"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:7
+msgid "B<debrepro> [I<OPTIONS>] [I<SOURCEDIR>]"
+msgstr "B<debrepro> [I<OPTIONS>] [I<SOURCEDIR>]"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:11
+msgid ""
+"B<debrepro> will build a given source directory twice, with a set of "
+"variations between the first and the second build, and compare the produced "
+"binary packages. If B<diffoscope> is installed, it is used to compare non-"
+"matching binaries. If B<disorderfs> is installed, it is used during the "
+"build to inject non-determinism in filesystem listing operations."
+msgstr ""
+"B<debrepro> irá compilar um dado directório fonte duas vezes, com um "
+"conjunto de variações entre a primeira e segunda compilação, e compara os "
+"pacotes binário produzidos. Se B<diffoscope> estiver instalado, é usado para "
+"comparar binários não-correspondentes. Se B<disorderfs> estiver instalado, é "
+"usado durante a compilação para injectar não-determinismo em operações de "
+"listagem do sistema de ficheiros."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:18
+msgid ""
+"I<SOURCEDIR> must be a directory containing an unpacked Debian source "
+"package. If I<SOURCEDIR> is omitted, the current directory is assumed."
+msgstr ""
+"I<SOURCEDIR> tem de ser um directório que contenha um pacote fonte Debian "
+"desempacotado. Se I<SOURCEDIR> for omitido, é assumido o directório actual."
+
+#. type: =head1
+#: ../scripts/debrepro.pod:21
+msgid "OUTPUT DIRECTORY"
+msgstr "DIRECTÓRIO DE RESULTADOS"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:23
+msgid ""
+"At the very end of a build, B<debrepro> will inform the location of the "
+"output directory where the build artifacts can be found. In that directory, "
+"you will find:"
+msgstr ""
+"Mesmo no final duma compilação, o B<debrepro> irá informar a localização do "
+"directório de resultados onde podem ser encontrados os artefactos da "
+"compilação, Nesse directório você irá encontrar:"
+
+#. type: =item
+#: ../scripts/debrepro.pod:29
+msgid "I<$OUTPUTDIR/first>"
+msgstr "I<$OUTPUTDIR/first>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:31
+msgid ""
+"Contains the results of the first build, including a copy of the source "
+"tree, and the resulting binary packages."
+msgstr ""
+"Contém os resultados da primeira compilação, incluindo uma cópia da árvore "
+"fonte, e os pacotes binários resultantes."
+
+#. type: =item
+#: ../scripts/debrepro.pod:34
+msgid "I<$OUTPUTDIR/first/build.sh>"
+msgstr "I<$OUTPUTDIR/first/build.sh>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:36
+msgid "Contains the exact build script that was used in the first build."
+msgstr ""
+"Contém o script de compilação exacto que foi usado na primeira compilação."
+
+#. type: =item
+#: ../scripts/debrepro.pod:38
+msgid "I<$OUTPUTDIR/second>"
+msgstr "I<$OUTPUTDIR/second>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:40
+msgid ""
+"Contains the results of the second build, including a copy of the source "
+"tree, and the resulting binary packages."
+msgstr ""
+"Contém os resultados da segunda compilação, incluindo uma cópia da árvore "
+"fonte, e os pacotes binários resultantes."
+
+#. type: =item
+#: ../scripts/debrepro.pod:43
+msgid "I<$OUTPUTDIR/second/build.sh>"
+msgstr "I<$OUTPUTDIR/second/build.sh>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:45
+msgid "Contains the exact build script that was used in the second build."
+msgstr ""
+"Contém o script de compilação exacto que foi usado na segunda compilação."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:49
+msgid ""
+"Taking a B<diff(1)> between I<$OUTPUTDIR/first/build.sh> and I<$OUTPUTDIR/"
+"second/build.sh> is an excellent way of figuring out exactly what changed "
+"between the two builds."
+msgstr ""
+"Obter um B<diff(1)> entre I<$OUTPUTDIR/first/build.sh> e I<$OUTPUTDIR/second/"
+"build.sh> é um excelente modo de descobrir exactamente o que mudou entre as "
+"duas compilações."
+
+#. type: =head1
+#: ../scripts/debrepro.pod:53
+msgid "SUPPORTED VARIATIONS"
+msgstr "VARIAÇÕES SUPORTADAS"
+
+#. type: =item
+#: ../scripts/debrepro.pod:57
+msgid "B<user>"
+msgstr "B<user>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:59
+msgid ""
+"The I<$USER> environment variable will contain different values between the "
+"first and second builds."
+msgstr ""
+"A variável de ambiente I<$USER> irá conter valores diferentes entre a "
+"primeira e segunda compilações."
+
+#. type: =item
+#: ../scripts/debrepro.pod:62
+msgid "B<path>"
+msgstr "B<path>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:64
+msgid ""
+"During the second build, a fake, non-existing directory will be appended to "
+"the I<$PATH> environment variable."
+msgstr ""
+"Durante a segunda compilação, será acrescentado um directório falso, não "
+"existente, à variável de ambiente I<$PATH>."
+
+#. type: =item
+#: ../scripts/debrepro.pod:67
+msgid "B<umask>"
+msgstr "B<umask>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:69
+msgid "The builds will use different umask settings."
+msgstr "As compilações irão usar definições umask diferentes."
+
+#. type: =item
+#: ../scripts/debrepro.pod:71
+msgid "B<locale>"
+msgstr "B<locale>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:73
+msgid "Both I<$LC_ALL> and I<$LANG> will be different across the two builds."
+msgstr ""
+"Ambas I<$LC_ALL> e I<$LANG> serão diferentes através das duas compilações."
+
+#. type: =item
+#: ../scripts/debrepro.pod:75
+msgid "B<timezone>"
+msgstr "B<timezone>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:77
+msgid "I<$TZ> will be different across builds."
+msgstr "I<$TZ> será diferente através das compilações."
+
+#. type: =item
+#: ../scripts/debrepro.pod:79
+msgid "B<filesystem-ordering>"
+msgstr "B<filesystem-ordering>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:81
+msgid ""
+"If B<disorderfs> is installed, both builds will be done under a disorderfs "
+"overlay directory. This will cause filesystem listing operations to be "
+"return items in a non-deterministic order."
+msgstr ""
+"Se o B<disorderfs> estiver instalado, ambas compilações serão feitas sob um "
+"directório de sobreposição de disorderfs. Isto irá fazer com que operações "
+"de listagem do sistema de ficheiros retornem itens numa ordem não "
+"determinística."
+
+#. type: =item
+#: ../scripts/debrepro.pod:85
+msgid "B<time>"
+msgstr "B<time>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:87
+msgid ""
+"The second build will be executed 213 days, 7 hours and 13 minutes in the "
+"future with regards to the current time (using B<faketime(1)>)."
+msgstr ""
+"A segunda compilação será executada 213 dias, 7 horas e 13 minutos no futuro "
+"relativamente à hora actual (usando o B<faketime(1)>)."
+
+#. type: =item
+#: ../scripts/debrepro.pod:96
+msgid "-s VARIATION, --skip VARIATION"
+msgstr "-s VARIATION, --skip VARIATION"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:98
+msgid ""
+"Don't perform the named VARIATION. Variation names are the ones used in "
+"their description in section B<SUPPORTED VARIATIONS>."
+msgstr ""
+"Não executa a VARIATION nomeada. Nomes de variação são aqueles usados na sua "
+"descrição na secção B<SUPPORTED VARIATIONS>."
+
+#. type: =item
+#: ../scripts/debrepro.pod:101
+msgid "-b COMMAND, --before-second-build COMMAND"
+msgstr "-b COMANDO, --before-second-build COMANDO"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:103
+msgid ""
+"Run COMMAND before performing the second build. This can be used for example "
+"to apply a patch to a source tree for the second build, and check whether "
+"(or how) the resulting binaries are affected."
+msgstr ""
+"Corre COMMAND antes de executar a segunda compilação. Isto pode ser usado "
+"por exemplo para aplicar uma patch a uma árvore fonte para a segunda "
+"compilação, e verificar se (ou como) os binários resultantes são afectados."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:107 ../scripts/salsa.pl:381
+msgid "Examples:"
+msgstr "Exemplos:"
+
+#. type: verbatim
+#: ../scripts/debrepro.pod:109
+#, no-wrap
+msgid ""
+" $ debrepro --before-second-build \"git checkout branch-with-changes\"\n"
+"\n"
+msgstr ""
+" $ debrepro --before-second-build \"git checkout branch-with-changes\"\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/debrepro.pod:111
+#, no-wrap
+msgid ""
+" $ debrepro --before-second-build \"patch -p1 < /path/to/patch\"\n"
+"\n"
+msgstr ""
+" $ debrepro --before-second-build \"patch -p1 < /path/to/patch\"\n"
+"\n"
+
+#. type: =item
+#: ../scripts/debrepro.pod:113
+msgid "-B COMMAND, --build-command COMMAND"
+msgstr "-B COMANDO, --build-command COMANDO"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:115
+msgid "Use custom build command. Default: I<dpkg-buildpackage -b -us -uc>."
+msgstr ""
+"Usa comando de compilação personalizado. Predefinição: I<dpkg-buildpackage -"
+"b -us -uc>."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:117
+msgid ""
+"If a custom build command is specified, the restriction of only running "
+"against a Debian source tree is relaxed and you can run debrepro against any "
+"source directory."
+msgstr ""
+"Se for especificado um comando de compilação personalizado, a restrição de "
+"apenas correr contra uma árvore fonte Debian é relaxada e você pode correr "
+"debrepro contra qualquer directório fonte."
+
+#. type: =item
+#: ../scripts/debrepro.pod:121
+msgid "-a PATTERN, --artifact-pattern PATTERN"
+msgstr "-a PADRÃO, --artifact-pattern PADRÃO"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:123
+msgid ""
+"Define a file glob pattern to determine which artifacts need to be compared "
+"across the builds. Default: I<../*.deb>."
+msgstr ""
+"Define um ficheiro padrão glob para determinar quais artefactos precisam de "
+"ser comparados por entre as compilações. Predefinição: I<../*.deb>."
+
+#. type: =item
+#: ../scripts/debrepro.pod:126
+msgid "-n, --no-copy"
+msgstr "-n, --no-copy"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:128
+#, fuzzy
+#| msgid ""
+#| "Do not copy the source directory to the temporary work directory before "
+#| "each build. Use this to run deprepro against the source directory "
+#| "directly."
+msgid ""
+"Do not copy the source directory to the temporary work directory before each "
+"build. Use this to run debrepro against the source directory directly."
+msgstr ""
+"Não copia o directório fonte para o directório de trabalho temporário antes "
+"de cada compilação. Use isto para correr o deprepro contra qualquer "
+"directório directamente."
+
+#. type: =item
+#: ../scripts/debrepro.pod:132
+msgid "-t TIME, --timeout TIME"
+msgstr "-t TEMPO, --timeout TEMPO"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:134
+msgid ""
+"Apply a timeout to all builds. I<TIME> must be a time specification "
+"compatible with GNU timeout(1)."
+msgstr ""
+"Aplica um tempo limite para todas as compilações. I<TIME> tem de ser uma "
+"especificação de tempo compatível com o timeout(1) do GNU."
+
+#. type: =item
+#: ../scripts/debrepro.pod:138
+msgid "-h, --help"
+msgstr "-h, --help"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:140
+msgid "Display this help message and exit."
+msgstr "Mostra esta mensagem de ajuda e termina."
+
+#. type: SH
+#: ../scripts/debrepro.pod:144 ../scripts/debsnap.1:102
+#: ../scripts/dscextract.1:20 ../scripts/transition-check.pl:54
+#: ../scripts/uscan.pl:1917 ../scripts/wnpp-check.1:28
+#, no-wrap
+msgid "EXIT STATUS"
+msgstr "ESTADO DE SAÍDA"
+
+#. type: =item
+#: ../scripts/debrepro.pod:148 ../scripts/transition-check.pl:61
+#: ../scripts/who-permits-upload.pl:125
+msgid "0Z<>"
+msgstr "0Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:150
+msgid "Package is reproducible."
+msgstr "Pacote é reproduzível."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:152
+msgid ""
+"Reproducible here means that the two builds produced the exactly the same "
+"binaries, under the set of variations that B<debrepro> tests. Other sources "
+"of non-determinism in builds that are not yet tested might still affect "
+"builds in the wild."
+msgstr ""
+"Aqui reproduzível significa que as duas compilações produziram exactamente "
+"os mesmos binários, sob o conjunto de variações que o B<debrepro> testa. "
+"Outras fontes de não-determinismo em compilações que ainda não foram "
+"testadas podem ainda afectar outras compilações."
+
+#. type: =item
+#: ../scripts/debrepro.pod:157 ../scripts/transition-check.pl:66
+#: ../scripts/who-permits-upload.pl:129
+msgid "1Z<>"
+msgstr "1Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:159
+msgid "Package is not reproducible."
+msgstr "Pacote não é reproduzível."
+
+#. type: =item
+#: ../scripts/debrepro.pod:161 ../scripts/who-permits-upload.pl:133
+msgid "2Z<>"
+msgstr "2Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:163
+msgid "The given input is not a valid Debian source package."
+msgstr "A entrada fornecida não é um pacote fonte Debian válido."
+
+#. type: =item
+#: ../scripts/debrepro.pod:165
+msgid "3Z<>"
+msgstr "3Z<>"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:167
+msgid "Required programs are missing."
+msgstr "Programas requeridos estão em falta."
+
+#. type: textblock
+#: ../scripts/debrepro.pod:173
+msgid "diffoscope (1), disorderfs (1), timeout(1)"
+msgstr "diffoscope (1), disorderfs (1), timeout(1)"
+
+#. type: textblock
+#: ../scripts/debrepro.pod:177
+msgid "Antonio Terceiro <terceiro@debian.org>."
+msgstr "Antonio Terceiro <terceiro@debian.org>."
+
+#. type: TH
+#: ../scripts/debrelease.1:1
+#, no-wrap
+msgid "DEBRELEASE"
+msgstr "DEBRELEASE"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:4
+msgid "debrelease - a wrapper around dupload or dput"
+msgstr "debrelease - um invólucro em volta de dupload ou dput"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:6
+msgid "B<debrelease> [I<debrelease options>] [I<dupload/dput options>]"
+msgstr "B<debrelease> [I<debrelease options>] [I<dupload/dput options>]"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:15
+msgid ""
+"B<debrelease> is a simple wrapper around B<dupload> or B<dput>. It is "
+"called from within the source code tree of a package, and figures out the "
+"current version of a package. It then looks for the corresponding I<."
+"changes> file (which lists the files needed to upload in order to release "
+"the package) in the parent directory of the source code tree and calls "
+"B<dupload> or B<dput> with the I<.changes> file as parameter in order to "
+"perform the actual uploading."
+msgstr ""
+"B<debrelease> é um invólucro simples em torno de B<dupload> ou B<dput>. É "
+"chamado de dentro da árvore de código fonte de um pacote, e descobre a "
+"versão actual de um pacote. Depois procura pelo ficheiro I<.changes> "
+"correspondente (o qual lista os ficheiros necessários para o envio de modo a "
+"lançar o pacote) no directório pai da árvore de código fonte e chama "
+"B<dupload> ou B<dput> com o ficheiro I<.changes> como parâmetro de modo a "
+"executar o verdadeiro envio."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:20
+msgid ""
+"Options may be given to B<debrelease>; except for the ones listed below, "
+"they are passed on unchanged to B<dupload> or B<dput>. The B<devscripts> "
+"configuration files are also read by B<debrelease> as described below."
+msgstr ""
+"Pode ser dadas opções ao B<debrelease>; excepto aquelas listadas em baixo, "
+"essas são passadas sem alterações ao B<dupload> ou B<dput>. Os ficheiros de "
+"configuração do B<devscripts> são também lidos pelo B<debrelease> como "
+"descrito em baixo."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:31
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debrelease> will climb the directory tree until it finds a I<debian/"
+"changelog> file. As a safeguard against stray files causing potential "
+"problems, it will examine the name of the parent directory once it finds the "
+"I<debian/changelog> file, and check that the directory name corresponds to "
+"the package name. Precisely how it does this is controlled by two "
+"configuration file variables B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and their corresponding command-line "
+"options B<--check-dirname-level> and B<--check-dirname-regex>."
+msgstr ""
+"Em comum com vários outros scripts no pacote B<devscripts>, o B<debrelease> "
+"irá subir a árvore de directórios até encontrar um ficheiro I<debian/"
+"changelog>. Como segurança contra ficheiros errantes que podem causar "
+"problemas potenciais, irá examinar o nome do directório pai assim que "
+"encontra o ficheiro I<debian/changelog>, e verifica que o nome de directório "
+"corresponde ao nome do pacote. O modo preciso de como isto é feito é "
+"controlado por duas variáveis de ficheiro de configuração "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> e B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, e as "
+"suas opções de linha de comandos correspondentes B<--check-dirname-level> e "
+"B<--check-dirname-regex>."
+
+#. type: TP
+#: ../scripts/debrelease.1:61 ../scripts/debrsign.1:31 ../scripts/debsign.1:68
+#, no-wrap
+msgid "B<-S>"
+msgstr "B<-S>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:67
+msgid ""
+"If this option is used, or the default I<.changes> file is not found but a "
+"source-only I<.changes> file is present, then this source-only I<.changes> "
+"file will be uploaded instead of an arch-specific one."
+msgstr ""
+"Se esta opção for usada, ou se não for encontrado o ficheiro I<.changes> "
+"predefinido mas está presente um ficheiro I<.changes> apenas-fonte, então "
+"este ficheiro I<.changes> apenas-fonte será enviado em vez de um especifico-"
+"de-arquitectura."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:75
+msgid ""
+"See B<dpkg-architecture>(1) for a description of these options. They affect "
+"the search for the I<.changes> file. They are provided to mimic the "
+"behaviour of B<dpkg-buildpackage> when determining the name of the I<."
+"changes> file. If a plain B<-t> is given, it is taken to be the B<dupload> "
+"host-specifying option, and therefore signifies the end of the B<debrelease>-"
+"specific options."
+msgstr ""
+"Veja B<dpkg-architecture>(1) para uma descrição destas opções. Elas afectam "
+"a procura pelo ficheiro I<.changes>. São disponibilizadas para imitar o "
+"comportamento do B<dpkg-buildpackage> ao determinar o nome do ficheiro I<."
+"changes>. Se for dado um B<-t> simples, é tomado como sendo a opção que "
+"especifica a máquina do B<dupload>, e por isso significa o final das opções "
+"especificas do B<debrelease>-."
+
+#. type: TP
+#: ../scripts/debrelease.1:75 ../scripts/debrsign.1:41 ../scripts/debsign.1:78
+#, no-wrap
+msgid "B<--multi>"
+msgstr "B<--multi>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:81
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debrelease> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by B<dpkg-"
+"cross>."
+msgstr ""
+"Modo I<.changes> Multiarch. Isto significa que o B<debrelease> deve usar o "
+"ficheiro mais recente com o padrão de nome I<package_version_*+*.changes> "
+"como o ficheiro I<.changes>, permitindo os ficheiros I<.changes> produzidos "
+"pelo B<dpkg-cross>."
+
+#. type: TP
+#: ../scripts/debrelease.1:111
+#, no-wrap
+msgid "B<DEBRELEASE_UPLOADER>"
+msgstr "B<DEBRELEASE_UPLOADER>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:116
+msgid ""
+"The currently recognised values are I<dupload> and I<dput>, and it specifies "
+"which uploader program should be used. It corresponds to the B<--dupload> "
+"and B<--dput> command line options."
+msgstr ""
+"Os valores reconhecidos actualmente são I<dupload> e I<dput>, e especificam "
+"qual o programa de envio deve ser usado. Corresponde às opções de linha de "
+"comandos B<--dupload> e B<--dput>."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:125
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and I<."
+"deb> files, and is either an absolute path or relative to the top of the "
+"source tree. This corresponds to the B<--debs-dir> command line option. "
+"This directive could be used, for example, if you always use B<pbuilder> or "
+"B<svn-buildpackage> to build your packages. Note that it also affects "
+"B<debc>(1) and B<debi>(1)."
+msgstr ""
+"Isto especifica o directório onde procurar pelos ficheiros I<.changes> e I<."
+"deb>, e é ou um caminho absoluto ou relativo ao topo da árvore fonte. Isto "
+"corresponde à opção de linha de comandos B<--debs-dir>. Esta directiva pode "
+"ser usada, por exemplo, se você usar sempre B<pbuilder> ou B<svn-"
+"buildpackage> para compilar os seus pacotes. Note que também afecta "
+"B<debc>(1) e B<debi>(1)."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:136
+msgid "B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+msgstr "B<dput>(1), B<dupload>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:138
+msgid ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, based on the original B<release> "
+"script by Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+msgstr ""
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>, baseado no script B<lançado> "
+"originalmente por Christoph Lameter E<lt>clameter@debian.orgE<gt>."
+
+#. type: Content of the dhfirstname entity
+#: ../scripts/deb-reversion.dbk:30
+msgid "<firstname>martin f.</firstname>"
+msgstr "<firstname>martin f.</firstname>"
+
+#. type: Content of the dhsurname entity
+#: ../scripts/deb-reversion.dbk:31
+msgid "<surname>krafft</surname>"
+msgstr "<surname>krafft</surname>"
+
+#. type: Content of the dhmaintfirstname entity
+#: ../scripts/deb-reversion.dbk:32
+msgid "<firstname>Julian</firstname>"
+msgstr "<firstname>Julian</firstname>"
+
+#. type: Content of the dhmaintsurname entity
+#: ../scripts/deb-reversion.dbk:33
+msgid "<surname>Gilbey</surname>"
+msgstr "<surname>Gilbey</surname>"
+
+#. type: Content of the dhdate entity
+#: ../scripts/deb-reversion.dbk:35
+msgid "<date>Feb 13, 2006</date>"
+msgstr "<date>Fevereiro 13, 2006</date>"
+
+#. type: Content of the dhsection entity
+#: ../scripts/deb-reversion.dbk:38
+msgid "<manvolnum>1</manvolnum>"
+msgstr "<manvolnum>1</manvolnum>"
+
+#. type: Content of the dhemail entity
+#: ../scripts/deb-reversion.dbk:39
+msgid "<email>madduck@debian.org</email>"
+msgstr "<email>madduck@debian.org</email>"
+
+#. type: Content of the dhmaintemail entity
+#: ../scripts/deb-reversion.dbk:40
+msgid "<email>jdg@debian.org</email>"
+msgstr "<email>jdg@debian.org</email>"
+
+#. type: Content of the dhusername entity
+#: ../scripts/deb-reversion.dbk:41
+msgid "martin f. krafft"
+msgstr "martin f. krafft"
+
+#. type: Content of the dhmaintusername entity
+#: ../scripts/deb-reversion.dbk:42
+msgid "Julian Gilbey"
+msgstr "Julian Gilbey"
+
+#. type: Content of the dhucpackage entity
+#: ../scripts/deb-reversion.dbk:43
+msgid "<refentrytitle>deb-reversion</refentrytitle>"
+msgstr "<refentrytitle>deb-reversion</refentrytitle>"
+
+#. type: Content of the dhcommand entity
+#: ../scripts/deb-reversion.dbk:44 ../scripts/deb-reversion.dbk:45
+msgid "deb-reversion"
+msgstr "deb-reversion"
+
+#. type: Content of the debian entity
+#: ../scripts/deb-reversion.dbk:47
+msgid "<productname>Debian</productname>"
+msgstr "<productname>Debian</productname>"
+
+#. type: Content of the gnu entity
+#: ../scripts/deb-reversion.dbk:48
+msgid "<acronym>GNU</acronym>"
+msgstr "<acronym>GNU</acronym>"
+
+#. type: Content of the gpl entity
+#: ../scripts/deb-reversion.dbk:49
+msgid "&gnu; <acronym>GPL</acronym>"
+msgstr "&gnu; <acronym>GPL</acronym>"
+
+#. type: Content of: <refentry><refentryinfo><address>
+#: ../scripts/deb-reversion.dbk:55
+#, no-wrap
+msgid ""
+" &dhemail;\n"
+" "
+msgstr ""
+" &dhemail;\n"
+" "
+
+#. type: Content of: <refentry><refentryinfo>
+#: ../scripts/deb-reversion.dbk:54
+msgid "<placeholder type=\"address\" id=\"0\"/> &dhdate;"
+msgstr "<placeholder type=\"address\" id=\"0\"/> &dhdate;"
+
+#. type: Content of: <refentry><refnamediv><refname>
+#: ../scripts/deb-reversion.dbk:65
+msgid "&dhcommand;"
+msgstr "&dhcommand;"
+
+#. type: Content of: <refentry><refnamediv><refpurpose>
+#: ../scripts/deb-reversion.dbk:67
+msgid "simple script to change the version of a .deb file"
+msgstr "script único para mudar a versão de um ficheiro .deb"
+
+#. type: Content of: <refentry><refsynopsisdiv><cmdsynopsis>
+#: ../scripts/deb-reversion.dbk:72
+msgid ""
+"<command>&dhcommand;</command> <arg choice=\"opt\"> <replaceable>options</"
+"replaceable> </arg> <replaceable> .deb-file</replaceable> <arg "
+"choice=\"opt\" rep=\"repeat\"><replaceable>log message</replaceable></arg>"
+msgstr ""
+"<command>&dhcommand;</command> <arg choice=\"opt\"> <replaceable>opções</"
+"replaceable> </arg> <replaceable> ficheiro .deb</replaceable> <arg "
+"choice=\"opt\" rep=\"repeat\"><replaceable>mensagem de relatório</"
+"replaceable></arg>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:85
+msgid ""
+"<command>&dhcommand;</command> unpacks the specified <filename>.deb</"
+"filename> file, changes the version number in the relevant locations, "
+"appends a Debian <filename>changelog</filename> entry with the specified "
+"contents, and creates a new <filename>.deb</filename> file with the updated "
+"version."
+msgstr ""
+"<command>&dhcommand;</command> desempacota o ficheiro <filename>.deb</"
+"filename> especificado, muda o número de versão nas localizações relevantes, "
+"acrescenta uma entrada <filename>changelog</filename> Debian com o conteúdo "
+"especificado, e cria um novo ficheiro <filename>.deb</filename> com a versão "
+"actualizada."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:92
+msgid ""
+"By default, the tool creates a new version number suitable for local "
+"changes, such that the new package will be greater than the current one, but "
+"lesser than any future, official Debian packages. With <option>-v "
+"<replaceable class=\"parameter\">version</replaceable></option>, the version "
+"number can be specified directly. On the other hand, the <option>-c</"
+"option> simply calculates the new version number but does not generate a new "
+"package."
+msgstr ""
+"Por predefinição, a ferramenta cria um novo número de versão apropriado para "
+"alterações locais, tal que o novo pacote será maior que o actual, mas menor "
+"que qualquer pacote oficial Debian futuro. Com <option>-v <replaceable "
+"class=\"parameter\">version</replaceable></option>, o número de versão pode "
+"ser especificado diretamente. Por outro lado, <option>-c</option> "
+"simplesmente calcula o número da nova versão mas não gera um novo pacote."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:103
+msgid ""
+"When building a <filename>.deb</filename> file, root privileges are required "
+"in order to have the correct permissions and ownerships in the resulting "
+"<filename>.deb</filename> file. This can be achieved either by running "
+"<command>&dhcommand;</command> as root or running under "
+"<citerefentry><refentrytitle>fakeroot</refentrytitle> <manvolnum>1</"
+"manvolnum></citerefentry>, as 'fakeroot &dhcommand; foo.deb'."
+msgstr ""
+"Ao compilar um ficheiro <filename>.deb</filename>, são necessários "
+"privilégios de root de modo a se ter as permissões e posses correctas no "
+"ficheiro <filename>.deb</filename> resultante. Isto pode ser conseguido ou "
+"ao correr <command>&dhcommand;</command> como root ou correr sob "
+"<citerefentry><refentrytitle>fakeroot</refentrytitle> <manvolnum>1</"
+"manvolnum></citerefentry>, como 'fakeroot &dhcommand; foo.deb'."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:113
+msgid ""
+"With <option>-k <replaceable class=\"parameter\">hook</replaceable></"
+"option>, a hook script may be specified, which is run on the unpacked binary "
+"packages just before it is repacked. If you want to write changelog entries "
+"from within the hook, use '<command>dch -a -- <replaceable "
+"class=\"parameter\">your message</replaceable></command>'. (Alternatively, "
+"do not give a changelog entry on the <command>&dhcommand;</command> command "
+"line and <command>dch</command> will be called automatically.) The hook "
+"command must be placed in quotes if it has more than one word; it is called "
+"via <command>sh -c</command>."
+msgstr ""
+"Com <option>-k <replaceable class=\"parameter\">hook</replaceable></option>, "
+"pode ser especificado um script hook, que corre nos pacotes binário "
+"desempacotados mesmo antes de serem re-empacotados. Se você desejar escrever "
+"entradas changelog de dentro do hook, use '<command>dch -a -- <replaceable "
+"class=\"parameter\">sua mensagem</replaceable></command>'. (Em alternativa, "
+"não dê uma entrada changelog na linha de comandos de <command>&dhcommand;</"
+"command> e o <command>dch</command> será chamado automaticamente.) O comando "
+"hook tem de ser colocado entre aspas se tiver mais do que uma palavra; é "
+"chamado via <command>sh -c</command>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:131
+msgid ""
+"<option>-v</option> <replaceable class=\"parameter\">new-version</"
+"replaceable>"
+msgstr ""
+"<option>-v</option> <replaceable class=\"parameter\">nova-versão</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:132
+msgid ""
+"<option>--new-version</option> <replaceable class=\"parameter\">new-version</"
+"replaceable>"
+msgstr ""
+"<option>--new-version</option> <replaceable class=\"parameter\">nova-versão</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:135
+msgid ""
+"Specifies the version number to be used for the new version. Passed to "
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>."
+msgstr ""
+"Especifica o número de versão a ser usado para a nova versão. Passado ao "
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:145
+msgid ""
+"<option>-o</option> <replaceable class=\"parameter\">old-version</"
+"replaceable>"
+msgstr ""
+"<option>-o</option> <replaceable class=\"parameter\">versão-antiga</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:146
+msgid ""
+"<option>--old-version</option> <replaceable class=\"parameter\">old-version</"
+"replaceable>"
+msgstr ""
+"<option>--old-version</option> <replaceable class=\"parameter\">versão-"
+"antiga</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:149
+msgid ""
+"Specifies the version number to be used as the old version instead of the "
+"version stored in the <filename>.deb</filename>'s <filename>control</"
+"filename> file."
+msgstr ""
+"Especifica o número de versão a usar como a versão antiga em vez da versão "
+"guardada no ficheiro <filename>control</filename> do <filename>.deb</"
+"filename>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:157
+msgid "<option>-c</option>"
+msgstr "<option>-c</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:158
+msgid "<option>--calculate-only</option>"
+msgstr "<option>--calculate-only</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:161
+msgid ""
+"Only calculate and display the new version number which would be used; do "
+"not build a new <filename>.deb</filename> file. Cannot be used in "
+"conjunction with <option>-v</option>."
+msgstr ""
+"Apenas calcula e mostra o novo número de versão que seria usado; não compila "
+"um novo ficheiro <filename>.deb</filename>. Não pode ser usado em conjunção "
+"com <option>-v</option>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:169
+msgid ""
+"<option>-s</option> <replaceable class=\"parameter\">string</replaceable>"
+msgstr ""
+"<option>-s</option> <replaceable class=\"parameter\">string</replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:170
+msgid ""
+"<option>--string</option> <replaceable class=\"parameter\">string</"
+"replaceable>"
+msgstr ""
+"<option>--string</option> <replaceable class=\"parameter\">string</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:173
+msgid ""
+"Instead of using 'LOCAL.' as the version string to append to the old version "
+"number, use <replaceable class=\"parameter\">string</replaceable> instead."
+msgstr ""
+"Em vez de usar 'LOCAL.' como a string de versão para acrescentar ao número "
+"da versão antiga, usa <replaceable class=\"parameter\">string</replaceable>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:181
+msgid ""
+"<option>-k</option> <replaceable class=\"parameter\">hook-command</"
+"replaceable>"
+msgstr ""
+"<option>-k</option> <replaceable class=\"parameter\">comando-hook</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:182
+msgid ""
+"<option>--hook</option> <replaceable class=\"parameter\">hook-command</"
+"replaceable>"
+msgstr ""
+"<option>--hook</option> <replaceable class=\"parameter\">comando-hook</"
+"replaceable>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:185
+msgid ""
+"A hook command to run after unpacking the old <filename>.deb</filename> file "
+"and modifying the <filename>changelog</filename>, and before packing up the "
+"new <filename>.deb</filename> file. Must be in quotes if it is more than "
+"one (shell) word. Only one hook command may be specified; if you want to "
+"perform more than this, you could specify 'bash' as the hook command, and "
+"you will then be given a shell to work in."
+msgstr ""
+"Um comando hook a correr após desempacotar o ficheiro <filename>.deb</"
+"filename> antigo e modificar o <filename>changelog</filename>, e antes de "
+"empacotar o novo ficheiro <filename>.deb</filename>. Tem de estar entre "
+"aspas se tiver mais do que uma palavra (shell). Apenas pode ser especificado "
+"um comando hook; se você desejar executar mais do que isto, você pode "
+"especificar 'bash' como o comando hook, e ser-lhe-à dada uma shell para "
+"trabalhar nela."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:197
+msgid "<option>-D</option>"
+msgstr "<option>-D</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:198
+msgid "<option>--debug</option>"
+msgstr "<option>--debug</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:201
+msgid ""
+"Pass <option>--debug</option> to <citerefentry> <refentrytitle>dpkg-deb</"
+"refentrytitle> <manvolnum>1</manvolnum> </citerefentry>."
+msgstr ""
+"Passa <option>--debug</option> a <citerefentry> <refentrytitle>dpkg-deb</"
+"refentrytitle> <manvolnum>1</manvolnum> </citerefentry>."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:211
+msgid "<option>-b</option>"
+msgstr "<option>-b</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:212
+msgid "<option>--force-bad-version</option>"
+msgstr "<option>--force-bad-version</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:215
+msgid ""
+"Pass <option>--force-bad-version</option> to <citerefentry> "
+"<refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>"
+msgstr ""
+"Passa <option>--force-bad-version</option> a <citerefentry> "
+"<refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:225
+msgid "<option>-h</option>"
+msgstr "<option>-h</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:226
+msgid "<option>--help</option>"
+msgstr "<option>--help</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: ../scripts/deb-reversion.dbk:229
+msgid "Display usage information."
+msgstr "Mostra informação de utilização."
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:235
+msgid "<option>-V</option>"
+msgstr "<option>-V</option>"
+
+#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: ../scripts/deb-reversion.dbk:236
+msgid "<option>--version</option>"
+msgstr "<option>--version</option>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:249
+msgid ""
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>, <citerefentry> <refentrytitle>dpkg-deb</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> "
+"<refentrytitle>fakeroot</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>"
+msgstr ""
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>, <citerefentry> <refentrytitle>dpkg-deb</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> "
+"<refentrytitle>fakeroot</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>"
+
+#. type: Content of: <refentry><refsect1><title>
+#: ../scripts/deb-reversion.dbk:265
+msgid "DISCLAIMER"
+msgstr "AVISO LEGAL"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:267
+msgid ""
+"&dhpackage; is a tool intended to help porters with modifying packages for "
+"other architectures, and to augment deb-repack, which creates modified "
+"packages with identical version numbers as the official packages. Chaos will "
+"ensue! With &dhpackage;, a proper version number can be selected, which does "
+"not obstruct the next official release but can be specifically pinned with "
+"APT or held with dpkg."
+msgstr ""
+"&dhpackage; é uma ferramenta destinada a ajudar portadores com a modificação "
+"de pacotes para outras arquitecturas, e para melhorar o deb-repack, que cria "
+"pacotes modificados com números de versão idênticos aos pacotes oficiais. E "
+"a seguir vem o caos! Com &dhpackage;, pode ser selecionado um número de "
+"versão apropriado, o qual não obstruí o próximo lançamento oficial mas pode "
+"ser especificamente preso ao APT ou segurado com o dpkg."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:276
+msgid ""
+"Please take note that &dhpackage; does not come without problems. While it "
+"works fine in most cases, it may just not in yours. Especially, please "
+"consider that it changes binary packages (only!) and hence can break strict "
+"versioned dependencies between binary packages generated from the same "
+"source."
+msgstr ""
+"Por favor note que o &dhpackage; não é isento de problemas. Apesar de "
+"funcionar bem na maioria dos casos, pode não funcionar no seu. E "
+"especialmente, por favor considere que ele modifica pacotes binários "
+"(apenas) e em consequência pode quebrar dependências estritas de versão "
+"entre pacotes binário gerados a partir da mesma fonte."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:283
+msgid ""
+"You are using this tool at your own risk and I shall not shed a tear if your "
+"gerbil goes up in flames, your microwave attacks the stereo, or the angry "
+"slamming of your fist spills your coffee into the keyboard, which sets off a "
+"chain reaction resulting in a vast amount of money transferred from your "
+"account to mine."
+msgstr ""
+"Você está a usar esta ferramenta por sua conta e risco e Eu não vou chorar "
+"se a sua mascote pegar fogo, o seu micro-ondas atacar o stereo, ou se o "
+"movimento zangado do seu punho entornar o café no teclado, e provocar uma "
+"reação em cadeia e resultar numa vasta quantidade de dinheiro transferido da "
+"sua conta para a minha."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:295
+msgid ""
+"&dhpackage; is Copyright 2004-5 by &dhusername; &dhemail; and modifications "
+"are Copyright 2006 by &dhmaintusername; &dhmaintemail;."
+msgstr ""
+"&dhpackage; tem Copyright 2004-5 de &dhusername; &dhemail; e as modificações "
+"têm Copyright 2006 de &dhmaintusername; &dhmaintemail;."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:300
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the Artistic License: <ulink>http://www.opensource.org/licenses/"
+"artistic-license.php</ulink>. On Debian systems, the complete text of the "
+"Artistic License can be found in <filename>/usr/share/common-licenses/"
+"Artistic</filename>."
+msgstr ""
+"É dada permissão par copiar, distribuir e/ou modificar este documento sob os "
+"termos da Artistic License: <ulink>http://www.opensource.org/licenses/"
+"artistic-license.php</ulink>. Em sistemas Debian, o texto completo da "
+"Artistic License pode ser encontrado em <filename>/usr/share/common-licenses/"
+"Artistic</filename>."
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:309
+msgid ""
+"This manual page was written by &dhusername; &dhemail; and modified by "
+"&dhmaintusername; &dhmaintemail;."
+msgstr ""
+"Este manual foi escrito por &dhusername; &dhemail; e modificado por "
+"&dhmaintusername; &dhmaintemail;."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:198
+msgid ""
+"deb-why-removed - shows the reason a package was removed from the archive"
+msgstr ""
+"deb-why-removed - mostra a razão de um pacote ter sido removido do arquivo"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:202
+msgid "B<deb-why-removed> [I<option>...] I<package>..."
+msgstr "B<deb-why-removed> [I<option>...] I<package>..."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:206
+msgid ""
+"This program will download the removals metadata from the archive, search "
+"and print the entries within for a source or binary package name match."
+msgstr ""
+"Este programa irá descarregar os meta dados de remoção do arquivo, procurar "
+"e escrever as entradas correspondentes ao nome de pacote fonte ou binário."
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:213
+msgid "B<-u>, B<--url> I<URL>"
+msgstr "B<-u>, B<--url> I<URL>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:215
+msgid ""
+"URL to the archive removals deb822-formatted file list. This can be either "
+"an actual URL (https://, http://, file://), an pathname or an origin name. "
+"Currently the only origin name known is B<debian>."
+msgstr ""
+"URL para a lista de ficheiros de formato deb822 de remoções do arquivo. Isto "
+"pode ser ou mesmo um URL (https://, http://, file://), um nome de caminho ou "
+"um nome de origem. Actualmente o único nome de origem conhecido é B<debian>."
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:220
+msgid "B<--no-refresh>"
+msgstr "B<--no-refresh>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:222
+msgid ""
+"Do not refresh the cached removals file even if there is a newer version in "
+"the archive."
+msgstr ""
+"Não refresca o ficheiro de remoções em cache mesmo que exista uma versão "
+"mais recente no arquivo."
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:225
+msgid "B<-h>, B<-?>, B<--help>"
+msgstr "B<-h>, B<-?>, B<--help>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:227 ../scripts/sadt.pod:66
+msgid "Show a help message and exit."
+msgstr "Mostra uma mensagem de ajuda e termina."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:231
+msgid "Show the program version."
+msgstr "Mostra a versão do programa."
+
+#. type: SH
+#: ../scripts/deb-why-removed.pl:235 ../scripts/debsnap.1:130
+#: ../scripts/diff2patches.1:28
+#, no-wrap
+msgid "FILES"
+msgstr "FICHEIROS"
+
+#. type: =item
+#: ../scripts/deb-why-removed.pl:239
+msgid "I<cachedir>B</devscripts/deb-why-removed/>"
+msgstr "I<cachedir>B</devscripts/deb-why-removed/>"
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:241
+msgid ""
+"This directory contains the cached removal files downloaded from the "
+"archive. I<cachedir> will be either B<$XDG_CACHE_HOME> or if that is not "
+"defined B<$HOME/.cache/>."
+msgstr ""
+"Este directório contém a cache de ficheiros de remoção descarregados do "
+"arquivo. I<cachedir> será ou B<$XDG_CACHE_HOME> ou se isso não estiver "
+"definido, B<$HOME/.cache/>."
+
+#. type: textblock
+#: ../scripts/deb-why-removed.pl:249
+msgid "L<https://ftp-master.debian.org/#removed>"
+msgstr "L<https://ftp-master.debian.org/#removed>"
+
+#. type: TH
+#: ../scripts/debrsign.1:1
+#, no-wrap
+msgid "DEBRSIGN"
+msgstr "DEBRSIGN"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:4
+msgid "debrsign - remotely sign a Debian .changes and .dsc file pair using SSH"
+msgstr ""
+"debrsign - assina remotamente um par de ficheiros .changes e .dsc Debian "
+"usando SSH"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:7
+msgid ""
+"B<debrsign> [I<options>] [I<user>B<@>]I<remotehost> [I<changes-file>|I<dsc-"
+"file>]"
+msgstr ""
+"B<debrsign> [I<options>] [I<user>B<@>]I<remotehost> [I<changes-file>|I<dsc-"
+"file>]"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:15
+msgid ""
+"B<debrsign> takes either an unsigned I<.dsc> file or an unsigned I<.changes> "
+"file and the associated unsigned I<.dsc> file (found by replacing the "
+"architecture name and I<.changes> by I<.dsc>) if it appears in the I<."
+"changes> file and signs them by copying them to the remote machine using "
+"B<ssh>(1) and remotely running B<debsign>(1) on that machine. All options "
+"not listed below are passed to the B<debsign> program on the remote machine."
+msgstr ""
+"B<debrsign> recebe ou um ficheiro I<.dsc> não assinado ou um ficheiro I<."
+"changes> não assinado e o ficheiro I<.dsc> associado não assinado "
+"(encontrado ao substituir o nome de arquitectura e I<.changes> por I<.dsc>) "
+"se ele aparecer no ficheiros I<.changes> e assina-os ao copia-los para a "
+"máquina remota usando B<ssh>(1) e remotamente correndo B<debsign>(1) nessa "
+"máquina. Todas as opções não listadas em baixo são passadas para o programa "
+"B<debsign> na máquina remota."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:19
+msgid ""
+"If a I<.changes> or I<.dsc> file is specified, it is signed, otherwise, "
+"I<debian/changelog> is parsed to determine the name of the I<.changes> file "
+"to look for in the parent directory."
+msgstr ""
+"Se um ficheiro I<.changes> ou I<.dsc> for especificado, é assinado, caso "
+"contrário é analisado I<debian/changelog> para determinar o nome do ficheiro "
+"I<.changes> a procurar no directório pai."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:25
+msgid ""
+"This utility is useful if a developer must build a package on one machine "
+"where it is unsafe to sign it; they need then only transfer the small I<."
+"dsc> and I<.changes> files to a safe machine and then use the B<debsign> "
+"program to sign them before transferring them back. This program automates "
+"this process."
+msgstr ""
+"Este utilitário é útil se um desenvolvedor tiver de compilar um pacote numa "
+"máquina onde não é seguro assina-lo; ele apenas precisa de transferir os "
+"pequenos ficheiros I<.dsc> e I<.changes> para uma máquina segura e depois "
+"usar o programa B<debsign> para os assinar antes de os transferir de volta. "
+"Este programa automatiza este processo."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:30
+msgid ""
+"To do it the other way round, that is to connect to an unsafe machine to "
+"download the I<.dsc> and I<.changes> files, to sign them locally and then to "
+"transfer them back, see the B<debsign>(1) program, which can do this task."
+msgstr ""
+"Para o fazer da outra maneira, isto é, ligar a uma máquina não segura para "
+"descarregar os ficheiros I<.dsc> e I<.changes>, para assina-los localmente e "
+"depois transferi-los de volta, veja o programa B<debsign>(1), o qual pode "
+"fazer esta tarefa."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:35 ../scripts/debsign.1:72
+msgid ""
+"Look for a source-only I<.changes> file instead of a binary-build I<."
+"changes> file."
+msgstr ""
+"Procura por um ficheiro I<.changes> apenas-fonte em vez de um ficheiro I<."
+"changes> de binário compilado."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:47
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debrsign> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by B<dpkg-"
+"cross>."
+msgstr ""
+"Modo I<.changes> Multiarch. Isto significa que o B<debrsign> deve usar o "
+"ficheiro mais recente com o padrão de nome I<package_version_*+*.changes> "
+"como o ficheiro I<.changes>, permitindo os ficheiros I<.changes> produzidos "
+"pelo B<dpkg-cross>."
+
+#. type: TP
+#: ../scripts/debrsign.1:47
+#, no-wrap
+msgid "B<--path >I<remote-path>"
+msgstr "B<--path >I<remote-path>"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:50
+msgid "Specify a path to the GPG binary on the remote host."
+msgstr "Especifica um caminho para o binário GPG na máquina remota."
+
+#. type: TP
+#: ../scripts/debrsign.1:53
+#, no-wrap
+msgid "B<Other options>"
+msgstr "B<Outras opções>"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:57
+msgid "All other options are passed on to B<debsign> on the remote machine."
+msgstr "Todas as outras opções são passadas ao B<debsign> na máquina remota."
+
+#. type: TP
+#: ../scripts/debrsign.1:63
+#, no-wrap
+msgid "B<DEBRSIGN_PGP_PATH>"
+msgstr "B<DEBRSIGN_PGP_PATH>"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:66
+msgid "Equivalent to passing B<--path> on the command line (see above.)"
+msgstr "O equivalente a passar B<--path> na linha de comandos (veja em cima.)"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:70
+msgid "B<debsign>(1), B<dpkg-architecture>(1), B<ssh>(1)"
+msgstr "B<debsign>(1), B<dpkg-architecture>(1), B<ssh>(1)"
+
+#. type: Plain text
+#: ../scripts/debrsign.1:72 ../scripts/debsign.1:146
+msgid ""
+"This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt> and is "
+"copyright under the GPL, version 2 or later."
+msgstr ""
+"Este programa foi escrito por Julian Gilbey E<lt>jdg@debian.orgE<gt> e tem "
+"copyright sob GPL, versão 2 ou posterior."
+
+#. type: TH
+#: ../scripts/debsign.1:1
+#, no-wrap
+msgid "DEBSIGN"
+msgstr "DEBSIGN"
+
+#. type: Plain text
+#: ../scripts/debsign.1:4
+msgid "debsign - sign a Debian .changes and .dsc file pair using GPG"
+msgstr "debsign - assina um par de ficheiro .changes e .dsc Debian usando GPG"
+
+#. type: Plain text
+#: ../scripts/debsign.1:6
+msgid ""
+"B<debsign> [I<options>] [I<changes-file>|I<dsc-file>|I<commands-file> ...]"
+msgstr ""
+"B<debsign> [I<options>] [I<changes-file>|I<dsc-file>|I<commands-file> ...]"
+
+#. type: Plain text
+#: ../scripts/debsign.1:14
+msgid ""
+"B<debsign> mimics the signing aspects (and bugs) of B<dpkg-"
+"buildpackage>(1). It takes a I<.dsc>, I<.buildinfo>, or I<.changes> file "
+"and signs it, and any child I<.dsc>, I<.buildinfo>, or I<.changes> files "
+"directly or indirectly referenced by it, using the GNU Privacy Guard. It is "
+"careful to calculate the size and checksums of any newly signed child files "
+"and replace the original values in the parent file."
+msgstr ""
+"B<debsign> imita os aspectos de assinatura (e os bugs) do B<dpkg-"
+"buildpackage>(1). Recebe um ficheiro I<.dsc>, I<.buildinfo>, ou I<.changes> "
+"e assina-o, e quaisquer ficheiros I<.dsc>, I<.buildinfo>, ou I<.changes> "
+"filhos direta ou indiretamente referenciados por ele, usando o GNU Privacy "
+"Guard. É cuidadoso a calcular o tamanho e sumários de verificação para "
+"quaisquer ficheiros filhos recentemente assinados e substitui os valores "
+"originais no ficheiro pai."
+
+#. type: Plain text
+#: ../scripts/debsign.1:18
+msgid ""
+"If no file is specified, I<debian/changelog> is parsed to determine the name "
+"of the I<.changes> file to look for in the parent directory."
+msgstr ""
+"Se nenhum ficheiro for especificado, é analisado I<debian/changelog> para "
+"determinar o nome do ficheiro I<.changes> a procurar no directório pai."
+
+#. type: Plain text
+#: ../scripts/debsign.1:22
+msgid ""
+"If a I<.commands> file is specified it is first validated (see the details "
+"at I<ftp://ftp.upload.debian.org/pub/UploadQueue/README>), and the name "
+"specified in the Uploader field is used for signing."
+msgstr ""
+"Se um ficheiro I<.commands> for especificado é primeiro validado (veja os "
+"detalhes em I<ftp://ftp.upload.debian.org/pub/UploadQueue/README>), e o nome "
+"especificado no campo Uploader é usado para assinatura."
+
+#. type: Plain text
+#: ../scripts/debsign.1:36
+msgid ""
+"This utility is useful if a developer must build a package on one machine "
+"where it is unsafe to sign it; they need then only transfer the small I<."
+"dsc>, I<.buildinfo> and I<.changes> files to a safe machine and then use the "
+"B<debsign> program to sign them before transferring them back. This process "
+"can be automated in two ways. If the files to be signed live on the "
+"B<remote> machine, the B<-r> option may be used to copy them to the local "
+"machine and back again after signing. If the files live on the B<local> "
+"machine, then they may be transferred to the remote machine for signing "
+"using B<debrsign>(1). However note that it is probably safer to have your "
+"trusted signing machine use B<debsign> to connect to the untrusted non-"
+"signing machine, rather than using B<debrsign> to make the connection in the "
+"reverse direction."
+msgstr ""
+"Este utilitário é útil se um desenvolvedor tiver de compilar um pacote numa "
+"máquina onde não é seguro assina-lo; apenas precisa de os pequenos ficheiros "
+"I<.dsc>, I<.buildinfo> e I<.changes> para uma máquina segura e depois usar o "
+"programa B<debsign> para os assinar antes de os transferir de volta. Este "
+"processo pode ser automatizado de duas maneiras. Se os ficheiros a serem "
+"assinados vivem na máquina B<remota>, pode ser usada a opção B<-r> para os "
+"copiar para a máquina local e de volta após a assinatura. Se os ficheiros "
+"vivem na máquina B<local>, então eles podem ser transferidos para a máquina "
+"remota para serem assinados usando o B<debrsign>(1). No entanto, note que é "
+"provavelmente mais seguro a ter a sua máquina de confiança para assinaturas "
+"a usar o B<debsign> a ligar à máquina não segura onde não se faz "
+"assinaturas, em vez de usar o B<debrsign> para fazer a ligação na direcção "
+"inversa."
+
+#. type: Plain text
+#: ../scripts/debsign.1:39
+msgid ""
+"This program can take default settings from the B<devscripts> configuration "
+"files, as described below."
+msgstr ""
+"Este programa pode obter definições predefinidas a partir de ficheiro de "
+"configuração do B<devscripts>, como descrito abaixo."
+
+#. type: TP
+#: ../scripts/debsign.1:40
+#, no-wrap
+msgid "B<-r >[I<username>B<@>]I<remotehost>"
+msgstr "B<-r >[I<username>B<@>]I<remotehost>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:48
+msgid ""
+"The files to be signed live on the specified remote host. In this case, a "
+"I<.dsc>, I<.buildinfo> or I<.changes> file must be explicitly named, with an "
+"absolute directory or one relative to the remote home directory. B<scp> "
+"will be used for the copying. The [I<username>B<@>]I<remotehost>B<:"
+">I<filename> syntax is permitted as an alternative. Wildcards (B<*> etc.) "
+"are allowed."
+msgstr ""
+"Os ficheiros a serem assinados vivem na máquina remota especificada. Neste "
+"caso, um ficheiro I<.dsc>, I<.buildinfo> ou I<.changes> tem de ser "
+"explicitamente nomeado, com um directório absoluto ou um relativo ao "
+"directório home remoto. O B<scp> será usado para a cópia. É permitida a "
+"sintaxe [I<username>B<@>]I<remotehost>B<:>I<filename> como alternativa. São "
+"permitidos wildcards (B<*> etc.)."
+
+#. type: TP
+#: ../scripts/debsign.1:48
+#, no-wrap
+msgid "B<-p>I<progname>"
+msgstr "B<-p>I<progname>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:52
+msgid ""
+"When B<debsign> needs to execute GPG to sign it will run I<progname> "
+"(searching the B<PATH> if necessary), instead of B<gpg>."
+msgstr ""
+"Quando o B<debsign> precisa de executar GPG para assinar irá correr "
+"I<progname> (procurando a B<PATH> se necessário), em vez de B<gpg>."
+
+#. type: TP
+#: ../scripts/debsign.1:52
+#, no-wrap
+msgid "B<-m>I<maintainer>"
+msgstr "B<-m>I<maintainer>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:61
+msgid ""
+"Specify the maintainer name to be used for signing. (See B<dpkg-"
+"buildpackage>(1) for more information about the differences between B<-m>, "
+"B<-e> and B<-k> when building packages; B<debsign> makes no use of these "
+"distinctions except with respect to the precedence of the various options. "
+"These multiple options are provided so that the program will behave as "
+"expected when called by B<debuild>(1).)"
+msgstr ""
+"Especifica o nome do maintainer a ser usado para assinar. (Veja B<dpkg-"
+"buildpackage>(1) para mais informação sobre as diferenças entre B<-m>, B<-e> "
+"e B<-k> ao compilar pacotes. O B<debsign> não faz uso destas distinções "
+"excepto com respeito à precedência das várias opções. Estas múltiplas opções "
+"são disponibilizadas para que o programa se comporte como esperado quando "
+"chamado pelo B<debuild>(1).)"
+
+#. type: TP
+#: ../scripts/debsign.1:61
+#, no-wrap
+msgid "B<-e>I<maintainer>"
+msgstr "B<-e>I<maintainer>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:64
+msgid "Same as B<-m> but takes precedence over it."
+msgstr "O mesmo que B<-m> mas toma precedência sobre ele."
+
+#. type: TP
+#: ../scripts/debsign.1:64
+#, no-wrap
+msgid "B<-k>I<keyid>"
+msgstr "B<-k>I<keyid>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:68
+msgid ""
+"Specify the key ID to be used for signing; overrides any B<-m> and B<-e> "
+"options."
+msgstr ""
+"Especifica o ID de chave a ser usada para assinaturas; sobrepõe quaisquer "
+"opções B<-m> e B<-e>."
+
+#. type: Plain text
+#: ../scripts/debsign.1:84
+msgid ""
+"Multiarch I<.changes> mode: This signifies that B<debsign> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"I<.changes> file, allowing for the I<.changes> files produced by B<dpkg-"
+"cross>."
+msgstr ""
+"Modo I<.changes> Multiarch. Isto significa que o B<debsign> deve usar o "
+"ficheiro mais recente com o padrão de nome I<package_version_*+*.changes> "
+"como o ficheiro I<.changes>, permitindo os ficheiros I<.changes> produzidos "
+"pelo B<dpkg-cross>."
+
+#. type: TP
+#: ../scripts/debsign.1:84
+#, no-wrap
+msgid "B<--re-sign>, B<--no-re-sign>"
+msgstr "B<--re-sign>, B<--no-re-sign>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:90
+msgid ""
+"Recreate signature, respectively use the existing signature, if the file has "
+"been signed already. If neither option is given and an already signed file "
+"is found the user is asked if he or she likes to use the current signature."
+msgstr ""
+"Recria a assinatura, respetivamente usa a assinatura existente, se o "
+"ficheiro já estiver assinado. Se nenhuma opção for dada e for encontrado um "
+"ficheiro já assinado, é perguntado ao utilizador se deseja usar a assinatura "
+"actual."
+
+#. type: TP
+#: ../scripts/debsign.1:90
+#, no-wrap
+msgid "B<--debs-dir> I<DIR>"
+msgstr "B<--debs-dir> I<DIR>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:95
+msgid ""
+"Look for the files to be signed in directory I<DIR> instead of the parent of "
+"the source directory. This should either be an absolute path or relative to "
+"the top of the source directory."
+msgstr ""
+"Procura os ficheiros a serem assinados no directório I<DIR> em vez de no pai "
+"do directório fonte. Isto te de ser ou um caminho absoluto ou relativo ao "
+"topo do directório fonte."
+
+#. type: TP
+#: ../scripts/debsign.1:111
+#, no-wrap
+msgid "B<DEBSIGN_PROGRAM>"
+msgstr "B<DEBSIGN_PROGRAM>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:114
+msgid "Setting this is equivalent to giving a B<-p> option."
+msgstr "Definir isto é equivalente a fornecer a opção B<-p>."
+
+#. type: TP
+#: ../scripts/debsign.1:114
+#, no-wrap
+msgid "B<DEBSIGN_MAINT>"
+msgstr "B<DEBSIGN_MAINT>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:117
+msgid "This is the B<-m> option."
+msgstr "Isto é a opção B<-m>."
+
+#. type: Plain text
+#: ../scripts/debsign.1:120
+msgid "And this is the B<-k> option."
+msgstr "E isto é a opção B<-k>."
+
+#. type: TP
+#: ../scripts/debsign.1:120
+#, no-wrap
+msgid "B<DEBSIGN_ALWAYS_RESIGN>"
+msgstr "B<DEBSIGN_ALWAYS_RESIGN>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:123
+msgid ""
+"Always re-sign files even if they are already signed, without prompting."
+msgstr ""
+"Re-assina sempre os ficheiros mesmo que estes já estejam assinados. sem "
+"avisar."
+
+#. type: Plain text
+#: ../scripts/debsign.1:132
+msgid ""
+"This specifies the directory in which to look for the files to be signed, "
+"and is either an absolute path or relative to the top of the source tree. "
+"This corresponds to the B<--debs-dir> command line option. This directive "
+"could be used, for example, if you always use B<pbuilder> or B<svn-"
+"buildpackage> to build your packages. Note that it also affects "
+"B<debrelease>(1) in the same way, hence the strange name of the option."
+msgstr ""
+"Isto especifica o directório onde procurar pelos ficheiros a serem "
+"assinados, e é ou um caminho absoluto ou relativo ao topo da árvore fonte. "
+"Isto corresponde à opção de linha de comandos B<--debs-dir>. Esta directiva "
+"pode ser usada, por exemplo, se você usar sempre B<pbuilder> ou B<svn-"
+"buildpackage> para compilar os seus pacotes. Note que também afecta "
+"B<debrelease>(1) do mesmo modo, daqui o nome estranho da opção."
+
+#. type: Plain text
+#: ../scripts/debsign.1:144
+msgid ""
+"B<debrsign>(1), B<debuild>(1), B<dpkg-architecture>(1), B<dpkg-"
+"buildpackage>(1), B<gpg>(1), B<gpg2>(1), B<md5sum>(1), B<sha1sum>(1), "
+"B<sha256sum>(1), B<scp>(1), B<devscripts.conf>(5)"
+msgstr ""
+"B<debrsign>(1), B<debuild>(1), B<dpkg-architecture>(1), B<dpkg-"
+"buildpackage>(1), B<gpg>(1), B<gpg2>(1), B<md5sum>(1), B<sha1sum>(1), "
+"B<sha256sum>(1), B<scp>(1), B<devscripts.conf>(5)"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "DEBSNAP"
+msgstr "DEBSNAP"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "July 3, 2010"
+msgstr "Julho 3, 2010"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "Debian devscripts"
+msgstr "Debian devscripts"
+
+#. type: TH
+#: ../scripts/debsnap.1:2
+#, no-wrap
+msgid "DebSnap User Manual"
+msgstr "Manual de Utilizador do DebSnap"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:5
+msgid "debsnap - retrieve old snapshots of Debian packages"
+msgstr "debsnap - obtém instantâneos antigos de pacotes Debian"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:9
+msgid "B<debsnap> [I<options>]I< package >[I<version>]"
+msgstr "B<debsnap> [I<options>]I< package >[I<version>]"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:12
+msgid "B<debsnap> [B<-h> | B<--help>]B< >[B<--version>]"
+msgstr "B<debsnap> [B<-h> | B<--help>]B< >[B<--version>]"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:17
+msgid ""
+"B<debsnap> is a tool to help with retrieving snapshots of old packages from "
+"a daily archive repository."
+msgstr ""
+"B<debsnap> é uma ferramenta para o ajudar com a obtenção de instantâneos de "
+"pacotes antigos de um repositório de arquivos diário."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:20
+msgid ""
+"The only publicly available snapshot archive is currently located at "
+"I<https://snapshot.debian.org>"
+msgstr ""
+"O único arquivo de instantâneos publicamente disponíveis está localizado "
+"actualmente em I<https://snapshot.debian.org>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:24
+msgid ""
+"By default, debsnap will download all the available versions for I<package> "
+"that are found in the snapshot archive. If a I<version> is specified, only "
+"that particular version will be downloaded, if available."
+msgstr ""
+"Por predefinição, o debsnap irá descarregar todas as versões disponíveis "
+"para I<package> que existem no arquivo de instantâneos. Se for especificada "
+"uma I<version>, apenas essa versão particular será descarregada, caso "
+"disponível."
+
+#. type: TP
+#: ../scripts/debsnap.1:29
+#, no-wrap
+msgid "B<-d>I< destination>,I< >B<--destdir>I< destination>"
+msgstr "B<-d>I< destination>,I< >B<--destdir>I< destination>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:32
+msgid "Directory to place retrieved packages."
+msgstr "Directório onde colocar os pacotes obtidos."
+
+#. type: =item
+#: ../scripts/debsnap.1:33 ../scripts/tagpending.pl:110
+#, no-wrap
+msgid "B<-f>, B<--force>"
+msgstr "B<-f>, B<--force>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:41
+msgid ""
+"Force writing into an existing I<destination>. By default B<debsnap> will "
+"insist the destination directory does not exist yet unless it is explicitly "
+"specified to be 'B<.>' (the current working directory). This is to avoid "
+"files being accidentally overwritten by what is fetched from the archive and "
+"to provide a guarantee for other scripts that only the files fetched will be "
+"present there upon completion."
+msgstr ""
+"Força escrita num I<destino> existente. Por predefinição o B<debsnap> irá "
+"insistir que o directório de destino não exista a menos que seja "
+"explicitamente especificado para ser 'B<.>' (o directório de trabalho "
+"actual). Isto é para evitar que ficheiros sejam sobrepostos acidentalmente "
+"pelo que é obtido do arquivo e para garantir a outros scripts que apenas os "
+"ficheiros obtidos estarão presentes lá após conclusão."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:46
+msgid ""
+"Report on the B<debsnap> configuration being used and progress during the "
+"download operation. Please always use this option when reporting bugs."
+msgstr ""
+"Reporta sobre a configuração do B<debsnap> a ser usada e o progresso durante "
+"a operação de descarga. Por favor use sempre esta opção ao reportar bugs."
+
+#. type: TP
+#: ../scripts/debsnap.1:47
+#, no-wrap
+msgid "B<-l>, B<--list>"
+msgstr "B<-l>, B<--list>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:50
+msgid "Don't download but just list versions."
+msgstr "Não descarrega mas apenas lista as versões."
+
+#. type: TP
+#: ../scripts/debsnap.1:51
+#, no-wrap
+msgid "B<--binary>"
+msgstr "B<--binary>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:54
+msgid "Download binary packages instead of source packages."
+msgstr "Descarrega pacotes binários em vez de pacotes fonte."
+
+#. type: TP
+#: ../scripts/debsnap.1:55
+#, no-wrap
+msgid "B<-a>, B<--architecture>"
+msgstr "B<-a>, B<--architecture>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:60
+msgid ""
+"Specify architecture of downloaded binary packages. Implies B<--binary>. "
+"This can be given multiple times in order to download binary packages for "
+"multiple architectures."
+msgstr ""
+"Especifica a arquitectura dos pacotes binário descarregados. Implica B<--"
+"binary>. Isto pode ser dado várias vezes de modo a descarregar pacotes "
+"binário para várias arquitecturas."
+
+#. type: TP
+#: ../scripts/debsnap.1:61
+#, no-wrap
+msgid "B<--first>"
+msgstr "B<--first>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:66
+msgid ""
+"Specify the minimum version of a package which will be downloaded. Any "
+"versions which compare larger than this, according to B<dpkg>, will be "
+"considered for download. May be used in combination with B<--last>."
+msgstr ""
+"Especifica a versão mínima de um pacote que será descarregada. Quaisquer "
+"versões que comparem maior que isto, de acordo com o B<dpkg>, serão "
+"consideradas para descarga. Pode ser usada em combinação com B<--last>."
+
+#. type: TP
+#: ../scripts/debsnap.1:67
+#, no-wrap
+msgid "B<--last>"
+msgstr "B<--last>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:72
+msgid ""
+"Specify the maximum version of a package which will be downloaded. Any "
+"package versions which compare less than this, according to B<dpkg>, will be "
+"considered for download. May be used in combination with B<--first>."
+msgstr ""
+"Especifica a versão máxima de um pacote que será descarregada. Quaisquer "
+"versões de pacote que comparem menor que isto, de acordo com o B<dpkg>, "
+"serão consideradas para descarga. Pode ser usada em combinação com B<--"
+"first>."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:76
+msgid "Show a summary of these options."
+msgstr "Mostra um resumo destas opções."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:80
+msgid "Show the version of B<debsnap>."
+msgstr "Mostra a versão de B<debsnap>."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:85
+msgid ""
+"B<debsnap> may also be configured through the use of the following options "
+"in the devscripts configuration files:"
+msgstr ""
+"O B<debsnap> também pode ser configurado através do uso das seguintes opções "
+"nos ficheiros de configuração do devscripts:"
+
+#. type: TP
+#: ../scripts/debsnap.1:86
+#, no-wrap
+msgid "B<DEBSNAP_VERBOSE>"
+msgstr "B<DEBSNAP_VERBOSE>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:89
+msgid "Same as the command line option B<--verbose>. Set to I<yes> to enable."
+msgstr ""
+"O mesmo que a opção de linha de comandos B<--verbose>. Definir para I<yes> "
+"para activar."
+
+#. type: TP
+#: ../scripts/debsnap.1:90
+#, no-wrap
+msgid "B<DEBSNAP_DESTDIR>"
+msgstr "B<DEBSNAP_DESTDIR>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:95
+msgid ""
+"Set a default path for the destination directory. If unset I<./source-"
+"E<lt>package_nameE<gt>> will be used. The command line option B<--destdir> "
+"will override this."
+msgstr ""
+"Define um caminho predefinido para o directório de destino. Se não definido, "
+"será usado I<./source-E<lt>nome_pacoteE<gt>>. A opção de linha de comandos "
+"B<--destdir> irá sobrepor isto."
+
+#. type: TP
+#: ../scripts/debsnap.1:96
+#, no-wrap
+msgid "B<DEBSNAP_BASE_URL>"
+msgstr "B<DEBSNAP_BASE_URL>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:99
+msgid "The base url for the snapshots archive."
+msgstr "O url base para o arquivo de instantâneos."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:101
+msgid "If unset this defaults to I<https://snapshot.debian.org>"
+msgstr ""
+"Se não definido, isto é predefinido para I<https://snapshot.debian.org>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:108
+msgid ""
+"B<debsnap> will return an exit status of 0 if all operations succeeded, 1 if "
+"a fatal error occurred, and 2 if some packages failed to be downloaded but "
+"operations otherwise succeeded as expected. In some cases packages may fail "
+"to be downloaded because they are no longer available on the snapshot "
+"mirror, so any caller should expect this may occur in normal use."
+msgstr ""
+"B<debsnap> irá retornar um estado de saída de 0 se todas as operações "
+"tiverem sucesso, 1 se ocorrer um erro fatal, e 2 se alguns pacotes falharam "
+"ao ser descarregados mas fora isso as operações tiveram sucesso como "
+"esperado. Em alguns casos os pacotes podem falhar ao serem descarregados "
+"porque já não estão mais disponíveis no espelho de instantâneos, assim "
+"qualquer chamador deve esperar que isto possa ocorrer em utilização normal."
+
+#. type: TP
+#: ../scripts/debsnap.1:110
+#, no-wrap
+msgid "B<debsnap -a amd64 xterm 256-1>"
+msgstr "B<debsnap -a amd64 xterm 256-1>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:113
+msgid ""
+"Download the binary package of a specific xterm version for amd64 "
+"architecture."
+msgstr ""
+"Descarrega o pacote binário de uma versão específica do xterm para a "
+"arquitectura amd64."
+
+#. type: TP
+#: ../scripts/debsnap.1:113
+#, no-wrap
+msgid "B<debsnap -a armel xterm>"
+msgstr "B<debsnap -a armel xterm>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:116
+msgid ""
+"Download binary packages for all versions of xterm for armel architecture."
+msgstr ""
+"Descarrega pacotes binários para todas as versões do xterm para a "
+"arquitectura armel."
+
+#. type: TP
+#: ../scripts/debsnap.1:116
+#, no-wrap
+msgid "B<debsnap --binary xterm 256-1>"
+msgstr "B<debsnap --binary xterm 256-1>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:119
+msgid ""
+"Download binary packages for a specific xterm version but for all "
+"architectures."
+msgstr ""
+"Descarrega pacotes binários de uma versão específica do xterm para todas as "
+"arquitecturas."
+
+#. type: TP
+#: ../scripts/debsnap.1:119
+#, no-wrap
+msgid "B<debsnap --binary xterm>"
+msgstr "B<debsnap --binary xterm>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:122
+msgid ""
+"Download binary packages for all versions of xterm for all architectures."
+msgstr ""
+"Descarrega pacotes binários de todas as versões do xterm para todas as "
+"arquitecturas."
+
+#. type: TP
+#: ../scripts/debsnap.1:122
+#, no-wrap
+msgid "B<debsnap -v --first 347-1 --last 348-2 xterm>"
+msgstr "B<debsnap -v --first 347-1 --last 348-2 xterm>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:126
+msgid ""
+"Download source packages for local architecture of xterm, between 347-1 and "
+"348-2 revisions, inclusive, showing the progress when doing it."
+msgstr ""
+"Descarrega pacotes fonte do xterm para a arquitectura local, entre revisões "
+"347-1 e 348-2, inclusive, mostrando o progresso enquanto o faz."
+
+#. type: TP
+#: ../scripts/debsnap.1:126
+#, no-wrap
+msgid "B<aptitude search '~i' -F '%p %V' | while read pkg ver; do debsnap -a $(dpkg-architecture -qDEB_HOST_ARCH) -a all $pkg $ver; done>"
+msgstr "B<aptitude search '~i' -F '%p %V' | while read pkg ver; do debsnap -a $(dpkg-architecture -qDEB_HOST_ARCH) -a all $pkg $ver; done>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:129
+msgid ""
+"Download binary packages of all packages that are installed on the system."
+msgstr ""
+"Descarrega pacotes binários de todos os pacotes que estão instalados no "
+"sistema."
+
+#. type: TP
+#: ../scripts/debsnap.1:131
+#, no-wrap
+msgid "I</etc/devscripts.conf>"
+msgstr "I</etc/devscripts.conf>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:134
+msgid ""
+"Global devscripts configuration options. Will override hardcoded defaults."
+msgstr ""
+"Opções de configuração devscripts globais. Irão sobrepor as predefinições "
+"intrínsecas."
+
+#. type: TP
+#: ../scripts/debsnap.1:134
+#, no-wrap
+msgid "I<~/.devscripts>"
+msgstr "I<~/.devscripts>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:142
+msgid "B<devscripts>(1), B<devscripts.conf>(5), B<git-debimport>(1)"
+msgstr "B<devscripts>(1), B<devscripts.conf>(5), B<git-debimport>(1)"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:145
+msgid "David Paleino E<lt>dapal@debian.orgE<gt>"
+msgstr "David Paleino E<lt>dapal@debian.orgE<gt>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:148
+msgid "Copyright \\(co 2010 David Paleino"
+msgstr "Copyright \\(co 2010 David Paleino"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:152
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU General Public License, Version 3 or (at your option) "
+"any later version published by the Free Software Foundation."
+msgstr ""
+"É dada permissão para copiar, distribuir e/ou modificar este documento sob "
+"os termos da GNU General Public License, Versão 3 ou (por sua opção) "
+"qualquer outra versão posterior publicada pela Free Software Foundation."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:155
+msgid ""
+"On Debian systems, the complete text of the GNU General Public License can "
+"be found in I</usr/share/common-licenses/GPL>."
+msgstr ""
+"Em sistemas Debian, o texto completo da GNU General Public License pode ser "
+"encontrado em I</usr/share/common-licenses/GPL>."
+
+#. type: SS
+#: ../scripts/debsnap.1:157
+#, no-wrap
+msgid "Reporting bugs"
+msgstr "Reportar bugs"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:160
+msgid ""
+"The program is part of the devscripts package. Please report bugs using "
+"`B<reportbug devscripts>`"
+msgstr ""
+"O programa faz parte do pacote devscripts. Por favor reporte bugs usando "
+"`B<reportbug devscripts>`"
+
+#. type: TH
+#: ../scripts/debuild.1:1
+#, no-wrap
+msgid "DEBUILD"
+msgstr "DEBUILD"
+
+#. type: Plain text
+#: ../scripts/debuild.1:4
+msgid "debuild - build a Debian package"
+msgstr "debuild - compila um pacote Debian"
+
+#. type: Plain text
+#: ../scripts/debuild.1:7
+msgid ""
+"B<debuild> [I<debuild options>] [I<dpkg-buildpackage options>] [B<--lintian-"
+"opts> I<lintian options>]"
+msgstr ""
+"B<debuild> [I<debuild options>] [I<dpkg-buildpackage options>] [B<--lintian-"
+"opts> I<lintian options>]"
+
+#. type: Plain text
+#: ../scripts/debuild.1:10
+msgid ""
+"B<debuild> [I<debuild options>] -- B<binary>|B<binary-arch>|B<binary-indep>|"
+"B<clean> ..."
+msgstr ""
+"B<debuild> [I<debuild options>] -- B<binary>|B<binary-arch>|B<binary-indep>|"
+"B<clean> ..."
+
+#. type: Plain text
+#: ../scripts/debuild.1:31
+msgid ""
+"B<debuild> creates all the files necessary for uploading a Debian package. "
+"It first runs B<dpkg-buildpackage>, then runs B<lintian> on the I<.changes> "
+"file created (assuming that B<lintian> is installed), and finally signs the "
+"appropriate files (using B<debsign>(1) to do this instead of B<dpkg-"
+"buildpackage>(1) itself; all relevant key-signing options are passed on). "
+"Signing will be skipped if the distribution is I<UNRELEASED>, unless B<dpkg-"
+"buildpackage>'s B<--force-sign> option is used. Parameters can be passed to "
+"B<dpkg-buildpackage> and B<lintian>, where the parameters to the latter are "
+"indicated with the B<--lintian-opts> option. The allowable options in this "
+"case are B<--lintian> and B<--no-lintian> to force or skip the B<lintian> "
+"step, respectively. The default is to run B<lintian>. There are also "
+"various options available for setting and preserving environment variables, "
+"as described below in the Environment Variables section. In this method of "
+"running B<debuild>, we also save a build log to the file I<../"
+"E<lt>packageE<gt>_E<lt>versionE<gt>_E<lt>archE<gt>.build>."
+msgstr ""
+"B<debuild> cria todos os ficheiros necessários para enviar um pacote Debian. "
+"Primeiro corre B<dpkg-buildpackage>, depois corre B<lintian> no ficheiro I<."
+"changes> criado (assumindo que B<lintian> está instalado), e finalmente "
+"assina os ficheiros apropriados (usando B<debsign>(1) para fazer isto em vez "
+"do próprio B<dpkg-buildpackage>(1); todas as opções relevantes de chave-"
+"assinatura são passadas). O assinar será saltado se a distribuição for "
+"I<UNRELEASED>, a menos que seja usada a opção B<--force-sign> do B<dpkg-"
+"buildpackage>. Os parâmetros podem ser passados ao B<dpkg-buildpackage> e ao "
+"B<lintian>, onde os parâmetros para o último são indicados com a opção B<--"
+"lintian-opts>. As opções permitidas neste caso são B<--lintian> e B<--no-"
+"lintian> para forçar ou saltar o passo do B<lintian>, respetivamente. A "
+"predefinição é correr o B<lintian>. Há também várias opções disponíveis para "
+"definir e preservar variáveis de ambiente, como descrito em baixo na secção "
+"Variáveis de Ambiente. Neste método de correr o B<debuild>, nós também "
+"salvamos um relatório da compilação no ficheiro I<../"
+"E<lt>packageE<gt>_E<lt>versionE<gt>_E<lt>archE<gt>.build>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:48
+msgid ""
+"An alternative way of using B<debuild> is to use one or more of the "
+"parameters B<binary>, B<binary-arch>, B<binary-indep> and B<clean>, in which "
+"case B<debuild> will attempt to gain root privileges and then run I<debian/"
+"rules> with the given parameters. A B<--rootcmd=>I<gain-root-command> or B<-"
+"r>I<gain-root-command> option may be used to specify a method of gaining "
+"root privileges. The I<gain-root-command> is likely to be one of "
+"I<fakeroot>, I<sudo> or I<super>. See below for further discussion of this "
+"point. Again, the environment preservation options may be used. In this "
+"case, B<debuild> will also attempt to run B<dpkg-checkbuilddeps> first; this "
+"can be explicitly requested or switched off using the options B<-D> and B<-"
+"d> respectively. Note also that if either of these or a B<-r> option is "
+"specified in the configuration file option "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>, then it will be recognised even in this "
+"method of invocation of B<debuild>."
+msgstr ""
+"Um modo alternativo de usar o B<debuild> é usar um ou mais parâmetros "
+"B<binary>, B<binary-arch>, B<binary-indep> e B<clean>, que nesse caso o "
+"B<debuild> irá tentar ganhar privilégios de root e depois correr I<debian/"
+"rules> com os parâmetros dados. Uma opção B<--rootcmd=>I<gain-root-command> "
+"ou B<-r>I<gain-root-command> pode ser usada para especificar um método de "
+"ganhar privilégios de root. O I<gain-root-command> é provavelmente um de "
+"I<fakeroot>, I<sudo> ou I<super>. Veja em baixo mais discussão sobre este "
+"ponto. Mais uma vez, podem ser usadas as opções de preservação do ambiente. "
+"Neste caso, o B<debuild> irá também tentar correr primeiro B<dpkg-"
+"checkbuilddeps>; isto pode ser explicitamente requerido ou desligado usando "
+"as opções B<-D> e B<-d> respetivamente. Note também se uma destas ou uma "
+"opção B<-r> for especificada na opção de ficheiro de configuração "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>, então será reconhecida mesmo neste método "
+"de invocação do B<debuild>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:51
+msgid ""
+"B<debuild> also reads the B<devscripts> configuration files as described "
+"below. This allows default options to be given."
+msgstr ""
+"O B<debuild> também lê os ficheiros de configuração do B<devscripts> como "
+"descrito em baixo. Isto permite que sejam dadas opções predefinidas."
+
+#. type: Plain text
+#: ../scripts/debuild.1:63
+msgid ""
+"In common with several other scripts in the B<devscripts> package, "
+"B<debuild> will climb the directory tree until it finds a I<debian/"
+"changelog> file before attempting to build the package. As a safeguard "
+"against stray files causing potential problems, it will examine the name of "
+"the parent directory once it finds the I<debian/changelog> file, and check "
+"that the directory name corresponds to the package name. Precisely how it "
+"does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Em comum com vários outros scripts no pacote B<devscripts>, o B<debuild> irá "
+"subir a árvore de directórios até encontrar um ficheiro I<debian/changelog> "
+"antes de tentar compilar o pacote. Como segurança contra ficheiros errantes "
+"que podem causar problemas potenciais, irá examinar o nome do directório pai "
+"assim que encontra o ficheiro I<debian/changelog>, e verifica que o nome de "
+"directório corresponde ao nome do pacote. O modo preciso de como isto é "
+"feito é controlado por duas variáveis de ficheiro de configuração "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> e B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, e as "
+"suas opções de linha de comandos correspondentes B<--check-dirname-level> e "
+"B<--check-dirname-regex>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:88
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by B<pwd>(1)) matches the regex given by the configuration "
+"file option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option "
+"B<--check-dirname-regex> I<regex>. Here I<regex> is a Perl regex (see "
+"B<perlre>(3perl)), which will be anchored at the beginning and the end. If "
+"I<regex> contains a '/', then it must match the full directory path. If "
+"not, then it must match the full directory name. If I<regex> contains the "
+"string \\'PACKAGE', this will be replaced by the source package name, as "
+"determined from the I<changelog>. The default value for the regex is: "
+"\\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and PACKAGE-"
+"version."
+msgstr ""
+"O nome de directório é verificado ao testar se o nome de directório actual "
+"(como determinado por B<pwd>(1)) corresponde à expressão regular dada pela "
+"opção de ficheiro de configuração B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> ou pela "
+"opção de linha de comandos B<--check-dirname-regex> I<regex> Aqui I<regex> é "
+"uma expressão regular de Perl (veja B<perlre>(perl)), que será ancorada no "
+"início e no fim Se I<regex> conter um '/', então tem de corresponder ao "
+"caminho de directório completo Se não, então tem de corresponder ao nome de "
+"directório completo. Se I<regex> conter a string \\'PACKAGE', isto será "
+"substituído pelo nome do pacote fonte, como determinado a partir do "
+"I<changelog>. O valor predefinido para a regex é: \\'PACKAGE(-.+)?', assim "
+"correspondendo a nomes de directórios tais como PACKAGE e PACKAGE-version."
+
+#. type: Plain text
+#: ../scripts/debuild.1:98
+msgid ""
+"As environment variables can affect the building of a package, often "
+"unintentionally, B<debuild> sanitises the environment by removing all "
+"environment variables except for B<TERM>, B<HOME>, B<LOGNAME>, B<GNUPGHOME>, "
+"B<PGPPATH>, B<GPG_AGENT_INFO>, B<GPG_TTY>, B<DBUS_SESSION_BUS_ADDRESS>, "
+"B<FAKEROOTKEY>, B<DEBEMAIL>, B<DEB_>I<*>, the (B<C>, B<CPP>, B<CXX>, B<LD> "
+"and B<F>)B<FLAGS> variables and their B<_APPEND> counterparts and the locale "
+"variables B<LANG> and B<LC_>I<*>. B<TERM> is set to `dumb' if it is unset, "
+"and B<PATH> is set to \"/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11\"."
+msgstr ""
+"Como as variáveis de ambiente podem afectar a compilação de um pacote, "
+"muitas vezes sem intenção, o B<debuild> higieniza o ambiente ao remover "
+"todos as variáveis de ambiente excepto para B<TERM>, B<HOME>, B<LOGNAME>, "
+"B<GNUPGHOME>, B<PGPPATH>, B<GPG_AGENT_INFO>, B<GPG_TTY>, "
+"B<DBUS_SESSION_BUS_ADDRESS>, B<FAKEROOTKEY>, B<DEBEMAIL>, B<DEB_>I<*>, as "
+"variáveis B<FLAGS>(B<C>, B<CPP>, B<CXX>, B<LD> e B<F>) e seus homólogos "
+"B<_APPEND> e as variáveis de locale B<LANG> e B<LC_>I<*>. B<TERM> é "
+"definida para `dumb' se não estiver definida, e B<PATH> é definida para \"/"
+"usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11\"."
+
+#. type: Plain text
+#: ../scripts/debuild.1:109
+msgid ""
+"If a particular environment variable is required to be passed through "
+"untouched to the build process, this may be specified by using a B<--"
+"preserve-envvar> I<envvar> (which can also be written as B<-e> I<envvar> "
+"option). The environment may be left untouched by using the B<--preserve-"
+"env> option. However, even in this case, the B<PATH> will be set to the "
+"sane value described above. The B<only> way to prevent B<PATH> from being "
+"reset is to specify a B<--preserve-envvar PATH> option. But you are warned "
+"that using programs from non-standard locations can easily result in the "
+"package being broken, as it will not be able to be built on standard systems."
+msgstr ""
+"Se uma variável de ambiente particular precisar de ser passada inalterada "
+"para o processo de compilação, isso pode ser especificado usando uma B<--"
+"preserve-envvar> I<envvar> (o que também pode ser escrito como opção B<-e> "
+"I<envvar>). O ambiente pode ser deixado intocado ao usar a opção B<--"
+"preserve-env>. No entanto, mesmo neste caso, a B<PATH> será definida para o "
+"valor saudável descrito em cima. A B<única> maneira de prevenir que a "
+"B<PATH> seja reiniciada é especificar a opção B<--preserve-envvar PATH>. Mas "
+"você fica avisado que usar programas de localizações não-standard pode "
+"facilmente resultar no pacote ficar quebrado, pois não será capaz de ser "
+"compilado em sistemas standard."
+
+#. type: Plain text
+#: ../scripts/debuild.1:113
+msgid ""
+"Note that one may add directories to the beginning of the sanitised B<PATH>, "
+"using the B<--prepend-path> option. This is useful when one wishes to use "
+"tools such as B<ccache> or B<distcc> for building."
+msgstr ""
+"Note que podemos adicionar directórios ao inicio da B<PATH> higienizada, "
+"usando a opção B<--prepend-path>. Isto é útil quando desejamos usar "
+"ferramentas como B<ccache> ou B<distcc> para compilação."
+
+#. type: Plain text
+#: ../scripts/debuild.1:118
+msgid ""
+"It is also possible to avoid having to type something like I<FOO>B<=>I<bar "
+">B<debuild -e >I<FOO> by writing B<debuild -e >I<FOO>B<=>I<bar> or the long "
+"form B<debuild --set-envvar >I<FOO>B<=>I<bar>."
+msgstr ""
+"É também possível evitar ter de escrever algo como I<FOO>B<=>I<bar "
+">B<debuild -e >I<FOO> ao escrever B<debuild -e >I<FOO>B<=>I<bar> ou o "
+"formato longo B<debuild --set-envvar >I<FOO>B<=>I<bar>."
+
+#. type: SH
+#: ../scripts/debuild.1:118
+#, no-wrap
+msgid "SUPERUSER REQUIREMENTS"
+msgstr "REQUERIMENTOS DE SUPER-UTILIZADOR"
+
+#. type: Plain text
+#: ../scripts/debuild.1:128
+msgid ""
+"B<debuild> needs to be run as superuser to function properly. There are "
+"three fundamentally different ways to do this. The first, and preferable, "
+"method is to use some root-gaining command. The best one to use is probably "
+"B<fakeroot>(1), since it does not involve granting any genuine privileges. "
+"B<super>(1) and B<sudo>(1) are also possibilities. If no B<-r> (or B<--"
+"rootcmd>) option is given (and recall that B<dpkg-buildpackage> also accepts "
+"a B<-r> option) and neither of the following methods is used, then B<-"
+"rfakeroot> will silently be assumed."
+msgstr ""
+"B<debuild> precisa de correr como super-utilizador para funcionar "
+"corretamente. Existem três maneiras fundamentais de fazer isto. O primeiro "
+"método, e preferível, é usar algum comando de ganhar root. O melhor a usar é "
+"provavelmente o B<fakeroot>(1), porque não envolve dar nenhuns privilégios "
+"genuínos. B<super>(1) e B<sudo>(1) são também possibilidades. Se nenhuma "
+"opção B<-r> (ou B<--rootcmd>) for dada (e recorde que B<dpkg-buildpackage> "
+"também aceita uma opção B<-r>) e nenhum dos seguintes métodos for usado, "
+"então será assumido B<-rfakeroot> em silêncio."
+
+#. type: Plain text
+#: ../scripts/debuild.1:134
+msgid ""
+"The second method is to use some command such as B<su>(1) to become root, "
+"and then to do everything as root. Note, though, that B<lintian> will abort "
+"if it is run as root or setuid root; this can be overcome using the B<--"
+"allow-root> option of B<lintian> if you know what you are doing."
+msgstr ""
+"O segundo método é usar algum comando como o B<su>(1) para se tornar root, e "
+"depois fazer tudo como root. Note, entretanto, que o B<lintian> irá abortar "
+"ser correr como root ou setuid root; isto pode ser ultrapassado usando a "
+"opção B<--allow-root> do B<lintian> se você souber o que está a fazer."
+
+#. type: Plain text
+#: ../scripts/debuild.1:150
+msgid ""
+"The third possible method is to have B<debuild> installed as setuid root. "
+"This is not the default method, and will have to be installed as such by the "
+"system administrator. It must also be realised that anyone who can run "
+"B<debuild> as root or setuid root has B<full access to the whole machine>. "
+"This method is therefore not recommended, but will work. B<debuild> could "
+"be installed with mode 4754, so that only members of the owning group could "
+"run it. A disadvantage of this method would be that other users would then "
+"not be able to use the program. There are many other variants of this "
+"option involving multiple copies of B<debuild>, or the use of programs such "
+"as B<sudo> or B<super> to grant root privileges to users selectively. If "
+"the sysadmin wishes to do this, she should use the B<dpkg-statoverride> "
+"program to change the permissions of I</usr/bin/debuild>. This will ensure "
+"that these permissions are preserved across upgrades."
+msgstr ""
+"O terceiro método possível é ter o B<debuild> instalado como setuid root. "
+"Este não é o método predefinido, e terá de ser instalado deste modo pelo "
+"administrador do sistema. É preciso também se perceber que qualquer pessoa "
+"que possa correr o B<debuild> como root ou setuid root fica com B<acesso "
+"total a toda a máquina>. Por isto este método não é recomendado, mas irá "
+"funcionar. O B<debuild> poderá ser instalado com modo 4754, para que apenas "
+"os membros do grupo de posse o possam correr. A desvantagem deste método "
+"seria que outros utilizadores não seriam capazes de usar o programa. Existem "
+"muitas outras variantes desta opção que envolvem várias cópias do "
+"B<debuild>, ou o uso de programas como B<sudo> ou B<super> para "
+"seletivamente dar privilégios de root a utilizadores. Se o administrador do "
+"sistema desejar fazer isto, deve usar o programa B<dpkg-statoverride> para "
+"mudar as permissões de I</usr/bin/debuild>. Isto vai assegurar que estas "
+"permissões são preservadas por entre actualizações."
+
+#. type: SH
+#: ../scripts/debuild.1:150
+#, no-wrap
+msgid "HOOKS"
+msgstr "HOOKS"
+
+#. type: Plain text
+#: ../scripts/debuild.1:156
+msgid ""
+"B<debuild> supports a number of hooks when running B<dpkg-buildpackage>. "
+"Note that the hooks B<dpkg-buildpackage> to B<lintian> (inclusive) are "
+"passed through to B<dpkg-buildpackage> using its corresponding B<--hook-"
+">I<name> option. The available hooks are as follows:"
+msgstr ""
+"B<debuild> suporta um número de hooks quando corre B<dpkg-buildpackage>. "
+"Note que os hooks B<dpkg-buildpackage> até B<lintian> (inclusive) são "
+"passados pelo B<dpkg-buildpackage> usando a sua opção correspondente B<--"
+"hook->I<name>. Os hooks disponíveis são os seguintes:"
+
+#. type: TP
+#: ../scripts/debuild.1:156
+#, no-wrap
+msgid "B<dpkg-buildpackage-hook>"
+msgstr "B<dpkg-buildpackage-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:159
+msgid ""
+"Run before B<dpkg-buildpackage> begins by calling B<dpkg-checkbuilddeps>."
+msgstr ""
+"Corre antes de B<dpkg-buildpackage> começar ao chamar B<dpkg-checkbuilddeps>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:161 ../scripts/debuild.1:170 ../scripts/debuild.1:178
+#: ../scripts/debuild.1:187 ../scripts/debuild.1:195 ../scripts/debuild.1:203
+#: ../scripts/debuild.1:212
+msgid "Hook is run inside the unpacked source."
+msgstr "Hook corre dentro da fonte desempacotada."
+
+#. type: Plain text
+#: ../scripts/debuild.1:163
+msgid "Corresponds to B<dpkg>'s B<init> hook."
+msgstr "Corresponde ao hook B<init> do B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:163
+#, no-wrap
+msgid "B<clean-hook>"
+msgstr "B<clean-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:168
+msgid ""
+"Run before B<dpkg-buildpackage> runs B<debian/rules clean> to clean the "
+"source tree. (Run even if the tree is not being cleaned because B<-nc> is "
+"used.)"
+msgstr ""
+"Corre antes do B<dpkg-buildpackage> correr B<debian/rules clean> para limpar "
+"a árvore fonte. (Corre mesmo que a árvore não seja limpa porque é usado B<-"
+"nc>.)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:172
+msgid "Corresponds to B<dpkg>'s B<preclean> hook."
+msgstr "Corresponde ao hook B<preclean> do B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:172
+#, no-wrap
+msgid "B<dpkg-source-hook>"
+msgstr "B<dpkg-source-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:176
+msgid ""
+"Run after cleaning the tree and before running B<dpkg-source>. (Run even if "
+"B<dpkg-source> is not being called because B<-b>, B<-B>, or B<-A> is used.)"
+msgstr ""
+"Corre após limpar a árvore e antes de correr B<dpkg-source>. (Corre mesmo "
+"se B<dpkg-source> não seja chamado porque é usado B<-b>, B<-B>, ou B<-A>.)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:180
+msgid "Corresponds to B<dpkg>'s B<source> hook."
+msgstr "Corresponde ao hook B<source> do B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:180
+#, no-wrap
+msgid "B<dpkg-build-hook>"
+msgstr "B<dpkg-build-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:185
+msgid ""
+"Run after B<dpkg-source> and before calling B<debian/rules build>. (Run "
+"even if this is a source-only build, so B<debian/rules build> is not being "
+"called.)"
+msgstr ""
+"Corre após B<dpkg-source> e antes de chamar B<debian/rules build>. (Corre "
+"mesmo que seja uma compilação apenas-fonte, e assim B<debian/rules build> "
+"não irá ser chamado.)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:189
+msgid "Corresponds to B<dpkg>'s B<build> hook."
+msgstr "Corresponde ao hook B<build> do B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:189
+#, no-wrap
+msgid "B<dpkg-binary-hook>"
+msgstr "B<dpkg-binary-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:193
+msgid ""
+"Run between B<debian/rules build> and B<debian/rules binary>(B<-arch>). Run "
+"B<only> if a binary package is being built."
+msgstr ""
+"Corre entre B<debian/rules build> e B<debian/rules binary>(B<-arch>). Corre "
+"B<apenas> se um pacote binário estiver a ser compilado."
+
+#. type: Plain text
+#: ../scripts/debuild.1:197
+msgid "Corresponds to B<dpkg>'s B<binary> hook."
+msgstr "Corresponde ao hook B<binary> do B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:197
+#, no-wrap
+msgid "B<dpkg-genchanges-hook>"
+msgstr "B<dpkg-genchanges-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:201
+msgid ""
+"Run after the binary package is built and before calling B<dpkg-genchanges>."
+msgstr ""
+"Corre após o pacote binário ser compilado e antes de chamar B<dpkg-"
+"genchanges>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:205
+msgid "Corresponds to B<dpkg>'s B<changes> hook."
+msgstr "Corresponde ao hook B<changes> do B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:205
+#, no-wrap
+msgid "B<final-clean-hook>"
+msgstr "B<final-clean-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:210
+msgid ""
+"Run after B<dpkg-genchanges> and before the final B<debian/rules clean>. "
+"(Run even if we are not cleaning the tree post-build, which is the default.)"
+msgstr ""
+"Corre após B<dpkg-genchanges> e antes do B<debian/rules clean> final. (Corre "
+"mesmo que não estejamos a limpar a árvore pós-compilação, o que é a "
+"predefinição.)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:214
+msgid "Corresponds to B<dpkg>'s B<postclean> hook."
+msgstr "Corresponde ao hook B<postclean> do B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:214
+#, no-wrap
+msgid "B<lintian-hook>"
+msgstr "B<lintian-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:218
+msgid ""
+"Run (once) before calling B<lintian>. (Run even if we are not calling "
+"B<lintian>.)"
+msgstr ""
+"Corre (uma vez) antes de chamar B<lintian>. (Corre mesmo que não estejamos "
+"a chamar o B<lintian>.)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:220 ../scripts/debuild.1:228 ../scripts/debuild.1:235
+msgid "Hook is run from parent directory of unpacked source."
+msgstr "Hook corre a partir do directório pai da fonte desempacotada."
+
+#. type: Plain text
+#: ../scripts/debuild.1:222
+msgid "Corresponds to B<dpkg>'s B<check> hook."
+msgstr "Corresponde ao hook B<check> do B<dpkg>."
+
+#. type: TP
+#: ../scripts/debuild.1:222
+#, no-wrap
+msgid "B<signing-hook>"
+msgstr "B<signing-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:226
+msgid ""
+"Run after calling B<lintian> before any signing takes place. (Run even if "
+"we are not signing anything.)"
+msgstr ""
+"Corre após chamar o B<lintian> antes de qualquer assinatura ser feita. "
+"(Corre mesmo que não estejamos a assinar nada.)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:230
+msgid "Corresponds to B<dpkg>'s B<sign> hook, but is run by B<debuild>."
+msgstr "Corresponde ao hook B<sign> do B<dpkg>, mas é corrido pelo B<debuild>."
+
+#. type: TP
+#: ../scripts/debuild.1:230
+#, no-wrap
+msgid "B<post-dpkg-buildpackage-hook>"
+msgstr "B<post-dpkg-buildpackage-hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:233
+msgid "Run after everything has finished."
+msgstr "Corre após tudo ter terminado."
+
+#. type: Plain text
+#: ../scripts/debuild.1:237
+msgid "Corresponds to B<dpkg>'s B<done> hook, but is run by B<debuild>."
+msgstr "Corresponde ao hook B<done> do B<dpkg>, mas é corrido pelo B<debuild>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:252
+msgid ""
+"A hook command can be specified either in the configuration file as, for "
+"example, DEBUILD_SIGNING_HOOK='foo' (note the hyphens change into "
+"underscores!) or as a command line option B<--signing-hook-foo>. The "
+"command will have certain percent substitutions made on it: B<%%> will be "
+"replaced by a single B<%> sign, B<%p> will be replaced by the package name, "
+"B<%v> by the package version number, B<%s> by the source version number, "
+"B<%u> by the upstream version number. Neither B<%s> nor B<%u> will contain "
+"an epoch. B<%a> will be B<1> if the immediately following action is to be "
+"performed and B<0> if not (for example, in the B<dpkg-source> hook, B<%a> "
+"will become B<1> if B<dpkg-source> is to be run and B<0> if not). Then it "
+"will be handed to the shell to deal with, so it can include redirections and "
+"stuff. For example, to only run the B<dpkg-source> hook if B<dpkg-source> "
+"is to be run, the hook could be something like: \"if [ %a -eq 1 ]; then ...; "
+"fi\"."
+msgstr ""
+"Um comando hook pode ser especificado seja no ficheiro de configuração como, "
+"por exemplo, DEBUILD_SIGNING_HOOK='foo' (note que os hífens mudaram para "
+"underscores!) ou como opção de linha de comandos B<--signing-hook-foo>. O "
+"comando irá ter uma certa percentagem de substituições feitas nele: B<%%> "
+"irá ser substituído por um único sinal B<%>, B<%p> será substituído pelo "
+"nome do pacote, B<%v> pelo número de versão do pacote, B<%s> pelo número da "
+"versão fonte, B<%u> pelo número da versão do autor. Nem B<%s> nem B<%u> irão "
+"conter um epoch. B<%a> irá ser B<1> se a acção imediatamente seguinte deverá "
+"ser executada e B<0> se não (por exemplo, no hook do B<dpkg-source>, B<%a> "
+"irá tornar-se B<1> se B<dpkg-source> estiver para ser corrido e B<0> se "
+"não). Então será entregue à shell para lidar, para que possa incluir "
+"redirecionamentos e outras coisas. Por exemplo, para apenas correr o hook do "
+"B<dpkg-source> se o B<dpkg-source> estiver para correr, o hook pode ser algo "
+"como isto: \"if [ %a -eq 1 ]; then ...; fi\"."
+
+#. type: Plain text
+#: ../scripts/debuild.1:256
+msgid ""
+"B<Please take care with hooks>, as misuse of them can lead to packages which "
+"FTBFS (fail to build from source). They can be useful for taking snapshots "
+"of things or the like."
+msgstr ""
+"B<Por favor tenha cuidado com os hooks>, pois a sua má utilização pode levar "
+"a pacotes que FTBFS (fail to build from source) falham ao compilar a partir "
+"da fonte. Eles pode ser úteis para tirar instantâneos e coisas do género."
+
+#. type: Plain text
+#: ../scripts/debuild.1:258
+msgid "For details, see above."
+msgstr "Para detalhes,. veja em cima."
+
+#. type: Plain text
+#: ../scripts/debuild.1:265
+msgid "Command to gain root (or fake root) privileges."
+msgstr "Comando para obter privilégios de root (ou falso root)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:268
+msgid "Do not clean the environment, except for PATH."
+msgstr "Não limpa o ambiente, excepto para PATH."
+
+#. type: Plain text
+#: ../scripts/debuild.1:271
+msgid "Do not clean the I<var> variable from the environment."
+msgstr "Não limpa a variável I<var> do ambiente."
+
+#. type: Plain text
+#: ../scripts/debuild.1:275
+msgid ""
+"If I<var> ends in an asterisk (\"*\") then all variables with names that "
+"match the portion of I<var> before the asterisk will be preserved."
+msgstr ""
+"Se I<var> acabar num asterisco (\"*\") então serão preservadas todas as "
+"variáveis com nomes que correspondem à porção de I<var> antes do asterisco."
+
+#. type: Plain text
+#: ../scripts/debuild.1:279
+msgid ""
+"Set the environment variable I<var> to I<value> and do not remove it from "
+"the environment."
+msgstr ""
+"Define a variável de ambiente I<var> para I<value> e não a remove do "
+"ambiente."
+
+#. type: TP
+#: ../scripts/debuild.1:279
+#, no-wrap
+msgid "B<--prepend-path=>I<value >"
+msgstr "B<--prepend-path=>I<value >"
+
+#. type: Plain text
+#: ../scripts/debuild.1:283
+msgid "Once the normalized PATH has been set, prepend I<value> to it."
+msgstr "Após a PATH normalizada ter sido definida, prefixa I<value> a ela."
+
+#. type: TP
+#: ../scripts/debuild.1:283
+#, no-wrap
+msgid "B<--lintian>"
+msgstr "B<--lintian>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:288
+msgid ""
+"Run B<lintian> after B<dpkg-buildpackage>. This is the default behaviour, "
+"and it overrides any configuration file directive to the contrary."
+msgstr ""
+"Corre B<lintian> após B<dpkg-buildpackage>. Este é o comportamento "
+"predefinido, e sobrepõe qualquer directiva de ficheiro de configuração que "
+"diga o contrário."
+
+#. type: TP
+#: ../scripts/debuild.1:288
+#, no-wrap
+msgid "B<--no-lintian>"
+msgstr "B<--no-lintian>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:291
+msgid "Do not run B<lintian> after B<dpkg-buildpackage>."
+msgstr "Não corre o B<lintian> após B<dpkg-buildpackage>."
+
+#. type: TP
+#: ../scripts/debuild.1:291
+#, no-wrap
+msgid "B<--no-tgz-check>"
+msgstr "B<--no-tgz-check>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:296
+msgid ""
+"Even if we're running B<dpkg-buildpackage> and the version number has a "
+"Debian revision, do not check that the I<.orig.tar.gz> file or I<.orig> "
+"directory exists before starting the build."
+msgstr ""
+"Mesmo que estejamos a correr B<dpkg-buildpackage> e o número de versão tenha "
+"uma revisão Debian, não verifica se o ficheiro I<.orig.tar.gz> ou o "
+"directório I<.orig> existem antes de começar a compilação."
+
+#. type: TP
+#: ../scripts/debuild.1:296
+#, no-wrap
+msgid "B<--tgz-check>"
+msgstr "B<--tgz-check>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:301
+msgid ""
+"If we're running B<dpkg-buildpackage> and the version number has a Debian "
+"revision, check that the I<.orig.tar.gz> file or I<.orig> directory exists "
+"before starting the build. This is the default behaviour."
+msgstr ""
+"Se estivermos a correr B<dpkg-buildpackage> e o número de versão tiver uma "
+"revisão Debian, verifica se o ficheiro I<.orig.tar.gz> ou o directório I<."
+"orig> existem antes de começar a compilação. Este é o comportamento "
+"predefinido."
+
+#. type: TP
+#: ../scripts/debuild.1:301
+#, no-wrap
+msgid "B<--username> I<username>"
+msgstr "B<--username> I<username>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:305
+msgid ""
+"When signing, use B<debrsign> instead of B<debsign>. I<username> specifies "
+"the credentials to be used."
+msgstr ""
+"Ao assinar, usa B<debrsign> em vez de B<debsign>. I<username> especifica as "
+"credenciais a serem usadas."
+
+#. type: TP
+#: ../scripts/debuild.1:305
+#, no-wrap
+msgid "B<-->I<foo>B<-hook>=I<hook>"
+msgstr "B<-->I<foo>B<-hook>=I<hook>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:309
+msgid ""
+"Set a hook as described above. If I<hook> is blank, this unsets the hook."
+msgstr ""
+"Define um hook como descrito em cima. Se I<hook> estiver vazio, isso "
+"desconfigura o hook."
+
+#. type: TP
+#: ../scripts/debuild.1:309
+#, no-wrap
+msgid "B<--clear-hooks>"
+msgstr "B<--clear-hooks>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:313
+msgid ""
+"Clears all hooks. They may be reinstated by later command line options."
+msgstr ""
+"Limpa todos os hooks. Eles pode ser reinstalados por opções de linha de "
+"comandos posteriores."
+
+#. type: Plain text
+#: ../scripts/debuild.1:324
+msgid "Do not run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+"Não corre B<dpkg-checkbuilddeps> para verificar dependências de compilação."
+
+#. type: TP
+#: ../scripts/debuild.1:324
+#, no-wrap
+msgid "B<-D>"
+msgstr "B<-D>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:327
+msgid "Run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+"Corre B<dpkg-checkbuilddeps> para verificar dependências de compilação."
+
+#. type: Plain text
+#: ../scripts/debuild.1:335
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override some of these configuration file "
+"settings, otherwise the B<--no-conf> option can be used to prevent reading "
+"these files. Environment variable settings are ignored when these "
+"configuration files are read. The currently recognised variables are:"
+msgstr ""
+"Os dois ficheiros de configuração I</etc/devscripts.conf> e I<~/.devscripts> "
+"são fonte para uma shell por esta ordem para definir variáveis de "
+"configuração. Podem ser usadas opções de linha de comandos para sobrepor "
+"algumas destas definições de ficheiro de configuração, caso contrário a "
+"opção B<--no-conf> pode ser usada para prevenir a leitura destes ficheiros. "
+"As definições de variáveis de ambiente são ignoradas quando estes ficheiros "
+"de configuração são lidos. As variáveis reconhecidas actualmente são:"
+
+#. type: TP
+#: ../scripts/debuild.1:335
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENV>"
+msgstr "B<DEBUILD_PRESERVE_ENV>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:339
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve-env> "
+"command line parameter being used."
+msgstr ""
+"Se isto for definido para I<yes>, então é o mesmo que usar o parâmetro de "
+"linha de comandos B<--preserve-env>."
+
+#. type: TP
+#: ../scripts/debuild.1:339
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENVVARS>"
+msgstr "B<DEBUILD_PRESERVE_ENVVARS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:344
+msgid ""
+"Which environment variables to preserve. This should be a comma-separated "
+"list of variables. This corresponds to using possibly multiple B<--preserve-"
+"envvar> or B<-e> options."
+msgstr ""
+"Quais as variáveis de ambiente a preservar. Isto deve ser uma lista de "
+"variáveis separadas por vírgulas. Isto corresponde a usar múltiplas "
+"possíveis opções B<--preserve-envvar> ou B<-e>."
+
+#. type: TP
+#: ../scripts/debuild.1:344
+#, no-wrap
+msgid "B<DEBUILD_SET_ENVVAR_>I<var>B<=>I<value>"
+msgstr "B<DEBUILD_SET_ENVVAR_>I<var>B<=>I<value>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:347
+msgid "This corresponds to B<--set-envvar=>I<var>B<=>I<value>."
+msgstr "Isto corresponde a B<--set-envvar=>I<var>B<=>I<value>."
+
+#. type: TP
+#: ../scripts/debuild.1:347
+#, no-wrap
+msgid "B<DEBUILD_PREPEND_PATH>"
+msgstr "B<DEBUILD_PREPEND_PATH>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:350
+msgid "This corresponds to B<--prepend-path>."
+msgstr "Isto corresponde a B<--prepend-path>."
+
+#. type: TP
+#: ../scripts/debuild.1:350
+#, no-wrap
+msgid "B<DEBUILD_ROOTCMD>"
+msgstr "B<DEBUILD_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:354
+msgid "Setting this variable to I<prog> is the equivalent of B<-r>I<prog>."
+msgstr "Definir esta variável para I<prog> é o equivalente a B<-r>I<prog>."
+
+#. type: TP
+#: ../scripts/debuild.1:354
+#, no-wrap
+msgid "B<DEBUILD_TGZ_CHECK>"
+msgstr "B<DEBUILD_TGZ_CHECK>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:358
+msgid ""
+"Setting this variable to I<no> is the same as the B<--no-tgz-check> command "
+"line option."
+msgstr ""
+"Definir esta variável para I<no> é o mesmo que a opção de linha de comandos "
+"B<--no-tgz-check>."
+
+#. type: TP
+#: ../scripts/debuild.1:358
+#, no-wrap
+msgid "B<DEBUILD_SIGNING_USERNAME>"
+msgstr "B<DEBUILD_SIGNING_USERNAME>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:362
+msgid ""
+"Setting this variable is the same as using the B<--username> command line "
+"option."
+msgstr ""
+"Definir esta variável é o mesmo que usar a opção de linha de comandos B<--"
+"username>."
+
+#. type: TP
+#: ../scripts/debuild.1:362
+#, no-wrap
+msgid "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+msgstr "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:370
+msgid ""
+"These are options which should be passed to the invocation of B<dpkg-"
+"buildpackage>. They are given before any command-line options. Due to "
+"issues of shell quoting, if a word containing spaces is required as a single "
+"option, extra quotes will be required. For example, to ensure that your own "
+"GPG key is always used, even for sponsored uploads, the configuration file "
+"might contain the line:"
+msgstr ""
+"Estas são opções que devem ser passadas à invocação de B<dpkg-buildpackage>. "
+"Elas são dadas antes de quaisquer opções de linha de comandos. Devido a "
+"problemas com a citação da shell, se for necessário uma palavra que contenha "
+"espaços como única opção, serão requeridas aspas extra. Por exemplo, para "
+"assegurar que a sua chave GPG é sempre usada, mesmo para envios "
+"patrocinados, o ficheiro de configuração pode conter a linha:"
+
+#. type: Plain text
+#: ../scripts/debuild.1:373
+#, no-wrap
+msgid "DEBUILD_DPKG_BUILDPACKAGE_OPTS=\"-k'Julian Gilbey E<lt>jdg@debian.orgE<gt>' -sa\"\n"
+msgstr "DEBUILD_DPKG_BUILDPACKAGE_OPTS=\"-k'Julian Gilbey E<lt>jdg@debian.orgE<gt>' -sa\"\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:378
+msgid ""
+"which gives precisely two options. Without the extra single quotes, B<dpkg-"
+"buildpackage> would reasonably complain that I<Gilbey> is an unrecognised "
+"option (it doesn't start with a B<-> sign)."
+msgstr ""
+"a qual dá precisamente duas opções. Sem as aspas únicas extra, o B<dpkg-"
+"buildpackage> iria queixar-se com razão que I<Gilbey> é uma opção não "
+"reconhecida (não começa com um sinal B<->)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:383
+msgid ""
+"Also, if this option contains any B<-r>, B<-d> or B<-D> options, these will "
+"always be taken account of by B<debuild>. Note that a B<-r> option in this "
+"variable will override the setting in B<DEBUILD_ROOTCMD>."
+msgstr ""
+"Também, se esta opção conter alguma opção B<-r>, B<-d> ou B<-D>, estas serão "
+"sempre tidas em conta pelo B<debuild>. Note que uma opção B<-r> nesta "
+"variável irá sobrepor a definição em B<DEBUILD_ROOTCMD>."
+
+#. type: TP
+#: ../scripts/debuild.1:383
+#, no-wrap
+msgid "B<DEBUILD_>I<FOO>B<_HOOK>"
+msgstr "B<DEBUILD_>I<FOO>B<_HOOK>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:387
+msgid ""
+"The hook variable for the I<foo> hook. See the section on hooks above for "
+"more details. By default, this is empty."
+msgstr ""
+"A variável hook para o hook I<foo>. Veja a secção sobre hooks em cima para "
+"mais detalhes. Por predefinição, isto está vazio."
+
+#. type: TP
+#: ../scripts/debuild.1:387
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN>"
+msgstr "B<DEBUILD_LINTIAN>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:391
+msgid ""
+"Should we run B<lintian>? If this is set to I<no>, then B<lintian> will not "
+"be run."
+msgstr ""
+"Deveríamos correr o B<lintian>? Se isto estiver definido para I<no>, então o "
+"B<lintian> não irá correr."
+
+#. type: TP
+#: ../scripts/debuild.1:391
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN_OPTS>"
+msgstr "B<DEBUILD_LINTIAN_OPTS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:397
+msgid ""
+"These are options which should be passed to the invocation of B<lintian>. "
+"They are given before any command-line options, and the usage of this "
+"variable is as described for the B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> variable."
+msgstr ""
+"Estas são opções que devem ser passadas à invocação do B<lintian>. Elas são "
+"dadas antes de quaisquer opções de linha de comandos, e a utilização desta "
+"variável é como descrita para a variável B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:408
+msgid ""
+"To build your own package, simply run B<debuild> from inside the source "
+"tree. B<dpkg-buildpackage>(1) options may be given on the command line."
+msgstr ""
+"Para compilar o seu próprio pacote, simplesmente corra B<debuild> a partir "
+"de dentro da árvore fonte. Pode ser dadas opções de B<dpkg-buildpackage>(1) "
+"na linha de comandos."
+
+#. type: Plain text
+#: ../scripts/debuild.1:411
+msgid ""
+"The typical command line options to build only the binary package(s) "
+"without signing the .changes file (or the non-existent .dsc file):"
+msgstr ""
+"As opções de linha de comando típicas para compilar apenas os pacote(s) "
+"binário sem assinar o ficheiro .changes (ou o ficheiro .dsc não existente):"
+
+#. type: Plain text
+#: ../scripts/debuild.1:414
+#, no-wrap
+msgid "debuild -i -us -uc -b\n"
+msgstr "debuild -i -us -uc -b\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:417
+msgid "Change the B<-b> to B<-S> to build only a source package."
+msgstr "Muda o B<-b> para B<-S> para compilar apenas um pacote fonte."
+
+#. type: Plain text
+#: ../scripts/debuild.1:420
+msgid ""
+"An example using B<lintian> to check the resulting packages and passing "
+"options to it:"
+msgstr ""
+"Um exemplo que usa o B<lintian> para verificar os pacotes resultantes e "
+"passa opções para ele."
+
+#. type: Plain text
+#: ../scripts/debuild.1:423
+#, no-wrap
+msgid "debuild --lintian-opts -i\n"
+msgstr "debuild --lintian-opts -i\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:431
+msgid ""
+"Note the order of options here: the B<debuild> options come first, then the "
+"B<dpkg-buildpackage> ones, then finally the checker options. (And "
+"B<lintian> is called by default.) If you find yourself using the same "
+"B<dpkg-buildpackage> options repeatedly, consider using the "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> configuration file option as described "
+"above."
+msgstr ""
+"Note a ordem das opções aqui: as opções do B<debuild> vêm primeiro, depois "
+"as do B<dpkg-buildpackage>, então finalmente as opções de verificação. (E o "
+"B<lintian> é chamado por predefinição.) Se você estiver as usar as mesmas "
+"opções de B<dpkg-buildpackage> repetidamente, considere usar a opção de "
+"ficheiro de configuração B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> como descrita em "
+"cima."
+
+#. type: Plain text
+#: ../scripts/debuild.1:435
+msgid ""
+"To build a package for a sponsored upload, given I<foobar_1.0-1.dsc> and the "
+"respective source files, run something like the following commands:"
+msgstr ""
+"Para compilar um pacote para um envio patrocinado, dando I<foobar_1.0-1.dsc> "
+"e os ficheiros fontes respectivos, corra algo como os seguintes comandos:"
+
+#. type: Plain text
+#: ../scripts/debuild.1:440
+#, no-wrap
+msgid ""
+"dpkg-source -x foobar_1.0-1.dsc\n"
+"cd foobar-1.0\n"
+"debuild -k0x12345678\n"
+msgstr ""
+"dpkg-source -x foobar_1.0-1.dsc\n"
+"cd foobar-1.0\n"
+"debuild -k0x12345678\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:447
+msgid ""
+"where 0x12345678 is replaced by your GPG key ID or other key identifier such "
+"as your email address. Again, you could also use the "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> configuration file option as described "
+"above to avoid having to type the B<-k> option each time you do a sponsored "
+"upload."
+msgstr ""
+"onde 0x12345678 é substituído pelo seu ID de chave GPG ou outro "
+"identificador de chave como o seu endereço de email. Mais uma vez, você pode "
+"também usar a opção de ficheiro de configuração "
+"B<DEBUILD_DPKG_BUILDPACKAGE_OPTS> como descrita em cima para evitar ter de "
+"escrever a opção B<-k> todas as vezes que faz um envio patrocinado."
+
+#. type: Plain text
+#: ../scripts/debuild.1:459
+msgid ""
+"B<chmod>(1), B<debsign>(1), B<dpkg-buildpackage>(1), B<dpkg-"
+"checkbuilddeps>(1), B<fakeroot>(1), B<lintian>(1), B<su>(1), B<sudo>(1), "
+"B<super>(1), B<devscripts.conf>(5), B<dpkg-statoverride>(8)"
+msgstr ""
+"B<chmod>(1), B<debsign>(1), B<dpkg-buildpackage>(1), B<dpkg-"
+"checkbuilddeps>(1), B<fakeroot>(1), B<lintian>(1), B<su>(1), B<sudo>(1), "
+"B<super>(1), B<devscripts.conf>(5), B<dpkg-statoverride>(8)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:462
+msgid ""
+"The original B<debuild> program was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. The current version has been written by "
+"Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"O programa original B<debuild> foi escrito por Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. A versão actual foi escrita por Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:26
+msgid "desktop2menu - create a menu file skeleton from a desktop file"
+msgstr ""
+"desktop2menu - cria um ficheiro de menu esqueleto a partir de um ficheiro "
+"desktop"
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:30
+msgid "B<desktop2menu> B<--help>|B<--version>"
+msgstr "B<desktop2menu> B<--help>|B<--version>"
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:32
+msgid "B<desktop2menu> I<desktop file> [I<package name>]"
+msgstr "B<desktop2menu> I<desktop file> [I<package name>]"
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:36
+msgid ""
+"B<desktop2menu> generates a skeleton menu file from the supplied freedesktop."
+"org desktop file."
+msgstr ""
+"B<desktop2menu> gera um ficheiro de menu esqueleto a partir de um ficheiro "
+"desktop de freedesktop.org fornecido."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:39
+msgid ""
+"The package name to be used in the menu file may be passed as an additional "
+"argument. If it is not supplied then B<desktop2menu> will attempt to derive "
+"the package name from the data in the desktop file."
+msgstr ""
+"O nome de pacote a ser usado no ficheiro de menu pode ser passado como um "
+"argumento adicional. Se não for fornecido então o B<desktop2menu> irá tentar "
+"obter o nome de pacote a partir dos dados no ficheiro desktop."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:45
+msgid ""
+"This program is Copyright (C) 2007 by Sune Vuorela <debian@pusling.com>. It "
+"was modified by Adam D. Barratt <adam@adam-barratt.org.uk> for the "
+"devscripts package. This program comes with ABSOLUTELY NO WARRANTY. You "
+"are free to redistribute this code under the terms of the GNU General Public "
+"License, version 2 or later."
+msgstr ""
+"Este programa tem Copyright (C) 2007 de Sune Vuorela <debian@pusling.com>. "
+"Foi modificado por Adam D. Barratt <adam@adam-barratt.org.uk> para o pacote "
+"devscripts. Este programa vem com ABSOLUTAMENTE NENHUMA GARANTIA. Você é "
+"livre de re-distribuir este código sob os termos da GNU General Public "
+"License, versão 2 ou posterior."
+
+#. type: textblock
+#: ../scripts/desktop2menu.pl:54
+msgid ""
+"Sune Vuorela <debian@pusling.com> with modifications by Adam D. Barratt "
+"<adam@adam-barratt.org.uk>"
+msgstr ""
+"Sune Vuorela <debian@pusling.com> com modificações de Adam D. Barratt "
+"<adam@adam-barratt.org.uk>"
+
+#. type: TH
+#: ../scripts/dep3changelog.1:1
+#, no-wrap
+msgid "DEP3CHANGELOG"
+msgstr "DEP3CHANGELOG"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:4
+msgid ""
+"dep3changelog - generate a changelog entry from a DEP3-style patch header"
+msgstr ""
+"dep3changelog - gera uma entrada changelog a partir de cabeçalho de patch "
+"estilo DEP3"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:6
+msgid ""
+"B<dep3changelog> I<patch> [I<patch> ...] [I<options>] [-- [I<dch_options>]]"
+msgstr ""
+"B<dep3changelog> I<patch> [I<patch> ...] [I<options>] [-- [I<dch_options>]]"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:15
+msgid ""
+"B<dep3changelog> extracts the DEP3 patch headers from the given I<patch> "
+"files and builds a changelog entry for each patch. If the patch author "
+"differs from the one detected from the B<DEBEMAIL>, B<NAME>, B<DEBEMAIL>, or "
+"B<EMAIL> environment variables, ``Thanks to I<author> E<lt>I<email>E<gt>'' "
+"is added to the changelog entry for that patch. Any B<bug-debian> or B<bug-"
+"ubuntu> fields are added as ``Closes'' to the changelog entry. The "
+"generated changelog entries are passed to B<debchange> as an argument along "
+"with the given I<dch_options>."
+msgstr ""
+"B<dep3changelog> extrai os cabeçalhos de patch DEP3 dos ficheiros I<patch> "
+"fornecidos e compila uma entrada de registo de alterações para cada patch. "
+"Se o autor da patch diferir daquele detetado a partir das variáveis de "
+"ambiente B<DEBEMAIL>, B<NAME>, B<DEBEMAIL>, ou B<EMAIL>, é acrescentado "
+"``Thanks to I<author> E<lt>I<email>E<gt>'' à entrada changelog para essa "
+"patch. Quaisquer campos B<bug-debian> ou B<bug-ubuntu> são adicionados como "
+"``Closes'' à entrada changelog. As entradas de changelog geradas são "
+"passadas ao B<debchange> como um argumento juntamente com as I<dch_options> "
+"dadas."
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:28
+msgid "Steve Langasek E<lt>vorlon@debian.orgE<gt>"
+msgstr "Steve Langasek E<lt>vorlon@debian.orgE<gt>"
+
+#. type: Plain text
+#: ../scripts/dep3changelog.1:29 ../scripts/list-unreleased.1:21
+msgid "B<debchange>(1)"
+msgstr "B<debchange>(1)"
+
+#. type: TH
+#: ../doc/devscripts.1:1
+#, no-wrap
+msgid "DEVSCRIPTS"
+msgstr "DEVSCRIPTS"
+
+#. type: Plain text
+#: ../doc/devscripts.1:4
+msgid "devscripts - scripts to ease the lives of Debian developers"
+msgstr "devscripts - scripts para facilitar a vida de desenvolvedores Debian"
+
+#. type: Plain text
+#: ../doc/devscripts.1:12
+msgid ""
+"The B<devscripts> package provides a collection of scripts which may be of "
+"use to Debian developers and others wishing to build Debian packages. For a "
+"summary of the available scripts, please see the file I</usr/share/doc/"
+"devscripts/README.gz>, and for full details, please see the individual "
+"manpages. They are contributed by multiple developers; for details of the "
+"authors, please see the code or manpages."
+msgstr ""
+"O pacote B<devscripts> fornece uma coleção de scripts que podem ser úteis "
+"para desenvolvedores Debian e outros que desejem compilar pacotes Debian. "
+"Para um sumário dos scripts disponíveis, por favor veja o ficheiro I</usr/"
+"share/doc/devscripts/README.gz>, e para todos os detalhes, por favor veja os "
+"manuais individuais. Eles são contribuídos por múltiplos desenvolvedores; "
+"para detalhes dos autores, por favor veja o código ou os manuais."
+
+#. type: Plain text
+#: ../doc/devscripts.1:16
+#, fuzzy
+#| msgid ""
+#| "Also, the directory I</usr/share/doc/devscripts/examples> contains "
+#| "examples of B<procmail> and B<exim> scripts for sorting mail arriving to "
+#| "Debian mailing lists."
+msgid ""
+"Also, the directory I</usr/share/doc/devscripts/examples> contains an "
+"example B<exim> script for sorting mail arriving to Debian mailing lists."
+msgstr ""
+"Também, o directório I</usr/share/doc/devscripts/examples> contém exemplos "
+"de scripts de B<procmail> e B<exim> para ordenar o mail que chega às listas "
+"de mail de Debian."
+
+#. type: Plain text
+#: ../doc/devscripts.1:20
+msgid ""
+"Several scripts of the devscripts suite use the following environment "
+"variables. Check the man pages of individual scripts for more details on how "
+"the variables are used."
+msgstr ""
+"Vários scripts da suite devscripts usam as seguintes variáveis de ambiente. "
+"Veja os manuais individuais dos scripts para mais detalhes sobre como as "
+"variáveis são usadas."
+
+#. type: IX
+#: ../doc/devscripts.1:20
+#, no-wrap
+msgid "Header"
+msgstr "Cabeçalho"
+
+#. type: IP
+#: ../doc/devscripts.1:21
+#, no-wrap
+msgid "\\s-1DEBEMAIL\\s0"
+msgstr "\\s-1DEBEMAIL\\s0"
+
+#. type: IX
+#: ../doc/devscripts.1:22 ../doc/devscripts.1:25
+#, no-wrap
+msgid "Item"
+msgstr "Item"
+
+#. type: =item
+#: ../doc/devscripts.1:22 ../scripts/ltnu.pod:74
+#, no-wrap
+msgid "DEBEMAIL"
+msgstr "DEBEMAIL"
+
+#. type: Plain text
+#: ../doc/devscripts.1:24
+msgid "Email of the person acting on a given Debian package via devscripts."
+msgstr "Email da pessoa que actua num dado pacote Debian via devscripts."
+
+#. type: IP
+#: ../doc/devscripts.1:24
+#, no-wrap
+msgid "\\s-1DEBFULLNAME\\s0"
+msgstr "\\s-1DEBFULLNAME\\s0"
+
+#. type: IX
+#: ../doc/devscripts.1:25
+#, no-wrap
+msgid "DEBFULLNAME"
+msgstr "DEBFULLNAME"
+
+#. type: Plain text
+#: ../doc/devscripts.1:28
+msgid ""
+"Full name (first + family) of the person acting on a given Debian package "
+"via devscripts."
+msgstr ""
+"Nome completo (primeiro + apelido) da pessoa que actua num dado pacote "
+"Debian via devscripts."
+
+#. type: SH
+#: ../doc/devscripts.1:28
+#, no-wrap
+msgid "SCRIPTS"
+msgstr "SCRIPTS"
+
+#. type: Plain text
+#: ../doc/devscripts.1:31
+msgid ""
+"Here is the complete list of available devscripts. See their man pages for "
+"additional documentation."
+msgstr ""
+"Aqui está a lista completa dos devscripts disponíveis. Veja os seus manuais "
+"para documentação adicional."
+
+#. type: IP
+#: ../doc/devscripts.1:31
+#, no-wrap
+msgid "I<annotate-output>(1)"
+msgstr "I<annotate-output>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:33
+msgid ""
+"run a command and prepend time and stream (O for stdout, E for stderr) for "
+"every line of output."
+msgstr ""
+"corre um comando e prefixa hora e fluxo (O para stdout, E para stderr) para "
+"cada linha a escrever."
+
+#. type: IP
+#: ../doc/devscripts.1:33
+#, no-wrap
+msgid "I<archpath>(1)"
+msgstr "I<archpath>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:35
+msgid ""
+"Prints arch (tla/Bazaar 1.x) package names. Also supports calculating the "
+"package names for other branches. [tla]"
+msgstr ""
+"Escreve nomes de pacote arch (tla/Bazaar 1.x). Também suporta calcular os "
+"nomes de pacotes para outros ramos. [tla]"
+
+#. type: IP
+#: ../doc/devscripts.1:35
+#, no-wrap
+msgid "I<bts>(1)"
+msgstr "I<bts>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:37
+msgid ""
+"A command-line tool for accessing the Debian Bug Tracking System, both to "
+"send mails to control@bts.debian.org and to access the web pages and SOAP "
+"interface of the BTS. [www-browser, libauthen-sasl-perl, libsoap-lite-perl, "
+"liburi-perl, libwww-perl, bsd-mailx | mailx]"
+msgstr ""
+"Uma ferramenta de linha de comandos para aceder ao Debian Bug Tracking "
+"System, tanto para enviar mails para control@bts.debian.org como para aceder "
+"às páginas web e interface SOAP do BTS. [www-browser, libauthen-sasl-perl, "
+"libsoap-lite-perl, liburi-perl, libwww-perl, bsd-mailx | mailx]"
+
+#. type: IP
+#: ../doc/devscripts.1:37
+#, no-wrap
+msgid "I<build-rdeps>(1)"
+msgstr "I<build-rdeps>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:39
+msgid ""
+"Searches for all packages that build-depend on a given package. [dctrl-"
+"tools, dose-extra, libdpkg-perl]"
+msgstr ""
+"Procura por todos os pacotes cuja compilação depende dum determinado pacote. "
+"[dctrl-tools, dose-extra, libdpkg-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:39
+#, no-wrap
+msgid "I<chdist>(1)"
+msgstr "I<chdist>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:41
+msgid "tool to easily play with several distributions. [dctrl-tools]"
+msgstr ""
+"ferramenta para lidar facilmente com várias distribuições. [dctrl-tools]"
+
+#. type: IP
+#: ../doc/devscripts.1:41
+#, no-wrap
+msgid "I<checkbashisms>(1)"
+msgstr "I<checkbashisms>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:43
+msgid ""
+"check whether a /bin/sh script contains any common bash-specific constructs."
+msgstr ""
+"verifica se um script /bin/sh contém quaisquer construções específicas de "
+"bash comuns"
+
+#. type: IP
+#: ../doc/devscripts.1:43
+#, no-wrap
+msgid "I<cowpoke>(1)"
+msgstr "I<cowpoke>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:45
+msgid ""
+"upload a Debian source package to a cowbuilder host and build it, optionally "
+"also signing and uploading the result to an incoming queue. [ssh-client]"
+msgstr ""
+"envia um pacote fonte Debian para uma máquina cowbuilder e compila-o, "
+"opcionalmente também o assina e actualiza o resultado numa fila de chegados. "
+"[ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:45
+#, no-wrap
+msgid "I<cvs-debi, cvs-debc>(1)"
+msgstr "I<cvs-debi, cvs-debc>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:47
+msgid ""
+"wrappers around debi and debc respectively (see below) which allow them to "
+"be called from the CVS working directory. [cvs-buildpackage]"
+msgstr ""
+"invólucros em volta de debi e debc respetivamente (veja em baixo) os quais "
+"permitem-lhes serem chamados a partir de um directório de trabalho CVS. [cvs-"
+"buildpackage]"
+
+#. type: IP
+#: ../doc/devscripts.1:47
+#, no-wrap
+msgid "I<cvs-debrelease>(1)"
+msgstr "I<cvs-debrelease>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:49
+msgid ""
+"wrapper around debrelease which allows it to be called from the CVS working "
+"directory. [cvs-buildpackage, dupload | dput, ssh-client]"
+msgstr ""
+"invólucro em volta de debrelease que lhe permite ser chamado a partir do "
+"directório de trabalho CVS. [cvs-buildpackage, dupload | dput, ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:49
+#, no-wrap
+msgid "I<cvs-debuild>(1)"
+msgstr "I<cvs-debuild>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:51
+msgid ""
+"A wrapper for cvs-buildpackage to use debuild as its package building "
+"program. [cvs-buildpackage, fakeroot, lintian, gnupg |gnupg2]"
+msgstr ""
+"Um invólucro para cvs-buildpackage para usar debuild como o seu programa de "
+"compilação de pacotes. [cvs-buildpackage, fakeroot, lintian, gnupg |gnupg2]"
+
+#. type: IP
+#: ../doc/devscripts.1:51
+#, no-wrap
+msgid "I<dcmd>(1)"
+msgstr "I<dcmd>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:53
+msgid ""
+"run a given command replacing the name of a .changes or .dsc file with each "
+"of the files referenced therein. *"
+msgstr ""
+"corre um dado comando substituindo o nome de um ficheiro .changes ou .dsc "
+"com cada um dos ficheiro referenciado nesse lugar. *"
+
+#. type: IP
+#: ../doc/devscripts.1:53
+#, no-wrap
+msgid "I<dd-list>(1)"
+msgstr "I<dd-list>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:55
+msgid "given a list of packages, pretty-print it ordered by maintainer. *"
+msgstr ""
+"dando uma lista de pacotes, escreve-a agradavelmente ordenada pelo "
+"maintainer. *"
+
+#. type: IP
+#: ../doc/devscripts.1:55
+#, no-wrap
+msgid "I<debbisect>(1)"
+msgstr "I<debbisect>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:57
+msgid ""
+"bisect snapshot.debian.org to find which change in the archive introduced a "
+"certain problem. [mmdebstrap, python3-debian]"
+msgstr ""
+"bifurca snapshot.debian.org para descobrir qual mudança no arquivo "
+"introduziu um determinado problema. [mmdebstrap, python3-debian]"
+
+#. type: IP
+#: ../doc/devscripts.1:57
+#, no-wrap
+msgid "I<debc>(1)"
+msgstr "I<debc>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:59
+msgid ""
+"List contents of current package. Do this after a successful \"debuild\" to "
+"see if the package looks all right."
+msgstr ""
+"Lista o conteúdo do pacote actual. Faz isto após uma \"reconstrução\" com "
+"sucesso para ver se está tudo bem com o pacote."
+
+#. type: IP
+#: ../doc/devscripts.1:59
+#, no-wrap
+msgid "I<debchange (abbreviation dch)>(1)"
+msgstr "I<debchange (abbreviation dch)>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:61
+msgid ""
+"Modifies debian/changelog and manages version numbers for you. It will "
+"either increment the version number or add an entry for the current version, "
+"depending upon the options given to it. [libdistro-info-perl, libsoap-lite-"
+"perl]*"
+msgstr ""
+"Modifica debian/changelog e gere números de versões por si. Irá ou "
+"incrementar o número da versão ou adicionar uma entrada à versão actual, "
+"dependendo das opções que lhe forem dadas. [libdistro-info-perl, libsoap-"
+"lite-perl]*"
+
+#. type: IP
+#: ../doc/devscripts.1:61
+#, no-wrap
+msgid "I<debcheckout>(1)"
+msgstr "I<debcheckout>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:63
+msgid "checkout the development repository of a Debian package. *"
+msgstr ""
+"faz checkout (copia) o repositório de desenvolvimento de um pacote Debian. *"
+
+#. type: IP
+#: ../doc/devscripts.1:63
+#, no-wrap
+msgid "I<debclean>(1)"
+msgstr "I<debclean>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:65
+msgid ""
+"Clean a Debian source tree. Debclean will clean all Debian source trees "
+"below the current directory, and if requested, also remove all files that "
+"were generated from these source trees (that is .deb, .dsc and .changes "
+"files). It will keep the .diffs and original files, though, so that the "
+"binaries and other files can be rebuilt if necessary. [fakeroot]*"
+msgstr ""
+"Limpa uma árvore fonte Debian. O Debclean irá limpar árvores de fontes "
+"Debian abaixo do directório actual, e se for pedido, também remove todos os "
+"ficheiros que foram gerados a partir destas árvores fonte (isto é, "
+"ficheiros .deb, .dsc e .changes). No entanto irá manter os .diffs e os "
+"ficheiros originais, para que os binários e outros ficheiros possam ser re-"
+"compilados se necessário. [fakeroot]*"
+
+#. type: IP
+#: ../doc/devscripts.1:65
+#, no-wrap
+msgid "I<debcommit>(1)"
+msgstr "I<debcommit>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:67
+msgid ""
+"Commits changes to cvs, darcs, svn, svk, tla, bzr, git, or hg, using new "
+"entries in debian/changelog as the commit message. Also supports tagging "
+"Debian package releases. [cvs | darcs | subversion | svk | tla | bzr | git-"
+"core | mercurial, libtimedate-perl]"
+msgstr ""
+"Envia /Commits) alterações para cvs, darcs, svn, svk, tla, bzr, git, ou hg, "
+"usando novas entradas em debian/changelog como a mensagem de envio. Também "
+"suporta etiquetagem de lançamentos de pacotes Debian. [cvs | darcs | "
+"subversion | svk | tla | bzr | git-core | mercurial, libtimedate-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:67
+#, no-wrap
+msgid "I<debdiff>(1)"
+msgstr "I<debdiff>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:69
+msgid ""
+"A program which examines two .deb files or two .changes files and reports on "
+"any difference found in their file lists. Useful for ensuring that no files "
+"were inadvertently lost between versions. Can also examine two .dsc files "
+"and report on the changes between source versions. For a deeper comparison "
+"one can use the diffoscope package. [wdiff, patchutils]*"
+msgstr ""
+"Um programa que examina dois ficheiros .deb ou dois ficheiros .changes e "
+"reporta quaisquer diferenças encontradas na sua lista de ficheiros. Útil "
+"para assegurar que não foram perdidos ficheiros inadvertidamente entre "
+"versões. Também pode examinar dois ficheiros .dsc e reportar as alterações "
+"entre versões da fonte. Para uma comparação mais profunda podemos usar o "
+"pacote diffoscope. [wdiff, patchutils]*"
+
+#. type: IP
+#: ../doc/devscripts.1:69
+#, no-wrap
+msgid "I<debdiff-apply>(1)"
+msgstr "I<debdiff-apply>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:71
+msgid ""
+"Apply unified diffs of two Debian source packages, such as those generated "
+"by debdiff, to a target Debian source package. Any changes to debian/"
+"changelog are dealt with specially, to avoid the conflicts that changelog "
+"diffs typically produce when applied naively. May be used to check that old "
+"patches still apply to newer versions of those packages. [python3-debian, "
+"python3-unidiff, quilt]"
+msgstr ""
+"Aplica diffs unificados de dois pacotes fonte Debian, tal como aqueles "
+"gerados pelo debdiff, a um pacote fonte Debian alvo. Quaisquer alterações a "
+"debian/changelog são especialmente lidadas, para evitar os conflitos que os "
+"diffs de changelog produzem tipicamente quando aplicados ingenuamente. Pode "
+"ser usado para verificar se patches antigas ainda se aplicam às versões "
+"recentes desses pacotes. [python3-debian, python3-unidiff, quilt]"
+
+#. type: IP
+#: ../doc/devscripts.1:71
+#, no-wrap
+msgid "I<debi>(1)"
+msgstr "I<debi>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:73
+msgid ""
+"Installs the current package by using the setuid root debpkg script "
+"described below. It assumes that the current package has just been built "
+"(for example by debuild), and the .deb lives in the parent directory, and "
+"will effectively run dpkg -i on the .deb. The ability to install the "
+"package with a very short command is very useful when troubleshooting "
+"packages."
+msgstr ""
+"Instala o pacote actual ao usar o script debpkg setuid root descrito em "
+"baixo. Assume que o pacote actual acabou de ser compilado (por exemplo pelo "
+"debuild), e o .deb vive no directório pai, e irá efectivamente correr dpkg -"
+"i no .deb. A habilidade de instalar o pacote com um comando muito curto é "
+"muito útil quando despistamos problemas com pacotes."
+
+#. type: IP
+#: ../doc/devscripts.1:73
+#, no-wrap
+msgid "I<debootsnap>(1)"
+msgstr "I<debootsnap>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:75
+msgid ""
+"Combines debootstrap and snapshot.debian.org to create a chroot containing "
+"exactly the requested selection of packages. This can be used to re-create a "
+"chroot from the past, for example to reproduce a bug. The tool is also used "
+"by debrebuild to build a package in a chroot with build dependencies in the "
+"same version as recorded in the buildinfo file. [apt-utils, dpkg-dev, "
+"equivs, mmdebstrap, python3-pycurl]"
+msgstr ""
+"Combina debootstrap e snapshot.debian.org para criar uma chroot que contém "
+"exactamente a selecção de pacotes requerida. Isto pode ser usado para re-"
+"criar uma chroot do passado, por exemplo para reproduzir um bug. A "
+"ferramenta é também usada pelo debrebuild para compilar um pacote numa "
+"chroot com dependências de compilação na mesma versão como registado no "
+"ficheiro buildinfo. [apt-utils, dpkg-dev, equivs, mmdebstrap, python3-pycurl]"
+
+#. type: IP
+#: ../doc/devscripts.1:75
+#, no-wrap
+msgid "I<debpkg>(1)"
+msgstr "I<debpkg>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:77
+msgid ""
+"A wrapper for dpkg used by debi to allow convenient testing of packages. "
+"For debpkg to work, it needs to be made setuid root, and this needs to be "
+"performed by the sysadmin -- it is not installed as setuid root by default. "
+"(Note that being able to run a setuid root debpkg is effectively the same as "
+"having root access to the system, so this should be done with caution.) "
+"Having debpkg as a wrapper for dpkg can be a Good Thing (TM), as it "
+"decreases the potential for damage by accidental wrong use of commands in "
+"superuser mode (e.g., an inadvertent rm -rf * in the wrong directory is "
+"disastrous as many can attest to)."
+msgstr ""
+"Um invólucro para dpkg usando pelo debi para permitir testes convenientes de "
+"pacotes. Para o debpkg funcionar, precisa de ser tornado setuid root, e "
+"isto precisa ser feito pelo administrador do sistema -- não é instalado como "
+"setuid root por predefinição. (Note que ao ser capaz de correr o debpkg com "
+"setuid root é efectivamente o mesmo que ter acesso de root ao sistema, assim "
+"isto deve ser feito com cautela.) Ter o debpkg como um invólucro para o dpkg "
+"pode ser uma Coisa Boa (TM), pois diminui o potencial de danos por mau uso "
+"acidental de comandos em modo de super utilizador (ex. um rm -rf * "
+"inadvertido no directório errado é desastroso e muitos podem atesta-lo)."
+
+#. type: IP
+#: ../doc/devscripts.1:77
+#, no-wrap
+msgid "I<debrelease>(1)"
+msgstr "I<debrelease>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:79
+msgid ""
+"A wrapper around dupload or dput which figures out which version to upload, "
+"and then calls dupload or dput to actually perform the upload. [dupload | "
+"dput, ssh-client]"
+msgstr ""
+"Um invólucro em volta de dupload ou dput que descobre qual a versão a "
+"enviar, e depois chama o dupload ou dput para eventualmente efetuarem o "
+"envio. [dupload | dput, ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:79
+#, no-wrap
+msgid "I<debrebuild>(1)"
+msgstr "I<debrebuild>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:81
+msgid ""
+"A script that provided a .buildinfo file reports the instructions on how to "
+"try to reproduce the reported build. [sbuild | mmdebstrap, python3-pycurl, "
+"libdpkg-perl]"
+msgstr ""
+"Um script que dando-lhe um ficheiro .buildinfo reporta as instruções de como "
+"reproduzir a compilação reportada. [sbuild | mmdebstrap, python3-pycurl, "
+"libdpkg-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:81
+#, no-wrap
+msgid "I<debrepro>(1)"
+msgstr "I<debrepro>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:83
+msgid ""
+"A script that tests reproducibility of Debian packages. It will build a "
+"given source directory twice, with a set of variation between the first and "
+"second build, and compare the binary packages produced. If diffoscope is "
+"installed, it is used to compare non-matching binaries. If disorderfs is "
+"installed, it is used during the build to inject non-determinism in "
+"filesystem listing operations. [faketime, diffoscope, disorderfs]"
+msgstr ""
+"Um script que testa a reprodutibilidade de pacotes Debian. Irá compilar um "
+"dado directório fonte duas vezes, com um conjunto de variações entre a "
+"primeira e segunda compilação, e compara os pacotes binário produzidos. Se o "
+"diffoscope estiver instalado, é usado para comparar binários não-iguais. Se "
+"o disorderfs estiver instalado, é usado durante a compilação para injectar "
+"não-determinismos em operações de listagem do sistema de ficheiros. "
+"[faketime, diffoscope, disorderfs]"
+
+#. type: IP
+#: ../doc/devscripts.1:83
+#, no-wrap
+msgid "I<debrsign>(1)"
+msgstr "I<debrsign>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:85
+msgid ""
+"This transfers a .changes/.dsc pair to a remote machine for signing, and "
+"runs debsign on the remote machine over an SSH connection. [gnupg | gnupg2, "
+"debian-keyring, ssh-client]"
+msgstr ""
+"Isto transfere um par .changes/.dsc para uma máquina remota para assinar, e "
+"corre debsign na máquina remota por uma ligação SSH. [gnupg | gnupg2, debian-"
+"keyring, ssh-client]"
+
+#. type: IP
+#: ../doc/devscripts.1:85
+#, no-wrap
+msgid "I<debsign>(1)"
+msgstr "I<debsign>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:87
+msgid ""
+"Use GNU Privacy Guard to sign the changes (and possibly dsc) files created "
+"by running dpkg-buildpackage with no-sign options. Useful if you are "
+"building a package on a remote machine and wish to sign it on a local one. "
+"This script is capable of automatically downloading the .changes and .dsc "
+"files from a remote machine. [gnupg |gnupg2, debian-keyring, ssh-client]*"
+msgstr ""
+"Usa GNU Privacy Guard para assinar ficheiros changes (e possivelmente dsc) "
+"criados ao correr dpkg-buildpackage sem opções de assinatura. Útil se você "
+"estiver a compilar um pacote numa máquina remota e deseja assina-lo numa "
+"local. Este script é capaz de descarregar automaticamente os ficheiros ."
+"changes e.dsc da máquina remota. [gnupg |gnupg2, debian-keyring, ssh-client]*"
+
+#. type: IP
+#: ../doc/devscripts.1:87
+#, no-wrap
+msgid "I<debsnap>(1)"
+msgstr "I<debsnap>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:89
+msgid ""
+"grab packages from https://snapshot.debian.org [libwww-perl, libjson-perl]"
+msgstr ""
+"obtém pacotes de https://snapshot.debian.org [libwww-perl, libjson-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:89
+#, no-wrap
+msgid "I<debuild>(1)"
+msgstr "I<debuild>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:91
+msgid ""
+"A wrapper for building a package (i.e., dpkg-buildpackage) to avoid problems "
+"with insufficient permissions and wrong paths etc. Debuild will set up the "
+"proper environment for building a package. Debuild will use the fakeroot "
+"program to build the package by default, but can be instructed to use any "
+"other gain-root command, or can even be installed setuid root. Debuild can "
+"also be used to run various of the debian/rules operations with the same "
+"root-gaining procedure. Debuild will also run lintian to check that the "
+"package does not have any major policy violations. [fakeroot, lintian, gnupg "
+"| gnupg2]*"
+msgstr ""
+"Um invólucro para compilar um pacote (isto é., dpkg-buildpackage) para "
+"evitar problemas com permissões insuficientes e caminhos errados etc. O "
+"Debuild irá definir o ambiente apropriado para compilar um pacote. O Debuild "
+"irá usar o programa fakeroot por predefinição para compilar o pacote, mas "
+"pode ser instruído para usar qualquer outro comando de ganhar root, ou pode "
+"até ser instalado com setuid root. O Debuild pode também ser usado para "
+"correr várias das operações debian/rules com o mesmo procedimento de obter "
+"root. O Debuild irá também correr o lintian para verificar que o pacote não "
+"tem grandes violações de política. [fakeroot, lintian, gnupg | gnupg2]*"
+
+#. type: IP
+#: ../doc/devscripts.1:91
+#, no-wrap
+msgid "I<deb-janitor>(1)"
+msgstr "I<deb-janitor>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:93
+msgid "command-line client for interacting with the Debian Janitor."
+msgstr ""
+"cliente de linha de comandos para interagir com o Janitor (zelador) de "
+"Debian."
+
+#. type: IP
+#: ../doc/devscripts.1:93
+#, no-wrap
+msgid "I<deb-reversion>(1)"
+msgstr "I<deb-reversion>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:95
+msgid ""
+"increases a binary package version number and repacks the package, useful "
+"for porters and the like."
+msgstr ""
+"Incrementa um número de versão de pacote binário e re-empacota o pacote, "
+"útil para portadores e algo do tipo."
+
+#. type: IP
+#: ../doc/devscripts.1:95
+#, no-wrap
+msgid "I<deb-why-removed>(1)"
+msgstr "I<deb-why-removed>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:97
+msgid "shows the reason a package was removed from the archive. [libdpkg-perl]"
+msgstr ""
+"mostra a razão de um pacote ter sido removido do arquivo. [libdpkg-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:97
+#, no-wrap
+msgid "I<dep3changelog>(1)"
+msgstr "I<dep3changelog>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:99
+msgid "generate a changelog entry from a DEP3-style patch header."
+msgstr ""
+"gera uma entrada changelog a partir dum cabeçalho de patch estilo DEP3."
+
+#. type: IP
+#: ../doc/devscripts.1:99
+#, no-wrap
+msgid "I<desktop2menu>(1)"
+msgstr "I<desktop2menu>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:101
+msgid ""
+"given a freedesktop.org desktop file, generate a skeleton for a menu file. "
+"[libfile-desktopentry-perl]"
+msgstr ""
+"dando-lhe um ficheiro desktop de freedesktop.org, gera um esqueleto para um "
+"ficheiro de menu. [libfile-desktopentry-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:101
+#, no-wrap
+msgid "I<dget>(1)"
+msgstr "I<dget>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:103
+msgid ""
+"Downloads Debian source and binary packages. Point at a .changes or .dsc to "
+"download all references files. Specify a package name to download it from "
+"the configured apt repository. [wget | curl]"
+msgstr ""
+"Descarrega pacotes binário e fonte Debian. Aponta a um .changes ou .dsc para "
+"descarregar todos os ficheiros referenciados. Especifique um nome de pacote "
+"para o descarregar do repositório apt configurado. [wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:103
+#, no-wrap
+msgid "I<diff2patches>(1)"
+msgstr "I<diff2patches>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:105
+msgid ""
+"extracts patches from a .diff.gz file placing them under debian/ or, if "
+"present, debian/patches. [patchutils]"
+msgstr ""
+"extrai patches de um ficheiro .diff.gz e coloca-as sub debian/ ou, se "
+"presente, debian/patches. [patchutils]"
+
+#. type: IP
+#: ../doc/devscripts.1:105
+#, no-wrap
+msgid "I<dpkg-depcheck, dpkg-genbuilddeps>(1)"
+msgstr "I<dpkg-depcheck, dpkg-genbuilddeps>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:107
+msgid ""
+"Runs a specified command (such as debian/rules build) or dpkg-buildpackage, "
+"respectively, to determine the packages used during the build process. This "
+"information can be helpful when trying to determine the packages needed in "
+"the Build-Depends etc. lines in the debian/control file. [build-essential, "
+"strace]"
+msgstr ""
+"Corre um comando especificado (tal como debian/rules build) ou dpkg-"
+"buildpackage, respetivamente, para determinar os usados durante o processo "
+"de compilação. Esta informação pode ser útil quando se tenta determinar os "
+"pacotes necessários nas linhas Build-Depends etc. no ficheiro debian/"
+"control. [build-essential, strace]"
+
+#. type: IP
+#: ../doc/devscripts.1:107
+#, no-wrap
+msgid "I<dscextract>(1)"
+msgstr "I<dscextract>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:109
+msgid "extract a single file from a Debian source package. [patchutils]"
+msgstr "extrai um ficheiro único de um pacote fonte Debian. [patchutils]"
+
+#. type: IP
+#: ../doc/devscripts.1:109
+#, no-wrap
+msgid "I<dscverify>(1)"
+msgstr "I<dscverify>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:111
+msgid ""
+"check the signature and MD5 sums of a dsc file against the most current "
+"Debian keyring on your system. [gnupg | gnupg2, debian-keyring]"
+msgstr ""
+"verifica a assinatura e sumários MD5 de um ficheiro dsc contra o chaveiro "
+"Debian mais actual no seu sistema. [gnupg | gnupg2, debian-keyring]"
+
+#. type: IP
+#: ../doc/devscripts.1:111
+#, no-wrap
+msgid "I<edit-patch>(1)"
+msgstr "I<edit-patch>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:113
+msgid ""
+"add/edit a patch for a source package and commit the changes. [quilt | "
+"dpatch | cdbs]"
+msgstr ""
+"adiciona/edita uma patch para um pacote fonte e envia as alterações. [quilt "
+"| dpatch | cdbs]"
+
+#. type: IP
+#: ../doc/devscripts.1:113
+#, no-wrap
+msgid "I<getbuildlog>(1)"
+msgstr "I<getbuildlog>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:115
+msgid "download package build logs from Debian auto-builders. [wget]"
+msgstr ""
+"descarrega relatórios de compilação de pacotes de auto-compiladores Debian. "
+"[wget]"
+
+#. type: IP
+#: ../doc/devscripts.1:115
+#, no-wrap
+msgid "I<git-deborig>(1)"
+msgstr "I<git-deborig>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:117
+msgid ""
+"try to produce Debian orig.tar using git-archive(1). [libdpkg-perl, libgit-"
+"wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, libtry-tiny-"
+"perl]"
+msgstr ""
+"tenta produzir orig.tar Debian usando git-archive(1). [libdpkg-perl, libgit-"
+"wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, libtry-tiny-"
+"perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:117
+#, no-wrap
+msgid "I<grep-excuses>(1)"
+msgstr "I<grep-excuses>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:119
+msgid ""
+"grep britney's excuses to find out what is happening to your packages. "
+"[libdbd-pg-perl, libterm-size-perl, libyaml-syck-perl, wget, w3m]"
+msgstr ""
+"faz grep pelas desculpas da britney para descobrir o que está a acontecer "
+"aos seus pacotes. [libdbd-pg-perl, libterm-size-perl, libyaml-syck-perl, "
+"wget, w3m]"
+
+#. type: IP
+#: ../doc/devscripts.1:119
+#, no-wrap
+msgid "I<hardening-check>(1)"
+msgstr "I<hardening-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:121
+msgid "report the hardening characteristics of a set of binaries."
+msgstr ""
+"reporta as características de endurecimento de um conjunto de binários."
+
+#. type: IP
+#: ../doc/devscripts.1:121
+#, no-wrap
+msgid "I<list-unreleased>(1)"
+msgstr "I<list-unreleased>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:123
+msgid "searches for packages marked UNRELEASED in their changelog."
+msgstr "procura pacotes marcados UNRELEASED no seu changelog."
+
+#. type: IP
+#: ../doc/devscripts.1:123
+#, no-wrap
+msgid "I<ltnu (Long Time No Upload)>(1)"
+msgstr "I<ltnu (Long Time No Upload)>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:125
+msgid ""
+"List all uploads of packages by the given uploader or maintainer and display "
+"them ordered by the last upload of that package, oldest uploads first."
+msgstr ""
+"Lista todos os envios de pacotes feitos pelo uploader ou maintainer e mostra-"
+"os ordenados pelo último envio desse pacote, os envios mais antigos em "
+"primeiro lugar."
+
+#. type: IP
+#: ../doc/devscripts.1:125
+#, no-wrap
+msgid "I<manpage-alert>(1)"
+msgstr "I<manpage-alert>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:127
+msgid "locate binaries without corresponding manpages. [man-db]"
+msgstr "localiza binários sem manuais correspondentes. [man-db]"
+
+#. type: IP
+#: ../doc/devscripts.1:127
+#, no-wrap
+msgid "I<mass-bug>(1)"
+msgstr "I<mass-bug>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:129
+msgid "mass-file bug reports. [bsd-mailx | mailx]"
+msgstr "gera ficheiro-em-massa de relatórios de bugs. [bsd-mailx | mailx]"
+
+#. type: IP
+#: ../doc/devscripts.1:129
+#, no-wrap
+msgid "I<mergechanges>(1)"
+msgstr "I<mergechanges>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:131
+msgid ""
+"merge .changes files from the same release but built on different "
+"architectures."
+msgstr ""
+"funde ficheiros .changes do mesmo lançamento mas de compilações para "
+"arquitecturas diferentes."
+
+#. type: IP
+#: ../doc/devscripts.1:131
+#, no-wrap
+msgid "I<mk-build-deps>(1)"
+msgstr "I<mk-build-deps>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:133
+msgid ""
+"Given a package name and/or control file, generate a binary package which "
+"may be installed to satisfy the build-dependencies of the given package. "
+"[equivs]"
+msgstr ""
+"Dando-lhe um nome de pacote e/ou ficheiro de controle, gera um pacote "
+"binário que pode ser instalado para satisfazer as dependências de compilação "
+"de um determinado pacote. [equivs]"
+
+#. type: IP
+#: ../doc/devscripts.1:133
+#, no-wrap
+msgid "I<mk-origtargz>(1)"
+msgstr "I<mk-origtargz>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:135
+msgid ""
+"Rename upstream tarball, optionally changing the compression and removing "
+"unwanted files. [libfile-which-perl, unzip, xz-utils, file]"
+msgstr ""
+"Renomeia o tarball de origem, opcionalmente alterando a compressão e "
+"removendo ficheiros não desejados. [libfile-which-perl, unzip, xz-utils, "
+"file]"
+
+#. type: IP
+#: ../doc/devscripts.1:135
+#, no-wrap
+msgid "I<namecheck>(1)"
+msgstr "I<namecheck>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:137
+msgid "Check project names are not already taken."
+msgstr "Verifica se os nomes de projetos não estão já tomados."
+
+#. type: IP
+#: ../doc/devscripts.1:137
+#, no-wrap
+msgid "I<nmudiff>(1)"
+msgstr "I<nmudiff>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:139
+msgid ""
+"prepare a diff of this version (presumably an NMU against the previously "
+"released version (as per the changelog) and submit the diff to the BTS. "
+"[patchutils, mutt]"
+msgstr ""
+"prepara um diff desta versão (presumivelmente um NMU) contra a versão "
+"previamente lançada (como pelo changelog) e submete o diff ao BTS. "
+"[patchutils, mutt]"
+
+#. type: IP
+#: ../doc/devscripts.1:139
+#, no-wrap
+msgid "I<origtargz>(1)"
+msgstr "I<origtargz>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:141
+msgid ""
+"fetch the orig tarball of a Debian package from various sources, and unpack "
+"it. [pristine-tar, pristine-lfs]"
+msgstr ""
+"vai buscar o tarball original de um pacote Debian a várias fontes, e "
+"desempacota-o. [pristine-tar, pristine-lfs]"
+
+#. type: IP
+#: ../doc/devscripts.1:141
+#, no-wrap
+msgid "I<plotchangelog>(1)"
+msgstr "I<plotchangelog>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:143
+msgid ""
+"display information from a changelog graphically using gnuplot. [libtimedate-"
+"perl, gnuplot]"
+msgstr ""
+"mostra informação graficamente de um registo de alterações usando gnuplot. "
+"[libtimedate-perl, gnuplot]"
+
+#. type: IP
+#: ../doc/devscripts.1:143
+#, no-wrap
+msgid "I<pts-subscribe>(1)"
+msgstr "I<pts-subscribe>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:145
+msgid ""
+"subscribe to the PTS (Package Tracking System) for a limited period of time. "
+"[bsd-mailx | mailx, at]"
+msgstr ""
+"subscreve ao PTS (Package Tracking System) por um período limitado de tempo. "
+"[bsd-mailx | mailx, at]"
+
+#. type: IP
+#: ../doc/devscripts.1:145
+#, no-wrap
+msgid "I<rc-alert>(1)"
+msgstr "I<rc-alert>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:147
+msgid "list installed packages which have release-critical bugs. [wget | curl]"
+msgstr ""
+"lista pacotes instalados com bugs críticos-de-lançamento. [wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:147
+#, no-wrap
+msgid "I<reproducible-check>(1)"
+msgstr "I<reproducible-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:149
+msgid ""
+"reports on the reproducible status of installed packages. For more details "
+"please see E<lt>https://reproducible-builds.orgE<gt>."
+msgstr ""
+"reporta sobre o estado reproduzível dos pacotes instalados. Para mais "
+"detalhes por favor veja E<lt>https://reproducible-builds.orgE<gt>."
+
+#. type: IP
+#: ../doc/devscripts.1:149
+#, no-wrap
+msgid "I<rmadison>(1)"
+msgstr "I<rmadison>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:151
+msgid ""
+"remotely query the Debian archive database about packages. [liburi-perl, "
+"wget | curl]"
+msgstr ""
+"consulta remotamente a base de dados do arquivo Debian acerca de pacotes. "
+"[liburi-perl, wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:151
+#, no-wrap
+msgid "I<sadt>(1)"
+msgstr "I<sadt>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:153
+msgid "run DEP-8 tests. [python3-debian, autodep8]"
+msgstr "corre testes DEP-8. [python3-debian, autodep8]"
+
+#. type: IP
+#: ../doc/devscripts.1:153
+#, no-wrap
+msgid "I<salsa>(1)"
+msgstr "I<salsa>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:155
+msgid ""
+"manipulates salsa.debian.org repositories and users [libgitlab-api-v4-perl]"
+msgstr ""
+"manipula repositórios e utilizadores de salsa.debian.org [libgitlab-api-v4-"
+"perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:155
+#, no-wrap
+msgid "I<suspicious-source>(1)"
+msgstr "I<suspicious-source>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:157
+msgid ""
+"output a list of files which are not common source files. [python3-magic]"
+msgstr ""
+"escreve uma lista de ficheiros que não são ficheiros de fonte comum. "
+"[python3-magic]"
+
+#. type: IP
+#: ../doc/devscripts.1:157
+#, no-wrap
+msgid "I<svnpath>(1)"
+msgstr "I<svnpath>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:159
+msgid ""
+"Prints the path to the Subversion repository of a Subversion checkout. Also "
+"supports calculating the paths for branches and tags in a repository "
+"independent fashion. Used by debcommit to generate svn tags. [subversion]"
+msgstr ""
+"Escreve o caminho para um repositório Subversion de um de checkout de "
+"Subversion. Também suporta calcular os caminhos para ramos e etiquetas numa "
+"moda independente do repositório. Usado pelo debcommit para gerar etiquetas "
+"svn. [subversion]"
+
+#. type: IP
+#: ../doc/devscripts.1:159
+#, no-wrap
+msgid "I<tagpending>(1)"
+msgstr "I<tagpending>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:161
+msgid ""
+"runs from a Debian source tree and tags bugs that are to be closed in the "
+"latest changelog as pending. [libsoap-lite-perl]"
+msgstr ""
+"corre a partir duma árvore fonte Debian e etiqueta bugs que estão para ser "
+"fechados no último changelog como pendentes. [libsoap-lite-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:161
+#, no-wrap
+msgid "I<transition-check>(1)"
+msgstr "I<transition-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:163
+msgid ""
+"Check a list of source packages for involvement in transitions for which "
+"uploads to unstable are currently blocked. [libwww-perl, libyaml-syck-perl]"
+msgstr ""
+"Verifica uma lista de pacotes fonte por envolvimento em transições para as "
+"os envios para unstable estão presentemente bloqueados. [libwww-perl, "
+"libyaml-syck-perl]"
+
+#. type: IP
+#: ../doc/devscripts.1:163
+#, no-wrap
+msgid "I<uscan>(1)"
+msgstr "I<uscan>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:165
+msgid ""
+"Automatically scan for and download upstream updates. Uscan can also call a "
+"program such as uupdate to attempt to update the Debianised version based on "
+"the new update. Whilst uscan could be used to release the updated version "
+"automatically, it is probably better not to without testing it first. Uscan "
+"can also verify detached OpenPGP signatures if upstream's signing key is "
+"known. [file, gpgv | gpgv2, gnupg | gnupg2, libfile-dirlist-perl, libfile-"
+"touch-perl, libfile-which-perl, liblwp-protocol-https-perl, libmoo-perl, "
+"libwww-perl, unzip, xz-utils]*"
+msgstr ""
+"Automaticamente sonda por e descarrega actualizações do autor. Uscan pode "
+"também chamar um programa como o uupdate para tentar actualizar uma versão "
+"Debianizada com base na nova actualização. Se o uscan poderia ser usado para "
+"lançar a versão actualizada automaticamente, provavelmente é melhor não sem "
+"primeiro a testar. Uscan pode também verificar assinaturas OpenPGP "
+"desanexadas se a chave de assinatura do autor for conhecida. [file, gpgv | "
+"gpgv2, gnupg | gnupg2, libfile-dirlist-perl, libfile-touch-perl, libfile-"
+"which-perl, liblwp-protocol-https-perl, libmoo-perl, libwww-perl, unzip, xz-"
+"utils]*"
+
+#. type: IP
+#: ../doc/devscripts.1:165
+#, no-wrap
+msgid "I<uupdate>(1)"
+msgstr "I<uupdate>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:167
+msgid ""
+"Update the package with an archive or patches from an upstream author. This "
+"will be of help if you have to update your package. It will try to apply "
+"the latest diffs to your package and tell you how successful it was. [patch]"
+msgstr ""
+"Actualiza o pacote com um arquivo ou patches do autor original. Isto será "
+"uma ajuda se você tiver que actualizar o seu pacote. Irá tentar aplicar os "
+"diffs mais recentes ao seu pacote e irá dizer-lhe o quanto sucesso teve. "
+"[patch]"
+
+#. type: IP
+#: ../doc/devscripts.1:167
+#, no-wrap
+msgid "I<what-patch>(1)"
+msgstr "I<what-patch>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:169
+msgid ""
+"determine what patch system, if any, a source package is using. [patchutils]"
+msgstr ""
+"determina qual sistema de patch um pacote fonte usa, se algum. [patchutils]"
+
+#. type: IP
+#: ../doc/devscripts.1:169
+#, no-wrap
+msgid "I<whodepends>(1)"
+msgstr "I<whodepends>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:171
+msgid "check which maintainers' packages depend on a package."
+msgstr "verifica quais pacotes de maintainer dependem de um pacote."
+
+#. type: IP
+#: ../doc/devscripts.1:171
+#, no-wrap
+msgid "I<who-permits-upload>(1)"
+msgstr "I<who-permits-upload>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:173
+msgid ""
+"Retrieve information about Debian Maintainer access control lists. [gnupg | "
+"gnupg2, libencode-locale-perl, libwww-perl, debian-keyring]"
+msgstr ""
+"Obtém informação acerca de listas de controle de acesso de Maintainer "
+"Debian. [gnupg | gnupg2, libencode-locale-perl, libwww-perl, debian-keyring]"
+
+#. type: IP
+#: ../doc/devscripts.1:173
+#, no-wrap
+msgid "I<who-uploads>(1)"
+msgstr "I<who-uploads>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:175
+msgid ""
+"determine the most recent uploaders of a package to the Debian archive. "
+"[gnupg | gnupg2, debian-keyring, debian-maintainers, wget]"
+msgstr ""
+"determina os uploaders mais recentes de um pacote para o arquivo Debian. "
+"[gnupg | gnupg2, debian-keyring, debian-maintainers, wget]"
+
+#. type: IP
+#: ../doc/devscripts.1:175
+#, no-wrap
+msgid "I<wnpp-alert>(1)"
+msgstr "I<wnpp-alert>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:177
+msgid ""
+"list installed packages which are orphaned or up for adoption. [wget | curl]"
+msgstr ""
+"lista pacotes instalados que estão órfãos ou para adoção. [wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:177
+#, no-wrap
+msgid "I<wnpp-check>(1)"
+msgstr "I<wnpp-check>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:179
+msgid ""
+"check whether there is an open request for packaging or intention to package "
+"bug for a package. [wget | curl]"
+msgstr ""
+"verifica se existe um bug de pedido aberto para empacotar ou intenção de "
+"empacotar para um pacote. [wget | curl]"
+
+#. type: IP
+#: ../doc/devscripts.1:179
+#, no-wrap
+msgid "I<wrap-and-sort>(1)"
+msgstr "I<wrap-and-sort>(1)"
+
+#. type: Plain text
+#: ../doc/devscripts.1:180
+msgid "wrap long lines and sort items in packaging files. [python3-debian]"
+msgstr ""
+"embrulha linhas longas e ordena itens em ficheiros de empacotamento. "
+"[python3-debian]"
+
+#. type: textblock
+#: ../scripts/dget.pl:567
+msgid "dget - Download Debian source and binary packages"
+msgstr "dget - Descarrega pacotes Debian fonte e binários"
+
+#. type: =item
+#: ../scripts/dget.pl:573
+msgid "B<dget> [I<options>] I<URL> ..."
+msgstr "B<dget> [I<options>] I<URL> ..."
+
+#. type: =item
+#: ../scripts/dget.pl:575
+msgid "B<dget> [I<options>] [B<--all>] I<package>[B<=>I<version>] ..."
+msgstr "B<dget> [I<options>] [B<--all>] I<package>[B<=>I<version>] ..."
+
+#. type: textblock
+#: ../scripts/dget.pl:581
+msgid ""
+"B<dget> downloads Debian packages. In the first form, B<dget> fetches the "
+"requested URLs. If this is a .dsc or .changes file, then B<dget> acts as a "
+"source-package aware form of B<wget>: it also fetches any files referenced "
+"in the .dsc/.changes file. The downloaded source is then checked with "
+"B<dscverify> and, if successful, unpacked by B<dpkg-source>."
+msgstr ""
+"B<dget> descarrega pacotes Debian. No primeiro formato, B<dget> obtém os "
+"URLs requisitados. Se isto for um ficheiro .dsc ou .changes, então o B<dget> "
+"actua como um formato ciente de pacote-fonte do B<wget>: também obtém "
+"quaisquer ficheiros referenciados no ficheiro .dsc/.changes. A fonte "
+"descarregada é depois verificada com B<dscverify> e, se com sucesso, "
+"desempacotada pelo B<dpkg-source>."
+
+#. type: textblock
+#: ../scripts/dget.pl:588
+msgid ""
+"In the second form, B<dget> downloads a I<binary> package (i.e., a I<.deb> "
+"file) from the Debian mirror configured in /etc/apt/sources.list(.d). "
+"Unlike B<apt-get install -d>, it does not require root privileges, writes to "
+"the current directory, and does not download dependencies. If a version "
+"number is specified, this version of the package is requested. With B<--"
+"all>, the list of all binaries for the source package I<package> is "
+"extracted from the output of C<apt-cache showsrc package>."
+msgstr ""
+"No segundo formato, B<dget> descarrega um pacote I<binário> (isto é. um "
+"ficheiro I<.deb>) a partir do espelho Debian configurado em /etc/apt/sources."
+"list(.d). A contrário de B<apt-get install -d>, não requer privilégios de "
+"root, escreve no directório actual, e não descarrega dependências. Se for "
+"especificado um número de versão, é requisitada esta versão do pacote. Com "
+"B<--all>, é extraída a lista de todos os binários para o pacote fonte "
+"I<package> a partir do resultado de C<apt-cache showsrc package>."
+
+#. type: textblock
+#: ../scripts/dget.pl:597
+msgid ""
+"In both cases dget is capable of getting several packages and/or URLs at "
+"once."
+msgstr ""
+"Em ambos os casos o dget é capaz de obter vários pacotes e/ou URLs de uma "
+"vez."
+
+#. type: textblock
+#: ../scripts/dget.pl:600
+msgid ""
+"(Note that I<.udeb> packages used by debian-installer are located in "
+"separate packages files from I<.deb> packages. In order to use I<.udebs> "
+"with B<dget>, you will need to have configured B<apt> to use a packages file "
+"for I<component>/I<debian-installer>)."
+msgstr ""
+"(Note que pacotes I<.udeb> usados pelo debian-installer estão localizados em "
+"ficheiros de pacotes separados dum pacote I<.deb>. De modo a usar I<.udebs> "
+"com o B<dget>, você vai precisar de ter o B<apt> configurado para usar um "
+"ficheiro packages para I<component>/I<debian-installer>)."
+
+#. type: textblock
+#: ../scripts/dget.pl:605
+msgid ""
+"Before downloading files listed in .dsc and .changes files, and before "
+"downloading binary packages, B<dget> checks to see whether any of these "
+"files already exist. If they do, then their md5sums are compared to avoid "
+"downloading them again unnecessarily. B<dget> also looks for matching files "
+"in I</var/cache/apt/archives> and directories given by the B<--path> option "
+"or specified in the configuration files (see below). Finally, if "
+"downloading (.orig).tar.gz or .diff.gz files fails, dget consults B<apt-get "
+"source --print-uris>. Download backends used are B<curl> and B<wget>, "
+"looked for in that order."
+msgstr ""
+"Antes de descarregar os ficheiros listados em ficheiros .dsc e .changes, e "
+"antes de descarregar pacotes binário, o B<dget> vê se algum destes ficheiros "
+"já existe. Se sim, então os seus sumários de verificação são comparados para "
+"evitar descarrega-los de novo desnecessariamente. O B<dget> também procura "
+"por ficheiro correspondentes em I</var/cache/apt/archives> e directórios "
+"dados pela opção B<--path> ou especificados nos ficheiros de configuração "
+"(veja abaixo). Finalmente, se a descarga dos ficheiros (.orig).tar.gz ou ."
+"diff.gz falhar, o dget consulta B<apt-get source --print-uris>. Os backends "
+"de descarga usados são B<curl> e B<wget>, procurados por esta ordem."
+
+#. type: textblock
+#: ../scripts/dget.pl:615
+msgid ""
+"B<dget> was written to make it easier to retrieve source packages from the "
+"web for sponsor uploads. For checking the package with B<debdiff>, the last "
+"binary version is available via B<dget> I<package>, the last source version "
+"via B<apt-get source> I<package>."
+msgstr ""
+"B<dget> foi escrito para facilitar a obtenção de pacotes fonte a partir da "
+"web para envios de patrocinador. Para verificar o pacote com B<debdiff>, a "
+"última versão binário está disponível via B<dget> I<package>, a última "
+"versão fonte via B<apt-get source> I<package>."
+
+#. type: textblock
+#: ../scripts/dget.pl:626
+msgid ""
+"Interpret I<package> as a source package name, and download all binaries as "
+"found in the output of \"apt-cache showsrc I<package>\". If I<package> is "
+"arch-qualified, then only binary packages which are \"Arch: all\", \"Arch: "
+"any\", or \"Arch: $arch\" will be downloaded."
+msgstr ""
+"Interpreta I<package> como o nome do pacote fonte, e descarrega todos os "
+"binários como encontrados no resultado de \"apt-cache showsrc I<package>\". "
+"Se I<package> tiver qualificação de arquitectura, então apenas serão "
+"descarregados os pacotes binário que forem \"Arch: all\", \"Arch: any\", ou "
+"\"Arch: $arch\"."
+
+#. type: =item
+#: ../scripts/dget.pl:631
+msgid "B<-b>, B<--backup>"
+msgstr "B<-b>, B<--backup>"
+
+#. type: textblock
+#: ../scripts/dget.pl:633
+msgid "Move files that would be overwritten to I<./backup>."
+msgstr "Move ficheiros que seriam sobrepostos para I<./backup>."
+
+#. type: textblock
+#: ../scripts/dget.pl:637
+msgid "Suppress B<wget>/B<curl> non-error output."
+msgstr "Suprime os resultados não-erro de B<wget>/B<curl>."
+
+#. type: =item
+#: ../scripts/dget.pl:639 ../scripts/origtargz.pl:134
+msgid "B<-d>, B<--download-only>"
+msgstr "B<-d>, B<--download-only>"
+
+#. type: textblock
+#: ../scripts/dget.pl:641
+msgid ""
+"Do not run B<dpkg-source -x> on the downloaded source package. This can "
+"only be used with the first method of calling B<dget>."
+msgstr ""
+"Não corre B<dpkg-source -x> no pacote fonte descarregado. Isto só pode ser "
+"usado com o primeiro método de chamar B<dget>."
+
+#. type: =item
+#: ../scripts/dget.pl:644
+msgid "B<-x>, B<--extract>"
+msgstr "B<-x>, B<--extract>"
+
+#. type: textblock
+#: ../scripts/dget.pl:646
+msgid ""
+"Run B<dpkg-source -x> on the downloaded source package to unpack it. This "
+"option is the default and can only be used with the first method of calling "
+"B<dget>."
+msgstr ""
+"Corre B<dpkg-source -x> no pacote fonte descarregado para o desempacotar. "
+"Esta opção é a predefinida e só pode ser usada com o primeiro método de "
+"chamar o B<dget>."
+
+#. type: =item
+#: ../scripts/dget.pl:650
+msgid "B<-u>, B<--allow-unauthenticated>"
+msgstr "B<-u>, B<--allow-unauthenticated>"
+
+#. type: textblock
+#: ../scripts/dget.pl:652
+msgid ""
+"Do not attempt to verify the integrity of downloaded source packages using "
+"B<dscverify>."
+msgstr ""
+"Não tenta verificar a integridade de pacotes fonte descarregados usando o "
+"B<dscverify>."
+
+#. type: =item
+#: ../scripts/dget.pl:655
+msgid "B<--build>"
+msgstr "B<--build>"
+
+#. type: textblock
+#: ../scripts/dget.pl:657
+msgid "Run B<dpkg-buildpackage -b -uc> on the downloaded source package."
+msgstr "Corre B<dpkg-buildpackage -b -uc> no pacote fonte descarregado."
+
+#. type: =item
+#: ../scripts/dget.pl:659
+msgid "B<--path> I<DIR>[B<:>I<DIR> ...]"
+msgstr "B<--path> I<DIR>[B<:>I<DIR> ...]"
+
+#. type: textblock
+#: ../scripts/dget.pl:661
+msgid ""
+"In addition to I</var/cache/apt/archives>, B<dget> uses the colon-separated "
+"list given as argument to B<--path> to find files with a matching md5sum. "
+"For example: \"--path /srv/pbuilder/result:/home/cb/UploadQueue\". If DIR "
+"is empty (i.e., \"--path ''\" is specified), then any previously listed "
+"directories or directories specified in the configuration files will be "
+"ignored. This option may be specified multiple times, and all of the "
+"directories listed will be searched; hence, the above example could have "
+"been written as: \"--path /srv/pbuilder/result --path /home/cb/UploadQueue\"."
+msgstr ""
+"Adicionalmente a I</var/cache/apt/archives>, B<dget> usa a lista separada "
+"por dois pontos fornecida como argumento para B<--path> para encontrar "
+"ficheiros com um md5sum correspondente. Por exemplo: \"--path /srv/pbuilder/"
+"result:/home/cb/UploadQueue\". Se DIR estiver vazia (isto é, é especificado "
+"\"--path ''\"), então quaisquer directórios listados previamente ou "
+"directórios especificados nos ficheiros de configuração serão ignorados. "
+"Esta opção pode ser especificada várias vezes, e todos os directórios "
+"listados serão sondados; assim, o exemplo de cima podia ter sido escrito "
+"como: \"--path /srv/pbuilder/result --path /home/cb/UploadQueue\"."
+
+#. type: =item
+#: ../scripts/dget.pl:672
+msgid "B<-k>, B<--insecure>"
+msgstr "B<-k>, B<--insecure>"
+
+#. type: textblock
+#: ../scripts/dget.pl:674
+msgid "Allow SSL connections to untrusted hosts."
+msgstr "Permite ligações SSL a máquinas não-de-confiança."
+
+#. type: =item
+#: ../scripts/dget.pl:676 ../scripts/salsa.pl:456
+msgid "B<--no-cache>"
+msgstr "B<--no-cache>"
+
+#. type: textblock
+#: ../scripts/dget.pl:678
+msgid "Bypass server-side HTTP caches by sending a B<Pragma: no-cache> header."
+msgstr ""
+"Ultrapassa caches HTTP do lado-servidor ao enviar um cabeçalho B<Pragma: no-"
+"cache>."
+
+#. type: textblock
+#: ../scripts/dget.pl:682
+msgid "Show a help message."
+msgstr "Mostra uma mensagem de ajuda."
+
+#. type: textblock
+#: ../scripts/dget.pl:686
+msgid "Show version information."
+msgstr "Mostra informação de versão."
+
+#. type: textblock
+#: ../scripts/dget.pl:692
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. Command "
+"line options can be used to override configuration file settings. "
+"Environment variable settings are ignored for this purpose. The currently "
+"recognised variable is:"
+msgstr ""
+"Os dois ficheiros de configuração F</etc/devscripts.conf> e F<~/.devscripts> "
+"são por essa ordem fonte para uma shell para definirem variáveis de "
+"configuração. Podem ser usadas opções de linha de comandos para sobrepor "
+"definições de ficheiros de configuração. As definições de variáveis de "
+"ambiente são ignoradas para este objectivo. A variável actualmente "
+"reconhecida é:"
+
+#. type: =item
+#: ../scripts/dget.pl:700
+msgid "B<DGET_PATH>"
+msgstr "B<DGET_PATH>"
+
+#. type: textblock
+#: ../scripts/dget.pl:702
+msgid ""
+"This can be set to a colon-separated list of directories in which to search "
+"for files in addition to the default I</var/cache/apt/archives>. It has the "
+"same effect as the B<--path> command line option. It is not set by default."
+msgstr ""
+"Isto pode ser definido para uma lista de directórios separados por dois "
+"pontos onde nos quais procurar por ficheiros adicionalmente ao predefinido "
+"I</var/cache/apt/archives>. Tem o mesmo efeito que a opção de linha de "
+"comandos B<--path>. Não está definido por predefinição."
+
+#. type: =item
+#: ../scripts/dget.pl:707
+msgid "B<DGET_UNPACK>"
+msgstr "B<DGET_UNPACK>"
+
+#. type: textblock
+#: ../scripts/dget.pl:709
+msgid ""
+"Set to 'no' to disable extracting downloaded source packages. Default is "
+"'yes'."
+msgstr ""
+"Definir para 'no' para desactivar a extração dos pacotes fonte "
+"descarregados. A predefinição é 'yes'."
+
+#. type: =item
+#: ../scripts/dget.pl:712
+msgid "B<DGET_VERIFY>"
+msgstr "B<DGET_VERIFY>"
+
+#. type: textblock
+#: ../scripts/dget.pl:714
+msgid ""
+"Set to 'no' to disable checking signatures of downloaded source packages. "
+"Default is 'yes'."
+msgstr ""
+"Definir para 'no' para desactivar a verificação de assinaturas dos pacotes "
+"fonte descarregados. A predefinição é 'yes'."
+
+#. type: textblock
+#: ../scripts/dget.pl:721
+msgid ""
+"Download all I<.deb> files for the previous version of a package and run "
+"B<debdiff> on them:"
+msgstr ""
+"Descarrega todos os ficheiros I<.deb> para a versão anterior de um pacote e "
+"correr B<debdiff> neles:"
+
+#. type: verbatim
+#: ../scripts/dget.pl:724
+#, no-wrap
+msgid ""
+" dget --all mypackage=1.2-1\n"
+" debdiff --from *_1.2-1_*.deb --to *_1.2-2_*.deb\n"
+"\n"
+msgstr ""
+" dget --all mypackage=1.2-1\n"
+" debdiff --from *_1.2-1_*.deb --to *_1.2-2_*.deb\n"
+"\n"
+
+#. type: =head1
+#: ../scripts/dget.pl:727
+msgid "BUGS AND COMPATIBILITY"
+msgstr "BUGS E COMPATIBILIDADE"
+
+#. type: textblock
+#: ../scripts/dget.pl:729
+msgid "B<dget> I<package> should be implemented in B<apt-get install -d>."
+msgstr "B<dget> I<package> deve ser implementado em B<apt-get install -d>."
+
+#. type: textblock
+#: ../scripts/dget.pl:731
+msgid ""
+"Before devscripts version 2.10.17, the default was not to extract the "
+"downloaded source. Set DGET_UNPACK=no to revert to the old behaviour."
+msgstr ""
+"Antes do devscripts versão 2.10.17, a predefinição era não extrair a fonte "
+"descarregada. Defina DGET_UNPACK=no para reverter para o antigo "
+"comportamento."
+
+#. type: textblock
+#: ../scripts/dget.pl:736
+msgid ""
+"This program is Copyright (C) 2005-2013 by Christoph Berg <myon@debian."
+"org>. Modifications are Copyright (C) 2005-06 by Julian Gilbey <jdg@debian."
+"org>."
+msgstr ""
+"Este programa tem Copyright (C) 2005-2013 de Christoph Berg <myon@debian."
+"org>. Modificação têm Copyright (C) 2005-06 de Julian Gilbey <jdg@debian."
+"org>."
+
+#. type: textblock
+#: ../scripts/dget.pl:739 ../scripts/tagpending.pl:434
+msgid ""
+"This program is licensed under the terms of the GPL, either version 2 of the "
+"License, or (at your option) any later version."
+msgstr ""
+"Este programa tem licença sobre os termos de GPL, seja versão 2 da licença, "
+"ou (por sua opção) qualquer versão posterior."
+
+#. type: textblock
+#: ../scripts/dget.pl:744
+msgid ""
+"B<apt-get>(1), B<curl>(1), B<debcheckout>(1), B<debdiff>(1), B<dpkg-"
+"source>(1), B<wget>(1)"
+msgstr ""
+"B<apt-get>(1), B<curl>(1), B<debcheckout>(1), B<debdiff>(1), B<dpkg-"
+"source>(1), B<wget>(1)"
+
+#. type: TH
+#: ../scripts/diff2patches.1:1
+#, no-wrap
+msgid "diff2patches"
+msgstr "diff2patches"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:1 ../scripts/diff2patches.1:50
+#, no-wrap
+msgid "Raphael Geissert E<lt>atomo64@gmail.comE<gt>"
+msgstr "Raphael Geissert E<lt>atomo64@gmail.comE<gt>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:5
+msgid "diff2patches - Extract non-debian/ patches from .diff.gz files"
+msgstr "diff2patches - Extrai patches não-debian/ de ficheiros .diff.gz"
+
+#. type: SH
+#: ../scripts/diff2patches.1:5
+#, no-wrap
+msgid "SYNTAX"
+msgstr "SINTAXE"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:8
+msgid "B<diff2patches >I<filename>"
+msgstr "B<diff2patches >I<filename>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:10
+msgid "B<diff2patches --help>|B<--version>"
+msgstr "B<diff2patches --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:16
+msgid ""
+"Extracts patches from .diff.gz which apply to files outside the ``debian/'' "
+"directory scope. A patch is created for each modified file. Each patch is "
+"named according to the path of the modified file, with ``/'' replaced by "
+"``___'', and an extension of ``.patch''."
+msgstr ""
+"Extrai patches de .diff.gz que se aplicam a ficheiros fora do escopo de "
+"directório ``debian/''. É criada uma patch para cada ficheiro modificado. "
+"Cada patch é nomeada de acordo ao caminho do ficheiro modificado, com ``/'' "
+"substituído por ``___'', e uma extensão de ``.patch''."
+
+#. type: TP
+#: ../scripts/diff2patches.1:18
+#, no-wrap
+msgid "I<filename>"
+msgstr "I<filename>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:22
+msgid ""
+"Extract patches from I<filename> which apply outside the ``debian/'' "
+"directory."
+msgstr ""
+"Extrai patches de I<filename> que se aplicam fora do directório ``debian/''."
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:25
+msgid "Output help information and exit."
+msgstr "Escreve informação de ajuda e termina."
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:28
+msgid "Output version information and exit."
+msgstr "Escreve informação de versão e termina."
+
+#. type: TP
+#: ../scripts/diff2patches.1:29
+#, no-wrap
+msgid "I<debian/control>"
+msgstr "I<debian/control>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:32
+msgid "Existence of this file is tested before any patch is extracted."
+msgstr ""
+"A existência deste ficheiro é testada antes de qualquer patch ser extraída."
+
+#. type: TP
+#: ../scripts/diff2patches.1:32
+#, no-wrap
+msgid "I<debian/>"
+msgstr "I<debian/>"
+
+#. type: TQ
+#: ../scripts/diff2patches.1:34
+#, no-wrap
+msgid "I<debian/patches/>"
+msgstr "I<debian/patches/>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:40
+msgid ""
+"Patches are extracted to one of these directories. ``debian/patches/'' is "
+"preferred, if it exists. If I<DEB_PATCHES> is present in the environment, "
+"it will override this behavior (see ``ENVIRONMENT VARIABLES'' section below)."
+msgstr ""
+"As patches são extraídas para um destes directórios. ``debian/patches/'' é "
+"preferido, se existir. Se I<DEB_PATCHES> estiver presente no ambiente, irá "
+"sobrepor este comportamento (veja a secção ``VARIÁVEIS DE AMBIENTE'' abaixo)."
+
+#. type: TP
+#: ../scripts/diff2patches.1:41
+#, no-wrap
+msgid "B<DEB_PATCHES>"
+msgstr "B<DEB_PATCHES>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:45
+msgid ""
+"When defined and points to an existing directory, patches are extracted in "
+"that directory and not under ``debian/'' nor ``debian/patches/''."
+msgstr ""
+"Quando definido e aponta para um directório existente, as patches são "
+"extraídas nesse directório e não sob ``debian/'' nem ``debian/patches/''."
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:48
+msgid "B<combinediff>(1)"
+msgstr "B<combinediff>(1)"
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "DPKG-DEPCHECK"
+msgstr "DPKG-DEPCHECK"
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "March 2002"
+msgstr "Março 2002"
+
+#. type: TH
+#: ../scripts/dpkg-depcheck.1:1
+#, no-wrap
+msgid "dpkg-depcheck"
+msgstr "dpkg-depcheck"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:4
+msgid "dpkg-depcheck - determine packages used to execute a command"
+msgstr "dpkg-depcheck - determina pacotes usados para executar um comando"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:6
+msgid "B<dpkg-depcheck> [I<options>] I<command>"
+msgstr "B<dpkg-depcheck> [I<options>] I<command>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:15
+msgid ""
+"This program runs the specified command under B<strace> and then determines "
+"and outputs the packages used in the process. The list can be trimmed in "
+"various ways as described in the options below. A good example of this "
+"program would be the command B<dpkg-depcheck -b debian/rules build>, which "
+"would give a good first approximation to the Build-Depends line needed by a "
+"Debian package. Note, however, that this does I<not> give any direct "
+"information on versions required or architecture-specific packages."
+msgstr ""
+"Este programa corre o comando especificado sob B<strace> e depois determina "
+"e escreve os pacotes usados no processo. A lista pode ser cortada de várias "
+"maneiras como descrito nas opções em baixo. Um bom exemplo deste programa "
+"será o comando B<dpkg-depcheck -b debian/rules build>, o que dará uma boa "
+"primeira aproximação da linha Build-Depends necessária por um pacote "
+"Debian. Note, no entanto, que isto I<não> dá nenhuma informação direta nas "
+"versões requeridas ou pacotes específicos de arquitectura."
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:22
+msgid ""
+"Report all packages used to run I<command>. This is the default behaviour. "
+"If used in conjunction with B<-b>, B<-d> or B<-m>, gives additional "
+"information on those packages skipped by these options."
+msgstr ""
+"Reporta todos os pacotes usados para correr I<command>. Este é o "
+"comportamento predefinido. Se usado em conjunto com B<-b>, B<-d> ou B<-m>, "
+"dá informação adicional sobre aqueles pacotes que foram saltados por estas "
+"opções."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:22
+#, no-wrap
+msgid "B<-b>, B<--build-depends>"
+msgstr "B<-b>, B<--build-depends>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:26
+msgid ""
+"Do not report any build-essential or essential packages used, or any of "
+"their (direct or indirect) dependencies."
+msgstr ""
+"Não reporta nenhuns pacotes essencial-de-compilação ou essencial usados, ou "
+"nenhuma das suas dependências (diretas ou indiretas)."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:26
+#, no-wrap
+msgid "B<-d>, B<--ignore-dev-deps>"
+msgstr "B<-d>, B<--ignore-dev-deps>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:30
+msgid ""
+"Do not show packages used which are direct dependencies of I<-dev> packages "
+"used. This implies B<-b>."
+msgstr ""
+"Não mostra pacotes usados que são dependências diretas dos pacotes I<-dev> "
+"usados. Isto implica B<-b>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:30
+#, no-wrap
+msgid "B<-m>, B<--min-deps>"
+msgstr "B<-m>, B<--min-deps>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:34
+msgid ""
+"Output a minimal set of packages needed, taking into account direct "
+"dependencies. Using B<-m> implies B<-d> and also B<-b>."
+msgstr ""
+"Escreve um conjunto mínimo de pacote necessários, tendo em conta "
+"dependências diretas. Usar B<-m> implica B<-d> e também B<-b>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:34
+#, no-wrap
+msgid "B<-C>, B<--C-locale>"
+msgstr "B<-C>, B<--C-locale>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:37
+msgid "Run I<command> with the C locale."
+msgstr "Corre I<command> com o locale C."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:37
+#, no-wrap
+msgid "B<--no-C-locale>"
+msgstr "B<--no-C-locale>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:40
+msgid "Don't change locale when running I<command>."
+msgstr "Não muda o locale quando corre I<command>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:40
+#, no-wrap
+msgid "B<-l>, B<--list-files>"
+msgstr "B<-l>, B<--list-files>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:43
+msgid "Also report the list of files used in each package."
+msgstr "Também reporta a lista de ficheiros usados em cada pacote."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:43
+#, no-wrap
+msgid "B<--no-list-files>"
+msgstr "B<--no-list-files>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:47
+msgid "Do not report the files used in each package. Cancels a B<-l> option."
+msgstr ""
+"Não reporta a lista de ficheiros usados em cada pacote. Cancela uma opção B<-"
+"l>."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:47
+#, no-wrap
+msgid "B<-o>, B<--output=>I<FILE>"
+msgstr "B<-o>, B<--output=>I<FILE>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:50
+msgid "Output the package diagnostics to I<FILE> instead of stdout."
+msgstr "Escreve o diagnóstico de pacote em I<FILE> em vez de stdout."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:50
+#, no-wrap
+msgid "B<-O>, B<--strace-output=>I<FILE>"
+msgstr "B<-O>, B<--strace-output=>I<FILE>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:54
+msgid ""
+"Write the B<strace> output to I<FILE> when tracing I<command> instead of "
+"using a temporary file."
+msgstr ""
+"Escreve o resultado de B<strace> em I<FILE> quando rastreia I<command> em "
+"vez de usar um ficheiro temporário."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:54
+#, no-wrap
+msgid "B<-I>, B<--strace-input=>I<FILE>"
+msgstr "B<-I>, B<--strace-input=>I<FILE>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:59
+msgid ""
+"Get B<strace> output from I<FILE> instead of tracing I<command>; B<strace> "
+"must have be run with the B<-f -q> options for this to work."
+msgstr ""
+"Obtém o resultado de B<strace> a partir de I<FILE> em vede rastrear "
+"I<command>; B<strace> teve de ser corrido antes com opções B<-f -q> para que "
+"isto funcione."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:59
+#, no-wrap
+msgid "B<-f>, B<--features=>I<LIST>"
+msgstr "B<-f>, B<--features=>I<LIST>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:65
+msgid ""
+"Enable or disabled features given in the comma-separated I<LIST> as "
+"follows. A feature is enabled with I<+feature> or just I<feature> and "
+"disabled with I<-feature>. The currently recognised features are:"
+msgstr ""
+"Activa ou desactiva funcionalidades dadas na I<LIST> separada por vírgulas "
+"como se segue. Uma funcionalidade é activada com I<+feature> ou apenas "
+"I<feature> e desactivada com I<-feature>. As funcionalidades actualmente "
+"reconhecidas são:"
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:67
+#, no-wrap
+msgid "B<warn-local>"
+msgstr "B<warn-local>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:71
+msgid ""
+"Warn if files in I</usr/local> or I</var/local> are used. Enabled by "
+"default."
+msgstr ""
+"Avisa se forem usados ficheiros em I</usr/local> ou I</var/local>. Activo "
+"por predefinição."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:71
+#, no-wrap
+msgid "B<discard-check-version>"
+msgstr "B<discard-check-version>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:76
+msgid ""
+"Discards I<execve> when only a I<--version> argument is given to the "
+"program; this works around some configure scripts that check for binaries "
+"they don't actually use. Enabled by default."
+msgstr ""
+"Descarta I<execve> quando apenas um argumento I<--version> é dado ao "
+"programa; isto contorna alguns scripts configurados que verificam por "
+"binários que realmente não usam. Activo por predefinição."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:76
+#, no-wrap
+msgid "B<trace-local>"
+msgstr "B<trace-local>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:81
+msgid ""
+"Also try to identify files which are accessed in I</usr/local> and I</var/"
+"local>. Not usually very useful, as Debian does not place files in these "
+"directories. Disabled by default."
+msgstr ""
+"Também tenta identificar ficheiros que são acedidos em I</usr/local> e I</"
+"var/local>. Geralmente não é muito útil, pois Debian não coloca ficheiros "
+"nestes directórios. Desactivado por predefinição."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:81
+#, no-wrap
+msgid "B<catch-alternatives>"
+msgstr "B<catch-alternatives>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:85
+msgid ""
+"Warn about access to files controlled by the Debian I<alternatives> "
+"mechanism. Enabled by default."
+msgstr ""
+"Avisa acerca de acesso a ficheiros controlados pelo mecanismo "
+"I<alternatives> de Debian. Activo por predefinição."
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:85
+#, no-wrap
+msgid "B<discard-sgml-catalogs>"
+msgstr "B<discard-sgml-catalogs>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:90
+msgid ""
+"Discards access to SGML catalogs; some SGML tools read all the registered "
+"catalogs at startup. Files matching the regexp /usr/share/sgml/.*\\e.cat "
+"are recognised as catalogs. Enabled by default."
+msgstr ""
+"Descarta acesso a catálogos SGML; algumas ferramentas SGML leem todos os "
+"catálogos registados no arranque. Os ficheiros que correspondem à expressão "
+"regular /usr/share/sgml/.*\\e.cat são reconhecidos como catálogos. Activo "
+"por predefinição."
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:99
+msgid "Display usage information and exit."
+msgstr "Mostra informação de utilização e termina."
+
+#. type: =item
+#: ../scripts/dpkg-depcheck.1:99 ../scripts/mk-build-deps.pl:115
+#, no-wrap
+msgid "B<-v>, B<--version>"
+msgstr "B<-v>, B<--version>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:102
+msgid "Display version and copyright information and exit."
+msgstr "Mostra informação de versão e copyright e termina."
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:108 ../scripts/grep-excuses.1:52
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced in that order to set configuration variables. Command line options "
+"can be used to override configuration file settings. Environment variable "
+"settings are ignored for this purpose. The currently recognised variable is:"
+msgstr ""
+"Os dois ficheiros de configuração I</etc/devscripts.conf> e I<~/."
+"devscripts>são por essa ordem fonte para definirem variáveis de "
+"configuração. Podem ser usadas opções de linha de comandos para sobrepor "
+"definições de ficheiros de configuração. As definições de variáveis de "
+"ambiente são ignoradas para este objectivo. A variável actualmente "
+"reconhecida é:"
+
+#. type: TP
+#: ../scripts/dpkg-depcheck.1:108
+#, no-wrap
+msgid "B<DPKG_DEPCHECK_OPTIONS>"
+msgstr "B<DPKG_DEPCHECK_OPTIONS>"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:112
+msgid ""
+"These are options which are parsed before the command-line options. For "
+"example,"
+msgstr ""
+"Estas são opções que são analisadas antes das opções de linha de comandos. "
+"Por exemplo,"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:114
+msgid "DPKG_DEPCHECK_OPTIONS=\"-b -f-catch-alternatives\""
+msgstr "DPKG_DEPCHECK_OPTIONS=\"-b -f-catch-alternatives\""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:118
+msgid ""
+"which passes these options to B<dpkg-depcheck> before any command-line "
+"options are processed. You are advised not to try tricky quoting, because "
+"of the vagaries of shell quoting!"
+msgstr ""
+"que passa estas opções ao B<dpkg-depcheck> antes de quaisquer opções de "
+"linha de comandos serem processadas. Você é aconselhado a não tentar "
+"citações complicadas devido aos caprichos da citação em shell!"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:123
+msgid ""
+"B<dpkg>(1), B<strace>(1), B<devscripts.conf>(5), B<update-alternatives>(8)"
+msgstr ""
+"B<dpkg>(1), B<strace>(1), B<devscripts.conf>(5), B<update-alternatives>(8)"
+
+#. type: SH
+#: ../scripts/dpkg-depcheck.1:123
+#, no-wrap
+msgid "COPYING"
+msgstr "COPIAR"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:130
+msgid ""
+"Copyright 2001 Bill Allombert E<lt>ballombe@debian.orgE<gt>. Modifications "
+"copyright 2002,2003 Julian Gilbey E<lt>jdg@debian.orgE<gt>. B<dpkg-"
+"depcheck> is free software, covered by the GNU General Public License, "
+"version 2 or (at your option) any later version, and you are welcome to "
+"change it and/or distribute copies of it under certain conditions. There is "
+"absolutely no warranty for B<dpkg-depcheck>."
+msgstr ""
+"Copyright 2001 Bill Allombert E<lt>ballombe@debian.orgE<gt>. Modificações "
+"copyright 2002,2003 Julian Gilbey E<lt>jdg@debian.orgE<gt>. B<dpkg-"
+"depcheck> é software livre, coberto pela GNU General Public License, versão "
+"2 ou (em sua opção) qualquer versão posterior, e você pode alterar e/ou "
+"distribuir cópias dele sob certas condições. Não há absolutamente nenhum "
+"garantia para B<dpkg-depcheck>."
+
+#. type: TH
+#: ../scripts/dpkg-genbuilddeps.1:1
+#, no-wrap
+msgid "DPKG-GENBUILDDEPS"
+msgstr "DPKG-GENBUILDDEPS"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:4
+msgid ""
+"dpkg-genbuilddeps - generate a list of packages used to build this package"
+msgstr ""
+"dpkg-genbuilddeps - gera uma lista de pacotes usados para compilar este "
+"pacote"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:6
+msgid "B<dpkg-genbuilddeps> [I<arg> ...]"
+msgstr "B<dpkg-genbuilddeps> [I<arg> ...]"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:19
+msgid ""
+"This program is a wrapper around B<dpkg-depcheck>(1). It should be run from "
+"the top of a Debian build tree. It calls B<dpkg-buildpackage> with any "
+"arguments given on the command line, and by tracing the execution of this, "
+"it determines which non-essential packages were used during the package "
+"building. This can be useful in determining what the I<Build-Depends> "
+"control fields should contain. It does not determine which packages were "
+"used for the arch independent parts of the build and which for the arch "
+"dependent parts, not does it attempt to determine which versions of packages "
+"are required. It should be able to run under B<fakeroot> rather than being "
+"run as root, as B<fakeroot dpkg-genbuilddeps>, or B<dpkg-genbuilddeps -"
+"rfakeroot>."
+msgstr ""
+"Este programa é um invólucro em volta de B<dpkg-depcheck>(1). Deve ser "
+"corrido do topo duma árvore de compilação Debian. Chama B<dpkg-buildpackage> "
+"com quaisquer argumentos dados na linha de comandos, e ao traçar a executado "
+"deste, determina quais pacotes não essenciais foram usados durante a "
+"compilação do pacote. Isto pode ser útil ao determinar o que o campos de "
+"controle I<Build-Depends> devem conter. Não determina quais pacotes foram "
+"usados para as partes da compilação independentes da arquitectura e quais "
+"para as partes dependentes da arquitectura, nem tenta determinar quais "
+"versões de pacotes foram requeridas. Deverá ser capaz de correr sob "
+"B<fakeroot> em vez de correr como root, como B<fakeroot dpkg-genbuilddeps>, "
+"ou B<dpkg-genbuilddeps -rfakeroot>."
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:23
+msgid ""
+"This program requires the build-essential package to be installed. If it is "
+"not, please use B<dpkg-depcheck> directly, with a command such as"
+msgstr ""
+"Este programa requer que o pacote build-essential esteja instalado. Se não "
+"estiver, por favor use B<dpkg-depcheck> diretamente, com um comando como"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:25
+#, no-wrap
+msgid " dpkg-depcheck --all dpkg-buildpackage -us -uc -b -rfakeroot ...\n"
+msgstr " dpkg-depcheck --all dpkg-buildpackage -us -uc -b -rfakeroot ...\n"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:27
+msgid "All this program itself does is essentially to run the command:"
+msgstr ""
+"Tudo o que este programa faz por si próprio é essencialmente correr o "
+"comando:"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:29
+#, no-wrap
+msgid " dpkg-depcheck -b dpkg-buildpackage -us -uc -b -rfakeroot [arg ...]\n"
+msgstr " dpkg-depcheck -b dpkg-buildpackage -us -uc -b -rfakeroot [arg ...]\n"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:33
+msgid "B<dpkg-depcheck>(1), B<fakeroot>(1)"
+msgstr "B<dpkg-depcheck>(1), B<fakeroot>(1)"
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:36
+msgid "B<The Debian Policy Manual,> sections on Build-Depends etc."
+msgstr "B<The Debian Policy Manual,> secções sobre Build-Depends etc."
+
+#. type: Plain text
+#: ../scripts/dpkg-genbuilddeps.1:40
+msgid ""
+"The original B<dpkg-genbuilddeps> was written by Ben Collins "
+"E<lt>bcollins@debian.orgE<gt>. The current version is a simple wrapper "
+"around B<dpkg-depcheck> written by Bill Allombert E<lt>ballombe@debian."
+"orgE<gt>. This manual page was written by Julian Gilbey E<lt>jdg@debian."
+"orgE<gt>."
+msgstr ""
+"O B<dpkg-genbuilddeps> original foi escrito por Ben Collins "
+"E<lt>bcollins@debian.orgE<gt>. A versão actual é um invólucro simples em "
+"torno de B<dpkg-depcheck> escrito por Bill Allombert E<lt>ballombe@debian."
+"orgE<gt>. Este manual foi escrito por Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../doc/edit-patch.1:1
+#, no-wrap
+msgid "EDIT-PATCH"
+msgstr "EDIT-PATCH"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:5
+msgid ""
+"B<edit-patch>, B<add-patch> - tool for preparing patches for Debian source "
+"packages"
+msgstr ""
+"B<edit-patch>, B<add-patch> - ferramenta para preparação de patches para "
+"pacotes fonte Debian"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:8
+msgid "B<edit-patch> I<path/to/patch>"
+msgstr "B<edit-patch> I<path/to/patch>"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:10
+msgid "B<add-patch> I<path/to/patch>"
+msgstr "B<add-patch> I<path/to/patch>"
+
+#. type: Plain text
+#: ../doc/edit-patch.1:18
+msgid ""
+"B<edit-patch> is a wrapper script around the Quilt, CDBS, and dpatch patch "
+"systems. It simplifies the process of preparing and editing patches to "
+"Debian source packages and allows the user to not have to be concerned with "
+"which patch system is in use. Run from inside the root directory of the "
+"source package, B<edit-patch> can be used to edit existing patches located "
+"in I<debian/patches>."
+msgstr ""
+"B<edit-patch> é um script invólucro em volta dos sistemas de patch Quilt, "
+"CDBS, e dpatch. Simplifica o processo de preparar e editar patches para "
+"pacotes fonte Debian e permite ao utilizador não ter de se preocupar com "
+"qual sistema de patch está a usar. Corre de dentro do directório raiz do "
+"pacote fonte, o B<edit-patch> pode ser usado para editar patches existentes "
+"localizadas em I<debian/patches>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:25
+msgid ""
+"It can also be used to incorporate new patches. If pointed at a patch not "
+"already present, it will copy the patch to I<debian/patches> in the correct "
+"format for the patch system in use. Next, the patch is applied and a "
+"subshell is opened in order to edit the patch. Typing B<exit> or pressing "
+"Ctrl-d will close the subshell and launch an editor to record the I<debian/"
+"changelog> entry."
+msgstr ""
+"Também pode ser usado para incorporar novas patches. Se apontado a uma patch "
+"ainda não presente, irá copiar a patch para I<debian/patches> no formato "
+"correcto para o sistema de patch em utilização. A seguir, a patch é aplicada "
+"e é aberta uma subshell de modo a editar a patch. Escrever B<exit> ou teclar "
+"Ctrl-d irá fechar a subshell e lançar um editor para gravar a entrada de "
+"I<debian/changelog>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:29
+msgid ""
+"B<edit-patch> is integrated with the Bazaar and Git version control "
+"systems. The patch will be automatically added to the tree, and the "
+"I<debian/changelog> entry will be used as the commit message."
+msgstr ""
+"B<edit-patch> está integrado com os sistemas de controle de versão Bazaar e "
+"Git. A patch será adicionada automaticamente à árvore, e a entrada de "
+"I<debian/changelog> será usada como a mensagem de envio."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:32
+msgid ""
+"If no patch system is present, the patch is applied inline, and a copy is "
+"stored in I<debian/patches-applied>."
+msgstr ""
+"Se nenhum sistema de patch estiver presente, a patch é aplica em linha, e é "
+"guardada uma cópia em I<debian/patches-applied>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:36
+msgid ""
+"B<add-patch> is the non-interactive version of B<edit-patch>. The patch "
+"will be incorporated but no editor or subshell will be spawned."
+msgstr ""
+"B<add-patch> é a versão não-interactiva de B<edit-patch>. A patch irá ser "
+"incorporada mas num editor ou subshell serão chamados."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:40
+msgid ""
+"B<edit-patch> was written by Daniel Holbach E<lt>daniel.holbach@canonical."
+"comE<gt>, Michael Vogt E<lt>michael.vogt@canonical.comE<gt>, and David "
+"Futcher E<lt>bobbo@ubuntu.comE<gt>."
+msgstr ""
+"B<edit-patch> foi escrito por Daniel Holbach E<lt>daniel.holbach@canonical."
+"comE<gt>, Michael Vogt E<lt>michael.vogt@canonical.comE<gt>, e David Futcher "
+"E<lt>bobbo@ubuntu.comE<gt>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:42
+msgid ""
+"This manual page was written by Andrew Starr-Bochicchio E<lt>a.starr.b@gmail."
+"comE<gt>."
+msgstr ""
+"Este manual foi escrito por Andrew Starr-Bochicchio E<lt>a.starr.b@gmail."
+"comE<gt>."
+
+#. type: Plain text
+#: ../doc/edit-patch.1:43
+msgid ""
+"Both are released under the terms of the GNU General Public License, version "
+"3."
+msgstr ""
+"Ambos são lançados sob os termos da GNU General Public License, versão 3."
+
+#. type: TH
+#: ../scripts/dscextract.1:1
+#, no-wrap
+msgid "DSCEXTRACT"
+msgstr "DSCEXTRACT"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:4
+msgid "dscextract - extract a single file from a Debian source package"
+msgstr ""
+"dscextract - extrai um único ficheiro a partir de um pacote fonte Debian"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:6
+msgid "B<dscextract> [I<options>] I<dscfile> I<file>"
+msgstr "B<dscextract> [I<options>] I<dscfile> I<file>"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:11
+msgid ""
+"B<dscextract> reads a single file from a Debian source package. The idea is "
+"to only look into I<.diff.gz> files (source format 1.0) or I<.debian.tar.gz/"
+"bz2> files (source format 3.0) where possible, hence avoiding to unpack "
+"large tarballs. It is most useful for files in the I<debian/> subdirectory."
+msgstr ""
+"B<dscextract> lê um único ficheiro de um pacote fonte Debian. A ideia é "
+"apenas olhar para ficheiros I<.diff.gz> (formato fonte 1.0) ou ficheiros I<."
+"debian.tar.gz/bz2> (formato fonte 3.0) onde possível, assim evitando "
+"desempacotar grandes tarballs. É muito útil para ficheiros no sub-directório "
+"I<debian/>."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:14
+msgid ""
+"I<file> is relative to the first level directory contained in the package, i."
+"e. with the first component stripped."
+msgstr ""
+"I<file> é relativo ao directório de primeiro nível contido no pacote, isto "
+"é, com o primeiro componente despido."
+
+#. type: TP
+#: ../scripts/dscextract.1:15
+#, no-wrap
+msgid "B<-f>"
+msgstr "B<-f>"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:20
+msgid ""
+"\"Fast\" mode. For source format 1.0, avoid to fall back scanning the I<."
+"orig.tar.gz> file if I<file> was not found in the I<.diff.gz>. (For 3.0 "
+"packages, it is assumed that I<debian/*> are exactly the contents of "
+"I<debian.tar.gz/bz2>.)"
+msgstr ""
+"Modo \"Rápido\". Para formato fonte 1.0, evita o retrocesso sondando o "
+"ficheiro I<.orig.tar.gz> se o I<file> não for encontrado no I<.diff.gz>. "
+"(Para pacotes 3.0, é assumido que I<debian/*> são exactamente oi conteúdo de "
+"I<debian.tar.gz/bz2>.)"
+
+#. type: TP
+#: ../scripts/dscextract.1:21 ../scripts/wnpp-check.1:29
+#, no-wrap
+msgid "0"
+msgstr "0"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:24
+msgid "I<file> was extracted."
+msgstr "I<file> foi extraído."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:27
+msgid "I<file> was not found in the source package."
+msgstr "I<file> não foi encontrado no pacote fonte."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:30
+msgid "An error occurred, like I<dscfile> was not found."
+msgstr "Ocorreu um erro, como se I<dscfile> não fosse encontrado."
+
+#. type: Plain text
+#: ../scripts/dscextract.1:32
+msgid "dscextract dds_2.1.1+ddd105-2.dsc debian/watch || test $? = 1"
+msgstr "dscextract dds_2.1.1+ddd105-2.dsc debian/watch || test $? = 1"
+
+#. type: Plain text
+#: ../scripts/dscextract.1:33
+msgid "B<dscextract> was written by Christoph Berg E<lt>myon@debian.orgE<gt>."
+msgstr ""
+"B<dscextract> foi escrito por Christoph Berg E<lt>myon@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/dscverify.1:1
+#, no-wrap
+msgid "DSCVERIFY"
+msgstr "DSCVERIFY"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:4
+msgid "dscverify - verify the validity of a Debian package"
+msgstr "dscverify - verifica a validade de um pacote Debian"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:6
+msgid ""
+"B<dscverify> [B<--keyring >I<keyring>] ... "
+"I<changes_or_buildinfo_or_dsc_filename> ..."
+msgstr ""
+"B<dscverify> [B<--keyring >I<keyring>] ... "
+"I<changes_or_buildinfo_or_dsc_filename> ..."
+
+#. type: Plain text
+#: ../scripts/dscverify.1:17
+msgid ""
+"B<dscverify> checks that the GPG signatures on the given I<.changes>, I<."
+"buildinfo> or I<.dsc> files are good signatures made by keys in the current "
+"Debian keyrings, found in the I<debian-keyring> package. (Additional "
+"keyrings can be specified using the B<--keyring> option any number of "
+"times.) It then checks that the other files listed in the I<.changes>, I<."
+"buildinfo> or I<.dsc> files have the correct sizes and checksums (MD5 plus "
+"SHA1 and SHA256 if the latter are present). The exit status is 0 if there "
+"are no problems and non-zero otherwise."
+msgstr ""
+"B<dscverify> verifica que as assinaturas GPG nos ficheiros I<.changes>, I<."
+"buildinfo> ou I<.dsc> dados são boas assinaturas feitas por chaves nos "
+"chaveiros Debian actuais, encontrados no pacote I<debian-keyring>. (Pode ser "
+"especificados chaveiros adicionais usando a opção B<--keyring> qualquer "
+"número de vezes.) Depois verifica que os outros ficheiros listados nos "
+"ficheiros I<.changes>, I<.buildinfo> ou I<.dsc> têm os tamanhos e sumários "
+"de verificação corretos (MD5 mais SHA1 e SHA256 se os últimos estiverem "
+"presentes). O estado de saída é 0 se não existirem problemas, e não-zero "
+"caso contrário."
+
+#. type: TP
+#: ../scripts/dscverify.1:18
+#, no-wrap
+msgid "B<--keyring>I< >I<keyring>"
+msgstr "B<--keyring>I< >I<keyring>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:21
+msgid "Add I<keyring> to the list of keyrings to be used."
+msgstr "Adiciona I<keyring> à lista de chaveiros a usar."
+
+#. type: TP
+#: ../scripts/dscverify.1:21 ../scripts/who-uploads.1:25
+#, no-wrap
+msgid "B<--no-default-keyrings>"
+msgstr "B<--no-default-keyrings>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:24
+msgid "Do not use the default set of keyrings."
+msgstr "Não usa o conjunto de chaveiros predefinido."
+
+#. type: TP
+#: ../scripts/dscverify.1:28
+#, no-wrap
+msgid "B<--nosigcheck>, B<--no-sig-check>, B<-u>"
+msgstr "B<--nosigcheck>, B<--no-sig-check>, B<-u>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:33
+msgid ""
+"Skip the signature verification step. That is, only verify the sizes and "
+"checksums of the files listed in the I<.changes>, I<.buildinfo> or I<.dsc> "
+"files."
+msgstr ""
+"Salta o passo de verificação da assinatura. Isto é, apenas verifica os "
+"tamanhos e sumários de verificação dos ficheiros listados nos ficheiros I<."
+"changes>, I<.buildinfo> ou I<.dsc>."
+
+#. type: TP
+#: ../scripts/dscverify.1:33 ../scripts/plotchangelog.1:78
+#: ../scripts/salsa.pl:579 ../scripts/uupdate.1:98
+#, no-wrap
+msgid "B<--verbose>"
+msgstr "B<--verbose>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:36
+msgid "Do not suppress GPG output."
+msgstr "Não suprime resultados GPG."
+
+#. type: Plain text
+#: ../scripts/dscverify.1:50
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. "
+"Environment variable settings are ignored for this purpose. If the first "
+"command line option given is B<--noconf> or B<--no-conf>, then these files "
+"will not be read. The currently recognised variable is:"
+msgstr ""
+"Os dois ficheiros de configuração I</etc/devscripts.conf> e I<~/.devscripts> "
+"são fonte para uma shell nessa ordem para definir variáveis de configuração. "
+"As definições de variáveis de ambiente são ignoradas para este objectivo. Se "
+"a primeira opção de linha de comandos dada for B<--noconf> ou B<--no-conf>, "
+"então estes ficheiros não serão lidos. A variável actualmente reconhecida é:"
+
+#. type: TP
+#: ../scripts/dscverify.1:50
+#, no-wrap
+msgid "B<DSCVERIFY_KEYRINGS>"
+msgstr "B<DSCVERIFY_KEYRINGS>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:54
+msgid ""
+"This is a colon-separated list of extra keyrings to use in addition to any "
+"specified on the command line."
+msgstr ""
+"Isto é uma lista separada por dois pontos de chaveiros extra a usar "
+"adicionalmente a qualquer especificado na linha de comandos."
+
+#. type: SH
+#: ../scripts/dscverify.1:54
+#, no-wrap
+msgid "KEYRING"
+msgstr "CHAVEIRO"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:61
+msgid ""
+"Please note that the keyring provided by the debian-keyring package can be "
+"slightly out of date. The latest version can be obtained with rsync, as "
+"documented in the README that comes with debian-keyring. If you sync the "
+"keyring to a non-standard location (see below), you can use the "
+"possibilities to specify extra keyrings, by either using the above mentioned "
+"configuration option or the --keyring option."
+msgstr ""
+"Por favor note que o chaveiro fornecido pelo pacote debian-keyring pode "
+"estar ligeiramente desatualizado. A versão mais recente pode ser obtida com "
+"rsync, como documentado no README que vem com debian-keyring. Se você "
+"sincronizar o chaveiro com uma localização não-standard (veja em baixo), "
+"você pode usar a possibilidade de especificar chaveiros extra, ou usando a "
+"opção de configuração mencionada em cima ou a opção --keyring."
+
+#. type: Plain text
+#: ../scripts/dscverify.1:63
+msgid "Below is an example for an alias:"
+msgstr "Em baixo está um exemplo para um alias (nome alternativo):"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:65
+msgid "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+msgstr "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+
+#. type: SH
+#: ../scripts/dscverify.1:65
+#, no-wrap
+msgid "STANDARD KEYRING LOCATIONS"
+msgstr "LOCALIZAÇÕES STANDARD DE CHAVEIRO"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:68
+msgid ""
+"By default dscverify searches for the debian-keyring in the following "
+"locations:"
+msgstr ""
+"Por predefinição o dscverify procura o debian-keyring nas seguintes "
+"localizações:"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:70
+msgid "- ~/.gnupg/trustedkeys.gpg"
+msgstr "- ~/.gnupg/trustedkeys.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:72
+msgid "- /srv/keyring.debian.org/keyrings/debian-keyring.gpg"
+msgstr "- /srv/keyring.debian.org/keyrings/debian-keyring.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:74
+msgid "- /usr/share/keyrings/debian-keyring.gpg"
+msgstr "- /usr/share/keyrings/debian-keyring.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:76
+msgid "- /usr/share/keyrings/debian-maintainers.gpg"
+msgstr "- /usr/share/keyrings/debian-maintainers.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:78
+msgid "- /usr/share/keyrings/debian-nonupload.gpg"
+msgstr "- /usr/share/keyrings/debian-nonupload.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:82
+msgid "B<gpg>(1), B<gpg2>(1), B<devscripts.conf>(5)"
+msgstr "B<gpg>(1), B<gpg2>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:86
+msgid ""
+"B<dscverify> was written by Roderick Schertler E<lt>roderick@argon.orgE<gt> "
+"and posted on the debian-devel@lists.debian.org mailing list, with several "
+"modifications by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"B<dscverify> foi escrito por Roderick Schertler E<lt>roderick@argon.orgE<gt> "
+"e postado na lista de mail debian-devel@lists.debian.org, com várias "
+"modificações por Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/getbuildlog.1:1
+#, no-wrap
+msgid "GETBUILDLOG"
+msgstr "GETBUILDLOG"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:4
+msgid "getbuildlog - download build logs from Debian auto-builders"
+msgstr ""
+"getbuildlog - descarrega relatórios de compilação de auto-compiladores Debian"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:8
+msgid ""
+"B<getbuildlog> I<package> [I<version-pattern>] [I<architecture-pattern>]"
+msgstr ""
+"B<getbuildlog> I<package> [I<version-pattern>] [I<architecture-pattern>]"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:17
+msgid ""
+"B<getbuildlog> downloads build logs of I<package> from Debian auto-builders. "
+"It downloads build logs of all versions and for all architectures if "
+"I<version-pattern> and I<architecture-pattern> are not specified or empty, "
+"otherwise only build logs whose versions match I<version-pattern> and build "
+"logs whose architectures match I<architecture-pattern> will be downloaded. "
+"The version and architecture patterns are interpreted as extended regular "
+"expressions as described in B<grep>(1)."
+msgstr ""
+"B<getbuildlog> descarrega relatórios de compilação de I<package> a partir de "
+"auto-compiladores Debian. Descarrega relatórios de compilação de todas as "
+"versões e todas as arquitecturas se I<version-pattern> e I<architecture-"
+"pattern> não forem especificados ou estarem vazios, caso contrário apenas os "
+"relatórios de compilação cujas versões correspondam a I<version-pattern> e "
+"relatórios de compilação cujas arquitecturas correspondam I<architecture-"
+"pattern> serão descarregados. Os padrões de versão e arquitectura são "
+"interpretados como expressões regulares extensas como descrito em B<grep>(1)."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:21
+msgid ""
+"If I<version-pattern> is \"last\" then only the logs for the most recent "
+"version of I<package> found on buildd.debian.org will be downloaded."
+msgstr ""
+"Se I<version-pattern> for \"last\" então apenas serão descarregados os "
+"relatórios da versão mais recente do I<package> encontrada em buildd.debian."
+"org."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:24
+msgid ""
+"If I<version-pattern> is \"last-all\" then the logs for the most recent "
+"version found on each build log index will be downloaded."
+msgstr ""
+"Se I<version-pattern> for \"last-all\" então serão descarregados os "
+"relatórios da versão mais recente encontrados em cada índice de registo de "
+"compilação."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:28
+msgid "Show usage information and examples."
+msgstr "Mostra informação de utilização e exemplos."
+
+#. type: TP
+#: ../scripts/getbuildlog.1:32
+#, no-wrap
+msgid "getbuildlog hello 2\\e.2-1 amd64"
+msgstr "getbuildlog hello 2\\e.2-1 amd64"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:35
+msgid "Download amd64 build log for hello version 2.2-1."
+msgstr "Descarrega o relatório de compilação amd64 para hello versão 2.2-1."
+
+#. type: TP
+#: ../scripts/getbuildlog.1:35
+#, no-wrap
+msgid "getbuildlog glibc \"\" mips.*"
+msgstr "getbuildlog glibc \"\" mips.*"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:38
+msgid "Download mips(el) build logs of all glibc versions."
+msgstr ""
+"Descarrega relatórios de compilação mips(el) para todas as versões de glibc."
+
+#. type: TP
+#: ../scripts/getbuildlog.1:38
+#, no-wrap
+msgid "getbuildlog wesnoth .*bpo.*"
+msgstr "getbuildlog wesnoth .*bpo.*"
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:41
+msgid "Download all build logs of backported wesnoth versions."
+msgstr ""
+"Descarrega todos os relatórios de compilação de versões wesnoth portadas "
+"para trás."
+
+#. type: Plain text
+#: ../scripts/getbuildlog.1:42
+msgid "Written by Frank S. Thomas E<lt>fst@debian.orgE<gt>."
+msgstr "Escrito por Frank S. Thomas E<lt>fst@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:22
+msgid "git-deborig - try to produce Debian orig.tar using git-archive(1)"
+msgstr "git-deborig - tenta produzir Debian orig.tar usando git-archive(1)"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:26
+msgid ""
+"B<git deborig> [B<--force>|B<-f>] [B<--just-print>|B<--just-print-tag-"
+"names>] [B<--version=>I<VERSION>] [I<COMMITTISH>]"
+msgstr ""
+"B<git deborig> [B<--force>|B<-f>] [B<--just-print>|B<--just-print-tag-"
+"names>] [B<--version=>I<VERSION>] [I<COMMITTISH>]"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:30
+msgid ""
+"B<git-deborig> tries to produce the orig.tar you need for your upload by "
+"calling git-archive(1) on an existing git tag or branch head. It was "
+"written with the dgit-maint-merge(7) workflow in mind, but can be used with "
+"other workflows."
+msgstr ""
+"B<git-deborig> tenta produzir o orig.tar que você precisa para o seu envio "
+"ao chamar git-archive(1) numa etiqueta git ou cabeça de ramo existentes. Foi "
+"escrito com o fluxo de trabalho do dgit-maint-merge(7) em mente, mas pode "
+"ser usado com outros workflows."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:35
+msgid ""
+"B<git-deborig> will try several common tag names. If this fails, or if more "
+"than one of those common tags are present, you can specify the tag or branch "
+"head to archive on the command line (I<COMMITTISH> above)."
+msgstr ""
+"B<git-deborig> irá tentar vários nomes de etiquetas comuns. Se falhar, ou se "
+"mais do que uma dessas etiquetas comuns estiver presente, você pode "
+"especificar a etiqueta ou cabeça de ramo a arquivar na linha de comandos "
+"(I<COMMITTISH> em cima)."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:39
+msgid ""
+"B<git-deborig> will override gitattributes(5) that would cause the contents "
+"of the tarball generated by git-archive(1) not to be identical with the "
+"commitish archived: the B<export-subst> and B<export-ignore> attributes."
+msgstr ""
+"B<git-deborig> irá sobrepor gitattributes(5) que iriam causar com que o "
+"conteúdo do tarball gerado pelo git-archive(1) não fosse idêntico ao do "
+"arquivo submetido: os atributos B<export-subst> e B<export-ignore>."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:44
+msgid ""
+"B<git-deborig> should be invoked from the root of the git repository, which "
+"should contain I<debian/changelog>."
+msgstr ""
+"B<git-deborig> deve ser invocado a partir da raiz do repositório git, o qual "
+"deve conter I<debian/changelog>."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:51
+msgid "B<-f>|B<--force>"
+msgstr "B<-f>|B<--force>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:53
+msgid "Overwrite any existing orig.tar in the parent directory."
+msgstr "Sobrescreve qualquer orig.tar existente no directório pai."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:55
+msgid "B<--just-print>"
+msgstr "B<--just-print>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:57
+msgid ""
+"Instead of actually invoking git-archive(1), output information about how it "
+"would be invoked. Ignores I<--force>."
+msgstr ""
+"Em vez de na realidade invocar git-archive(1), escreve informação sobre como "
+"este seria invocado. Ignora I<--force>."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:60
+msgid ""
+"Note that running the git-archive(1) invocation outputted with this option "
+"may not produce the same output. This is because B<git-deborig> takes care "
+"to disables git attributes otherwise heeded by git-archive(1), as detailed "
+"above."
+msgstr ""
+"Note ao correr a invocação do git-archive(1) com esta opção pode não "
+"produzir os mesmos resultados. Isto porque B<git-deborig> trata de "
+"desactivar atributos git que caso contrário são precisos pelo git-"
+"archive(1), como detalhado em cima."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:65
+msgid "B<--just-print-tag-names>"
+msgstr "B<--just-print-tag-names>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:67
+msgid ""
+"Instead of actually invoking git-archive(1), or even checking which tags "
+"exist, print the tag names we would consider for the upstream version number "
+"in the first entry in the Debian changelog, or that supplied with B<--"
+"version>."
+msgstr ""
+"Em vez de na realidade invocar git-archive(1), ou mesmo verificar quais "
+"etiquetas existem, escreve os nomes de etiquetas que iríamos considerar para "
+"o número de versão do autor na primeira entrada no registo de alterações "
+"Debian, ou isso fornecido com B<--version>."
+
+#. type: =item
+#: ../scripts/git-deborig.pl:72
+msgid "B<--version=>I<VERSION>"
+msgstr "B<--version=>I<VERSION>"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:74
+msgid ""
+"Instead of reading the new upstream version from the first entry in the "
+"Debian changelog, use I<VERSION>."
+msgstr ""
+"Em vez de ler a nova versão de autor a partir da primeira entrada no registo "
+"de alterações Debian, usa I<VERSION>."
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:81
+msgid "git-archive(1), dgit-maint-merge(7), dgit-maint-debrebase(7)"
+msgstr "git-archive(1), dgit-maint-merge(7), dgit-maint-debrebase(7)"
+
+#. type: textblock
+#: ../scripts/git-deborig.pl:85
+msgid "B<git-deborig> was written by Sean Whitton <spwhitton@spwhitton.name>."
+msgstr ""
+"B<git-deborig> foi escrito por Sean Whitton <spwhitton@spwhitton.name>."
+
+#. type: TH
+#: ../scripts/grep-excuses.1:1
+#, no-wrap
+msgid "GREP-EXCUSES"
+msgstr "GREP-EXCUSES"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:4
+msgid ""
+"grep-excuses - search the testing excuses files for a specific maintainer"
+msgstr ""
+"grep-excuses - procura ficheiros de desculpas de testes para um maintainer "
+"específico"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:6
+msgid "B<grep-excuses> [I<options>] [I<maintainer>|I<package>]"
+msgstr "B<grep-excuses> [I<options>] [I<maintainer>|I<package>]"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:14
+msgid ""
+"B<grep-excuses> downloads the autoremovals and update_excuses.html files and "
+"greps them for the specified maintainer or package name. The B<wget> "
+"package is required for this script. If no name is given on the command "
+"line, first the environment variable B<DEBFULLNAME> is used if it is "
+"defined, and failing that, the configuration variable described below is "
+"used."
+msgstr ""
+"B<grep-excuses> descarrega os ficheiros autoremovals e update_excuses.html e "
+"faz-lhes grep para o maintainer ou nome de pacote especificado. O pacote "
+"B<wget> é necessário para este script. Se nenhum nome for dado na linha de "
+"comandos, é primeiro usada a variável de ambiente B<DEBFULLNAME> se estiver "
+"definida, e falhando isso, é usada a variável de configuração descrita em "
+"baixo."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:19
+#, no-wrap
+msgid "B<--wipnity>, B<-w>"
+msgstr "B<--wipnity>, B<-w>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:23
+msgid ""
+"Get information from E<lt>https://qa.debian.org/excuses.phpE<gt>. One or "
+"more package names must be given when using this option."
+msgstr ""
+"Obtém informação de E<lt>https://qa.debian.org/excuses.phpE<gt>. Tem de ser "
+"dado um ou mais nomes de pacotes quando se usa esta opção."
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:26 ../scripts/whodepends.1:14
+msgid "Show a brief usage message."
+msgstr "Mostra uma breve mensagem de utilização."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:29
+#, no-wrap
+msgid "B<--autopkgtests>"
+msgstr "B<--autopkgtests>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:37
+msgid ""
+"Investigate and show autopkgtest (ci.debian.net) failures in your packages "
+"but apparently caused by new versions of other packages trying to migrate. "
+"(B<--no-autopkgtests> can be used to override GREP_EXCUSES_AUTOPKGTESTS.)"
+msgstr ""
+"Investiga e mostra falhas autopkgtest (ci.debian.net) nos seus pacotes mas "
+"aparentemente causadas por novas versões de outros pacotes a tentar migrar. "
+"Pode-se usar (B<--no-autopkgtests> para sobrepor GREP_EXCUSES_AUTOPKGTESTS.)"
+
+#. type: TP
+#: ../scripts/grep-excuses.1:37
+#, no-wrap
+msgid "B<--no-autoremovals>"
+msgstr "B<--no-autoremovals>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:40
+msgid ""
+"Investigate and show only testing propagation excuses, not autoremovals."
+msgstr ""
+"Investiga e mostra apenas desculpas de propagação de testes, não auto-"
+"remoções."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:40
+msgid "B<--experimental>, B<-e>"
+msgstr "B<--experimental>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:43
+msgid ""
+"Print pseudo-excuses for manual migration from experimental to unstable."
+msgstr ""
+
+#. type: =item
+#: ../scripts/grep-excuses.1:43 ../scripts/hardening-check.pl:647
+#: ../scripts/salsa.pl:487
+#, no-wrap
+msgid "B<--debug>"
+msgstr "B<--debug>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:46
+msgid "Print debugging output to stderr (including url(s) fetched)."
+msgstr ""
+"Escreve resultados de depuração no stderr (incluindo os url(s) obtidos)."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:52
+#, no-wrap
+msgid "B<GREP_EXCUSES_MAINTAINER>"
+msgstr "B<GREP_EXCUSES_MAINTAINER>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:56
+msgid ""
+"The default maintainer, email or package to grep for if none is specified on "
+"the command line."
+msgstr ""
+"O maintainer, email ou pacote predefinido para fazer grep se nenhum for "
+"especificado na linha de comandos."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:56
+#, no-wrap
+msgid "B<GREP_EXCUSES_AUTOPKGTESTS>"
+msgstr "B<GREP_EXCUSES_AUTOPKGTESTS>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:61
+msgid ""
+"Boolean: whether to show autopkgtest failures in other packages. See B<--"
+"autopkgtests>."
+msgstr ""
+"Booleano: se se deve mostrar falhas de autopkgtest em outros pacotes. Veja "
+"B<--autopkgtests>."
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:63 ../scripts/plotchangelog.1:126
+msgid "B<devscripts.conf>(5)"
+msgstr "B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:65
+msgid ""
+"Joey Hess E<lt>joeyh@debian.orgE<gt>; modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Joey Hess E<lt>joeyh@debian.orgE<gt>; modificações por Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:523
+msgid "hardening-check - check binaries for security hardening features"
+msgstr ""
+"hardening-check - verifica binários por características de endurecimento de "
+"segurança"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:527
+msgid "hardening-check [options] [ELF ...]"
+msgstr "hardening-check [opções] [ELF ...]"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:529
+msgid ""
+"Examine a given set of ELF binaries and check for several security hardening "
+"features, failing if they are not all found."
+msgstr ""
+"Examina um dado grupo de binários ELF e verifica por várias características "
+"de endurecimento de segurança, falhando se não as encontrar."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:534
+msgid ""
+"This utility checks a given list of ELF binaries for several security "
+"hardening features that can be compiled into an executable. These features "
+"are:"
+msgstr ""
+"Este utilitário verifica uma dada lista de binários ELF por várias "
+"funcionalidades de endurecimento de segurança que podem ser compiladas em um "
+"executável. Estas funcionalidades são:"
+
+#. type: =item
+#: ../scripts/hardening-check.pl:540
+msgid "B<Position Independent Executable>"
+msgstr "B<Position Independent Executable>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:542
+msgid ""
+"This indicates that the executable was built in such a way (PIE) that the "
+"\"text\" section of the program can be relocated in memory. To take full "
+"advantage of this feature, the executing kernel must support text Address "
+"Space Layout Randomization (ASLR)."
+msgstr ""
+"Isto indica que o executável foi compilado de tal modo (PIE) que a secção "
+"\"text\" do programa pode ser re-locada na memória. Para se tirar completa "
+"vantagem desta funcionalidade, o kernel executante tem de suportar Address "
+"Space Layout Randomization (ASLR) de texto."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:547
+msgid "B<Stack Protected>"
+msgstr "B<Stack Protected>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:549
+msgid ""
+"This indicates that there is evidence that the ELF was compiled with the "
+"L<gcc(1)> option B<-fstack-protector> (e.g. uses B<__stack_chk_fail>). The "
+"program will be resistant to having its stack overflowed."
+msgstr ""
+"Isto indica que há evidência de que o ELF foi compilado com a opção B<-"
+"fstack-protector> do L<gcc(1)> (ex. usa B<__stack_chk_fail>). O programa "
+"será resistente a ter o seu empilhamento transbordado."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:553
+msgid ""
+"When an executable was built without any character arrays being allocated on "
+"the stack, this check will lead to false alarms (since there is no use of "
+"B<__stack_chk_fail>), even though it was compiled with the correct options."
+msgstr ""
+"Quando um executável foi compilado sem quaisquer matrizes de caracteres "
+"sendo alocadas na pilha, esta verificação irá dar alarmes falsos (pois não "
+"há utilização de B<__stack_chk_fail>), mesmo que tenha sido compilado com as "
+"opções corretas."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:558
+msgid "B<Fortify Source functions>"
+msgstr "B<Fortify Source functions>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:560
+msgid ""
+"This indicates that the executable was compiled with B<-D_FORTIFY_SOURCE=2> "
+"and B<-O1> or higher. This causes certain unsafe glibc functions with their "
+"safer counterparts (e.g. B<strncpy> instead of B<strcpy>), or replaces calls "
+"that are verifiable at runtime with the runtime-check version (e.g. "
+"B<__memcpy_chk> insteade of B<memcpy>)."
+msgstr ""
+"Isto indica que o executável foi compilado com B<-D_FORTIFY_SOURCE=2> e B<-"
+"O1> ou superior. Isto causa certas funções glibc não seguras com os sues "
+"homólogos mais seguros (ex. B<strncpy> em vez de B<strcpy>), ou replica "
+"chamadas que são verificáveis durante a execução com a versão runtime-check "
+"(ex. B<__memcpy_chk> em vez de B<memcpy>)."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:566
+msgid ""
+"When an executable was built such that the fortified versions of the glibc "
+"functions are not useful (e.g. use is verified as safe at compile time, or "
+"use cannot be verified at runtime), this check will lead to false alarms. "
+"In an effort to mitigate this, the check will pass if any fortified function "
+"is found, and will fail if only unfortified functions are found. Uncheckable "
+"conditions also pass (e.g. no functions that could be fortified are found, "
+"or not linked against glibc)."
+msgstr ""
+"Quando um executável foi compilado de modo em que as versões fortificadas do "
+"glibc não são úteis (ex. o uso é verifica como seguro durante a compilação, "
+"ou o uso não pode ser verificado durante a execução), esta verificação pode "
+"levar a falsos alarmes. Num esforço para mitigar isto, a verificação irá "
+"passar se for encontrada alguma função fortificada, e irá falhar se apenas "
+"forem encontras funções não fortificadas. As condições não verificáveis "
+"também passam (ex. nenhum função que podia ser fortificada foi encontrada, "
+"or não estão ligadas contra glibc)."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:574
+msgid "B<Read-only relocations>"
+msgstr "B<Read-only relocations>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:576
+msgid ""
+"This indicates that the executable was build with B<-Wl,-z,relro> to have "
+"ELF markings (RELRO) that ask the runtime linker to mark any regions of the "
+"relocation table as \"read-only\" if they were resolved before execution "
+"begins. This reduces the possible areas of memory in a program that can be "
+"used by an attacker that performs a successful memory corruption exploit."
+msgstr ""
+"Isto indica que o executável foi compilado com B<-Wl,-z,relro> para ter "
+"marcações ELF (RELRO) que pedem ao vinculador de tempo de execução para "
+"marcar quaisquer regiões da tabela de re-locação como \"read-only\" se elas "
+"foram resolvidas antes da execução começar. Isto reduz as áreas de memória "
+"possíveis num programa que podem ser usadas por um atacante que explore um "
+"ponto fraco de corrupção de memória com sucesso."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:583
+msgid "B<Immediate binding>"
+msgstr "B<Immediate binding>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:585
+msgid ""
+"This indicates that the executable was built with B<-Wl,-z,now> to have ELF "
+"markings (BIND_NOW) that ask the runtime linker to resolve all relocations "
+"before starting program execution. When combined with RELRO above, this "
+"further reduces the regions of memory available to memory corruption attacks."
+msgstr ""
+"Isto indica que o executável foi compilado com B<-Wl,-z,now> para ter "
+"marcações ELF (BIND_NOW) que pedem ao vinculador de tempo de execução para "
+"resolver todas re-locações antes de iniciar a execução do programa. Quando "
+"combinada com RELRO em cima, isto reduz ainda mais as regiões de memória "
+"disponíveis para ataques de corrupção de memória."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:597
+msgid "B<--nopie>, B<-p>"
+msgstr "B<--nopie>, B<-p>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:599
+msgid "Do not require that the checked binaries be built as PIE."
+msgstr "Não requer que os binários verificados sejam compilados como PIE."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:601
+msgid "B<--nostackprotector>, B<-s>"
+msgstr "B<--nostackprotector>, B<-s>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:603
+msgid ""
+"Do not require that the checked binaries be built with the stack protector."
+msgstr ""
+"Não requer que os binários verificados sejam compilados com o protector de "
+"pilha."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:605
+msgid "B<--nofortify>, B<-f>"
+msgstr "B<--nofortify>, B<-f>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:607
+msgid "Do not require that the checked binaries be built with Fortify Source."
+msgstr ""
+"Não requer que os binários verificados sejam compilados com Fortify Source."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:609
+msgid "B<--norelro>, B<-r>"
+msgstr "B<--norelro>, B<-r>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:611
+msgid "Do not require that the checked binaries be built with RELRO."
+msgstr "Não requer que os binários verificados sejam compilados com RELRO."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:613
+msgid "B<--nobindnow>, B<-b>"
+msgstr "B<--nobindnow>, B<-b>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:615
+msgid "Do not require that the checked binaries be built with BIND_NOW."
+msgstr "Não requer que os binários verificados sejam compilados com BIND_NOW."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:617
+msgid "B<--nocfprotection>, B<-b>"
+msgstr "B<--nocfprotection>, B<-b>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:619
+msgid ""
+"Do not require that the checked binaries be built with control flow "
+"protection."
+msgstr ""
+"Não requer que os binários verificados sejam compilados com controle de "
+"proteção de fluxo."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:623
+msgid "Only report failures."
+msgstr "Apenas reporta falhas."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:625 ../scripts/uscan.pl:1567
+msgid "B<--verbose>, B<-v>"
+msgstr "B<--verbose>, B<-v>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:627
+msgid "Report verbosely on failures."
+msgstr "Reporta detalhadamente todas as falhas."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:629
+msgid "B<--report-functions>, B<-R>"
+msgstr "B<--report-functions>, B<-R>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:631
+msgid "After the report, display all external functions needed by the ELF."
+msgstr ""
+"Após o relatório, mostra todas as funções externas necessárias pelo ELF."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:633
+msgid "B<--find-libc-functions>, B<-F>"
+msgstr "B<--find-libc-functions>, B<-F>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:635
+msgid ""
+"Instead of the regular report, locate the libc for the first ELF on the "
+"command line and report all the known \"fortified\" functions exported by "
+"libc."
+msgstr ""
+"Em vez do relatório regular, localiza a libc para o primeiro ELF na linha de "
+"comandos e reporta todas as funções \"fortificadas\" conhecidas exportadas "
+"pela libc."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:639
+msgid "B<--color>, B<-c>"
+msgstr "B<--color>, B<-c>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:641
+msgid "Enable colorized status output."
+msgstr "Activa resultados coloridos de estados."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:643
+msgid "B<--lintian>, B<-l>"
+msgstr "B<--lintian>, B<-l>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:645
+msgid "Switch reporting to lintian-check-parsable output."
+msgstr ""
+"Muda para escrita de resultados de verificações-analisáveis-pelo-lintian."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:649
+msgid "Report some debugging during processing."
+msgstr "Reporta alguma depuração durante processamento."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:651
+msgid "B<--help>, B<-h>, B<-?>"
+msgstr "B<--help>, B<-h>, B<-?>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:653
+msgid "Print a brief help message and exit."
+msgstr "Escreve mensagem breve de ajuda e termina."
+
+#. type: =item
+#: ../scripts/hardening-check.pl:655
+msgid "B<--man>, B<-H>"
+msgstr "B<--man>, B<-H>"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:657
+msgid "Print the manual page and exit."
+msgstr "Monstra o manual e termina."
+
+#. type: =head1
+#: ../scripts/hardening-check.pl:661
+msgid "RETURN VALUE"
+msgstr "VALOR DE RETORNO"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:663
+msgid ""
+"When all checked binaries have all checkable hardening features detected, "
+"this program will finish with an exit code of 0. If any check fails, the "
+"exit code with be 1. Individual checks can be disabled via command line "
+"options."
+msgstr ""
+"Quando todos os binários verificados tiverem todas as funcionalidades de "
+"endurecimento verificáveis detetadas, este programa irá terminar com um "
+"código de saída de 0, e se alguma verificação falhar, o código de saída de "
+"1. Pode ser desactivadas verificações individuais via opções de linha de "
+"comandos."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:670
+msgid "Kees Cook <kees@debian.org>"
+msgstr "Kees Cook <kees@debian.org>"
+
+#. type: =head1
+#: ../scripts/hardening-check.pl:672 ../scripts/salsa.pl:1037
+msgid "COPYRIGHT AND LICENSE"
+msgstr "COPYRIGHT E LICENÇA"
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:674
+msgid "Copyright 2009-2013 Kees Cook <kees@debian.org>."
+msgstr "Copyright 2009-2013 Kees Cook <kees@debian.org>."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:676
+msgid ""
+"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; version 2 or later."
+msgstr ""
+"Este programa é software livre: você pode redistribuí-lo e/ou modifica-lo "
+"sob os termos da GNU General Public License como publicada pela Free "
+"Software Foundation,versão 2 ou posterior."
+
+#. type: textblock
+#: ../scripts/hardening-check.pl:682
+msgid "L<gcc(1)>, L<hardening-wrapper(1)>"
+msgstr "L<gcc(1)>, L<hardening-wrapper(1)>"
+
+#. type: TH
+#: ../scripts/list-unreleased.1:1
+#, no-wrap
+msgid "LIST-UNRELEASED"
+msgstr "LIST-UNRELEASED"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:4
+msgid "list-unreleased - display UNRELEASED packages"
+msgstr "list-unreleased - mostra pacotes NÃO-LANÇADOS"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:6
+msgid "B<list-unreleased> [I<arg> ...] [I<path> ...]"
+msgstr "B<list-unreleased> [I<arg> ...] [I<path> ...]"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:9
+msgid ""
+"Searches for packages whose changelogs indicate there are pending changes "
+"(UNRELEASED) and either lists them or displays the relevant changelog entry."
+msgstr ""
+"Procura pacotes cujos registos de alterações indicam que existem alterações "
+"pendentes (UNRELEASED) e ou os lista ou mostra a entrada relevante no "
+"changelog."
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:12
+msgid ""
+"By default it searches for packages under the current directory. If a path "
+"is specified it will look for packages under that directory instead."
+msgstr ""
+"Por predefinição procura pacotes sob o directório actual. Se ao invés for "
+"especificado um caminho, irá procurar pacotes sob esse directório."
+
+#. type: TP
+#: ../scripts/list-unreleased.1:13
+#, no-wrap
+msgid "B<-c>"
+msgstr "B<-c>"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:16
+msgid "Display pending changes."
+msgstr "Mostra alterações pendentes."
+
+#. type: TP
+#: ../scripts/list-unreleased.1:16
+#, no-wrap
+msgid "B<-R>"
+msgstr "B<-R>"
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:19
+msgid "Don't recurse into subdirectories looking for packages."
+msgstr "Não entra em sub-directórios à procura de pacotes."
+
+#. type: Plain text
+#: ../scripts/list-unreleased.1:23
+msgid ""
+"B<list-unreleased> was written by Frans Pop E<lt>elendil@planet.nlE<gt>. "
+"This manual page was written by Joey Hess E<lt>joeyh@debian.orgE<gt>."
+msgstr ""
+"B<list-unreleased> foi escrito por Frans Pop E<lt>elendil@planet.nlE<gt>. "
+"Este manual foi escrito por Joey Hess E<lt>joeyh@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:3
+msgid "ltnu - lists packages of a maintainer ordered by last upload"
+msgstr "ltnu - lista pacotes de um maintainer ordenados pelo último envio"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:7
+msgid "B<env> DEBEMAIL=I<maintainer> B<ltnu> [-m]"
+msgstr "B<env> DEBEMAIL=I<maintainer> B<ltnu> [-m]"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:9
+msgid "B<ltnu> [-m] I<maintainer>"
+msgstr "B<ltnu> [-m] I<maintainer>"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:11
+msgid "B<ltnu> --help"
+msgstr "B<ltnu> --help"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:15
+msgid ""
+"B<ltnu> (Long Time No Upload) queries the public mirror of the Ultimate "
+"Debian Database (udd-mirror.debian.net) for all uploads of packages by the "
+"given uploader or maintainer and displays them ordered by the last upload of "
+"that package to Debian Unstable, oldest uploads first."
+msgstr ""
+"B<ltnu> (Long Time No Upload) questiona o espelho público do Ultimate Debian "
+"Database (udd-mirror.debian.net) por todos os envios de pacotes pelo dado "
+"uploader ou maintainer e mostra-os ordenados pelo último envio desse pacote "
+"para Debian Unstable, os envios mais antigos em primeiro."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:21
+msgid ""
+"Its primary purpose is to check which of your own or your team's packages "
+"haven't been uploaded for a long time and likely need a packaging revamp. "
+"It's less suitable for MIA team purposes as it doesn't make a difference "
+"with regards to who actually uploaded a package."
+msgstr ""
+"O seu objectivo principal é verificar qual dos seus pacotes, ou da sua "
+"equipa, não foi enviado à muito tempo e provavelmente precisa de uma "
+"renovação de empacotamento. É menos apropriado para objectivos de equipa MIA "
+"pois não diferencia sobre quem realmente enviou o pacote."
+
+#. type: =item
+#: ../scripts/ltnu.pod:31
+msgid "-m"
+msgstr "-m"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:33
+msgid "Only search in the Maintainer field and ignore the Uploaders field."
+msgstr "Apenas procura no campo Maintainer e ignora o campo Uploaders."
+
+#. type: =head1
+#: ../scripts/ltnu.pod:37
+msgid "PARAMETERS"
+msgstr "PARÂMETROS"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:39
+msgid ""
+"The maintainer/uploader to query can be given either by setting C<$DEBEMAIL> "
+"as environment variable or as single commandline parameter."
+msgstr ""
+"O maintainer/uploader a questionar pode ser dado ou definindo C<$DEBEMAIL> "
+"como variável de ambiente ou como único parâmetro de linha de comandos."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:42
+msgid ""
+"If a commandline parameter does not contain an C<@>, C<@debian.org> is "
+"appended, e.g. C<ltnu abe> queries for C<abe@debian.org>."
+msgstr ""
+"Se um parâmetro de linha de comandos não conter um C<@>, C<@debian.org> é "
+"acrescentado, ex. C<ltnu abe> questiona por C<abe@debian.org>."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:45
+msgid ""
+"Exceptions are some shortcuts for common, long e-mail addresses. So far "
+"implemented shortcuts:"
+msgstr ""
+"Excepções são alguns atalhos para endereços de email longos comuns. Atalhos "
+"implementados até agora:"
+
+#. type: =item
+#: ../scripts/ltnu.pod:50
+msgid "pkg-gnustep"
+msgstr "pkg-gnustep"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:52
+msgid "pkg-gnustep-maintainers@lists.alioth.debian.org"
+msgstr "pkg-gnustep-maintainers@lists.alioth.debian.org"
+
+#. type: =item
+#: ../scripts/ltnu.pod:54
+msgid "pkg-perl"
+msgstr "pkg-perl"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:56
+msgid "pkg-perl-maintainers@lists.alioth.debian.org"
+msgstr "pkg-perl-maintainers@lists.alioth.debian.org"
+
+#. type: =item
+#: ../scripts/ltnu.pod:58
+msgid "pkg-zsh"
+msgstr "pkg-zsh"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:60
+msgid "pkg-zsh-devel@lists.alioth.debian.org"
+msgstr "pkg-zsh-devel@lists.alioth.debian.org"
+
+#. type: =item
+#: ../scripts/ltnu.pod:62
+msgid "qa"
+msgstr "qa"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:64
+msgid "packages@qa.debian.org"
+msgstr "packages@qa.debian.org"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:70
+msgid "The following environment variables are honoured:"
+msgstr "As seguintes variáveis de ambiente são honradas."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:76
+msgid "Used for querying if no parameter is given."
+msgstr "Usado para consulta se não for dado nenhum parâmetro."
+
+#. type: =item
+#: ../scripts/ltnu.pod:78
+msgid "PAGER"
+msgstr "PAGINADOR"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:80
+msgid "Used by B<psql> as pager."
+msgstr "Usado pelo B<psql> como paginador."
+
+#. type: verbatim
+#: ../scripts/ltnu.pod:86
+#, no-wrap
+msgid ""
+" $ ltnu pkg-zsh\n"
+" source | ver | uploaded\n"
+" -------------------------+--------------+------------------------\n"
+" zgen | 0~20150919-3 | 2016-08-24 04:55:31+00\n"
+" zplug | 2.4.1-1 | 2017-01-13 09:51:26+00\n"
+" zsh-syntax-highlighting | 0.6.0-1 | 2017-08-30 09:06:26+00\n"
+" zsh | 5.4.2-2 | 2017-11-02 20:56:55+00\n"
+" (4 rows)\n"
+"\n"
+msgstr ""
+" $ ltnu pkg-zsh\n"
+" source | ver | uploaded\n"
+" -------------------------+--------------+------------------------\n"
+" zgen | 0~20150919-3 | 2016-08-24 04:55:31+00\n"
+" zplug | 2.4.1-1 | 2017-01-13 09:51:26+00\n"
+" zsh-syntax-highlighting | 0.6.0-1 | 2017-08-30 09:06:26+00\n"
+" zsh | 5.4.2-2 | 2017-11-02 20:56:55+00\n"
+" (4 rows)\n"
+"\n"
+
+#. type: =head1
+#: ../scripts/ltnu.pod:95
+msgid "DEPENDENCIES"
+msgstr "DEPENDÊNCIAS"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:97
+msgid ""
+"B<ltnu> uses the PostgreSQL client command B<psql> and hence needs Debian's "
+"B<postgresql-client> package to be installed."
+msgstr ""
+"B<ltnu> usa o comando de cliente PostgreSQL B<psql> e por isso precisa que o "
+"pacote Debian B<postgresql-client> seja instalado."
+
+#. type: =head1
+#: ../scripts/ltnu.pod:100
+msgid "AUTHOR, COPYRIGHT, LICENSE"
+msgstr "AUTOR, COPYRIGHT, LICENÇA"
+
+#. type: textblock
+#: ../scripts/ltnu.pod:102
+msgid ""
+"Copyright 2017 Axel Beckert <abe@debian.org>. Licensed under the GNU General "
+"Public License, version 2 or later."
+msgstr ""
+"Copyright 2017 Axel Beckert <abe@debian.org>. Licenciado sob a GNU General "
+"Public License, versão 2 ou posterior."
+
+#. type: textblock
+#: ../scripts/ltnu.pod:107
+msgid ""
+"L<https://udd-mirror.debian.net/>, L<https://udd.debian.org/>, L<https://"
+"wiki.debian.org/UltimateDebianDatabase>"
+msgstr ""
+"L<https://udd-mirror.debian.net/>, L<https://udd.debian.org/>, L<https://"
+"wiki.debian.org/UltimateDebianDatabase>"
+
+#. type: TH
+#: ../scripts/manpage-alert.1:1
+#, no-wrap
+msgid "MANPAGE-ALERT"
+msgstr "MANPAGE-ALERT"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:4
+msgid "manpage-alert - check for binaries without corresponding manpages"
+msgstr "manpage-alert - verifica por binários sem um manual correspondente."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:6
+msgid "B<manpage-alert> [I<options>] [I<paths>]"
+msgstr "B<manpage-alert> [I<options>] [I<paths>]"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:9
+msgid ""
+"B<manpage-alert> searches the given list of paths for binaries without "
+"corresponding manpages."
+msgstr ""
+"B<manpage-alert> sonda a lista de caminhos dada por binários sem manuais "
+"correspondentes."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:12
+msgid ""
+"If no I<paths> are specified on the command line, the path list I</bin /"
+"sbin /usr/bin /usr/sbin /usr/games> will be assumed."
+msgstr ""
+"Se não forem especificados I<paths> na linha de comandos, é assumida a lista "
+"de caminhos I</bin /sbin /usr/bin /usr/sbin /usr/games>."
+
+#. type: TP
+#: ../scripts/manpage-alert.1:13
+#, no-wrap
+msgid "B<-h>,B<--help>"
+msgstr "B<-h>,B<--help>"
+
+#. type: TP
+#: ../scripts/manpage-alert.1:16
+#, no-wrap
+msgid "B<-V>,B<--version>"
+msgstr "B<-V>,B<--version>"
+
+#. type: TP
+#: ../scripts/manpage-alert.1:19
+#, no-wrap
+msgid "B<-f>,B<--file>"
+msgstr "B<-f>,B<--file>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:22
+msgid "Show filenames of missing manpages without any leading text."
+msgstr ""
+"Mostra nomes de ficheiros dos manuais em falta sem nenhum texto inicial."
+
+#. type: TP
+#: ../scripts/manpage-alert.1:22
+#, no-wrap
+msgid "B<-p>,B<--package>"
+msgstr "B<-p>,B<--package>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:25
+msgid "Show filenames of missing manpages with their package name."
+msgstr ""
+"Mostra nomes de ficheiros dos manuais em falta com o seu nome de pacote."
+
+#. type: TP
+#: ../scripts/manpage-alert.1:25
+#, no-wrap
+msgid "B<-n>,B<--no-stat>"
+msgstr "B<-n>,B<--no-stat>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:28
+msgid "Do not show statistics at the end."
+msgstr "Não mostra estatísticas no final."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:33
+msgid ""
+"B<manpage-alert> was written by Branden Robinson and modified by Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt> and Adam D. Barratt E<lt>debian-bts@adam-"
+"barratt.org.ukE<gt> (who also wrote this manpage) for the devscripts package."
+msgstr ""
+"B<manpage-alert> foi escrito por Branden Robinson e modificado por Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt> e Adam D. Barratt E<lt>debian-bts@adam-"
+"barratt.org.ukE<gt> (quem também escreveu este manual) para o pacote "
+"devscripts."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:35
+msgid ""
+"This manpage and the associated program are licensed under the terms of the "
+"GPL, version 2 or later."
+msgstr ""
+"Este manual e o programa associado têm licença sob os termos de GPL, versão "
+"2 ou posterior."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:23
+msgid "mass-bug - mass-file a bug report against a list of packages"
+msgstr ""
+"mass-bug - ficheiro-em-massa de relatórios de bug contra uma lista de pacotes"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:27
+msgid ""
+"B<mass-bug> [I<options>] B<--subject=\">I<bug subject>B<\"> I<template "
+"package-list>"
+msgstr ""
+"B<mass-bug> [I<options>] B<--subject=\">I<bug subject>B<\"> I<template "
+"package-list>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:31
+msgid ""
+"mass-bug assists in filing a mass bug report in the Debian BTS on a set of "
+"packages. For each package in the package-list file (which should list one "
+"package per line together with an optional version number separated from the "
+"package name by an underscore), it fills out the template, adds BTS pseudo-"
+"headers, and either displays or sends the bug report."
+msgstr ""
+"mass-bug ajuda a preencher um relatório de bug em massa no Debian BTS num "
+"conjunto de pacotes. Para cada pacote no ficheiro package-list (o qual deve "
+"lista um pacote por linha juntamente com um número de versão opcional "
+"separado do nome do pacote por um underscore), Preenche o module, adiciona "
+"pseudo-cabeçalhos do BTS, e ou mostra ou envia o relatório de bug."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:37
+msgid ""
+"Warning: Some care has been taken to avoid unpleasant and common mistakes, "
+"but this is still a power tool that can generate massive amounts of bug "
+"report mails. Use it with care, and read the documentation in the "
+"Developer's Reference about mass filing of bug reports first."
+msgstr ""
+"Aviso: Foram tomados alguns cuidados para evitar erros comuns e "
+"desagradáveis, mas é ainda uma ferramenta poderosa que consegue gerar "
+"quantidades massivas de mails com relatórios de bug. Use-a com cuidado, e "
+"leia primeiro a documentação no Developer's Reference acerca de "
+"preenchimento em massa de relatórios de bug."
+
+#. type: =head1
+#: ../scripts/mass-bug.pl:42
+msgid "TEMPLATE"
+msgstr "MODELO"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:44
+msgid ""
+"The template file is the body of the message that will be sent for each bug "
+"report, excluding the BTS pseudo-headers. In the template, #PACKAGE# is "
+"replaced with the name of the package. If a version was specified for the "
+"package, #VERSION# will be replaced by that version."
+msgstr ""
+"O ficheiro modelo é o corpo da mensagem que irá ser enviada para cada "
+"relatório de bug, excluindo ps pseudo-cabeçalhos do BTS. #PACKAGE# é "
+"substituído pelo nome do pacote. Se for especificada uma versão do pacote, "
+"#VERSION# será substituído por essa versão."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:49
+msgid ""
+"The components of the version number may be specified using #EPOCH#, "
+"#UPSTREAM_VERSION# and #REVISION#. #EPOCH# includes the trailing colon and "
+"#REVISION# the leading dash so that #EPOCH#UPSTREAM_VERSION##REVISION# is "
+"always the same as #VERSION#."
+msgstr ""
+"Os componentes do número de versão podem ser especificados usando #EPOCH#, "
+"#UPSTREAM_VERSION# e #REVISION#. #EPOCH# inclui os dois pontos finais e "
+"#REVISION# a barra inicial para que #EPOCH#UPSTREAM_VERSION##REVISION# seja "
+"sempre o mesmo que #VERSION#."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:54
+msgid ""
+"Note that text in the template will be automatically word-wrapped to 70 "
+"columns, up to the start of a signature (indicated by S<'-- '> at the start "
+"of a line on its own). This is another reason to avoid including BTS pseudo-"
+"headers in your template."
+msgstr ""
+"Note que o texto no modelo será sempre dobrado-no-fim-de-palavra até 70 "
+"colunas, até ao inicio da assinatura (indicada por S<'-- '> no início da sua "
+"própria linha). Esta é outra razão para evitar incluir pseudo-cabeçalhos de "
+"BTS no seu modelo."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:61
+msgid ""
+"B<mass-bug> examines the B<devscripts> configuration files as described "
+"below. Command line options override the configuration file settings, "
+"though."
+msgstr ""
+"B<mass-bug> examina os ficheiros de configuração do B<devscripts> como "
+"descrito em baixo. Ainda que as opções de linha de comandos sobrepõem as "
+"definições dos ficheiros de configuração."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:67
+msgid ""
+"B<--severity=>(B<wishlist>|B<minor>|B<normal>|B<important>|B<serious>|"
+"B<grave>|B<critical>)"
+msgstr ""
+"B<--severity=>(B<wishlist>|B<minor>|B<normal>|B<important>|B<serious>|"
+"B<grave>|B<critical>)"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:69
+msgid ""
+"Specify the severity with which bugs should be filed. Default is B<normal>."
+msgstr ""
+"Especifica a severidade com a qual os bugs devem ser preenchidos. A "
+"predefinição é B<normal>."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:72
+msgid "B<--display>"
+msgstr "B<--display>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:74
+msgid ""
+"Fill out the templates for each package and display them all for "
+"verification. This is the default behavior."
+msgstr ""
+"Preenche os modelos para cada pacote e mostra-os todos para verificação. "
+"Este é o comportamento predefinido."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:77
+msgid "B<--send>"
+msgstr "B<--send>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:79
+msgid "Actually send the bug reports."
+msgstr "Envia realmente os relatórios de bug."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:81
+msgid "B<--subject=\">I<bug subject>B<\">"
+msgstr "B<--subject=\">I<bug subject>B<\">"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:83
+msgid ""
+"Specify the subject of the bug report. The subject will be automatically "
+"prefixed with the name of the package that the bug is filed against."
+msgstr ""
+"Especifica o assunto do relatório de bug. O assunto será automaticamente "
+"prefixado com o nome do pacote para o qual o bug é preenchido."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:86
+msgid "B<--tags>"
+msgstr "B<--tags>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:88
+msgid "Set the BTS pseudo-header for tags."
+msgstr "Define o pseudo-cabeçalho BTS para etiquetas."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:90 ../scripts/salsa.pl:566
+msgid "B<--user>"
+msgstr "B<--user>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:92
+msgid "Set the BTS pseudo-header for a usertags' user."
+msgstr ""
+"Define o pseudo-cabeçalho BTS para as etiquetas-de-utilizador do utilizador.."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:94
+msgid "B<--usertags>"
+msgstr "B<--usertags>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:96
+msgid "Set the BTS pseudo-header for usertags."
+msgstr "Define o pseudo-cabeçalho BTS para as etiquetas-de-utilizador."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:98
+msgid "B<--control=>I<COMMAND>"
+msgstr "B<--control=>I<COMMAND>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:100
+msgid ""
+"Add a BTS control command. This option may be repeated to add multiple "
+"control commands. For example, if you are mass-bug-filing \"please stop "
+"depending on this deprecated package\", and bug 123456 represents removal of "
+"the deprecated package, you could use:"
+msgstr ""
+"Adiciona um comando de controle de BTS. Esta opção pode ser repetida para "
+"adicionar vários comandos de controle. Por exemplo, se você estiver a "
+"preencher-bug-em-massa \"por favor parem de depender deste pacote "
+"descontinuado\", e o bug 123456 representar a remoção do pacote "
+"descontinuado, você pode usar:"
+
+#. type: verbatim
+#: ../scripts/mass-bug.pl:105
+#, no-wrap
+msgid ""
+" mass-bug --control='block 123456 by -1' ...\n"
+"\n"
+msgstr ""
+" mass-bug --control='block 123456 by -1' ...\n"
+"\n"
+
+#. type: =item
+#: ../scripts/mass-bug.pl:107
+msgid "B<--source>"
+msgstr "B<--source>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:109
+msgid ""
+"Specify that package names refer to source packages rather than binary "
+"packages."
+msgstr ""
+"Especifica que os nomes de pacotes referem pacotes fonte em vez de pacotes "
+"binários."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:114
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will not be passed to a shell. Default is F</usr/sbin/sendmail>."
+msgstr ""
+"Especifica o comando B<sendmail>. O comando será dividido em espaço em "
+"branco e não será passado para a shell. A predefinição é F</usr/sbin/"
+"sendmail>."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:117
+msgid "B<--no-wrap>"
+msgstr "B<--no-wrap>"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:119
+msgid "Do not wrap the template to lines of 70 characters."
+msgstr "Não embrulha o modelo para linhas de 70 caracteres."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:138
+msgid ""
+"B<DEBEMAIL> and B<EMAIL> can be set in the environment to control the email "
+"address that the bugs are sent from."
+msgstr ""
+"B<DEBEMAIL> e B<EMAIL> podem ser definidos no ambiente para controlar o "
+"endereço de email do remetente dos bugs."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:561
+msgid "This program is Copyright (C) 2006 by Joey Hess <joeyh@debian.org>."
+msgstr "Este programa tem Copyright (C) 2006 de Joey Hess <joeyh@debian.org>."
+
+#. type: TH
+#: ../scripts/mergechanges.1:1
+#, no-wrap
+msgid "MERGECHANGES"
+msgstr "MERGECHANGES"
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:4
+msgid "mergechanges - merge multiple changes files"
+msgstr "mergechanges - funde vários ficheiros de alterações"
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:6
+msgid ""
+"B<mergechanges> [B<-d>] [B<-f>] [B<-S>] [B<-i>] I<file1 file2> [I<file>...]"
+msgstr ""
+"B<mergechanges> [B<-d>] [B<-f>] [B<-S>] [B<-i>] I<file1 file2> [I<file>...]"
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:13
+msgid ""
+"B<mergechanges> merges two or more I<.changes> files, merging the "
+"Architecture, Description and Files (and Checksums-*, if present) fields of "
+"the two. There are checks made to ensure that the changes files are from "
+"the same source package and version and use the same changes file Format. "
+"The first changes file is used as the basis and the information from the "
+"later ones is merged into it."
+msgstr ""
+"B<mergechanges> funde dois os mais ficheiros I<.changes>, fundindo os campos "
+"Architecture, Description e Files (e Checksums-*, se presente) dos dois. são "
+"feitas verificações para assegurar que os ficheiros de alterações são do "
+"mesmo pacote fonte e versão e usam o mesmo formato de ficheiro de "
+"alterações. O primeiro ficheiro de alterações é usado como a base e a "
+"informação dos restantes é fundida nela."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:18
+msgid ""
+"The output is normally written to I<stdout>. If the B<-f> option is given, "
+"the output is written to I<package>_I<version>_multi.changes instead, in the "
+"same directory as the first changes file listed."
+msgstr ""
+"O resultado é normalmente escrito no I<stdout>. Se for dada a opção B<-f>, "
+"em vez disso o resultado é escrito para I<package>_I<version>_multi.changes, "
+"no mesmo directório do primeiro ficheiro de alterações listado."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:21
+msgid ""
+"If the B<-d> option is given and the output is generated successfully, the "
+"input files will be deleted."
+msgstr ""
+"Se for dada a opção B<-d> e o resultado for gerado com sucesso, os ficheiros "
+"lidos (de entrada) serão apagados."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:25
+msgid ""
+"If the B<-i> or B<--indep> option is given, source packages and architecture-"
+"independent (Architecture: all) packages are included in the output, but "
+"architecture-dependent packages are not."
+msgstr ""
+"Se for dada a opção B<-i> ou B<--indep>, pacotes fonte e pacotes "
+"independentes da arquitectura (Architecture: all) são incluídos no "
+"resultado, mas o pacotes dependentes da arquitectura não o são."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:28
+msgid ""
+"If the B<-S> or B<--source> option is given, only source packages are "
+"included in the output."
+msgstr ""
+"Se for dada a opção B<-S> ou B<--source>, apenas pacotes fonte são incluídos "
+"no resultado."
+
+#. type: Plain text
+#: ../scripts/mergechanges.1:33
+msgid ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>, Mark Hymers E<lt>mhy@debian.orgE<gt>, Adam D. "
+"Barratt E<lt>adam@adam-barratt.org.ukE<gt>, and Simon McVittie "
+"E<lt>smcv@debian.orgE<gt>."
+msgstr ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, modificações por Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>, Mark Hymers E<lt>mhy@debian.orgE<gt>, Adam D. "
+"Barratt E<lt>adam@adam-barratt.org.ukE<gt>, e Simon McVittie "
+"E<lt>smcv@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:26
+msgid ""
+"mk-build-deps - build a package satisfying a package's build-dependencies"
+msgstr ""
+"mk-build-deps - compila um pacote satisfazendo as dependências de compilação "
+"do pacote"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:30
+msgid "B<mk-build-deps> B<--help>|B<--version>"
+msgstr "B<mk-build-deps> B<--help>|B<--version>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:32
+msgid "B<mk-build-deps> [I<options>] I<control file> | I<package name> ..."
+msgstr "B<mk-build-deps> [I<options>] I<control file> | I<package name> ..."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:36
+msgid ""
+"Given a I<package name> and/or I<control file>, B<mk-build-deps> will use "
+"B<equivs> to generate a binary package which may be installed to satisfy all "
+"the build dependencies of the given package."
+msgstr ""
+"Dando um I<package name> e/ou I<control file>, B<mk-build-deps> irá usar "
+"B<equivs> para gerar um pacote binário que pode ser instalado para "
+"satisfazer todas as dependências de compilação do pacote dado."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:40
+msgid ""
+"If B<--build-dep> and/or B<--build-indep> are given, then the resulting "
+"binary package(s) will depend solely on the Build-Depends/Build-Depends-"
+"Indep dependencies, respectively."
+msgstr ""
+"Se B<--build-dep> e/ou B<--build-indep> forem dados, então o pacote(s) "
+"binário resultante irão depender somente das dependências Build-Depends/"
+"Build-Depends-Indep, respetivamente."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:48
+msgid "B<-i>, B<--install>"
+msgstr "B<-i>, B<--install>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:50
+msgid "Install the generated packages and its build-dependencies."
+msgstr "Instala os pacotes gerados e as suas dependências de compilação."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:52
+msgid "B<-t>, B<--tool>"
+msgstr "B<-t>, B<--tool>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:54
+msgid ""
+"When installing the generated package use the specified tool. (default: "
+"B<apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends>)"
+msgstr ""
+"Ao instalar o pacote gerado usa a ferramenta especificada. (predefinição: "
+"B<apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends>)"
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:57
+msgid "B<-r>, B<--remove>"
+msgstr "B<-r>, B<--remove>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:59
+msgid ""
+"Remove the package file after installing it. Ignored if used without the B<--"
+"install> switch."
+msgstr ""
+"Remove o ficheiro do pacote após o instalar. Ignorado se usado sem o switch "
+"B<--install>."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:62
+msgid "B<-a> I<foo>, B<--arch> I<foo>"
+msgstr "B<-a> I<foo>, B<--arch> I<foo>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:64
+msgid ""
+"Set the architecture of the produced binary package to I<foo>. If this "
+"option is not given, fall back to the value given by B<--host-arch>. If "
+"neither this option nor B<--host-arch> are given but the Build-Depends "
+"contain architecture restrictions, use the value printed by `dpkg-"
+"architecture -qDEB_HOST_ARCH`. Otherwise, use I<all>."
+msgstr ""
+"Define a arquitectura do pacote binário produzido para I<foo>. Se esta opção "
+"não for dada, regressa ao valor dado por B<--host-arch>. Se nem esta opção "
+"nem B<--host-arch> forem dados mas o Build-Depends contém restrições de "
+"arquitectura, usa o valor escrito por `dpkg-architecture -qDEB_HOST_ARCH`. "
+"Caso contrário, usa I<all>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:70
+msgid ""
+"The package architecture must be equal to the host architecture except if "
+"the package architecture is I<all>."
+msgstr ""
+"A arquitectura do pacote tem de ser igual à arquitectura da máquina excepto "
+"se a arquitectura do pacote for I<all>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:73
+msgid ""
+"The package architecture cannot be I<all> if the build and host architecture "
+"differ."
+msgstr ""
+"A arquitectura do pacote não pode ser I<all> se a arquitectura de compilação "
+"e da máquina forem diferentes."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:76
+msgid "B<--host-arch> I<foo>"
+msgstr "B<--host-arch> I<foo>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:78
+msgid ""
+"Set the host architecture the binary package is built for. This defaults to "
+"the value printed by `dpkg-architecture -qDEB_HOST_ARCH`. Use this option to "
+"create a binary package that is able to satisfy crossbuild dependencies."
+msgstr ""
+"Define a arquitectura de máquina para a qual o pacote binário é compilado. "
+"Isto predefine para o valor escrito por `dpkg-architecture -qDEB_HOST_ARCH`. "
+"Use esta opção para criar um pacote binário capaz de satisfazer dependências "
+"de compilação cruzada."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:82
+msgid ""
+"If this option is used together with B<--arch>, then they must be equal "
+"except if the value of B<--arch> is I<all>."
+msgstr ""
+"Se esta opção for usada juntamente com B<--arch>, então elas têm de ser "
+"iguais excepto de o valor de B<--arch> for I<all>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:85
+msgid ""
+"If B<--arch> is not given, then this option also sets the package "
+"architecture."
+msgstr ""
+"Se B<--arch> não for dada, então esta opção também define a arquitectura do "
+"pacote."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:87
+msgid "B<--build-arch> I<foo>"
+msgstr "B<--build-arch> I<foo>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:89
+msgid ""
+"Set the build architecture the binary package is built for. This defaults to "
+"the value printed by `dpkg-architecture -qDEB_BUILD_ARCH`. Use this option "
+"to create a binary package that is able to satisfy crossbuild dependencies."
+msgstr ""
+"Define a arquitectura de compilação para a qual o pacote binário é compilado "
+"Isto predefine para o valor escrito por `dpkg-architecture -"
+"qDEB_BUILD_ARCH`. Use esta opção para criar um pacote binário capaz de "
+"satisfazer dependências de compilação cruzada."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:93
+msgid "B<-B>, B<--build-dep>"
+msgstr "B<-B>, B<--build-dep>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:95
+msgid ""
+"Generate a package which only depends on the source package's Build-Depends "
+"dependencies."
+msgstr ""
+"Gera um pacote que apenas depende das dependências Build-Depends do pacote "
+"fonte."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:98
+msgid "B<-A>, B<--build-indep>"
+msgstr "B<-A>, B<--build-indep>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:100
+msgid ""
+"Generate a package which only depends on the source package's Build-Depends-"
+"Indep dependencies."
+msgstr ""
+"Gera um pacote que apenas depende das dependências Build-Depends-Indep do "
+"pacote fonte."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:103
+msgid "B<-P>, B<--build-profiles> I<profile[,...]>"
+msgstr "B<-P>, B<--build-profiles> I<profile[,...]>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:105
+msgid ""
+"Generate a package which only depends on build dependencies with the build "
+"profile(s), given as a comma-separated list. The default behavior is to use "
+"no specific profile. Setting this option will override the "
+"B<DEB_BUILD_PROFILES> environment variable."
+msgstr ""
+"Gera um pacote que apenas depende de dependências de compilação com os "
+"perfil(s) de compilação, dados como uma lista separada por vírgulas. O "
+"comportamento predefinido é não usar nenhum perfil específico. Definir esta "
+"opção irá sobrepor a variável de ambiente B<DEB_BUILD_PROFILES>."
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:119
+msgid "B<-s>, B<--root-cmd>"
+msgstr "B<-s>, B<--root-cmd>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:121
+msgid ""
+"Use the specified tool to gain root privileges before installing. Ignored "
+"if used without the B<--install> switch."
+msgstr ""
+"Usa a ferramenta especificada para ganhar privilégios de root antes de "
+"instalar. Ignorado se usado sem o switch B<--install>."
+
+#. type: =head2
+#: ../scripts/mk-build-deps.pl:128
+msgid "External environment"
+msgstr "Ambiente externo"
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:132
+msgid "B<DEB_BUILD_PROFILES>"
+msgstr "B<DEB_BUILD_PROFILES>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:134
+msgid ""
+"If set, it will be used as the active build profile(s) for the build "
+"dependencies to be installed. It is a space separated list of profile "
+"names. Overridden by the B<-P> option."
+msgstr ""
+"Se definido, será usado como os perfil(s) de compilação activos para as "
+"dependências de compilação a serem instaladas. É uma lista separada por "
+"espaços de nomes de perfis. Sobreposto pela opção B<-P>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:143
+msgid ""
+"B<mk-build-deps> is copyright by Vincent Fourmond and was modified for the "
+"devscripts package by Adam D. Barratt <adam@adam-barratt.org.uk>."
+msgstr ""
+"B<mk-build-deps> tem copyright de Vincent Fourmond e foi modificado para o "
+"pacote devscripts por Adam D. Barratt <adam@adam-barratt.org.uk>."
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:146 ../scripts/transition-check.pl:77
+msgid ""
+"This program comes with ABSOLUTELY NO WARRANTY. You are free to "
+"redistribute this code under the terms of the GNU General Public License, "
+"version 2 or later."
+msgstr ""
+"Este programa vem com ABSOLUTAMENTE NENHUMA GARANTIA. Você é livre de re-"
+"distribuir este código sob os termos da GNU General Public License, versão 2 "
+"ou posterior."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:27
+msgid ""
+"mk-origtargz - rename upstream tarball, optionally changing the compression "
+"and removing unwanted files"
+msgstr ""
+"mk-origtargz - renomeia o tarball do autor, opcionalmente modificando a "
+"compressão e removendo ficheiros não desejados"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:33
+msgid "B<mk-origtargz> [I<options>] F<foo-1.0.tar.gz>"
+msgstr "B<mk-origtargz> [I<options>] F<foo-1.0.tar.gz>"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:35
+msgid "B<mk-origtargz> B<--help>"
+msgstr "B<mk-origtargz> B<--help>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:41
+msgid ""
+"B<mk-origtargz> renames the given file to match what is expected by B<dpkg-"
+"buildpackage>, based on the source package name and version in F<debian/"
+"changelog>. It can convert B<zip> to B<tar>, optionally change the "
+"compression scheme and remove files according to B<Files-Excluded> and "
+"B<Files-Excluded->I<component> in F<debian/copyright>. The resulting file is "
+"placed in F<debian/../..>. (In F<debian/copyright>, the B<Files-Excluded> "
+"and B<Files-Excluded->I<component> stanzas are a part of the first paragraph "
+"and there is a blank line before the following paragraphs which contain "
+"B<Files> and other stanzas. The B<Files-Included> stanza may be used to "
+"ignore parts of subdirectories specified by the B<Files-Excluded> stanza See "
+"B<uscan>(1) \"COPYRIGHT FILE EXAMPLE\".)"
+msgstr ""
+"B<mk-origtargz> renomeia o ficheiro dado para corresponder ao que é esperado "
+"pelo B<dpkg-buildpackage>, com base no nome do pacote fonte e versão em "
+"F<debian/changelog>. É capaz de converter B<zip> para B<tar>, opcionalmente "
+"mudar o esquema de compressão e remover ficheiros de acordo com B<Files-"
+"Excluded> e B<Files-Excluded->I<component> in F<debian/copyright>. O "
+"ficheiro resultante é colocado em F<debian/../..>. (Em F<debian/copyright>, "
+"as estrofes B<Files-Excluded> e B<Files-Excluded->I<component> são parte do "
+"primeiro parágrafo e há uma linha vazia antes dos seguintes parágrafos que "
+"contêm B<Files> e outras estrofes. A estrofe B<Files-Included> pode ser "
+"usada para ignorar partes de sub-directórios especificados pela estofe "
+"B<Files-Excluded>. Veja B<uscan>(1) \"EXEMPLO DE FICHEIRO DE COPYRIGHT\".)"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:53
+msgid ""
+"The archive type for B<zip> is detected by \"B<file --dereference --brief --"
+"mime-type>\" command. So any B<zip> type archives such as B<jar> are "
+"treated in the same way. The B<xpi> archive is detected by its extension "
+"and is handled properly using the B<xpi-unpack> command."
+msgstr ""
+"O tipo de arquivo para B<zip> é detetado pelo comando \"B<file --dereference "
+"--brief --mime-type>\". Assim quaisquer arquivos do tipo B<zip> tais como "
+"B<jar> são tratados do mesmo modo. O arquivo B<xpi> é detetado pela sua "
+"extensão e é lidado de modo apropriado usando o comando B<xpi-unpack>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:58
+msgid ""
+"If the package name is given via the B<--package> option, no information is "
+"read from F<debian/>, and the result file is placed in the current directory."
+msgstr ""
+"Se o nome do pacote for dado via opção B<--package>, nenhuma informação é "
+"lida de F<debian/>, e o ficheiro resultante é colocado no directório actual."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:61
+msgid ""
+"B<mk-origtargz> is commonly called via B<uscan>, which first obtains the "
+"upstream tarball."
+msgstr ""
+"B<mk-origtargz> É comum ser chamado via B<uscan>, o qual primeiro obtém o "
+"tarball original do autor."
+
+#. type: =head2
+#: ../scripts/mk-origtargz.pl:66
+msgid "Metadata options"
+msgstr "Opções de meta-dados"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:68
+msgid ""
+"The following options extend or replace information taken from F<debian/>."
+msgstr ""
+"As seguintes opções estendem ou substituem informação tirada de F<debian/>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:74
+msgid ""
+"Use I<package> as the name of the Debian source package, and do not require "
+"or use a F<debian/> directory. This option can only be used together with "
+"B<--version>."
+msgstr ""
+"Usa I<package> como o nome do pacote fonte Debian, e não requer ou usa um "
+"directório F<debian/>. Esta opção só pode ser usada juntamente com B<--"
+"version>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:78
+msgid ""
+"The default is to use the package name of the first entry in F<debian/"
+"changelog>."
+msgstr ""
+"A predefinição é usar o nome de pacote da primeira entrada em F<debian/"
+"changelog>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:80
+msgid "B<-v>, B<--version> I<version>"
+msgstr "B<-v>, B<--version> I<version>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:82
+msgid ""
+"Use I<version> as the version of the package. This needs to be the upstream "
+"version portion of a full Debian version, i.e. no Debian revision, no epoch."
+msgstr ""
+"Usa I<version> como a versão do pacote. Isto precisa de ser a porção da "
+"versão do autor de uma versão Debian completa, isto é, sem a revisão Debian, "
+"sem a marca epoch."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:85
+msgid ""
+"The default is to use the upstream portion of the version of the first entry "
+"in F<debian/changelog>."
+msgstr ""
+"A predefinição é usar a porção do autor da versão da primeira entrada em "
+"F<debian/changelog>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:88
+msgid "B<--exclude-file> I<glob>"
+msgstr "B<--exclude-file> I<glob>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:90
+msgid ""
+"Remove files matching the given I<glob> from the tarball, as if it was "
+"listed in B<Files-Excluded>."
+msgstr ""
+"Remove ficheiros que correspondem ao I<glob> dado do tarball, se estavam "
+"listados em B<Files-Excluded>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:93
+msgid "B<--copyright-file> I<filename>"
+msgstr "B<--copyright-file> I<filename>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:95
+msgid ""
+"Remove files matching the patterns found in I<filename>, which should have "
+"the format of a Debian F<copyright> file (B<Format: https://www.debian.org/"
+"doc/packaging-manuals/copyright-format/1.0/> to be precise). Errors parsing "
+"that file are silently ignored, exactly as is the case with F<debian/"
+"copyright>."
+msgstr ""
+"Remove ficheiros que correspondem aos padrões encontrados em I<filename>, os "
+"quais devem ter o formato de um ficheiro F<copyright> Debian (B<Format: "
+"https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/> para ser "
+"preciso). Erros ao processar esse ficheiro são ignorados em silêncio, "
+"exactamente como no caso de F<debian/copyright>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:101
+msgid ""
+"Unmatched patterns will emit a warning so the user can verify whether it is "
+"correct. If there are multiple patterns which match a file, only the last "
+"one will count as being matched."
+msgstr ""
+"Padrões não correspondentes irão emitir um aviso para o que o utilizador "
+"possa verificar se está correto. Se existirem vários padrões que "
+"correspondam a um ficheiro, apenas o último irá contar como tento "
+"correspondido."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:105
+msgid ""
+"Both the B<--exclude-file> and B<--copyright-file> options amend the list of "
+"patterns found in F<debian/copyright>. If you do not want to read that file, "
+"you will have to use B<--package>."
+msgstr ""
+"Ambas as opções B<--exclude-file> e B<--copyright-file> emendam a lista de "
+"padrões encontrada em F<debian/copyright>. Se você não desejar ler esse "
+"ficheiro, terá de usar B<--package>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:109
+msgid "B<--signature> I<signature-mode>"
+msgstr "B<--signature> I<signature-mode>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:111
+msgid "Set I<signature-mode>:"
+msgstr "Set I<signature-mode>:"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:115
+msgid "0 for no signature"
+msgstr "0 para nenhuma assinatura"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:117
+msgid "1 for normal detached signature"
+msgstr "1 para assinatura normal desanexada"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:119
+msgid "2 for signature on decompressed"
+msgstr "2 para assinatura em descomprimido"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:121
+msgid "3 for self signature"
+msgstr "3 para auto assinatura"
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:125
+msgid "B<--signature-file> I<signature-file>"
+msgstr "B<--signature-file> I<signature-file>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:127
+msgid ""
+"Use I<signature-file> as the signature file corresponding to the Debian "
+"source package to create a B<dpkg-source> (post-stretch) compatible "
+"signature file. (optional)"
+msgstr ""
+"Usa I<signature-file> como o ficheiro de assinatura que corresponde ao "
+"pacote fonte Debian para criar um ficheiro de assinatura compatível com "
+"B<dpkg-source> (pós-alongado). (opcional)"
+
+#. type: =head2
+#: ../scripts/mk-origtargz.pl:133
+msgid "Action options"
+msgstr "Opções de acção"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:135
+msgid ""
+"These options specify what exactly B<mk-origtargz> should do. The options "
+"B<--copy>, B<--rename> and B<--symlink> are mutually exclusive."
+msgstr ""
+"Estas opções especifica o que exactamente o B<mk-origtargz> deve fazer. As "
+"opções B<--copy>, B<--rename> e B<--symlink> são mutuamente exclusivas."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:140 ../scripts/uscan.pl:1785
+msgid "B<--symlink>"
+msgstr "B<--symlink>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:142
+msgid ""
+"Make the resulting file a symlink to the given original file. (This is the "
+"default behaviour.)"
+msgstr ""
+"Faz o ficheiro resultante ser um link simbólico para o ficheiro original "
+"dado. (Este é o comportamento predefinido.)"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:145
+msgid ""
+"If the file has to be modified (because it is a B<zip>, B<xpi> or B<zst> "
+"file, because of B<--repack> or B<Files-Excluded>), this option behaves like "
+"B<--copy>."
+msgstr ""
+"Se o ficheiro tiver de ser modificado (porque é um ficheiro B<zip>, B<xpi> "
+"ou B<zst>, devido a B<--repack> ou B<Files-Excluded>), esta opção comporta-"
+"se como B<--copy>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:149 ../scripts/uscan.pl:1790
+msgid "B<--copy>"
+msgstr "B<--copy>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:151
+msgid ""
+"Make the resulting file a copy of the original file (unless it has to be "
+"modified, of course)."
+msgstr ""
+"Faz o ficheiro resultante ser uma cópia do ficheiro original (a menos que "
+"tenha de ser modificado, claro)."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:154 ../scripts/uscan.pl:1794
+msgid "B<--rename>"
+msgstr "B<--rename>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:156
+msgid "Rename the original file."
+msgstr "Renomeia o ficheiro original."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:158
+msgid ""
+"If the file has to be modified (because it is a B<zip>, B<xpi>, B<zst> file, "
+"because of B<--repack> or B<Files-Excluded>), this implies that the original "
+"file is deleted afterwards."
+msgstr ""
+"Se o ficheiro tiver de ser modificado (porque é um ficheiro B<zip>, B<xpi>, "
+"B<zst>, devido a B<--repack> ou B<Files-Excluded>), isto implica que o "
+"ficheiro original seja apagado depois."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:162 ../scripts/uscan.pl:1798
+msgid "B<--repack>"
+msgstr "B<--repack>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:164
+msgid ""
+"If the given file is not compressed using the desired format (see B<--"
+"compression>), recompress it."
+msgstr ""
+"Se o ficheiro dado não estiver comprimido usando o formato desejado (veja "
+"B<--compression>), re-comprime-o."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:167
+msgid "B<-S>, B<--repack-suffix> I<suffix>"
+msgstr "B<-S>, B<--repack-suffix> I<suffix>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:169
+msgid ""
+"If the file has to be modified, because of B<Files-Excluded>, append "
+"I<suffix> to the upstream version."
+msgstr ""
+"Se o ficheiro tiver de ser modificado devido a B<Files-Excluded>, acrescenta "
+"I<suffix> à versão do autor."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:172
+msgid "B<--force-repack>"
+msgstr "B<--force-repack>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:174
+msgid ""
+"Recompress even if file is compressed using the desired format and no files "
+"were deleted."
+msgstr ""
+"Re-comprime mesmo que o ficheiro esteja comprimido com o formato desejado e "
+"nenhum ficheiro foi apagado."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:177
+msgid "B<-c>, B<--component> I<componentname>"
+msgstr "B<-c>, B<--component> I<componentname>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:179
+msgid ""
+"Use <componentname> as the component name for the secondary upstream "
+"tarball. Set I<componentname> as the component name. This is used only for "
+"the secondary upstream tarball of the Debian source package. Then "
+"I<packagename_version.orig-componentname.tar.gz> is created."
+msgstr ""
+"Usa <componentname> como o nome de componente para o tarball original "
+"secundário. Define I<componentname> como o nome de componente. Isto é usado "
+"apenas para o tarball original secundário do pacote fonte Debian. Depois é "
+"criado I<packagename_version.orig-componentname.tar.gz>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:184
+msgid "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> | B<default> ]"
+msgstr "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> | B<default> ]"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:186
+msgid ""
+"The default method is B<xz>. When mk-origtargz is launched in a debian "
+"source repository which format is \"1.0\" or undefined, the method switches "
+"to B<gzip>."
+msgstr ""
+"O método predefinido é B<xz>. Quando o mk-origtargz é lançado num "
+"repositório fonte debian cujo formato é \"1.0\" ou indefinido, o método muda "
+"para B<gzip>."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:189
+msgid "B<-C>, B<--directory> I<directory>"
+msgstr "B<-C>, B<--directory> I<directory>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:191
+msgid "Put the resulting file in the given directory."
+msgstr "Põe o ficheiro resultante no directório dado."
+
+#. type: =item
+#: ../scripts/mk-origtargz.pl:193
+msgid "B<--unzipopt> I<options>"
+msgstr "B<--unzipopt> I<options>"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:195
+msgid ""
+"Add the extra options to use with the B<unzip> command such as B<-a>, B<-"
+"aa>, and B<-b>."
+msgstr ""
+"Adiciona as opções extra para usar com o comando B<unzip> tais como B<-a>, "
+"B<-aa>, e B<-b>."
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:212
+msgid "B<uscan>(1), B<uupdate>(1)"
+msgstr "B<uscan>(1), B<uupdate>(1)"
+
+#. type: textblock
+#: ../scripts/mk-origtargz.pl:216
+msgid ""
+"B<mk-origtargz> and this manpage have been written by Joachim Breitner "
+"<I<nomeata@debian.org>>."
+msgstr ""
+"B<mk-origtargz> e este manual foram escritos por Joachim Breitner "
+"<I<nomeata@debian.org>>."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:5
+msgid "namecheck - Check project names are not already taken."
+msgstr "namecheck - Verifica se nomes de projetos não estão já ocupados"
+
+#. type: =head1
+#: ../scripts/namecheck.pl:7
+msgid "ABOUT"
+msgstr "ACERCA"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:9
+msgid ""
+"This is a simple tool to automate the testing of project names at the most "
+"common Open Source / Free Software hosting environments."
+msgstr ""
+"Esta é uma ferramenta simples para testar nomes de projetos na maioria de "
+"ambientes de hospedagem de Open Source / Free Software."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:12
+msgid ""
+"Each new project requires a name, and those names are ideally unique. To "
+"come up with names is hard, and testing to ensure they're not already in use "
+"is time-consuming - unless you have a tool such as this one."
+msgstr ""
+"Cada novo projeto requer um nome, e esses nomes idealmente serão únicos. "
+"Encontrar nomes é difícil, e testar para assegurar que não estão já a ser "
+"usados consome muito tempo - a menos que tenha uma ferramenta como esta."
+
+#. type: =head1
+#: ../scripts/namecheck.pl:16
+msgid "CUSTOMIZATION"
+msgstr "PERSONALIZAÇÃO"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:18
+msgid ""
+"The script, as is, contains a list of sites, and patterns, to test against."
+msgstr ""
+"O script, como está, contém uma lista de sítios, e padrões, para se fazer "
+"testes."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:20
+msgid ""
+"If those patterns aren't sufficient then you may create your own additions "
+"and add them to the script. If you wish to have your own version of the "
+"patterns you may save them into the file ~/.namecheckrc"
+msgstr ""
+"Se esses padrões não forem suficientes, então você pode criar as suas "
+"próprias adições e adiciona-las ao script. Se desejar ter a sua própria "
+"versão dos padrões, você pode salva-los no ficheiro ~/.namecheckrc"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:26
+msgid "Steve -- http://www.steve.org.uk/"
+msgstr "Steve -- http://www.steve.org.uk/"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:32
+msgid "Copyright (c) 2008 by Steve Kemp. All rights reserved."
+msgstr "Copyright (c) 2008 de Steve Kemp. Todos os direitos reservados."
+
+#. type: textblock
+#: ../scripts/namecheck.pl:34
+msgid ""
+"This module is free software; you can redistribute it and/or modify it under "
+"the same terms as Perl itself."
+msgstr ""
+"Este módulo é software livre, você pode-o redistribuir e/ou modificar sob os "
+"mesmo termos que o próprio Perl."
+
+#. type: TH
+#: ../scripts/nmudiff.1:1
+#, no-wrap
+msgid "NMUDIFF"
+msgstr "NMUDIFF"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:4
+msgid "nmudiff - email an NMU diff to the Debian BTS"
+msgstr "nmudiff - envia email de diff dum NMU para o BTS Debian"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:6
+msgid "B<nmudiff> [I<options>]"
+msgstr "B<nmudiff> [I<options>]"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:9
+msgid ""
+"B<nmudiff> is the tool to be used while preparing a Non-Maintainer Upload "
+"(NMU) to notify the maintainer about the work being done."
+msgstr ""
+"B<nmudiff> é a ferramenta a usar quando se prepara um Non-Maintainer Upload "
+"(NMU) para notificar o maintainer acerca do trabalho que está a ser feito."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:19
+msgid ""
+"B<nmudiff> should be run in the source tree of the package being NMUed, "
+"after the NMU is built. It assumes that the source packages (specifically, "
+"the I<.dsc> and any corresponding I<tar> and I<diff> files) for both the "
+"previous version of the package and the newly built NMU version are in the "
+"parent directory. It then uses B<debdiff> to generate a diff between the "
+"previous version and the current NMU, and either runs mutt or an editor "
+"(using B<sensible-editor>) so that the mail message (including the diff) can "
+"be examined and modified; once you exit the editor the diff will be mailed "
+"to the Debian BTS."
+msgstr ""
+"B<nmudiff> deve ser corrido na árvore fonte do pacote a ser enviado em NMU, "
+"após o NMU ser compilado. Assume que os pacotes fonte (especialmente os "
+"ficheiros I<.dsc> e qualquer I<tar> e I<diff> correspondente) para ambos a "
+"versão anterior do pacote e a versão do NMU recentemente compilado estão no "
+"directório pai. Depois usa B<debdiff> para gerar um diff entre a versão "
+"anterior e a NMU actual, e ou corre o mutt ou um editor (usando B<sensible-"
+"editor>) para que a mensagem de mail (incluindo o diff) posa ser examinada e "
+"modificada, assim que você terminar o editor, o diff será enviado por mail "
+"ao BTS Debian."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:24
+msgid ""
+"The default behaviour is that if exactly one bug is closed by this NMU, then "
+"that bug will be mailed, otherwise a new bug will be submitted. This "
+"behaviour may be changed by command line options and configuration file "
+"options."
+msgstr ""
+"O comportamento predefinido é que se exactamente um bug for fechado por este "
+"NMU, então esse bug receberá um mail, caso contrário será submetido um novo "
+"bug. Este comportamento pode ser alterado por opções de linha de comandos e "
+"opções de ficheiro de configuração."
+
+#. type: TP
+#: ../scripts/nmudiff.1:25
+#, no-wrap
+msgid "B<--new>"
+msgstr "B<--new>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:29
+msgid ""
+"Instead of mailing the bug reports which are to be closed by this NMU, a new "
+"bug report is submitted directly to the BTS."
+msgstr ""
+"Em vez de enviar mail aos relatórios de bug que estão para serem fechados "
+"por este NMU, é submetido um novo relatório de bug diretamente ao BTS."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:34
+msgid ""
+"Send the bug report to all of the bugs which are being closed by this NMU, "
+"rather than opening a new bug report. This option has no effect if no bugs "
+"are being closed by this NMU."
+msgstr ""
+"Envia o relatório de bug para todos os bugs que vão ser fechados por este "
+"NMU, em vez de abrir um novo relatório de bug. Esta opção não tem efeito se "
+"nenhum bug for fechado por este NMU."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:39
+msgid ""
+"Use B<mutt>(1) (or B<neomutt>(1)) for editing and sending the message to the "
+"BTS (default behaviour). This can be controlled using a configuration file "
+"option (see below)."
+msgstr ""
+"Usa B<mutt>(1) (ou B<neomutt>(1)) para editar e enviar a mensagem para o BTS "
+"(comportamento predefinido). Isto pode ser controlado usando uma opção de "
+"ficheiro de configuração (veja em baixo)."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:44
+msgid ""
+"Use B<sensible-editor>(1) to edit the message and then mail it directly "
+"using I</usr/bin/sendmail>. This can be controlled using a configuration "
+"file option (see below)."
+msgstr ""
+"Usa B<sensible-editor>(1) para editar a mensagem e depois envia-la por mail "
+"diretamente usando I</usr/bin/sendmail>. Isto pode ser controlado usando uma "
+"opção de ficheiro de configuração (veja em baixo)."
+
+#. type: TP
+#: ../scripts/nmudiff.1:44
+#, no-wrap
+msgid "B<--sendmail> I<SENDMAILCMD>"
+msgstr "B<--sendmail> I<SENDMAILCMD>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:54
+msgid ""
+"Specify the B<sendmail> command. The command will be split on white space "
+"and will be interpreted by the shell. Default is I</usr/sbin/sendmail>. "
+"The B<-t> option will be automatically added if the command is I</usr/sbin/"
+"sendmail> or I</usr/sbin/exim*>. For other mailers, if they require a B<-t> "
+"option, this must be included in the I<SENDMAILCMD>, for example: B<--"
+"sendmail=\"/usr/sbin/mymailer -t\">. This can also be set using the "
+"devscripts configuration files; see below."
+msgstr ""
+"Especifica o comando B<sendmail>. O comando irá ser dividido num espaço em "
+"branco e será interpretado pela shell. Predefinição é I</usr/sbin/sendmail>. "
+"A opção B<-t> será adicionada automaticamente se o comando for I</usr/sbin/"
+"sendmail> ou I</usr/sbin/exim*>. Para outros assuntos, se elas requererem "
+"uma opção B<-t>, isto tem de ser incluído em I<SENDMAILCMD>, por exemplo, "
+"B<--sendmail=\"/usr/sbin/mymailer -t\">. Isto também pode ser definido "
+"usando os ficheiros de configuração do devscripts, veja em baixo."
+
+#. type: TP
+#: ../scripts/nmudiff.1:54
+#, no-wrap
+msgid "B<--from> I<EMAIL>"
+msgstr "B<--from> I<EMAIL>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:62
+msgid ""
+"If using the B<sendmail> (B<--no-mutt>) option, then the email to the BTS "
+"will be sent using the name and address in the environment variables "
+"B<DEBEMAIL> and B<DEBFULLNAME>. If these are not set, then the variables "
+"B<EMAIL> and B<NAME> will be used instead. These can be overridden using "
+"the B<--from> option. The program will not work in this case if an email "
+"address cannot be determined."
+msgstr ""
+"Se usar a opção B<sendmail> (B<--no-mutt>), então o email to the BTS will be "
+"sent using the name and address in the environment variables B<DEBEMAIL> and "
+"B<DEBFULLNAME>. If these are not set, then the variables B<EMAIL> and "
+"B<NAME> will be used instead. These can be overridden using the B<--from> "
+"option. The program will not work in this case if an email address cannot "
+"be determined."
+
+#. type: TP
+#: ../scripts/nmudiff.1:62
+#, no-wrap
+msgid "B<--delay> I<DELAY>"
+msgstr "B<--delay> I<DELAY>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:69
+msgid ""
+"Indicate in the generated mail that the NMU has been uploaded to the DELAYED "
+"queue, with a delay of I<DELAY> days. The default value is I<XX> which adds "
+"a placeholder to the e-mail. A value of B<0> indicates that the upload has "
+"not been sent to a delayed queue. This can also be set using the devscripts "
+"configuration files; see below."
+msgstr ""
+"Indica no mail gerado que o NMU foi enviado para a lista ADIADA, com um "
+"atraso de I<DELAY> dias. O valor predefinido é I<XX> o que adiciona um "
+"espaço reservado no e-mail. Um valor de B<0> indica que que o envio não foi "
+"mandado para a lista adiada. Isto também pode ser definido usando os "
+"ficheiros de configuração do devscripts, veja em baixo."
+
+#. type: TP
+#: ../scripts/nmudiff.1:69
+#, no-wrap
+msgid "B<--no-delay>, B<--nodelay>"
+msgstr "B<--no-delay>, B<--nodelay>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:72
+msgid "Equivalent to B<--delay 0>."
+msgstr "Equivalente a B<--delay 0>."
+
+#. type: TP
+#: ../scripts/nmudiff.1:76
+#, no-wrap
+msgid "B<--no-pending>, B<--nopending>"
+msgstr "B<--no-pending>, B<--nopending>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:79
+msgid "Do not add the I<pending> tag."
+msgstr "Não adiciona a etiqueta I<pending>."
+
+#. type: TP
+#: ../scripts/nmudiff.1:79
+#, no-wrap
+msgid "B<--non-dd>, B<--nondd>"
+msgstr "B<--non-dd>, B<--nondd>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:82
+msgid "Mention in the email that you require sponsorship."
+msgstr "Menciona no email que você requer patrocinador."
+
+#. type: TP
+#: ../scripts/nmudiff.1:82
+#, no-wrap
+msgid "B<--template> I<TEMPLATEFILE>"
+msgstr "B<--template> I<TEMPLATEFILE>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:86
+msgid ""
+"Use content of TEMPLATEFILE for message body instead of default template. "
+"If TEMPLATEFILE does not exist, default template is applied."
+msgstr ""
+"Usa o conteúdo de TEMPLATEFILE para o corpo da mensagem em vez do modelo "
+"predefinido. Se TEMPLATEFILE não existir, é aplicado o modelo predefinido."
+
+#. type: TP
+#: ../scripts/nmudiff.1:98
+#, no-wrap
+msgid "B<NMUDIFF_DELAY>"
+msgstr "B<NMUDIFF_DELAY>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:104
+msgid ""
+"If this is set to a number, e-mails generated by B<nmudiff> will by default "
+"mention an upload to the DELAYED queue, delayed for the specified number of "
+"days. The value B<0> indicates that the DELAYED queue has not been used."
+msgstr ""
+"Se isto for definido para um número, os e-mails gerados pelo B<nmudiff> irão "
+"por predefinição mencionar em envio para a lista ADIADA, com um adiamento do "
+"número especificado de dias. O valor B<0> indica que a lista ADIADA não foi "
+"usada."
+
+#. type: TP
+#: ../scripts/nmudiff.1:104
+#, no-wrap
+msgid "B<NMUDIFF_MUTT>"
+msgstr "B<NMUDIFF_MUTT>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:109
+msgid ""
+"Can be I<yes> (default) or I<no>, and specifies whether to use B<mutt> (or "
+"B<neomutt>)to compose and send the message or not, as described above."
+msgstr ""
+"Pode ser I<yes> (predefinição) ou I<no>, e especifica se se deve usar "
+"B<mutt> (ou B<neomutt>) para compor e enviar a mensagem ou não, como "
+"descrito em cima."
+
+#. type: TP
+#: ../scripts/nmudiff.1:109
+#, no-wrap
+msgid "B<NMUDIFF_NEWREPORT>"
+msgstr "B<NMUDIFF_NEWREPORT>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:117
+msgid ""
+"This option controls whether a new bug report is made, or whether the diff "
+"is sent to the bugs closed by this NMU. Can be I<maybe> (default), which "
+"sends to the existing bug reports if exactly one bug is being closed; "
+"I<yes>, which always creates a new report, or I<no>, which always sends to "
+"the reports of the bugs being closed (unless no bugs are being closed, in "
+"which case a new report is always made)."
+msgstr ""
+"Esta opção controla se é feito um novo relatório de bug, ou se o diff é "
+"enviado para os bugs fechados por este NMU. Pode ser I<maybe> "
+"(predefinição), o qual envia para os relatórios de bug existentes se "
+"exactamente um bug está a ser fechado. I<yes>, que cria sempre um novo "
+"relatório de bug, ou I<no>, que envia sempre para os relatórios dos bugs a "
+"serem fechados (a menos que nenhum bug seja fechado, que neste caso é sempre "
+"feito um novo relatório)."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:121
+msgid ""
+"If this is set, specifies a B<sendmail> command to use instead of I</usr/"
+"sbin/sendmail>. Same as the B<--sendmail> command line option."
+msgstr ""
+"Se isto estiver definido, especifica um comando B<sendmail> a usar em vez de "
+"I</usr/sbin/sendmail>. O mesmo que a opção de linha de comandos B<--"
+"sendmail>."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:125
+msgid "B<debdiff>(1), B<sensible-editor>(1), B<devscripts.conf>(5)"
+msgstr "B<debdiff>(1), B<sensible-editor>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:129
+msgid ""
+"B<nmudiff> was written and is copyright 2006 by Steinar H. Gunderson and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt>. The software may be "
+"freely redistributed under the terms and conditions of the GNU General "
+"Public License, version 2."
+msgstr ""
+"B<nmudiff> foi escrito e tem copyright 2006 por Steinar H. Gunderson e "
+"modificado por Julian Gilbey E<lt>jdg@debian.orgE<gt>. O software pode ser "
+"redistribuído livremente sob os termos e condições da GNU General Public "
+"License, versão 2."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:22
+msgid ""
+"origtargz - fetch the orig tarball of a Debian package from various sources, "
+"and unpack it"
+msgstr ""
+"origtargz - vai buscar o tarball original de um pacote Debian a várias "
+"fontes, e desempacota-o"
+
+#. type: =item
+#: ../scripts/origtargz.pl:28
+msgid "B<origtargz> [I<OPTIONS>] [B<--unpack>[=B<no>|B<once>|B<yes>]]"
+msgstr "B<origtargz> [I<OPTIONS>] [B<--unpack>[=B<no>|B<once>|B<yes>]]"
+
+#. type: =item
+#: ../scripts/origtargz.pl:30
+msgid "B<origtargz> B<--help>"
+msgstr "B<origtargz> B<--help>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:36
+msgid ""
+"B<origtargz> downloads the orig tarball of a Debian package, and also "
+"unpacks it into the current directory, if it just contains a F<debian> "
+"directory. The main use for B<origtargz> is with debian-dir-only repository "
+"checkouts, but it is useful as a general tarball download wrapper. The "
+"version number for the tarball to be downloaded is determined from F<debian/"
+"changelog>. It should be invoked from the top level directory of an unpacked "
+"Debian source package."
+msgstr ""
+"B<origtargz> descarrega o tarball original dum pacote Debian, e também o "
+"desempacota no directório actual, se apenas conter um directório F<debian>. "
+"O principal uso para B<origtargz> é com checkouts de repositório apenas- -"
+"directório-debian, mas é útil como um invólucro de descarga de tarball "
+"geral. O número de versão para o tarball a ser descarregado é determinado a "
+"partir de F<debian/changelog>. Deve ser invocado a partir do directório de "
+"nível de topo de um pacote fonte Debian desempacotado."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:43
+msgid "Various download locations are tried:"
+msgstr "São tentadas várias localizações de descarga:"
+
+#. type: =item
+#: ../scripts/origtargz.pl:47 ../scripts/origtargz.pl:51
+#: ../scripts/origtargz.pl:55 ../scripts/origtargz.pl:59
+#: ../scripts/origtargz.pl:63 ../scripts/origtargz.pl:67
+msgid "*"
+msgstr "*"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:49
+msgid "First, an existing file is looked for."
+msgstr "Primeiro, procurar-se um ficheiro existente."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:53
+msgid "Directories given with B<--path> are searched."
+msgstr "São sondados os directórios dados e B<--path>."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:57
+msgid "B<pristine-tar> is tried."
+msgstr "É tentado B<pristine-tar>."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:61
+msgid "B<pristine-lfs> is tried."
+msgstr "É tentado B<pristine-lfs>."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:65
+msgid ""
+"B<apt-get source> is tried when B<apt-cache showsrc> reports a matching "
+"version."
+msgstr ""
+"É tentado B<apt-get source> quando B<apt-cache showsrc> reporta uma versão "
+"correspondente."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:69
+msgid "Finally, B<uscan --download --download-current-version> is tried."
+msgstr "Finalmente, é tentado B<uscan --download --download-current-version>."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:73
+msgid ""
+"When asked to unpack the orig tarball, B<origtargz> will remove all files "
+"and directories from the current directory, except the debian directory, and "
+"the VCS repository directories. I<Note that this will drop all non-committed "
+"changes> for the patch system in use (e.g. source format \"3.0 (quilt)\"), "
+"and will even remove all patches from the package when no patch system is in "
+"use (the original \"1.0\" source format). Some VCS control files outside "
+"F<debian/> preserved (F<.bzr-builddeb>, F<.bzr-ignore>, F<.gitignore>, F<."
+"hgignore>), if stored in VCS."
+msgstr ""
+"Quando pedido para desempacotar o tarball original, o B<origtargz> irá "
+"remover todos os ficheiros e directórios do directório actual, excepto o "
+"directório debian, e os directórios de repositórios VCS. I<Note que isto irá "
+"abandonar todas as alterações ainda-não-enviadas> para o sistema de patch em "
+"uso (ex. formato fonte \"3.0 (quilt)\"), e irá até remover todas as patches "
+"do pacote quando não está em uso nenhum sistema de patch (o formato fonte "
+"\"1.0\" original). Alguns ficheiros de controle VCS fora de F<debian/> são "
+"preservados (F<.bzr-builddeb>, F<.bzr-ignore>, F<.gitignore>, F<.hgignore>), "
+"se armazenados em VCS."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:82
+msgid ""
+"The default behavior is to unpack the orig tarball if the current directory "
+"is empty except for a F<debian> directory and the VCS files mentioned above."
+msgstr ""
+"O comportamento predefinido é desempacotar o tarball original se o "
+"directório actual estiver vazio excepto com um directório F<debian> e os "
+"ficheiros VCS mencionados em cima."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:87
+msgid ""
+"Despite B<origtargz> being called \"targz\", it will work with any "
+"compression scheme used for the tarball."
+msgstr ""
+"Apesar do B<origtargz> ser chamado \"targz\", irá funcionar com qualquer "
+"esquema de compressão usado para o tarball."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:90
+msgid ""
+"A similar tool to unpack orig tarballs is B<uupdate>(1). B<uupdate> creates "
+"a new working directory, unpacks the tarball, and applies the Debian F<.diff."
+"gz> changes. In contrast, B<origtargz> uses the current directory, keeping "
+"VCS metadata."
+msgstr ""
+"Uma ferramenta semelhante para descompactar tarballs originais é "
+"B<uupdate>(1). B<uupdate> cria um novo directório de trabalho, desempacota o "
+"tarball, e aplica as alterações Debian F<.diff.gz>. Em contraste, o "
+"B<origtargz> usa o directório actual, e mantêm os metadados VCS."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:95
+msgid ""
+"For Debian package repositories that keep the full upstream source, other "
+"tools should be used to upgrade the repository from the new tarball. See "
+"B<gbp-import-orig>(1) and B<svn-upgrade>(1) for examples. B<origtargz> is "
+"still useful for downloading the current tarball."
+msgstr ""
+"Para repositórios de pacotes Debian que mantêm a fonte do autor completa, "
+"devem ser usadas outras ferramentas para actualizar o repositório a partir "
+"de um novo tarball. Veja B<gbp-import-orig>(1) e B<svn-upgrade>(1) para "
+"exemplos. B<origtargz> é ainda útil para descarregar o tarball actual."
+
+#. type: =item
+#: ../scripts/origtargz.pl:104
+msgid "B<-p>, B<--path> I<directory>"
+msgstr "B<-p>, B<--path> I<directory>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:106
+msgid ""
+"Add I<directory> to the list of locations to search for an existing "
+"tarball. When found, a hardlink is created if possible, otherwise a symlink."
+msgstr ""
+"Adiciona I<directory> à lista de localizações a procurar por um tarball "
+"existente. Quando encontrado, é criado um hardlink se possível, caso "
+"contrário um symlink."
+
+#. type: =item
+#: ../scripts/origtargz.pl:109
+msgid "B<-u>, B<--unpack>[=B<no>|B<once>|B<yes>]"
+msgstr "B<-u>, B<--unpack>[=B<no>|B<once>|B<yes>]"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:111
+msgid ""
+"Unpack the downloaded orig tarball to the current directory, replacing "
+"everything except the debian directory. Existing files are removed, except "
+"for F<debian/> and VCS files. Preserved are: F<.bzr>, F<.bzrignore>, F<.bzr-"
+"builddeb>, F<.git>, F<.gitignore>, F<.hg>, F<.hgignore>, F<_darcs> and F<."
+"svn>."
+msgstr ""
+"Descompacta o tarball original descarregado para o directório actual, "
+"substituindo tudo excepto o directório debian. Os ficheiros existentes são "
+"removidos, excepto os ficheiros F<debian/> e VCS. Preservados são F<.bzr>, "
+"F<.bzrignore>, F<.bzr-builddeb>, F<.git>, F<.gitignore>, F<.hg>, F<."
+"hgignore>, F<_darcs> e F<.svn>."
+
+#. type: =item
+#: ../scripts/origtargz.pl:119
+msgid "B<no>"
+msgstr "B<no>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:121
+msgid "Do not unpack the orig tarball."
+msgstr "Não desempacota o tarball original."
+
+#. type: =item
+#: ../scripts/origtargz.pl:123
+msgid "B<once> (default when B<--unpack> is not used)"
+msgstr "B<once> (predefinição quando B<--unpack> não está definido)"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:125
+msgid ""
+"If the current directory contains only a F<debian> directory (and possibly "
+"some dotfiles), unpack the orig tarball. This is the default behavior."
+msgstr ""
+"Se o directório actual conter apenas um directório F<debian> (e "
+"possivelmente alguns ficheiros de documentação), desempacota o tarball "
+"original. Este é o comportamento predefinido."
+
+#. type: =item
+#: ../scripts/origtargz.pl:128
+msgid "B<yes> (default for B<--unpack> without argument)"
+msgstr "B<yes> (predefinição para B<--unpack> sem argumentos)"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:130
+msgid "Always unpack the orig tarball."
+msgstr "Desempacota sempre o tarball original."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:136
+msgid "Alias for B<--unpack=no>."
+msgstr "Nome alternativo para B<--unpack=no>."
+
+#. type: =item
+#: ../scripts/origtargz.pl:138
+msgid "B<-t>, B<--tar-only>"
+msgstr "B<-t>, B<--tar-only>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:140
+msgid ""
+"When using B<apt-get source>, pass B<--tar-only> to it. The default is to "
+"download the full source package including F<.dsc> and F<.diff.gz> or F<."
+"debian.tar.gz> components so B<debdiff> can be used to diff the last upload "
+"to the next one. With B<--tar-only>, only download the F<.orig.tar.*> file."
+msgstr ""
+"Quando usa B<apt-get source>, passa B<--tar-only> para ele. A predefinição é "
+"descarregar o pacote fonte completo incluindo os componentes F<.dsc> e F<."
+"diff.gz> ou F<.debian.tar.gz> para que o B<debdiff> possa ser usado para "
+"fazer diff entre o último envio e o próximo. Com B<--tar-only>, apenas "
+"descarrega o ficheiro F<.orig.tar.*>."
+
+#. type: =item
+#: ../scripts/origtargz.pl:145
+msgid "B<--clean>"
+msgstr "B<--clean>"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:147
+msgid ""
+"Remove existing files as with B<--unpack>. Note that like B<--unpack>, this "
+"will remove upstream files even if they are stored in VCS."
+msgstr ""
+"Remove ficheiros existentes como com B<--unpack>. Note que tal como B<--"
+"unpack>, isto irá remover ficheiros do autor mesmo que estes estejam "
+"guardados em VCS."
+
+#. type: textblock
+#: ../scripts/origtargz.pl:164
+msgid ""
+"B<debcheckout>(1), B<gbp-import-orig>(1), B<pristine-tar>(1), B<svn-"
+"upgrade>(1), B<uupdate>(1)"
+msgstr ""
+"B<debcheckout>(1), B<gbp-import-orig>(1), B<pristine-tar>(1), B<svn-"
+"upgrade>(1), B<uupdate>(1)"
+
+#. type: textblock
+#: ../scripts/origtargz.pl:168
+msgid ""
+"B<origtargz> and this manpage have been written by Christoph Berg "
+"<I<myon@debian.org>>."
+msgstr ""
+"B<origtargz> e o seu manual foram escritos por Christoph Berg <I<myon@debian."
+"org>>."
+
+#. type: TH
+#: ../scripts/plotchangelog.1:1
+#, no-wrap
+msgid "PLOTCHANGELOG"
+msgstr "PLOTCHANGELOG"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:4
+msgid "plotchangelog - graph Debian changelogs"
+msgstr "plotchangelog - changelogs Debian gráficos"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:7
+msgid "B<plotchangelog> [I<options>]I< changelog >..."
+msgstr "B<plotchangelog> [I<options>]I< changelog >..."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:17
+msgid ""
+"B<plotchangelog> is a tool to aid in visualizing a Debian I<changelog>. The "
+"changelogs are graphed with B<gnuplot>(1) , with the X axis of the graph "
+"denoting time of release and the Y axis denoting the Debian version number "
+"of the package. Each individual release of the package is represented by a "
+"point, and the points are color coded to indicate who released that version "
+"of the package. The upstream version number of the package can also be "
+"labeled on the graph."
+msgstr ""
+"B<plotchangelog> é uma ferramenta para ajudar na visualização de um "
+"I<changelog> Debian. Os changelogs são postos em gráfico com o "
+"B<gnuplot>(1), com o eixo X do gráfico a denotar o tempo do lançamento e o "
+"eixo Y a denotar o número de versão Debian do pacote. Cada lançamento "
+"individual do pacote é representado por um ponto, e os pontos são "
+"codificados em cores para indicar quem lançou essa versão do pacote. O "
+"número de versão do autor do pacote também pode ser etiquetado no gráfico."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:21
+msgid ""
+"Alternatively, the Y axis can be configured to display the size of the "
+"changelog entry for each new version. Or it can be configured to display "
+"approximately how many bugs were fixed for each new version."
+msgstr ""
+"em alternativa, o eixo Y pode ser configurado para mostrar o tamanho da "
+"entrada changelog para cada nova versão. Ou pode ser configurado para "
+"mostrar aproximadamente quantos bugs foram corrigidos para cada nova versão."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:24
+msgid ""
+"Note that if the package is a Debian-specific package, the entire package "
+"version will be used for the Y axis. This does not always work perfectly."
+msgstr ""
+"Note que se o pacote for um pacote específico de Debian, a versão do pacote "
+"inteira será usada para o eixo Y. Isto nem sempre funciona perfeitamente."
+
+#. type: SH
+#: ../scripts/plotchangelog.1:25
+#, no-wrap
+msgid "READING THE GRAPH"
+msgstr "LENDO O GRÁFICO"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:33
+msgid ""
+"The general outline of a package's graph is typically a series of peaks, "
+"starting at 1, going up to n, and then returning abruptly to 1. The higher "
+"the peaks, the more releases the maintainer made between new upstream "
+"versions of the package. If a package is Debian-only, it's graph will just "
+"grow upwards without ever falling (although a bug in this program may cause "
+"it to fall sometimes, if the version number goes from say, 0.9 to say, 0.10 "
+"- this is interpreted wrong...)"
+msgstr ""
+"O esboço geral do gráfico do pacote é tipicamente uma série de picos, "
+"começando em 1, e indo até n, e depois retornando abruptamente até 1. Quanto "
+"mais altos os picos, mais lançamentos o maintainer fez entre novas versões "
+"originais do pacote. Se um pacote for apenas Debian, o seu gráfico irá "
+"apenas crescer para cima sem nunca descer (apesar de um bug neste programa "
+"possa fazer que por vezes ele caia. se o número de versão vá de digamos, 0.9 "
+"para digamos, 0.10 - isto é interpretado de maneira errada...)"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:40
+msgid ""
+"If the graph dips below 1, someone made a NMU of the package and upgraded it "
+"to a new upstream version, thus setting the Debian version to 0. NMU's in "
+"general appear as fractional points like 1.1, 2.1, etc. A NMU can also be "
+"easily detected by looking at the points that represent which maintainer "
+"uploaded the package -- a solitary point of a different type than the points "
+"before and after it is typically a NMU."
+msgstr ""
+"Se o gráfico descer abaixo de 1, alguém fez um NMU do pacote e atualizou-o "
+"para uma nova versão de autor, assim definindo a versão Debian para 0. Os "
+"NMUs em geral aparecem como pontos fracionais como 1.1, 2.1, etc. Um NMU "
+"pode também ser facilmente detetado olhando para os pontos que representam "
+"qual maintainer enviou o pacote -- um ponto solitário dum tipo diferente dos "
+"pontos anteriores e posteriores a ele é tipicamente um NMU."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:43
+msgid ""
+"It's also easy to tell by looking at the points when a package changes "
+"maintainers."
+msgstr ""
+"Também é fácil de dizer ao olhar para os pontos quando um pacote mudou de "
+"maintainers."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:44
+#, no-wrap
+msgid "B<-l>, B<--linecount>"
+msgstr "B<-l>, B<--linecount>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:50
+msgid ""
+"Instead of using the Debian version number as the Y axis, use the number of "
+"lines in the changelog entry for each version. Cannot be used together with "
+"B<--bugcount>."
+msgstr ""
+"Em vez de usar o número de versão Debian como o eixo Y, usa o número de "
+"linhas na entrada changelog para cada versão. Não pode ser usado em conjunto "
+"com B<--bugcount>."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:50
+#, no-wrap
+msgid "B<-b>, B<--bugcount>"
+msgstr "B<-b>, B<--bugcount>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:57
+msgid ""
+"Instead of using the Debian version number as the Y axis, use the number of "
+"bugs that were closed by each changelog entry. Note that this number is "
+"obtained by searching for \"#dddd\" in the changelog, and so it may be "
+"inaccurate. Cannot be used together with B<--linecount>."
+msgstr ""
+"Em vez de usar o número de versão Debian como o eixo Y, usa o número de bugs "
+"que forma fechados por cada entrada no changelog. Note que este número é "
+"obtido ao sondar por \"#dddd\" no changelog, e assim por não ter precisão. "
+"Não pode ser usado em conjunto com B<--linecount>."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:57
+#, no-wrap
+msgid "B<-c>, B<--cumulative>"
+msgstr "B<-c>, B<--cumulative>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:65
+msgid ""
+"When used together with either B<--bugcount> or B<--linecount>, graphs the "
+"cumulative count rather than the count in each individual changelog entry."
+msgstr ""
+"Quando usado juntamente com B<--bugcount> ou B<--linecount>, põe em gráfico "
+"a contagem acumulada em vez da contagem individual em cada entrada changelog."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:65
+#, no-wrap
+msgid "B<-v>, B<--no-version>"
+msgstr "B<-v>, B<--no-version>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:68
+msgid ""
+"Do not show upstream version labels. Useful if the graph gets too crowded."
+msgstr ""
+"Não mostra etiquetas da versão do autor. Útil se o gráfico ficar muito "
+"povoado."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:68
+#, no-wrap
+msgid "B<-m, --no-maint>"
+msgstr "B<-m, --no-maint>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:71
+msgid "Do not differentiate between different maintainers of the package."
+msgstr "Não diferencia entre diferentes maintainers do pacote."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:71
+#, no-wrap
+msgid "B<-s file>, B<--save=>I<file>"
+msgstr "B<-s file>, B<--save=>I<file>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:75
+msgid ""
+"Save the graph to I<file> in PostScript format instead of immediately "
+"displaying it."
+msgstr ""
+"Guarda o gráfico em I<file> em formato PostScript em vez de o mostrar "
+"imediatamente."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:75
+#, no-wrap
+msgid "B<-u>, B<--urgency>"
+msgstr "B<-u>, B<--urgency>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:78
+msgid "Use larger points when displaying higher-urgency package uploads."
+msgstr "Usa pontos maiores quando mostra envios de pacotes de alta-prioridade."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:81
+msgid ""
+"Output the gnuplot script that is fed into gnuplot (for debugging purposes)."
+msgstr ""
+"Gera o script de gnuplot que é dado ao gnuplot (para objectivos de "
+"depuração)."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:81
+#, no-wrap
+msgid "B<-g>I<commands>, B<--gnuplot=>I<commands>"
+msgstr "B<-g>I<commands>, B<--gnuplot=>I<commands>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:92
+msgid ""
+"This allows you to insert B<gnuplot>(1) commands into the gnuplot script "
+"that is used to generate the graph. The commands are placed after all "
+"initialization but before the final B<plot> command. This can be used to "
+"override the default look provided by this program in arbitrary ways. You "
+"can also use things like \"set terminal png color\" to change the output "
+"file type, which is useful in conjunction with the -s option."
+msgstr ""
+"Isto permite-lhe inserir comandos do B<gnuplot>(1) no script do gnuplot que "
+"é usado para gerar o gráfico. Os comandos são colocados após toda a "
+"inicialização mas antes do comando B<plot> final. Isto pode ser usado para "
+"sobrepor o olhar predefinido fornecido por este programa em modos "
+"arbitrários. Você pode também usar coisas como \"definir a cor png do "
+"terminal\" para mudar o tipo de ficheiro de resultado,o que é útil em "
+"conjunto com a opção -s."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:95
+msgid "Show a usage summary."
+msgstr "Mostra um resumo de utilização."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:98
+msgid "Display version, author and copyright information."
+msgstr "Mostra informação de versão, autor e copyright."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:98
+#, no-wrap
+msgid "B<--noconf>, B<--no-conf>"
+msgstr "B<--noconf>, B<--no-conf>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:101
+msgid "Do not read any configuration files (see below)."
+msgstr "Não lê nenhuns ficheiros de configuração (ver abaixo)."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:101
+#, no-wrap
+msgid "I<changelog >..."
+msgstr "I<changelog >..."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:106
+msgid ""
+"The I<changelog> files to graph. If multiple files are specified they will "
+"all be displayed on the same graph. The files may be compressed with gzip. "
+"Any text in them that is not in Debian changelog format will be ignored."
+msgstr ""
+"Os ficheiros I<changelog> a meter em gráfico. Se forem especificados vários "
+"ficheiros eles serão todos mostrados no mesmo gráfico. Os ficheiros podem "
+"estar comprimidos com gzip. Qualquer texto neles que não esteja em formato "
+"de changelog Debian será ignorado."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:113
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. The B<--no-"
+"conf> option can be used to prevent reading these files. Environment "
+"variable settings are ignored when these configuration files are read. The "
+"currently recognised variables are:"
+msgstr ""
+"Os dois ficheiros de configuração I</etc/devscripts.conf> e I<~/.devscripts> "
+"são fonte para uma shell por esta ordem para definir variáveis de "
+"configuração. A opção B<--no-conf> pode ser usada para prevenir a leitura "
+"destes ficheiros. As definições de variáveis de ambiente são ignoradas "
+"quando estes ficheiros de configuração são lidos. As variáveis reconhecidas "
+"actualmente são:"
+
+#. type: TP
+#: ../scripts/plotchangelog.1:113
+#, no-wrap
+msgid "B<PLOTCHANGELOG_OPTIONS>"
+msgstr "B<PLOTCHANGELOG_OPTIONS>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:118
+msgid ""
+"This is a space-separated list of options to always use, for example B<-l -"
+"b>. Do not include B<-g> or B<--gnuplot> among this list as it may be "
+"ignored; see the next variable instead."
+msgstr ""
+"Isto é uma lista de opções separadas por espaços para usar sempre, por "
+"exemplo B<-l -b>. Não inclua B<-g> ou B<--gnuplot> entre esta lista pois "
+"pode ser ignorada; veja antes a próxima variável."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:118
+#, no-wrap
+msgid "B<PLOTCHANGELOG_GNUPLOT>"
+msgstr "B<PLOTCHANGELOG_GNUPLOT>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:124
+msgid ""
+"These are B<gnuplot> commands which will be prepended to any such commands "
+"given on the command line."
+msgstr ""
+"Estes são comandos B<gnuplot> os quais serão pre-acrescentados a qualquer de "
+"tais comandos dados na linha de comandos."
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:127
+msgid "Joey Hess E<lt>joey@kitenet.netE<gt>"
+msgstr "Joey Hess E<lt>joey@kitenet.netE<gt>"
+
+#. type: TH
+#: ../scripts/pts-subscribe.1:1
+#, no-wrap
+msgid "PTS-SUBSCRIBE"
+msgstr "PTS-SUBSCRIBE"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:4
+msgid "pts-subscribe - time-limited subscription to the PTS"
+msgstr "pts-subscribe - subscrição com limite de tempo para o PTS"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:6
+msgid "B<pts-subscribe> [I<options>] I<package>"
+msgstr "B<pts-subscribe> [I<options>] I<package>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:8
+msgid "B<pts-unsubscribe> [I<options>] I<package>"
+msgstr "B<pts-unsubscribe> [I<options>] I<package>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:12
+msgid ""
+"B<pts-subscribe> sends a subscription request for I<package> to the Package "
+"Tracking System at pts@qa.debian.org, and cancels the subscription 30 days "
+"later."
+msgstr ""
+"B<pts-subscribe> envia um pedido de subscrição para o I<package> para o "
+"Package Tracking System em pts@qa.debian.org, e cancela a subscrição 30 dias "
+"depois."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:15
+msgid ""
+"If called as B<pts-unsubscribe>, send an unsubscription request for "
+"I<package> to the Package Tracking System."
+msgstr ""
+"Se chamado como B<pts-unsubscribe>, envia um pedido cancelamento de "
+"subscrição para I<package> para o Package Tracking System."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:18
+msgid ""
+"This utility is useful if a developer has made an NMU and wants to track the "
+"package for a limited period of time."
+msgstr ""
+"Este utilitário é útil se um desenvolvedor tiver feito um NMU e deseja "
+"seguir o pacote por um período limitado de tempo."
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:19
+#, no-wrap
+msgid "B<--until >I<time>, B<-u> I<time>"
+msgstr "B<--until >I<time>, B<-u> I<time>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:24
+msgid ""
+"When B<at>(1) should cancel the subscription. I<time> must be specified "
+"using B<at>'s syntax. Default is 'now + 30 days'. This option will "
+"probably require quoting!"
+msgstr ""
+"Quando B<at>(1) deve cancelar a subscrição. I<time> tem de ser especificado "
+"usando sintaxe do B<at>. A predefinição é \"agora + 30 dias\". Esta opção "
+"irá provavelmente requerer citação!"
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:24
+#, no-wrap
+msgid "B<--forever>"
+msgstr "B<--forever>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:28
+msgid ""
+"Don't cancel the subscription automatically. This can also be specified as "
+"B<--until forever>."
+msgstr ""
+"Não cancela a subscrição automaticamente. Isto também pode ser especificado "
+"como B<--until forever>."
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:35
+#, no-wrap
+msgid "B<DEBEMAIL>, B<EMAIL>"
+msgstr "B<DEBEMAIL>, B<EMAIL>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:42
+msgid ""
+"If one of these is set (with preference give to B<DEBEMAIL>), then this will "
+"be used for the subscription address. If neither is set, then the email "
+"will be sent without a specified subscription address, and the email's From: "
+"line will be used to determine the sender's address. This will be "
+"determined by B<mail>(1)."
+msgstr ""
+"Se um destes estiver definido (com preferência dada a B<DEBEMAIL>), então "
+"isto será usado para o endereço de subscrição. Se nenhum deles estiver "
+"definido, então o email será enviado sem um endereço de subscrição "
+"específico, e a linha From: do email será usada para determinar o endereço "
+"do remetente. Isto será determinado por B<mail>(1)."
+
+#. type: TP
+#: ../scripts/pts-subscribe.1:48
+#, no-wrap
+msgid "B<PTS_UNTIL>"
+msgstr "B<PTS_UNTIL>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:51
+msgid "Setting this is equivalent to giving a B<--until> option."
+msgstr "Definir isto é equivalente a dar a opção B<--until>."
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:56
+msgid ""
+"B<at>(1), information about the Package Tracking System in the Developer's "
+"Reference at https://www.debian.org/doc/developers-reference/resources."
+"html#pkg-tracking-system"
+msgstr ""
+"B<at>(1), informação acerca do Package Tracking System em Developer's "
+"Reference em https://www.debian.org/doc/developers-reference/resources."
+"html#pkg-tracking-system"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:59
+msgid ""
+"This program was written by Julian Gilbey E<lt>jdg@debian.orgE<gt> based on "
+"a public domain prototype by Raphael Hertzog E<lt>hertzog@debian.orgE<gt> "
+"and is copyright under the GPL, version 2 or later."
+msgstr ""
+"Este programa foi escrito por Julian Gilbey E<lt>jdg@debian.orgE<gt> baseado "
+"num protótipo de domínio público por Raphael Hertzog E<lt>hertzog@debian."
+"orgE<gt> e tem copyright sob GPL, versão 2 ou posterior."
+
+#. type: TH
+#: ../scripts/rc-alert.1:1
+#, no-wrap
+msgid "RC-ALERT"
+msgstr "RC-ALERT"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:4
+msgid "rc-alert - check for installed packages with release-critical bugs"
+msgstr ""
+"rc-alert - verifica por pacotes instalados com bugs críticos-de-lançamento"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:6
+msgid ""
+"B<rc-alert> [I<inclusion options>] [B<--debtags> [I<tag>[B<,>I<tag> ...]]] "
+"[B<--popcon>] [I<package> ...]"
+msgstr ""
+"B<rc-alert> [I<inclusion options>] [B<--debtags> [I<tag>[B<,>I<tag> ...]]] "
+"[B<--popcon>] [I<package> ...]"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:8
+msgid "B<rc-alert --help>|B<--version>"
+msgstr "B<rc-alert --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:12
+msgid ""
+"B<rc-alert> downloads the list of release-critical bugs from the Debian BTS "
+"webpages, and then outputs a list of packages installed on the system, or "
+"given on the command-line, which are in that list."
+msgstr ""
+"B<rc-alert> descarrega a lista de bugs críticos-de-lançamento a partir das "
+"páginas web do Debian BTS, e depois escreve uma lista de pacotes instalados "
+"no sistema, ou dados na linha de comandos, que estão nessa lista."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:17
+msgid ""
+"If the directory I<$XDG_CACHE_HOME/devscripts/rc-alert> exists or the B<--"
+"cache> option is given, then the (sizable) downloaded list will be cached, "
+"and will only be downloaded again on a second invocation if it has changed."
+msgstr ""
+"Se o directório I<$XDG_CACHE_HOME/devscripts/rc-alert> existir ou da a opção "
+"B<--cache> for dada, então a lista (de tamanho considerável) descarregada "
+"será colocada em cache, e apenas será descarregada outra vez numa segunda "
+"invocação se tiver sido alterada."
+
+#. type: TP
+#: ../scripts/rc-alert.1:18
+#, no-wrap
+msgid "B<--cache>"
+msgstr "B<--cache>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:21
+msgid ""
+"Force the creation of the I<$XDG_CACHE_HOME/devscripts/rc-alert> cache "
+"directory."
+msgstr ""
+"Força a criação do directório de cache I<$XDG_CACHE_HOME/devscripts/rc-"
+"alert>."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:31
+msgid ""
+"It is also possible to filter the list of bugs reported based on the tags "
+"and distributions associated with the package. The filtering options are:"
+msgstr ""
+"É também possível filtrar a lista de bugs reportada com base nas etiquetas e "
+"distribuições associadas ao pacote. As opções de filtragem são:"
+
+#. type: TP
+#: ../scripts/rc-alert.1:31
+#, no-wrap
+msgid "B<--include-tags>, B<-f>"
+msgstr "B<--include-tags>, B<-f>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:35
+msgid ""
+"A list of tags which the bug must have, in the format used for output. For "
+"example, to include bugs tagged security or help wanted, use \"SH\"."
+msgstr ""
+"Uma lista de etiquetas que o pacote tem de ter, no formato usado para "
+"resultados. Por exemplo, para incluir bugs etiquetados com \"security\" ou "
+"\"help wanted\" use \"SH\"."
+
+#. type: TP
+#: ../scripts/rc-alert.1:35
+#, no-wrap
+msgid "B<--include-tag-op>, B<-t>"
+msgstr "B<--include-tag-op>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:39
+msgid ""
+"If set to I<and>, a bug must have all of the tags specified by B<--include-"
+"tags>."
+msgstr ""
+"Se definido para I<and>, um bug tem de ter todas as etiquetas especificadas "
+"por B<--include-tags>."
+
+#. type: TP
+#: ../scripts/rc-alert.1:39
+#, no-wrap
+msgid "B<--exclude-tags>"
+msgstr "B<--exclude-tags>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:43
+msgid ""
+"A list of tags which the bug must not have, in the same format as B<--"
+"include-tags>."
+msgstr ""
+"Uma lista de etiquetas que o bug não pode ter, no mesmo formato que B<--"
+"include-tags>."
+
+#. type: TP
+#: ../scripts/rc-alert.1:43
+#, no-wrap
+msgid "B<--exclude-tag-op>"
+msgstr "B<--exclude-tag-op>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:48
+msgid ""
+"If set to I<and>, a bug must have none of the tags specified by B<--exclude-"
+"tags>. By default, the bug will be excluded if any tag matches."
+msgstr ""
+"Se definido para I<and>, um bug não pode ter nenhuma das etiquetas "
+"especificadas por B<--exclude-tags>. Por predefinição, o bug será excluído "
+"se alguma das etiquetas corresponder."
+
+#. type: TP
+#: ../scripts/rc-alert.1:48
+#, no-wrap
+msgid "B<--include-dists>, B<-d>"
+msgstr "B<--include-dists>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:52
+msgid ""
+"A list of distributions which the bug must apply to, in the format used for "
+"output. For example, to include bugs affecting testing or unstable, use "
+"\"TU\"."
+msgstr ""
+"Uma lista de distribuições a qual o bug tem de se aplicar, no formato usado "
+"para resultados. Por exemplo, para incluir bugs que afectam \"testing\" ou "
+"\"unstable\", use \"TU\"."
+
+#. type: TP
+#: ../scripts/rc-alert.1:52
+#, no-wrap
+msgid "B<--include-dist-op>, B<-o>"
+msgstr "B<--include-dist-op>, B<-o>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:56
+msgid ""
+"If set to I<and>, a bug must apply to all of the specified distributions in "
+"order to be included."
+msgstr ""
+"Se definido para I<and>, um bug tem de se aplicar a todas as distribuições "
+"especificadas de modo a ser incluído."
+
+#. type: TP
+#: ../scripts/rc-alert.1:56
+#, no-wrap
+msgid "B<--exclude-dists>"
+msgstr "B<--exclude-dists>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:60
+msgid ""
+"A list of distributions to which the bug must not apply, in the same format "
+"as B<--include-dists>."
+msgstr ""
+"Uma lista de distribuições a qual o bug não pode se aplicar, no mesmo "
+"formato que B<--include-dists>."
+
+#. type: TP
+#: ../scripts/rc-alert.1:60
+#, no-wrap
+msgid "B<--exclude-dist-op>"
+msgstr "B<--exclude-dist-op>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:65
+msgid ""
+"If set to I<and>, a bug must apply to all of the specified distributions in "
+"order to be excluded. By default the bug will be excluded if it applies to "
+"any of the listed distributions."
+msgstr ""
+"Se definido para I<and>, um bug tem de se aplicar a todas as distribuições "
+"especificadas de modo a ser excluído. Por predefinição o bug será excluído "
+"se se aplicar a qualquer uma das distribuições listadas."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:70
+msgid ""
+"It is also possible to only list bugs which have specific debtags set. Note "
+"that you need to have debtags installed and also that it's not mandatory for "
+"maintainers to set proper debtags. The produced list will thus probably be "
+"incomplete."
+msgstr ""
+"É também possível apenas listar bugs que tenham debtags específicas "
+"definidas. Note que precisa de ter o debtags instalado e também que não é "
+"obrigatório para os maintainers definirem debtags apropriados. A lista "
+"produzida será assim provavelmente incompleta."
+
+#. type: TP
+#: ../scripts/rc-alert.1:70
+#, no-wrap
+msgid "B<--debtags>"
+msgstr "B<--debtags>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:75
+msgid ""
+"Match packages based on the listed tags. Each package is matched only if it "
+"has all the listed tags; in the case of multiple tags within the same facet, "
+"a package is matched if it has any of the listed tags within the facet."
+msgstr ""
+"Coincide pacotes com base nas etiquetas listadas. Cada pacote corresponde "
+"apenas se tiver todas as etiquetas listadas; no caso de múltiplas etiquetas "
+"dentro da mesma faceta, um pacote é correspondente se tiver qualquer uma das "
+"etiquetas listadas dentro da faceta."
+
+#. type: TP
+#: ../scripts/rc-alert.1:75
+#, no-wrap
+msgid "B<--debtags-database>"
+msgstr "B<--debtags-database>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:79
+msgid ""
+"Use a non-standard debtags database. The default is I</var/lib/debtags/"
+"packages-tags>."
+msgstr ""
+"Usa uma base de dados debtags não-standard. A predefinição é I</var/lib/"
+"debtags/packages-tags>."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:83
+msgid ""
+"Popularity-contest collects data about installation and usage of Debian "
+"packages. You can additionally sort the bugs by the popcon rank of the "
+"related packages."
+msgstr ""
+"Popularity-contest recolhe dados acerca da instalação e utilização de "
+"pacotes Debian. Você pode adicionalmente ordenar os bugs pela classificação "
+"popcon dos pacotes relacionados."
+
+#. type: TP
+#: ../scripts/rc-alert.1:83
+#, no-wrap
+msgid "B<--popcon>"
+msgstr "B<--popcon>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:86
+msgid "Sort bugs by the popcon rank of the package the bug belongs to."
+msgstr "Ordena bugs pela classificação popcon do pacote a que o bug pertence."
+
+#. type: TP
+#: ../scripts/rc-alert.1:86
+#, no-wrap
+msgid "B<--pc-vote>"
+msgstr "B<--pc-vote>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:92
+msgid ""
+"By default, packages are sorted according to the number of people who have "
+"the package installed. This option enables sorting by the number of people "
+"regularly using the package instead. This option has no effect in "
+"combination with --pc-local."
+msgstr ""
+"Por predefinição, os pacotes são ordenados de acordo com o número de pessoas "
+"que têm o pacote instalado. Em vez disso, esta opção activa a ordem pelo "
+"número de pessoas que usam regularmente o pacote. Esta opção não tem "
+"qualquer efeito em combinação com --pc-local."
+
+#. type: TP
+#: ../scripts/rc-alert.1:92
+#, no-wrap
+msgid "B<--pc-local>"
+msgstr "B<--pc-local>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:96
+msgid ""
+"Instead of requesting remote data the information from the last popcon run "
+"is used (I</var/log/popularity-contest>)."
+msgstr ""
+"Em vez de requerer dados remotos é usada a informação do último popcon que "
+"correu (I</var/log/popularity-contest>)."
+
+#. type: TP
+#: ../scripts/rc-alert.1:97
+#, no-wrap
+msgid "B<--include-dists> OS"
+msgstr "B<--include-dists> OS"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:100
+msgid "The bug must apply to at least one of oldstable or stable"
+msgstr "O bug tem de ser aplicar pelo menos a um de oldstable ou stable"
+
+#. type: TP
+#: ../scripts/rc-alert.1:100
+#, no-wrap
+msgid "B<--include-dists> TUB< --include-dist-op> and"
+msgstr "B<--include-dists> TUB< --include-dist-op> e"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:103
+msgid "The bug must apply to both testing and unstable"
+msgstr "O bug tem de ser aplicar a ambos testing e unstable"
+
+#. type: TP
+#: ../scripts/rc-alert.1:103
+#, no-wrap
+msgid "B<--include-dists> OB< --include-tags> SB< --exclude-tags> +"
+msgstr "B<--include-dists> OB< --include-tags> SB< --exclude-tags> +"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:106
+msgid "The bug must apply to oldstable and be tagged security but not patch"
+msgstr ""
+"O bug tem de ser aplicar a oldstable e ser etiquetado security mas não patch"
+
+#. type: TP
+#: ../scripts/rc-alert.1:106
+#, no-wrap
+msgid "B<--exclude-dists> SOTB< --include-tags> R"
+msgstr "B<--exclude-dists> SOTB< --include-tags> R"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:110
+msgid ""
+"The bug must apply to only unstable or experimental (or both) and be tagged "
+"unreproducible"
+msgstr ""
+"O bug tem de ser aplicar a apenas unstable ou experimental (ou ambos) e ser "
+"etiquetado unreproducible (não reproduzível)"
+
+#. type: TP
+#: ../scripts/rc-alert.1:110
+#, no-wrap
+msgid "B<--debtags> implemented-in::perl,role::plugin,implemented-in::python"
+msgstr "B<--debtags> implemented-in::perl,role::plugin,implemented-in::python"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:115
+msgid ""
+"The bug must apply to packages matching the specified debtags, i.e. the "
+"match will only include packages that have the 'role::plugin' tag and that "
+"have either of the tags 'implemented-in::perl' or 'implemented-in::python'."
+msgstr ""
+"O bug tem de se aplicar a pacotes que correspondam às debtags especificadas, "
+"isto é, a correspondência irá apenas incluir pacotes que têm a etiqueta "
+"'role::plugin' e essa tem uma das etiquetas 'implemented-in::perl' ou "
+"'implemented-in::python'."
+
+#. type: TP
+#: ../scripts/rc-alert.1:115
+#, no-wrap
+msgid "B<--popcon> B<--pc-local>"
+msgstr "B<--popcon> B<--pc-local>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:119
+msgid ""
+"Read I</var/log/popularity-contest> and sort bugs by your personal popcon "
+"ranking (which is basically the atime of your packages' binaries)."
+msgstr ""
+"Lê I</var/log/popularity-contest> e ordena bugs pela sua classificação "
+"popcon pessoal (o que é basicamente a marca atime dos seus binários dos "
+"pacotes)."
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:121
+msgid "It is not possible to say \"does not apply only to unstable\""
+msgstr "Não é possível dizer \"não se aplica apenas a unstable\""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:125
+msgid "B<debtags(1)> B<popbugs(1)> B<popularity-contest(8)>"
+msgstr "B<debtags(1)> B<popbugs(1)> B<popularity-contest(8)>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:129
+msgid ""
+"B<rc-alert> was written by Anthony DeRobertis and modified by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> and Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt> for the devscripts package. Debtags and popcon functionality was "
+"added by Jan Hauke Rahm E<lt>info@jhr-online.deE<gt>."
+msgstr ""
+"B<rc-alert> foi escrito por Anthony DeRobertis e modificado por Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt> e Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt> para o pacote devscripts. A funcionalidade debtags e popcon foi "
+"adicionada por Jan Hauke Rahm E<lt>info@jhr-online.deE<gt>."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:262
+msgid "rmadison -- Remotely query the Debian archive database about packages"
+msgstr ""
+"rmadison -- Consulta remotamente a base de dados do arquivo Debian acerca de "
+"pacotes"
+
+#. type: =item
+#: ../scripts/rmadison.pl:268
+msgid "B<rmadison> [I<OPTIONS>] I<PACKAGE> ..."
+msgstr "B<rmadison> [I<OPTIONS>] I<PACKAGE> ..."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:274
+msgid ""
+"B<dak ls> queries the Debian archive database (\"projectb\") and displays "
+"which package version is registered per architecture/component/suite. The "
+"CGI at B<https://qa.debian.org/madison.php> provides that service without "
+"requiring SSH access to ftp-master.debian.org or the mirror on mirror.ftp-"
+"master.debian.org. This script, B<rmadison>, is a command line frontend to "
+"this CGI."
+msgstr ""
+"B<dak ls> consulta a base de dados do arquivo Debian (\"projectb\") e mostra "
+"qual versão de pacote está registada por arquitectura/componente/suite. A "
+"CGI em B<https://qa.debian.org/madison.php> fornece esse serviço sem "
+"requerer acesso SSH a ftp-master.debian.org ou ao espelho em mirror.ftp-"
+"master.debian.org. Este script, B<rmadison>, é um frontend de linha de "
+"comandos para esta CGI."
+
+#. type: =item
+#: ../scripts/rmadison.pl:285
+msgid "B<-a>, B<--architecture=>I<ARCH>"
+msgstr "B<-a>, B<--architecture=>I<ARCH>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:287
+msgid "only show info for ARCH(s)"
+msgstr "apenas mostra informação para ARCH(arquitecturas)"
+
+#. type: =item
+#: ../scripts/rmadison.pl:289
+msgid "B<-b>, B<--binary-type=>I<TYPE>"
+msgstr "B<-b>, B<--binary-type=>I<TYPE>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:291
+msgid "only show info for binary TYPE"
+msgstr "apenas mostra informação para TYPE binário"
+
+#. type: =item
+#: ../scripts/rmadison.pl:293
+msgid "B<-c>, B<--component=>I<COMPONENT>"
+msgstr "B<-c>, B<--component=>I<COMPONENT>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:295
+msgid "only show info for COMPONENT(s)"
+msgstr "apenas mostra informação para COMPONENT(s)"
+
+#. type: =item
+#: ../scripts/rmadison.pl:297
+msgid "B<-g>, B<--greaterorequal>"
+msgstr "B<-g>, B<--greaterorequal>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:299
+msgid "show buildd 'dep-wait pkg >= {highest version}' info"
+msgstr "mostra informação buildd 'dep-wait pkg >= {versão mais alta}'"
+
+#. type: =item
+#: ../scripts/rmadison.pl:301
+msgid "B<-G>, B<--greaterthan>"
+msgstr "B<-G>, B<--greaterthan>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:303
+msgid "show buildd 'dep-wait pkg >> {highest version}' info"
+msgstr "mostra informação buildd 'dep-wait pkg >= {versão mais alta}'"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:307
+msgid "show this help and exit"
+msgstr "mostra esta ajuda e termina"
+
+#. type: =item
+#: ../scripts/rmadison.pl:309
+msgid "B<-s>, B<--suite=>I<SUITE>"
+msgstr "B<-s>, B<--suite=>I<SUITE>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:311
+msgid "only show info for this suite"
+msgstr "apenas mostra informação para esta suite"
+
+#. type: =item
+#: ../scripts/rmadison.pl:313
+msgid "B<-r>, B<--regex>"
+msgstr "B<-r>, B<--regex>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:315
+msgid "treat PACKAGE as a regex"
+msgstr "trata PACKAGE como uma expressão regular"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:317
+msgid ""
+"B<Note:> Since B<-r> can easily DoS the database (\"-r .\"), this option is "
+"not supported by the CGI on qa.debian.org and most other installations."
+msgstr ""
+"B<Nota:> Como B<-r> pode facilmente DoS à base de dados (\"-r .\"), esta "
+"opção não é suportada pelo CGI em qa.debian.org e a maioria de outras "
+"instalações."
+
+#. type: =item
+#: ../scripts/rmadison.pl:320
+msgid "B<-S>, B<--source-and-binary>"
+msgstr "B<-S>, B<--source-and-binary>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:322
+msgid "show info for the binary children of source pkgs"
+msgstr "mostra informação sobre filhos binários de pacotes fonte"
+
+#. type: =item
+#: ../scripts/rmadison.pl:324
+msgid "B<-t>, B<--time>"
+msgstr "B<-t>, B<--time>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:326
+msgid "show projectb snapshot and reload time (not supported by all archives)"
+msgstr ""
+"mostra instantâneo de projectb e tempo de reload (não suportado por todos os "
+"arquivos)"
+
+#. type: =item
+#: ../scripts/rmadison.pl:328
+msgid "B<-u>, B<--url=>I<URL>[B<,>I<URL> ...]"
+msgstr "B<-u>, B<--url=>I<URL>[B<,>I<URL> ...]"
+
+#. type: verbatim
+#: ../scripts/rmadison.pl:330
+#, no-wrap
+msgid ""
+"use I<URL> for the query. Supported shorthands are\n"
+" B<debian> https://api.ftp-master.debian.org/madison\n"
+" B<new> https://api.ftp-master.debian.org/madison?s=new\n"
+" B<qa> https://qa.debian.org/madison.php\n"
+" B<ubuntu> https://people.canonical.com/~ubuntu-archive/madison.cgi\n"
+" B<udd> https://qa.debian.org/cgi-bin/madison.cgi\n"
+" B<archive> https://qa.debian.org/cgi-bin/madison.cgi?table=archived\n"
+" B<ports> https://qa.debian.org/cgi-bin/madison.cgi?table=ports\n"
+"\n"
+msgstr ""
+"usa I<URL> para a consulta. As estenografias suportadas são\n"
+" B<debian> https://api.ftp-master.debian.org/madison\n"
+" B<new> https://api.ftp-master.debian.org/madison?s=new\n"
+" B<qa> https://qa.debian.org/madison.php\n"
+" B<ubuntu> https://people.canonical.com/~ubuntu-archive/madison.cgi\n"
+" B<udd> https://qa.debian.org/cgi-bin/madison.cgi\n"
+" B<archive> https://qa.debian.org/cgi-bin/madison.cgi?table=archived\n"
+" B<ports> https://qa.debian.org/cgi-bin/madison.cgi?table=ports\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:339
+msgid ""
+"See the B<RMADISON_URL_MAP_> variable below for a method to add new "
+"shorthands."
+msgstr ""
+"Veja a variável B<RMADISON_URL_MAP_> em baixo para um método de adicionar "
+"novas estenografias."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:344
+msgid "show version and exit"
+msgstr "mostra a versão e termina"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:348
+msgid "don't read the devscripts configuration files"
+msgstr "não lê os ficheiros de configuração do devscripts"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:352
+msgid ""
+"ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g. --"
+"architecture=amd64,i386"
+msgstr ""
+"ARCH, COMPONENT e SUITE podem ser listas separadas por vírgulas (ou "
+"espaços), ex. --architecture=amd64,i386"
+
+#. type: =item
+#: ../scripts/rmadison.pl:365
+msgid "B<RMADISON_URL_MAP_>I<SHORTHAND>=I<URL>"
+msgstr "B<RMADISON_URL_MAP_>I<SHORTHAND>=I<URL>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:367
+msgid ""
+"Add an entry to the set of shorthand URLs listed above. I<SHORTHAND> should "
+"be replaced with the shorthand form to be used to refer to I<URL>."
+msgstr ""
+"Adiciona uma entrada ao conjunto de estenografias de URLs listados em cima. "
+"I<SHORTHAND> deve ser substituído pela forma estenográfica a ser usada para "
+"se referir a I<URL>."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:370
+msgid ""
+"Multiple shorthand entries may be specified by using multiple "
+"B<RMADISON_URL_MAP_*> variables."
+msgstr ""
+"Várias entradas de estenografias pode ser especificadas usando várias "
+"variáveis B<RMADISON_URL_MAP_*>."
+
+#. type: =item
+#: ../scripts/rmadison.pl:373
+msgid "B<RMADISON_DEFAULT_URL>=I<URL>"
+msgstr "B<RMADISON_DEFAULT_URL>=I<URL>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:375
+msgid ""
+"Set the default URL to use unless overridden by a command line option. For "
+"Debian this defaults to debian. For Ubuntu this defaults to ubuntu."
+msgstr ""
+"Define o URL predefinido a usar a menos que sobreposto por uma opção de "
+"linha de comandos. Para Debian isto é predefinido para debian. Para Ubuntu é "
+"predefinido para ubuntu."
+
+#. type: =item
+#: ../scripts/rmadison.pl:378
+msgid "B<RMADISON_ARCHITECTURE>=I<ARCH>"
+msgstr "B<RMADISON_ARCHITECTURE>=I<ARCH>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:380
+msgid ""
+"Set the default architecture to use unless overridden by a command line "
+"option. To run an unrestricted query when B<RMADISON_ARCHITECTURE> is set, "
+"use B<--architecture='*'>."
+msgstr ""
+"Define a arquitectura predefinida a usar a menos que sobreposta por uma "
+"opção de linha de comandos. Para correr uma consulta sem restrições quando "
+"B<RMADISON_ARCHITECTURE> está definido, use B<--architecture='*'>."
+
+#. type: =item
+#: ../scripts/rmadison.pl:384
+msgid "B<RMADISON_SSL_CA_FILE>=I<FILE>"
+msgstr "B<RMADISON_SSL_CA_FILE>=I<FILE>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:386
+msgid ""
+"Use the specified CA file instead of the default CA bundle for curl/wget, "
+"passed as --cacert to curl, and as --ca-certificate to wget."
+msgstr ""
+"Usa o ficheiro CA especificado em vez do maço CA predefinido para curl/wget, "
+"passado como --cacert ao curl, e como --ca-certificate ao wget."
+
+#. type: =item
+#: ../scripts/rmadison.pl:389
+msgid "B<RMADISON_SSL_CA_PATH>=I<PATH>"
+msgstr "B<RMADISON_SSL_CA_PATH>=I<PATH>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:391
+msgid ""
+"Use the specified CA directory instead of the default CA bundle for curl/"
+"wget, passed as --capath to curl, and as --ca-directory to wget."
+msgstr ""
+"Usa o directório CA especificado em vez do maço CA predefinido para curl/"
+"wget, passado como --capath ao curl, e como --ca-directory ao wget."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:398
+msgid "B<dak ls> was formerly called B<madison>."
+msgstr "B<dak ls> foi antes chamado B<madison>."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:400
+msgid ""
+"The protocol used by rmadison is fairly simple, the CGI accepts query the "
+"parameters a, b, c, g, G, r, s, S, t, and package. The parameter text is "
+"passed to enable plain-text output."
+msgstr ""
+"O protocolo usado pelo rmadison é bastante simples, o CGI aceita questionar "
+"os parâmetros a, b, c, g, G, r, s, S, t, e package. O parâmetro text é "
+"passado para proporcionar os resultados em texto-simples."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:406
+msgid "B<dak>(1), B<madison-lite>(1)"
+msgstr "B<dak>(1), B<madison-lite>(1)"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:410
+msgid ""
+"rmadison and https://qa.debian.org/madison.php were written by Christoph "
+"Berg <myon@debian.org>. dak was written by James Troup <james@nocrew.org>, "
+"Anthony Towns <ajt@debian.org>, and others."
+msgstr ""
+"rmadison e https://qa.debian.org/madison.php foram escritos por Christoph "
+"Berg <myon@debian.org>. dak foi escrito por James Troup <james@nocrew.org>, "
+"Anthony Towns <ajt@debian.org>, e outros."
+
+#. type: textblock
+#: ../scripts/sadt.pod:19
+msgid "sadt - simple DEP-8 test runner"
+msgstr "sadt - executor de testes DEP-8 simples"
+
+#. type: textblock
+#: ../scripts/sadt.pod:23
+msgid "B<sadt> [I<options>] [I<test-name>...]"
+msgstr "B<sadt> [I<options>] [I<test-name>...]"
+
+#. type: textblock
+#: ../scripts/sadt.pod:27
+msgid ""
+"B<sadt> is a simple implementation of DEP-8 (“automatic as-installed package "
+"testing”) test runner."
+msgstr ""
+"B<sadt> é uma implementação simples do executor de testes DEP-8 "
+"(“automaticamente testar pacotes como-instalados”)."
+
+#. type: textblock
+#: ../scripts/sadt.pod:30
+msgid ""
+"It is your responsibility to satisfy tests' dependencies. B<sadt> won't "
+"attempt to install any missing packages. If a test's dependencies cannot be "
+"satisfied by packages that are currently installed, the test will be skipped."
+msgstr ""
+"É da sua responsabilidade satisfazer as dependências dos testes. O B<sadt> "
+"não irá tentar instalar quaisquer pacotes em falta. Se a dependência de um "
+"teste não puder ser satisfeita pelos pacotes actualmente instalados, o teste "
+"será saltado."
+
+#. type: textblock
+#: ../scripts/sadt.pod:34
+msgid ""
+"B<sadt> won't build the package even if a test declares the B<build-needed> "
+"restriction. Instead, such a test will be skipped. However, you can build "
+"the package manually, and then tell B<sadt> to assume that the package is "
+"already built using the B<-b>/B<--built-source-tree>."
+msgstr ""
+"O B<sadt> não irá compilar o pacote mesmo que um teste declare a restrição "
+"B<build-needed>. Em vez disso, tal teste será saltado. No entanto, você pode "
+"compilar o pacote manualmente, e dizer ao B<sadt> para assumir que o pacote "
+"já está compilado usando B<-b>/B<--built-source-tree>."
+
+#. type: textblock
+#: ../scripts/sadt.pod:39
+msgid ""
+"B<sadt> doesn't implement any virtualisation arrangements, therefore it "
+"skips tests that declare the B<breaks-testbed> restriction."
+msgstr ""
+"O B<sadt> não implementa nenhuns arranjos de virtualização, por isso ele "
+"salta testes que declaram a restrição B<breaks-testbed>."
+
+#. type: textblock
+#: ../scripts/sadt.pod:48
+msgid "Make the output more verbose."
+msgstr "Torna os resultados mais detalhados."
+
+#. type: =item
+#: ../scripts/sadt.pod:50
+msgid "B<-b>, B<--built-source-tree>"
+msgstr "B<-b>, B<--built-source-tree>"
+
+#. type: textblock
+#: ../scripts/sadt.pod:52
+msgid ""
+"Assume that the source tree is already built. This is equivalent to B<--"
+"ignore-restriction=build-needed>."
+msgstr ""
+"Assume que a árvore fonte já está compilada. Isto é o equivalente a B<--"
+"ignore-restriction=build-needed>."
+
+#. type: =item
+#: ../scripts/sadt.pod:55
+msgid "B<--run-autodep8>, B<--no-run-autodep8>"
+msgstr "B<--run-autodep8>, B<--no-run-autodep8>"
+
+#. type: textblock
+#: ../scripts/sadt.pod:57
+msgid ""
+"Control whether to run autodep8(1) to determine the tests to run. By "
+"default, autodep8 will be run."
+msgstr ""
+"Controla se se deve correr autodep8(1) para determinar os testes a correr. "
+"Por predefinição, o autodep8 irá correr."
+
+#. type: =item
+#: ../scripts/sadt.pod:60
+msgid "B<--ignore-restriction>=I<restriction>"
+msgstr "B<--ignore-restriction>=I<restriction>"
+
+#. type: textblock
+#: ../scripts/sadt.pod:62
+msgid "Don't skip tests that declare the I<restriction>."
+msgstr "Não salta testes que declaram a I<restriction>."
+
+#. type: =head1
+#: ../scripts/sadt.pod:70
+msgid "CONFORMING TO"
+msgstr "EM CONFORMIDADE PARA"
+
+#. type: textblock
+#: ../scripts/sadt.pod:72
+msgid "README.package-tests shipped by autopkgtest 2.7.2"
+msgstr "README.package-tests lançado por autopkgtest 2.7.2"
+
+#. type: textblock
+#: ../scripts/sadt.pod:76
+msgid "B<adt-run>(1)"
+msgstr "B<adt-run>(1)"
+
+#. type: textblock
+#: ../scripts/salsa.pl:5
+msgid "salsa - tool to manipulate salsa repositories and group members"
+msgstr ""
+"salsa - ferramenta para manipular repositórios salsa e membros de grupos"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:9
+#, fuzzy, no-wrap
+#| msgid ""
+#| " # salsa <command> <args>\n"
+#| " salsa whoami\n"
+#| " salsa search_project devscripts\n"
+#| " salsa search_project qa/qa\n"
+#| " salsa search_group js-team\n"
+#| " salsa search_group perl-team/modules\n"
+#| " salsa search_user yadd\n"
+#| " salsa push_repo . --group js-team --kgb --irc devscripts --tagpending\n"
+#| " salsa update_repo node-mongodb --group js-team --disable-kgb --desc \\\n"
+#| " --desc-pattern \"Package %p\"\n"
+#| " salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+#| " salsa update_safe --all --desc --desc-pattern \"Debian package %p\" \\\n"
+#| " --group js-team\n"
+#| " salsa checkout node-mongodb --group js-team\n"
+#| " salsa checkout js-team/node-mongodb\n"
+#| " salsa add_user developer foobar --group-id 2665\n"
+#| " salsa update_user maintainer foobar --group js-team\n"
+#| " salsa del_user foobar --group js-team\n"
+#| " salsa last_ci_status js-team/nodejs\n"
+#| "\n"
+msgid ""
+" # salsa <command> <args>\n"
+" salsa whoami\n"
+" salsa search_project devscripts\n"
+" salsa search_project qa/qa\n"
+" salsa search_group js-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_user yadd\n"
+" salsa push_repo . --group js-team --kgb --irc devscripts --tagpending\n"
+" salsa update_repo node-mongodb --group js-team --disable-kgb --desc \\\n"
+" --desc-pattern \"Package %p\"\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+" salsa update_safe --all --desc --desc-pattern \"Debian package %p\" \\\n"
+" --group js-team\n"
+" salsa checkout node-mongodb --group js-team\n"
+" salsa checkout js-team/node-mongodb\n"
+" salsa add_user developer foobar --group-id 2665\n"
+" salsa update_user maintainer foobar --group js-team\n"
+" salsa del_user foobar --group js-team\n"
+" salsa last_ci_status js-team/nodejs\n"
+" salsa pipelines js-team/nodejs\n"
+"\n"
+msgstr ""
+" # salsa <command> <args>\n"
+" salsa whoami\n"
+" salsa search_project devscripts\n"
+" salsa search_project qa/qa\n"
+" salsa search_group js-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_user yadd\n"
+" salsa push_repo . --group js-team --kgb --irc devscripts --tagpending\n"
+" salsa update_repo node-mongodb --group js-team --disable-kgb --desc \\\n"
+" --desc-pattern \"Package %p\"\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+" salsa update_safe --all --desc --desc-pattern \"Debian package %p\" \\\n"
+" --group js-team\n"
+" salsa checkout node-mongodb --group js-team\n"
+" salsa checkout js-team/node-mongodb\n"
+" salsa add_user developer foobar --group-id 2665\n"
+" salsa update_user maintainer foobar --group js-team\n"
+" salsa del_user foobar --group js-team\n"
+" salsa last_ci_status js-team/nodejs\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:32
+#, fuzzy
+#| msgid ""
+#| "B<salsa> is a designed to create and configure repositories on L<https://"
+#| "salsa.debian.org> and manage users of groups."
+msgid ""
+"B<salsa> is designed to create and configure repositories on L<https://salsa."
+"debian.org> and manage users of groups."
+msgstr ""
+"B<salsa> é designado para criar e configurar repositórios em L<https://salsa."
+"debian.org> e gerir utilizadores e grupos."
+
+#. type: textblock
+#: ../scripts/salsa.pl:35
+msgid ""
+"A Salsa token is required, except for search* commands, and must be set in "
+"command line I<(see below)>, or in your configuration file I<(~/."
+"devscripts)>:"
+msgstr ""
+"É requerido um testemunho Salsa, excepto para comandos de de procura, e tem "
+"de ser definido na linha de comandos I<(veja em baixo)>, ou no seu ficheiro "
+"de configuração I<(~/.devscripts)>:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:38
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=abcdefghi\n"
+"\n"
+msgstr ""
+" SALSA_TOKEN=abcdefghi\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:40 ../scripts/salsa.pl:44 ../scripts/salsa.pl:509
+#: ../scripts/salsa.pl:538
+msgid "or"
+msgstr "ou"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:42
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=`cat ~/.token`\n"
+"\n"
+msgstr ""
+" SALSA_TOKEN=`cat ~/.token`\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:46
+#, no-wrap
+msgid ""
+" SALSA_TOKEN_FILE=~/.dpt.conf\n"
+"\n"
+msgstr ""
+" SALSA_TOKEN_FILE=~/.dpt.conf\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:48
+msgid ""
+"If you choose to link another file using SALSA_TOKEN_FILE, it must contain a "
+"line with one of (no differences):"
+msgstr ""
+"Se você escolher fazer um link para outro ficheiro usando SALSA_TOKEN_FILE, "
+"terá de conter uma linha com um de (sem diferenças):"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:51
+#, no-wrap
+msgid ""
+" <anything>SALSA_PRIVATE_TOKEN=xxxx\n"
+" <anything>SALSA_TOKEN=xxxx\n"
+"\n"
+msgstr ""
+" <anything>SALSA_PRIVATE_TOKEN=xxxx\n"
+" <anything>SALSA_TOKEN=xxxx\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:54
+msgid ""
+"This allows for example to use dpt(1) configuration file (~/.dpt.conf) which "
+"contains:"
+msgstr ""
+"Isto permite por exemplo usar o ficheiro de configuração do dpt(1) (~/.dpt."
+"conf) o qual contém:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:57
+#, no-wrap
+msgid ""
+" DPT_SALSA_PRIVATE_TOKEN=abcdefghi\n"
+"\n"
+msgstr ""
+" DPT_SALSA_PRIVATE_TOKEN=abcdefghi\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/salsa.pl:61
+msgid "Managing users and groups"
+msgstr "Gerir utilizadores e grupos"
+
+#. type: =item
+#: ../scripts/salsa.pl:65
+msgid "B<join>"
+msgstr "B<join>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:67
+msgid "Request access to a group."
+msgstr "Requerer acesso a um grupo."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:69
+#, no-wrap
+msgid ""
+" salsa join js-team\n"
+" salsa join --group js-team\n"
+" salsa join --group-id 1234\n"
+"\n"
+msgstr ""
+" salsa join js-team\n"
+" salsa join --group js-team\n"
+" salsa join --group-id 1234\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:73
+msgid "B<add_user>"
+msgstr "B<add_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:75
+msgid "Add a user to a group."
+msgstr "Adicionar um utilizador a um grupo."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:77
+#, no-wrap
+msgid ""
+" salsa --group js-group add_user guest foouser\n"
+" salsa --group-id 1234 add_user guest foouser\n"
+" salsa --group-id 1234 add_user maintainer 1245\n"
+"\n"
+msgstr ""
+" salsa --group js-group add_user guest foouser\n"
+" salsa --group-id 1234 add_user guest foouser\n"
+" salsa --group-id 1234 add_user maintainer 1245\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:81 ../scripts/salsa.pl:125
+msgid ""
+"First argument is the GitLab's access levels: guest, reporter, developer, "
+"maintainer, owner."
+msgstr ""
+"O primeiro argumento é os níveis de acesso a GitLab: guest, reporter, "
+"developer, maintainer, owner."
+
+#. type: =item
+#: ../scripts/salsa.pl:84
+msgid "B<del_user>"
+msgstr "B<del_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:86
+msgid "Remove a user from a group"
+msgstr "Remove um utilizador de um grupo."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:88
+#, no-wrap
+msgid ""
+" salsa --group js-team del_user foouser\n"
+" salsa --group-id=1234 del_user foouser\n"
+"\n"
+msgstr ""
+" salsa --group js-team del_user foouser\n"
+" salsa --group-id=1234 del_user foouser\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:91
+msgid "B<list_groups>"
+msgstr "B<list_groups>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:93
+msgid ""
+"List sub groups of current one if group is set, groups of current user else."
+msgstr ""
+"Lista sub-grupos do actual se o grupo estiver definido, caso contrário lista "
+"grupos do utilizador actual."
+
+#. type: =item
+#: ../scripts/salsa.pl:96
+msgid "B<group>"
+msgstr "B<group>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:98
+msgid "Show group members."
+msgstr "Mostra membros do grupo."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:100
+#, no-wrap
+msgid ""
+" salsa --group js-team group\n"
+" salsa --group-id 1234 group\n"
+"\n"
+msgstr ""
+" salsa --group js-team group\n"
+" salsa --group-id 1234 group\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:103
+msgid "B<search_group>"
+msgstr "B<search_group>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:105
+msgid ""
+"Search for a group using given string. Shows group id and other information."
+msgstr ""
+"Procura um grupo usando a string dada. Mostra o id do grupo e outra "
+"informação."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:108
+#, no-wrap
+msgid ""
+" salsa search_group perl-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_group 2666\n"
+"\n"
+msgstr ""
+" salsa search_group perl-team\n"
+" salsa search_group perl-team/modules\n"
+" salsa search_group 2666\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:112
+msgid "B<search_user>"
+msgstr "B<search_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:114
+msgid ""
+"Search for a user using given string. Shows user id and other information."
+msgstr ""
+"Procura um utilizador usando a string dada. Mostra o id do utilizador e "
+"outra informação."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:116
+#, no-wrap
+msgid ""
+" salsa search_user yadd\n"
+"\n"
+msgstr ""
+" salsa search_user yadd\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:118
+msgid "B<update_user>"
+msgstr "B<update_user>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:120
+msgid "Update user role in a group."
+msgstr "Actualiza o papel de utilizador num grupo."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:122
+#, no-wrap
+msgid ""
+" salsa --group-id 1234 update_user guest foouser\n"
+" salsa --group js-team update_user maintainer 1245\n"
+"\n"
+msgstr ""
+" salsa --group-id 1234 update_user guest foouser\n"
+" salsa --group js-team update_user maintainer 1245\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:128
+msgid "B<whoami>"
+msgstr "B<whoami>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:130
+msgid "Gives information on the token owner"
+msgstr "Dá informação sobre o dono do token"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:132
+#, no-wrap
+msgid ""
+" salsa whoami\n"
+"\n"
+msgstr ""
+" salsa whoami\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/salsa.pl:136
+msgid "Managing repositories"
+msgstr "Gerir repositórios"
+
+#. type: textblock
+#: ../scripts/salsa.pl:138
+msgid ""
+"One of C<--group>, C<--group-id>, C<--user> or C<--user-id> is required to "
+"manage repositories. If both are set, salsa warns and only C<--user>/C<--"
+"user-id> is used. If none is given, salsa uses current user id I<(token "
+"owner)>."
+msgstr ""
+"É requerido um de C<--group>, C<--group-id>, C<--user> ou C<--user-id> para "
+"gerir repositórios. Se ambos estiverem definidos, o salsa avisa e apenas é "
+"usado C<--user>/C<--user-id>. Se nenhum for dado, o salsa usa o id do "
+"utilizador actual I<(token owner)>."
+
+#. type: =item
+#: ../scripts/salsa.pl:145
+msgid "B<check_repo>"
+msgstr "B<check_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:147
+msgid ""
+"Verify that repo(s) are well configured. It works exactly like "
+"B<update_repo> except that it does not modify anything but just lists "
+"projects not well configured with found errors."
+msgstr ""
+"Verifica que os repositórios estão bem configurados. Funciona exactamente "
+"como B<update_repo> excepto que não modifica nada mas apenas lista projetos "
+"não bem configurados com erros encontrados."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:151
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts check_repo test\n"
+" salsa --group js-team check_repo --all\n"
+" salsa --group js-team --rename-head check_repo test1 test2 test3\n"
+"\n"
+msgstr ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts check_repo test\n"
+" salsa --group js-team check_repo --all\n"
+" salsa --group js-team --rename-head check_repo test1 test2 test3\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:155
+msgid "B<checkout> or B<co>"
+msgstr "B<checkout> or B<co>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:157
+msgid ""
+"Clone repo in current dir. If directory already exists, update local repo."
+msgstr ""
+"Clona o repositório no directório actual. Se o directório já existir, "
+"actualiza o repositório local."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:160
+#, no-wrap
+msgid ""
+" salsa --user yadd co devscripts\n"
+" salsa --group js-team co node-mongodb\n"
+" salsa co js-team/node-mongodb\n"
+"\n"
+msgstr ""
+" salsa --user yadd co devscripts\n"
+" salsa --group js-team co node-mongodb\n"
+" salsa co js-team/node-mongodb\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:164
+msgid ""
+"You can clone more than one repository or all repositories of a group or a "
+"user:"
+msgstr ""
+"Você pode clonar mais do que um repositório ou todos os repositórios de um "
+"grupo ou de um utilizador:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:167
+#, fuzzy, no-wrap
+#| msgid ""
+#| " salsa --user yadd co devscripts autodep8\n"
+#| " salsa co yadd/devscripts js-team/npm\n"
+#| " salsa --group js-team co --all # All js-team repos\n"
+#| " salsa co --all # All your repos\n"
+#| "\n"
+msgid ""
+" salsa --user yadd co devscripts autodep8\n"
+" salsa co yadd/devscripts js-team/npm\n"
+" salsa --group js-team co --all # All js-team active repos\n"
+" salsa co --all-archived # All your repos including archived\n"
+"\n"
+msgstr ""
+" salsa --user yadd co devscripts autodep8\n"
+" salsa co yadd/devscripts js-team/npm\n"
+" salsa --group js-team co --all # All js-team repos\n"
+" salsa co --all # All your repos\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:172
+msgid "B<create_repo>"
+msgstr "B<create_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:174
+msgid ""
+"Create public empty project. If C<--group>/C<--group-id> is set, project is "
+"created in group directory, else in user directory."
+msgstr ""
+"Cria um projeto vazio público. Se C<--group>/C<--group-id> for definido, o "
+"projeto é criado em directório de grupo, noutro caso em directório de "
+"utilizador."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:177
+#, no-wrap
+msgid ""
+" salsa --user yadd create_repo test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts create_repo test\n"
+"\n"
+msgstr ""
+" salsa --user yadd create_repo test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts create_repo test\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:180
+msgid "B<del_repo>"
+msgstr "B<del_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:182
+msgid "Delete a repository."
+msgstr "Apaga um repositório."
+
+#. type: =item
+#: ../scripts/salsa.pl:184
+msgid "B<fork>"
+msgstr "B<fork>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:186
+msgid ""
+"Forks a project in group/user repository and set \"upstream\" to original "
+"project. Example:"
+msgstr ""
+"Bifurca um projeto em repositório de grupo/utilizador e define \"upstream\" "
+"ao projeto original. Exemplo:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:189
+#, no-wrap
+msgid ""
+" $ salsa fork js-team/node-mongodb --verbose\n"
+" ...\n"
+" salsa.pl info: node-mongodb ready in node-mongodb/\n"
+" $ cd node-mongodb\n"
+" $ git remote --verbose show\n"
+" origin git@salsa.debian.org:me/node-mongodb (fetch)\n"
+" origin git@salsa.debian.org:me/node-mongodb (push)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (fetch)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (push)\n"
+"\n"
+msgstr ""
+" $ salsa fork js-team/node-mongodb --verbose\n"
+" ...\n"
+" salsa.pl info: node-mongodb ready in node-mongodb/\n"
+" $ cd node-mongodb\n"
+" $ git remote --verbose show\n"
+" origin git@salsa.debian.org:me/node-mongodb (fetch)\n"
+" origin git@salsa.debian.org:me/node-mongodb (push)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (fetch)\n"
+" upstream git@salsa.debian.org:js-team/node-mongodb (push)\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:199
+msgid "For a group:"
+msgstr "Para um grupo:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:201
+#, no-wrap
+msgid ""
+" salsa fork --group js-team user/node-foo\n"
+"\n"
+msgstr ""
+" salsa fork --group js-team user/node-foo\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:203
+msgid "B<forks>"
+msgstr "B<forks>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:205
+msgid "List forks of project(s)."
+msgstr "Lista forks de projetos(s)."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:207
+#, no-wrap
+msgid ""
+" salsa forks qa/qa debian/devscripts\n"
+"\n"
+msgstr ""
+" salsa forks qa/qa debian/devscripts\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:209 ../scripts/salsa.pl:320
+msgid ""
+"Project can be set using full path or using B<--group>/B<--group-id> or B<--"
+"user>/B<--user-id>, else it is searched in current user namespace."
+msgstr ""
+"Projeto pode ser definido usando o caminho completo ou usando B<--group>/B<--"
+"group-id> ou B<--user>/B<--user-id>, o restante é procurado no espaço do "
+"utilizador actual."
+
+#. type: =item
+#: ../scripts/salsa.pl:212
+msgid "B<push>"
+msgstr "B<push>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:214
+msgid ""
+"Push relevant packaging refs to origin Git remote. To be run from packaging "
+"working directory."
+msgstr ""
+"Empurra referências de empacotamento relevantes para o Git remoto original. "
+"Para ser corrido a partir do directório de trabalho de empacotamento."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:217
+#, no-wrap
+msgid ""
+" salsa push\n"
+"\n"
+msgstr ""
+" salsa push\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:219
+msgid ""
+"It pushes the following refs to the configured remote for the debian-branch "
+"or, falling back, to the \"origin\" remote:"
+msgstr ""
+"Empurra as seguinte referências para o remoto configurado para o ramo debian "
+"ou, regressando, para o remoto \"origin\":"
+
+#. type: =item
+#: ../scripts/salsa.pl:224
+msgid "\"master\" branch (or whatever is set to debian-branch in gbp.conf)"
+msgstr ""
+"ramo \"master\" (ou o que esteja definido para debian-branch em gbp.conf)"
+
+#. type: =item
+#: ../scripts/salsa.pl:226
+msgid "\"upstream\" branch (or whatever is set to upstream-branch in gbp.conf)"
+msgstr ""
+"ramo \"upstream\" (ou o que esteja definido para upstream-branch em gbp.conf)"
+
+#. type: =item
+#: ../scripts/salsa.pl:228
+msgid "\"pristine-tar\" branch"
+msgstr "ramo \"pristine-tar\""
+
+#. type: =item
+#: ../scripts/salsa.pl:230
+msgid "tags named \"debian/*\" (or whatever is set to debian-tag in gbp.conf)"
+msgstr ""
+"etiquetas chamadas \"debian/*\" (o que esteja definido para debian-tag em "
+"gbp.conf)"
+
+#. type: =item
+#: ../scripts/salsa.pl:232
+msgid ""
+"tags named \"upstream/*\" (or whatever is set to upstream-tag in gbp.conf)"
+msgstr ""
+"etiquetas chamadas \"upstream/*\" (ou o que esteja definido para upstream-"
+"tag em gbp.conf)"
+
+#. type: =item
+#: ../scripts/salsa.pl:234
+msgid "all tags, if the package's source format is \"3.0 (native)\""
+msgstr ""
+"todas as etiquetas, se o formato de fonte do pacote for \"3.0 (nativo)\""
+
+#. type: =item
+#: ../scripts/salsa.pl:238
+msgid "B<ls> or B<list_repos>"
+msgstr "B<ls> ou B<list_repos>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:240
+msgid ""
+"Shows projects owned by user or group. If second argument exists, search "
+"only matching projects"
+msgstr ""
+"Mostra projetos da posse do utilizado ou grupo. Se existir segundo "
+"argumento, procura apenas por projetos correspondentes."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:243
+#, no-wrap
+msgid ""
+" salsa --group js-team list_repos\n"
+" salsa --user yadd list_repos foo*\n"
+"\n"
+msgstr ""
+" salsa --group js-team list_repos\n"
+" salsa --user yadd list_repos foo*\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:246
+msgid "B<last_ci_status> or B<ci>"
+msgstr "B<last_ci_status> ou B<ci>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:248
+msgid ""
+"Displays last continuous integration result. Use B<--verbose> to see URL of "
+"pipeline when result isn't B<success>. Unless B<--no-fail> is set, B<salsa "
+"last_ci_status> will stop on first \"failed\" status."
+msgstr ""
+"Mostra os últimos resultados de integração contínuos. Use B<--verbose> para "
+"ver o URL do pipeline quando o resultado não é B<success>. A menos que B<--"
+"no-fail> seja definido, B<salsa last_ci_status> irá parar ao primeiro estado "
+"\"falhado\"."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:252
+#, no-wrap
+msgid ""
+" salsa --group js-team last_ci_status --all --no-fail\n"
+" salsa --user yadd last_ci_status foo\n"
+" salsa last_ci_status js-team/nodejs\n"
+"\n"
+msgstr ""
+" salsa --group js-team last_ci_status --all --no-fail\n"
+" salsa --user yadd last_ci_status foo\n"
+" salsa last_ci_status js-team/nodejs\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:256
+msgid ""
+"This commands returns the number of \"failed\" status found. \"success\" "
+"entries are displayed using STDOUT while other are displayed I<(with "
+"details)> using STDERR. Then you can easily see only failures using:"
+msgstr ""
+"Este comando retorna o número de estados \"falhou\" encontrados. As entradas "
+"\"sucesso\" são mostradas usando STDOUT enquanto outras são mostradas I<(com "
+"detalhes)> usando STDERR. Você pode facilmente ver apenas falhas usando:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:260
+#, no-wrap
+msgid ""
+" salsa --group js-team last_ci_status --all --no-fail >/dev/null\n"
+"\n"
+msgstr ""
+" salsa --group js-team last_ci_status --all --no-fail >/dev/null\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:262
+msgid "B<pipeline>, B<schedule>"
+msgstr "B<pipeline>, B<schedule>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:264
+msgid "Control pipeline schedule"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:266
+msgid "B<pipelines>, B<schedules>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:268
+msgid "Lists current pipeline schedule items."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:270
+msgid "You can use B<--no-fail> and B<--all> options here."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:272
+msgid "B<merge_request>, B<mr>"
+msgstr "B<merge_request>, B<mr>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:274
+msgid "Creates a merge request."
+msgstr "Cria um pedido de fusão."
+
+#. type: textblock
+#: ../scripts/salsa.pl:276
+msgid ""
+"Suppose you created a fork using B<salsa fork>, modify some things in a new "
+"branch using one commit and want to propose it to original project I<(branch "
+"\"master\")>. You just have to launch this in source directory:"
+msgstr ""
+"Suponha que você criou uma bifurcação usando B<salsa fork>, modificou "
+"algumas coisas num novo ramo usando um envio e quer o propor isso para o "
+"projeto original I<(branch \"master\")>. Você apenas tem que lançar isto no "
+"directório fonte:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:280
+#, no-wrap
+msgid ""
+" salsa mr\n"
+"\n"
+msgstr ""
+" salsa mr\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:282
+msgid "Other example:"
+msgstr "Outro exemplo:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:284
+#, no-wrap
+msgid ""
+" salsa mr --mr-dst-project debian/foo --mr-dst-branch debian/master\n"
+"\n"
+msgstr ""
+" salsa mr --mr-dst-project debian/foo --mr-dst-branch debian/master\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:286
+msgid "or simply"
+msgstr "ou simplesmente"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:288
+#, no-wrap
+msgid ""
+" salsa mr debian/foo debian/master\n"
+"\n"
+msgstr ""
+" salsa mr debian/foo debian/master\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:290
+msgid ""
+"Note that unless destination project has been set using command line, "
+"B<salsa merge_request> will search it in the following order:"
+msgstr ""
+"Note que a menos que o destino do projecto tenha sido definido usando a "
+"linha de comandos, o B<salsa merge_request> irá procurar pela seguinte ordem:"
+
+#. type: =item
+#: ../scripts/salsa.pl:295
+msgid "using GitLab API: salsa will detect from where this project was forked"
+msgstr ""
+"usando GitLab API: salsa irá detectar de onde este projeto foi bifurcado"
+
+#. type: =item
+#: ../scripts/salsa.pl:297
+msgid "using \"upstream\" origin"
+msgstr "usando o original do autor \"upstream\""
+
+#. type: =item
+#: ../scripts/salsa.pl:299
+msgid "else salsa will use source project as destination project"
+msgstr "noutro caso o salsa irá usar o projeto fonte como projeto de destino"
+
+#. type: textblock
+#: ../scripts/salsa.pl:303
+msgid ""
+"To force salsa to use source project as destination project, you can use "
+"\"same\":"
+msgstr ""
+"Para forçar o salsa a usar o projeto fonte como projeto de destino, você "
+"pode usar \"same\":"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:306
+#, no-wrap
+msgid ""
+" salsa mr --mr-dst-project same\n"
+" # or\n"
+" salsa mr same\n"
+"\n"
+msgstr ""
+" salsa mr --mr-dst-project same\n"
+" # or\n"
+" salsa mr same\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:310
+msgid ""
+"New merge request will be created using last commit title and description."
+msgstr ""
+"O novo pedido de fusão será criado usando o título e descrição do último "
+"envio."
+
+#. type: textblock
+#: ../scripts/salsa.pl:312
+msgid "See B<--mr-*> options for more."
+msgstr "Veja as opções B<--mr-*> para mais."
+
+#. type: =item
+#: ../scripts/salsa.pl:314
+msgid "B<merge_requests>, B<mrs>"
+msgstr "B<merge_requests>, B<mrs>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:316
+msgid "List opened merge requests for project(s)"
+msgstr "Lista pedidos de fusão abertos para projeto(s)"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:318
+#, no-wrap
+msgid ""
+" salsa mrs qa/qa debian/devscripts\n"
+"\n"
+msgstr ""
+" salsa mrs qa/qa debian/devscripts\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:323
+msgid "B<protect_branch>"
+msgstr "B<protect_branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:325
+msgid "Protect/unprotect a branch."
+msgstr "Protege/desprotege um ramo."
+
+#. type: =item
+#: ../scripts/salsa.pl:329
+msgid "Set protection"
+msgstr "Define proteção"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:331
+#, no-wrap
+msgid ""
+" # project branch merge push\n"
+" salsa --group js-team protect_branch node-mongodb master m d\n"
+"\n"
+msgstr ""
+" # project branch merge push\n"
+" salsa --group js-team protect_branch node-mongodb master m d\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:334
+msgid "\"merge\" and \"push\" can be one of:"
+msgstr "\"merge\" e \"push\" podem ser um de:"
+
+#. type: =item
+#: ../scripts/salsa.pl:338
+msgid "B<o>, B<owner>: owner only"
+msgstr "B<o>, B<owner>: apenas dono"
+
+#. type: =item
+#: ../scripts/salsa.pl:340
+msgid "B<m>, B<maintainer>: B<o> + maintainers allowed"
+msgstr "B<m>, B<maintainer>: B<o> + maintainers permitidos"
+
+#. type: =item
+#: ../scripts/salsa.pl:342
+msgid "B<d>, B<developer>: B<m> + developers allowed"
+msgstr "B<d>, B<developer>: B<m> + desenvolvedores permitidos"
+
+#. type: =item
+#: ../scripts/salsa.pl:344
+msgid "B<r>, B<reporter>: B<d> + reporters allowed"
+msgstr "B<r>, B<reporter>: B<d> + repórteres permitidos"
+
+#. type: =item
+#: ../scripts/salsa.pl:346
+msgid "B<g>, B<guest>: B<r> + guest allowed"
+msgstr "B<g>, B<guest>: B<r> + convidado permitido"
+
+#. type: =item
+#: ../scripts/salsa.pl:350
+msgid "Unprotect"
+msgstr "Desprotege"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:352
+#, no-wrap
+msgid ""
+" salsa --group js-team protect_branch node-mongodb master no\n"
+"\n"
+msgstr ""
+" salsa --group js-team protect_branch node-mongodb master no\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:356
+msgid "B<protected_branches>"
+msgstr "B<protected_branches>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:358
+msgid "List protected branches"
+msgstr "Lista ramos protegidos"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:360
+#, no-wrap
+msgid ""
+" salsa --group js-team protected_branches node-mongodb\n"
+"\n"
+msgstr ""
+" salsa --group js-team protected_branches node-mongodb\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:362
+msgid "B<push_repo>"
+msgstr "B<push_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:364
+msgid ""
+"Create a new project from a local Debian source directory configured with "
+"git."
+msgstr ""
+"Cria um novo projeto a partir de um directório fonte Debian local "
+"configurado com o git."
+
+#. type: textblock
+#: ../scripts/salsa.pl:367
+msgid "B<push_repo> executes the following steps:"
+msgstr "B<push_repo> executa os seguintes passos:"
+
+#. type: =item
+#: ../scripts/salsa.pl:371
+msgid "gets project name using debian/changelog file;"
+msgstr "obtém o nome do projecto usando o ficheiro debian/changelog;"
+
+#. type: =item
+#: ../scripts/salsa.pl:373
+msgid "launches B<git remote add upstream ...>;"
+msgstr "lança B<git remote add upstream ...>;"
+
+#. type: =item
+#: ../scripts/salsa.pl:375
+msgid "launches B<create_repo>;"
+msgstr "lança B<create_repo>;"
+
+#. type: =item
+#: ../scripts/salsa.pl:377
+msgid "pushes local repo."
+msgstr "força repositório local."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:383
+#, no-wrap
+msgid ""
+" salsa --user yadd push_repo ./test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts push_repo .\n"
+"\n"
+msgstr ""
+" salsa --user yadd push_repo ./test\n"
+" salsa --group js-team --kgb --irc-channel=devscripts push_repo .\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:386
+msgid "B<rename_branch>"
+msgstr "B<rename_branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:388
+#, fuzzy
+#| msgid ""
+#| "Rename branch given in B<--source-branch> with name given in B<--dest-"
+#| "branch>. You can use B<--no-fail> and B<--all> options here."
+msgid ""
+"Rename branch given in B<--source-branch> with name given in B<--dest-"
+"branch>. You can use B<--no-fail>, B<--all> and B<--all-archived> options "
+"here."
+msgstr ""
+"Renomeia o ramo dado em B<--source-branch> com o nome dado em B<--dest-"
+"branch>. Você pode usar as opções B<--no-fail> e B<--all> aqui."
+
+#. type: =item
+#: ../scripts/salsa.pl:391
+msgid "B<search>, B<search_project>, B<search_repo>"
+msgstr "B<search>, B<search_project>, B<search_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:393
+msgid ""
+"Search for a project using given string. Shows name, owner id and other "
+"information."
+msgstr ""
+"Procura um projeto usando a string dada. Mostra nome, id de dono e outra "
+"informação."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:396
+#, no-wrap
+msgid ""
+" salsa search devscripts\n"
+" salsa search debian/devscripts\n"
+" salsa search 18475\n"
+"\n"
+msgstr ""
+" salsa search devscripts\n"
+" salsa search debian/devscripts\n"
+" salsa search 18475\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:400
+msgid "B<update_repo>"
+msgstr "B<update_repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:402
+#, fuzzy
+#| msgid ""
+#| "Configure repo(s) using parameters given to command line. A repo name "
+#| "has to be given unless B<--all> is set. Prefer to use B<update_safe>."
+msgid ""
+"Configure repo(s) using parameters given to command line. A repo name has "
+"to be given unless B<--all> or B<--all-archived> is set. Prefer to use "
+"B<update_safe>."
+msgstr ""
+"Configura repositório(s) usando parâmetros dados na linha de comandos. Um "
+"nome de repositório tem de ser dado a menos que esteja definido B<--all>. "
+"Preferência para usar B<update_safe>."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:406
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_repo test\n"
+" salsa --group js-team update_repo --all\n"
+" salsa --group js-team --rename-head update_repo test1 test2 test3\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+msgstr ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_repo test\n"
+" salsa --group js-team update_repo --all\n"
+" salsa --group js-team --rename-head update_repo test1 test2 test3\n"
+" salsa update_repo js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:411
+msgid ""
+"By default when using B<--all>, salsa will fail on first error. If you want "
+"to continue, set B<--no-fail>. In this case, salsa will display a warning "
+"for each project that has fail but continue with next project. Then to see "
+"full errors, set B<--verbose>."
+msgstr ""
+"Por predefinição quando se usa B<--all>, o salsa irá falhar no primeiro "
+"erro. Se deseja que continue, defina B<--no-fail>. Neste caso, o salsa irá "
+"mostrar um aviso para cada projeto em que falhou mas continua com o próximo "
+"projeto. Depois para ver os erros completos, defina B<--verbose>."
+
+#. type: =item
+#: ../scripts/salsa.pl:416
+msgid "B<update_safe>"
+msgstr "B<update_safe>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:418
+msgid ""
+"Launch B<check_repo> and ask before launching B<update_repo> (unless B<--"
+"yes>)."
+msgstr ""
+"Lança B<check_repo> e pergunta antes de lançar B<update_repo> (a menos que "
+"B<--yes>)."
+
+#. type: verbatim
+#: ../scripts/salsa.pl:420
+#, no-wrap
+msgid ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_safe test\n"
+" salsa --group js-team update_safe --all\n"
+" salsa --group js-team --rename-head update_safe test1 test2 test3\n"
+" salsa update_safe js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+msgstr ""
+" salsa --user yadd --tagpending --kgb --irc=devscripts update_safe test\n"
+" salsa --group js-team update_safe --all\n"
+" salsa --group js-team --rename-head update_safe test1 test2 test3\n"
+" salsa update_safe js-team/node-mongodb --kgb --irc debian-js\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/salsa.pl:427
+msgid "Other"
+msgstr "Outro"
+
+#. type: =item
+#: ../scripts/salsa.pl:431
+msgid "B<purge_cache>"
+msgstr "B<purge_cache>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:433
+msgid "Empty local cache."
+msgstr "Limpa a cache local."
+
+#. type: =head2
+#: ../scripts/salsa.pl:439
+msgid "General options"
+msgstr "Opções gerais"
+
+#. type: =item
+#: ../scripts/salsa.pl:443
+msgid "B<-C>, B<--chdir>"
+msgstr "B<-C>, B<--chdir>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:445
+msgid "Change directory before launching command"
+msgstr "Muda de directório antes de lançar o comando"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:447
+#, no-wrap
+msgid ""
+" salsa -C ~/debian co debian/libapache2-mod-fcgid\n"
+"\n"
+msgstr ""
+" salsa -C ~/debian co debian/libapache2-mod-fcgid\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:449
+msgid "B<--cache-file>"
+msgstr "B<--cache-file>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:451
+msgid ""
+"File to store cached values. Default to B<~/.cache/salsa.json>. An empty "
+"value disables cache."
+msgstr ""
+"Ficheiro para guardar valores em cache. Predefinido para B<~/.cache/salsa."
+"json>. Um valor vazio desactiva a cache."
+
+#. type: textblock
+#: ../scripts/salsa.pl:454
+msgid "C<.devscripts> value: B<SALSA_CACHE_FILE>"
+msgstr "C<.devscripts> valor: B<SALSA_CACHE_FILE>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:458
+msgid "Disable cache usage. Same as B<--cache-file ''>"
+msgstr "Desactiva a utilização de cache. O mesmo que B<--cache-file ''>"
+
+#. type: =item
+#: ../scripts/salsa.pl:460 ../scripts/uscan.pl:1538
+msgid "B<--conffile>, B<--conf-file>"
+msgstr "B<--conffile>, B<--conf-file>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:462 ../scripts/uscan.pl:1540
+msgid ""
+"Add or replace default configuration files (C</etc/devscripts.conf> and C<~/."
+"devscripts>). This can only be used as the first option given on the command-"
+"line."
+msgstr ""
+"Adiciona ou substitui ficheiros de configuração predefinidos (C</etc/"
+"devscripts.conf> e C<~/.devscripts>). Isto só pode ser usado como a primeira "
+"opção dada na linha de comandos."
+
+#. type: =item
+#: ../scripts/salsa.pl:468 ../scripts/uscan.pl:1546
+msgid "replace:"
+msgstr "substitui:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:470
+#, no-wrap
+msgid ""
+" salsa --conf-file test.conf <command>...\n"
+" salsa --conf-file test.conf --conf-file test2.conf <command>...\n"
+"\n"
+msgstr ""
+" salsa --conf-file test.conf <command>...\n"
+" salsa --conf-file test.conf --conf-file test2.conf <command>...\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:473 ../scripts/uscan.pl:1550
+msgid "add:"
+msgstr "adiciona:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:475
+#, no-wrap
+msgid ""
+" salsa --conf-file +test.conf <command>...\n"
+" salsa --conf-file +test.conf --conf-file +test2.conf <command>...\n"
+"\n"
+msgstr ""
+" salsa --conf-file +test.conf <command>...\n"
+" salsa --conf-file +test.conf --conf-file +test2.conf <command>...\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:478 ../scripts/uscan.pl:1554
+msgid ""
+"If one B<--conf-file> has no C<+>, default configuration files are ignored."
+msgstr ""
+"Se um B<--conf-file> não tiver nenhum C<+>, os ficheiros de configuração "
+"predefinidos são ignorados."
+
+#. type: textblock
+#: ../scripts/salsa.pl:484 ../scripts/uscan.pl:1560
+msgid ""
+"Don't read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+"Não lê nenhuns ficheiros de configuração. Isto só pode ser usado como "
+"primeira opção dada na linha de comandos."
+
+#. type: textblock
+#: ../scripts/salsa.pl:489
+msgid "Enable debugging output"
+msgstr "Activa resultados de depuração"
+
+#. type: =item
+#: ../scripts/salsa.pl:491
+msgid "B<--group>"
+msgstr "B<--group>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:493
+msgid "Team to use. Use C<salsa search_group name> to find it."
+msgstr "Equipa a usar. Use C<salsa search_group name> para o descobrir."
+
+#. type: textblock
+#: ../scripts/salsa.pl:495
+msgid "If you want to use a subgroup, you have to set its full path:"
+msgstr ""
+"Se você desejar usar um sub-grupo, você tem de definir os seu caminho "
+"completo:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:497
+#, no-wrap
+msgid ""
+" salsa --group perl-team/modules/packages check_repo lemonldap-ng\n"
+"\n"
+msgstr ""
+" salsa --group perl-team/modules/packages check_repo lemonldap-ng\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:499
+msgid "C<.devscripts> value: B<SALSA_GROUP>"
+msgstr "C<.devscripts> valor: B<SALSA_GROUP>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:501
+msgid ""
+"Be careful when you use B<SALSA_GROUP> in your C<.devscripts> file. Every "
+"B<salsa> command will be executed in group space, for example if you want to "
+"propose a little change in a project using B<salsa fork> + B<salsa mr>, this "
+"\"fork\" will be done in group space unless you set a B<--user>/B<--user-"
+"id>. Prefer to use an alias in your C<.bashrc> file. Example:"
+msgstr ""
+"Tenha cuidado ao usar B<SALSA_GROUP> no seu ficheiro C<.devscripts>. Cada "
+"comando B<salsa> será executado no espaço do grupo, por exemplo se você "
+"desejar propor uma pequena alteração num projeto usando B<salsa fork> + "
+"B<salsa mr>, este \"fork\" será feito no espaço do grupo a menos que você "
+"defina um B<--user>/B<--user-id>. Prefira usar um alias no seu ficheiro C<."
+"bashrc>. Exemplo:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:507
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --group js-team\"\n"
+"\n"
+msgstr ""
+" alias jsteam_admin=\"salsa --group js-team\"\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:511 ../scripts/salsa.pl:540
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --conf-file ~/.js.conf\n"
+"\n"
+msgstr ""
+" alias jsteam_admin=\"salsa --conf-file ~/.js.conf\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:513
+msgid "or to use both .devscripts and .js.conf:"
+msgstr "ou para usar ambos .devscripts e .js.conf:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:515
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --conf-file +~/.js.conf\n"
+"\n"
+msgstr ""
+" alias jsteam_admin=\"salsa --conf-file +~/.js.conf\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:517
+msgid "then you can fix B<SALSA_GROUP> in C<~/.js.conf>"
+msgstr "então você pode corrigir B<SALSA_GROUP> em C<~/.js.conf>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:519
+msgid ""
+"To enable bash completion for your alias, add this in your .bashrc file:"
+msgstr ""
+"Para activar completação bash para o seu nome alternativo, adicione isto ao "
+"seu ficheiro .bashrc:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:521
+#, no-wrap
+msgid ""
+" _completion_loader salsa\n"
+" complete -F _salsa_completion jsteam_admin\n"
+"\n"
+msgstr ""
+" _completion_loader salsa\n"
+" complete -F _salsa_completion jsteam_admin\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:524
+msgid "B<--group-id>"
+msgstr "B<--group-id>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:526
+msgid "Group id to use. Use C<salsa search_group name> to find it."
+msgstr "Id de grupo a usar. Use C<salsa search_group name> para o descobrir."
+
+#. type: textblock
+#: ../scripts/salsa.pl:528
+msgid "C<.devscripts> value: B<SALSA_GROUP_ID>"
+msgstr "C<.devscripts> valor: B<SALSA_GROUP_ID>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:530
+msgid ""
+"Be careful when you use B<SALSA_GROUP_ID> in your C<.devscripts> file. Every "
+"B<salsa> command will be executed in group space, for example if you want to "
+"propose a little change in a project using B<salsa fork> + B<salsa mr>, this "
+"\"fork\" will be done in group space unless you set a B<--user>/B<--user-"
+"id>. Prefer to use an alias in your C<.bashrc> file. Example:"
+msgstr ""
+"Tenha cuidado ao usar B<SALSA_GROUP_ID> no seu ficheiro C<.devscripts>. Cada "
+"comando B<salsa> será executado no espaço do grupo, por exemplo se você "
+"desejar propor uma pequena alteração num projeto usando B<salsa fork> + "
+"B<salsa mr>, este \"fork\" será feito no espaço do grupo a menos que você "
+"defina um B<--user>/B<--user-id>. Prefira usar um alias no seu ficheiro C<."
+"bashrc>. Exemplo:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:536
+#, no-wrap
+msgid ""
+" alias jsteam_admin=\"salsa --group-id 2666\"\n"
+"\n"
+msgstr ""
+" alias jsteam_admin=\"salsa --group-id 2666\"\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:542
+msgid "then you can fix B<SALSA_GROUP_ID> in C<~/.js.conf>"
+msgstr "depois você pode corrigir B<SALSA_GROUP_ID> em C<~/.js.conf>"
+
+#. type: =item
+#: ../scripts/salsa.pl:544
+msgid "B<--help>: displays this manpage"
+msgstr "B<--help>: mostra este manual"
+
+#. type: =item
+#: ../scripts/salsa.pl:546
+msgid "B<-i>, B<--info>"
+msgstr "B<-i>, B<--info>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:548
+msgid "Prompt before sensible changes."
+msgstr "Avisa antes de alterações sensíveis."
+
+#. type: textblock
+#: ../scripts/salsa.pl:550
+msgid "C<.devscripts> value: B<SALSA_INFO> (yes/no)"
+msgstr "C<.devscripts> valor: B<SALSA_INFO> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:552
+msgid "B<--path>"
+msgstr "B<--path>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:554
+msgid "Repo path. Default to group or user path."
+msgstr ""
+"Caminho de repositório. Predefinição para caminho de grupo ou utilizador."
+
+#. type: textblock
+#: ../scripts/salsa.pl:556
+msgid "C<.devscripts> value: B<SALSA_REPO_PATH>"
+msgstr "C<.devscripts> valor: B<SALSA_REPO_PATH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:558
+msgid "B<--token>"
+msgstr "B<--token>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:560
+msgid "Token value (see above)."
+msgstr "Valor de testemunho (veja em cima)."
+
+#. type: =item
+#: ../scripts/salsa.pl:562
+msgid "B<--token-file>"
+msgstr "B<--token-file>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:564
+msgid "File to find token (see above)."
+msgstr "Ficheiro para encontrar testemunho /veja em cima)."
+
+#. type: textblock
+#: ../scripts/salsa.pl:568
+msgid ""
+"Username to use. If neither B<--group>, B<--group-id>, B<--user> or B<--user-"
+"id> is set, salsa uses current user id (corresponding to salsa private "
+"token)."
+msgstr ""
+"Nome de utilizador a usar. Se nenhum de B<--group>, B<--group-id>, B<--user> "
+"ou B<--user-id> estiver definido, o salsa usa o id de utilizador actual "
+"(correspondente ao testemunho privado do salsa)."
+
+#. type: =item
+#: ../scripts/salsa.pl:571
+msgid "B<--user-id>"
+msgstr "B<--user-id>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:573
+msgid ""
+"User id to use. Use C<salsa search_user name> to find one. If neither B<--"
+"group>, B<--group-id>, B<--user> or B<--user-id> is set, salsa uses current "
+"user id (corresponding to salsa private token)."
+msgstr ""
+"Id de utilizador a usar. Use C<salsa search_user name> para encontrar um. Se "
+"nenhum de B<--group>, B<--group-id>, B<--user> ou B<--user-id> estiver "
+"definido, o salsa usa o id de utilizador actual (correspondente ao "
+"testemunho privado do salsa)."
+
+#. type: textblock
+#: ../scripts/salsa.pl:577
+msgid "C<.devscripts> value: B<SALSA_USER_ID>"
+msgstr "C<.devscripts> valor: B<SALSA_USER_ID>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:581
+msgid "Enable verbose output."
+msgstr "Activa resultados detalhados."
+
+#. type: =item
+#: ../scripts/salsa.pl:583
+msgid "B<--yes>"
+msgstr "B<--yes>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:585
+msgid "Never ask for consent."
+msgstr "Nunca pede por consentimento."
+
+#. type: textblock
+#: ../scripts/salsa.pl:587
+msgid "C<.devscripts> value: B<SALSA_YES> (yes/no)"
+msgstr "C<.devscripts> valor: B<SALSA_YES> (yes/no)"
+
+#. type: =head2
+#: ../scripts/salsa.pl:591
+msgid "List/search repo options"
+msgstr "Lista/procura opções do repositório."
+
+#. type: =item
+#: ../scripts/salsa.pl:595
+msgid "B<--archived>, B<--no-archived>"
+msgstr "B<--archived>, B<--no-archived>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:597
+msgid ""
+"Instead of looking to active projects, list or search in archived projects. "
+"Note that you can't have both archived and unarchived projects in the same "
+"request. Default: no I<(ie --no-archived)>."
+msgstr ""
+"Em vez de procurar nos projetos activos, lista ou procura nos projetos "
+"arquivados. Note que não pode ter ambos projetos arquivados e não-arquivados "
+"no mesmo pedido. Predefinição: não I<(ie --no-archived)>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:601
+msgid "C<.devscripts> value: B<SALSA_ARCHIVED> (yes/no)"
+msgstr "C<.devscripts> valor: B<SALSA_ARCHIVED> (yes/no)"
+
+#. type: =head2
+#: ../scripts/salsa.pl:605
+msgid "Update/create repo options"
+msgstr "Actualiza/cria opções de repositório"
+
+#. type: =item
+#: ../scripts/salsa.pl:609
+msgid "B<--all>, B<--all-archived>"
+msgstr "B<--all>, B<--all-archived>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:611
+msgid ""
+"When set, all projects of group/user are affected by command. B<--all> will "
+"filter all active projects, whereas B<--all-archived> will include active "
+"and archived projects."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:617
+#, fuzzy
+#| msgid "B<--skip>: ignore project with B<--all>. Example:"
+msgid "B<--skip>: ignore project with B<--all> or B<--all-achived>. Example:"
+msgstr "B<--skip>: ignora projeto com B<--all>. Exemplo:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:619
+#, no-wrap
+msgid ""
+" salsa update_repo --tagpending --all --skip qa --skip devscripts\n"
+"\n"
+msgstr ""
+" salsa update_repo --tagpending --all --skip qa --skip devscripts\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:621
+msgid ""
+"C<.devscripts> value: B<SALSA_SKIP>. To set multiples values, use spaces. "
+"Example"
+msgstr ""
+"C<.devscripts> valor: B<SALSA_SKIP>. Para definir vários valores, use "
+"espaços. Exemplo:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:624
+#, no-wrap
+msgid ""
+" SALSA_SKIP=qa devscripts\n"
+"\n"
+msgstr ""
+" SALSA_SKIP=qa devscripts\n"
+"\n"
+
+#. type: =item
+#: ../scripts/salsa.pl:626
+msgid "B<--skip-file>: ignore projects in this file (1 project per line)"
+msgstr "B<--skip-file>: ignora projetos neste ficheiro (1 projeto por linha)"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:628
+#, no-wrap
+msgid ""
+" salsa update_repo --tagpending --all --skip-file ~/.skip\n"
+"\n"
+msgstr ""
+" salsa update_repo --tagpending --all --skip-file ~/.skip\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:630
+msgid "C<.devscripts> value: B<SALSA_SKIP_FILE>"
+msgstr "C<.devscripts> valor: B<SALSA_SKIP_FILE>"
+
+#. type: =item
+#: ../scripts/salsa.pl:634
+msgid "B<--build-timeout>"
+msgstr "B<--build-timeout>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:636
+msgid "The maximum amount of time, in seconds, that a job can run."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:638
+msgid "Default: 3600 (60 minutes)"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/salsa.pl:640
+#, no-wrap
+msgid ""
+" salsa update_safe myrepo --build-timeout 3600\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:642
+#, fuzzy
+#| msgid "C<.devscripts> value: B<SALSA_KGB_OPTIONS>"
+msgid "C<.devscripts> value: B<SALSA_BUILD_TIMEOUT>"
+msgstr "C<.devscripts> valor: B<SALSA_KGB_OPTIONS>"
+
+#. type: =item
+#: ../scripts/salsa.pl:644
+msgid "B<--avatar-path>"
+msgstr "B<--avatar-path>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:646
+#, fuzzy
+#| msgid "If recipient value contains \"%p\", it is replaced by project name."
+msgid ""
+"Path to an image for the project's avatar. If path value contains \"%p\", "
+"it is replaced by project name."
+msgstr ""
+"Se o valor do receptor conter \"%p\", é substituído pelo nome do projeto."
+
+#. type: textblock
+#: ../scripts/salsa.pl:649
+#, fuzzy
+#| msgid "C<.devscripts> value: B<SALSA_REPO_PATH>"
+msgid "C<.devscripts> value: B<SALSA_AVATAR_PATH>"
+msgstr "C<.devscripts> valor: B<SALSA_REPO_PATH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:651
+msgid "B<--ci-config-path>"
+msgstr "B<--ci-config-path>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:653
+msgid ""
+"Configure configuration file path of GitLab CI. Default: empty. Example:"
+msgstr ""
+"Configura o caminho do ficheiro de configuração do GitLab CI. Predefinição: "
+"vazio. Exemplo:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:655
+#, no-wrap
+msgid ""
+" salsa update_safe --ci-config-path recipes/debian.yml@salsa-ci-team/pipeline debian/devscripts\n"
+"\n"
+msgstr ""
+" salsa update_safe --ci-config-path recipes/debian.yml@salsa-ci-team/pipeline debian/devscripts\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:657
+msgid "C<.devscripts> value: B<SALSA_CI_CONFIG_PATH>"
+msgstr "C<.devscripts> valor: B<SALSA_CI_CONFIG_PATH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:659
+msgid "B<--desc>, B<--no-desc>"
+msgstr "B<--desc>, B<--no-desc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:661
+msgid "Configure repo description using pattern given in B<desc-pattern>"
+msgstr ""
+"Configura a descrição do repositório usando o padrão dado em B<desc-pattern>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:663
+msgid "C<.devscripts> value: B<SALSA_DESC> (yes/no)"
+msgstr "C<.devscripts> valor: B<SALSA_DESC> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:665
+msgid "B<--desc-pattern>"
+msgstr "B<--desc-pattern>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:667
+msgid ""
+"Repo description pattern. Default to \"Debian package %p\". \"%p\" is "
+"replaced by repo name, while \"%P\" is replaced by repo name given in "
+"command (may contains full path)."
+msgstr ""
+"Padrão de descrição do repositório. Predefinido para \"Debian package %p\". "
+"\"%p\" é substituído pelo nome do repositório, enquanto \"%P\" é substituído "
+"nome de repositório dado na linha de comandos (pode conter o caminho "
+"completo)."
+
+#. type: textblock
+#: ../scripts/salsa.pl:671
+msgid "C<.devscripts> value: B<SALSA_DESC_PATTERN>"
+msgstr "C<.devscripts> valor: B<SALSA_DESC_PATTERN>"
+
+#. type: =item
+#: ../scripts/salsa.pl:673
+msgid "B<--email>, B<--no-email>, B<--disable-email>"
+msgstr "B<--email>, B<--no-email>, B<--disable-email>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:675
+msgid "Enable, ignore or disable email-on-push."
+msgstr "Activa, ignora ou desactiva o envio de email."
+
+#. type: textblock
+#: ../scripts/salsa.pl:677
+msgid "C<.devscripts> value: B<SALSA_EMAIL> (yes/ignore/no, default: ignore)"
+msgstr ""
+"C<.devscripts> valor: B<SALSA_EMAIL> (yes/ignore/no, predefinido: ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:679
+msgid "B<--email-recipient>"
+msgstr "B<--email-recipient>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:681
+msgid "Email-on-push recipient. Can be multi valued:"
+msgstr "Receptor do email enviado. Pode ter vários valores:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:683
+#, no-wrap
+msgid ""
+" $ salsa update_safe myrepo \\\n"
+" --email-recipient foo@foobar.org \\\n"
+" --email-recipient bar@foobar.org\n"
+"\n"
+msgstr ""
+" $ salsa update_safe myrepo \\\n"
+" --email-recipient foo@foobar.org \\\n"
+" --email-recipient bar@foobar.org\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:687
+msgid "If recipient value contains \"%p\", it is replaced by project name."
+msgstr ""
+"Se o valor do receptor conter \"%p\", é substituído pelo nome do projeto."
+
+#. type: textblock
+#: ../scripts/salsa.pl:689
+msgid ""
+"C<.devscripts> value: B<SALSA_EMAIL_RECIPIENTS> (use spaces to separate "
+"multiples recipients)"
+msgstr ""
+"C<.devscripts> valor: B<SALSA_EMAIL_RECIPIENTS> (use espaços para separar "
+"vários receptores)"
+
+#. type: =item
+#: ../scripts/salsa.pl:692
+msgid "B<--issues>"
+msgstr "B<--issues>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:694
+msgid "Set issues feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:696
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, default: "
+#| "ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/private/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:698
+msgid "B<--repo>"
+msgstr "B<--repo>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:700
+msgid "Set repository feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:702
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/ignore/no, default: ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REPO> (yes/private/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_MR> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:704
+msgid "B<--mr>"
+msgstr "B<--mr>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:706
+msgid "Set merge requests feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:708
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/ignore/no, default: ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/private/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_MR> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:710
+msgid "B<--forks>, B<--forks-mr>"
+msgstr "B<--forks>, B<--forks-mr>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:712
+msgid "Set forking a repository feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:714
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/ignore/no, default: ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_FORKS> (yes/private/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_MR> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:716
+msgid "B<--lfs>"
+msgstr "B<--lfs>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:718
+msgid "Set Large File Storage (LFS) feature."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:720
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/ignore/no, default: ignore)"
+msgid "C<.devscripts> values: B<SALSA_ENABLE_LFS> (yes/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_MR> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:722
+msgid "B<--packages>"
+msgstr "B<--packages>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:724
+#, fuzzy
+#| msgid "Source package name."
+msgid "Set packages feature."
+msgstr "Nome do pacote fonte."
+
+#. type: textblock
+#: ../scripts/salsa.pl:726
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/ignore/no, default: ignore)"
+msgid "C<.devscripts> values: B<SALSA_ENABLE_PACKAGING> (yes/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_MR> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:728
+msgid "B<--jobs>"
+msgstr "B<--jobs>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:730
+msgid "Set jobs feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:732
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/ignore/no, default: ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_JOBS> (yes/private/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_MR> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:734
+msgid "B<--container>"
+msgstr "B<--container>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:736
+msgid "Set container feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:738
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/ignore/no, default: ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_CONTAINER> (yes/private/no, default: "
+"yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_MR> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:740
+msgid "B<--analytics>"
+msgstr "B<--analytics>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:742
+msgid "Set analytics feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:744
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, default: "
+#| "ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_ANALYTICS> (yes/private/no, default: "
+"yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:746
+msgid "B<--requirements>"
+msgstr "B<--requirements>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:748
+msgid "Set requirements feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:750
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, default: "
+#| "ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REQUIREMENTS> (yes/private/no, "
+"default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:752
+msgid "B<--wiki>"
+msgstr "B<--wiki>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:754
+msgid "Set wiki feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:756
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/ignore/no, default: ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_WIKI> (yes/private/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_MR> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:758
+msgid "B<--snippets>"
+msgstr "B<--snippets>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:760
+msgid "Set snippets feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:762
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, default: "
+#| "ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_SNIPPETS> (yes/private/no, default: "
+"yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:764
+msgid "B<--pages>"
+msgstr "B<--pages>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:766
+msgid "Set pages feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:768
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, default: "
+#| "ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_PAGES> (yes/private/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:770
+msgid "B<--releases>"
+msgstr "B<--releases>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:772
+msgid "Set releases feature with permissions."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:774
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, default: "
+#| "ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_RELEASES> (yes/private/no, default: "
+"yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:776
+msgid "B<--auto-devops>"
+msgstr "B<--auto-devops>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:778
+msgid "Set auto devops feature."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:780
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, default: "
+#| "ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_AUTO_DEVOPS> (yes/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:782
+msgid "B<--request-acc>"
+msgstr "B<--request-acc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:784
+#, fuzzy
+#| msgid "Request access to a group."
+msgid "Set request access feature."
+msgstr "Requerer acesso a um grupo."
+
+#. type: textblock
+#: ../scripts/salsa.pl:786
+#, fuzzy
+#| msgid ""
+#| "C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, default: "
+#| "ignore)"
+msgid ""
+"C<.devscripts> values: B<SALSA_ENABLE_REQUEST_ACC> (yes/no, default: yes)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_ENABLE_ISSUES> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:788
+msgid "B<--enable-remove-source-branch>, B<--disable-remove-source-branch>"
+msgstr "B<--enable-remove-source-branch>, B<--disable-remove-source-branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:790
+msgid ""
+"Enable or disable deleting source branch option by default for all new merge "
+"requests."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:793
+#, fuzzy
+#| msgid "C<.devscripts> value: B<SALSA_MR_REMOVE_SOURCE_BRANCH> (yes/no)"
+msgid ""
+"C<.devscripts> values: B<SALSA_REMOVE_SOURCE_BRANCH> (yes/no, default: yes)"
+msgstr "C<.devscripts> valor: B<SALSA_MR_REMOVE_SOURCE_BRANCH> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:795
+msgid "B<--irc-channel>"
+msgstr "B<--irc-channel>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:797
+msgid ""
+"IRC channel for KGB or Irker. Can be used more than one time only with B<--"
+"irker>."
+msgstr ""
+"Canal de IRC para KGB ou Irker. Pode ser usado mais de uma vez apenas com "
+"B<--irker>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:800
+msgid ""
+"B<Important>: channel must not include the first \"#\". If salsa finds a "
+"channel starting with \"#\", it will consider that the channel starts with 2 "
+"\"#\"!"
+msgstr ""
+"B<Importante>: canal não pode incluir o primeiro \"#\". Se o salsa encontrar "
+"um canal começado com \"#\", irá considerar que o canal começa com 2 \"#\"!"
+
+#. type: textblock
+#: ../scripts/salsa.pl:803
+msgid "C<.devscript> value: B<SALSA_IRC_CHANNEL>."
+msgstr "C<.devscript> valor: B<SALSA_IRC_CHANNEL>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:805
+msgid "Multiple values must be space separated."
+msgstr "Múltiplos valores têm de ser separados por espaços."
+
+#. type: textblock
+#: ../scripts/salsa.pl:807
+msgid ""
+"Since configuration files are read using B<sh>, be careful when using \"#\": "
+"you must enclose the channel with quotes, else B<sh> will consider it as a "
+"comment and will ignore this value."
+msgstr ""
+"Como os ficheiros de configuração são lidos usando B<sh>, tenha cuidado "
+"quando usar \"#\": você tem de cercar o canal com aspas, ou o B<sh> irá "
+"considerar isso como um comentário e ignorar este valor."
+
+#. type: =item
+#: ../scripts/salsa.pl:811
+msgid "B<--irker>, B<--no-irker>, B<--disable-irker>"
+msgstr "B<--irker>, B<--no-irker>, B<--disable-irker>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:813
+msgid "Enable, ignore or disable Irker service"
+msgstr "Activa, ignora ou desactiva o serviço Irker"
+
+#. type: textblock
+#: ../scripts/salsa.pl:815
+msgid "C<.devscripts> values: B<SALSA_IRKER> (yes/ignore/no, default: ignore)"
+msgstr ""
+"C<.devscripts> valores: B<SALSA_IRKER> (yes/ignore/no, predefinido: ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:817
+msgid "B<--irker-host>"
+msgstr "B<--irker-host>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:819
+msgid "Irker host. Default: ruprecht.snow-crash.org"
+msgstr "Máquina Irker. Predefinido: ruprecht.snow-crash.org"
+
+#. type: textblock
+#: ../scripts/salsa.pl:821
+msgid "C<.devscripts> value: B<SALSA_IRKER_HOST>"
+msgstr "C<.devscripts> valor: B<SALSA_IRKER_HOST>"
+
+#. type: =item
+#: ../scripts/salsa.pl:823
+msgid "B<--irker-port>"
+msgstr "B<--irker-port>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:825
+msgid "Irker port. Default: empty (default value)"
+msgstr "Porto do Irker. Predefinição: empty (valor predefinido)"
+
+#. type: textblock
+#: ../scripts/salsa.pl:827
+msgid "C<.devscripts> value: B<SALSA_IRKER_PORT>"
+msgstr "C<.devscripts> valor: B<SALSA_IRKER_PORT>"
+
+#. type: =item
+#: ../scripts/salsa.pl:829
+msgid "B<--kgb>, B<--no-kgb>, B<--disable-kgb>"
+msgstr "B<--kgb>, B<--no-kgb>, B<--disable-kgb>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:831
+msgid "Enable, ignore or disable KGB webhook."
+msgstr "Activa, ignora ou desactiva o webhook KGB."
+
+#. type: textblock
+#: ../scripts/salsa.pl:833
+msgid "C<.devscripts> value: B<SALSA_KGB> (yes/ignore/no, default: ignore)"
+msgstr ""
+"C<.devscripts> valor: B<SALSA_KGB> (yes/ignore/no, predefinido: ignore)"
+
+#. type: =item
+#: ../scripts/salsa.pl:835
+msgid "B<--kgb-options>"
+msgstr "B<--kgb-options>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:837
+msgid ""
+"List of KGB enabled options (comma separated). Default: issues_events, "
+"merge_requests_events, note_events, pipeline_events, push_events, "
+"tag_push_events, wiki_page_events, enable_ssl_verification"
+msgstr ""
+"Lista de opções de KGB activas (separadas por vírgulas). Predefinição: "
+"issues_events, merge_requests_events, note_events, pipeline_events, "
+"push_events, tag_push_events, wiki_page_events, enable_ssl_verification"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:841
+#, no-wrap
+msgid ""
+" $ salsa update_safe debian/devscripts --kgb --irc-channel devscripts \\\n"
+" --kgb-options 'merge_requests_events,issues_events,enable_ssl_verification'\n"
+"\n"
+msgstr ""
+" $ salsa update_safe debian/devscripts --kgb --irc-channel devscripts \\\n"
+" --kgb-options 'merge_requests_events,issues_events,enable_ssl_verification'\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:844
+msgid ""
+"List of available options: confidential_comments_events, "
+"confidential_issues_events, confidential_note_events, "
+"enable_ssl_verification, issues_events, job_events, merge_requests_events, "
+"note_events, pipeline_events, tag_push_events, wiki_page_events"
+msgstr ""
+"Lista de opções disponíveis: confidential_comments_events, "
+"confidential_issues_events, confidential_note_events, "
+"enable_ssl_verification, issues_events, job_events, merge_requests_events, "
+"note_events, pipeline_events, tag_push_events, wiki_page_events"
+
+#. type: textblock
+#: ../scripts/salsa.pl:849
+msgid "C<.devscripts> value: B<SALSA_KGB_OPTIONS>"
+msgstr "C<.devscripts> valor: B<SALSA_KGB_OPTIONS>"
+
+#. type: =item
+#: ../scripts/salsa.pl:851
+msgid "B<--no-fail>"
+msgstr "B<--no-fail>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:853
+#, fuzzy
+#| msgid "Don't stop on error when using B<update_repo> with B<--all>."
+msgid ""
+"Don't stop on error when using B<update_repo> with B<--all> or B<--all-"
+"archived>."
+msgstr "Não pára em caso de erro ao usar B<update_repo> com B<--all>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:855
+msgid "C<.devscripts> value: B<SALSA_NO_FAIL> (yes/no)"
+msgstr "C<.devscripts> valor: B<SALSA_NO_FAIL> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:857
+msgid "B<--request-access>"
+msgstr "B<--request-access>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:859
+msgid "Allow users to request member access."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/salsa.pl:861
+#, fuzzy
+#| msgid "C<.devscripts> value: B<SALSA_DESC> (yes/no)"
+msgid "C<.devscripts> value: B<SALSA_REQUEST_ACCESS> (yes/no)"
+msgstr "C<.devscripts> valor: B<SALSA_DESC> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:863
+msgid "B<--rename-head>, B<--no-rename-head>"
+msgstr "B<--rename-head>, B<--no-rename-head>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:865
+msgid ""
+"Rename HEAD branch given by B<--source-branch> into B<--dest-branch> and "
+"change \"default branch\" of project. Works only with B<update_repo>."
+msgstr ""
+"Renomeia ramo HEAD dado pelo B<--source-branch> em B<--dest-branch> e muda o "
+"\"ramo predefinido\" do projeto. Apenas funciona com B<update_repo>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:868
+msgid "C<.devscripts> value: B<SALSA_RENAME_HEAD> (yes/no)"
+msgstr "C<.devscripts> valor: B<SALSA_RENAME_HEAD> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:872
+msgid "B<--source-branch>: default \"master\""
+msgstr "B<--source-branch>: predefinido \"master\""
+
+#. type: textblock
+#: ../scripts/salsa.pl:874
+msgid "C<.devscripts> value: B<SALSA_SOURCE_BRANCH>"
+msgstr "C<.devscripts> valor: B<SALSA_SOURCE_BRANCH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:876
+msgid "B<--dest-branch>: default \"debian/master\""
+msgstr "B<--dest-branch>: predefinido \"debian/master\""
+
+#. type: textblock
+#: ../scripts/salsa.pl:878
+msgid "C<.devscripts> value: B<SALSA_DEST_BRANCH>"
+msgstr "C<.devscripts> valor: B<SALSA_DEST_BRANCH>"
+
+#. type: =item
+#: ../scripts/salsa.pl:882
+msgid "B<--tagpending>, B<--no-tagpending>, B<--disable-tagpending>"
+msgstr "B<--tagpending>, B<--no-tagpending>, B<--disable-tagpending>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:884
+msgid "Enable, ignore or disable \"tagpending\" webhook."
+msgstr "Activa, ignora ou desactiva o webhook \"tagpending\"."
+
+#. type: textblock
+#: ../scripts/salsa.pl:886
+msgid ""
+"C<.devscripts> value: B<SALSA_TAGPENDING> (yes/ignore/no, default: ignore)"
+msgstr ""
+"C<.devscripts> valor: B<SALSA_TAGPENDING> (yes/ignore/no, predefinido: "
+"ignore)"
+
+#. type: =head2
+#: ../scripts/salsa.pl:890
+msgid "Pipeline schedules"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:894
+msgid "B<--schedule-desc>"
+msgstr "B<--schedule-desc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:896
+#, fuzzy
+#| msgid "Description of new MR. Default:"
+msgid "Description of the pipeline schedule."
+msgstr "Descrição do novo MR. Predefinição:"
+
+#. type: =item
+#: ../scripts/salsa.pl:898
+msgid "B<--schedule-ref>"
+msgstr "B<--schedule-ref>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:900
+msgid "Branch or tag name that is triggered."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:902
+msgid "B<--schedule-cron>"
+msgstr "B<--schedule-cron>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:904
+msgid "Cron schedule, for example: 0 1 * * *."
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:906
+msgid "B<--schedule-tz>"
+msgstr "B<--schedule-tz>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:908
+msgid "Time zone to run cron schedule. Default: UTC"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:910
+msgid "B<--schedule-enable>, B<--schedule-disable>"
+msgstr "B<--schedule-enable>, B<--schedule-disable>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:912
+msgid "Enable/disable the pipeline schedule to run. Default: disabled"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:914
+msgid "B<--schedule-run>"
+msgstr "B<--schedule-run>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:916
+msgid ""
+"Trigger B<--schedule-desc> scheduled pipeline to run immediately. Default:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/salsa.pl:918
+msgid "B<--schedule-delete>"
+msgstr "B<--schedule-delete>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:920
+msgid "Delete B<--schedule-desc> pipeline schedule"
+msgstr ""
+
+#. type: =head2
+#: ../scripts/salsa.pl:924
+msgid "Merge requests options"
+msgstr "Funde opções de pedidos"
+
+#. type: =item
+#: ../scripts/salsa.pl:928
+msgid "B<--mr-title>"
+msgstr "B<--mr-title>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:930
+msgid "Title for merge request. Default: last commit title."
+msgstr "Título para fusão de pedido. Predefinição: último título enviado."
+
+#. type: =item
+#: ../scripts/salsa.pl:932
+msgid "B<--mr-desc>"
+msgstr "B<--mr-desc>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:934
+msgid "Description of new MR. Default:"
+msgstr "Descrição do novo MR. Predefinição:"
+
+#. type: =item
+#: ../scripts/salsa.pl:938
+msgid "empty if B<--mr-title> is set"
+msgstr "vazio se B<--mr-title> estiver definido"
+
+#. type: =item
+#: ../scripts/salsa.pl:940
+msgid "last commit description if any"
+msgstr "descrição do último envio se algum"
+
+#. type: =item
+#: ../scripts/salsa.pl:944
+msgid "B<--mr-dst-branch> (or second command line argument)"
+msgstr "B<--mr-dst-branch> (ou segundo argumento de linha de comandos)"
+
+#. type: textblock
+#: ../scripts/salsa.pl:946
+msgid "Destination branch. Default to \"master\"."
+msgstr "Ramo de destino. Predefinido para \"master\"."
+
+#. type: =item
+#: ../scripts/salsa.pl:948
+msgid "B<--mr-dst-project> (or first command line argument)"
+msgstr "B<--mr-dst-project> (ou primeiro argumento de linha de comandos)"
+
+#. type: textblock
+#: ../scripts/salsa.pl:950
+msgid ""
+"Destination project. Default: project from which the current project was "
+"forked; or, if not found, \"upstream\" value found using B<git remote --"
+"verbose show>; or using source project."
+msgstr ""
+"Projeto de destino. Predefinição: o projeto a partir do qual o projeto "
+"actual foi bifurcado; ou, se não encontrado, valor \"upstream\" encontrado "
+"usando B<git remote --verbose show>; ou usando o projeto fonte."
+
+#. type: textblock
+#: ../scripts/salsa.pl:954
+msgid ""
+"If B<--mr-dst-project> is set to B<same>, salsa will use source project as "
+"destination."
+msgstr ""
+"Se B<--mr-dst-project> estiver definido para B<same>, salsa irá usar o "
+"projeto fonte como destino."
+
+#. type: =item
+#: ../scripts/salsa.pl:957
+msgid "B<--mr-src-branch>"
+msgstr "B<--mr-src-branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:959
+msgid "Source branch. Default: current branch."
+msgstr "Ramo fonte. Predefinição: ramo actual."
+
+#. type: =item
+#: ../scripts/salsa.pl:961
+msgid "B<--mr-src-project>"
+msgstr "B<--mr-src-project>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:963
+msgid ""
+"Source project. Default: current project found using B<git remote --verbose "
+"show>."
+msgstr ""
+"Projeto fonte. Predefinição: projeto actual encontrado usando B<git remote --"
+"verbose show>."
+
+#. type: =item
+#: ../scripts/salsa.pl:966
+msgid "B<--mr-allow-squash>, B<--no-mr-allow-squash>"
+msgstr "B<--mr-allow-squash>, B<--no-mr-allow-squash>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:968
+msgid "Allow upstream project to squash your commits, this is the default."
+msgstr ""
+"Permite ao projeto do autor esmagar os seus envios, isto é a predefinição."
+
+#. type: textblock
+#: ../scripts/salsa.pl:970
+msgid "C<.devscripts> value: B<SALSA_MR_ALLOW_SQUASH> (yes/no)"
+msgstr "C<.devscripts> valor: B<SALSA_MR_ALLOW_SQUASH> (yes/no)"
+
+#. type: =item
+#: ../scripts/salsa.pl:972
+msgid "B<--mr-remove-source-branch>, B<--no-mr-remove-source-branch>"
+msgstr "B<--mr-remove-source-branch>, B<--no-mr-remove-source-branch>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:974
+msgid "Remove source branch if merge request is accepted. Default: no."
+msgstr ""
+"Remove o ramo fonte se o pedido de fusão for aceite. Predefinição: não."
+
+#. type: textblock
+#: ../scripts/salsa.pl:976
+msgid "C<.devscripts> value: B<SALSA_MR_REMOVE_SOURCE_BRANCH> (yes/no)"
+msgstr "C<.devscripts> valor: B<SALSA_MR_REMOVE_SOURCE_BRANCH> (yes/no)"
+
+#. type: =head2
+#: ../scripts/salsa.pl:980
+msgid "Options to manage other Gitlab instances"
+msgstr "Opções para gerir outras instâncias de Gitlab"
+
+#. type: =item
+#: ../scripts/salsa.pl:984
+msgid "B<--api-url>"
+msgstr "B<--api-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:986
+msgid "GitLab API. Default: L<https://salsa.debian.org/api/v4>."
+msgstr "API GitLab. Predefinição: L<https://salsa.debian.org/api/v4>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:988
+msgid "C<.devscripts> value: B<SALSA_API_URL>"
+msgstr "C<.devscripts> valor: B<SALSA_API_URL>"
+
+#. type: =item
+#: ../scripts/salsa.pl:990
+msgid "B<--git-server-url>"
+msgstr "B<--git-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:992
+msgid "Default to \"git@salsa.debian.org:\""
+msgstr "Predefinido para \"git@salsa.debian.org:\""
+
+#. type: textblock
+#: ../scripts/salsa.pl:994
+msgid "C<.devscripts> value: B<SALSA_GIT_SERVER_URL>"
+msgstr "C<.devscripts> valor: B<SALSA_GIT_SERVER_URL>"
+
+#. type: =item
+#: ../scripts/salsa.pl:996
+msgid "B<--irker-server-url>"
+msgstr "B<--irker-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:998
+msgid "Default to \"ircs://irc.oftc.net:6697/\""
+msgstr "Predefinido para \"ircs://irc.oftc.net:6697/\""
+
+#. type: textblock
+#: ../scripts/salsa.pl:1000
+msgid "C<.devscripts> value: B<SALSA_IRKER_SERVER_URL>"
+msgstr "C<.devscripts> valor: B<SALSA_IRKER_SERVER_URL>"
+
+#. type: =item
+#: ../scripts/salsa.pl:1002
+msgid "B<--kgb-server-url>"
+msgstr "B<--kgb-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1004
+msgid "Default to L<http://kgb.debian.net:9418/webhook/?channel=>"
+msgstr "Predefinido para L<http://kgb.debian.net:9418/webhook/?channel=>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1006
+msgid "C<.devscripts> value: B<SALSA_KGB_SERVER_URL>"
+msgstr "C<.devscripts> valor: B<SALSA_KGB_SERVER_URL>"
+
+#. type: =item
+#: ../scripts/salsa.pl:1008
+msgid "B<--tagpending-server-url>"
+msgstr "B<--tagpending-server-url>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1010
+msgid "Default to L<https://webhook.salsa.debian.org/tagpending/>"
+msgstr "Predefinido para L<https://webhook.salsa.debian.org/tagpending/>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1012
+msgid "C<.devscripts> value: B<SALSA_TAGPENDING_SERVER_URL>"
+msgstr "C<.devscripts> valor: B<SALSA_TAGPENDING_SERVER_URL>"
+
+#. type: =head3
+#: ../scripts/salsa.pl:1016
+msgid "Configuration file example"
+msgstr "Exemplo de ficheiro de configuração"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1018
+msgid ""
+"Example to use salsa with L<https://gitlab.ow2.org> (group \"lemonldap-ng\"):"
+msgstr ""
+"Exemplo para usar salsa com L<https://gitlab.ow2.org> (grupo \"lemonldap-"
+"ng\"):"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:1020
+#, no-wrap
+msgid ""
+" SALSA_TOKEN=`cat ~/.ow2-gitlab-token`\n"
+" SALSA_API_URL=https://gitlab.ow2.org/api/v4\n"
+" SALSA_GIT_SERVER_URL=git@gitlab.ow2.org:\n"
+" SALSA_GROUP_ID=34\n"
+"\n"
+msgstr ""
+" SALSA_TOKEN=`cat ~/.ow2-gitlab-token`\n"
+" SALSA_API_URL=https://gitlab.ow2.org/api/v4\n"
+" SALSA_GIT_SERVER_URL=git@gitlab.ow2.org:\n"
+" SALSA_GROUP_ID=34\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1025
+msgid "Then to use it, add something like this in your C<.bashrc> file:"
+msgstr "Então para o usar, adicione algo como isto no seu ficheiro C<.bashrc>:"
+
+#. type: verbatim
+#: ../scripts/salsa.pl:1027
+#, no-wrap
+msgid ""
+" alias llng_admin='salsa --conffile ~/.salsa-ow2.conf'\n"
+"\n"
+msgstr ""
+" alias llng_admin='salsa --conffile ~/.salsa-ow2.conf'\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1031
+msgid "B<dpt-salsa>"
+msgstr "B<dpt-salsa>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1035
+msgid "Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+msgstr "Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1039
+msgid "Copyright (C) 2018, Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+msgstr "Copyright (C) 2018, Xavier Guimard E<lt>yadd@debian.orgE<gt>"
+
+#. type: textblock
+#: ../scripts/salsa.pl:1041
+msgid ""
+"It contains code formerly found in L<dpt-salsa> I<(pkg-perl-tools)> "
+"copyright 2018, gregor herrmann E<lt>gregoa@debian.orgE<gt>."
+msgstr ""
+"Contém código antes encontrado em L<dpt-salsa> I<(pkg-perl-tools)> copyright "
+"2018, gregor herrmann E<lt>gregoa@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/salsa.pl:1044
+msgid ""
+"This library 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."
+msgstr ""
+"Esta biblioteca é software livre: você pode redistribuí-la e/ou modifica-la "
+"sob os termos da GNU General Public License como publicada pela Free "
+"Software Foundation, seja na versão 2, ou (por opção sua) qualquer versão "
+"posterior."
+
+#. type: textblock
+#: ../scripts/salsa.pl:1049
+msgid ""
+"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."
+msgstr ""
+"Este programa é distribuído na esperança que seja útil, mas SEM NENHUMA "
+"GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou APTIDÃO PARA "
+"OBJECTIVO PARTICULAR. Veja a GNU General Public License para mais detalhes."
+
+#. type: textblock
+#: ../scripts/salsa.pl:1054
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see L<http://www.gnu.org/licenses/>."
+msgstr ""
+"Você deverá ter recebido uma cópia da GNU General Public License juntamente "
+"com este programa. Se não, veja L<http://www.gnu.org/licenses/>."
+
+#. type: TH
+#: ../doc/suspicious-source.1:15
+#, no-wrap
+msgid "SUSPICIOUS-SOURCE"
+msgstr "SUSPICIOUS-SOURCE"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:20
+msgid ""
+"suspicious-source - search for files that do not meet the GPL's definition "
+"of \"source\" for a work"
+msgstr ""
+"suspicious-source - procura ficheiros que não respeitem a definição GPL de "
+"\"fonte\" para um trabalho."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:23
+msgid "B<suspicious-source> [I<options>]"
+msgstr "B<suspicious-source> [I<options>]"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:30
+msgid ""
+"B<suspicious-source> outputs a list of files which are probably not the "
+"source form of a work. This should be run in the root of a source tree to "
+"find files which might not be, in the definition from the GNU GPL, the "
+"\"preferred form of the work for making modifications to it\"."
+msgstr ""
+"B<suspicious-source> gera uma lista de ficheiros que provavelmente não são "
+"um formato de fonte para um trabalho. Isto deve ser corrido na raiz de uma "
+"árvore fonte para encontrar ficheiros que possam não estar, na definição "
+"tirada da GNU GPL, \"forma preferida de trabalho para fazer modificações "
+"nela\"."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:33
+msgid ""
+"The files inside version control system directories (like I<.bzr/> or I<CVS/"
+">) are not considered."
+msgstr ""
+"Os ficheiros dentro dos directórios do sistema de controle de versão (como "
+"I<.bzr/> ou I<CVS/>) não são considerados."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:38 ../doc/wrap-and-sort.1:39
+msgid "Show this help message and exit."
+msgstr "Mostra esta mensagem de ajuda e termina."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:41
+msgid "Print more information."
+msgstr "Escreve mais informação."
+
+#. type: TP
+#: ../doc/suspicious-source.1:41
+#, no-wrap
+msgid "B<-d >I<directory>, B<--directory=>I<directory>"
+msgstr "B<-d >I<directory>, B<--directory=>I<directory>"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:44
+msgid ""
+"Check the files in the specified I<directory> instead of the current "
+"directory."
+msgstr ""
+"Verifica os ficheiro no I<directory> especificado em vez de no directório "
+"actual."
+
+#. type: TP
+#: ../doc/suspicious-source.1:44
+#, no-wrap
+msgid "B<-m >I<mimetype>, B<--mimetype=>I<mimetype>"
+msgstr "B<-m >I<mimetype>, B<--mimetype=>I<mimetype>"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:47
+msgid "Add I<mimetype> to list of white-listed MIME types."
+msgstr "Adiciona I<mimetype> à lista de tipos MIME de lista-branca."
+
+#. type: TP
+#: ../doc/suspicious-source.1:47
+#, no-wrap
+msgid "B<-e >I<extension>, B<--extension=>I<extension>"
+msgstr "B<-e >I<extension>, B<--extension=>I<extension>"
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:50
+msgid "Add I<extension> to list of white-listed extensions."
+msgstr "Adiciona I<extension> à lista de extensões de lista-branca."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:54
+msgid ""
+"B<suspicious-source> and this manpage have been written by Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+msgstr ""
+"B<suspicious-source> e este manual foram escritos por Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+
+#. type: Plain text
+#: ../doc/suspicious-source.1:55 ../doc/wrap-and-sort.1:102
+msgid "Both are released under the ISC license."
+msgstr "Ambos são lançados sob licença ISC."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:5
+msgid "svnpath - output svn url with support for tags and branches"
+msgstr "svnpath - escreve o url de svn com suporte para etiquetas e ramos"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:9
+msgid "B<svnpath>"
+msgstr "B<svnpath>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:11
+msgid "B<svnpath tags>"
+msgstr "B<svnpath tags>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:13
+msgid "B<svnpath branches>"
+msgstr "B<svnpath branches>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:15
+msgid "B<svnpath trunk>"
+msgstr "B<svnpath trunk>"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:19
+msgid "B<svnpath> is intended to be run in a Subversion working copy."
+msgstr ""
+"B<svnpath> é destinado a ser corrido numa cópia de trabalho de Subversion."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:21
+msgid ""
+"In its simplest usage, B<svnpath> with no parameters outputs the svn url for "
+"the repository associated with the working copy."
+msgstr ""
+"Na sua utilização mais simples, B<svnpath> sem parâmetros escreve o url de "
+"svn para o repositório associado com a cópia de trabalho."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:24
+msgid ""
+"If a parameter is given, B<svnpath> attempts to instead output the url that "
+"would be used for the tags, branches, or trunk. This will only work if it's "
+"run in the top-level directory that is subject to tagging or branching."
+msgstr ""
+"Se for dado um parâmetro, B<svnpath> tenta em vez disso escrever o url que "
+"seria usado para as etiquetas, ramos, ou trunk. Isto irá apenas funcionar "
+"se for corrido no directório de nível de topo que é sujeito para etiquetagem "
+"e ramificações."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:28
+msgid ""
+"For example, if you want to tag what's checked into Subversion as version "
+"1.0, you could use a command like this:"
+msgstr ""
+"Por exemplo, se você deseja etiquetar o que está verificado em Subversion "
+"como versão 1.0, você pode usar um comando como este:"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:31
+#, no-wrap
+msgid ""
+" svn cp $(svnpath) $(svnpath tags)/1.0\n"
+"\n"
+msgstr ""
+" svn cp $(svnpath) $(svnpath tags)/1.0\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:33
+msgid ""
+"That's much easier than using svn info to look up the repository url and "
+"manually modifying it to derive the url to use for the tag, and typing in "
+"something like this:"
+msgstr ""
+"Isso é muito mais fácil que usar informação de svn para procurar o url do "
+"repositório e o modificar manualmente para derivar o url para usar para a "
+"etiqueta, e escrever algo como isto:"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:37
+#, no-wrap
+msgid ""
+" svn cp svn+ssh://my.server.example/svn/project/trunk svn+ssh://my.server.example/svn/project/tags/1.0\n"
+"\n"
+msgstr ""
+" svn cp svn+ssh://my.server.example/svn/project/trunk svn+ssh://my.server.example/svn/project/tags/1.0\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:39
+msgid ""
+"svnpath uses a simple heuristic to convert between the trunk, tags, and "
+"branches paths. It replaces the first occurrence of B<trunk>, B<tags>, or "
+"B<branches> with the name of what you're looking for. This will work ok for "
+"most typical Subversion repository layouts."
+msgstr ""
+"svnpath usa uma heurística simples para converter entre caminho do trunk, "
+"etiquetas, e ramos. Substitui a primeira ocorrência de B<trunk>, B<tags>, ou "
+"B<branches> pelo nome do que você está a procurar. Isto irá funcionar bem "
+"coma maioria das disposições típicas de repositórios Subversion."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:44
+msgid ""
+"If you have an atypical layout and it does not work, you can add a F<~/."
+"svnpath> file. This file is perl code, which can modify the path in $url. "
+"For example, the author uses this file:"
+msgstr ""
+"Se você tem uma disposição atípica e isto não funciona, você pode adicionar "
+"um ficheiro F<~/.svnpath>. Este ficheiro é código perl, o qual pode "
+"modificar o caminho em $url. Por exemplo, o autor usa este ficheiro:"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:48
+#, no-wrap
+msgid ""
+" #!/usr/bin/perl\n"
+" # svnpath personal override file\n"
+"\n"
+msgstr ""
+" #!/usr/bin/perl\n"
+" # svnpath personal override file\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/svnpath.pl:51
+#, no-wrap
+msgid ""
+" # For d-i I sometimes work from a full d-i tree branch. Remove that from\n"
+" # the path to get regular tags or branches directories.\n"
+" $url=~s!d-i/(rc|beta)[0-9]+/!!;\n"
+" $url=~s!d-i/sarge/!!;\n"
+" 1\n"
+"\n"
+msgstr ""
+" # For d-i I sometimes work from a full d-i tree branch. Remove that from\n"
+" # the path to get regular tags or branches directories.\n"
+" $url=~s!d-i/(rc|beta)[0-9]+/!!;\n"
+" $url=~s!d-i/sarge/!!;\n"
+" 1\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:94
+msgid "GPL version 2 or later"
+msgstr "GPL versão 2 ou posterior"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:98
+msgid "Joey Hess <joey@kitenet.net>"
+msgstr "Joey Hess <joey@kitenet.net>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:82
+msgid ""
+"tagpending - tags bugs that are to be closed in the latest changelog as "
+"pending"
+msgstr ""
+"tagpending - etiqueta bugs que estão para ser fechados no mais recente "
+"registo de alterações como pendentes"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:86
+msgid "B<tagpending> [I<options>]"
+msgstr "B<tagpending> [I<options>]"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:90
+msgid ""
+"B<tagpending> parses debian/changelog to determine which bugs would be "
+"closed if the package were uploaded. Each bug is then marked as pending, "
+"using B<bts>(1) if it is not already so."
+msgstr ""
+"B<tagpending> analisa debian/changelog para determinar quais bugs seriam "
+"fechados se o pacote fosse enviado. Cada bug é então marcado como pendente, "
+"usando B<bts>(1) se isso não estiver já feito."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:100
+msgid "Check whether any bugs require tagging, but do not actually do so."
+msgstr ""
+"Verifica se alguns bugs requerem etiquetagem, mas não o faz na realidade"
+
+#. type: =item
+#: ../scripts/tagpending.pl:102
+msgid "B<-s>, B<--silent>"
+msgstr "B<-s>, B<--silent>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:104
+msgid "Do not output any messages."
+msgstr "Não gera nenhumas mensagens."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:108
+msgid "List each bug checked and tagged in turn."
+msgstr "Lista cada bug verificado e etiquetado por sua vez."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:112
+msgid "Do not query the BTS, but (re)tag all bugs closed in the changelog."
+msgstr ""
+"Não consulta o BTS, mas re(etiqueta) todos os bugs fechados no changelog."
+
+#. type: =item
+#: ../scripts/tagpending.pl:114
+msgid "B<--comments>"
+msgstr "B<--comments>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:116
+msgid ""
+"Include the changelog header line and the entries relating to the tagged "
+"bugs as comments in the generated mail. This is the default."
+msgstr ""
+"Inclui a linha de cabeçalho do changelog e as entradas relacionadas com os "
+"bugs etiquetados como comentários no mail gerado. Isto é a predefinição."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:119
+msgid ""
+"Note that when used in combination with B<--to>, the header line output will "
+"always be that of the most recent version."
+msgstr ""
+"Note que quando usado em combinação com B<--to>, o resultado da linha de "
+"cabeçalho será sempre o da versão mais recente."
+
+#. type: =item
+#: ../scripts/tagpending.pl:122
+msgid "B<--no-comments>"
+msgstr "B<--no-comments>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:124
+msgid "Do not include changelog entries in the generated mail."
+msgstr "Não inclui entradas changelog no mail gerado."
+
+#. type: =item
+#: ../scripts/tagpending.pl:126
+msgid "B<-c>, B<--confirm>"
+msgstr "B<-c>, B<--confirm>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:128
+msgid "Tag bugs as both confirmed and pending."
+msgstr "Etiqueta os bugs como ambos confirmados e pendentes."
+
+#. type: =item
+#: ../scripts/tagpending.pl:130
+msgid "B<-t>, B<--to> I<version>"
+msgstr "B<-t>, B<--to> I<version>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:132
+msgid "Parse changelogs for all versions strictly greater than I<version>."
+msgstr ""
+"Analisa changelogs para todas as versões estritamente maiores que I<version>."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:134
+msgid "Equivalent to B<dpkg-parsechangelog>'s B<-v> option."
+msgstr "Equivalente à opção B<-v> do B<dpkg-parsechangelog>."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:138
+msgid ""
+"Display the message which would be sent to the BTS and, except when B<--"
+"noact> was used, prompt for confirmation before sending it."
+msgstr ""
+"Mostra a mensagem que seria enviada para o BTS e, excepto se B<--noact> for "
+"usado, pergunta por confirmação antes de a enviar."
+
+#. type: =item
+#: ../scripts/tagpending.pl:141
+msgid "B<-w>, B<--wnpp>"
+msgstr "B<-w>, B<--wnpp>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:143
+msgid ""
+"For each bug that does not appear to belong to the current package, check "
+"whether it is filed against wnpp. If so, tag it. This allows e.g. ITAs and "
+"ITPs closed in an upload to be tagged."
+msgstr ""
+"Para cada bug que parece não pertencer ao pacote actual, verifica se foi "
+"preenchido contra wnpp. Se sim, etiqueta-o. Isto permite, por exemplo, que "
+"ITAs e ITPs fechados num envio sejam etiquetados."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:151
+msgid "B<bts>(1) and B<dpkg-parsechangelog>(1)"
+msgstr "B<bts>(1) e B<dpkg-parsechangelog>(1)"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:427
+msgid ""
+"This program is Copyright 2008 by Adam D. Barratt <adam@adam-barratt.org.uk>."
+msgstr ""
+"Este programa tem Copyright 2008 de Adam D. Barratt <adam@adam-barratt.org."
+"uk>."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:430
+msgid ""
+"The shell script tagpending, on which this program is based, is Copyright "
+"2004 by Joshua Kwan <joshk@triplehelix.org> with changes copyright 2004-7 by "
+"their respective authors."
+msgstr ""
+"O script de shell tagpending, no qual este programa é baseado, tem Copyright "
+"2004 por Joshua Kwan <joshk@triplehelix.org> com alterações copyright 2004-7 "
+"pelos seus respectivos autores."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:25
+msgid "transition-check - check a package list for involvement in transitions"
+msgstr ""
+"transition-check - verifica uma lista de pacotes por envolvimento em "
+"transições"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:29
+msgid "B<transition-check> B<--help>|B<--version>"
+msgstr "B<transition-check> B<--help>|B<--version>"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:31
+msgid ""
+"B<transition-check> [B<-f>|B<--filename=>I<FILENAME>] [I<source package "
+"list>]"
+msgstr ""
+"B<transition-check> [B<-f>|B<--filename=>I<FILENAME>] [I<source package "
+"list>]"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:35
+msgid ""
+"B<transition-check> checks whether any of the listed source packages are "
+"involved in a transition for which uploads to unstable are currently blocked."
+msgstr ""
+"B<transition-check> verifica se algum dos pacotes fonte listados está "
+"envolvido numa transição para a qual os envios para unstable estão "
+"actualmente bloqueados."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:39
+msgid ""
+"If neither a filename nor a list of packages is supplied, B<transition-"
+"check> will use the source package name from I<debian/control>."
+msgstr ""
+"Se nenhum nome de ficheiro nem lista de pacotes for fornecida, B<transition-"
+"check> irá usar o nome do pacote fonte de I<debian/control>."
+
+#. type: =item
+#: ../scripts/transition-check.pl:46
+msgid "B<-f>, B<--filename=>I<filename>"
+msgstr "B<-f>, B<--filename=>I<filename>"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:48
+msgid ""
+"Read a source package name from I<filename>, which should be a Debian "
+"package control file or I<.changes> file, and add that package to the list "
+"of packages to check."
+msgstr ""
+"Lê um nome de pacote fonte de I<filename>, o qual deve ser um ficheiro de "
+"controle de pacote Debian ou ficheiro I<.changes>, e adiciona esse pacote à "
+"lista de pacotes a verificar."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:56
+msgid ""
+"The exit status indicates whether any of the packages examined were found to "
+"be involved in a transition."
+msgstr ""
+"O estado de saída indica se foi descoberto que algum dos pacotes examinados "
+"está envolvido numa transição."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:63
+msgid ""
+"Either B<--help> or B<--version> was used, or none of the packages examined "
+"was involved in a transition."
+msgstr ""
+"Ou foi usado B<--help> ou B<--version>, ou nenhum dos pacotes examinados "
+"estava envolvido numa transição."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:68
+msgid "At least one package examined is involved in a current transition."
+msgstr "Pelo menos um pacote examinado está envolvido numa transição actual."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:74
+msgid ""
+"This code is copyright by Adam D. Barratt <I<adam@adam-barratt.org.uk>>, all "
+"rights reserved."
+msgstr ""
+"Este código tem copyright de Adam D. Barratt <I<adam@adam-barratt.org.uk>>, "
+"todos os direitos reservados."
+
+#. type: textblock
+#: ../scripts/transition-check.pl:83
+msgid "Adam D. Barratt <I<adam@adam-barratt.org.uk>>"
+msgstr "Adam D. Barratt <I<adam@adam-barratt.org.uk>>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:36
+msgid "uscan - scan/watch upstream sources for new releases of software"
+msgstr ""
+"uscan - sonda/observa fontes originais por novos lançamentos de software"
+
+#. type: textblock
+#: ../scripts/uscan.pl:40
+msgid "B<uscan> [I<options>] [I<path>]"
+msgstr "B<uscan> [I<options>] [I<path>]"
+
+#. type: textblock
+#: ../scripts/uscan.pl:44
+msgid ""
+"For basic usage, B<uscan> is executed without any arguments from the root of "
+"the Debianized source tree where you see the F<debian/> directory, or a "
+"directory containing multiple source trees."
+msgstr ""
+"Para utilização básica, B<uscan> é executado sem argumentos a partir da raiz "
+"duma árvore fonte Debianizada de onde se vê o directório F<debian/>, ou de "
+"um directório que contenha várias árvores fonte."
+
+#. type: textblock
+#: ../scripts/uscan.pl:48
+msgid ""
+"Unless --watchfile is given, B<uscan> looks recursively for valid source "
+"trees starting from the current directory (see the below section L<Directory "
+"name checking> for details)."
+msgstr ""
+"A menos que seja dado --watchfile, B<uscan> procura recursivamente por "
+"árvores fonte válidas partindo do directório actual (veja a secção em baixo "
+"L<Verificação do nome do directório> para detalhes)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:52
+msgid "For each valid source tree found, typically the following happens:"
+msgstr ""
+"Para cada árvore fonte valida encontrada, tipicamente acontece o seguinte:"
+
+#. type: =item
+#: ../scripts/uscan.pl:56
+msgid ""
+"* B<uscan> reads the first entry in F<debian/changelog> to determine the "
+"source package name I<< <spkg> >> and the last upstream version."
+msgstr ""
+"* B<uscan> lê a primeira entrada em F<debian/changelog> para determinar o "
+"nome do pacote fonte I<< <spkg> >> e a última versão do autor original."
+
+#. type: =item
+#: ../scripts/uscan.pl:59
+msgid ""
+"* B<uscan> process the watch lines F<debian/watch> from the top to the "
+"bottom in a single pass."
+msgstr ""
+"* B<uscan> processa as linhas watch de F<debian/watch> do topo ao fundo numa "
+"única passagem."
+
+#. type: =item
+#: ../scripts/uscan.pl:64
+msgid ""
+"* B<uscan> downloads a web page from the specified I<URL> in F<debian/watch>."
+msgstr ""
+"* B<uscan> descarrega uma página web a partir do I<URL> especificado em "
+"F<debian/watch>."
+
+#. type: =item
+#: ../scripts/uscan.pl:67
+msgid ""
+"* B<uscan> extracts hrefs pointing to the upstream tarball(s) from the web "
+"page using the specified I<matching-pattern> in F<debian/watch>."
+msgstr ""
+"* B<uscan> extrai hrefs que apontam para os tarball(s) do autor a partir da "
+"página web usando o I<matching-pattern> especificado em F<debian/watch>."
+
+#. type: =item
+#: ../scripts/uscan.pl:70
+msgid ""
+"* B<uscan> downloads the upstream tarball with the highest version newer "
+"than the last upstream version."
+msgstr ""
+"* B<uscan> descarrega o tarball de autor com a versão mais alta e recente "
+"que a última versão original."
+
+#. type: =item
+#: ../scripts/uscan.pl:73
+msgid ""
+"* B<uscan> saves the downloaded tarball to the parent B<../> directory: "
+"I<< ../<upkg>-<uversion>.tar.gz >>"
+msgstr ""
+"* B<uscan> guarda o tarball descarregado no directório B<../> pai: I<< ../"
+"<upkg>-<uversion>.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:76
+msgid ""
+"* B<uscan> invokes B<mk-origtargz> to create the source tarball: I<< ../"
+"<spkg>_<oversion>.orig.tar.gz >>"
+msgstr ""
+"* B<uscan> invoca B<mk-origtargz> para criar o tarball fonte: I<< ../"
+"<spkg>_<oversion>.orig.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:81
+msgid ""
+"* For a multiple upstream tarball (MUT) package, the secondary upstream "
+"tarball will instead be named I<< ../<spkg>_<oversion>.orig-<component>.tar."
+"gz >>."
+msgstr ""
+"* Para um pacote de múltiplo tarball original (MUT), o tarball secundário "
+"será por sua vez chamado I<< ../<spkg>_<oversion>.orig-<component>.tar.gz >>."
+
+#. type: =item
+#: ../scripts/uscan.pl:86
+msgid "* Repeat until all lines in F<debian/watch> are processed."
+msgstr ""
+"* Repete até que todas as linhas em F<debian/watch> estejam processadas."
+
+#. type: =item
+#: ../scripts/uscan.pl:90
+msgid ""
+"* B<uscan> invokes B<uupdate> to create the Debianized source tree: I<< ../"
+"<spkg>-<oversion>/* >>"
+msgstr ""
+"* B<uscan> invoca B<uupdate> para criar uma árvore fonte Debianizada: I<< ../"
+"<spkg>-<oversion>/* >>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:95
+msgid "Please note the following."
+msgstr "Por favor note o seguinte:"
+
+#. type: =item
+#: ../scripts/uscan.pl:99
+msgid ""
+"* For simplicity, the compression method used in examples is B<gzip> with B<."
+"gz> suffix. Other methods such as B<xz>, B<bzip2>, and B<lzma> with "
+"corresponding B<xz>, B<bz2> and B<lzma> suffixes may also be used."
+msgstr ""
+"* Para simplicidade, o método de compressão usado nos exemplos é B<gzip> com "
+"sufixo B<.gz>. Podem também ser usados outros métodos tais como B<xz>, "
+"B<bzip2>, e B<lzma> com sufixos correspondentes B<xz>, B<bz2> e B<lzma>."
+
+#. type: =item
+#: ../scripts/uscan.pl:103
+msgid ""
+"* The new B<version=4> enables handling of multiple upstream tarball (MUT) "
+"packages but this is a rare case for Debian packaging. For a single "
+"upstream tarball package, there is only one watch line and no I<< ../"
+"<spkg>_<oversion>.orig-<component>.tar.gz >> ."
+msgstr ""
+"* A nova B<versão=4> permite lidar com pacotes (MUT) de múltiplo tarball de "
+"autor, mas isto são casos raros para empacotamento Debian. Para um pacote de "
+"único tarball de autor, existe apenas uma linha watch e nenhum I<< ../"
+"<spkg>_<oversion>.orig-<component>.tar.gz >> ."
+
+#. type: =item
+#: ../scripts/uscan.pl:108
+msgid ""
+"* B<uscan> with the B<--verbose> option produces a human readable report of "
+"B<uscan>'s execution."
+msgstr ""
+"* B<uscan> com a opção B<--verbose> produz um relatório legível por humanos "
+"da execução do B<uscan>."
+
+#. type: =item
+#: ../scripts/uscan.pl:111
+msgid ""
+"* B<uscan> with the B<--debug> option produces a human readable report of "
+"B<uscan>'s execution including internal variable states."
+msgstr ""
+"* B<uscan> com a opção B<--debug> produz um relatório legível por humanos da "
+"execução do B<uscan> incluindo estados de variáveis internas."
+
+#. type: =item
+#: ../scripts/uscan.pl:114
+msgid ""
+"* B<uscan> with the B<--extra-debug> option produces a human readable report "
+"of B<uscan>'s execution including internal variable states and remote "
+"content during \"search\" step."
+msgstr ""
+"* B<uscan> com a opção B<--extra-debug> produz um relatório legível por "
+"humanos da execução do B<uscan> incluindo estados de variáveis internas e "
+"conteúdo remoto durante o passo de \"busca\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:118
+msgid ""
+"* B<uscan> with the B<--dehs> option produces an upstream package status "
+"report in XML format for other programs such as the Debian External Health "
+"System."
+msgstr ""
+"* B<uscan> com a opção B<--dehs> produz um relatório de estado do pacote do "
+"autor em formato XML para outros programas tais como o Debian External "
+"Health System."
+
+#. type: =item
+#: ../scripts/uscan.pl:122
+msgid ""
+"* The primary objective of B<uscan> is to help identify if the latest "
+"version upstream tarball is used or not; and to download the latest upstream "
+"tarball. The ordering of versions is decided by B<dpkg --compare-versions>."
+msgstr ""
+"* O objectivo principal do B<uscan> é ajudar a identificar se está a ser "
+"usada ou não a a mais recente versão de tarball do autor; e descarregar o "
+"tarball de autor mais recente. O ordenar das versões é decidido por B<dpkg --"
+"compare-versions>."
+
+#. type: =item
+#: ../scripts/uscan.pl:126
+msgid ""
+"* B<uscan> with the B<--safe> option limits the functionality of B<uscan> to "
+"its primary objective. Both the repacking of downloaded files and updating "
+"of the source tree are skipped to avoid running unsafe scripts. This also "
+"changes the default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+"* B<uscan> com a opção B<--safe> limita a funcionalidade do B<uscan> ao seu "
+"objectivo principal. Tanto o re-empacotamento dos ficheiros descarregados "
+"como a actualização da árvore fonte são saltados para evitar correr scripts "
+"não seguros. Isto também muda a predefinição para B<--no-download> e B<--"
+"skip-signature>."
+
+#. type: =head1
+#: ../scripts/uscan.pl:133
+msgid "FORMAT OF THE WATCH FILE"
+msgstr "FORMATO DO FICHEIRO WATCH"
+
+#. type: textblock
+#: ../scripts/uscan.pl:135
+msgid ""
+"The current version 4 format of F<debian/watch> can be summarized as follows:"
+msgstr ""
+"A versão actual de formato 4 do F<debian/watch> pode ser resumida como se "
+"segue:"
+
+#. type: =item
+#: ../scripts/uscan.pl:139
+msgid "* Leading spaces and tabs are dropped."
+msgstr "* Espaços iniciais e tabulações são descartados."
+
+#. type: =item
+#: ../scripts/uscan.pl:141
+msgid "* Empty lines are dropped."
+msgstr "* Linhas vazias são descartadas."
+
+#. type: =item
+#: ../scripts/uscan.pl:143
+msgid "* A line started by B<#> (hash) is a comment line and dropped."
+msgstr ""
+"* Uma linha começada por B<#> (cardinal) é uma linha de comentário e é "
+"descartada."
+
+#. type: =item
+#: ../scripts/uscan.pl:145
+msgid ""
+"* A single B<\\> (back slash) at the end of a line is dropped and the next "
+"line is concatenated after removing leading spaces and tabs. The "
+"concatenated line is parsed as a single line. (The existence or non-"
+"existence of the space before the tailing single B<\\> is significant.)"
+msgstr ""
+"* Uma única B<\\> (barra invertida) no final de uma linha é abandonada e a "
+"linha seguinte é concatenada após se remover os espaços e tabs iniciais. A "
+"linha concatenada é analisada como uma linha única. (A existência ou não-"
+"existência de espaço antes da B<\\> sozinha final é significante.)"
+
+#. type: =item
+#: ../scripts/uscan.pl:150
+msgid "* The first non-comment line is:"
+msgstr "* A primeira linha não-comentário é:"
+
+#. type: =item
+#: ../scripts/uscan.pl:154
+msgid "B<version=4>"
+msgstr "B<version=4>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:158
+msgid "This is a required line and the recommended version number."
+msgstr "Isto é uma linha requerida e o número de versão recomendado."
+
+#. type: textblock
+#: ../scripts/uscan.pl:160
+msgid ""
+"If you use \"B<version=3>\" instead here, some features may not work as "
+"documented here. See L<HISTORY AND UPGRADING>."
+msgstr ""
+"Se ao invés usar \"B<version=3>\" aqui, algumas funcionalidades podem não "
+"funcionar como documentado aqui. Veja L<HISTÓRIA E ACTUALIZAÇÃO>."
+
+#. type: =item
+#: ../scripts/uscan.pl:163
+msgid ""
+"* The following non-comment lines (watch lines) specify the rules for the "
+"selection of the candidate upstream tarball URLs and are in one of the "
+"following three formats:"
+msgstr ""
+"* As seguintes linhas não-comentário (linhas watch) especificam as regras "
+"para a selecção de URLs de tarball de autor candidato e estão em um dos "
+"seguintes três formatos:"
+
+#. type: =item
+#: ../scripts/uscan.pl:169
+msgid ""
+"* B<opts=\"> I<...> B<\"> B<http://>I<URL> I<matching-pattern> [I<version> "
+"[I<script>]]"
+msgstr ""
+"* B<opts=\"> I<...> B<\"> B<http://>I<URL> I<matching-pattern> [I<version> "
+"[I<script>]]"
+
+#. type: =item
+#: ../scripts/uscan.pl:171
+msgid "* B<http://>I<URL> I<matching-pattern> [I<version> [I<script>]]"
+msgstr "* B<http://>I<URL> I<matching-pattern> [I<version> [I<script>]]"
+
+#. type: =item
+#: ../scripts/uscan.pl:173
+msgid "* B<opts=\"> I<...> B<\">"
+msgstr "* B<opts=\"> I<...> B<\">"
+
+#. type: textblock
+#: ../scripts/uscan.pl:177
+msgid "Here,"
+msgstr "Aqui,"
+
+#. type: =item
+#: ../scripts/uscan.pl:181
+msgid ""
+"* B<opts=\"> I<...> B<\"> specifies the behavior of B<uscan>. See L<WATCH "
+"FILE OPTIONS>."
+msgstr ""
+"* B<opts=\"> I<...> B<\"> especifica o comportamento de B<uscan>. Veja "
+"L<OPÇÕES DO FICHEIRO WATCH>."
+
+#. type: =item
+#: ../scripts/uscan.pl:184
+msgid ""
+"* B<http://>I<URL> specifies the web page where upstream publishes the link "
+"to the latest source archive."
+msgstr ""
+"* B<http://>I<URL> especifica a página web onde o autor original publica o "
+"link para o arquivo fonte mais recente."
+
+#. type: =item
+#: ../scripts/uscan.pl:189
+msgid "* B<https://>I<URL> may also be used, as may"
+msgstr "* B<https://>I<URL> pode também ser usado, com pode"
+
+#. type: =item
+#: ../scripts/uscan.pl:191
+msgid "* B<ftp://>I<URL>"
+msgstr "* B<ftp://>I<URL>"
+
+#. type: =item
+#: ../scripts/uscan.pl:193
+msgid ""
+"* Some parts of I<URL> may be in the regex match pattern surrounded between "
+"B<(> and B<)> such as B</foo/bar-([\\.\\d]+)/>. (If multiple directories "
+"match, the highest version is picked.) Otherwise, the I<URL> is taken as "
+"verbatim."
+msgstr ""
+"* Algumas partes do I<URL> podem estar em padrão de correspondência de "
+"expressão regular cercados entre B<(> e B<)> tal como B</foo/bar-([\\.\\d]+)/"
+">. (Se vários directórios corresponderem, é escolhido a versão mais alta.) "
+"Caso contrário, o I<URL> é recebido à letra."
+
+#. type: =item
+#: ../scripts/uscan.pl:200
+msgid ""
+"* I<matching-pattern> specifies the full string matching pattern for hrefs "
+"in the web page. See L<WATCH FILE EXAMPLES>."
+msgstr ""
+"* I<matching-pattern> especifica o padrão de correspondência de string "
+"completa para hrefs na página web. Veja L<EXEMPLOS DE FICHEIRO WATCH>."
+
+#. type: =item
+#: ../scripts/uscan.pl:205
+msgid ""
+"* All matching parts in B<(> and B<)> are concatenated with B<.> (period) "
+"to form the upstream version."
+msgstr ""
+"* Todas as partes correspondentes em B<(> e B<)> são concatenadas com B<.> "
+"(ponto) para formar a versão do autor original."
+
+#. type: =item
+#: ../scripts/uscan.pl:208
+msgid ""
+"* If the hrefs do not contain directories, you can combine this with the "
+"previous entry. I.e., B<http://>I<URL>B</>I<matching-pattern> ."
+msgstr ""
+"* Se os hrefs não conterem directórios, você pode combinar isto com a "
+"entrada anterior. Isto é, B<http://>I<URL>B</>I<matching-pattern> ."
+
+#. type: =item
+#: ../scripts/uscan.pl:213
+msgid ""
+"* I<version> restricts the upstream tarball which may be downloaded. The "
+"newest available version is chosen in each case."
+msgstr ""
+"* I<version> restringe o tarball de origem que pode ser descarregado. Em "
+"cada caso, é escolhida a versão mais recente disponível."
+
+#. type: =item
+#: ../scripts/uscan.pl:218
+msgid ""
+"* B<debian> I<(default)> requires the downloading upstream tarball to be "
+"newer than the version obtained from F<debian/changelog>."
+msgstr ""
+"* B<debian> I<(default)> requer que o tarball de origem a descarregar seja "
+"mais recente que a versão obtida em F<debian/changelog>."
+
+#. type: =item
+#: ../scripts/uscan.pl:221
+msgid ""
+"* I<version-number> such as B<12.5> requires the upstream tarball to be "
+"newer than the I<version-number>."
+msgstr ""
+"* I<version-number> tal como B<12.5> requer que o tarball de origem seja "
+"mais recente que I<version-number>."
+
+#. type: =item
+#: ../scripts/uscan.pl:224
+msgid ""
+"* B<same> requires the downloaded version of the secondary tarballs to be "
+"exactly the same as the one for the first upstream tarball downloaded. "
+"(Useful only for MUT)"
+msgstr ""
+"* B<same> requer que a versão descarregada dos tarballs secundários seja "
+"exactamente a mesma do primeiro tarball de origem descarregado..(Útil apenas "
+"para MUT)"
+
+#. type: =item
+#: ../scripts/uscan.pl:228
+msgid ""
+"* B<previous> restricts the version of the signature file. (Used with "
+"pgpmode=previous)"
+msgstr ""
+"* B<previous> restringe a versão do ficheiro de assinatura. (Usado com "
+"pgpmode=previous)"
+
+#. type: =item
+#: ../scripts/uscan.pl:231
+msgid ""
+"* B<ignore> does not restrict the version of the secondary tarballs. (Maybe "
+"useful for MUT)"
+msgstr ""
+"* B<ignore> não restringe a versão dos tarballs secundários. (Talvez útil "
+"para MUT)"
+
+#. type: =item
+#: ../scripts/uscan.pl:234
+msgid ""
+"* B<group> requires the downloading upstream tarball to be newer than the "
+"version obtained from F<debian/changelog>. Package version is the "
+"concatenation of all \"group\" upstream version."
+msgstr ""
+"* B<group> requer que o tarball de origem a descarregar seja mais recente "
+"que a versão obtida em F<debian/changelog>. A versão do pacote é a "
+"concatenação de todas as versões originais do \"grupo\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:238
+msgid ""
+"* B<checksum> requires the downloading upstream tarball to be newer than the "
+"version obtained from F<debian/changelog>. Package version is the "
+"concatenation of the version of the main tarball, followed by a checksum of "
+"all the tarballs using the \"checksum\" version system. At least the main "
+"upstream source has to be declared as \"group\"."
+msgstr ""
+"* B<checksum> requer que o tarball de origem a descarregar seja mais recente "
+"que a versão obtida de F<debian/changelog>. A versão do pacote é a "
+"concatenação da versão do tarball principal, seguida de um sumário de "
+"verificação de todos os tarballs usando o sistema de versão \"checksum\", "
+"Pelo menos a fonte principal tem de ser declarada como \"group\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:246
+msgid ""
+"* I<script> is executed at the end of B<uscan> execution with appropriate "
+"arguments provided by B<uscan> I<(default: no action)>."
+msgstr ""
+"* I<script> é executado no final da execução do B<uscan> com argumentos "
+"apropriados fornecidos por B<uscan> I<(default: no action)>."
+
+#. type: =item
+#: ../scripts/uscan.pl:251
+msgid ""
+"* The typical Debian package is a non-native package made from one upstream "
+"tarball. Only a single line of the watch line in one of the first two "
+"formats is usually used with its I<version> set to B<debian> and I<script> "
+"set to B<uupdate>."
+msgstr ""
+"* O pacote Debian típico é um pacote não-nativo feito a partir de um tarball "
+"de autor original. Apenas uma linha única da linha watch em um dos dois "
+"primeiros formatos é geralmente usado na sua I<version> definida para "
+"B<debian> e I<script> definida para B<uupdate>."
+
+#. type: =item
+#: ../scripts/uscan.pl:256
+msgid "* A native package should not specify I<script>."
+msgstr "* Um pacote nativo não deve especificar I<script>."
+
+#. type: =item
+#: ../scripts/uscan.pl:258
+msgid ""
+"* A multiple upstream tarball (MUT) package should specify B<uupdate> as "
+"I<script> in the last watch line and should skip specifying I<script> in the "
+"rest of the watch lines."
+msgstr ""
+"* Um pacote de múltiplo tarball de origem (MUT) deve especificar B<uupdate> "
+"como I<script> na última linha watch e deve saltar especificar I<script> nas "
+"restantes linhas watch."
+
+#. type: =item
+#: ../scripts/uscan.pl:264
+msgid ""
+"* The last format of the watch line is useful to set the persistent "
+"parameters: B<user-agent>, B<compression>. If this format is used, this "
+"must be followed by the I<URL> defining watch line(s)."
+msgstr ""
+"* O último formato da linha watch é útil para definir os parâmetros "
+"persistentes: B<user-agent>, B<compression>. Se este formato for usado, "
+"este tem de ser seguido pelas linha(s) watch que definem o I<URL>."
+
+#. type: =item
+#: ../scripts/uscan.pl:268
+msgid ""
+"* [ and ] in the above format are there to mark the optional parts and "
+"should not be typed."
+msgstr ""
+"* [ e ] no formato de cima estão lá para marcar as partes opcionais e não "
+"devem ser escritos."
+
+#. type: textblock
+#: ../scripts/uscan.pl:275
+msgid ""
+"There are a few special strings which are substituted by B<uscan> to make it "
+"easy to write the watch file."
+msgstr ""
+"Existem algumas strings especiais que são substituídas por B<uscan> para "
+"facilitar a escrita do ficheiro watch."
+
+#. type: =item
+#: ../scripts/uscan.pl:280
+msgid "B<@PACKAGE@>"
+msgstr "B<@PACKAGE@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:282
+msgid ""
+"This is substituted with the source package name found in the first line of "
+"the F<debian/changelog> file."
+msgstr ""
+"Isto é substituído pelo nome do pacote fonte encontrado na primeira linha do "
+"ficheiro F<debian/changelog>."
+
+#. type: =item
+#: ../scripts/uscan.pl:285
+msgid "B<@ANY_VERSION@>"
+msgstr "B<@ANY_VERSION@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:287
+msgid "This is substituted by the legal upstream version regex (capturing)."
+msgstr ""
+"Isto é substituído expressão regular da versão do autor legal (capturando)."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:289
+#, no-wrap
+msgid ""
+" [-_]?v?(\\d[\\-+\\.:\\~\\da-zA-Z]*)\n"
+"\n"
+msgstr ""
+" [-_]?v?(\\d[\\-+\\.:\\~\\da-zA-Z]*)\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:291
+msgid "B<@ARCHIVE_EXT@>"
+msgstr "B<@ARCHIVE_EXT@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:293
+msgid ""
+"This is substituted by the typical archive file extension regex (non-"
+"capturing)."
+msgstr ""
+"Isto é substituído expressão regular da extensão de ficheiro de arquivo "
+"típico (não-capturando)."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:295
+#, no-wrap
+msgid ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))\n"
+"\n"
+msgstr ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:297
+msgid "B<@SIGNATURE_EXT@>"
+msgstr "B<@SIGNATURE_EXT@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:299
+msgid ""
+"This is substituted by the typical signature file extension regex (non-"
+"capturing)."
+msgstr ""
+"Isto é substituído expressão regular da extensão de ficheiro de assinatura "
+"típico (não-capturando)."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:301
+#, no-wrap
+msgid ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))'(?:\\.(?:asc|pgp|gpg|sig|sign))'\n"
+"\n"
+msgstr ""
+" (?i)(?:\\.(?:tar\\.xz|tar\\.bz2|tar\\.gz|tar\\.zstd?|zip|tgz|tbz|txz))'(?:\\.(?:asc|pgp|gpg|sig|sign))'\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:303
+msgid "B<@DEB_EXT@>"
+msgstr "B<@DEB_EXT@>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:305
+msgid "This is substituted by the typical Debian extension regexp (capturing)."
+msgstr ""
+"Isto é substituído expressão regular da extensão Debian típica (capturando)."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:307
+#, no-wrap
+msgid ""
+" [\\+~](debian|dfsg|ds|deb)(\\.)?(\\d+)?$\n"
+"\n"
+msgstr ""
+" [\\+~](debian|dfsg|ds|deb)(\\.)?(\\d+)?$\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:311
+msgid ""
+"Some file extensions are not included in the above intentionally to avoid "
+"false positives. You can still set such file extension patterns manually."
+msgstr ""
+"Algumas extensões de ficheiro não estão incluídas em cima intencionalmente "
+"para evitar falsos positivos. Você pode na mesma tais padrões de extensão de "
+"ficheiro manualmente."
+
+#. type: =head1
+#: ../scripts/uscan.pl:314
+msgid "WATCH FILE OPTIONS"
+msgstr "OPÇÕES DO FICHEIRO WATCH"
+
+#. type: textblock
+#: ../scripts/uscan.pl:316
+msgid ""
+"B<uscan> reads the watch options specified in B<opts=\"> I<...> B<\"> to "
+"customize its behavior. Multiple options I<option1>, I<option2>, "
+"I<option3>, ... can be set as B<opts=\">I<option1>B<,> I<option2>B<,> "
+"I<option3>B<,> I< ... >B<\"> . The double quotes are necessary if options "
+"contain any spaces."
+msgstr ""
+"B<uscan> lê as opções watch especificadas em B<opts=\"> I<...> B<\"> para "
+"personalizar o seu comportamento. Podem ser definidas várias opções "
+"I<option1>, I<option2>, I<option3>, ... como B<opts=\">I<option1>B<,> "
+"I<option2>B<,> I<option3>B<,> I< ... >B<\"> . As aspas duplas são "
+"necessárias se as opções conterem espaços."
+
+#. type: textblock
+#: ../scripts/uscan.pl:321
+msgid ""
+"Unless otherwise noted as persistent, most options are valid only within "
+"their containing watch line."
+msgstr ""
+"A menos caso contrário notadas como persistentes, a maioria das opções são "
+"válidas apenas dentro da sua linha watch que as contêm."
+
+#. type: textblock
+#: ../scripts/uscan.pl:324
+msgid "The available watch options are:"
+msgstr "As opções de watch disponíveis são:"
+
+#. type: =item
+#: ../scripts/uscan.pl:328
+msgid "B<component=>I<component>"
+msgstr "B<component=>I<component>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:330
+msgid ""
+"Set the name of the secondary source tarball as I<< <spkg>_<oversion>.orig-"
+"<component>.tar.gz >> for a MUT package."
+msgstr ""
+"Define o nome do tarball fonte secundário como I<< <spkg>_<oversion>.orig-"
+"<component>.tar.gz >> para um pacote MUT."
+
+#. type: =item
+#: ../scripts/uscan.pl:333
+msgid "B<ctype=>I<component-type>"
+msgstr "B<ctype=>I<component-type>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:335
+msgid ""
+"Set the type of component I<(only \"nodejs\" and \"perl\" are available for "
+"now)>. This will help uscan to find current version if component version is "
+"ignored."
+msgstr ""
+"Define o tipo de componente I<(apenas \"nodejs\" e \"perl\" estão "
+"disponíveis por agora)>. Isto irá ajudar o uscan a encontrar a versão "
+"correta se o componente version for ignorado."
+
+#. type: textblock
+#: ../scripts/uscan.pl:338
+msgid ""
+"When using B<ctype=nodejs>, uscan tries to find a version in C<package."
+"json>, when using B<ctype=perl>, uscan tries to find a version in C<META."
+"json>. If a version is found, it is used as current version for this "
+"component, regardless version found in Debian version string. This permits a "
+"better change detection when using I<ignore> or I<checksum> as Debian "
+"version."
+msgstr ""
+"Quando usa B<ctype=nodejs>, uscan tenta encontrar uma versão em C<package."
+"json>, quando usa B<ctype=perl>, uscan tenta encontrar uma versão em C<META."
+"json>. Se uma versão for encontrada, é usada como versão actual para este "
+"componente, apesar da versão encontrada na string de versão Debian. Isto "
+"permite uma melhor deteção de alterações quando se usa I<ignore> ou "
+"I<checksum> como versão Debian."
+
+#. type: =item
+#: ../scripts/uscan.pl:344
+msgid "B<compression=>I<method>"
+msgstr "B<compression=>I<method>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:346
+msgid ""
+"Set the compression I<method> when the tarball is repacked (persistent)."
+msgstr ""
+"Define o I<método> de compressão quando o tarball é re-empacotado "
+"(persistente)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:348
+msgid ""
+"Available I<method> values are what mk-origtargz supports, so B<xz>, B<gzip> "
+"(alias B<gz>), B<bzip2> (alias B<bz2>), B<lzma>, B<default>. The default "
+"method is currently B<xz>. When uscan is launched in a debian source "
+"repository which format is \"1.0\" or undefined, the method switches to "
+"B<gzip>."
+msgstr ""
+"Valores I<method> disponíveis são os que mk-origtargz suporta, assim B<xz>, "
+"B<gzip> (alias B<gz>), B<bzip2> (alias B<bz2>), B<lzma>, B<default>. O "
+"método predefinido é actualmente B<xz>. Quando o uscan é lançado num "
+"repositório fonte debian cujo formato é \"1.0\" ou indefinido, o método muda "
+"para B<gzip>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:354
+msgid ""
+"Please note the repacking of the upstream tarballs by B<mk-origtargz> "
+"happens only if one of the following conditions is satisfied:"
+msgstr ""
+"Por favor note que o re-empacotamento de tarballs de origem pelo B<mk-"
+"origtargz> apenas acontece se uma das seguintes condições for satisfeita:"
+
+#. type: =item
+#: ../scripts/uscan.pl:359
+msgid ""
+"* B<USCAN_REPACK> is set in the devscript configuration. See L<DEVSCRIPT "
+"CONFIGURATION VARIABLES>."
+msgstr ""
+"* B<USCAN_REPACK> é definido na configuração do devscript. Veja L<VARIÁVEIS "
+"DE CONFIGURAÇÃO DO DEVSCRIPT>."
+
+#. type: =item
+#: ../scripts/uscan.pl:362
+msgid "* B<--repack> is set on the commandline. See <COMMANDLINE OPTIONS>."
+msgstr ""
+"* B<--repack> é definido na linha de comandos. Veja <OPÇÕES DE LINHA DE "
+"COMANDOS>."
+
+#. type: =item
+#: ../scripts/uscan.pl:364
+msgid "* B<repack> is set in the watch line as B<opts=\"repack,>I<...>B<\">."
+msgstr ""
+"* B<repack> é definido na linha watch como B<opts=\"repack,>I<...>B<\">."
+
+#. type: =item
+#: ../scripts/uscan.pl:366
+msgid "* The upstream archive is of B<zip> type including B<jar>, B<xpi>, ..."
+msgstr "* O arquivo do autor é do tipo B<zip> incluindo B<jar>, B<xpi>, ..."
+
+#. type: =item
+#: ../scripts/uscan.pl:368
+msgid "* The upstream archive is of B<zstd> (Zstandard) type."
+msgstr "* O arquivo do autor é do tipo B<zstd> (Zstandard)."
+
+#. type: =item
+#: ../scripts/uscan.pl:370
+msgid ""
+"* B<Files-Excluded> or B<Files-Excluded->I<component> stanzas are set in "
+"F<debian/copyright> to make B<mk-origtargz> invoked from B<uscan> remove "
+"files from the upstream tarball and repack it. See L<COPYRIGHT FILE "
+"EXAMPLES> and mk-origtargz(1)."
+msgstr ""
+"* As estrofes B<Files-Excluded> ou B<Files-Excluded->I<component> estão "
+"definidas em F<debian/copyright> para fazer o B<mk-origtargz>, invocado do "
+"B<uscan>, remover ficheiros do tarball original e re-empacota-lo. Veja "
+"L<EXEMPLOS DE FICHEIRO DE COPYRIGHT> e mk-origtargz(1)."
+
+#. type: =item
+#: ../scripts/uscan.pl:377
+msgid "B<repack>"
+msgstr "B<repack>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:379
+msgid ""
+"Force repacking of the upstream tarball using the compression I<method>."
+msgstr ""
+"Força o re-empacotamento do tarball de origem usando o I<method> de "
+"compressão."
+
+#. type: =item
+#: ../scripts/uscan.pl:381
+msgid "B<repacksuffix=>I<suffix>"
+msgstr "B<repacksuffix=>I<suffix>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:383
+msgid ""
+"Add I<suffix> to the Debian package upstream version only when the source "
+"tarball is repackaged. This rule should be used only for a single upstream "
+"tarball package."
+msgstr ""
+"Adiciona I<suffix> à versão de autor do pacote Debian apenas quando o "
+"tarball fonte é re-empacotado. Esta regra deve ser usada apenas para um "
+"pacote tarball original único. repackaged. This rule should be used only "
+"for a single upstream tarball package."
+
+#. type: =item
+#: ../scripts/uscan.pl:387
+msgid "B<mode=>I<mode>"
+msgstr "B<mode=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:389
+msgid "Set the archive download I<mode>."
+msgstr "Define o I<mode> de descarga do arquivo."
+
+#. type: =item
+#: ../scripts/uscan.pl:393
+msgid "B<LWP>"
+msgstr "B<LWP>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:395
+msgid ""
+"This mode is the default one which downloads the specified tarball from the "
+"archive URL on the web. Automatically internal B<mode> value is updated to "
+"either B<http> or B<ftp> by URL."
+msgstr ""
+"Este modo é o predefinido o qual descarrega o tarball especificado a partir "
+"do URL do arquivo na web. Automaticamente o valor B<mode> interno é "
+"actualizado ou para B<http> ou para B<ftp> pelo URL."
+
+#. type: textblock
+#: ../scripts/uscan.pl:401
+msgid ""
+"This mode accesses the upstream git archive directly with the B<git> command "
+"and packs the source tree with the specified tag via I<matching-pattern> "
+"into I<spkg-version>B<.tar.xz>."
+msgstr ""
+"Este modo acessa directamente ao arquivo git do autor com o comando B<git> e "
+"empacota a árvore fonte com a etiqueta especificada via I<matching-pattern> "
+"em I<spkg-version>B<.tar.xz>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:405
+msgid ""
+"If the upstream publishes the released tarball via its web interface, please "
+"use it instead of using this mode. This mode is the last resort method."
+msgstr ""
+"Se o autor publicar o tarball lançado via a sua interface web, por favor use-"
+"a em vez de usar este modo. Este modo é o método de último recurso."
+
+#. type: textblock
+#: ../scripts/uscan.pl:408
+msgid ""
+"For git mode, I<matching-pattern> specifies the full string matching pattern "
+"for tags instead of hrefs. If I<matching-pattern> is set to B<refs/tags/"
+">I<tag-matching-pattern>, B<uscan> downloads source from the B<refs/tags/"
+">I<matched-tag> of the git repository. The upstream version is extracted "
+"from concatenating the matched parts in B<(> ... B<)> with B<.> . See "
+"L<WATCH FILE EXAMPLES>."
+msgstr ""
+"Para modo git, I<matching-pattern> especifica o padrão de correspondência de "
+"string completa para etiquetas em vez de hrefs. Se I<matching-pattern> for "
+"definido para B<refs/tags/>I<tag-matching-pattern>, B<uscan> descarrega a "
+"fonte a partir de B<refs/tags/>I<matched-tag> do repositório git. A versão "
+"original é extraída ao concatenar as partes correspondentes em B<(> ... B<)> "
+"com B<.> . Veja L<EXEMPLOS DE FICHEIRO WATCH>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:415
+msgid ""
+"If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads source from the "
+"B<HEAD> of the git repository and the pertinent I<version> is automatically "
+"generated with the date and hash of the B<HEAD> of the git repository."
+msgstr ""
+"Se I<matching-pattern> for definido para B<HEAD>, o B<uscan> descarrega a "
+"fonte a partir da B<HEAD> do repositório git e a I<version> pertinente é "
+"automaticamente gerada com a data e a hash da B<HEAD> do repositório git."
+
+#. type: textblock
+#: ../scripts/uscan.pl:419
+msgid ""
+"If I<matching-pattern> is set to B<refs/heads/>I<branch>, B<uscan> downloads "
+"source from the named I<branch> of the git repository."
+msgstr ""
+"Se I<matching-pattern> for definido para B<refs/heads/>I<branch>, o B<uscan> "
+"descarrega a fonte a partir do I<branch> nomeado do repositório git."
+
+#. type: textblock
+#: ../scripts/uscan.pl:422
+msgid ""
+"The local repository is temporarily created as a bare git repository "
+"directory under the destination directory where the downloaded archive is "
+"generated. This is normally erased after the B<uscan> execution. This "
+"local repository is kept if B<--debug> option is used."
+msgstr ""
+"O repositório local é criado temporariamente como um directório de "
+"repositório git vazio sob o directório de destino onde o arquivo "
+"descarregado é gerado. Isto é normalmente apagado após a execução do "
+"B<uscan> execution. Este repositório local é mantido se for usada a opção "
+"B<--debug>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:427
+msgid ""
+"If the current directory is a git repository and the searched repository is "
+"listed among the registered \"remotes\", then uscan will use it instead of "
+"cloning separately. The only local change is that uscan will run a "
+"\"fetch\" command to refresh the repository."
+msgstr ""
+"Se o directório actual for um repositório git e o repositório procurado "
+"estiver listado entre os \"remotos\" registados, então o uscan irá usa-lo em "
+"vez de o clonar em separado. A única alteração local é que o uscan irá "
+"correr um comando \"fetch\" para refrescar o repositório."
+
+#. type: =item
+#: ../scripts/uscan.pl:432
+msgid "B<svn>"
+msgstr "B<svn>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:434
+msgid ""
+"This mode accesses the upstream Subversion archive directly with the B<svn> "
+"command and packs the source tree."
+msgstr ""
+"Este modo acessa o arquivo Subversion original directamente com o comando "
+"B<svn> e empacota a árvore fonte.."
+
+#. type: textblock
+#: ../scripts/uscan.pl:437
+msgid ""
+"For svn mode, I<matching-pattern> specifies the full string matching pattern "
+"for directories under Subversion repository directory, specified via URL. "
+"The upstream version is extracted from concatenating the matched parts in "
+"B<(> ... B<)> with B<.> ."
+msgstr ""
+"Para modo svn, I<matching-pattern> especifica o padrão de correspondência de "
+"string completa para directórios sob directório de repositório Subversion, "
+"especificado via URL. A versão original é extraída da concatenação das "
+"partes correspondentes em B<(> ... B<)> com B<.> ."
+
+#. type: textblock
+#: ../scripts/uscan.pl:442
+msgid ""
+"If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads the latest "
+"source tree of the URL. The upstream version is then constructed by "
+"appending the last revision of the URL to B<0.0~svn>."
+msgstr ""
+"Se I<matching-pattern> for definido para B<HEAD>, B<uscan> descarrega a "
+"árvore fonte mais recente do URL. A versão original é então construída ao "
+"acrescentar a última revisão do URL a B<0.0~svn>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:446
+msgid ""
+"As commit signing is not possible with Subversion, the default B<pgpmode> is "
+"set to B<none> when B<mode=svn>. Settings of B<pgpmode> other than "
+"B<default> and B<none> are reported as errors."
+msgstr ""
+"Como a assinatura de envio não é possível com Subversion, O B<pgpmode> "
+"predefinido é definido para B<none> quando B<mode=svn>. Definições de "
+"B<pgpmode> além de B<default> e B<none> são reportadas como erros."
+
+#. type: =item
+#: ../scripts/uscan.pl:452
+msgid "B<pretty=>I<rule>"
+msgstr "B<pretty=>I<rule>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:454
+msgid ""
+"Set the upstream version string to an arbitrary format as an optional "
+"B<opts> argument when the I<matching-pattern> is B<HEAD> or B<heads/"
+">I<branch> for B<git> mode. For the exact syntax, see the B<git-log> "
+"manpage under B<tformat>. The default is B<pretty=0.0~git%cd.%h>. No "
+"B<uversionmangle> rules is applicable for this case."
+msgstr ""
+"Define a string de versão original para um formato arbitrário como um "
+"argumento B<opts> opcional quando I<matching-pattern> é B<HEAD> ou B<heads/"
+">I<branch> para modo B<git>. Para a sintaxe exacta, veja o manual B<git-log> "
+"sob B<tformat>. A predefinição é B<pretty=0.0~git%cd.%h>. Nenhuma regra "
+"B<uversionmangle> é aplicável para este caso."
+
+#. type: textblock
+#: ../scripts/uscan.pl:460
+msgid ""
+"When B<pretty=describe> is used, the upstream version string is the output "
+"of the \"B<git describe --tags | sed s/-/./g>\" command instead. For "
+"example, if the commit is the B<5>-th after the last tag B<v2.17.12> and its "
+"short hash is B<ged992511>, then the string is B<v2.17.12.5.ged992511> . "
+"For this case, it is good idea to add B<uversionmangle=s/^/0.0~/> or "
+"B<uversionmangle=s/^v//> to make the upstream version string compatible with "
+"Debian. B<uversionmangle=s/^v//> may work as well. Please note that in "
+"order for B<pretty=describe> to function well, upstream need to avoid "
+"tagging with random alphabetic tags."
+msgstr ""
+"Quando e usado B<pretty=describe>, a string de versão original é ao invés o "
+"resultado do comando \"B<git describe --tags | sed s/-/./g>\". Por exemplo, "
+"se o envio é o B<5>-º após a última etiqueta B<v2.17.12> e o seu hash curto "
+"é B<ged992511>, então a string é B<v2.17.12.5.ged992511> . Para este caso, é "
+"boa ideia adicionar B<uversionmangle=s/^/0.0~/> ou B<uversionmangle=s/^v//> "
+"para tornar a string de versão original compatível com Debian. "
+"B<uversionmangle=s/^v//> pode funcionar também. Por favor note que de "
+"maneira a B<pretty=describe> funcionar bem, o original precisa evitar "
+"etiquetar com etiquetas alfabéticas aleatórias."
+
+#. type: textblock
+#: ../scripts/uscan.pl:469
+msgid ""
+"The B<pretty=describe> forces to set B<gitmode=full> to make a full local "
+"clone of the repository automatically."
+msgstr ""
+"B<pretty=describe> faz definir B<gitmode=full> a fazer automaticamente um "
+"clone local completo do repositório."
+
+#. type: =item
+#: ../scripts/uscan.pl:472
+msgid "B<date=>I<rule>"
+msgstr "B<date=>I<rule>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:474
+msgid ""
+"Set the date string used by the B<pretty> option to an arbitrary format as "
+"an optional B<opts> argument when the I<matching-pattern> is B<HEAD> or "
+"B<heads/>I<branch> for B<git> mode. For the exact syntax, see the "
+"B<strftime> manpage. The default is B<date=%Y%m%d>."
+msgstr ""
+"Define a string de data usada pela opção B<pretty> para um formato "
+"arbitrário como um argumento B<opts> opcional quando I<matching-pattern> é "
+"B<HEAD> ou B<heads/>I<branch> para modo B<git>. Para a sintaxe exacta, veja "
+"o manual B<strftime>. A predefinição é B<date=%Y%m%d>."
+
+#. type: =item
+#: ../scripts/uscan.pl:479
+msgid "B<gitexport=>I<mode>"
+msgstr "B<gitexport=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:481
+msgid ""
+"Set the git archive export operation I<mode>. The default is "
+"B<gitexport=default>. Set this to B<gitexport=all> to include all files in "
+"the .orig.tar archive, ignoring any I<export-ignore> git attributes defined "
+"by the upstream."
+msgstr ""
+"Define o I<mode> de operação de exportação do arquivo git. A predefinição é "
+"B<gitexport=default>. Defina isto para B<gitexport=all> para incluir todos "
+"os ficheiros no arquivo .orig.tar, ignorando quaisquer atributos git "
+"I<export-ignore> definidos pelo autor original."
+
+#. type: textblock
+#: ../scripts/uscan.pl:486
+msgid "This option is valid only in git mode."
+msgstr "Esta opção é válida apenas em modo git."
+
+#. type: =item
+#: ../scripts/uscan.pl:488
+msgid "B<gitmode=>I<mode>"
+msgstr "B<gitmode=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:490
+msgid ""
+"Set the git clone operation I<mode>. The default is B<gitmode=shallow>. For "
+"some dumb git server, you may need to manually set B<gitmode=full> to force "
+"full clone operation."
+msgstr ""
+"Define o I<mode> de operação clone do git. A predefinição é "
+"B<gitmode=shallow>. Para algum servidor git burro, você poderá precisar de "
+"definir manualmente B<gitmode=full> para forçar operação de clone total."
+
+#. type: textblock
+#: ../scripts/uscan.pl:494
+msgid ""
+"If the current directory is a git repository and the searched repository is "
+"listed among the registered \"remotes\", then uscan will use it instead of "
+"cloning separately."
+msgstr ""
+"Se o directório actual for um repositório git e o repositório procurado "
+"estiver listado entre os \"remotos\" registados, então o uscan irá usa-lo em "
+"vez de o clonar em separado."
+
+#. type: =item
+#: ../scripts/uscan.pl:498
+msgid "B<pgpmode=>I<mode>"
+msgstr "B<pgpmode=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:500
+msgid "Set the PGP/GPG signature verification I<mode>."
+msgstr "Define o I<mode> de verificação da assinatura PGP/GPG."
+
+#. type: =item
+#: ../scripts/uscan.pl:504
+msgid "B<auto>"
+msgstr "B<auto>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:506
+msgid ""
+"B<uscan> checks possible URLs for the signature file and autogenerates a "
+"B<pgpsigurlmangle> rule to use it."
+msgstr ""
+"B<uscan> verifica possíveis URLs para o ficheiro de assinatura e auto-gera "
+"uma regra B<pgpsigurlmangle> para usar."
+
+#. type: =item
+#: ../scripts/uscan.pl:509
+msgid "B<default>"
+msgstr "B<default>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:511
+msgid ""
+"Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature "
+"file URL string from the upstream tarball URL. (default)"
+msgstr ""
+"Usa B<pgpsigurlmangle=>I<rules> para gerar a string candidata de URL do "
+"ficheiro de assinatura de autor a partir do URL do tarball de autor "
+"original. (Predefinição)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:514
+msgid ""
+"If the specified B<pgpsigurlmangle> is missing, B<uscan> checks possible "
+"URLs for the signature file and suggests adding a B<pgpsigurlmangle> rule."
+msgstr ""
+"Se o especificado B<pgpsigurlmangle> estiver em falta, B<uscan> verifica "
+"possíveis URLs para o ficheiro de assinatura e sugere adicionar uma regra "
+"B<pgpsigurlmangle>."
+
+#. type: =item
+#: ../scripts/uscan.pl:517
+msgid "B<mangle>"
+msgstr "B<mangle>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:519
+msgid ""
+"Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature "
+"file URL string from the upstream tarball URL."
+msgstr ""
+"Usa B<pgpsigurlmangle=>I<rules> para gerar a string candidata de URL de "
+"ficheiro de assinatura de autor original a partir do URL do tarbal do autor "
+"original."
+
+#. type: =item
+#: ../scripts/uscan.pl:522
+msgid "B<next>"
+msgstr "B<next>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:524
+msgid ""
+"Verify this downloaded tarball file with the signature file specified in the "
+"next watch line. The next watch line must be B<pgpmode=previous>. "
+"Otherwise, no verification occurs."
+msgstr ""
+"Verifica este ficheiro tarball descarregado com o ficheiro de assinatura "
+"especificado na próxima linha watch. A próxima linha watch tem de ser "
+"B<pgpmode=previous>. Caso contrario, nenhuma verificação ocorre."
+
+#. type: =item
+#: ../scripts/uscan.pl:528
+msgid "B<previous>"
+msgstr "B<previous>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:530
+msgid ""
+"Verify the downloaded tarball file specified in the previous watch line with "
+"this signature file. The previous watch line must be B<pgpmode=next>."
+msgstr ""
+"Verifica o ficheiro tarball descarregado especificado na anterior linha "
+"watch com este ficheiro de assinatura. A linha watch anterior tem de ser "
+"B<pgpmode=next>."
+
+#. type: =item
+#: ../scripts/uscan.pl:533
+msgid "B<self>"
+msgstr "B<self>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:535
+msgid ""
+"Verify the downloaded file I<foo.ext> with its self signature and extract "
+"its content tarball file as I<foo>."
+msgstr ""
+"Verifica o ficheiro descarregado I<foo.ext> com a sua própria assinatura e "
+"extrai o seu ficheiro tarball de conteúdo como I<foo>."
+
+#. type: =item
+#: ../scripts/uscan.pl:538
+msgid "B<gittag>"
+msgstr "B<gittag>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:540
+msgid "Verify tag signature if B<mode=git>."
+msgstr "Verifica assinatura da etiqueta se B<mode=git>."
+
+#. type: =item
+#: ../scripts/uscan.pl:542
+msgid "B<none>"
+msgstr "B<none>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:544
+msgid "No signature available. (No warning.)"
+msgstr "Nenhuma assinatura disponível. (Nenhum aviso.)"
+
+#. type: =item
+#: ../scripts/uscan.pl:548
+msgid "B<searchmode=>I<mode>"
+msgstr "B<searchmode=>I<mode>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:550
+msgid "Set the parsing search mode."
+msgstr "Define o modo de análise de busca."
+
+#. type: =item
+#: ../scripts/uscan.pl:554
+msgid ""
+"B<html> I<(default)>: search pattern in \"href\" parameter of E<lt>aE<gt> "
+"HTML tags"
+msgstr ""
+"B<html> I<(default)>: procura padrão no parâmetro \"href\" das etiquetas "
+"HTML E<lt>aE<gt>"
+
+#. type: =item
+#: ../scripts/uscan.pl:557
+msgid "B<plain>: search pattern in the full page"
+msgstr "B<plain>: procura padrão na página completa"
+
+#. type: textblock
+#: ../scripts/uscan.pl:559
+msgid ""
+"This is useful if page content is not HTML but JSON. Example with npmjs.com:"
+msgstr ""
+"Isto é útil se o conteúdo da página não for HTML mas sim JSON. Exemplo com "
+"npmjs.com:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:562
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-(\\d[\\d\\.]*)@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-(\\d[\\d\\.]*)@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:569
+msgid "B<decompress>"
+msgstr "B<decompress>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:571
+msgid ""
+"Decompress compressed archive before the pgp/gpg signature verification."
+msgstr ""
+"Descomprime o arquivo comprimido antes da verificação de assinatura pgp/gpg."
+
+#. type: =item
+#: ../scripts/uscan.pl:573
+msgid "B<bare>"
+msgstr "B<bare>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:575
+msgid ""
+"Disable all site specific special case code such as URL redirector uses and "
+"page content alterations. (persistent)"
+msgstr ""
+"Desactiva todo o código de caso especial específico do sítio, tal como "
+"utilizações de redirecionamentos URL e alterações do conteúdo da página. "
+"(persistente)"
+
+#. type: =item
+#: ../scripts/uscan.pl:578
+msgid "B<user-agent=>I<user-agent-string>"
+msgstr "B<user-agent=>I<user-agent-string>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:580
+msgid ""
+"Set the user-agent string used to contact the HTTP(S) server as I<user-agent-"
+"string>. (persistent)"
+msgstr ""
+"Define a string user-agent usada para contactar o servidor HTTP(S) como "
+"I<user-agent-string>. (persistente)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:583
+msgid ""
+"B<user-agent> option should be specified by itself in the watch line without "
+"I<URL>, to allow using semicolons and commas in it."
+msgstr ""
+"A opção B<user-agent> deve ser especificada por ela própria na linha watch "
+"sem I<URL>, para permitir o uso de ponto e vírgula e vírgulas nela."
+
+#. type: =item
+#: ../scripts/uscan.pl:586
+msgid "B<pasv>, B<passive>"
+msgstr "B<pasv>, B<passive>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:588
+msgid "Use PASV mode for the FTP connection."
+msgstr "Usa modo PASV para a ligação FTP."
+
+#. type: textblock
+#: ../scripts/uscan.pl:590
+msgid ""
+"If PASV mode is required due to the client side network environment, set "
+"B<uscan> to use PASV mode via L<COMMANDLINE OPTIONS> or L<DEVSCRIPT "
+"CONFIGURATION VARIABLES> instead."
+msgstr ""
+"Se o modo PASV for necessário devido ao ambiente de rede do lado do cliente, "
+"ao invés disto, defina o B<uscan> a usar o modo PASV via L<OPÇÕES DE LINHA "
+"DE COMANDOS> ou L<VARIÁVEIS DE CONFIGURAÇÃO DO DEVSCRIPT>."
+
+#. type: =item
+#: ../scripts/uscan.pl:594
+msgid "B<active>, B<nopasv>"
+msgstr "B<active>, B<nopasv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:596
+msgid "Don't use PASV mode for the FTP connection."
+msgstr "Não usa modo PASV para a ligação FTP."
+
+#. type: =item
+#: ../scripts/uscan.pl:598
+msgid "B<unzipopt=>I<options>"
+msgstr "B<unzipopt=>I<options>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:600
+msgid ""
+"Add the extra options to use with the B<unzip> command, such as B<-a>, B<-"
+"aa>, and B<-b>, when executed by B<mk-origtargz>."
+msgstr ""
+"Adiciona as opções extras a usar com o comando B<unzip>, tais como B<-a>, B<-"
+"aa>, e B<-b>, quando executado pelo B<mk-origtargz>."
+
+#. type: =item
+#: ../scripts/uscan.pl:603
+msgid "B<dversionmangle=>I<rules>"
+msgstr "B<dversionmangle=>I<rules>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:605
+msgid ""
+"Normalize the last upstream version string found in F<debian/changelog> to "
+"compare it to the available upstream tarball version. Removal of the Debian "
+"specific suffix such as B<s/@DEB_EXT@//> is usually done here."
+msgstr ""
+"Normaliza a string da última versão de autor encontrada em F<debian/"
+"changelog> para a comparar com a versão de tarball de autor disponível. A "
+"remoção do sufixo específico de Debian tal como B<s/@DEB_EXT@//> é "
+"geralmente feita aqui."
+
+#. type: textblock
+#: ../scripts/uscan.pl:609
+msgid ""
+"You can also use B<dversionmangle=auto>, this is exactly the same than "
+"B<dversionmangle=s/@DEB_EXT@//>"
+msgstr ""
+"Você também pode usar B<dversionmangle=auto>, isto é exactamente o mesmo que "
+"B<dversionmangle=s/@DEB_EXT@//>"
+
+#. type: =item
+#: ../scripts/uscan.pl:612
+msgid "B<dirversionmangle=>I<rules>"
+msgstr "B<dirversionmangle=>I<rules>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:614
+msgid ""
+"Normalize the directory path string matching the regex in a set of "
+"parentheses of B<http://>I<URL> as the sortable version index string. This "
+"is used as the directory path sorting index only."
+msgstr ""
+"Normaliza a string de caminho de directório que corresponde à expressão "
+"regular num conjunto de parêntesis de B<http://>I<URL> como a string de "
+"índice de versão ordenável. Isto é usado apenas como índice de ordenação de "
+"caminho de directório."
+
+#. type: textblock
+#: ../scripts/uscan.pl:618 ../scripts/uscan.pl:634
+msgid "Substitution such as B<s/PRE/~pre/; s/RC/~rc/> may help."
+msgstr "Uma substituição tal como B<s/PRE/~pre/; s/RC/~rc/> pode ajudar."
+
+#. type: =item
+#: ../scripts/uscan.pl:620
+msgid "B<pagemangle=>I<rules>"
+msgstr "B<pagemangle=>I<rules>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:622
+msgid ""
+"Normalize the downloaded web page string. (Don't use this unless this is "
+"absolutely needed. Generally, B<g> flag is required for these I<rules>.)"
+msgstr ""
+"Normaliza a string da página web descarregada. (Não faça isto a menos que "
+"seja absolutamente necessário. Geralmente, a bandeira B<g> é requerida para "
+"estas I<rules>.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:625
+msgid ""
+"This is handy if you wish to access Amazon AWS or Subversion repositories in "
+"which <a href=\"...\"> is not used."
+msgstr ""
+"Isto é útil se desejar aceder a repositórios Amazon AWS ou Subversion nos "
+"quais <a href=\"...\"> não é usado."
+
+#. type: =item
+#: ../scripts/uscan.pl:628
+msgid "B<uversionmangle=>I<rules>"
+msgstr "B<uversionmangle=>I<rules>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:630
+msgid ""
+"Normalize the candidate upstream version strings extracted from hrefs in the "
+"source of the web page. This is used as the version sorting index when "
+"selecting the latest upstream version."
+msgstr ""
+"Normaliza string de versão original candidata extraída de hrefs na fonte da "
+"página web. Isto é usado como o índice de ordenação da versão quando se "
+"seleciona a versão original mais recente."
+
+#. type: =item
+#: ../scripts/uscan.pl:636
+msgid "B<versionmangle=>I<rules>"
+msgstr "B<versionmangle=>I<rules>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:638
+msgid ""
+"Syntactic shorthand for B<uversionmangle=>I<rules>B<, "
+"dversionmangle=>I<rules>"
+msgstr ""
+"Abreviação sintática para B<uversionmangle=>I<rules>B<, "
+"dversionmangle=>I<rules>"
+
+#. type: =item
+#: ../scripts/uscan.pl:640
+msgid "B<hrefdecode=percent-encoding>"
+msgstr "B<hrefdecode=percent-encoding>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:642
+msgid ""
+"Convert the selected upstream tarball href string from the percent-encoded "
+"hexadecimal string to the decoded normal URL string for obfuscated web "
+"sites. Only B<percent-encoding> is available and it is decoded with B<s/"
+"%([A-Fa-f\\d]{2})/chr hex $1/eg>."
+msgstr ""
+"Converte a string href do tarball original selecionado a partir da string "
+"hexadecimal de codificação-percent para a string de URL normal descodificada "
+"para sítios web ofuscados. Apenas está disponível B<percent-encoding> e é "
+"descodificada com B<s/%([A-Fa-f\\d]{2})/chr hex $1/eg>."
+
+#. type: =item
+#: ../scripts/uscan.pl:647
+msgid "B<downloadurlmangle=>I<rules>"
+msgstr "B<downloadurlmangle=>I<rules>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:649
+msgid ""
+"Convert the selected upstream tarball href string into the accessible URL "
+"for obfuscated web sites. This is run after B<hrefdecode>."
+msgstr ""
+"Converte a string de href do tarball original selecionado no URL acessível "
+"para sítios web ofuscados. Isto corre após B<hrefdecode>."
+
+#. type: =item
+#: ../scripts/uscan.pl:652
+msgid "B<filenamemangle=>I<rules>"
+msgstr "B<filenamemangle=>I<rules>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:654
+msgid ""
+"Generate the upstream tarball filename from the selected href string if "
+"I<matching-pattern> can extract the latest upstream version I<< <uversion> "
+">> from the selected href string. Otherwise, generate the upstream tarball "
+"filename from its full URL string and set the missing I<< <uversion> >> from "
+"the generated upstream tarball filename."
+msgstr ""
+"Gera o nome de ficheiro do tarball do autor a partir da string href "
+"selecionada se I<matching-pattern> conseguir extrair a versão de autor mais "
+"recente I<< <uversion> >> a partir da string href selecionada. Caso "
+"contrário, gera o nome de ficheiro de tarball de autor a partir da sua "
+"string de URL completa e define I<< <uversion> >> em falta a partir do nome "
+"de ficheiro de tarball de autor gerado."
+
+#. type: textblock
+#: ../scripts/uscan.pl:660
+msgid ""
+"Without this option, the default upstream tarball filename is generated by "
+"taking the last component of the URL and removing everything after any '?' "
+"or '#'."
+msgstr ""
+"Sem esta opção, o nome de ficheiro de tarball de autor predefinido é gerado "
+"ao tirar o último componente do URL e removendo tudo após qualquer '?' ou "
+"'#'."
+
+#. type: =item
+#: ../scripts/uscan.pl:664
+msgid "B<pgpsigurlmangle=>I<rules>"
+msgstr "B<pgpsigurlmangle=>I<rules>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:666
+msgid ""
+"Generate the candidate upstream signature file URL string from the upstream "
+"tarball URL."
+msgstr ""
+"Gera a string candidata de URL de ficheiro de assinatura de autor original a "
+"partir do URL do tarbal do autor original."
+
+#. type: =item
+#: ../scripts/uscan.pl:669
+msgid "B<oversionmangle=>I<rules>"
+msgstr "B<oversionmangle=>I<rules>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:671
+msgid ""
+"Generate the version string I<< <oversion> >> of the source tarball I<< "
+"<spkg>_<oversion>.orig.tar.gz >> from I<< <uversion> >>. This should be "
+"used to add a suffix such as B<+dfsg> to a MUT package."
+msgstr ""
+"Gera a string de versão I<< <oversion> >> do tarball fonte I<< "
+"<spkg>_<oversion>.orig.tar.gz >> a partir de I<< <uversion> >>. Isto deve "
+"ser usado para adicionar um sufixo tal como B<+dfsg> a um pacote MUT."
+
+#. type: textblock
+#: ../scripts/uscan.pl:677
+msgid ""
+"Here, the mangling rules apply the I<rules> to the pertinent string. "
+"Multiple rules can be specified in a mangling rule string by making a "
+"concatenated string of each mangling I<rule> separated by B<;> (semicolon)."
+msgstr ""
+"Aqui, as regras de mutilação aplicam as I<rules> à string pertinente. Pode "
+"ser especificadas múltiplas regras numa string de regra de mutilação ao "
+"fazer uma string concatenada de cada I<rule> e mutilação separada por B<;> "
+"(ponto e vírgula)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:681
+msgid ""
+"Each mangling I<rule> cannot contain B<;> (semicolon), B<,> (comma), or "
+"B<\"> (double quote)."
+msgstr ""
+"Cada I<rule> de mutilação não pode conter B<;> (ponto e vírgula), B<,> "
+"(vírgula), ou B<\"> (aspas)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:684
+msgid ""
+"Each mangling I<rule> behaves as if a Perl command \"I<$string> B<=~> "
+"I<rule>\" is executed. There are some notable details."
+msgstr ""
+"Cada I<rule> de mutilação comporta-se como se fosse executado um comando "
+"Perl \"I<$string> B<=~> I<rule>\". Existem alguns detalhes a notar."
+
+#. type: =item
+#: ../scripts/uscan.pl:689
+msgid "* I<rule> may only use the B<s>, B<tr>, and B<y> operations."
+msgstr "* I<rule> só pode usar as operações B<s>, B<tr>, e B<y>."
+
+#. type: =item
+#: ../scripts/uscan.pl:693
+msgid "B<s/>I<regex>B</>I<replacement>B</>I<options>"
+msgstr "B<s/>I<regex>B</>I<replacement>B</>I<options>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:695
+msgid ""
+"Regex pattern match and replace the target string. Only the B<g>, B<i> and "
+"B<x> flags are available. Use the B<$1> syntax for back references (No "
+"B<\\1> syntax). Code execution is not allowed (i.e. no B<(?{})> or B<(??"
+"{})> constructs)."
+msgstr ""
+"Corresponde a padrão de expressão regula e substitui a string alvo. Apenas "
+"as bandeiras B<g>, B<i> e B<x> estão disponíveis. Use a sintaxe B<$1> para "
+"referências anteriores (Nenhuma sintaxe B<\\1> syntax). A execução de código "
+"não é permitida (isto é, não há construções B<(?{})> ou B<(??{})>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:700
+msgid "B<y/>I<source>B</>I<dest>B</> or B<tr/>I<source>B</>I<dest>B</>"
+msgstr "B<y/>I<source>B</>I<dest>B</> or B<tr/>I<source>B</>I<dest>B</>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:702
+msgid "Transliterate the characters in the target string."
+msgstr "Translitera os caracteres na string alvo."
+
+#. type: =head1
+#: ../scripts/uscan.pl:708
+msgid "EXAMPLE OF EXECUTION"
+msgstr "EXEMPLO DE EXECUÇÃO"
+
+#. type: textblock
+#: ../scripts/uscan.pl:710
+msgid ""
+"B<uscan> reads the first entry in F<debian/changelog> to determine the "
+"source package name and the last upstream version."
+msgstr ""
+"B<uscan> lê a primeira entrada em F<debian/changelog> para determinar o nome "
+"do pacote fonte e a última versão do autor."
+
+#. type: textblock
+#: ../scripts/uscan.pl:713
+msgid "For example, if the first entry of F<debian/changelog> is:"
+msgstr "Por exemplo, a primeira entrada de F<debian/changelog> é:"
+
+#. type: =item
+#: ../scripts/uscan.pl:717
+msgid "* I<< bar >> (B<3:2.03+dfsg-4>) unstable; urgency=low"
+msgstr "* I<< bar >> (B<3:2.03+dfsg-4>) unstable; urgency=low"
+
+#. type: textblock
+#: ../scripts/uscan.pl:721
+msgid ""
+"then, the source package name is I<< bar >> and the last Debian package "
+"version is B<3:2.03+dfsg-4>."
+msgstr ""
+"então, se o nome de pacote fonte for I<< bar >> e a última versão de pacote "
+"Debian for B<3:2.03+dfsg-4>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:724
+msgid ""
+"The last upstream version is normalized to B<2.03+dfsg> by removing the "
+"epoch and the Debian revision."
+msgstr ""
+"A última versão de autor é normalizada para B<2.03+dfsg> ao remover o epoch "
+"e a revisão Debian."
+
+#. type: textblock
+#: ../scripts/uscan.pl:727
+msgid ""
+"If the B<dversionmangle> rule exists, the last upstream version is further "
+"normalized by applying this rule to it. For example, if the last upstream "
+"version is B<2.03+dfsg> indicating the source tarball is repackaged, the "
+"suffix B<+dfsg> is removed by the string substitution B<s/\\+dfsg\\d*$//> to "
+"make the (dversionmangled) last upstream version B<2.03> and it is compared "
+"to the candidate upstream tarball versions such as B<2.03>, B<2.04>, ... "
+"found in the remote site. Thus, set this rule as:"
+msgstr ""
+"Se a regra B<dversionmangle> existir, a última versão de autor é mais "
+"normalizada ao aplicar-lhe esta regra. Por exemplo, se a última versão de "
+"autor for B<2.03+dfsg> o que indica que o tarball fonte foi re-empacotado, o "
+"sufixo B<+dfsg> é removido pela string de substituição B<s/\\+dfsg\\d*$//> "
+"para fazer a última versão de autor (versão desmutilada) B<2.03> e é "
+"comparada com as versões de tarball de autor candidatas tais como B<2.03>, "
+"B<2.04>, ... encontradas no sítio remoto. Assim, define esta regra como:"
+
+#. type: =item
+#: ../scripts/uscan.pl:737
+msgid "* B<opts=\"dversionmangle=s/\\+dfsg\\d*$//\">"
+msgstr "* B<opts=\"dversionmangle=s/\\+dfsg\\d*$//\">"
+
+#. type: textblock
+#: ../scripts/uscan.pl:741
+msgid ""
+"B<uscan> downloads a web page from B<http://>I<URL> specified in F<debian/"
+"watch>."
+msgstr ""
+"B<uscan> descarrega uma página web de B<http://>I<URL> especificada em "
+"F<debian/watch>."
+
+#. type: =item
+#: ../scripts/uscan.pl:746
+msgid ""
+"* If the directory name part of I<URL> has no parentheses, B<(> and B<)>, it "
+"is taken as verbatim."
+msgstr ""
+"* Se a parte do nome de directório de I<URL> não tiver parêntesis, B<(> e "
+"B<)>, é recebida literalmente."
+
+#. type: =item
+#: ../scripts/uscan.pl:749
+msgid ""
+"* If the directory name part of I<URL> has parentheses, B<(> and B<)>, then "
+"B<uscan> recursively searches all possible directories to find a page for "
+"the newest version. If the B<dirversionmangle> rule exists, the generated "
+"sorting index is used to find the newest version. If a specific version is "
+"specified for the download, the matching version string has priority over "
+"the newest version."
+msgstr ""
+"* Se a parte do nome de directório do I<URL> tiver parêntesis, B<(> e B<)>, "
+"então o B<uscan> procura recursivamente todos os directórios possíveis para "
+"encontrar uma página para a versão mais recente. Se a regra "
+"B<dirversionmangle> existir, o índice ordenado gerado é usado para encontrar "
+"a versão mais recente. Se for especificada uma versão específica para a "
+"descarga, a string de versão correspondente tem prioridade sobre a versão "
+"mais recente."
+
+#. type: textblock
+#: ../scripts/uscan.pl:758
+msgid "For example, this B<http://>I<URL> may be specified as:"
+msgstr "Por exemplo, este I<URL>B<http://> pode ser especificado como:"
+
+#. type: =item
+#: ../scripts/uscan.pl:762
+msgid "* B<http://www.example.org/@ANY_VERSION@/>"
+msgstr "* B<http://www.example.org/@ANY_VERSION@/>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:766
+msgid ""
+"Please note the trailing B</> in the above to make B<@ANY_VERSION@> as the "
+"directory."
+msgstr ""
+"Por favor note a B</> final no exemplo de cima para fazer de "
+"B<@ANY_VERSION@> como o directório."
+
+#. type: textblock
+#: ../scripts/uscan.pl:769
+msgid ""
+"If the B<pagemangle> rule exists, the whole downloaded web page as a string "
+"is normalized by applying this rule to it. This is very powerful tool and "
+"needs to be used with caution. If other mangling rules can be used to "
+"address your objective, do not use this rule."
+msgstr ""
+"Se a regra B<pagemangle> existir, a inteira página web descarregada como uma "
+"string é normalizada ao aplicar-lhe esta regra. Esta é uma ferramenta muito "
+"poderosa e precisa de ser usada com cuidado. Se puder usar outras regras de "
+"mutilação para conseguir o seu objectivo, não use esta regra."
+
+#. type: textblock
+#: ../scripts/uscan.pl:774
+msgid ""
+"The downloaded web page is scanned for hrefs defined in the B<< <a href=\" "
+">> I<...> B<< \"> >> tag to locate the candidate upstream tarball hrefs. "
+"These candidate upstream tarball hrefs are matched by the Perl regex pattern "
+"I<matching-pattern> such as B<< DL-(?:[\\d\\.]+?)/foo-(.+)\\.tar\\.gz >> to "
+"narrow down the candidates. This pattern match needs to be anchored at the "
+"beginning and the end. For example, candidate hrefs may be:"
+msgstr ""
+"A página web descarregada é sondada por hrefs definidos na etiqueta B<< <a "
+"href=\" >> I<...> B<< \"> >> para localizar os hrefs de tarball de autor "
+"candidato. Estes hrefs de tarball de autor candidato correspondem a padrão "
+"de expressão regular Perl I<matching-pattern> tal como B<< DL-(?:[\\d\\.]+?)/"
+"foo-(.+)\\.tar\\.gz >> para encurtar os candidatos. Este padrão de "
+"correspondência precisa de ser ancorado no inicio e no final. Por exemplo, "
+"hrefs candidatos podem ser:"
+
+#. type: =item
+#: ../scripts/uscan.pl:783
+msgid "* B<< DL-2.02/foo-2.02.tar.gz >>"
+msgstr "* B<< DL-2.02/foo-2.02.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:785
+msgid "* B<< DL-2.03/foo-2.03.tar.gz >>"
+msgstr "* B<< DL-2.03/foo-2.03.tar.gz >>"
+
+#. type: =item
+#: ../scripts/uscan.pl:787
+msgid "* B<< DL-2.04/foo-2.04.tar.gz >>"
+msgstr "* B<< DL-2.04/foo-2.04.tar.gz >>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:791
+msgid ""
+"Here the matching string of B<(.+)> in I<matching-pattern> is considered as "
+"the candidate upstream version. If there are multiple matching strings of "
+"capturing patterns in I<matching-pattern>, they are all concatenated with B<."
+"> (period) to form the candidate upstream version. Make sure to use the non-"
+"capturing regex such as B<(?:[\\d\\.]+?)> instead for the variable text "
+"matching part unrelated to the version."
+msgstr ""
+"Aqui a string correspondente de B<(.+)> em I<matching-pattern> é considerada "
+"como a versão de autor candidata. Se existirem várias strings "
+"correspondentes de padrões de captura em I<matching-pattern>, serão todas "
+"concatenadas com B<.> (ponto) para formar a versão de autor candidata. "
+"Certifique-se de usar a expressão regular de não-captura tal como B<(?:"
+"[\\d\\.]+?)> em vez desta para a parte correspondente ao texto de variável "
+"não relacionada com a versão."
+
+#. type: textblock
+#: ../scripts/uscan.pl:798
+msgid "Then, the candidate upstream versions are:"
+msgstr "Então, as versões originais candidatas são:"
+
+#. type: =item
+#: ../scripts/uscan.pl:802
+msgid "* B<2.02>"
+msgstr "* B<2.02>"
+
+#. type: =item
+#: ../scripts/uscan.pl:804
+msgid "* B<2.03>"
+msgstr "* B<2.03>"
+
+#. type: =item
+#: ../scripts/uscan.pl:806
+msgid "* B<2.04>"
+msgstr "* B<2.04>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:810
+msgid ""
+"The downloaded tarball filename is basically set to the same as the filename "
+"in the remote URL of the selected href."
+msgstr ""
+"O nome de ficheiro do tarball descarregado é basicamente definido para o "
+"mesmo que o nome de ficheiro no URL remoto do href selecionado."
+
+#. type: textblock
+#: ../scripts/uscan.pl:813
+msgid ""
+"If the B<uversionmangle> rule exists, the candidate upstream versions are "
+"normalized by applying this rule to them. (This rule may be useful if the "
+"upstream version scheme doesn't sort correctly to identify the newest "
+"version.)"
+msgstr ""
+"Se a regra B<uversionmangle> existir, as versões de autor candidatas são "
+"normalizadas ao plicar-lhes esta regra. (esta regra pode ser útil se o "
+"esquema da versão do autor não se ordenar corretamente para identificar a "
+"versão mais recente.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:817
+msgid ""
+"The upstream tarball href corresponding to the newest (uversionmangled) "
+"candidate upstream version newer than the (dversionmangled) last upstream "
+"version is selected."
+msgstr ""
+"É selecionado o href de tarball de autor correspondente à mais recente "
+"(uversionmangled) versão de autor candidata mais recente que a última versão "
+"de autor (dversionmangled)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:821
+msgid ""
+"If multiple upstream tarball hrefs corresponding to a single version with "
+"different extensions exist, the highest compression one is chosen. "
+"(Priority: B<< tar.xz > tar.lzma > tar.bz2 > tar.gz >>.)"
+msgstr ""
+"Se existirem vários hrefs de tarball de autor correspondentes a uma única "
+"versão com diferentes extensões, é escolhido aquele da mais alta compressão. "
+"(Prioridade: B<< tar.xz > tar.lzma > tar.bz2 > tar.gz >>.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:825
+msgid ""
+"If the selected upstream tarball href is the relative URL, it is converted "
+"to the absolute URL using the base URL of the web page. If the B<< <base "
+"href=\" >> I< ... > B<< \"> >> tag exists in the web page, the selected "
+"upstream tarball href is converted to the absolute URL using the specified "
+"base URL in the base tag, instead."
+msgstr ""
+"Se o href de tarball de autor selecionado for o URL relativo, é convertido "
+"para o URL absoluto usando o URL base da página web. Se a etiqueta B<< <base "
+"href=\" >> I< ... > B<< \"> >> existir na página web, o href de tarbal de "
+"autor selecionado é convertido para o URL absoluto usando em vez disso o URL "
+"base especificado na etiqueta base."
+
+#. type: textblock
+#: ../scripts/uscan.pl:831
+msgid ""
+"If the B<downloadurlmangle> rule exists, the selected upstream tarball href "
+"is normalized by applying this rule to it. (This is useful for some sites "
+"with the obfuscated download URL.)"
+msgstr ""
+"Se a regra B<downloadurlmangle> existir, o href de tarball de autor "
+"selecionado é normalizado ao plicar-lhe esta regra. (Isto é útil para alguns "
+"sítios com o URL de descarga ofuscado.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:835
+msgid ""
+"If the B<filenamemangle> rule exists, the downloaded tarball filename is "
+"generated by applying this rule to the selected href if I<matching-pattern> "
+"can extract the latest upstream version I<< <uversion> >> from the selected "
+"href string. Otherwise, generate the upstream tarball filename from its full "
+"URL string and set the missing I<< <uversion> >> from the generated upstream "
+"tarball filename."
+msgstr ""
+"Se a regra B<filenamemangle> existir, o nome de ficheiro do tarball do autor "
+"é gerado ao aplicar-se esta regra ao href selecionado se I<matching-pattern> "
+"conseguir extrair a versão de autor mais recente I<< <uversion> >> a partir "
+"da string href selecionada. Caso contrário, gera o nome de ficheiro de "
+"tarball de autor a partir da sua string de URL completa e define I<< "
+"<uversion> >> em falta a partir do nome de ficheiro de tarball de autor "
+"gerado."
+
+#. type: textblock
+#: ../scripts/uscan.pl:842
+msgid ""
+"Without the B<filenamemangle> rule, the default upstream tarball filename is "
+"generated by taking the last component of the URL and removing everything "
+"after any '?' or '#'."
+msgstr ""
+"Sem a regra B<filenamemangle>, o nome de ficheiro de tarball de autor "
+"predefinido é gerado ao tirar o último componente do URL e removendo tudo "
+"após qualquer '?' ou '#'."
+
+#. type: textblock
+#: ../scripts/uscan.pl:846
+msgid ""
+"B<uscan> downloads the selected upstream tarball to the parent B<../> "
+"directory. For example, the downloaded file may be:"
+msgstr ""
+"B<uscan> descarrega o tarball de autor selecionado para o directório pai "
+"B<../>. Por exemplo, o ficheiro descarregado pode ser:"
+
+#. type: =item
+#: ../scripts/uscan.pl:851
+msgid "* F<../foo-2.04.tar.gz>"
+msgstr "* F<../foo-2.04.tar.gz>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:855
+msgid ""
+"Let's call this downloaded version B<2.04> in the above example generically "
+"as I<< <uversion> >> in the following."
+msgstr ""
+"Vamos passar a chamar a esta versão descarregada B<2.04> no exemplo em cima "
+"genericamente de I<< <uversion> >> no seguinte."
+
+#. type: textblock
+#: ../scripts/uscan.pl:858
+msgid ""
+"If the B<pgpsigurlmangle> rule exists, the upstream signature file URL is "
+"generated by applying this rule to the (downloadurlmangled) selected "
+"upstream tarball href and the signature file is tried to be downloaded from "
+"it."
+msgstr ""
+"Se a regra B<pgpsigurlmangle> existir, o URL do ficheiro de assinatura do "
+"autor é gerado ao aplicar-se esta regra ao href de tarball de autor "
+"selecionado (downloadurlmangled) e tanta-se descarregar o ficheiro de "
+"assinatura de lá."
+
+#. type: textblock
+#: ../scripts/uscan.pl:862
+msgid ""
+"If the B<pgpsigurlmangle> rule doesn't exist, B<uscan> warns user if the "
+"matching upstream signature file is available from the same URL with their "
+"filename being suffixed by the 5 common suffix B<asc>, B<gpg>, B<pgp>, "
+"B<sig> and B<sign>. (You can avoid this warning by setting B<pgpmode=none>.)"
+msgstr ""
+"Se a regra B<pgpsigurlmangle> não existir, o B<uscan> avisa o utilizador se "
+"o ficheiro de assinatura de autor correspondente estiver disponível a partir "
+"do mesmo URL com o seu nome de ficheiro acrescentado por um dos 5 sufixos "
+"comuns B<asc>, B<gpg>, B<pgp>, B<sig> e B<sign>. (Você pode evitar este "
+"aviso ao definir B<pgpmode=none>.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:867
+msgid ""
+"If the signature file is downloaded, the downloaded upstream tarball is "
+"checked for its authenticity against the downloaded signature file using the "
+"armored keyring F<debian/upstream/signing-key.asc> (see L<KEYRING FILE "
+"EXAMPLES>). If its signature is not valid, or not made by one of the listed "
+"keys, B<uscan> will report an error."
+msgstr ""
+"Se o ficheiro de assinatura for descarregado, o tarball de autor "
+"descarregado é verificado por autenticidade contra o ficheiro de assinatura "
+"descarregado usando o chaveiro blindado F<debian/upstream/signing-key.asc> "
+"(veja L<EXEMPLOS DE FICHEIRO DE CHAVEIRO>). Se a sua assinatura não for "
+"válida, ou não for feita por uma das chaves listadas, o B<uscan> irá "
+"reportar um erro."
+
+#. type: textblock
+#: ../scripts/uscan.pl:873
+msgid ""
+"If the B<oversionmangle> rule exists, the source tarball version I<oversion> "
+"is generated from the downloaded upstream version I<uversion> by applying "
+"this rule. This rule is useful to add suffix such as B<+dfsg> to the version "
+"of all the source packages of the MUT package for which the repacksuffix "
+"mechanism doesn't work."
+msgstr ""
+"Se a regra B<oversionmangle> existir, a versão de tarball fonte I<oversion> "
+"é gerada a partir da versão de autor descarregada I<uversion> ao aplicar-se "
+"esta regra. Esta regra é útil para adicionar um sufixo como B<+dfsg> à "
+"versão de todos os pacotes fonte do pacote MUT para o qual o mecanismo "
+"repacksuffix não funciona."
+
+#. type: textblock
+#: ../scripts/uscan.pl:879
+msgid ""
+"B<uscan> invokes B<mk-origtargz> to create the source tarball properly named "
+"for the source package with B<.orig.> (or B<< .orig-<component>. >> for the "
+"secondary tarballs) in its filename."
+msgstr ""
+"B<uscan> invoca B<mk-origtargz> para criar o tarball fonte com nome "
+"apropriado para o pacote fonte com B<.orig.> (ou B<< .orig-<component>. >> "
+"para os tarball(s) secundários) no seu nome de ficheiro."
+
+#. type: =item
+#: ../scripts/uscan.pl:885
+msgid "case A: packaging of the upstream tarball as is"
+msgstr "caso A: empacotar o tarball de origem tal como está"
+
+#. type: textblock
+#: ../scripts/uscan.pl:887
+msgid ""
+"B<mk-origtargz> creates a symlink I<< ../bar_<oversion>.orig.tar.gz >> "
+"linked to the downloaded local upstream tarball. Here, I<< bar >> is the "
+"source package name found in F<debian/changelog>. The generated symlink may "
+"be:"
+msgstr ""
+"B<mk-origtargz> cria um symlink I<< ../bar_<oversion>.orig.tar.gz >> ligado "
+"ao tarball de autor local descarregado. Aqui, I<< bar >> é o nome de pacote "
+"fonte encontrado em F<debian/changelog>. O symlink gerado pode ser:"
+
+#. type: =item
+#: ../scripts/uscan.pl:893
+msgid "* F<../bar_2.04.orig.tar.gz> -> F<foo-2.04.tar.gz> (as is)"
+msgstr "* F<../bar_2.04.orig.tar.gz> -> F<foo-2.04.tar.gz> (como está)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:897
+msgid ""
+"Usually, there is no need to set up B<opts=\"dversionmangle=> I<...> B<\"> "
+"for this case."
+msgstr ""
+"Geralmente, não existe necessidade de configurar B<opts=\"dversionmangle=> "
+"I<...> B<\"> para este caso."
+
+#. type: =item
+#: ../scripts/uscan.pl:900
+msgid "case B: packaging of the upstream tarball after removing non-DFSG files"
+msgstr "caso B: empacotar o tarball de origem após remover ficheiros não-DFSG"
+
+#. type: textblock
+#: ../scripts/uscan.pl:902
+msgid ""
+"B<mk-origtargz> checks the filename glob of the B<Files-Excluded> stanza in "
+"the first section of F<debian/copyright>, removes matching files to create a "
+"repacked upstream tarball. Normally, the repacked upstream tarball is "
+"renamed with I<suffix> to I<< ../bar_<oversion><suffix>.orig.tar.gz >> using "
+"the B<repacksuffix> option for the single upstream package. Here I<< "
+"<oversion> >> is updated to be I<< <oversion><suffix> >>."
+msgstr ""
+"B<mk-origtargz> verifica o glob do nome de ficheiro da estrofe B<Files-"
+"Excluded> na primeira secção de F<debian/copyright>, remove ficheiros "
+"correspondentes para criar um tarball de autor re-empacotado. Normalmente, o "
+"tarball de autor re-empacotado é renomeado com I<suffix> para I<< ../"
+"bar_<oversion><suffix>.orig.tar.gz >> usando a opção B<repacksuffix> para o "
+"pacote de autor único. Aqui I<< <oversion> >> é actualizada para ser I<< "
+"<oversion><suffix> >>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:909
+msgid ""
+"The removal of files is required if files are not DFSG-compliant. For such "
+"case, B<+dfsg> is used as I<suffix>."
+msgstr ""
+"A remoção de ficheiros é necessária se os ficheiros não forem compatíveis "
+"com DFSG. Para tal caso, é usado B<+dfsg> como I<suffix>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:912
+msgid ""
+"So the combined options are set as B<opts=\"dversionmangle=s/\\+dfsg\\d*$// ,"
+"repacksuffix=+dfsg\">, instead."
+msgstr ""
+"Portanto, ao invés, as opções combinadas são definidas como "
+"B<opts=\"dversionmangle=s/\\+dfsg\\d*$// ,repacksuffix=+dfsg\">."
+
+#. type: textblock
+#: ../scripts/uscan.pl:915
+msgid "For example, the repacked upstream tarball may be:"
+msgstr "Por exemplo, o tarball de origem re-empacotado pode ser:"
+
+#. type: =item
+#: ../scripts/uscan.pl:919
+msgid "* F<../bar_2.04+dfsg.orig.tar.gz> (repackaged)"
+msgstr "* F<../bar_2.04+dfsg.orig.tar.gz> (re-empacotado)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:925
+msgid ""
+"B<uscan> normally invokes \"B<uupdate> B<--find --upstream-version> "
+"I<oversion> \" for the version=4 watch file."
+msgstr ""
+"B<uscan> normalmente invoca \"B<uupdate> B<--find --upstream-version> "
+"I<oversion> \" para o ficheiro watch versão=4."
+
+#. type: textblock
+#: ../scripts/uscan.pl:928
+msgid ""
+"Please note that B<--find> option is used here since B<mk-origtargz> has "
+"been invoked to make B<*.orig.tar.gz> file already. B<uscan> picks I<< bar "
+">> from F<debian/changelog>."
+msgstr ""
+"Por favor note que essa opção B<--find> é usada aqui desde que o B<mk-"
+"origtargz> foi invocado para fazer o ficheiro B<*.orig.tar.gz> já pronto. "
+"B<uscan> apanha I<< bar >> a partir de F<debian/changelog>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:932
+msgid ""
+"It creates the new upstream source tree under the I<< ../bar-<oversion> >> "
+"directory and Debianize it leveraging the last package contents."
+msgstr ""
+"Cria a nova árvore fonte de autor original sob o directório I<< ../bar-"
+"<oversion> >> e Debianiza-o aproveitando os conteúdos do último pacote."
+
+#. type: =head1
+#: ../scripts/uscan.pl:935
+msgid "WATCH FILE EXAMPLES"
+msgstr "EXEMPLOS DE FICHEIRO WATCH"
+
+#. type: textblock
+#: ../scripts/uscan.pl:937
+msgid ""
+"When writing the watch file, you should rely on the latest upstream source "
+"announcement web page. You should not try to second guess the upstream "
+"archive structure if possible. Here are the typical F<debian/watch> files."
+msgstr ""
+"Ao escreve o ficheiro watch, você deve apoiar-se no anúncio da mais recente "
+"fonte de autor na página web. Você não deve tentar adivinhar a estrutura do "
+"arquivo do autor se possível. Aqui estão os ficheiros F<debian/watch> "
+"típicos."
+
+#. type: textblock
+#: ../scripts/uscan.pl:941
+msgid ""
+"Please note that executing B<uscan> with B<-v> or B<-vv> reveals what "
+"exactly happens internally."
+msgstr ""
+"Por favor note que executar o B<uscan> com B<-v> ou B<-vv> revela o que "
+"acontece exactamente internamente."
+
+#. type: textblock
+#: ../scripts/uscan.pl:944
+msgid ""
+"The existence and non-existence of a space the before tailing B<\\> (back "
+"slash) are significant."
+msgstr ""
+"A existência ou não existência de um espaço antes do B<\\> final (barra "
+"invertida) tem significado."
+
+#. type: textblock
+#: ../scripts/uscan.pl:947
+msgid ""
+"Some undocumented shorter configuration strings are used in the below "
+"EXAMPLES to help you with typing. These are intentional ones. B<uscan> is "
+"written to accept such common sense abbreviations but don't push the limit."
+msgstr ""
+"Algumas strings de configuração curtas não documentadas são usadas nos "
+"EXEMPLOS em baixo para o ajudarem com a estrita. Estas são intencionais. "
+"B<uscan> foi escrito para aceitar tais abreviaturas de senso comum mas que "
+"não forçam o limite."
+
+#. type: =head2
+#: ../scripts/uscan.pl:951
+msgid "HTTP site (basic)"
+msgstr "sítio HTTP (básico)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:953
+msgid "Here is an example for the basic single upstream tarball."
+msgstr "Aqui está um exemplo de tarball original único básico:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:955
+#, no-wrap
+msgid ""
+" version=4\n"
+" http://example.com/~user/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" http://example.com/~user/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:959
+#, no-wrap
+msgid ""
+"Or without using the substitution strings (not recommended):\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-([\\d\\.]+)\\.tar\\.gz\n"
+"\n"
+msgstr ""
+"Ou sem usar as strings de substituição (não recomendado):\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-([\\d\\.]+)\\.tar\\.gz\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:963
+#, no-wrap
+msgid ""
+" version=4\n"
+"\n"
+msgstr ""
+" version=4\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:965
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz>, this watch file downloads "
+"and creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+"Para o pacote fonte do autor B<foo-2.0.tar.gz>, este ficheiro watch "
+"descarrega e cria o ficheiro Debian B<orig.tar> B<foo_2.0.orig.tar.gz>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:968
+msgid "HTTP site (pgpsigurlmangle)"
+msgstr "sítio HTTP (pgpsigurlmangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:970
+msgid ""
+"Here is an example for the basic single upstream tarball with the matching "
+"signature file in the same file path."
+msgstr ""
+"Aqui está um exemplo de tarball original único básico com o ficheiro de "
+"assinatura correspondente no mesmo caminho de ficheiro."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:973
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.asc%\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.asc%\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:977
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz> and the upstream signature "
+"file B<foo-2.0.tar.gz.asc>, this watch file downloads these files, verifies "
+"the authenticity using the keyring F<debian/upstream/signing-key.asc> and "
+"creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+"Para o pacote fonte do autor B<foo-2.0.tar.gz> e o ficheiro de assinatura do "
+"autor B<foo-2.0.tar.gz.asc>, este ficheiro watch descarrega estes ficheiros, "
+"verifica a sua autenticidade usando o chaveiro F<debian/upstream/signing-key."
+"asc> e cria o ficheiro Debian B<orig.tar> B<foo_2.0.orig.tar.gz>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:982
+msgid ""
+"Here is another example for the basic single upstream tarball with the "
+"matching signature file on decompressed tarball in the same file path."
+msgstr ""
+"Aqui está outro exemplo de tarball original único básico com o ficheiro de "
+"assinatura correspondente no tarball descomprimido no mesmo caminho de "
+"ficheiro."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:985
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%@ARCHIVE_EXT@$%.asc%,decompress\" \\\n"
+" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%@ARCHIVE_EXT@$%.asc%,decompress\" \\\n"
+" http://example.com/release/@PACKAGE@.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:990
+msgid ""
+"For the upstream source package B<foo-2.0.tar.gz> and the upstream signature "
+"file B<foo-2.0.tar.asc>, this watch file downloads these files, verifies the "
+"authenticity using the keyring F<debian/upstream/signing-key.asc> and "
+"creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>."
+msgstr ""
+"Para o pacote fonte do autor B<foo-2.0.tar.gz> e o ficheiro de assinatura do "
+"autor B<foo-2.0.tar.asc>, este ficheiro watch descarrega estes ficheiros, "
+"verifica a sua autenticidade usando o chaveiro F<debian/upstream/signing-key."
+"asc> e cria o ficheiro Debian B<orig.tar> B<foo_2.0.orig.tar.gz>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:995
+msgid "HTTP site (pgpmode=next/previous)"
+msgstr "sítio HTTP (pgpmode=next/previous)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:997
+msgid ""
+"Here is an example for the basic single upstream tarball with the matching "
+"signature file in the unrelated file path."
+msgstr ""
+"Aqui está um exemplo de tarball original único básico com o ficheiro de "
+"assinatura correspondente num caminho de ficheiro não relacionado."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1000
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ previous\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/release/@PACKAGE@.html \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ previous\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1006
+msgid ""
+"B<(?:\\d+)> part can be any random value. The tarball file can have B<53>, "
+"while the signature file can have B<33>."
+msgstr ""
+"A parte B<(?:\\d+)> pode ter qualquer valor aleatório. O ficheiro tarball "
+"pode ter B<53>, enquanto o ficheiro de assinatura pode ter B<33>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1009
+msgid ""
+"B<([\\d\\.]+)> part for the signature file has a strict requirement to match "
+"that for the upstream tarball specified in the previous line by having "
+"B<previous> as I<version> in the watch line."
+msgstr ""
+"A parte B<([\\d\\.]+)> para o ficheiro de assinatura tem um requerimento "
+"estrito para corresponder a aquela para o tarball de autor especificado na "
+"linha anterior ao ter B<previous> como I<version> na linha watch."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1013
+msgid "HTTP site (flexible)"
+msgstr "sítio HTTP (flexível)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1015
+msgid ""
+"Here is an example for the maximum flexibility of upstream tarball and "
+"signature file extensions."
+msgstr ""
+"Aqui está um exemplo para a máxima flexibilidade das extensões do tarball de "
+"autor e ficheiro de assinatura."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1018
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ \\\n"
+" previous\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpmode=next\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpmode=previous\" http://example.com/DL/ \\\n"
+" files/(?:\\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ \\\n"
+" previous\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1025
+msgid "HTTP site (basic MUT)"
+msgstr "sítio HTTP (MUT básico)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1027
+msgid "Here is an example for the basic multiple upstream tarballs."
+msgstr "Aqui está um exemplo de tarball original múltiplo básico:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1029
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=bar\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=baz\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobaz-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=bar\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, component=baz\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/foobaz-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1040
+msgid ""
+"For the main upstream source package B<foo-2.0.tar.gz> and the secondary "
+"upstream source packages B<foobar-2.0.tar.gz> and B<foobaz-2.0.tar.gz> which "
+"install under F<bar/> and F<baz/>, this watch file downloads and creates the "
+"Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>, B<foo_2.0.orig-bar.tar.gz> "
+"and B<foo_2.0.orig-baz.tar.gz>. Also, these upstream tarballs are verified "
+"by their signature files."
+msgstr ""
+"Para o pacote fonte principal de autor B<foo-2.0.tar.gz> e pacotes fonte "
+"secundários de autor B<foobar-2.0.tar.gz> e B<foobaz-2.0.tar.gz> oa quais "
+"instalam sob F<bar/> e F<baz/>, este ficheiro watch descarrega e cria os "
+"ficheiros Debian B<orig.tar> B<foo_2.0.orig.tar.gz>, B<foo_2.0.orig-bar.tar."
+"gz> e B<foo_2.0.orig-baz.tar.gz>. Também, estes tarballs de autor são "
+"verificados pelas suas assinaturas."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1047
+msgid "HTTP site (recursive directory scanning)"
+msgstr "sítio HTTP (sondagem de directório recursiva)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1049
+msgid ""
+"Here is an example with the recursive directory scanning for the upstream "
+"tarball and its signature files released in a directory named after their "
+"version."
+msgstr ""
+"Aqui está um exemplo com sondagem de directório recursiva para o tarball do "
+"autor e seus ficheiros de assinatura lançados num directório nomeado pela "
+"sua versão."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1053
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, dirversionmangle=s/-PRE/~pre/;s/-RC/~rc/\" \\\n"
+" http://tmrc.mit.edu/mirror/twisted/Twisted/@ANY_VERSION@/ \\\n"
+" Twisted-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%, dirversionmangle=s/-PRE/~pre/;s/-RC/~rc/\" \\\n"
+" http://tmrc.mit.edu/mirror/twisted/Twisted/@ANY_VERSION@/ \\\n"
+" Twisted-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1058
+msgid "Here, the web site should be accessible at the following URL:"
+msgstr "Aqui, o sítio web deve estar acessível no seguinte URL:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1060
+#, no-wrap
+msgid ""
+" http://tmrc.mit.edu/mirror/twisted/Twisted/\n"
+"\n"
+msgstr ""
+" http://tmrc.mit.edu/mirror/twisted/Twisted/\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1062
+msgid ""
+"Here, B<dirversionmangle> option is used to normalize the sorting order of "
+"the directory names."
+msgstr ""
+"Aqui, a opção B<dirversionmangle> é usada para normalizar a ordenação dos "
+"nomes de directórios."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1065
+msgid "HTTP site (alternative shorthand)"
+msgstr "Sítio HTTP (abreviaturas alternativas)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1067
+msgid ""
+"For the bare HTTP site where you can directly see archive filenames, the "
+"normal watch file:"
+msgstr ""
+"Para o sítio HTTP despido onde você consegue ver diretamente os nomes dos "
+"ficheiros do arquivo, o ficheiro watch normal:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1070
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/ \\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/ \\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1075
+msgid ""
+"can be rewritten in an alternative shorthand form only with a single string "
+"covering URL and filename:"
+msgstr ""
+"pode ser rescrito numa forma abreviada alternativa apenas com uma única "
+"string que cobre o URL e o nome de ficheiro."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1078
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1082
+msgid ""
+"In version=4, initial white spaces are dropped. Thus, this alternative "
+"shorthand form can also be written as:"
+msgstr ""
+"Em version=4, os espaços em branco iniciais são abandonados. Assim, esta "
+"forma abreviada alternativa pode também ser escrita como:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1085
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/\\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpsigurlmangle=s%$%.sig%\" \\\n"
+" http://www.cpan.org/modules/by-module/Text/\\\n"
+" Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1090
+msgid ""
+"Please note the subtle difference of a space before the tailing B<\\> "
+"between the first and the last examples."
+msgstr ""
+"Por favor note a diferença subtil de um espaço antes do B<\\> final entre o "
+"primeiro e último exemplos."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1093
+msgid "HTTP site (funny version)"
+msgstr "sítio HTTP (versão engraçada)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1095
+msgid ""
+"For a site which has funny version numbers, the parenthesized groups will be "
+"joined with B<.> (period) to make a sanitized version number."
+msgstr ""
+"Para um sítio que tenha números de versão engraçados, os grupos entre "
+"parêntesis irão ser juntos com B<.> (ponto) para fazer um número de versão "
+"higienizado."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1098
+#, no-wrap
+msgid ""
+" version=4\n"
+" http://www.site.com/pub/foobar/foobar_v(\\d+)_(\\d+)@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" http://www.site.com/pub/foobar/foobar_v(\\d+)_(\\d+)@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1101
+msgid "HTTP site (DFSG)"
+msgstr "sítio HTTP (DFSG)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1103
+msgid ""
+"The upstream part of the Debian version number can be mangled to indicate "
+"the source package was repackaged to clean up non-DFSG files:"
+msgstr ""
+"A parte do autor do número de versão Debian pode ser mutilada para indicar "
+"que o pacote fonte foi re-empacotado para limpar ficheiros não-DFSG:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1106
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"dversionmangle=s/\\+dfsg\\d*$//,repacksuffix=+dfsg\" \\\n"
+" http://some.site.org/some/path/foobar-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"dversionmangle=s/\\+dfsg\\d*$//,repacksuffix=+dfsg\" \\\n"
+" http://some.site.org/some/path/foobar-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1110 ../scripts/uscan.pl:1165
+msgid "See L<COPYRIGHT FILE EXAMPLES>."
+msgstr "Veja L<EXEMPLOS DE FICHEIRO DE COPYRIGHT>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1112
+msgid "HTTP site (filenamemangle)"
+msgstr "sítio HTTP (filenamemangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1114
+msgid ""
+"The upstream tarball filename is found by taking the last component of the "
+"URL and removing everything after any '?' or '#'."
+msgstr ""
+"O nome de ficheiro do tarball do autor é encontrado ao obter o último "
+"componente do URL e removendo tudo após qualquer '?' ou '#'."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1117
+msgid ""
+"If this does not fit to you, use B<filenamemangle>. For example, F<< <A "
+"href=\"http://foo.bar.org/dl/?path=&dl=foo-0.1.1.tar.gz\"> >> could be "
+"handled as:"
+msgstr ""
+"Se isto não servir para si, use B<filenamemangle>. Por exemplo, F<< <A "
+"href=\"http://foo.bar.org/dl/?path=&dl=foo-0.1.1.tar.gz\"> >> poderá ser "
+"lidado como :"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1121
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/$1/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl=foo-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/$1/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl=foo-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1125
+msgid ""
+"F<< <A href=\"http://foo.bar.org/dl/?path=&dl_version=0.1.1\"> >> could be "
+"handled as:"
+msgstr ""
+"F<< <A href=\"http://foo.bar.org/dl/?path=&dl_version=0.1.1\"> >> poderá ser "
+"lidado como:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1128
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/foo-$1\\.tar\\.gz/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl_version=@ANY_VERSION@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=filenamemangle=s/.*=(.*)/foo-$1\\.tar\\.gz/ \\\n"
+" http://foo.bar.org/dl/\\?path=&dl_version=@ANY_VERSION@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1132
+msgid ""
+"If the href string has no version using <I>matching-pattern>, the version "
+"can be obtained from the full URL using B<filenamemangle>."
+msgstr ""
+"Se a string de href não tiver nenhuma versão usando <I>matching-pattern>, a "
+"versão pode ser obtida a partir do URL completo usando B<filenamemangle>."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1135
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=filenamemangle=s&.*/dl/(.*)/foo\\.tar\\.gz&foo-$1\\.tar\\.gz& \\\n"
+" http://foo.bar.org/dl/@ANY_VERSION@/ foo.tar.gz\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=filenamemangle=s&.*/dl/(.*)/foo\\.tar\\.gz&foo-$1\\.tar\\.gz& \\\n"
+" http://foo.bar.org/dl/@ANY_VERSION@/ foo.tar.gz\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1139
+msgid "HTTP site (downloadurlmangle)"
+msgstr "sítio HTTP (downloadurlmangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1141
+msgid ""
+"The option B<downloadurlmangle> can be used to mangle the URL of the file to "
+"download. This can only be used with B<http://> URLs. This may be "
+"necessary if the link given on the web page needs to be transformed in some "
+"way into one which will work automatically, for example:"
+msgstr ""
+"A opção B<downloadurlmangle> pode ser usada para mutilar URL do ficheiro a "
+"descarregar. Isto só pode ser usado com URLs B<http://>. Isto pode ser "
+"necessário se o link dado na página web precisar de ser transformado de "
+"algum modo em um que funcione automaticamente, por exemplo:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1146
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=downloadurlmangle=s/prdownload/download/ \\\n"
+" http://developer.berlios.de/project/showfiles.php?group_id=2051 \\\n"
+" http://prdownload.berlios.de/softdevice/vdr-softdevice-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=downloadurlmangle=s/prdownload/download/ \\\n"
+" http://developer.berlios.de/project/showfiles.php?group_id=2051 \\\n"
+" http://prdownload.berlios.de/softdevice/vdr-softdevice-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1151
+msgid "HTTP site (oversionmangle, MUT)"
+msgstr "sítio HTTP (oversionmangle, MUT)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1153
+msgid ""
+"The option B<oversionmangle> can be used to mangle the version of the source "
+"tarball (B<.orig.tar.gz> and B<.orig-bar.tar.gz>). For example, B<+dfsg> "
+"can be added to the upstream version as:"
+msgstr ""
+"A opção B<oversionmangle> pode ser usada para mutilar a versão do tarball "
+"fonte (B<.orig.tar.gz> e B<.orig-bar.tar.gz>). Por exemplo, B<+dfsg> pode "
+"ser adicionado À versão do autor como:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1157
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=oversionmangle=s/(.*)/$1+dfsg/ \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"component=bar\" \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/bar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=oversionmangle=s/(.*)/$1+dfsg/ \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian\n"
+" opts=\"component=bar\" \\\n"
+" http://example.com/~user/release/foo.html \\\n"
+" files/bar-@ANY_VERSION@@ARCHIVE_EXT@ same\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1167
+msgid "HTTP site (pagemangle)"
+msgstr "sítio HTTP (pagemangle)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1169
+msgid ""
+"The option B<pagemangle> can be used to mangle the downloaded web page "
+"before applying other rules. The non-standard web page without proper B<< "
+"<a href=\" >> << ... >> B<< \"> >> entries can be converted. For example, "
+"if F<foo.html> uses B<< <a bogus=\" >> I<< ... >> B<< \"> >>, this can be "
+"converted to the standard page format with:"
+msgstr ""
+"A opção B<pagemangle> pode ser usada para mutilar a página web descarregada "
+"antes de aplicar outras regras. A página web não-standard sem entradas B<< "
+"<a href=\" >> << ... >> B<< \"> >> apropriadas pode ser convertida. Por "
+"exemplo, se F<foo.html> usar B<< <a bogus=\" >> I<< ... >> B<< \"> >>, isto "
+"pode ser convertido para o formato de pagina standard com:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1175
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=pagemangle=\"s/<a\\s+bogus=/<a href=/g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=pagemangle=\"s/<a\\s+bogus=/<a href=/g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1180
+msgid "Please note the use of B<g> here to replace all occurrences."
+msgstr ""
+"Por favor note o uso de B<g> aqui para substituir todas as ocorrências."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1182
+msgid ""
+"If F<foo.html> uses B<< <Key> >> I<< ... >> B<< </Key> >>, this can be "
+"converted to the standard page format with:"
+msgstr ""
+"Se F<foo.html> usar B<< <Key> >> I<< ... >> B<< </Key> >>, isto pode ser "
+"convertido para o formato de página standard com:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1185
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pagemangle=s%<Key>([^<]*)</Key>%<Key><a href=\"$1\">$1</a></Key>%g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pagemangle=s%<Key>([^<]*)</Key>%<Key><a href=\"$1\">$1</a></Key>%g\" \\\n"
+" http://example.com/release/foo.html \\\n"
+" (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1190
+msgid "FTP site (basic):"
+msgstr "sítio FTP (básico):"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1192
+#, no-wrap
+msgid ""
+" version=4\n"
+" ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1195
+msgid "FTP site (regex special characters):"
+msgstr "sítio FTP site (caracteres especiais de expressão regular):"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1197
+#, no-wrap
+msgid ""
+" version=4\n"
+" ftp://ftp.worldforge.org/pub/worldforge/libs/\\\n"
+" Atlas-C++/transitional/Atlas-C\\+\\+-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" ftp://ftp.worldforge.org/pub/worldforge/libs/\\\n"
+" Atlas-C++/transitional/Atlas-C\\+\\+-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1201
+msgid ""
+"Please note that this URL is connected to be I< ... >B<libs/Atlas-C++/"
+">I< ... > . For B<++>, the first one in the directory path is verbatim while "
+"the one in the filename is escaped by B<\\>."
+msgstr ""
+"Por favor note que este URL está ligado para ser I< ... >B<libs/Atlas-C++/"
+">I< ... > . Para B<++>, o primeiro no caminho de directório é literal "
+"enquanto que o no nome de ficheiro é escapado por B<\\>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1205
+msgid "FTP site (funny version)"
+msgstr "sítio FTP (versão engraçada)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1207
+msgid ""
+"This is another way of handling site with funny version numbers, this time "
+"using mangling. (Note that multiple groups will be concatenated before "
+"mangling is performed, and that mangling will only be performed on the "
+"basename version number, not any path version numbers.)"
+msgstr ""
+"Este é outro modo de lidar com sítio com números de versão estranhos, desta "
+"vez usando mutilação. (Note que vários grupos serão concatenados antes da "
+"mutilação ser executada, e que a mutilação só será executada no número de "
+"versão do nome base, não em quaisquer números de versão de caminho.)"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1213
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"uversionmangle=s/^/0.0./\" \\\n"
+" ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/\\\n"
+" development/Wine-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"uversionmangle=s/^/0.0./\" \\\n"
+" ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/\\\n"
+" development/Wine-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1218
+msgid "sf.net"
+msgstr "sf.net"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1220
+msgid ""
+"For SourceForge based projects, qa.debian.org runs a redirector which allows "
+"a simpler form of URL. The format below will automatically be rewritten to "
+"use the redirector with the watch file:"
+msgstr ""
+"Para projetos baseados no SourceForge, qa.debian.org corre um redirecionador "
+"que permite um formato mais simples de URL. O formato em baixo será "
+"automaticamente rescrito para usar o redirecionador com o ficheiro watch:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1224
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://sf.net/<project>/ <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://sf.net/<project>/ <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1227
+msgid "For B<audacity>, set the watch file as:"
+msgstr "Para B<audacity>, define o ficheiro watch como:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1229
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://sf.net/audacity/ audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://sf.net/audacity/ audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1232 ../scripts/uscan.pl:1272
+msgid ""
+"Please note, you can still use normal functionalities of B<uscan> to set up "
+"a watch file for this site without using the redirector."
+msgstr ""
+"Por favor note, você ainda pode usar as funcionalidades normais do B<uscan> "
+"para definir um ficheiro watch para este sítio sem usar o redirecionador."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1235
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"uversionmangle=s/-pre/~pre/, \\\n"
+" filenamemangle=s%(?:.*)audacity-minsrc-(.+)\\.tar\\.xz/download%\\\n"
+" audacity-$1.tar.xz%\" \\\n"
+" http://sourceforge.net/projects/audacity/files/audacity/@ANY_VERSION@/ \\\n"
+" (?:.*)audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@/download\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"uversionmangle=s/-pre/~pre/, \\\n"
+" filenamemangle=s%(?:.*)audacity-minsrc-(.+)\\.tar\\.xz/download%\\\n"
+" audacity-$1.tar.xz%\" \\\n"
+" http://sourceforge.net/projects/audacity/files/audacity/@ANY_VERSION@/ \\\n"
+" (?:.*)audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@/download\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1242
+msgid "Here, B<%> is used as the separator instead of the standard B</>."
+msgstr "Aqui, B<%> é usado como separador em vez do B</> standard."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1244
+msgid "github.com"
+msgstr "github.com"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1246
+msgid ""
+"For GitHub based projects, you can use the tags or releases page. The "
+"archive URL uses only the version as the filename. You can rename the "
+"downloaded upstream tarball from into the standard F<< <project>-<version>."
+"tar.gz >> using B<filenamemangle>:"
+msgstr ""
+"Para projetos baseados em GitHub, você pode usar as etiquetas ou página de "
+"lançamentos. O URL do arquivo usa apenas a versão como nome de ficheiro. "
+"Você pode renomear o tarball de autor descarregado para o standard F<< "
+"<project>-<version>.tar.gz >> usando B<filenamemangle>:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1251
+#, fuzzy, no-wrap
+#| msgid ""
+#| " version=4\n"
+#| " opts=\"filenamemangle=s%(?:.*?)?v?(\\d[\\d.]*@ARCHIVE_EXT@)%@PACKAGE@-$1%\" \\\n"
+#| " https://github.com/<user>/<project>/tags \\\n"
+#| " (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@\n"
+#| "\n"
+msgid ""
+" version=4\n"
+" opts=\"filenamemangle=s%(?:.*?)?v?@ANY_VERSION@(@ARCHIVE_EXT@)%@PACKAGE@-$1$2%\" \\\n"
+" https://github.com/<user>/<project>/tags \\\n"
+" (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"filenamemangle=s%(?:.*?)?v?(\\d[\\d.]*@ARCHIVE_EXT@)%@PACKAGE@-$1%\" \\\n"
+" https://github.com/<user>/<project>/tags \\\n"
+" (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1256
+msgid "PyPI"
+msgstr "PyPI"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1258
+msgid ""
+"For PyPI based projects, pypi.debian.net runs a redirector which allows a "
+"simpler form of URL. The format below will automatically be rewritten to use "
+"the redirector with the watch file:"
+msgstr ""
+"Para projetos baseados no PyPI, pypi.debian.net corre um redirecionador que "
+"permite um formato mais simples de URL. O formato em baixo será "
+"automaticamente rescrito para usar o redirecionador com o ficheiro watch:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1262
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://pypi.python.org/packages/source/<initial>/<project>/ \\\n"
+" <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://pypi.python.org/packages/source/<initial>/<project>/ \\\n"
+" <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1266
+msgid "For B<cfn-sphere>, set the watch file as:"
+msgstr "Para B<cfn-sphere>, define o ficheiro watch como:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1268
+#, no-wrap
+msgid ""
+" version=4\n"
+" https://pypi.python.org/packages/source/c/cfn-sphere/ \\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" https://pypi.python.org/packages/source/c/cfn-sphere/ \\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1275
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"pgpmode=none\" \\\n"
+" https://pypi.python.org/pypi/cfn-sphere/ \\\n"
+" https://pypi.python.org/packages/.*/.*/.*/\\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@#.*\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"pgpmode=none\" \\\n"
+" https://pypi.python.org/pypi/cfn-sphere/ \\\n"
+" https://pypi.python.org/packages/.*/.*/.*/\\\n"
+" cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@#.*\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1281
+msgid "code.google.com"
+msgstr "code.google.com"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1283
+msgid ""
+"Sites which used to be hosted on the Google Code service should have "
+"migrated to elsewhere (github?). Please look for the newer upstream site if "
+"available."
+msgstr ""
+"Sítios que costumavam estar hospedados no serviço Google Code devem ter "
+"migrado para outro lado (github?). Por favor procure pelo sítio do autor "
+"mais recente, se disponível."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1286
+msgid "npmjs.org (node modules)"
+msgstr "npmjs.org (módulos node)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1288
+msgid ""
+"npmjs.org modules are published in JSON files. Here is a way to read them:"
+msgstr ""
+"módulos npmjs.org são publicados em ficheiros JSON. Aqui está um modo de os "
+"ler:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1290
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain\" \\\n"
+" https://registry.npmjs.org/aes-js \\\n"
+" https://registry.npmjs.org/aes-js/-/aes-js-@ANY_VERSION@@ARCHIVE_EXT@\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1295
+msgid "grouped package"
+msgstr "pacote agrupado"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1297
+msgid ""
+"Some node modules are split into multiple little upstream package. Here is a "
+"way to group them:"
+msgstr ""
+"Alguns módulos node estão divididos em vários pacotes de autor pequenos. "
+"Aqui está um modo de os agrupar."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1300
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1314
+msgid ""
+"Package version is then the concatenation of upstream versions separated by "
+"\"+~\"."
+msgstr ""
+"A versão do pacote é então a concatenação de versões originais separadas por "
+"\"+~\"."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1317
+msgid ""
+"To avoid having a too long version, the \"checksum\" method can be used. In "
+"this case, the main source has to be declared as \"group\":"
+msgstr ""
+"Para evitar ter uma versão demasiado longa, pode ser usado o método "
+"\"checksum\". Neste caso, a fonte principal tem de ser declarada como "
+"\"group\":"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1320
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"searchmode=plain,pgpmode=none\" \\\n"
+" https://registry.npmjs.org/mongodb \\\n"
+" https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group\n"
+" opts=\"searchmode=plain,pgpmode=none,component=bson\" \\\n"
+" https://registry.npmjs.org/bson \\\n"
+" https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=mongodb-core\" \\\n"
+" https://registry.npmjs.org/mongodb-core \\\n"
+" https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+" opts=\"searchmode=plain,pgpmode=none,component=requireoptional\" \\\n"
+" https://registry.npmjs.org/require_optional \\\n"
+" https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ checksum\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1334
+msgid ""
+"The \"checksum\" is made up of the separate sum of each number composing the "
+"component versions. Following is an example with 3 components whose "
+"versions are \"1.2.4\", \"2.0.1\" and \"10.0\", with the main tarball having "
+"version \"2.0.6\":"
+msgstr ""
+"O \"checksum\" é feito das somas separadas de cada número que compõem as "
+"versões dos componentes. A seguir está um exemplo com 3 componentes cujas "
+"versões são \"1.2.4\", \"2.0.1\" e \"10.0\", com o tarball principal a ter "
+"versão \"2.0.6\":"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1338
+#, no-wrap
+msgid ""
+" Main: 2.0.6\n"
+" Comp1: 1 . 2 . 4\n"
+" Comp2: 2 . 0 . 1\n"
+" Comp3: 10 . 0\n"
+" ================================\n"
+" Result : 1+2+10 . 2+0+0 . 4+1\n"
+" Checksum: 13 . 2 . 5\n"
+" ================================\n"
+" Final Version: 2.0.6+~cs13.2.5\n"
+"\n"
+msgstr ""
+" Main: 2.0.6\n"
+" Comp1: 1 . 2 . 4\n"
+" Comp2: 2 . 0 . 1\n"
+" Comp3: 10 . 0\n"
+" ================================\n"
+" Result : 1+2+10 . 2+0+0 . 4+1\n"
+" Checksum: 13 . 2 . 5\n"
+" ================================\n"
+" Final Version: 2.0.6+~cs13.2.5\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1348
+msgid ""
+"uscan will also display the original version string before being encoded "
+"into the checksum, which can for example be used in a debian/changelog entry "
+"to easily follow the changes:"
+msgstr ""
+"O uscan irá também mostrar a string de versão original antes de ser "
+"codificada no sumário de verificação, a qual pode por exemplo ser usada numa "
+"entrada debian/changelog para facilitar o seguimento das alterações."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1352
+#, no-wrap
+msgid ""
+" 2.0.6+~1.2.4+~2.0.1+~10.0\n"
+"\n"
+msgstr ""
+" 2.0.6+~1.2.4+~2.0.1+~10.0\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1354
+msgid ""
+"B<Note>: This feature currently accepts only versions composed of digits and "
+"full stops (`.`)."
+msgstr ""
+"B<Nota>: Actualmente esta funcionalidade apenas aceita versões compostas de "
+"dígitos e pontos (`.`)."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1357
+msgid "direct access to the git repository (tags)"
+msgstr "acesso direto ao repositório git (etiquetas)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1359
+msgid ""
+"If the upstream only publishes its code via the git repository and its code "
+"has no web interface to obtain the release tarball, you can use B<uscan> "
+"with the tags of the git repository to track and package the new upstream "
+"release."
+msgstr ""
+"Se o autor apenas publicar o seu código via repositório git e o seu código "
+"não tem uma interface web para obter o tarball de lançamento, você pode usar "
+"o B<uscan> com as etiquetas do repositório git para seguir e empacotar o "
+"novo lançamento do autor."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1363
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=git, gitmode=full, pgpmode=none\" \\\n"
+" http://git.ao2.it/tweeper.git \\\n"
+" refs/tags/v@ANY_VERSION@\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=git, gitmode=full, pgpmode=none\" \\\n"
+" http://git.ao2.it/tweeper.git \\\n"
+" refs/tags/v@ANY_VERSION@\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1368
+msgid "Please note \"B<git ls-remote>\" is used to obtain references for tags."
+msgstr ""
+"Por favor note que \"B<git ls-remote>\" é usado para obter referências para "
+"etiquetas."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1370
+msgid ""
+"If a tag B<v20.5> is the newest tag, the above example downloads "
+"I<spkg>B<-20.5.tar.xz> after making a full clone of the git repository which "
+"is needed for dumb git server."
+msgstr ""
+"Se a etiqueta B<v20.5> for a etiqueta mais recente, o exemplo de cima "
+"descarrega I<spkg>B<-20.5.tar.xz> após fazer um clone completo do "
+"repositório git o que é necessário para servidor git dumb."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1374
+msgid "If tags are signed, set B<pgpmode=gittag> to verify them."
+msgstr ""
+"Se as etiquetas estiverem assinadas, defina B<pgpmode=gittag> para as "
+"verificar."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1376
+msgid "direct access to the git repository (HEAD)"
+msgstr "acesso direto ao repositório git (HEAD)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1378
+msgid ""
+"If the upstream only publishes its code via the git repository and its code "
+"has no web interface nor the tags to obtain the released tarball, you can "
+"use B<uscan> with the HEAD of the git repository to track and package the "
+"new upstream release with an automatically generated version string."
+msgstr ""
+"Se o autor apenas publicar o seu código via repositório git e o seu código "
+"não tem uma interface web nem as etiquetas para obter o tarball de "
+"lançamento, você pode usar o B<uscan> com a HEAD do repositório git para "
+"seguir e empacotar o novo lançamento do autor com uma string de versão "
+"gerada automaticamente."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1383
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=git, pgpmode=none\" \\\n"
+" https://github.com/Debian/dh-make-golang \\\n"
+" HEAD\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=git, pgpmode=none\" \\\n"
+" https://github.com/Debian/dh-make-golang \\\n"
+" HEAD\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1388
+msgid ""
+"Please note that a local shallow copy of the git repository is made with "
+"\"B<git clone --bare --depth=1> ...\" normally in the target directory. "
+"B<uscan> generates the new upstream version with \"B<git log --date=format:"
+"%Y%m%d --pretty=0.0~git%cd.%h>\" on this local copy of repository as its "
+"default behavior."
+msgstr ""
+"Por favor note que uma cópia sombra local do repositório git é feita com "
+"\"B<git clone --bare --depth=1> ...\" normalmente no directório alvo. O "
+"B<uscan> gera a nova versão de autor com \"B<git log --date=format:%Y%m%d --"
+"pretty=0.0~git%cd.%h>\" nesta cópia local do repositório como o seu "
+"comportamento predefinido."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1394
+msgid ""
+"The generation of the upstream version string may the adjusted to your taste "
+"by adding B<pretty> and B<date> options to the B<opts> arguments."
+msgstr ""
+"A geração da string de versão do autor pode ser ajustada ao seu gosto ao "
+"adicionar as opções B<pretty> e B<date> aos argumentos B<opts>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1397
+msgid "direct access to the Subversion repository (tags)"
+msgstr "acesso direto ao repositório Subversion (tags)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1399
+msgid ""
+"If the upstream only publishes its code via the Subversion repository and "
+"its code has no web interface to obtain the release tarball, you can use "
+"B<uscan> with the tags of the Subversion repository to track and package the "
+"new upstream release."
+msgstr ""
+"Se o autor apenas publicar o seu código via repositório Subversion e o seu "
+"código não tem uma interface web para obter o tarball de lançamento, você "
+"pode usar o B<uscan> com as etiquetas do repositório Subversion para seguir "
+"e empacotar o novo lançamento do autor."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1404
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/tags/ \\\n"
+" @ANY_VERSION@\\/\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/tags/ \\\n"
+" @ANY_VERSION@\\/\n"
+"\n"
+
+#. type: =head2
+#: ../scripts/uscan.pl:1409
+msgid "direct access to the Subversion repository (HEAD)"
+msgstr "acesso direto ao repositório Subversion (HEAD)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1411
+msgid ""
+"If the upstream only publishes its code via the Subversion repository and "
+"its code has no web interface to obtain the release tarball, you can use "
+"B<uscan> to get the most recent source of a subtree in the repository with "
+"an automatically generated version string."
+msgstr ""
+"Se o autor apenas publicar o seu código via repositório Subversion e o seu "
+"código não tem uma interface web para obter o tarball de lançamento, você "
+"pode usar o B<uscan> para obter a fonte mais recente de uma sub-árvore no "
+"repositório com uma string de versão gerada automaticamente."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1416
+#, no-wrap
+msgid ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/trunk/ \\\n"
+" HEAD\n"
+"\n"
+msgstr ""
+" version=4\n"
+" opts=\"mode=svn, pgpmode=none\" \\\n"
+" svn://svn.code.sf.net/p/jmol/code/trunk/ \\\n"
+" HEAD\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1421
+msgid ""
+"By default, B<uscan> generates the new upstream version by appending the "
+"revision number to \"0.0~svn\". This can later be changed using "
+"B<uversionmangle>."
+msgstr ""
+"Por predefinição, o B<uscan> gera a nova versão de autor ao acrescentar o "
+"número de revisão a \"0.0~svn\". Isto pode ser alterado mais tarde usando "
+"B<uversionmangle>."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1424
+msgid "COPYRIGHT FILE EXAMPLES"
+msgstr "EXEMPLOS DE FICHEIRO DE COPYRIGHT"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1426
+msgid ""
+"Here is an example for the F<debian/copyright> file which initiates "
+"automatic repackaging of the upstream tarball into I<< <spkg>_<oversion>."
+"orig.tar.gz >> (In F<debian/copyright>, the B<Files-Excluded> and B<Files-"
+"Excluded->I<component> stanzas are a part of the first paragraph and there "
+"is a blank line before the following paragraphs which contain B<Files> and "
+"other stanzas.):"
+msgstr ""
+"Aqui está um exemplo para o ficheiro F<debian/copyright> que inicializa re-"
+"empacotamento automático de tarball de autor em I<< <spkg>_<oversion>.orig."
+"tar.gz >> (Em F<debian/copyright>, as estrofes B<Files-Excluded> e B<Files-"
+"Excluded->I<component> são um par do primeiro parágrafo e existe uma linha "
+"vazia antes dos seguintes parágrafos que contêm B<Files> e outras estrofes.):"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1433
+#, no-wrap
+msgid ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+msgstr ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1440 ../scripts/uscan.pl:1461
+#, no-wrap
+msgid ""
+" Files: *\n"
+" Copyright: ...\n"
+" ...\n"
+"\n"
+msgstr ""
+" Files: *\n"
+" Copyright: ...\n"
+" ...\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1444
+msgid ""
+"Here is another example for the F<debian/copyright> file which initiates "
+"automatic repackaging of the multiple upstream tarballs into I<< "
+"<spkg>_<oversion>.orig.tar.gz >> and I<< <spkg>_<oversion>.orig-bar.tar.gz "
+">>:"
+msgstr ""
+"Aqui está outro exemplo para o ficheiro F<debian/copyright> que inicializa o "
+"re-empacotamento automático de múltiplos tarballs de autor em into I<< "
+"<spkg>_<oversion>.orig.tar.gz >> e I<< <spkg>_<oversion>.orig-bar.tar.gz >>:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1449
+#, no-wrap
+msgid ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+" Files-Excluded-bar: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+msgstr ""
+" Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\n"
+" Files-Excluded: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+" Files-Excluded-bar: exclude-this\n"
+" exclude-dir\n"
+" */exclude-dir\n"
+" .*\n"
+" */js/jquery.js\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1465
+msgid "See mk-origtargz(1)."
+msgstr "Veja mk-origtargz(1)."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1467
+msgid "KEYRING FILE EXAMPLES"
+msgstr "EXEMPLOS DE FICHEIRO DE CHAVEIRO"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1469
+msgid ""
+"Let's assume that the upstream \"B<< uscan test key (no secret) "
+"<none@debian.org> >>\" signs its package with a secret OpenPGP key and "
+"publishes the corresponding public OpenPGP key. This public OpenPGP key can "
+"be identified in 3 ways using the hexadecimal form."
+msgstr ""
+"Vamos assumir que o autor \"B<< uscan test key (no secret) <none@debian."
+"org> >>\" assina o seu pacote com uma chave OpenPGP secreta e publica a "
+"chave OpenPGP pública correspondente. Esta chave OpenPGP pública pode ser "
+"identificada de 3 maneiras usando o formato hexadecimal."
+
+#. type: =item
+#: ../scripts/uscan.pl:1476
+msgid ""
+"* The fingerprint as the 20 byte data calculated from the public OpenPGP "
+"key. E. g., 'B<CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF>'"
+msgstr ""
+"* A impressão digital tem os dados de 20 bytes calculados a partir da chave "
+"OpenPGP pública. Ex. 'B<CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF>'"
+
+#. type: =item
+#: ../scripts/uscan.pl:1479
+msgid ""
+"* The long keyid as the last 8 byte data of the fingerprint. E. g., "
+"'B<C77E2D6872543FAF>'"
+msgstr ""
+"* O id de chave longo tem os dados dos últimos 8 bytes da impressão digital. "
+"Ex. 'B<C77E2D6872543FAF>'"
+
+#. type: =item
+#: ../scripts/uscan.pl:1482
+msgid ""
+"* The short keyid is the last 4 byte data of the fingerprint. E. g., "
+"'B<72543FAF>'"
+msgstr ""
+"* O id de chave curto tem os dados dos últimos 4 bytes da impressão digital. "
+"Ex. 'B<72543FAF>'"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1487
+msgid ""
+"Considering the existence of the collision attack on the short keyid, the "
+"use of the long keyid is recommended for receiving keys from the public key "
+"servers. You must verify the downloaded OpenPGP key using its full "
+"fingerprint value which you know is the trusted one."
+msgstr ""
+"Considerando a existência de ataque de colisão no id de chave curto, é "
+"recomendado o uso do id de chave longo para receber chaves a partir de "
+"servidores de chaves públicas. Você deve verificar a chave OpenPGP "
+"descarregada usando o seu valor completo de impressão digital que sabe que é "
+"o de confiança."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1492
+msgid ""
+"The armored keyring file F<debian/upstream/signing-key.asc> can be created "
+"by using the B<gpg> (or B<gpg2>) command as follows."
+msgstr ""
+"O ficheiros de chaveiro blindado F<debian/upstream/signing-key.asc> pode ser "
+"criado ao usar o comando B<gpg> (ou B<gpg2>) como se segue:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1495
+#, no-wrap
+msgid ""
+" $ gpg --recv-keys \"C77E2D6872543FAF\"\n"
+" ...\n"
+" $ gpg --finger \"C77E2D6872543FAF\"\n"
+" pub 4096R/72543FAF 2015-09-02\n"
+" Key fingerprint = CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF\n"
+" uid uscan test key (no secret) <none@debian.org>\n"
+" sub 4096R/52C6ED39 2015-09-02\n"
+" $ cd path/to/<upkg>-<uversion>\n"
+" $ mkdir -p debian/upstream\n"
+" $ gpg --export --export-options export-minimal --armor \\\n"
+" 'CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF' \\\n"
+" >debian/upstream/signing-key.asc\n"
+"\n"
+msgstr ""
+" $ gpg --recv-keys \"C77E2D6872543FAF\"\n"
+" ...\n"
+" $ gpg --finger \"C77E2D6872543FAF\"\n"
+" pub 4096R/72543FAF 2015-09-02\n"
+" Key fingerprint = CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF\n"
+" uid uscan test key (no secret) <none@debian.org>\n"
+" sub 4096R/52C6ED39 2015-09-02\n"
+" $ cd path/to/<upkg>-<uversion>\n"
+" $ mkdir -p debian/upstream\n"
+" $ gpg --export --export-options export-minimal --armor \\\n"
+" 'CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF' \\\n"
+" >debian/upstream/signing-key.asc\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1508
+msgid ""
+"The binary keyring files, F<debian/upstream/signing-key.pgp> and F<debian/"
+"upstream-signing-key.pgp>, are still supported but deprecated."
+msgstr ""
+"Os ficheiros chaveiro binário, F<debian/upstream/signing-key.pgp> e F<debian/"
+"upstream-signing-key.pgp>, ainda são suportados mas estão descontinuados."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1511
+msgid ""
+"If a group of developers sign the package, you need to list fingerprints of "
+"all of them in the argument for B<gpg --export ...> to make the keyring to "
+"contain all OpenPGP keys of them."
+msgstr ""
+"Se um grupo de desenvolvedores assinarem o pacote, você precisa de listar as "
+"impressões digitais de todos eles no argumento para B<gpg --export ...> para "
+"fazer o chaveiro que contém todas as chaves OpenPGP deles."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1515
+msgid ""
+"Sometimes you may wonder who made a signature file. You can get the public "
+"keyid used to create the detached signature file F<foo-2.0.tar.gz.asc> by "
+"running B<gpg> as:"
+msgstr ""
+"Por vezes você pode perguntar quem foi que fez o ficheiro de assinatura. "
+"Você pode obter o id de chave pública usado para criar o ficheiro de "
+"assinatura desanexado F<foo-2.0.tar.gz.asc> ao correr B<gpg> como:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1519
+#, no-wrap
+msgid ""
+" $ gpg -vv foo-2.0.tar.gz.asc\n"
+" gpg: armor: BEGIN PGP SIGNATURE\n"
+" gpg: armor header: Version: GnuPG v1\n"
+" :signature packet: algo 1, keyid C77E2D6872543FAF\n"
+" \tversion 4, created 1445177469, md5len 0, sigclass 0x00\n"
+" \tdigest algo 2, begin of digest 7a c7\n"
+" \thashed subpkt 2 len 4 (sig created 2015-10-18)\n"
+" \tsubpkt 16 len 8 (issuer key ID C77E2D6872543FAF)\n"
+" \tdata: [4091 bits]\n"
+" gpg: assuming signed data in `foo-2.0.tar.gz'\n"
+" gpg: Signature made Sun 18 Oct 2015 11:11:09 PM JST using RSA key ID 72543FAF\n"
+" ...\n"
+"\n"
+msgstr ""
+" $ gpg -vv foo-2.0.tar.gz.asc\n"
+" gpg: armor: BEGIN PGP SIGNATURE\n"
+" gpg: armor header: Version: GnuPG v1\n"
+" :signature packet: algo 1, keyid C77E2D6872543FAF\n"
+" \tversion 4, created 1445177469, md5len 0, sigclass 0x00\n"
+" \tdigest algo 2, begin of digest 7a c7\n"
+" \thashed subpkt 2 len 4 (sig created 2015-10-18)\n"
+" \tsubpkt 16 len 8 (issuer key ID C77E2D6872543FAF)\n"
+" \tdata: [4091 bits]\n"
+" gpg: assuming signed data in `foo-2.0.tar.gz'\n"
+" gpg: Signature made Sun 18 Oct 2015 11:11:09 PM JST using RSA key ID 72543FAF\n"
+" ...\n"
+"\n"
+
+#. type: =head1
+#: ../scripts/uscan.pl:1532
+msgid "COMMANDLINE OPTIONS"
+msgstr "OPÇÕES DE LINHA DE COMANDOS"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1534
+msgid "For the basic usage, B<uscan> does not require to set these options."
+msgstr ""
+"Para a utilização básica, o B<uscan> não requer que se defina estas opções."
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1548
+#, no-wrap
+msgid ""
+" uscan --conf-file test.conf --verbose\n"
+"\n"
+msgstr ""
+" uscan --conf-file test.conf --verbose\n"
+"\n"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1552
+#, no-wrap
+msgid ""
+" uscan --conf-file +test.conf --verbose\n"
+"\n"
+msgstr ""
+" uscan --conf-file +test.conf --verbose\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:1563
+msgid "B<--no-verbose>"
+msgstr "B<--no-verbose>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1565
+msgid "Don't report verbose information. (default)"
+msgstr "Não reporta informação detalhada. (predefinição)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1569
+msgid "Report verbose information."
+msgstr "Reporta informação detalhada."
+
+#. type: =item
+#: ../scripts/uscan.pl:1571
+msgid "B<--debug>, B<-vv>"
+msgstr "B<--debug>, B<-vv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1573
+msgid "Report verbose information and some internal state values."
+msgstr "Reporta informação detalhada e alguns valores de estados internos."
+
+#. type: =item
+#: ../scripts/uscan.pl:1575
+msgid "B<--extra-debug>, B<-vvv>"
+msgstr "B<--extra-debug>, B<-vvv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1577
+msgid ""
+"Report verbose information including the downloaded web pages as processed "
+"to STDERR for debugging."
+msgstr ""
+"Reporta informação detalhada incluindo as páginas web descarregadas como "
+"processadas pelo STDERR para depuração."
+
+#. type: =item
+#: ../scripts/uscan.pl:1580
+msgid "B<--dehs>"
+msgstr "B<--dehs>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1582
+msgid ""
+"Send DEHS style output (XML-type) to STDOUT, while send all other uscan "
+"output to STDERR."
+msgstr ""
+"Envia resultados ao estilo DEHS (tipo-XML) para o STDOUT, enquanto envia "
+"todos os outros resultados do uscan para o STDERR."
+
+#. type: =item
+#: ../scripts/uscan.pl:1585
+msgid "B<--no-dehs>"
+msgstr "B<--no-dehs>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1587
+msgid "Use only traditional uscan output format. (default)"
+msgstr ""
+"Usa apenas o formato de resultados tradicional do uscan. (predefinição)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1589
+msgid "B<--download>, B<-d>"
+msgstr "B<--download>, B<-d>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1591
+msgid "Download the new upstream release. (default)"
+msgstr "Descarrega o novo lançamento original do autor. (predefinição)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1593
+msgid "B<--force-download>, B<-dd>"
+msgstr "B<--force-download>, B<-dd>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1595
+msgid ""
+"Download the new upstream release even if up-to-date. (may not overwrite the "
+"local file)"
+msgstr ""
+"Descarrega o novo lançamento original do autor mesmo que actualizado. (pode "
+"não sobrescrever o ficheiro local)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1597
+msgid "B<--overwrite-download>, B<-ddd>"
+msgstr "B<--overwrite-download>, B<-ddd>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1599
+msgid ""
+"Download the new upstream release even if up-to-date. (may overwrite the "
+"local file)"
+msgstr ""
+"Descarrega o novo lançamento original do autor mesmo que actualizado. (pode "
+"sobrescrever o ficheiro local)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1601
+msgid "B<--no-download>, B<--nodownload>"
+msgstr "B<--no-download>, B<--nodownload>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1603
+msgid "Don't download and report information."
+msgstr "Não descarrega e reporta informação."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1605
+msgid "Previously downloaded tarballs may be used."
+msgstr "Os tarballs descarregados anteriormente podem ser usados."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1607
+msgid "Change default to B<--skip-signature>."
+msgstr "Muda a predefinição para B<--skip-signature>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1609
+msgid "B<--signature>"
+msgstr "B<--signature>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1611
+msgid "Download signature. (default)"
+msgstr "Descarrega a assinatura. (predefinição)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1613
+msgid "B<--no-signature>"
+msgstr "B<--no-signature>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1615
+msgid "Don't download signature but verify if already downloaded."
+msgstr "Não descarrega a assinatura mas verifica se já estiver descarregada."
+
+#. type: =item
+#: ../scripts/uscan.pl:1617
+msgid "B<--skip-signature>"
+msgstr "B<--skip-signature>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1619
+msgid "Don't bother download signature nor verifying signature."
+msgstr "Não se preocupa em descarregar a assinatura nem em verifica-la."
+
+#. type: =item
+#: ../scripts/uscan.pl:1621
+msgid "B<--safe>, B<--report>"
+msgstr "B<--safe>, B<--report>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1623
+msgid ""
+"Avoid running unsafe scripts by skipping both the repacking of the "
+"downloaded package and the updating of the new source tree."
+msgstr ""
+"Evita correr scripts não-seguros ao saltar tanto o re-empacotamento do "
+"pacote descarregado e também a actualização da nova árvore fonte."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1626
+msgid "Change default to B<--no-download> and B<--skip-signature>."
+msgstr "Muda a predefinição para B<--no-download> e B<--skip-signature>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1628
+msgid ""
+"When the objective of running B<uscan> is to gather the upstream package "
+"status under the security conscious environment, please make sure to use "
+"this option."
+msgstr ""
+"Quando o objectivo de correr B<uscan> é obter o estado do pacote do autor "
+"sob um ambiente de segurança consciente, por favor certifique-se de usar "
+"esta opção."
+
+#. type: =item
+#: ../scripts/uscan.pl:1631
+msgid "B<--report-status>"
+msgstr "B<--report-status>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1633
+msgid "This is equivalent of setting \"B<--verbose --safe>\"."
+msgstr "Isto é o equivalente a definir \"B<--verbose --safe>\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:1635
+msgid "B<--download-version> I<version>"
+msgstr "B<--download-version> I<version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1637
+msgid ""
+"Specify the I<version> which the upstream release must match in order to be "
+"considered, rather than using the release with the highest version. (a best "
+"effort feature)"
+msgstr ""
+"Especifica a I<version> à qual o lançamento do autor tem de corresponder de "
+"modo a ser considerado, em vez de usar o lançamento com a versão mais alta. "
+"(uma funcionalidade de melhor esforço)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1641
+msgid "B<--download-debversion> I<version>"
+msgstr "B<--download-debversion> I<version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1643
+msgid ""
+"Specify the Debian package version to download the corresponding upstream "
+"release version. The B<dversionmangle> and B<uversionmangle> rules are "
+"considered. (a best effort feature)"
+msgstr ""
+"Especifica a versão de pacote Debian para descarregar a versão de lançamento "
+"do autor correspondente. As regras B<dversionmangle> e B<uversionmangle> são "
+"consideradas. (uma funcionalidade de melhor esforço)"
+
+#. type: =item
+#: ../scripts/uscan.pl:1647
+msgid "B<--download-current-version>"
+msgstr "B<--download-current-version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1649
+msgid "Download the currently packaged version. (a best effort feature)"
+msgstr ""
+"Descarrega a versão actualmente empacotada. (uma funcionalidade de melhor "
+"esforço)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1654 ../scripts/uscan.pl:1658
+msgid ""
+"See the below section L<Directory name checking> for an explanation of this "
+"option."
+msgstr ""
+"Veja a secção em baixo L<Verificação do nome do directório> para uma "
+"explicação desta opção."
+
+#. type: =item
+#: ../scripts/uscan.pl:1660
+msgid ""
+"B<--destdir> I<path> Normally, B<uscan> changes its internal current "
+"directory to the package's source directory where the F<debian/> is "
+"located. Then the destination directory for the downloaded tarball and "
+"other files is set to the parent directory F<../> from this internal current "
+"directory."
+msgstr ""
+"Normalmente B<--destdir> I<path>, faz B<uscan> mudar o seu directório actual "
+"interno para o directório fonte do pacote onde está localizado F<debian/>, "
+"Então o directório de destino para o tarball descarregado e outros ficheiros "
+"é definido para o directório pai F<../> a partir deste directório actual "
+"interno."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1666
+msgid ""
+"This default destination directory can be overridden by setting B<--destdir> "
+"option to a particular I<path>. If this I<path> is a relative path, the "
+"destination directory is determined in relative to the internal current "
+"directory of B<uscan> execution. If this I<path> is a absolute path, the "
+"destination directory is set to I<path> irrespective of the internal current "
+"directory of B<uscan> execution."
+msgstr ""
+"Este directório de destino predefinido pode ser sobreposto ao definir a "
+"opção B<--destdir> para um I<path> particular. Se este I<path> for um "
+"caminho relativo, o directório de destino é determinado relativamente ao "
+"directório actual interno da execução do B<uscan>. Se este I<path> for um "
+"caminho absoluto, o directório de destino é definido para I<path> não "
+"respetivo ao directório actual interno da execução do B<uscan>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1673
+msgid ""
+"The above is true not only for the simple B<uscan> run in the single source "
+"tree but also for the advanced scanning B<uscan> run with subdirectories "
+"holding multiple source trees."
+msgstr ""
+"O de cima é verdade não apenas para a execução simples do B<uscan> na árvore "
+"fonte única, mas também para a execução de sondagem avançada do B<uscan> com "
+"sub-directórios a deterem várias árvores fonte."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1677
+msgid ""
+"One exception is when B<--watchfile> and B<--package> are used together. "
+"For this case, the internal current directory of B<uscan> execution and the "
+"default destination directory are set to the current directory F<.> where "
+"B<uscan> is started. The default destination directory can be overridden by "
+"setting B<--destdir> option as well."
+msgstr ""
+"Uma excepção é quando B<--watchfile> e B<--package> são usados juntamente. "
+"Para este caso, o directório actual interno da execução do B<uscan> e o "
+"directório de destino predefinido são definidos para o directório actual F<."
+"> onde o B<uscan> é iniciado. O directório de destino predefinido também "
+"pode ser sobreposto ao definir a opção B<--destdir>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1685
+msgid ""
+"Specify the name of the package to check for rather than examining F<debian/"
+"changelog>; this requires the B<--upstream-version> (unless a version is "
+"specified in the F<watch> file) and B<--watchfile> options as well. "
+"Furthermore, no directory scanning will be done and nothing will be "
+"downloaded. This option automatically sets B<--no-download> and B<--skip-"
+"signature>; and probably most useful in conjunction with the DEHS system "
+"(and B<--dehs>)."
+msgstr ""
+"Especifica o nome do pacote a verificar em vez de examinar F<debian/"
+"changelog>; isto requer também as opções B<--upstream-version> (a menos que "
+"seja especificada uma versão no ficheiro F<watch>) e B<--watchfile>l. Mais "
+"ainda, não será feita nenhuma sondagem de directório e nada será "
+"descarregado. Esta opção define automaticamente B<--no-download> e B<--skip-"
+"signature>; e é provavelmente muito útil em conjunto com o sistema DEHS (e "
+"B<--dehs>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1692
+msgid "B<--upstream-version> I<upstream-version>"
+msgstr "B<--upstream-version> I<upstream-version>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1694
+msgid ""
+"Specify the current upstream version rather than examine F<debian/watch> or "
+"F<debian/changelog> to determine it. This is ignored if a directory scan is "
+"being performed and more than one F<debian/watch> file is found."
+msgstr ""
+"Especifica a versão de autor actual em vez de examinar F<debian/watch> ou "
+"F<debian/changelog> para a determinar. Isto é ignorado se estiver a ser "
+"executada uma sondagem de directório e for encontrado mais do que um "
+"ficheiro F<debian/watch>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1698
+msgid "B<--watchfile> I<watchfile>"
+msgstr "B<--watchfile> I<watchfile>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1700
+msgid ""
+"Specify the I<watchfile> rather than perform a directory scan to determine "
+"it. If this option is used without B<--package>, then B<uscan> must be "
+"called from within the Debian package source tree (so that F<debian/"
+"changelog> can be found simply by stepping up through the tree)."
+msgstr ""
+"Especifica o B<watchfile> em vez de executar uma sondagem a directório para "
+"o determinar. Se esta opção for usada sem B<--package>, então B<uscan> tem "
+"de ser chamado de dentro da árvore do pacote fonte Debian (para que o "
+"F<debian/changelog> possa ser encontrado simplesmente ao caminhar dentro da "
+"árvore)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1705
+msgid ""
+"One exception is when B<--watchfile> and B<--package> are used together. "
+"B<uscan> can be called from anywhare and the internal current directory of "
+"B<uscan> execution and the default destination directory are set to the "
+"current directory F<.> where B<uscan> is started."
+msgstr ""
+"Uma excepção é quando B<--watchfile> e B<--package> são usados juntamente. O "
+"B<uscan> pode ser chamado de qualquer local e o directório actual interno da "
+"execução do B<uscan> e o directório de destino predefinido são definidos "
+"para o directório actual F<.> onde o B<uscan> é iniciado."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1710
+msgid "See more in the B<--destdir> explanation."
+msgstr "Veja mais na explicação de B<--destdir>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1712
+msgid "B<--bare>"
+msgstr "B<--bare>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1714
+msgid ""
+"Disable all site specific special case codes to perform URL redirections and "
+"page content alterations."
+msgstr ""
+"Desactiva todos os códigos de casos especiais específicos do sítio para "
+"executar redirecionamentos de URL e alterações do conteúdo da página."
+
+#. type: =item
+#: ../scripts/uscan.pl:1717
+msgid "B<--http-header>"
+msgstr "B<--http-header>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1719
+msgid ""
+"Add specified header in HTTP requests for matching url. This option can be "
+"used more than one time, values must be in the form \"baseUrl@Name=value. "
+"Example:"
+msgstr ""
+"Adiciona o cabeçalho especificado em pedidos HTTP para o url correspondente. "
+"Esta opção pode ser usada mais do que uma vez, os valores têm de estar no "
+"formato \"baseUrl@Name=value. Exemplo:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1722
+#, no-wrap
+msgid ""
+" uscan --http-header https://example.org@My-Token=qwertyuiop\n"
+"\n"
+msgstr ""
+" uscan --http-header https://example.org@My-Token=qwertyuiop\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1724
+msgid "Security:"
+msgstr "Segurança:"
+
+#. type: =item
+#: ../scripts/uscan.pl:1728
+msgid ""
+"The given I<baseUrl> must exactly match the base url before '/'. Examples:"
+msgstr ""
+"O I<baseUrl> dado tem de corresponder exactamente ao url base antes de '/'. "
+"Exemplos:"
+
+#. type: verbatim
+#: ../scripts/uscan.pl:1731
+#, no-wrap
+msgid ""
+" | --http-header value | Good for | Never used |\n"
+" +------------------------------------+-----------------------------+------------+\n"
+" | https://example.org.com@Hdr=Value | https://example.org.com/... | |\n"
+" | https://example.org.com/@Hdr=Value | | X |\n"
+" | https://e.com:1879@Hdr=Value | https://e.com:1879/... | |\n"
+" | https://e.com:1879/dir@Hdr=Value | https://e.com:1879/dir/... | |\n"
+" | https://e.com:1879/dir/@Hdr=Value | | X |\n"
+"\n"
+msgstr ""
+" | --http-header value | Good for | Never used |\n"
+" +------------------------------------+-----------------------------+------------+\n"
+" | https://example.org.com@Hdr=Value | https://example.org.com/... | |\n"
+" | https://example.org.com/@Hdr=Value | | X |\n"
+" | https://e.com:1879@Hdr=Value | https://e.com:1879/... | |\n"
+" | https://e.com:1879/dir@Hdr=Value | https://e.com:1879/dir/... | |\n"
+" | https://e.com:1879/dir/@Hdr=Value | | X |\n"
+"\n"
+
+#. type: =item
+#: ../scripts/uscan.pl:1739
+msgid ""
+"It is strongly recommended to not use this feature to pass a secret token "
+"over unciphered connection I<(http://)>"
+msgstr ""
+"É fortemente recomendado não usar esta funcionalidade para passar um "
+"testemunho secreto por uma ligação não cifrada I<(http://)>"
+
+#. type: =item
+#: ../scripts/uscan.pl:1742
+msgid ""
+"You can use C<USCAN_HTTP_HEADER> variable (in C<~/.devscripts>) to hide "
+"secret token from scripts"
+msgstr ""
+"Você pode usar a variável C<USCAN_HTTP_HEADER> (em C<~/.devscripts>) para "
+"esconder dos scripts testemunhos secretos."
+
+#. type: =item
+#: ../scripts/uscan.pl:1747
+msgid "B<--no-exclusion>"
+msgstr "B<--no-exclusion>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1749
+msgid ""
+"Don't automatically exclude files mentioned in F<debian/copyright> field "
+"B<Files-Excluded>."
+msgstr ""
+"Não exclui automaticamente ficheiros mencionados em F<debian/copyright> no "
+"campo B<Files-Excluded>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1751
+msgid "B<--pasv>"
+msgstr "B<--pasv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1753
+msgid "Force PASV mode for FTP connections."
+msgstr "Força modo PASV para ligações FTP."
+
+#. type: =item
+#: ../scripts/uscan.pl:1755
+msgid "B<--no-pasv>"
+msgstr "B<--no-pasv>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1757
+msgid "Don't use PASV mode for FTP connections."
+msgstr "Não usa modo PASV para ligações FTP."
+
+#. type: TP
+#: ../scripts/uscan.pl:1759 ../scripts/uupdate.1:83
+#, no-wrap
+msgid "B<--no-symlink>"
+msgstr "B<--no-symlink>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1761
+msgid "Don't rename nor repack upstream tarball."
+msgstr "Não renomeia nem re-empacota o tarball do autor."
+
+#. type: =item
+#: ../scripts/uscan.pl:1763
+msgid "B<--timeout> I<N>"
+msgstr "B<--timeout> I<N>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1765
+msgid "Set timeout to I<N> seconds (default 20 seconds)."
+msgstr "Define o tempo limite para I<N> segundos (predefinição 20 segundos)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1767
+msgid "B<--user-agent>, B<--useragent>"
+msgstr "B<--user-agent>, B<--useragent>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1769
+msgid "Override the default user agent header."
+msgstr "Sobrepõe o cabeçalho de agente de utilizador predefinido."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1773
+msgid "Give brief usage information."
+msgstr "Mostra breve informação de utilização."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1781
+msgid ""
+"B<uscan> also accepts following options and passes them to B<mk-origtargz>:"
+msgstr ""
+"B<uscan> também aceita as seguintes opções e passa-as para o B<mk-origtargz>:"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1787
+msgid ""
+"Make B<orig.tar.gz> (with the appropriate extension) symlink to the "
+"downloaded files. (This is the default behavior.)"
+msgstr ""
+"Cria um link simbólico B<orig.tar.gz> (coma extensão apropriada) para os "
+"ficheiros descarregados. (Este é o comportamento predefinido.)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1792
+msgid "Instead of symlinking as described above, copy the downloaded files."
+msgstr ""
+"Em vez de criar links simbólicos como descrito em cima, copia os ficheiros "
+"descarregados."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1796
+msgid "Instead of symlinking as described above, rename the downloaded files."
+msgstr ""
+"Em vez de criar links simbólicos como descrito em cima, renomeia os "
+"ficheiros descarregados."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1800
+msgid ""
+"After having downloaded an lzma tar, xz tar, bzip tar, gz tar, zip, jar, "
+"xpi, zstd archive, repack it to the specified compression (see B<--"
+"compression>)."
+msgstr ""
+"Após ter descarregado um arquivo lzma tar, xz tar, bzip tar, gz tar, zip, "
+"jar, xpi, zstd, re-empacota-o para a compressão especificada (veja B<--"
+"compression>)."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1803
+msgid ""
+"The unzip package must be installed in order to repack zip and jar archives, "
+"the mozilla-devscripts package must be installed to repack xpi archives, the "
+"xz-utils package must be installed to repack lzma or xz tar archives, and "
+"zstd must be installed to repack zstd archives."
+msgstr ""
+"O pacote unzip tem de estar instalado para se poder empacotar arquivos zip e "
+"jar, o pacote mozilla-devscripts tem de estar instalado para se empacotar "
+"arquivos xpi archives, o pacote xz-utils tem de estar instalado para se "
+"empacotar arquivos lzma ou xz tar, e zstd tem de estar instalado para se "
+"empacotar arquivos zstd."
+
+#. type: =item
+#: ../scripts/uscan.pl:1808
+msgid "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> ]"
+msgstr "B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> ]"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1810
+msgid ""
+"In the case where the upstream sources are repacked (either because B<--"
+"repack> option is given or F<debian/copyright> contains the field B<Files-"
+"Excluded>), it is possible to control the compression method via the "
+"parameter. The default is B<gzip> for normal tarballs, and B<xz> for "
+"tarballs generated directly from the git repository."
+msgstr ""
+"No caso em que as fontes do autor são re-empacotadas (seja porque é dada a "
+"opção B<--repack> ou se F<debian/copyright> conter o campo B<Files-"
+"Excluded>), é possível controlar o método de compressão via parâmetro. O "
+"predefinido é B<gzip> para tarballs normais, e B<xz> para tarballs gerados "
+"directamente a partir do repositório git."
+
+#. type: =item
+#: ../scripts/uscan.pl:1816
+msgid "B<--copyright-file> I<copyright-file>"
+msgstr "B<--copyright-file> I<copyright-file>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1818
+msgid ""
+"Exclude files mentioned in B<Files-Excluded> in the given I<copyright-"
+"file>. This is useful when running B<uscan> not within a source package "
+"directory."
+msgstr ""
+"Exclui ficheiros mencionados em B<Files-Excluded> no I<copyright-file> dado. "
+"Isto é útil quando se correr B<uscan> não dentro do directório do pacote "
+"fonte."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1823
+msgid "DEVSCRIPT CONFIGURATION VARIABLES"
+msgstr "VARIÁVEIS DE CONFIGURAÇÃO DO DEVSCRIPT"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1825
+msgid ""
+"For the basic usage, B<uscan> does not require to set these configuration "
+"variables."
+msgstr ""
+"Para a utilização básica, o B<uscan> não requer que se defina estas "
+"variáveis de configuração."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1828
+msgid ""
+"The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are "
+"sourced by a shell in that order to set configuration variables. These may "
+"be overridden by command line options. Environment variable settings are "
+"ignored for this purpose. If the first command line option given is B<--"
+"noconf>, then these files will not be read. The currently recognized "
+"variables are:"
+msgstr ""
+"Os dois ficheiros de configuração F</etc/devscripts.conf> e F<~/.devscripts> "
+"são fonte para uma shell nessa ordem para definir variáveis de configuração. "
+"Estas pode ser sobrepostas por opções de linha de comandos. As definições de "
+"variáveis de ambiente são ignoradas para este objectivo. Se a primeira opção "
+"de linha de comandos dada for B<--noconf>, então estes ficheiros não serão "
+"lidos. As variáveis actualmente reconhecidas são:"
+
+#. type: =item
+#: ../scripts/uscan.pl:1837
+msgid "B<USCAN_DOWNLOAD>"
+msgstr "B<USCAN_DOWNLOAD>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1839
+msgid "Download or report only:"
+msgstr "Apenas descarrega ou reporta:"
+
+#. type: =item
+#: ../scripts/uscan.pl:1843
+msgid ""
+"B<no>: equivalent to B<--no-download>, newer upstream files will not be "
+"downloaded."
+msgstr ""
+"B<no>: equivalente a B<--no-download>, novos ficheiros do autor não serão "
+"descarregados."
+
+#. type: =item
+#: ../scripts/uscan.pl:1846
+msgid ""
+"B<yes>: equivalent to B<--download>, newer upstream files will be "
+"downloaded. This is the default behavior."
+msgstr ""
+"B<yes>: equivalente a B<--download>, os novos ficheiros do autor serão "
+"descarregados. Este é o comportamento predefinido."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1849
+msgid "See also B<--force-download> and B<--overwrite-download>."
+msgstr "Veja também B<--force-download> e B<--overwrite-download>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1853
+msgid "B<USCAN_SAFE>"
+msgstr "B<USCAN_SAFE>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1855
+msgid ""
+"If this is set to B<yes>, then B<uscan> avoids running unsafe scripts by "
+"skipping both the repacking of the downloaded package and the updating of "
+"the new source tree; this is equivalent to the B<--safe> options; this also "
+"sets the default to B<--no-download> and B<--skip-signature>."
+msgstr ""
+"Se isto estiver definido para B<yes>, então o B<uscan> evita correr scripts "
+"não seguros ao saltar ambos o re-empacotar do pacote descarregado e a "
+"actualização da nova árvore fonte; isto é o equivalente às opções B<--safe>, "
+"isto também define a predefinição para B<--no-download> e B<--skip-"
+"signature>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1860
+msgid "B<USCAN_PASV>"
+msgstr "B<USCAN_PASV>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1862
+msgid ""
+"If this is set to yes or no, this will force FTP connections to use PASV "
+"mode or not to, respectively. If this is set to default, then B<Net::FTP(3)> "
+"makes the choice (primarily based on the B<FTP_PASSIVE> environment "
+"variable)."
+msgstr ""
+"Se isto estiver definido para yes ou no, isto irá forçar as ligações FTP a "
+"usar ou não o modo PASV, respetivamente. Se isto estiver definido para "
+"predefinição, então B<Net::FTP(3)> faz a escolha (baseada principalmente na "
+"variável de ambiente B<FTP_PASSIVE>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1866
+msgid "B<USCAN_TIMEOUT>"
+msgstr "B<USCAN_TIMEOUT>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1868
+msgid ""
+"If set to a number I<N>, then set the timeout to I<N> seconds. This is "
+"equivalent to the B<--timeout> option."
+msgstr ""
+"Se definido para um número I<N>, então define o tempo limite para I<N> "
+"segundos. Isto é o equivalente á opção B<--timeout>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1871
+msgid "B<USCAN_SYMLINK>"
+msgstr "B<USCAN_SYMLINK>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1873
+msgid ""
+"If this is set to no, then a I<pkg>_I<version>B<.orig.tar.{gz|bz2|lzma|xz}> "
+"symlink will not be made (equivalent to the B<--no-symlink> option). If it "
+"is set to B<yes> or B<symlink>, then the symlinks will be made. If it is set "
+"to B<rename>, then the files are renamed (equivalent to the B<--rename> "
+"option)."
+msgstr ""
+"Se isto estiver definido para no, então não será criado um link simbólico "
+"I<pkg>_I<version>B<.orig.tar.{gz|bz2|lzma|xz}> (equivalente à opção B<--no-"
+"symlink>). Se estiver definido para B<yes> ou B<symlink>, então o link "
+"simbólico será criado. Se estiver definido para B<rename>, então os "
+"ficheiros são renomeados (equivalente à opção B<--rename>)."
+
+#. type: =item
+#: ../scripts/uscan.pl:1878
+msgid "B<USCAN_DEHS_OUTPUT>"
+msgstr "B<USCAN_DEHS_OUTPUT>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1880
+msgid ""
+"If this is set to B<yes>, then DEHS-style output will be used. This is "
+"equivalent to the B<--dehs> option."
+msgstr ""
+"Se isto estiver definido para B<yes>, então será usado o estilo DEHS para "
+"resultados. Isto é equivalente à opção B<--dehs>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1883
+msgid "B<USCAN_VERBOSE>"
+msgstr "B<USCAN_VERBOSE>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1885
+msgid ""
+"If this is set to B<yes>, then verbose output will be given. This is "
+"equivalent to the B<--verbose> option."
+msgstr ""
+"Se isto estiver definido para B<yes>, então serão dados resultados "
+"detalhados. Isto é equivalente à opção B<--verbose>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1888
+msgid "B<USCAN_USER_AGENT>"
+msgstr "B<USCAN_USER_AGENT>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1890
+msgid ""
+"If set, the specified user agent string will be used in place of the "
+"default. This is equivalent to the B<--user-agent> option."
+msgstr ""
+"Se definida, a string de agente de utilizador especificada será usada no "
+"lugar da predefinida. Isto é equivalente à opção B<--user-agent>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1893
+msgid "B<USCAN_DESTDIR>"
+msgstr "B<USCAN_DESTDIR>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1895
+msgid ""
+"If set, the downloaded files will be placed in this directory. This is "
+"equivalent to the B<--destdir> option."
+msgstr ""
+"Se definido, os ficheiros descarregados serão colocados neste directório. "
+"Isto é equivalente à opção B<--destdir>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1898
+msgid "B<USCAN_REPACK>"
+msgstr "B<USCAN_REPACK>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1900
+msgid ""
+"If this is set to yes, then after having downloaded a bzip tar, lzma tar, xz "
+"tar, zip or zstd archive, uscan will repack it to the specified compression "
+"(see B<--compression>). This is equivalent to the B<--repack> option."
+msgstr ""
+"Se isto estiver definido para yes, então após ter descarregado um arquivo "
+"bzip tar, lzma tar, xz tar, zip ou zstd, o uscan irá re-empacota-lo para a "
+"compressão especificada (veja B<--compression>). Isto é equivalente à opção "
+"B<--repack>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1904
+msgid "B<USCAN_EXCLUSION>"
+msgstr "B<USCAN_EXCLUSION>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1906
+msgid ""
+"If this is set to no, files mentioned in the field B<Files-Excluded> of "
+"F<debian/copyright> will be ignored and no exclusion of files will be "
+"tried. This is equivalent to the B<--no-exclusion> option."
+msgstr ""
+"Se isto estiver definido para no, os ficheiros mencionados no campo B<Files-"
+"Excluded> de F<debian/copyright> serão ignorados e não será tentada exclusão "
+"de ficheiros. Isto é o equivalente à opção B<--no-exclusion>."
+
+#. type: =item
+#: ../scripts/uscan.pl:1910
+msgid "B<USCAN_HTTP_HEADER>"
+msgstr "B<USCAN_HTTP_HEADER>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1912
+msgid ""
+"If set, the specified http header will be used if URL match. This is "
+"equivalent to B<--http-header> option."
+msgstr ""
+"Se definido, o cabeçalho http especificado será usado em correspondência de "
+"URL. Isto é equivalente à opção B<--http-header>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1919
+msgid ""
+"The exit status gives some indication of whether a newer version was found "
+"or not; one is advised to read the output to determine exactly what happened "
+"and whether there were any warnings to be noted."
+msgstr ""
+"O estado de saída dá alguma indicação de se foi encontrada uma nova versão "
+"ou não; você é avisado para ler os resultados para determinar exactamente o "
+"que aconteceu e se existiram avisos para serem notados."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1927
+msgid ""
+"Either B<--help> or B<--version> was used, or for some F<watch> file which "
+"was examined, a newer upstream version was located."
+msgstr ""
+"Ou foi usado B<--help> ou B<--version>, ou para algum ficheiro F<watch> que "
+"foi examinado, foi localizada uma versão de autor mais recente."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1932
+msgid ""
+"No newer upstream versions were located for any of the F<watch> files "
+"examined."
+msgstr ""
+"Nenhuma versão de autor mais recente foi localizada para nenhum dos "
+"ficheiros F<watch> examinados."
+
+#. type: =head1
+#: ../scripts/uscan.pl:1936
+msgid "ADVANCED FEATURES"
+msgstr "FUNCIONALIDADES AVANÇADAS"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1938
+msgid ""
+"B<uscan> has many other enhanced features which are skipped in the above "
+"section for the simplicity. Let's check their highlights."
+msgstr ""
+"B<uscan> tem muitas outras funcionalidades avançadas que foram saltadas na "
+"secção em cima para simplicidade. Vamos ver os seus destaques."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1941
+msgid ""
+"B<uscan> can be executed with I<path> as its argument to change the starting "
+"directory of search from the current directory to I<path> ."
+msgstr ""
+"B<uscan> pode ser executado com I<path> num argumento para mudar o "
+"directório inicial da procura a partir do directório actual para I<path> ."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1944
+msgid ""
+"If you are not sure what exactly is happening behind the scene, please "
+"enable the B<--verbose> option. If this is not enough, enable the B<--"
+"debug> option too see all the internal activities."
+msgstr ""
+"Se você não tem certeza do que está exactamente a ocorrer por trás do pano, "
+"por favor ative a opção B<--verbose>. Se isto não for suficiente, ative a "
+"opção B<--debug> para ver todas as atividades internas."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1948
+msgid ""
+"See L<COMMANDLINE OPTIONS> and L<DEVSCRIPT CONFIGURATION VARIABLES> for "
+"other variations."
+msgstr ""
+"Veja L<OPÇÕES DE LINHA DE COMANDOS> e L<VARIÁVEIS DE CONFIGURAÇÃO DO "
+"DEVSCRIPT> para outras variações."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1951
+msgid "Custom script"
+msgstr "Script personalizado"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1953
+msgid ""
+"The optional I<script> parameter in F<debian/watch> means to execute "
+"I<script> with options after processing this line if specified."
+msgstr ""
+"O parâmetro I<script> opcional em F<debian/watch> diz para executar o "
+"I<script> com opções após o processamento desta linha, se especificada."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1956
+msgid ""
+"See L<HISTORY AND UPGRADING> for how B<uscan> invokes the custom I<script>."
+msgstr ""
+"Veja L<HISTÓRIA E ACTUALIZAÇÃO> para como o B<uscan> invoca o I<script> "
+"personalizado."
+
+#. type: textblock
+#: ../scripts/uscan.pl:1958
+msgid ""
+"For compatibility with other tools such as B<git-buildpackage>, it may not "
+"be wise to create custom scripts with random behavior. In general, "
+"B<uupdate> is the best choice for the non-native package and custom scripts, "
+"if created, should behave as if B<uupdate>. For possible use case, see "
+"L<http://bugs.debian.org/748474> as an example."
+msgstr ""
+"Para compatibilidade com outras ferramentas tais como B<git-buildpackage>, "
+"pode não ser sensato criar scripts personalizados com comportamentos "
+"aleatórios. Em geral, o B<uupdate> é a melhor escolha para pacotes não-"
+"nativos e os scripts personalizados, se criados, devem comportar-se como se "
+"fossem B<uupdate>. Para possível caso de utilização, veja o exemplo "
+"L<http://bugs.debian.org/748474>."
+
+#. type: =head2
+#: ../scripts/uscan.pl:1964
+msgid "URL diversion"
+msgstr "Desvio de URL"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1966
+msgid ""
+"Some popular web sites changed their web page structure causing maintenance "
+"problems to the watch file. There are some redirection services created to "
+"ease maintenance of the watch file. Currently, B<uscan> makes automatic "
+"diversion of URL requests to the following URLs to cope with this situation."
+msgstr ""
+"Alguns sítios web populares mudaram a sua estrutura de página web causando "
+"problemas de manutenção ao ficheiro watch. Existem alguns serviços de "
+"redirecionamento criados para facilitar a manutenção do ficheiro watch. "
+"Actualmente o B<uscan> faz diversão automática de pedidos URL para os "
+"seguintes URLs para lidar com esta situação."
+
+#. type: =item
+#: ../scripts/uscan.pl:1973
+msgid "* L<http://sf.net>"
+msgstr "* L<http://sf.net>"
+
+#. type: =item
+#: ../scripts/uscan.pl:1975
+msgid "* L<http://pypi.python.org>"
+msgstr "* L<http://pypi.python.org>"
+
+#. type: textblock
+#: ../scripts/uscan.pl:1981
+msgid ""
+"Similarly to several other scripts in the B<devscripts> package, B<uscan> "
+"explores the requested directory trees looking for F<debian/changelog> and "
+"F<debian/watch> files. As a safeguard against stray files causing potential "
+"problems, and in order to promote efficiency, it will examine the name of "
+"the parent directory once it finds the F<debian/changelog> file, and check "
+"that the directory name corresponds to the package name. It will only "
+"attempt to download newer versions of the package and then perform any "
+"requested action if the directory name matches the package name. Precisely "
+"how it does this is controlled by two configuration file variables "
+"B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and "
+"their corresponding command-line options B<--check-dirname-level> and B<--"
+"check-dirname-regex>."
+msgstr ""
+"Semelhante a vários outros scripts no pacote B<devscripts>, B<uscan> explora "
+"as árvores de directórios requisitadas À procura de ficheiros F<debian/"
+"changelog> e F<debian/watch>. Como salvaguarda contra ficheiros dispersos "
+"que podem causar potenciais problemas, e de modo a promover eficiência, irá "
+"examinar o nome do directório pai assim que encontra o ficheiro F<debian/"
+"changelog>, e verifica se o nome do directório corresponde ao nome do "
+"pacote. Só irá tentar descarregar novas versões do pacote e depois executar "
+"alguma acção requerida se o nome do directório corresponder ao nome do "
+"pacote. Precisamente como faz isto é controlado por duas variáveis de "
+"ficheiro de configuração B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> e "
+"B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, e as suas opções de linha de comandos "
+"correspondentes B<--check-dirname-level> e B<--check-dirname-regex>."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2004
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for F<debian/changelog>, that is, the directory containing F<debian/"
+"changelog> is not the directory from which B<uscan> was invoked. This is "
+"the default behavior."
+msgstr ""
+"Apenas verifica o nome do directório se tivermos que mudar de directório na "
+"sua pesquisa por F<debian/changelog>, isto é, o directório que contém o "
+"F<debian/changelog> não é o directório de onde o B<uscan> foi invocado. Este "
+"é o comportamento predefinido."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2015
+msgid ""
+"The directory name is checked by testing whether the current directory name "
+"(as determined by pwd(1)) matches the regex given by the configuration file "
+"option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option B<--"
+"check-dirname-regex> I<regex>. Here regex is a Perl regex (see "
+"perlre(3perl)), which will be anchored at the beginning and the end. If "
+"regex contains a B</>, then it must match the full directory path. If not, "
+"then it must match the full directory name. If regex contains the string "
+"I<package>, this will be replaced by the source package name, as determined "
+"from the F<debian/changelog>. The default value for the regex is: "
+"I<package>B<(-.+)?>, thus matching directory names such as I<package> and "
+"I<package>-I<version>."
+msgstr ""
+"O nome de directório é verificado ao testar se o nome de directório actual "
+"(como determinado por pwd(1)) corresponde à expressão regular dada pela "
+"opção de ficheiro de configuração B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> ou pela "
+"opção de linha de comandos B<--check-dirname-regex> I<regex>. Onde regex é "
+"uma expressão regular de Perl (veja perlre(3perl)), que será ancorada no "
+"início e no fim. Se a regex conter um B</>, então tem de corresponder ao "
+"caminho de directório completo. Se não, então tem de corresponder ao nome de "
+"directório completo. Se a regex conter a string I<package>, isto será "
+"substituído pelo nome do pacote fonte, como determinado a partir de F<debian/"
+"changelog>. O valor predefinido para a regex é: I<package>B<(-.+)?>, assim "
+"correspondendo a nomes de directórios tais como I<package> e I<package>-"
+"I<version>."
+
+#. type: =head1
+#: ../scripts/uscan.pl:2026
+msgid "HISTORY AND UPGRADING"
+msgstr "HISTÓRIA E ACTUALIZAÇÃO"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2028
+msgid ""
+"This section briefly describes the backwards-incompatible F<watch> file "
+"features which have been added in each F<watch> file version, and the first "
+"version of the B<devscripts> package which understood them."
+msgstr ""
+"Esta secção descreve brevemente as funcionalidades de compatibilidade com "
+"versões anteriores do ficheiro F<watch> que foram adicionadas e cada versão "
+"de ficheiro F<watch>, e a primeira versão do pacote B<devscripts> que as "
+"compreendia."
+
+#. type: =item
+#: ../scripts/uscan.pl:2034
+msgid "Pre-version 2"
+msgstr "Pré-versão 2"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2036
+msgid ""
+"The F<watch> file syntax was significantly different in those days. Don't "
+"use it. If you are upgrading from a pre-version 2 F<watch> file, you are "
+"advised to read this manpage and to start from scratch."
+msgstr ""
+"A sintaxe do ficheiro F<watch> era significativamente diferente nesses dias. "
+"Não a use. Se você está a actualizar de um ficheiro F<watch> pré-versão 2, é "
+"aconselhado a ler este manual e a começar da estaca zero."
+
+#. type: =item
+#: ../scripts/uscan.pl:2040
+msgid "Version 2"
+msgstr "Versão 2"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2042
+msgid ""
+"B<devscripts> version 2.6.90: The first incarnation of the current style of "
+"F<watch> files. This version is also deprecated and will be rejected after "
+"the Debian 11 release."
+msgstr ""
+"B<devscripts> versão 2.6.90: A primeira encarnação do estilo actual dos "
+"ficheiros F<watch>. Esta versão está também descontinuada e será rejeitada "
+"após o lançamento de Debian 11."
+
+#. type: =item
+#: ../scripts/uscan.pl:2046
+msgid "Version 3"
+msgstr "Versão 3"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2048
+msgid ""
+"B<devscripts> version 2.8.12: Introduced the following: correct handling of "
+"regex special characters in the path part, directory/path pattern matching, "
+"version number in several parts, version number mangling. Later versions "
+"have also introduced URL mangling."
+msgstr ""
+"B<devscripts> versão 2.8.12: Introduziu o seguinte: manuseamento correcto de "
+"caracteres especiais na expressão regular na parte de caminho, "
+"correspondência e padrão de directório/caminho, número de versão em várias "
+"partes, laceração do número de versão. Versões posteriores também "
+"introduziram laceração de URL."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2053
+msgid ""
+"If you are upgrading from version 2, the key incompatibility is if you have "
+"multiple groups in the pattern part; whereas only the first one would be "
+"used in version 2, they will all be used in version 3. To avoid this "
+"behavior, change the non-version-number groups to be B<(?:> I< ...> B<)> "
+"instead of a plain B<(> I< ... > B<)> group."
+msgstr ""
+"Se você está a actualizar desde a versão 2, a incompatibilidade chave é se "
+"você tiver múltiplos grupos na parte do padrão, onde apenas a primeira seria "
+"usada na versão 2, elas serão todas usadas na versão 3. Para evitar este "
+"comportamento, altere os grupos sem-número-de-versão para B<(?:> I< ...> "
+"B<)> em vez de grupo simples B<(> I< ... > B<)>."
+
+#. type: =item
+#: ../scripts/uscan.pl:2061
+msgid ""
+"* B<uscan> invokes the custom I<script> as \"I<script> B<--upstream-version> "
+"I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\"."
+msgstr ""
+"* B<uscan> invoca o I<script> as \"I<script> B<--upstream-version> "
+"I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\" personalizado."
+
+#. type: =item
+#: ../scripts/uscan.pl:2064
+msgid ""
+"* B<uscan> invokes the standard B<uupdate> as \"B<uupdate> B<--no-symlink --"
+"upstream-version> I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\"."
+msgstr ""
+"* B<uscan> invoca o B<uupdate> as \"B<uupdate> B<--no-symlink --upstream-"
+"version> I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>\" standard."
+
+#. type: =item
+#: ../scripts/uscan.pl:2069
+msgid "Version 4"
+msgstr "Versão 4"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2071
+msgid ""
+"B<devscripts> version 2.15.10: The first incarnation of F<watch> files "
+"supporting multiple upstream tarballs."
+msgstr ""
+"B<devscripts> versão 2.15.10: A primeira encarnação de ficheiros F<watch> "
+"suportando múltiplos tarballs originais de autor."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2074
+msgid ""
+"The syntax of the watch file is relaxed to allow more spaces for readability."
+msgstr ""
+"A sintaxe do ficheiro watch é relaxada para permitir mais espaços para "
+"legibilidade."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2076
+msgid ""
+"If you have a custom script in place of B<uupdate>, you may also encounter "
+"problems updating from Version 3."
+msgstr ""
+"Se você tem um script personalizado no lugar de B<uupdate>, você pode também "
+"encontrar problemas ao actualizar a partir da Versão 3."
+
+#. type: =item
+#: ../scripts/uscan.pl:2081
+msgid ""
+"* B<uscan> invokes the custom I<script> as \"I<script> B<--upstream-version> "
+"I<version>\"."
+msgstr ""
+"* B<uscan> invoca o I<script> personalizado como \"I<script> B<--upstream-"
+"version> I<version>\"."
+
+#. type: =item
+#: ../scripts/uscan.pl:2084
+msgid ""
+"* B<uscan> invokes the standard B<uupdate> as \"B<uupdate> B<--find> B<--"
+"upstream-version> I<version>\"."
+msgstr ""
+"* B<uscan> invoca o B<uupdate> standard como \"B<uupdate> B<--find> B<--"
+"upstream-version> I<version>\"."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2089
+msgid ""
+"Restriction for B<--dehs> is lifted by redirecting other output to STDERR "
+"when it is activated."
+msgstr ""
+"A restrição para B<--dehs> é levantada ao redirecionar outros resultados "
+"para o STDERR quando está activado."
+
+#. type: textblock
+#: ../scripts/uscan.pl:2096
+msgid "dpkg(1), mk-origtargz(1), perlre(1), uupdate(1), devscripts.conf(5)"
+msgstr "dpkg(1), mk-origtargz(1), perlre(1), uupdate(1), devscripts.conf(5)"
+
+#. type: textblock
+#: ../scripts/uscan.pl:2100
+msgid ""
+"The original version of uscan was written by Christoph Lameter "
+"<clameter@debian.org>. Significant improvements, changes and bugfixes were "
+"made by Julian Gilbey <jdg@debian.org>. HTTP support was added by Piotr "
+"Roszatycki <dexter@debian.org>. The program was rewritten in Perl by Julian "
+"Gilbey. Xavier Guimard converted it in object-oriented Perl using L<Moo>."
+msgstr ""
+"A versão original do uscan foi escrita por Christoph Lameter "
+"<clameter@debian.org>. Melhoramentos significativos, alterações e correções "
+"de bugs foram feitos por Julian Gilbey <jdg@debian.org>. Suporte a HTTP foi "
+"adicionado por Piotr Roszatycki <dexter@debian.org>. O programa foi "
+"reescrito em Perl por Julian Gilbey. Xavier Guimard converte-o em Perl "
+"orientado a objectos usando L<Moo>."
+
+#. type: TH
+#: ../scripts/uupdate.1:1
+#, no-wrap
+msgid "UUPDATE"
+msgstr "UUPDATE"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:4
+msgid "uupdate - upgrade a source code package from an upstream revision"
+msgstr ""
+"uupdate - actualiza um pacote de código fonte a partir de uma revisão "
+"original do autor"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:6
+msgid "B<uupdate> [I<options>] I<new_upstream_archive> [I<version>]"
+msgstr "B<uupdate> [I<options>] I<new_upstream_archive> [I<version>]"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:8
+msgid "B<uupdate> [I<options>] B<--find>|B<-f>"
+msgstr "B<uupdate> [I<options>] B<--find>|B<-f>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:10
+msgid "B<uupdate> [I<options>] B<--patch>|B<-p> I<patch_file>"
+msgstr "B<uupdate> [I<options>] B<--patch>|B<-p> I<patch_file>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:22
+msgid ""
+"B<uupdate> modifies an existing Debian source code archive to reflect an "
+"upstream update supplied as a patch or from a wholly new source code "
+"archive. The utility needs to be invoked from the top directory of the old "
+"source code directory, and if a relative name is given for the new archive "
+"or patch file, it will be looked for first relative to the execution "
+"directory and then relative to the parent of the source tree. (For example, "
+"if the changelog file is I</usr/local/src/foo/foo-1.1/debian/changelog>, "
+"then the archive or patch file will be looked for relative to I</usr/local/"
+"src/foo>.) Note that the patch file or archive cannot be within the source "
+"tree itself. The full details of what the code does are given below."
+msgstr ""
+"B<uupdate> modifica um arquivo de código fonte Debian existente para "
+"refletir uma actualização do autor fornecida como uma patch ou de um arquivo "
+"de código fonte completamente novo. O utilitário precisa de ser invocado a "
+"partir do directório de topo do directório de código fonte antigo, e se for "
+"dado um nome relativo para o novo arquivo ou ficheiro patch, irá ser olhado "
+"primeiro como relativo ao directório de execução de depois relativo ao pai "
+"da árvore fonte. (Por exemplo, se o ficheiro changelog for I</usr/local/src/"
+"foo/foo-1.1/debian/changelog>, então o arquivo ou ficheiro patch irá ser "
+"olhado como relativo a I</usr/local/src/foo>.) Note que o ficheiro patch ou "
+"arquivo não pode estar dentro da própria árvore fonte. Os detalhes completos "
+"sobre o que o código faz são dados mais abaixo."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:32
+msgid ""
+"Currently supported source code file types are I<.tar.gz>, I<.tar.bz2>, I<."
+"tar.Z>, I<.tgz>, I<.tar>, I<.tar.lzma>, I<.tar.xz>, I<.7z> and I<.zip> "
+"archives. Also supported are already unpacked source code archives; simply "
+"give the path of the source code directory. Supported patch file types are "
+"B<gzip>-compressed, B<bzip2>-compressed, B<lzma>-compressed, B<xz>-"
+"compressed and uncompressed patch files. The file types are identified by "
+"the file names, so they must use the standard suffixes."
+msgstr ""
+"Os tipos de ficheiros de código fonte actualmente suportados são arquivos I<."
+"tar.gz>, I<.tar.bz2>, I<.tar.Z>, I<.tgz>, I<.tar>, I<.tar.lzma>, I<.tar.xz>, "
+"I<.7z> e I<.zip>. Também suportados são os arquivos de código fonte já "
+"desempacotados; simplesmente dê o caminho para directório do código fonte. "
+"Os tipos de ficheiro patch suportados são ficheiros B<gzip>-comprimidos, "
+"B<bzip2>-comprimidos, B<lzma>-comprimidos, B<xz>-comprimidos e não-"
+"comprimidos. Os tipos de ficheiros são identificados pelos nomes dos "
+"ficheiros, assim têm de usar os sufixos standard."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:42
+msgid ""
+"Usually B<uupdate> will be able to deduce the version number from the source "
+"archive name (as long as it only contains digits and periods). If that "
+"fails, you need to specify the version number explicitly (without the Debian "
+"release number which will always be initially ``1'', or ``0ubuntu1'' on "
+"Ubuntu-detected systems). This can be done with an initial B<--upstream-"
+"version> or B<-v> option, or in the case of an archive, with a version "
+"number after the filename. (The reason for the latter is so that B<uupdate> "
+"can be called directly from B<uscan>.)"
+msgstr ""
+"Geralmente o B<uupdate> será capaz de deduzir o número da versão a partir do "
+"nome do arquivo fonte (desde que apenas contenha dígitos e pontos). Se isso "
+"falhar, você precisa de especificar o número de versão explicitamente (sem o "
+"número de lançamento Debian o qual será sempre inicialmente ``1'', ou "
+"``0ubuntu1'' em sistema detetados de Ubuntu). Isto pode ser feito com um B<--"
+"upstream-version> inicial ou opção B<-v>, ou no caso de um arquivo, com um "
+"número de versão após o nome de ficheiro. (A razão para a última é para que "
+"o B<uupdate> passa ser chamado directamente a partir do B<uscan>.)"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:47
+msgid ""
+"Since B<uupdate> uses B<debuild> to clean the current archive before trying "
+"to apply a patch file, it accepts a B<--rootcmd> or B<-r> option allowing "
+"the user to specify a gain-root command to be used. The default is to use "
+"B<fakeroot>."
+msgstr ""
+"Como o B<uupdate> usa B<debuild> para limpar o arquivo actual antes de "
+"tentar aplicar um ficheiro patch, aceita uma opção B<--rootcmd> ou B<-r> "
+"permitindo ao utilizador especificar o comando de ganhar-root a ser usado. A "
+"predefinição é usar o B<fakeroot>."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:54
+msgid ""
+"If an archive is being built, the pristine upstream source should be used to "
+"create the I<.orig.tar.gz> file wherever possible. This means that MD5 sums "
+"or other similar methods can be used to easily compare the upstream source "
+"to Debian's copy of the upstream version. This is the default behaviour, "
+"and can be switched off using the B<--no-pristine> option below."
+msgstr ""
+"Se um arquivo está a ser compilado, deve ser usada a fonte do autor "
+"imaculada para criar o ficheiro I<.orig.tar.gz> sempre que possível. Isto "
+"significa que sumários MD5 e outros métodos semelhantes podem ser usados "
+"para facilmente comparar a fonte do autor à cópia Debian da versão do autor. "
+"Este é o comportamento predefinido, e pode ser desligado usando a opção B<--"
+"no-pristine> em baixo."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:56
+msgid "This is a summary of what was explained above."
+msgstr "Isto é um sumário do que foi explicado em cima."
+
+#. type: TP
+#: ../scripts/uupdate.1:60
+#, no-wrap
+msgid "B<--upstream-version >I<version>, B<-v >I<version>"
+msgstr "B<--upstream-version >I<version>, B<-v >I<version>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:63
+msgid "Specify the version number of the upstream package explicitly."
+msgstr ""
+"Especifica o número de versão do pacote do autor original explicitamente."
+
+#. type: TP
+#: ../scripts/uupdate.1:63
+#, no-wrap
+msgid "B<--force-bad-version, -b >"
+msgstr "B<--force-bad-version, -b >"
+
+#. type: TP
+#: ../scripts/uupdate.1:66
+#, no-wrap
+msgid "B<--rootcmd >I<gain-root-command>, B<-r >I<gain-root-command>"
+msgstr "B<--rootcmd >I<gain-root-command>, B<-r >I<gain-root-command>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:70
+msgid ""
+"Specify the command to be used to become root to build the package and is "
+"passed onto B<debuild>(1) if it is specified."
+msgstr ""
+"Especifica o comando a ser usado para se tornar root para compilar o pacote "
+"e é passado ao B<debuild>(1) se for especificado."
+
+#. type: TP
+#: ../scripts/uupdate.1:70
+#, no-wrap
+msgid "B<--pristine>, B<-u>"
+msgstr "B<--pristine>, B<-u>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:75
+msgid ""
+"Treat the source as pristine upstream source and symlink to it from "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> whenever possible. This "
+"option has no meaning for patches. This is the default behaviour."
+msgstr ""
+"Trata a fonte como fonte do autor imaculada e cria um symlink para ela a "
+"partir de I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> sempre que "
+"possível. Esta opção não tem significado para patches. Este é o "
+"comportamento predefinido."
+
+#. type: TP
+#: ../scripts/uupdate.1:75
+#, no-wrap
+msgid "B<--no-pristine>"
+msgstr "B<--no-pristine>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:78
+msgid ""
+"Do not attempt to make a I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> "
+"symlink."
+msgstr ""
+"Não tenta fazer um link simbólico I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig."
+"tar.gz>."
+
+#. type: TP
+#: ../scripts/uupdate.1:78
+#, no-wrap
+msgid "B<--symlink>, B<-s>"
+msgstr "B<--symlink>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:83
+msgid ""
+"Simply create a symlink when moving a new upstream I<.tar.gz> archive to the "
+"new I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> location. This is "
+"the default behaviour."
+msgstr ""
+"Simplesmente cria um symlink quando move um novo arquivo I<.tar.gz> de autor "
+"para a nova localização I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz>. "
+"Este é o comportamento predefinido."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:88
+msgid ""
+"Copy the upstream I<.tar.gz> to the new location instead of making a "
+"symlink, if I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> is missing. "
+"Otherwise, do nothing."
+msgstr ""
+"Copia o I<.tar.gz> do autor para a nova localização em vez de fazer um "
+"symlink, se I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> estiver em "
+"falta. Caso contrário, não faz nada."
+
+#. type: TP
+#: ../scripts/uupdate.1:88
+#, no-wrap
+msgid "B<--find, -f>"
+msgstr "B<--find, -f>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:98
+msgid ""
+"Find all upstream tarballs in I<../> which match "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig.tar.{gz|bz2|lzma|xz}> or "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig-E<lt>componentE<gt>.tar.{gz|bz2|lzma|"
+"xz}> ; B<--upstream-version> required; pristine source required; not valid "
+"for B<--patch>; This option uses B<dpkg-source> as the backend to enable "
+"support for the multiple upstream tarballs and to resolve minor bugs "
+"reported previously. The use of this option is highly recommended."
+msgstr ""
+"Encontra todos os tarballs de autor em I<../> o que corresponde a "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig.tar.{gz|bz2|lzma|xz}> ou "
+"I<E<lt>pkgE<gt>_E<lt>versionE<gt>.orig-E<lt>componentE<gt>.tar.{gz|bz2|lzma|"
+"xz}> ; B<--upstream-version> necessário; fonte imaculada necessária; não "
+"válido para B<--patch>; Esta opção usa B<dpkg-source> como backend para "
+"activar suporte para múltiplos tarballs de autor e para resolver bugs "
+"menores reportados anteriormente. O uso desta opção é altamente recomendado."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:101
+msgid "Give verbose output."
+msgstr "Fornece resultados detalhados."
+
+#. type: TP
+#: ../scripts/uupdate.1:113
+#, no-wrap
+msgid "B<UUPDATE_PRISTINE>"
+msgstr "B<UUPDATE_PRISTINE>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:117
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-pristine> command "
+"line parameter being used."
+msgstr ""
+"Se definido para I<no>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--no-pristine>."
+
+#. type: TP
+#: ../scripts/uupdate.1:117
+#, no-wrap
+msgid "B<UUPDATE_SYMLINK_ORIG>"
+msgstr "B<UUPDATE_SYMLINK_ORIG>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:121
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--no-symlink> command "
+"line parameter being used."
+msgstr ""
+"Se definido para I<no>, então é o mesmo que usar o parâmetro de linha de "
+"comandos B<--no-symlink>."
+
+#. type: TP
+#: ../scripts/uupdate.1:121
+#, no-wrap
+msgid "B<UUPDATE_ROOTCMD>"
+msgstr "B<UUPDATE_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:124
+msgid "This is equivalent to the B<--rootcmd> option."
+msgstr "Isto é o equivalente à opção B<--rootcmd>."
+
+#. type: SH
+#: ../scripts/uupdate.1:124
+#, no-wrap
+msgid "ACTIONS TAKEN ON AN ARCHIVE"
+msgstr "ACÇÕES TOMADAS NUM ARQUIVO"
+
+#. type: TP
+#: ../scripts/uupdate.1:125 ../scripts/uupdate.1:158
+#, no-wrap
+msgid "B<Figure out new version number>"
+msgstr "B<Descobrir qual o número da nova versão>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:131
+msgid ""
+"Unless an explicit version number is provided, the archive name is analyzed "
+"for a sequence of digits separated by dots. If something like that is "
+"found, it is taken to be the new upstream version number. If not, "
+"processing is aborted."
+msgstr ""
+"A menos que seja fornecido um número de versão explícito, o nome do arquivo "
+"é analisado por uma sequência de dígitos separados por pontos. Se algo como "
+"isso for encontrado, é tomado como sendo o novo número de versão do autor. "
+"Se não, o processo é abortado."
+
+#. type: TP
+#: ../scripts/uupdate.1:131
+#, no-wrap
+msgid "B<Create the .orig.tar.gz archive>"
+msgstr "B<Criar o arquivo .orig.tar.gz>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:136
+msgid ""
+"If the B<--pristine> or B<-u> option is specified and the upstream archive "
+"is a I<.tar.gz> or I<.tgz> archive, then this will be copied directly to "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz>."
+msgstr ""
+"Se a opção B<--pristine> ou B<-u> for especificada e o arquivo de autor for "
+"um arquivo I<.tar.gz> ou I<.tgz>, então isto irá ser copiado diretamente "
+"para I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz>."
+
+#. type: TP
+#: ../scripts/uupdate.1:136
+#, no-wrap
+msgid "B<Unpacking>"
+msgstr "B<Desempacotar>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:141
+msgid ""
+"The archive is unpacked and placed in a directory with the correct name "
+"according to Debian policy: package-upstream_version.orig. Processing is "
+"aborted if this directory already exists."
+msgstr ""
+"O arquivo é desempacotado e colocado num directório com o nome correcto de "
+"acordo com a política Debian: package-upstream_version.orig. O "
+"processamento é abortado se este directório já existir."
+
+#. type: TP
+#: ../scripts/uupdate.1:141 ../scripts/uupdate.1:169
+#, no-wrap
+msgid "B<Patching>"
+msgstr "B<Aplicar a patch>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:149
+msgid ""
+"The I<.diffs.gz> from the current version are applied to the unpackaged "
+"archive. A non-zero exit status and warning message will occur if the "
+"patches did not apply cleanly or if no patch file was found. Also, the list "
+"of rejected patches will be shown. The file I<debian/rules> is made "
+"executable and all of the I<.orig> files created by B<patch> are deleted."
+msgstr ""
+"O I<.diffs.gz> da versão actual é aplicado ao arquivo não empacotado. Um "
+"estado de saída de não-zero e uma mensagem de aviso irão ocorrer se as "
+"patches não forem aplicadas sem falhas ou se o ficheiro patch não for "
+"encontrado. Também, será mostrada a lista das patches rejeitadas. O ficheiro "
+"I<debian/rules> é feito executável e todos os ficheiros I<.orig> criados por "
+"B<patch> são apagados."
+
+#. type: TP
+#: ../scripts/uupdate.1:149 ../scripts/uupdate.1:181
+#, no-wrap
+msgid "B<Changelog update>"
+msgstr "B<Actualizar registo de alterações>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:153 ../scripts/uupdate.1:185
+msgid ""
+"A changelog entry with the new version number is generated with the text "
+"``New upstream release.''."
+msgstr ""
+"É gerada uma entrada no changelog com o novo número de versão com o texto "
+"``New upstream release.''."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:157 ../scripts/uupdate.1:189
+msgid ""
+"When used on Ubuntu systems, B<dpkg-vendor> detection is used to set the "
+"Debian revision to ``0ubuntu1''. You may change I<debian/changelog> "
+"manually afterwards."
+msgstr ""
+"Quando usado em sistemas Ubuntu, a detecção de B<dpkg-vendor> é usada para "
+"definir a revisão Debian para ``0ubuntu1''. Você pode modificar o I<debian/"
+"changelog> manualmente depois."
+
+#. type: SH
+#: ../scripts/uupdate.1:157
+#, no-wrap
+msgid "ACTIONS TAKEN ON A PATCH FILE"
+msgstr "ACÇÕES TOMADAS NUM FICHEIRO PATCH"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:164
+msgid ""
+"Unless an explicit version number is provided, the patch file name is "
+"analyzed for a sequence of digits separated by dots. If something like that "
+"is found, it is taken to be the new upstream version number. If not, "
+"processing is aborted."
+msgstr ""
+"A menos que seja fornecido um número de versão explícito, o nome do ficheiro "
+"patch é analisado por uma sequência de dígitos separados por pontos. Se algo "
+"como isso for encontrado, é tomado como sendo o novo número de versão do "
+"autor. Se não, o processo é abortado."
+
+#. type: TP
+#: ../scripts/uupdate.1:164
+#, no-wrap
+msgid "B<Clean the current source tree>"
+msgstr "B<Limpara a árvore fonte actual>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:169
+msgid ""
+"The command B<debuild clean> is executed within the current Debian source "
+"archive to clean it. If a B<-r> option is given to B<uupdate>, it is passed "
+"on to B<debuild>."
+msgstr ""
+"O comando B<debuild clean> é executado dentro do arquivo fonte Debian actual "
+"para o limpar. Se a opção B<-r> for dada ao B<uupdate>, ela é passada ao "
+"B<debuild>."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:181
+msgid ""
+"The current source archive (I<.orig.tar.gz>) is unpacked and the patch "
+"applied to the original sources. If this is successful, then the I<.orig> "
+"directory is renamed to reflect the new version number and the current "
+"Debian source directory is copied to a directory with the new version "
+"number, otherwise processing is aborted. The patch is then applied to the "
+"new copy of the Debian source directory. The file I<debian/rules> is made "
+"executable and all of the I<.orig> files created by B<patch> are deleted. "
+"If there was a problem with the patching, a warning is issued and the "
+"program will eventually exit with non-zero exit status."
+msgstr ""
+"O arquivo de fonte actual (I<.orig.tar.gz>) é desempacotado e a patch é "
+"aplicada à fonte original. Se isto tiver sucesso, então o directório I<."
+"orig> é renomeado para refletir o novo número de versão e o directório fonte "
+"Debian actual é copiado para um directório com o novo número de versão, caso "
+"contrário o processamento é abortado. A patch é então aplicada à nova cópia "
+"do do directório fonte Debian. O ficheiro I<debian/rules> é feito executável "
+"e todos os ficheiro I<.orig> criados pelo B<patch> são apagados. Se existir "
+"um problemas com a aplicação da patch, é emitido um aviso e o programa irá "
+"eventualmente terminar com um estado de saída não-zero."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:194
+msgid "B<debuild>(1), B<fakeroot>(1), B<patch>(1), B<devscripts.conf>(5)"
+msgstr "B<debuild>(1), B<fakeroot>(1), B<patch>(1), B<devscripts.conf>(5)"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:196
+msgid "B<The Debian Policy Manual>"
+msgstr "B<O Manual de Política Debian>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:199
+msgid ""
+"The original version of B<uupdate> was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. Several changes and improvements have been "
+"made by Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"A versão original de B<uupdate> foi escrita por Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. Várias alterações e melhoramentos foram "
+"feitos por Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+
+#. type: TH
+#: ../doc/what-patch.1:1
+#, no-wrap
+msgid "WHAT-PATCH"
+msgstr "WHAT-PATCH"
+
+#. type: Plain text
+#: ../doc/what-patch.1:4
+msgid "what-patch - detect which patch system a Debian package uses"
+msgstr "what-patch - detecta qual sistema de patch usa um pacote Debian"
+
+#. type: Plain text
+#: ../doc/what-patch.1:7
+msgid "B<what-patch> [I<options>]"
+msgstr "B<what-patch> [I<options>]"
+
+#. type: Plain text
+#: ../doc/what-patch.1:11
+msgid ""
+"B<what-patch> examines the I<debian/rules> file to determine which patch "
+"system the Debian package is using."
+msgstr ""
+"B<what-patch> examina o ficheiro I<debian/rules> para determinar qual "
+"sistema de patch o pacote Debian está a usar."
+
+#. type: Plain text
+#: ../doc/what-patch.1:14
+msgid ""
+"B<what-patch> should be run from the root directory of the Debian source "
+"package."
+msgstr ""
+"B<what-patch> deve ser corrido a partir do directório raiz do pacote fonte "
+"Debian."
+
+#. type: Plain text
+#: ../doc/what-patch.1:17
+msgid "Listed below are the command line options for B<what-patch>:"
+msgstr ""
+"As opções de linha de comandos para B<what-patch> estão listadas abaixo:"
+
+#. type: Plain text
+#: ../doc/what-patch.1:20
+msgid "Display a help message and exit."
+msgstr "Mostra uma mensagem de ajuda e termina."
+
+#. type: TP
+#: ../doc/what-patch.1:20
+#, no-wrap
+msgid "B<-v>"
+msgstr "B<-v>"
+
+#. type: Plain text
+#: ../doc/what-patch.1:26
+msgid ""
+"Enable verbose mode. This will include the listing of any files modified "
+"outside or the I<debian/> directory and report any additional details about "
+"the patch system if available."
+msgstr ""
+"Activa o modo detalhado. Isto vai incluir a listagem de quaisquer ficheiros "
+"modificados fora do directório I<debian/> e reportar quaisquer detalhes "
+"adicionais acerca do sistema de patch se disponíveis."
+
+#. type: Plain text
+#: ../doc/what-patch.1:32
+msgid ""
+"B<what-patch> was written by Kees Cook E<lt>kees@ubuntu.comE<gt>, Siegfried-"
+"A. Gevatter E<lt>rainct@ubuntu.comE<gt>, and Daniel Hahler "
+"E<lt>ubuntu@thequod.deE<gt>, among others. This manual page was written by "
+"Jonathan Patrick Davies E<lt>jpds@ubuntu.comE<gt>."
+msgstr ""
+"B<what-patch> foi escrito por Kees Cook E<lt>kees@ubuntu.comE<gt>, Siegfried-"
+"A. Gevatter E<lt>rainct@ubuntu.comE<gt>, e Daniel Hahler E<lt>ubuntu@thequod."
+"deE<gt>, entre outros. Este manual foi escrito por Jonathan Patrick Davies "
+"E<lt>jpds@ubuntu.comE<gt>."
+
+#. type: Plain text
+#: ../doc/what-patch.1:38
+msgid ""
+"The Ubuntu MOTU team has some documentation about patch systems at the "
+"Ubuntu wiki: I<https://wiki.ubuntu.com/PackagingGuide/PatchSystems>"
+msgstr ""
+"A equipa Ubuntu MOTU tem alguma documentação sobre sistemas de patch no wiki "
+"Ubuntu: I<https://wiki.ubuntu.com/PackagingGuide/PatchSystems>"
+
+#. type: Plain text
+#: ../doc/what-patch.1:42
+msgid "B<cdbs-edit-patch>(1), B<dbs-edit-patch>(1), B<dpatch-edit-patch>(1)"
+msgstr "B<cdbs-edit-patch>(1), B<dbs-edit-patch>(1), B<dpatch-edit-patch>(1)"
+
+#. type: TH
+#: ../scripts/whodepends.1:1
+#, no-wrap
+msgid "WHODEPENDS"
+msgstr "WHODEPENDS"
+
+#. type: Plain text
+#: ../scripts/whodepends.1:4
+msgid "whodepends - check which maintainers' packages depend on a package"
+msgstr ""
+"whodepends - verifica quais pacotes do maintainer dependem de um pacote"
+
+#. type: Plain text
+#: ../scripts/whodepends.1:6
+msgid "B<whodepends> [I<package>] [I<options>]"
+msgstr "B<whodepends> [I<package>] [I<options>]"
+
+#. type: Plain text
+#: ../scripts/whodepends.1:10
+msgid ""
+"B<whodepends> gives the names, e-mail addresses and the packages they "
+"maintain of all maintainers who have packages depending on the given package."
+msgstr ""
+"B<whodepends> dá os nomes, endereços de e-mail e os pacotes que eles mantêm "
+"de todos os maintainers que têm pacotes que dependem de um determinado "
+"pacote."
+
+#. type: Plain text
+#: ../scripts/whodepends.1:19
+msgid "B<whodepends> is not very efficient."
+msgstr "B<whodepends> não é muito eficiente."
+
+#. type: Plain text
+#: ../scripts/whodepends.1:20
+msgid ""
+"B<whodepends> has been written by Moshe Zadka E<lt>moshez@debian.orgE<gt>."
+msgstr "B<whodepends> foi escrito por Moshe Zadka E<lt>moshez@debian.orgE<gt>."
+
+#. type: TH
+#: ../scripts/who-uploads.1:1
+#, no-wrap
+msgid "WHO-UPLOADS"
+msgstr "WHO-UPLOADS"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:4
+msgid "who-uploads - identify the uploaders of Debian source packages"
+msgstr "who-uploads - identifica quem envia os pacotes fonte Debian"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:6
+msgid "B<who-uploads> [I<options>] I<source_package> ..."
+msgstr "B<who-uploads> [I<options>] I<source_package> ..."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:12
+msgid ""
+"B<who-uploads> uses the Package Tracking System (PTS) to identify the "
+"uploaders of the three most recent versions of the given source packages. "
+"Note that the uploaders are identified using their B<gpg>(1) or B<gpg2>(1) "
+"keys; installing a recent version of the I<debian-keyring> package should "
+"provide most of the required keys."
+msgstr ""
+"B<who-uploads> usa o Package Tracking System (PTS) para identificar quem "
+"enviou as três versões mais recentes dos pacotes fonte dados. Note que os "
+"\"uploaders\" são identificados usando as suas chaves B<gpg>(1) ou "
+"B<gpg2>(1); instalar uma versão recente do pacote I<debian-keyring> deve "
+"disponibilizar a maioria das chaves necessárias."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:15
+msgid ""
+"Note that because the PTS uses source packages, you must give the source "
+"package names, not the binary package names."
+msgstr ""
+"Note que porque o PTS usa pacotes fonte, você tem de dar os nomes dos "
+"pacotes fonte, e não os nomes dos pacotes binários."
+
+#. type: TP
+#: ../scripts/who-uploads.1:16
+#, no-wrap
+msgid "B<-M>, B<--max-uploads=>I<N>"
+msgstr "B<-M>, B<--max-uploads=>I<N>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:21
+msgid ""
+"Specify the maximum number of uploads to display for each package; the "
+"default is 3. Note that you may not see this many uploads if there are not "
+"this many recorded in the PTS."
+msgstr ""
+"Especifica o número máximo de envios a mostrar para cada pacote; a "
+"predefinição é 3. Note que você pode nem ver tantos envios se não estiverem "
+"suficientes guardados no PTS."
+
+#. type: TP
+#: ../scripts/who-uploads.1:21
+#, no-wrap
+msgid "B<--keyring >I<keyring>"
+msgstr "B<--keyring >I<keyring>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:25
+msgid ""
+"Add I<keyring> to the list of keyrings to be searched for the uploader's GPG "
+"key."
+msgstr ""
+"Adiciona I<keyring> à lista de chaveiros a ser pesquisada para a chave GPG "
+"de quem fez o envio."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:34
+msgid ""
+"By default, B<who-uploads> uses the three Debian keyrings I</usr/share/"
+"keyrings/debian-keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg>, "
+"and I</usr/share/keyrings/debian-maintainers.gpg> (although this default can "
+"be changed in the configuration file, see below). Specifying this option "
+"means that the default keyrings will not be examined. The B<--keyring> "
+"option overrides this one."
+msgstr ""
+"Por predefinição, B<who-uploads> usa os três chaveiros Debian I</usr/share/"
+"keyrings/debian-keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg>, e "
+"I</usr/share/keyrings/debian-maintainers.gpg> (apesar desta predefinição "
+"poder ser alterada no ficheiro de configuração, veja em baixo). Especificar "
+"esta opção significa que os chaveiros predefinidos não serão examinados. A "
+"opção B<--keyring> sobrepõe isto."
+
+#. type: TP
+#: ../scripts/who-uploads.1:34
+#, no-wrap
+msgid "B<--date>"
+msgstr "B<--date>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:37
+msgid "Show the date of the upload alongside the uploader's details"
+msgstr "Mostra a data do envio junto dos detalhes de quem enviou."
+
+#. type: TP
+#: ../scripts/who-uploads.1:37
+#, no-wrap
+msgid "B<--nodate>, B<--no-date>"
+msgstr "B<--nodate>, B<--no-date>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:41
+msgid ""
+"Do not show the date of the upload alongside the uploader's details. This "
+"is the default behaviour."
+msgstr ""
+"Não mostra a data do envio junto dos detalhes de quem enviou. Este é o "
+"comportamento predefinido."
+
+#. type: TP
+#: ../scripts/who-uploads.1:57
+#, no-wrap
+msgid "B<WHOUPLOADS_DATE>"
+msgstr "B<WHOUPLOADS_DATE>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:61
+msgid ""
+"Show the date of the upload alongside the uploader's details. By default, "
+"this is \"no\"."
+msgstr ""
+"Mostra a data do envio junto dos detalhes de quem enviou. Por predefinição, "
+"isto é \"no\"."
+
+#. type: TP
+#: ../scripts/who-uploads.1:61
+#, no-wrap
+msgid "B<WHOUPLOADS_MAXUPLOADS>"
+msgstr "B<WHOUPLOADS_MAXUPLOADS>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:65
+msgid ""
+"The maximum number of uploads to display for each package. By default, this "
+"is 3."
+msgstr ""
+"O número máximo de envios a mostrar para cada pacote. Por predefinição, este "
+"valor é 3."
+
+#. type: TP
+#: ../scripts/who-uploads.1:65
+#, no-wrap
+msgid "B<WHOUPLOADS_KEYRINGS>"
+msgstr "B<WHOUPLOADS_KEYRINGS>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:73
+msgid ""
+"This is a colon-separated list of the default keyrings to be used. By "
+"default, it is the three Debian keyrings I</usr/share/keyrings/debian-"
+"keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg>, and I</usr/share/"
+"keyrings/debian-maintainers.gpg>."
+msgstr ""
+"Isto é uma lista de chaveiros predefinidos separados por dois-pontos a serem "
+"usados. Por predefinição, são os três chaveiros Debian I</usr/share/keyrings/"
+"debian-keyring.gpg>, I</usr/share/keyrings/debian-nonupload.gpg>, e I</usr/"
+"share/keyrings/debian-maintainers.gpg>."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:76
+msgid ""
+"The original version of B<who-uploads> was written by Adeodato Sim\\['o] "
+"E<lt>dato@net.com.org.esE<gt>. The current version is by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"A versão original de B<who-uploads> foi escrita por Adeodato Sim\\['o] "
+"E<lt>dato@net.com.org.esE<gt>. A versão actual é de Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:50
+msgid "who-permits-upload - look-up Debian Maintainer access control lists"
+msgstr ""
+"who-permits-upload - procura listas de controle de acesso de Maintainer "
+"Debian"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:54
+msgid ""
+"B<who-permits-upload> [B<-h>] [B<-s> I<keyring>] [B<-d> I<dm_url>] [B<-s> "
+"I<search_type>] I<query> [I<query> ...]"
+msgstr ""
+"B<who-permits-upload> [B<-h>] [B<-s> I<keyring>] [B<-d> I<dm_url>] [B<-s> "
+"I<search_type>] I<query> [I<query> ...]"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:58
+msgid ""
+"B<who-permits-upload> looks up the given Debian Maintainer (DM) upload "
+"permissions from ftp-master.debian.org and parses them in a human readable "
+"way. The tool can search by DM name, sponsor (the person who granted the "
+"permission) and by package."
+msgstr ""
+"B<who-permits-upload> olha para as permissões de envio de Debian Maintainer "
+"(DM) dadas de ftp-master.debian.org e processa-as para um modo legível por "
+"humanos. Esta ferramenta pode procurar pelo nome DM, patrocinado (a pessoa "
+"que deu a permissão) e pelo pacote."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:66
+msgid "B<--dmfile=>I<dm_url>, B<-d> I<dm_url>"
+msgstr "B<--dmfile=>I<dm_url>, B<-d> I<dm_url>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:68
+msgid ""
+"Retrieve the DM permission file from the supplied URL. When this option is "
+"not present, the default value I<https://ftp-master.debian.org/dm.txt> is "
+"used."
+msgstr ""
+"Obtém o ficheiro de permissões DM a partir do URL fornecido. Quando esta "
+"opção não está presente, é usado o valor predefinido I<https://ftp-master."
+"debian.org/dm.txt>."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:73
+msgid "Display a usage summary and exit."
+msgstr "Mostra um resumo de utilização e termina."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:75
+msgid "B<--keyring=>I<keyring>, B<-s> I<keyring>"
+msgstr "B<--keyring=>I<keyring>, B<-s> I<keyring>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:77
+msgid ""
+"Use the supplied GnuPG keyrings to look-up GPG fingerprints from the DM "
+"permission file. When not present, the default Debian Developer and "
+"Maintainer keyrings are used (I</usr/share/keyrings/debian-keyring.gpg> and "
+"I</usr/share/keyrings/debian-maintainers.gpg>, installed by the I<debian-"
+"keyring> package)."
+msgstr ""
+"Usa os chaveiros GnuPG fornecidos para procurar impressões digitais GPG do "
+"ficheiro de permissões DM. Quando não presente, são usados o Desenvolvedor "
+"Debian predefinido e os Chaveiros do Maintainer (I</usr/share/keyrings/"
+"debian-keyring.gpg> e I</usr/share/keyrings/debian-maintainers.gpg>, "
+"instalados pelo pacote I<debian-keyring>)."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:83
+msgid "Separate keyrings with a colon \":\"."
+msgstr "Separa chaveiros com dois pontos \":\"."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:85
+msgid "B<--search=>I<search_type>, B<-s> I<search_type>"
+msgstr "B<--search=>I<search_type>, B<-s> I<search_type>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:87
+msgid ""
+"Modify the look-up behavior. This influences the interpretation of the "
+"I<query> argument. Supported search types are:"
+msgstr ""
+"Modifica o comportamento de procura. Isto influencia a interpretação do "
+"argumento I<query>. Os tipos de procura suportados são:"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:94
+msgid ""
+"Search for a source package name. This is also the default when B<--search> "
+"is omitted. Since package names are unique, this will return given ACLs - "
+"if any - for a single package."
+msgstr ""
+"Procura um nome de pacote fonte. Isto é também a predefinição quando é "
+"omitido B<--search>. Como os nomes de pacotes são únicos, isto irá retornar "
+"ACLs dados - se algum - para um único pacote."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:98
+msgid "B<uid>"
+msgstr "B<uid>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:100
+msgid ""
+"Search for a Debian Maintainer. This should be (a fraction of) a name. It "
+"will return all ACLs assigned to matching maintainers."
+msgstr ""
+"Procura um Maintainer Debian. Isto deve ser um (uma fração de) nome. Irá "
+"retornar todas as ACLs atribuídas as maintainers correspondentes."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:103
+msgid "B<sponsor>"
+msgstr "B<sponsor>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:105
+msgid ""
+"Search for a sponsor (i.e. a Debian Developer) who granted DM permissions. "
+"This will return all ACLs given by the supplied developer."
+msgstr ""
+"Procura um patrocinador (isto é, um Desenvolvedor Debian) quem conceda "
+"permissões DM. Isto irá retornar todos os ACLs dados pelo desenvolvedor "
+"fornecido."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:108
+msgid "Note that this is an expensive operation which may take some time."
+msgstr "Note que isto é uma operação expressiva que pode demorar algum tempo."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:112
+msgid "I<query>"
+msgstr "I<query>"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:114
+msgid ""
+"A case sensitive argument to be looked up in the ACL permission file. The "
+"exact interpretation of this argument is dependent by the B<--search> "
+"argument."
+msgstr ""
+"Um argumento sensível a maiúsculas/minúsculas a ser procurado no ficheiro de "
+"permissões ACL. A interpretação exacta deste argumento é dependente do "
+"argumento B<--search>."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:117
+msgid "This argument can be repeated."
+msgstr "Este argumento pode ser repetido."
+
+#. type: =head1
+#: ../scripts/who-permits-upload.pl:121
+msgid "EXIT VALUE"
+msgstr "VALOR DE SAÍDA"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:127
+msgid "Success"
+msgstr "Sucesso"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:131
+msgid "An error occurred"
+msgstr "Ocorreu um erro"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:135
+msgid "The command line was not understood"
+msgstr "A linha de comandos não foi compreendida"
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:143
+msgid "who-permits-upload --search=sponsor arno@debian.org"
+msgstr "who-permits-upload --search=sponsor arno@debian.org"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:145
+msgid ""
+"Search for all DM upload permissions given by the UID \"arno@debian.org\". "
+"Note, that only primary UIDs will match."
+msgstr ""
+"Procura por todas as permissões de envio DM dadas pelo UID \"arno@debian."
+"org\". Note que apenas os UIDs principais irão corresponder."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:148
+msgid "who-permits-upload -s=sponsor \"Arno Töll\""
+msgstr "who-permits-upload -s=sponsor \"Arno Töll\""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:150
+msgid "Same as above, but use a full name instead."
+msgstr "O mesmo que em cima, mas este usa o nome completo."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:152
+msgid "who-permits-upload apache2"
+msgstr "who-permits-upload apache2"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:154
+msgid "Look up who gave upload permissions for the apache2 source package."
+msgstr "Procura quem deu permissões de envio para o pacote fonte apache2."
+
+#. type: =item
+#: ../scripts/who-permits-upload.pl:156
+msgid "who-permits-upload --search=uid \"Paul Tagliamonte\""
+msgstr "who-permits-upload --search=uid \"Paul Tagliamonte\""
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:158
+msgid "Look up all DM upload permissions given to \"Paul Tagliamonte\"."
+msgstr "Procura todas as permissões de envio DM dadas a \"Paul Tagliamonte\"."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:164
+msgid ""
+"B<who-permits-upload> was written by Arno Töll <arno@debian.org> and is "
+"licensed under the terms of the General Public License (GPL) version 2 or "
+"later."
+msgstr ""
+"B<who-permits-upload> foi escrito por Arno Töll <arno@debian.org> e tem "
+"licença sob os termos da General Public License (GPL) versão 2 ou posterior."
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:169
+msgid "B<gpg>(1), B<gpg2>(1), B<who-uploads>(1)"
+msgstr "B<gpg>(1), B<gpg2>(1), B<who-uploads>(1)"
+
+#. type: textblock
+#: ../scripts/who-permits-upload.pl:171
+msgid ""
+"S<I<https://lists.debian.org/debian-devel-announce/2012/09/msg00008.html>>"
+msgstr ""
+"S<I<https://lists.debian.org/debian-devel-announce/2012/09/msg00008.html>>"
+
+#. type: TH
+#: ../scripts/wnpp-alert.1:1
+#, no-wrap
+msgid "WNPP-ALERT"
+msgstr "WNPP-ALERT"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:4
+msgid "wnpp-alert - check for installed packages up for adoption or orphaned"
+msgstr ""
+"wnpp-alert - verifica por pacotes instalados que estejam para adoção ou "
+"órfãos"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:6
+msgid "B<wnpp-alert >[B<--diff>] [I<package> ...]"
+msgstr "B<wnpp-alert >[B<--diff>] [I<package> ...]"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:8
+msgid "B<wnpp-alert --help>|B<--version>"
+msgstr "B<wnpp-alert --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:14
+msgid ""
+"B<wnpp-alert> downloads the lists of packages which have been orphaned (O), "
+"are up for adoption (RFA), or the maintainer has asked for help (RFH) from "
+"the WNPP webpages, and then outputs a list of packages installed on the "
+"system, or matching the listed packages, which are in those lists."
+msgstr ""
+"B<wnpp-alert> descarrega uma lista de pacotes que estão órfãos (O), para "
+"adoção (RFA), ou cujo maintainer pediu ajuda (RFH) a partir das páginas web "
+"WNPP, e depois gera uma lista de pacotes instalados no sistema, ou que "
+"correspondem aos pacotes listados, que estão nessas listas."
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:17
+msgid ""
+"Note that WNPP, and therefore B<wnpp-alert>'s output, is source package "
+"based."
+msgstr ""
+"Note que WNPP, e por isso o resultado do B<wnpp-alert>, é baseado no pacote "
+"fonte."
+
+#. type: TP
+#: ../scripts/wnpp-alert.1:18
+#, no-wrap
+msgid "B<--diff>, B<-d>"
+msgstr "B<--diff>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:23
+msgid ""
+"If the I<$XDG_CACHE_HOME/devscripts> directory exists, compare the output of "
+"B<wnpp-alert> to the previous output (cached in the file I<wnpp-diff>) and "
+"output the differences."
+msgstr ""
+"Se o directório I<$XDG_CACHE_HOME/devscripts> existir, compara o resultado "
+"de B<wnpp-alert> ao resultado anterior (guardado em cache no ficheiro I<wnpp-"
+"diff>) e escreve as diferenças."
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:31 ../scripts/wnpp-check.1:28
+msgid "https://www.debian.org/devel/wnpp"
+msgstr "https://www.debian.org/devel/wnpp"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:34
+msgid ""
+"B<wnpp-alert> was written by Arthur Korn E<lt>arthur@korn.chE<gt> and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt> for the devscripts "
+"package. It is in the public domain."
+msgstr ""
+"B<wnpp-alert> foi escrito por Arthur Korn E<lt>arthur@korn.chE<gt> e "
+"modificado por Julian Gilbey E<lt>jdg@debian.orgE<gt> para o pacote "
+"devscripts. Está no domínio público."
+
+#. type: TH
+#: ../scripts/wnpp-check.1:1
+#, no-wrap
+msgid "WNPP-CHECK"
+msgstr "WNPP-CHECK"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:4
+msgid ""
+"wnpp-check - check if a package is being packaged or if this has been "
+"requested"
+msgstr ""
+"wnpp-check - verifica se um pacote está a ser empacotado ou se tal foi "
+"requerido"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:6
+msgid "B<wnpp-check> [B<--exact>] I<package> ..."
+msgstr "B<wnpp-check> [B<--exact>] I<package> ..."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:8
+msgid "B<wnpp-check --help>|B<--version>"
+msgstr "B<wnpp-check --help>|B<--version>"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:13
+msgid ""
+"B<wnpp-check> downloads the lists of packages which are listed as being "
+"packaged (ITPed) or for which a package has been requested (RFPed) from the "
+"WNPP website and lists any packages supplied on the command line which "
+"appear in those lists."
+msgstr ""
+"B<wnpp-check> descarrega uma lista de pacotes que estão listados como a "
+"serem empacotados (ITPed) ou para o qual um pacote foi requisitado (RFPed) a "
+"partir do sítio web WNPP e lista quaisquer pacotes fornecidos na linha de "
+"comandos que apareçam nessas listas."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:16
+msgid ""
+"Note that WNPP, and therefore B<wnpp-check>'s output, is source package "
+"based."
+msgstr ""
+"Note que WNPP, e por isso o resultado do B<wnpp-check>, é baseado no pacote "
+"fonte."
+
+#. type: TP
+#: ../scripts/wnpp-check.1:17
+#, no-wrap
+msgid "B<--exact>, B<-e>"
+msgstr "B<--exact>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:20
+msgid ""
+"Require an exact package name match, rather than the default substring match."
+msgstr ""
+"Requer uma correspondência exacta de nome de pacote, em vez da "
+"correspondência de sub-frase predefinida."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:32
+msgid "None of the packages supplied has an open ITP or RFP"
+msgstr "Nenhum dos pacotes fornecidos tem um ITP ou RFP aberto"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:36
+msgid ""
+"Either an error occurred or at least one package supplied has an open ITP or "
+"RFP"
+msgstr ""
+"Ou ocorreu um erro ou pelo mesmo um pacote fornecido tem um ITP ou RFP aberto"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:42
+msgid ""
+"B<wnpp-check> was written by David Paleino E<lt>d.paleino@gmail.comE<gt>; "
+"this man page was written by Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt> for the devscripts package. B<wnpp-check> was originally based on "
+"B<wnpp-alert>, which was written by Arthur Korn E<lt>arthur@korn.chE<gt> and "
+"modified by Julian Gilbey E<lt>jdg@debian.orgE<gt> for the devscripts "
+"package. Both scripts are in the public domain."
+msgstr ""
+"B<wnpp-check> foi escrito por David Paleino E<lt>d.paleino@gmail.comE<gt>; "
+"este manual foi escrito por Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt> para o pacote devscripts. B<wnpp-check> foi baseado originalmente "
+"no B<wnpp-alert>, que foi escrito por Arthur Korn E<lt>arthur@korn.chE<gt> e "
+"modificado por Julian Gilbey E<lt>jdg@debian.orgE<gt> para o pacote "
+"devscripts. Ambos scripts estão no domínio público."
+
+#. type: TH
+#: ../doc/wrap-and-sort.1:15
+#, no-wrap
+msgid "WRAP-AND-SORT"
+msgstr "WRAP-AND-SORT"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:18
+msgid ""
+"wrap-and-sort - wrap long lines and sort items in Debian packaging files"
+msgstr ""
+"wrap-and-sort - envolve linhas longas e ordena itens em ficheiros de "
+"empacotamento Debian"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:21
+msgid "B<wrap-and-sort> [I<options>]"
+msgstr "B<wrap-and-sort> [I<options>]"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:30
+msgid ""
+"B<wrap-and-sort> wraps the package lists in Debian control files. By default "
+"the lists will only split into multiple lines if the entries are longer than "
+"the maximum line length limit of 79 characters. B<wrap-and-sort> sorts the "
+"package lists in Debian control files and all I<.dirs>, I<.docs>, I<."
+"examples>, I<.info>, I<.install>, I<.links>, I<.maintscript>, and I<."
+"manpages> files. Beside that B<wrap-and-sort> removes trailing spaces in "
+"these files."
+msgstr ""
+"B<wrap-and-sort> embrulha as listas de pacotes em ficheiros de controle "
+"Debian. Por predefinição as listas irão apenas dividir-se em várias linhas "
+"se as entradas forem mais longas que o limite máximo de comprimento de linha "
+"de 79 caracteres. B<wrap-and-sort> ordena as listas de pacotes em ficheiro "
+"de controlo Debian e todos os ficheiros I<.dirs>, I<.docs>, I<.examples>, I<."
+"info>, I<.install>, I<.links>, I<.maintscript>, e I<.manpages>. Para além "
+"disso o B<wrap-and-sort> remove os espaços finais nestes ficheiros."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:34
+msgid ""
+"This script should be run in the root of a Debian package tree. It searches "
+"for I<control>, I<control*.in>, I<copyright>, I<copyright.in>, I<install>, "
+"and I<*.install> in the I<debian> directory."
+msgstr ""
+"Este script deve ser corrido na raiz de uma árvore de pacote Debian. Procura "
+"por I<control>, I<control*.in>, I<copyright>, I<copyright.in>, I<install>, e "
+"I<*.install> no directório I<debian>."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:39
+#, no-wrap
+msgid "B<-a>, B<--wrap-always>"
+msgstr "B<-a>, B<--wrap-always>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:43
+msgid ""
+"Wrap all package lists in the Debian I<control> file even if they do not "
+"exceed the line length limit and could fit in one line."
+msgstr ""
+"Embrulha todas as listas de pacotes no ficheiro I<control> de Debian mesmo "
+"que não excedam o limite de comprimento de linha e possam caber em uma linha."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:43
+#, no-wrap
+msgid "B<-s>, B<--short-indent>"
+msgstr "B<-s>, B<--short-indent>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:47
+msgid ""
+"Only indent wrapped lines by one space (default is in-line with the field "
+"name)."
+msgstr ""
+"Apenas recua as linhas envolvidas em um espaço (a predefinição é em-linha "
+"com o campo do nome)."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:47
+#, no-wrap
+msgid "B<-b>, B<--sort-binary-packages>"
+msgstr "B<-b>, B<--sort-binary-packages>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:50
+msgid "Sort binary package paragraphs by name."
+msgstr "Ordena parágrafos de pacote binário pelo nome."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:50
+#, no-wrap
+msgid "B<-k>, B<--keep-first>"
+msgstr "B<-k>, B<--keep-first>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:53
+msgid "When sorting binary package paragraphs, leave the first one at the top."
+msgstr ""
+"Quando ordena parágrafos de pacotes binários, deixa o primeiro no topo."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:57
+msgid ""
+"Unqualified B<debhelper>(7) configuration files are applied to the first "
+"package."
+msgstr ""
+"Ficheiros de configuração do B<debhelper>(7) não qualificados são aplicados "
+"ao primeiro pacote."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:57
+#, no-wrap
+msgid "B<-n>, B<--no-cleanup>"
+msgstr "B<-n>, B<--no-cleanup>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:60
+msgid "Do not remove trailing whitespaces."
+msgstr "Não remove os espaços em brancos finais."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:60
+#, no-wrap
+msgid "B<-t>, B<--trailing-comma>"
+msgstr "B<-t>, B<--trailing-comma>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:65
+msgid ""
+"Add a trailing comma at the end of the sorted fields. This minimizes future "
+"differences in the VCS commits when additional dependencies are appended or "
+"removed."
+msgstr ""
+"Adiciona uma vírgula final no final dos campos ordenados. Isto minimiza "
+"diferenças futuras nos envios VCS quando são acrescentadas ou removidas "
+"dependências adicionais."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:65
+#, no-wrap
+msgid "B<-d >I<path>, B<--debian-directory=>I<path>"
+msgstr "B<-d >I<path>, B<--debian-directory=>I<path>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:68
+msgid "Location of the I<debian> directory (default: I<./debian>)."
+msgstr "Localização do directório I<debian> (predefinido: I<./debian>)."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:68
+#, no-wrap
+msgid "B<-f >I<file>, B<--file=>I<file>"
+msgstr "B<-f >I<file>, B<--file=>I<file>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:73
+msgid ""
+"Wrap and sort only the specified I<file>. You can specify this parameter "
+"multiple times. All supported files will be processed if no files are "
+"specified."
+msgstr ""
+"Envolve e ordena apenas o I<file> especificado. Você pode especificar este "
+"parâmetro várias vezes. Serão processados todos os ficheiros suportados se "
+"não for especificado nenhum ficheiro."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:76
+msgid "Print all files that are touched."
+msgstr "Escreve todos os ficheiros que são tocados."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:76
+#, no-wrap
+msgid "B<--max-line-length=>I<max_line_length>"
+msgstr "B<--max-line-length=>I<max_line_length>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:80
+msgid ""
+"Set the maximum allowed line length. Package lists in the Debian I<control> "
+"file that exceed this length limit will be wrapped."
+msgstr ""
+"Define o comprimento máximo permitido de linha. As listas de pacotes no "
+"ficheiro I<control> de Debian que excedam este comprimento serão embrulhados."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:82
+msgid "The default maximum line length is 79 characters."
+msgstr "O comprimento máximo de linha predefinido é 79 caracteres."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:82
+#, no-wrap
+msgid "B<-N>, B<--dry-run>"
+msgstr "B<-N>, B<--dry-run>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:85
+msgid ""
+"Do not modify any file, instead only print the files that would be modified."
+msgstr ""
+"Não modifica nenhum ficheiro, em vez disso apenas escreve os ficheiros que "
+"seriam modificados."
+
+#. type: TP
+#: ../doc/wrap-and-sort.1:86
+#, no-wrap
+msgid "B<--experimental-rts-parser>"
+msgstr "B<--experimental-rts-parser>"
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:90
+msgid ""
+"Enable the experimental round-trip safe parser. When enabled, most comments "
+"in deb822 control will be preserved."
+msgstr ""
+"Activa o analisador seguro experimental round-trip. Quando activo, a maioria "
+"dos comentários no controle deb822 irão ser preservados."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:94
+msgid ""
+"The option is a temporary means to enable users to opt-in to this new "
+"experimental feature. The option will be removed once the new parser is "
+"mature enough and is ready to unconditionally replace the previous parser."
+msgstr ""
+"A opção é um meio temporário de fazer os utilizadores optarem por esta nova "
+"funcionalidade experimental. A opção será removida assim que o novo "
+"analisador esteja suficientemente maduro e pronto para substituir "
+"incondicionalmente o analisador anterior."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:97
+msgid ""
+"This option requires python-debian version 0.1.43 or later to work. "
+"However, some features will require 0.1.44 or later."
+msgstr ""
+"Esta opção requer python-debian versão 0.1.43 ou posterior para funcionar. "
+"No entanto, algumas funcionalidades irão requerer 0.1.44 ou posterior."
+
+#. type: Plain text
+#: ../doc/wrap-and-sort.1:101
+msgid ""
+"B<wrap-and-sort> and this manpage have been written by Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+msgstr ""
+"B<wrap-and-sort> e este manual foram escritos por Benjamin Drung "
+"E<lt>bdrung@debian.orgE<gt>."
+
+#. type: TH
+#: ../doc/devscripts.conf.5:1
+#, no-wrap
+msgid "DEVSCRIPTS.CONF"
+msgstr "DEVSCRIPTS.CONF"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:4
+msgid "devscripts.conf - configuration file for the devscripts package"
+msgstr "devscripts.conf - ficheiro de configuração para o pacote devscripts"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:9
+msgid ""
+"The B<devscripts> package provides a collection of scripts which may be of "
+"use to Debian developers and others wishing to build Debian packages. Many "
+"of these have options which can be configured on a system-wide and per-user "
+"basis."
+msgstr ""
+"O pacote B<devscripts> fornece uma colecção de scripts que podem ser úteis "
+"para desenvolvedores de Debian e a outros que desejem construir pacotes "
+"Debian. Muitos destes têm opções que podem ser configuradas em bases de todo-"
+"o-sistema ou por-utilizador."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:15
+msgid ""
+"Every script in the B<devscripts> package which makes use of values from "
+"these configuration files describes the specific settings recognised in its "
+"own manpage. (For a list of the scripts, either see I</usr/share/doc/"
+"devscripts/README.gz> or look at the output of I<dpkg -L devscripts | grep /"
+"usr/bin>.)"
+msgstr ""
+"Cada script no pacote B<devscripts> que faz uso de valores de estes "
+"ficheiros de configuração descreve as definições especificas reconhecidas no "
+"seu próprio manual. (Para uma lista dos scripts ou veja I</usr/share/doc/"
+"devscripts/README.gz> ou veja o resultado de I<dpkg -L devscripts | grep /"
+"usr/bin>.)"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:24
+msgid ""
+"The two configuration files are I</etc/devscripts.conf> for system-wide "
+"defaults and I<~/.devscripts> for per-user settings. They are written with "
+"B<bash>(1) syntax, but should only have comments and simple variable "
+"assignments in them; they are both sourced (if present) by many of the "
+"B<devscripts> scripts. Variables corresponding to simple switches should "
+"have one of the values I<yes> and I<no>; any other setting is regarded as "
+"equivalent to the default setting."
+msgstr ""
+"Os dois ficheiros de configuração são I</etc/devscripts.conf> para as "
+"predefinições gerais-do-sistema e I<~/.devscripts> para as definições por-"
+"utilizador. Estão escritos com sintaxe de B<bash>(1), mas devem apenas ter "
+"comentários e atribuições simples de variáveis neles, são ambos originários "
+"(se presentes) por muitos dos scripts do B<devscripts>. As variáveis que "
+"correspondem a switches simples deve ter um dos valores I<yes> e I<no>; "
+"qualquer outra definição é vista como equivalente à definição predefinida."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:28
+msgid ""
+"All variable names are written in uppercase, and begin with the script "
+"name. Package-wide variables begin with \"DEVSCRIPTS\", and are listed "
+"below, as well as in the relevant manpages."
+msgstr ""
+"Todos os nomes de variáveis são escritos em letra maiúscula, e começam com o "
+"nome do script. As variáveis globais-de-pacotes começam com \"DEVSCRIPTS\", "
+"e estão listadas em baixo, assim como os seus manuais relevantes."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:36
+msgid ""
+"For a list of all of the available options variables, along with their "
+"default settings, see the example configuration file I</usr/share/doc/"
+"devscripts/devscripts.conf.ex>. This is copied to I</etc/devscripts.conf> "
+"when the B<devscripts> package is first installed. Information about "
+"configuration options introduced in newer versions of the package will be "
+"appended to I</etc/devscripts.conf> when the package is upgraded."
+msgstr ""
+"Para uma lista de todas variáveis de opções disponíveis, juntamente com as "
+"suas definições predefinidas, veja o exemplo de ficheiro de configuração I</"
+"usr/share/doc/devscripts/devscripts.conf.ex>. Este é copiado para I</etc/"
+"devscripts.conf> quando o pacote B<devscripts> é instalado. A informação "
+"acerca de opções de configuração introduzidas em novas versões do pacote é "
+"acrescentada a I</etc/devscripts.conf> quando o pacote é actualizado."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:40
+msgid ""
+"Every script which reads the configuration files can be forced to ignore "
+"them by using B<--no-conf> as the I<first> command-line option."
+msgstr ""
+"Qualquer script que leia os ficheiros de configuração pode ser forçado a "
+"ignora-los usando B<--no-conf> como a I<primeira> opção de linha de comandos."
+
+#. type: SH
+#: ../doc/devscripts.conf.5:40
+#, no-wrap
+msgid "PACKAGE-WIDE VARIABLES"
+msgstr "VARIÁVEIS GLOBAIS-DE-PACOTES"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:42
+msgid "The currently recognised package-wide variables are:"
+msgstr "As variáveis globais-de-pacotes actualmente reconhecidas são:"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:54
+msgid ""
+"These variables control scripts which change directory to find a I<debian/"
+"changelog> file or suchlike, and some other miscellaneous cases. In order "
+"to prevent unwanted, even possibly dangerous, behaviour, these variables "
+"control when actions will be performed. The scripts which currently make "
+"use of these variables are: B<debc>, B<debchange>/B<dch>, B<debclean>, "
+"B<debi>, B<debrelease>, B<debuild> and B<uscan>, but this list may change "
+"with time (and I may not remember to update this manpage). Please see the "
+"manpages of individual scripts for details of the specific behaviour for "
+"each script."
+msgstr ""
+"Estas variáveis controlam scripts que mudam de directório para encontrar um "
+"ficheiro I<debian/changelog> ou do mesmo género, e alguns outros casos "
+"variados. De modo a prevenir comportamentos não desejados, até possivelmente "
+"perigosos, estas variáveis controlam quando as acções irão ser executadas. "
+"Os scripts que actualmente usam estas variáveis são B<debc>, B<debchange>/"
+"B<dch>, B<debclean>, B<debi>, B<debrelease>, B<debuild> e B<uscan>, mas esta "
+"lista pode mudar a qualquer altura (e Eu posso não me lembrar de actualizar "
+"este manual). Por favor veja os manuais individuais dos scripts para "
+"detalhes sobre o comportamento específico de cada script."
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:58
+msgid "B<devscripts>(1) and I</usr/share/doc/devscripts/README.gz.>"
+msgstr "B<devscripts>(1) and I</usr/share/doc/devscripts/README.gz.>"
+
+#. type: Plain text
+#: ../doc/devscripts.conf.5:60
+msgid ""
+"This manpage was written for the B<devscripts> package by the package "
+"maintainer Julian Gilbey E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+"Este manual foi escrito para o pacote B<devscripts> pelo maintainer do "
+"pacote Julian Gilbey E<lt>jdg@debian.orgE<gt>."
diff --git a/scripts/Makefile b/scripts/Makefile
new file mode 100644
index 0000000..88f9a73
--- /dev/null
+++ b/scripts/Makefile
@@ -0,0 +1,172 @@
+
+include ../Makefile.common
+include /usr/share/dpkg/vendor.mk
+DESTDIR =
+
+define \n
+
+
+endef
+
+VERSION_FILE = ../version
+VERSION = $(shell cat $(VERSION_FILE))
+
+PL_FILES := $(wildcard *.pl)
+SH_FILES = $(wildcard *.sh)
+CWRAPPERS = debpkg-wrapper
+SCRIPTS = $(patsubst %.pl,%,$(PL_FILES)) $(patsubst %.sh,%,$(SH_FILES))
+PL_CHECKS = $(patsubst %.pl,%.pl_check,$(PL_FILES))
+SH_CHECKS = $(patsubst %.sh,%.sh_check,$(SH_FILES))
+COMPL_FILES := $(wildcard *.bash_completion)
+BC_BUILD_DIR:=bash_completion
+COMPLETION = $(patsubst %.bash_completion,$(BC_BUILD_DIR)/%,$(COMPL_FILES))
+COMPL_DIR := $(shell pkg-config --variable=completionsdir bash-completion)
+PKGNAMES := \
+ build-rdeps \
+ dd-list \
+ debcheckout \
+ debsnap \
+ dget \
+ getbuildlog \
+ grep-excuses \
+ mass-bug \
+ mk-build-deps \
+ pts-subscribe \
+ pts-unsubscribe \
+ rc-alert \
+ rmadison \
+ transition-check \
+ who-uploads \
+ whodepends \
+ wnpp-alert \
+ wnpp-check \
+
+GEN_MAN1S += \
+ deb-why-removed.1 \
+ debbisect.1 \
+ debootsnap.1 \
+ debrebuild.1 \
+ debrepro.1 \
+ ltnu.1 \
+ mk-origtargz.1 \
+ salsa.1 \
+ reproducible-check.1 \
+ uscan.1 \
+
+all: $(SCRIPTS) $(GEN_MAN1S) $(CWRAPPERS) $(COMPLETION)
+
+scripts: $(SCRIPTS)
+
+$(VERSION_FILE):
+ $(MAKE) -C .. version
+
+%: %.sh
+
+debchange: debchange.pl $(VERSION_FILE)
+ sed "s/###VERSION###/$(VERSION)/" $< > $@
+ chmod --reference=$< $@
+ifeq ($(DEB_VENDOR),Ubuntu)
+# On Ubuntu always default to targeting the release that it's built on,
+# not the current devel release, since its primary use on stable releases
+# will be for preparing PPA uploads.
+ sed -i 's/get_ubuntu_devel_distro()/"$(shell lsb_release -cs)"/' $@
+endif
+
+%.tmp: %.sh $(VERSION_FILE)
+ sed -e "s/###VERSION###/$(VERSION)/" $< > $@
+%.tmp: %.pl $(VERSION_FILE)
+ sed -e "s/###VERSION###/$(VERSION)/" $< > $@
+%: %.tmp
+ cp $< $@
+ chmod +x $@
+
+%.1: %.pl
+ podchecker $<
+ pod2man --utf8 --center=" " --release="Debian Utilities" $< > $@
+%.1: %.pod
+ podchecker $<
+ pod2man --utf8 --center=" " --release="Debian Utilities" $< > $@
+%.1: %.dbk
+ xsltproc --nonet -o $@ \
+ /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl $<
+
+# Syntax checker
+test_sh: $(SH_CHECKS)
+%.sh_check: %
+ bash -n $<
+
+test_pl: $(PL_CHECKS)
+%.pl_check: %
+ perl -I ../lib -c $<; \
+
+test_py: $(VERSION_FILE)
+ $(foreach python,$(shell py3versions -r ../debian/control),$(python) setup.py test$(\n))
+
+debbisect.1: debbisect
+ help2man \
+ --name="bisect snapshot.debian.org" \
+ --version-string=$(VERSION) \
+ --no-info \
+ --no-discard-stderr \
+ ./$< >$@
+
+debootsnap.1: debootsnap
+ help2man \
+ --name="create debian chroot using snapshot.debian.org" \
+ --version-string=$(VERSION) \
+ --no-info \
+ --no-discard-stderr \
+ ./$< >$@
+
+debrebuild.1: debrebuild
+ help2man \
+ --name="use a buildinfo file and snapshot.d.o to recreate binary packages" \
+ --version-string=$(VERSION) \
+ --no-info \
+ --no-discard-stderr \
+ ./$< >$@
+
+reproducible-check.1: reproducible-check
+ help2man \
+ --name="Reports on the reproducible status of installed packages" \
+ --no-info \
+ --no-discard-stderr \
+ ./$< >$@
+
+$(BC_BUILD_DIR):
+ mkdir $(BC_BUILD_DIR)
+
+$(COMPLETION): $(BC_BUILD_DIR)/% : %.bash_completion $(BC_BUILD_DIR)
+ cp $< $@
+
+clean:
+ rm -f devscripts/__init__.py
+ find -name '*.pyc' -delete
+ find -name __pycache__ -delete
+ rm -rf devscripts.egg-info $(BC_BUILD_DIR) .pylint.d
+ rm -f $(SCRIPTS) $(patsubst %,%.tmp,$(SCRIPTS)) \
+ $(GEN_MAN1S) $(SCRIPT_LIBS) $(CWRAPPERS)
+
+
+test: test_pl test_sh test_py
+
+install: all
+ python3 setup.py install --root="$(DESTDIR)" --no-compile --install-layout=deb
+ cp $(SCRIPTS) $(DESTDIR)$(BINDIR)
+ ln -sf edit-patch $(DESTDIR)$(BINDIR)/add-patch
+ install -d $(DESTDIR)$(COMPL_DIR)
+ cp $(BC_BUILD_DIR)/* $(DESTDIR)$(COMPL_DIR)/
+ for i in $(PKGNAMES); do \
+ ln -sf pkgnames $(DESTDIR)$(COMPL_DIR)/$$i; \
+ done
+ ln -sf debchange $(DESTDIR)$(COMPL_DIR)/dch
+ ln -sf debi $(DESTDIR)$(COMPL_DIR)/debc
+ # Special treatment for debpkg and run_bisect
+ install -d $(DESTDIR)$(DATA_DIR)
+ mv $(DESTDIR)$(BINDIR)/debpkg $(DESTDIR)$(DATA_DIR)
+ cp debpkg-wrapper $(DESTDIR)$(BINDIR)/debpkg
+ install -d $(DESTDIR)$(DATA_DIR)/scripts
+ mv $(DESTDIR)$(BINDIR)/run_bisect $(DESTDIR)$(DATA_DIR)/scripts
+ mv $(DESTDIR)$(BINDIR)/run_bisect_qemu $(DESTDIR)$(DATA_DIR)/scripts
+
+.PHONY: test test_pl test_sh test_py all install clean scripts
diff --git a/scripts/annotate-output.1 b/scripts/annotate-output.1
new file mode 100644
index 0000000..f2fec00
--- /dev/null
+++ b/scripts/annotate-output.1
@@ -0,0 +1,59 @@
+.TH ANNOTATE-OUTPUT 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+annotate-output \- annotate program output with time and stream
+.SH SYNOPSIS
+\fBannotate\-output\fR [\fIoptions\fR] \fIprogram\fR [\fIargs\fR ...]
+.SH DESCRIPTION
+\fBannotate\-output\fR will execute the specified program, while
+prepending every line with the current time and O for stdout and E for
+stderr.
+
+.SH OPTIONS
+.TP
+\fB+FORMAT\fR
+Controls the timestamp format, as per \fBdate\fR(1). Defaults to
+"%H:%M:%S".
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Display a help message and exit successfully.
+
+.SH EXAMPLE
+
+.nf
+$ annotate-output make
+21:41:21 I: Started make
+21:41:21 O: gcc \-Wall program.c
+21:43:18 E: program.c: Couldn't compile, and took me ages to find out
+21:43:19 E: collect2: ld returned 1 exit status
+21:43:19 E: make: *** [all] Error 1
+21:43:19 I: Finished with exitcode 2
+.fi
+
+.SH BUGS
+Since stdout and stderr are processed in parallel, it can happen that
+some lines received on stdout will show up before later-printed stderr
+lines (and vice-versa).
+
+This is unfortunately very hard to fix with the current annotation
+strategy. A fix would involve switching to PTRACE'ing the process.
+Giving nice a (much) higher priority over the executed program could
+however cause this behaviour to show up less frequently.
+
+The program does not work as well when the output is not linewise. In
+particular, when an interactive program asks for input, the question
+might not be shown until after you have answered it. This will give
+the impression that the annotated program has hung, while it has not.
+
+.SH "SEE ALSO"
+\fBdate\fR(1)
+
+.SH SUPPORT
+This program is community-supported (meaning: you'll need to fix it
+yourself). Patches are however appreciated, as is any feedback
+(positive or negative).
+
+.SH AUTHOR
+\fBannotate-output\fR was written by Jeroen van Wolffelaar
+<jeroen@wolffelaar.nl>. This manpage comes under the same copyright as
+annotate-output itself, read /usr/bin/annotate-output (or wherever
+you install it) for the details.
diff --git a/scripts/annotate-output.sh b/scripts/annotate-output.sh
new file mode 100755
index 0000000..8ed7276
--- /dev/null
+++ b/scripts/annotate-output.sh
@@ -0,0 +1,102 @@
+#!/bin/bash
+# this script was downloaded from:
+# https://jeroen.a-eskwadraat.nl/sw/annotate
+# and is part of devscripts ###VERSION###
+
+# Executes a program annotating the output linewise with time and stream
+# Version 1.2
+
+# Copyright 2003, 2004 Jeroen van Wolffelaar <jeroen@wolffelaar.nl>
+
+# 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; version 2 of the License
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+PROGNAME=${0##*/}
+
+addtime() {
+ while IFS= read -r line; do
+ printf "%s %s: %s\n" "$(date "${FMT}")" "$1" "$line"
+ done
+ if [ ! -z "$line" ]; then
+ printf "%s %s: %s" "$(date "${FMT}")" "$1" "$line"
+ fi
+}
+
+addprefix() {
+ while IFS= read -r line; do
+ printf "%s: %s\n" "$1" "$line"
+ done
+ if [ ! -z "$line" ]; then
+ printf "%s: %s" "$1" "$line"
+ fi
+}
+
+usage() {
+ echo \
+"Usage: $PROGNAME [options] program [args ...]
+ Run program and annotate STDOUT/STDERR with a timestamp.
+
+ Options:
+ +FORMAT - Controls the timestamp format as per date(1)
+ -h, --help - Show this message"
+}
+
+FMT="+%H:%M:%S"
+while [ "$1" ]; do
+ case "$1" in
+ +*)
+ FMT="$1"
+ shift
+ ;;
+ -h|-help|--help)
+ usage
+ exit 0
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+if [ $# -lt 1 ]; then
+ usage
+ exit 1
+fi
+
+cleanup() { __st=$?; rm -rf "$tmp"; exit $__st; }
+trap cleanup 0
+trap 'exit $?' 1 2 13 15
+
+tmp=$(mktemp -d --tmpdir annotate.XXXXXX) || exit 1
+OUT=$tmp/out
+ERR=$tmp/err
+
+mkfifo $OUT $ERR || exit 1
+
+if [ "${FMT/\%}" != "${FMT}" ] ; then
+ addtime O < $OUT &
+ addtime E < $ERR &
+else
+ # If FMT does not contain a %, use the optimized version that
+ # does not call 'date'.
+ addprefix "${FMT#+} O" < $OUT &
+ addprefix "${FMT#+} E" < $ERR &
+fi
+
+echo "Started $@" | addtime I
+"$@" > $OUT 2> $ERR ; EXIT=$?
+rm -f $OUT $ERR
+wait
+
+echo "Finished with exitcode $EXIT" | addtime I
+
+exit $EXIT
diff --git a/scripts/archpath.1 b/scripts/archpath.1
new file mode 100644
index 0000000..6425645
--- /dev/null
+++ b/scripts/archpath.1
@@ -0,0 +1,63 @@
+.TH ARCHPATH 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+archpath \- output arch (tla/Bazaar) archive names, with support for branches
+.SH SYNOPSIS
+.B archpath
+.br
+.B archpath
+.I branch
+.br
+.B archpath
+.IR branch \fB--\fI version
+.SH DESCRIPTION
+.B archpath
+is intended to be run in an arch (tla or Bazaar) working copy.
+.PP
+In its simplest usage,
+.B archpath
+with no parameters outputs the package name
+(archive/category--branch--version) associated with the working copy.
+.PP
+If a parameter is given, it may either be a branch--version, in which case
+.B archpath
+will output a corresponding package name in the current archive and
+category, or a plain branch name (without \(oq--\(dq), in which case
+.B archpath
+will output a corresponding package name in the current archive and
+category and with the same version as the current working copy.
+.PP
+This is useful for branching.
+For example, if you're using Bazaar and you want to create a branch for a
+new feature, you might use a command like this:
+.PP
+.RS
+.nf
+.ft CW
+baz branch $(archpath) $(archpath new-feature)
+.ft R
+.fi
+.RE
+.PP
+Or if you want to tag your current code onto a \(oqreleases\(cq branch as
+version 1.0, you might use a command like this:
+.PP
+.RS
+.nf
+.ft CW
+baz branch $(archpath) $(archpath releases--1.0)
+.ft R
+.fi
+.RE
+.PP
+That's much easier than using \(oqbaz tree-version\(cq to look up the
+package name and manually modifying the result.
+.SH AUTHOR
+.B archpath
+was written by
+.na
+Colin Watson <cjwatson@debian.org>.
+.ad
+Like
+.BR archpath ,
+this manual page is released under the GNU General Public License,
+version 2 or later.
diff --git a/scripts/archpath.sh b/scripts/archpath.sh
new file mode 100755
index 0000000..7fd943d
--- /dev/null
+++ b/scripts/archpath.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# Output arch (tla/Bazaar) archive names, with support for branches
+
+# Copyright (C) 2005 Colin Watson <cjwatson@debian.org>
+
+# 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 <https://www.gnu.org/licenses/>.
+
+set -e
+
+# Which arch implementation should we use?
+if type baz > /dev/null 2>&1; then
+ PROGRAM=baz
+else
+ PROGRAM=tla
+fi
+
+WANTED="$1"
+ME="$($PROGRAM tree-version)"
+
+if [ "$WANTED" ]; then
+ ARCHIVE="$($PROGRAM parse-package-name --arch "$ME")"
+ CATEGORY="$($PROGRAM parse-package-name --category "$ME")"
+ case $WANTED in
+ *--*)
+ echo "$ARCHIVE/$CATEGORY--$WANTED"
+ ;;
+ *)
+ VERSION="$($PROGRAM parse-package-name --vsn "$ME")"
+ echo "$ARCHIVE/$CATEGORY--$WANTED--$VERSION"
+ ;;
+ esac
+else
+ echo "$ME"
+fi
diff --git a/scripts/bts.bash_completion b/scripts/bts.bash_completion
new file mode 100644
index 0000000..c5f6288
--- /dev/null
+++ b/scripts/bts.bash_completion
@@ -0,0 +1,319 @@
+# /usr/share/bash-completion/completions/bts
+# Bash command completion for ‘bts(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+# Copyright © 2015, Nicholas Bamber <nicholas@periapt.co.uk>
+
+_get_version_from_package()
+{
+ local _pkg=$1
+ [[ -n $_pkg ]] || return
+ apt-cache madison $_pkg 2> /dev/null | cut -d'|' -f2 | sort | uniq | paste -s -d' '
+}
+
+# This works really well unless someone sets up nasty firewall rules like:
+# sudo iptables -A OUTPUT -d 206.12.19.140 -j DROP
+# sudo iptables -A OUTPUT -d 140.211.166.26 -j DROP
+# These block access to the Debian bugs SOAP interface.
+# Hence we need a timeout.
+# Of course if the SOAP interface is blocked then so is the caching interface.
+# So really this would only affect someone who only accidentally hit the TAB key.
+_get_version_from_bug()
+{
+ local -i _bug=$1
+ _get_version_from_package $( bts --soap-timeout=2 status $_bug fields:package 2> /dev/null | cut -f2 )
+}
+
+_suggest_packages()
+{
+ apt-cache --no-generate pkgnames "$1" 2> /dev/null
+}
+
+_suggest_bugs()
+{
+ bts --offline listcachedbugs "$1" 2> /dev/null
+}
+
+_bts()
+{
+ local cur prev words cword
+ _init_completion -n = || return
+
+ # Note:
+ # The long lists of subcommands are not the same and not necessarily to be kept in sync.
+ # The first is used to suggest commands after a '.' or ','.
+ # The second is to hook in special handling (which may be as little as admitting we
+ # we can't handle it further) or the default special handling (list of bug ids).
+ # This also includes "by" and "with" which are not even subcommands.
+ # The third is similar to the first - what to suggest after the bts command (and options).
+ # but this includes the "help" and "version" commands.
+
+ # A sequence of bts commands can be on one command line separated by "." or ",".
+ if [[ $prev == @(.|,) ]]; then
+ COMPREPLY=( $( compgen -W 'show bugs unmerge select status clone done reopen archive unarchive retitle summary submitter reassign found notfound fixed notfixed block unblock merge forcemerge tags affects user usertags claim unclaim severity forwarded notforwarded package limit owner noowner subscribe unsubscribe reportspam spamreport' -- "$cur" ) )
+ return 0
+ fi
+
+ # Identify the last command in the command line.
+ local special punctuation i
+ for (( i=${#words[@]}-1; i > 0; i-- )); do
+ if [[ ${words[i]} == @(show|bugs|select|limit|unmerge|status|clone|done|reopen|archive|unarchive|retitle|summary|submitter|reassign|found|notfound|fixed|notfixed|block|unblock|merge|forcemerge|tags|affects|user|usertags|claim|unclaim|severity|forwarded|notforwarded|package|owner|noowner|subscribe|unsubscribe|reportspam|spamreport|cache|cleancache|by|with) ]]; then
+ special=${words[i]}
+ break
+ fi
+ if [[ ${words[i]} == @(+|-|=) ]]; then
+ punctuation=${words[i]}
+ fi
+ done
+
+ if [[ -n $special ]]; then
+
+ # The command separator must be surrounded by white space.
+ if [[ "$cur" == @(,|.) ]]; then
+ COMPREPLY=( $cur )
+ return 0
+ fi
+
+ case $special in
+ show|bugs)
+ # bugs/show supports a few limited options
+ # but as args we accept bug ids, package names and release-critical
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-o --offline --online -m --mbox \
+ --no-cache --cache' -- "$cur" ) )
+ elif [[ "$cur" == release-critical/* ]]; then
+ local _pkg=${cur#release-critical/}
+ COMPREPLY=( $( _suggest_packages "$_pkg" | sed -e's!^!release-critical/!' ) )
+ else
+ COMPREPLY=( $( compgen -W 'release-critical RC' -- "$cur" ) \
+ $( _suggest_bugs "$cur" ) \
+ $( _suggest_packages "$cur" ) )
+ fi
+ return 0
+ ;;
+ status)
+ # we accept "verbose" and bug ids
+ COMPREPLY=( $( compgen -W 'verbose' -- "$cur" ) \
+ $( _suggest_bugs "$cur" ) )
+ return 0
+ ;;
+ clone)
+ # we accept 1 bug id and then generate new clone ids
+ if [[ "$prev" == +([0-9]) ]]; then
+ COMPREPLY=( $( compgen -W '-1' -- "$cur" ) )
+ elif [[ "$prev" == -+([0-9]) ]]; then
+ local -i j
+ (( j=$prev-1 ))
+ COMPREPLY=( $( compgen -W $j -- "$cur" ) )
+ else
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ fi
+ return 0
+ ;;
+ done|found|notfound|fixed|notfixed)
+ # Try to guess the version
+ if [[ "$prev" == +([0-9]) ]]; then
+ local _versions=$( _get_version_from_bug $prev )
+ if [[ -n $_versions ]]; then
+ COMPREPLY=( $( compgen -W $_versions -- "$cur" ) )
+ else
+ COMPREPLY=( )
+ fi
+ else
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ fi
+ return 0
+ ;;
+ reopen|claim|unclaim|owner|subscribe|unsubscribe)
+ if [[ "$prev" == +([0-9]) && -n $DEBEMAIL ]]; then
+ COMPREPLY=( $( compgen -W $DEBEMAIL -- "$cur" ) )
+ else
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ fi
+ return 0
+ ;;
+ reassign)
+ # Must have at least one bug id.
+ # Once we have a package name, all that remains is an optional version.
+ if [[ "$prev" == $special ]]; then
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ elif [[ "$prev" == +([0-9]) ]]; then
+ COMPREPLY=( $( _suggest_bugs "$cur" ) \
+ $( _suggest_packages "$cur" ) )
+ else
+ local _versions=$( _get_version_from_package $prev )
+ COMPREPLY=( $( compgen -W $_versions -- "$cur" ) )
+ fi
+ return 0
+ ;;
+ block|unblock)
+ # Must have at least one bug id.
+ if [[ "$prev" == $special ]]; then
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ elif [[ "$prev" == +([0-9]) ]]; then
+ COMPREPLY=( $( compgen -W 'by with' -- "$cur" ) )
+ else
+ COMPREPLY=( )
+ fi
+ return 0
+ ;;
+ unmerge|forwarded|notforwarded|noowner)
+ # Must have at most one bug id.
+ if [[ "$prev" == $special ]]; then
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ else
+ COMPREPLY=( )
+ fi
+ return 0
+ ;;
+ tags)
+ # Must have one bug id.
+ if [[ "$prev" == $special ]]; then
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ elif [[ -n $punctuation ]]; then
+ # The official list is mirrored
+ # https://www.debian.org/Bugs/server-control#tag
+ # in the variable @gTags; we copy it verbatim here.
+ COMPREPLY=( $( compgen -W 'patch wontfix moreinfo unreproducible fixed potato woody sid help security upstream pending sarge sarge-ignore experimental d-i confirmed ipv6 lfs fixed-in-experimental fixed-upstream l10n newcomer a11y ftbfs etch etch-ignore lenny lenny-ignore squeeze squeeze-ignore wheezy wheezy-ignore jessie jessie-ignore stretch stretch-ignore buster buster-ignore bullseye bullseye-ignore' -- "$cur" ) )
+ else
+ COMPREPLY=()
+ COMPREPLY[0]='= '
+ COMPREPLY[1]='+ '
+ COMPREPLY[2]='- '
+ fi
+ return 0
+ ;;
+ affects)
+ # Must have one bug id.
+ if [[ "$prev" == $special ]]; then
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ elif [[ -n $punctuation ]]; then
+ COMPREPLY=( $( _suggest_packages "$cur" ) )
+ else
+ COMPREPLY=()
+ COMPREPLY[0]='= '
+ COMPREPLY[1]='+ '
+ COMPREPLY[2]='- '
+ fi
+ return 0
+ ;;
+ user)
+ if [[ "$prev" == $special && -n $DEBEMAIL ]]; then
+ COMPREPLY=( $( compgen -W $DEBEMAIL -- "$cur" ) )
+ else
+ COMPREPLY=( )
+ fi
+ return 0
+ ;;
+ usertags)
+ # Must have one bug id.
+ if [[ "$prev" == $special ]]; then
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ elif [[ -z $punctuation ]]; then
+ COMPREPLY=()
+ COMPREPLY[0]='= '
+ COMPREPLY[1]='+ '
+ COMPREPLY[2]='- '
+ else
+ COMPREPLY=()
+ fi
+ return 0
+ ;;
+ severity)
+ if [[ "$prev" == $special ]]; then
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ elif [[ "$prev" == +([0-9]) ]]; then
+ COMPREPLY=( $( compgen -W 'wishlist minor normal important serious \
+ grave critical' -- "$cur" ) )
+ else
+ COMPREPLY=()
+ fi
+ return 0
+ ;;
+ select|limit)
+ # can't handle ":". Give up for now.
+ COMPREPLY=( )
+ return 0
+ ;;
+ package)
+ COMPREPLY=( $( _suggest_packages "$cur" ) )
+ return 0
+ ;;
+ cache)
+ # cache supports a few limited options
+ # but as args we accept bug ids, package names and release-critical
+ if [[ "$prev" == --cache-mode ]]; then
+ COMPREPLY=( $( compgen -W 'min mbox full' -- "$cur" ) )
+ elif [[ "$cur" == release-critical/* ]]; then
+ local _pkg=${cur#release-critical/}
+ COMPREPLY=( $( _suggest_packages "$_pkg" | sed -e's!^!release-critical/!' ) )
+ elif [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '--cache-mode --force-refresh -f \
+ --include-resolved -q --quiet' -- "$cur" ) )
+ else
+ COMPREPLY=( $( compgen -W 'release-critical RC' -- "$cur" ) \
+ $( _suggest_packages "$cur" ) )
+ fi
+ return 0
+ ;;
+ cleancache)
+ if [[ "$prev" == $special ]]; then
+ COMPREPLY=( $( compgen -W 'ALL' -- "$cur" ) \
+ $( _suggest_bugs "$cur" ) \
+ $( _suggest_packages "$cur" ) )
+ else
+ COMPREPLY=( )
+ fi
+ return 0
+ ;;
+ *)
+ COMPREPLY=( $( _suggest_bugs "$cur" ) )
+ return 0
+ ;;
+ esac
+ fi
+
+ case $prev in
+ --cache-mode)
+ COMPREPLY=( $( compgen -W 'min mbox full' -- "$cur" ) )
+ return 0
+ ;;
+ --cache-delay)
+ COMPREPLY=( $( compgen -W '5 60 120 240 600' -- "$cur" ) )
+ return 0
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-o --offline --online -n --no-action --cache --no-cache --cache-mode --cache-delay --mbox --no-use-default-cc --mutt --no-mutt -f --force-refresh --no-force-refresh --only-new --include-resolved --no-include-resolved --no-ack --ack -i --interactive --force-interactivei --no-interactive -q --quiet' -- "$cur" ) )
+ else
+ COMPREPLY=( $( compgen -W 'show bugs unmerge select status clone done reopen archive unarchive retitle summary submitter reassign found notfound fixed notfixed block unblock merge forcemerge tags affects user usertags claim unclaim severity forwarded notforwarded package limit owner noowner subscribe unsubscribe reportspam spamreport cache cleancache version help' -- "$cur" ) )
+ fi
+
+ # !!! not handled !!!
+ # --mailreader=READER
+ # --cc-addr=CC_EMAIL_ADDRESS
+ # --use-default-cc
+ # --sendmail=SENDMAILCMD
+ # --smtp-host=SMTPHOST
+ # --smtp-username=USERNAME
+ # --smtp-password=PASSWORD
+ # --smtp-helo=HELO
+ # --bts-server
+ # --no-conf, --noconf
+ #
+ # anything with colons for now
+ # for similar reasons having issues with tags XXXX =
+ # no special handling for select
+
+ return 0
+} &&
+complete -F _bts bts
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/bts.pl b/scripts/bts.pl
new file mode 100755
index 0000000..481cfcd
--- /dev/null
+++ b/scripts/bts.pl
@@ -0,0 +1,4337 @@
+#!/usr/bin/perl
+
+# bts: This program provides a convenient interface to the Debian
+# Bug Tracking System.
+#
+# Written by Joey Hess <joeyh@debian.org>
+# Modifications by Julian Gilbey <jdg@debian.org>
+# Modifications by Josh Triplett <josh@freedesktop.org>
+# Copyright 2001-2003 Joey Hess <joeyh@debian.org>
+# Modifications Copyright 2001-2003 Julian Gilbey <jdg@debian.org>
+# Modifications Copyright 2007 Josh Triplett <josh@freedesktop.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# Use our own subclass of Pod::Text to
+# a) Strip the POD markup before displaying it via "bts help"
+# b) Automatically display the text which is supposed to be replaced by the
+# user between <>, as per convention.
+package Pod::BTS;
+use strict;
+
+use base qw(Pod::Text);
+
+sub cmd_i { return '<' . $_[2] . '>' }
+
+package main;
+
+=head1 NAME
+
+bts - developers' command line interface to the Debian Bug Tracking System
+
+=cut
+
+use 5.010; # for defined-or
+use strict;
+use warnings;
+use File::Basename;
+use File::Copy;
+use File::HomeDir;
+use File::Path qw(make_path rmtree);
+use File::Spec;
+use File::Temp qw/tempfile/;
+use Net::SMTP;
+use Cwd;
+use IO::File;
+use IO::Handle;
+use Devscripts::DB_File_Lock;
+use Devscripts::Debbugs;
+use Fcntl qw(O_RDWR O_RDONLY O_CREAT F_SETFD);
+use Getopt::Long;
+use Encode;
+# Need support for ; as query param separator
+use URI 1.37;
+use URI::QueryParam;
+
+use Scalar::Util qw(looks_like_number);
+use POSIX qw(locale_h strftime);
+
+setlocale(LC_TIME, "C"); # so that strftime is locale independent
+
+# Funny UTF-8 warning messages from HTML::Parse should be ignorable (#292671)
+$SIG{'__WARN__'} = sub {
+ warn $_[0]
+ unless $_[0]
+ =~ /^Parsing of undecoded UTF-8 will give garbage when decoding entities/;
+};
+
+my $it = undef;
+my $last_user = '';
+my $lwp_broken = undef;
+my $authen_sasl_broken;
+my $ua;
+
+sub have_lwp() {
+ return ($lwp_broken ? 0 : 1) if defined $lwp_broken;
+ eval {
+ require LWP;
+ require LWP::UserAgent;
+ require HTTP::Status;
+ require HTTP::Date;
+ };
+
+ if ($@) {
+ if ($@ =~ m%^Can\'t locate LWP%) {
+ $lwp_broken = "the libwww-perl package is not installed";
+ } else {
+ $lwp_broken = "couldn't load LWP::UserAgent: $@";
+ }
+ } else {
+ $lwp_broken = '';
+ }
+ return $lwp_broken ? 0 : 1;
+}
+
+sub have_authen_sasl() {
+ return ($authen_sasl_broken ? 0 : 1) if defined $authen_sasl_broken;
+ eval { require Authen::SASL; };
+
+ if ($@) {
+ if ($@ =~ m%^Can't locate Authen/SASL%) {
+ $authen_sasl_broken
+ = 'the libauthen-sasl-perl package is not installed';
+ } else {
+ $authen_sasl_broken = "couldn't load Authen::SASL: $@";
+ }
+ } else {
+ $authen_sasl_broken = '';
+ }
+ return $authen_sasl_broken ? 0 : 1;
+}
+
+# Constants
+sub MIRROR_ERROR { 0; }
+sub MIRROR_DOWNLOADED { 1; }
+sub MIRROR_UP_TO_DATE { 2; }
+my $NONPRINT = "\\x00-\\x1F\\x7F-\\xFF"; # we need this later for MIME stuff
+
+my $progname = basename($0);
+my $modified_conf_msg;
+my $debug = (exists $ENV{'DEBUG'} and $ENV{'DEBUG'}) ? 1 : 0;
+
+# Program version handling
+# The BTS changed its format :/ Pages downloaded using old versions
+# of bts won't look very good, so we force updating if the last cached
+# version was downloaded by a devscripts version less than
+# $new_cache_format_version
+my $version = '###VERSION###';
+$version = '2.9.6' if $version =~ /\#/; # for testing unconfigured version
+my $new_cache_format_version = '2.9.6';
+
+# The official list is mirrored
+# bugs-mirror.debian.org:/srv/bugs.debian.org/etc/config
+# in the variable @gTags; we copy it verbatim here.
+#
+# Note that it is also in the POD documentation in the bts_tag
+# function below, look for "potato".
+our (@gTags, @valid_tags, %valid_tags);
+#<<< This variable definition should be kept verbatim from the BTS config
+@gTags = ( "patch", "wontfix", "moreinfo", "unreproducible",
+ "help", "security", "upstream", "pending", "confirmed",
+ "ipv6", "lfs", "d-i", "l10n", "newcomer", "a11y", "ftbfs",
+ "fixed-upstream", "fixed", "fixed-in-experimental",
+ "sid", "experimental",
+ "potato", "woody",
+ "sarge", "sarge-ignore", "etch", "etch-ignore",
+ "lenny", "lenny-ignore", "squeeze", "squeeze-ignore",
+ "wheezy", "wheezy-ignore", "jessie", "jessie-ignore",
+ "stretch", "stretch-ignore", "buster", "buster-ignore",
+ "bullseye", "bullseye-ignore","bookworm","bookworm-ignore",
+ "trixie","trixie-ignore",
+ );
+#>>>
+
+*valid_tags = \@gTags;
+%valid_tags = map { $_ => 1 } @valid_tags;
+my @valid_severities = qw(wishlist minor normal important
+ serious grave critical);
+
+my $browser; # Will set if necessary
+
+$ENV{HOME} = File::HomeDir->my_home;
+my $cachedir
+ = $ENV{XDG_CACHE_HOME} || File::Spec->catdir($ENV{HOME}, '.cache');
+$cachedir = File::Spec->catdir($cachedir, 'devscripts', 'bts');
+
+my $timestampdb = File::Spec->catfile($cachedir, 'bts_timestamps.db');
+my $prunestamp = File::Spec->catfile($cachedir, 'bts_prune.timestamp');
+
+my %timestamp;
+
+END {
+ # This works even if we haven't tied it
+ untie %timestamp;
+}
+
+my %clonedbugs = ();
+my %ccpackages = ();
+my %ccsubmitters = ();
+
+=head1 SYNOPSIS
+
+B<bts> [I<options>] I<command> [I<args>] [B<#>I<comment>] [B<.>|B<,> I<command> [I<args>] [B<#>I<comment>]] ...
+
+=head1 DESCRIPTION
+
+This is a command line interface to the Debian Bug Tracking System
+(BTS), intended mainly
+for use by developers. It lets the BTS be manipulated using simple commands
+that can be run at the prompt or in a script, does various sanity checks on
+the input, and constructs and sends a mail to the BTS control address for
+you. A local cache of web pages and e-mails from the BTS may also be
+created and updated.
+
+In general, the command line interface is the same as what you would write
+in a mail to control@bugs.debian.org, just prefixed with "bts". For
+example:
+
+ % bts severity 69042 normal
+ % bts merge 69042 43233
+ % bts retitle 69042 blah blah
+
+A few additional commands have been added for your convenience, and this
+program is less strict about what constitutes a valid bug number. For example,
+"severity Bug#85942 normal" is understood, as is "severity #85942 normal".
+(Of course, your shell may regard "#" as a comment character though, so you
+may need to quote it!)
+
+Also, for your convenience, this program allows you to abbreviate commands
+to the shortest unique substring (similar to how cvs lets you abbreviate
+commands). So it understands things like "bts cl 85942".
+
+It is also possible to include a comment in the mail sent to the BTS. If
+your shell does not strip out the comment in a command like
+"bts severity 30321 normal #inflated severity", then this program is smart
+enough to figure out where the comment is, and include it in the email.
+Note that most shells do strip out such comments before they get to the
+program, unless the comment is quoted. (Something like "bts
+severity #85942 normal" will not be treated as a comment!)
+
+You can specify multiple commands by separating them with a single dot,
+rather like B<update-rc.d>; a single comma may also be used; all the
+commands will then be sent in a single mail. It is important the dot/comma is
+surrounded by whitespace so it is not mistaken for part of a command. For
+example (quoting where necessary so that B<bts> sees the comment):
+
+ % bts severity 95672 normal , merge 95672 95673 \#they are the same!
+
+The abbreviation "it" may be used to refer to the last mentioned bug
+number, so you could write:
+
+ % bts severity 95672 wishlist , retitle it "bts: please add a --foo option"
+
+Please use this program responsibly, and do take our users into
+consideration.
+
+=head1 OPTIONS
+
+B<bts> examines the B<devscripts> configuration files as described
+below. Command line options override the configuration file settings,
+though.
+
+=over 4
+
+=item B<-o>, B<--offline>
+
+Make B<bts> use cached bugs for the B<show> and B<bugs> commands, if a cache
+is available for the requested data. See the B<cache> command, below for
+information on setting up a cache.
+
+=item B<--online>, B<--no-offline>
+
+Opposite of B<--offline>; overrides any configuration file directive to work
+offline.
+
+=item B<-n>, B<--no-action>
+
+Do not send emails but print them to standard output.
+
+=item B<--cache>, B<--no-cache>
+
+Should we attempt to cache new versions of BTS pages when
+performing B<show>/B<bugs> commands? Default is to cache.
+
+=item B<--cache-mode=>{B<min>|B<mbox>|B<full>}
+
+When running a B<bts cache> command, should we only mirror the basic
+bug (B<min>), or should we also mirror the mbox version (B<mbox>), or should
+we mirror the whole thing, including the mbox and the boring
+attachments to the BTS bug pages and the acknowledgement emails (B<full>)?
+Default is B<min>.
+
+=item B<--cache-delay=>I<seconds>
+
+Time in seconds to delay between each download, to avoid hammering the BTS
+web server. Default is 5 seconds.
+
+=item B<--mbox>
+
+Open a mail reader to read the mbox corresponding to a given bug number
+for B<show> and B<bugs> commands.
+
+=item B<--mailreader=>I<READER>
+
+Specify the command to read the mbox. Must contain a "B<%s>" string
+(unquoted!), which will be replaced by the name of the mbox file. The
+command will be split on white space and will not be passed to a
+shell. Default is 'B<mutt -f %s>'. (Also, B<%%> will be substituted by a
+single B<%> if this is needed.)
+
+=item B<--cc-addr=>I<CC_EMAIL_ADDRESS>
+
+Send carbon copies to a list of users. I<CC_EMAIL_ADDRESS> should be a
+comma-separated list of email addresses. Multiple options add more CCs.
+
+=item B<--use-default-cc>
+
+Add the addresses specified in the configuration file option
+B<BTS_DEFAULT_CC> to the list specified using B<--cc-addr>. This is the
+default.
+
+=item B<--no-use-default-cc>
+
+Do not add addresses specified in B<BTS_DEFAULT_CC> to the carbon copy
+list.
+
+=item B<--sendmail=>I<SENDMAILCMD>
+
+Specify the B<sendmail> command. The command will be split on white
+space and will not be passed to a shell. Default is
+F</usr/sbin/sendmail>. The B<-t> option will be automatically added if
+the command is F</usr/sbin/sendmail> or F</usr/sbin/exim*>. For other
+mailers, if they require a B<-t> option, this must be included in the
+I<SENDMAILCMD>, for example: B<--sendmail="/usr/sbin/mymailer -t">.
+
+=item B<--mutt>
+
+Use B<mutt> for sending of mails. Default is not to use B<mutt>, except for some
+commands.
+
+Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in order
+to use B<mutt> to send emails.
+
+=item B<--no-mutt>
+
+Don't use B<mutt> for sending of mails.
+
+=item B<--soap-timeout=>I<SECONDS>
+
+Specify a timeout for SOAP calls as used by the B<select> and B<status> commands.
+
+=item B<--smtp-host=>I<SMTPHOST>
+
+Specify an SMTP host. If given, B<bts> will send mail by talking directly to
+this SMTP host rather than by invoking a B<sendmail> command.
+
+The host name may be followed by a colon (":") and a port number in
+order to use a port other than the default. It may also begin with
+"ssmtp://" or "smtps://" to indicate that SMTPS should be used.
+
+If SMTPS not specified, B<bts> will still try to use STARTTLS if it's advertised
+by the SMTP host.
+
+Note that one of B<$DEBEMAIL> or B<$EMAIL> must be set in the environment in order
+to use direct SMTP connections to send emails.
+
+Note that when sending directly via an SMTP host, specifying addresses in
+B<--cc-addr> or B<BTS_DEFAULT_CC> that the SMTP host will not relay will cause the
+SMTP host to reject the entire mail.
+
+Note also that the use of the B<reassign> command may, when either B<--mutt>
+or B<--force-interactive> mode is enabled, lead to the automatic addition of a Cc
+to I<$newpackage>@packages.debian.org. In these cases, the note above regarding
+relaying applies. The submission interface (port 587) on reportbug.debian.org
+does not support relaying and, as such, should not be used as an SMTP server
+for B<bts> under the circumstances described in this paragraph.
+
+=item B<--smtp-username=>I<USERNAME>, B<--smtp-password=>I<PASSWORD>
+
+Specify the credentials to use when connecting to the SMTP server
+specified by B<--smtp-host>. If the server does not require authentication
+then these options should not be used.
+
+If a username is specified but not a password, B<bts> will prompt for
+the password before sending the mail.
+
+=item B<--smtp-helo=>I<HELO>
+
+Specify the name to use in the I<HELO> command when connecting to the SMTP
+server; defaults to the contents of the file F</etc/mailname>, if it
+exists.
+
+Note that some SMTP servers may reject the use of a I<HELO> which either
+does not resolve or does not appear to belong to the host using it.
+
+=item B<--bts-server>
+
+Use a debbugs server other than https://bugs.debian.org.
+
+=item B<-f>, B<--force-refresh>
+
+Download a bug report again, even if it does not appear to have
+changed since the last B<cache> command. Useful if a B<--cache-mode=full> is
+requested for the first time (otherwise unchanged bug reports will not
+be downloaded again, even if the boring bits have not been
+downloaded).
+
+=item B<--no-force-refresh>
+
+Suppress any configuration file B<--force-refresh> option.
+
+=item B<--only-new>
+
+Download only new bugs when caching. Do not check for updates in
+bugs we already have.
+
+=item B<--include-resolved>
+
+When caching bug reports, include those that are marked as resolved. This
+is the default behaviour.
+
+=item B<--no-include-resolved>
+
+Reverse the behaviour of the previous option. That is, do not cache bugs
+that are marked as resolved.
+
+=item B<--no-ack>
+
+Suppress acknowledgment mails from the BTS. Note that this will only
+affect the copies of messages CCed to bugs, not those sent to the
+control bot.
+
+=item B<--ack>
+
+Do not suppress acknowledgement mails. This is the default behaviour.
+
+=item B<-i>, B<--interactive>
+
+Before sending an e-mail to the control bot, display the content and
+allow it to be edited, or the sending cancelled.
+
+=item B<--force-interactive>
+
+Similar to B<--interactive>, with the exception that an editor is spawned
+before prompting for confirmation of the message to be sent.
+
+=item B<--no-interactive>
+
+Send control e-mails without confirmation. This is the default behaviour.
+
+=item B<-q>, B<--quiet>
+
+When running B<bts cache>, only display information about newly cached
+pages, not messages saying already cached. If this option is
+specified twice, only output error messages (to stderr).
+
+=item B<--no-conf>, B<--noconf>
+
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+
+=back
+
+=cut
+
+# Start by setting default values
+
+my $offlinemode = 0;
+my $caching = 1;
+my $cachemode = 'min';
+my $cachemode_re = '^(full|mbox|min)$';
+my $refreshmode = 0;
+my $updatemode = 0;
+my $mailreader = 'mutt -f %s';
+my $muttcmd = 'mutt -H %s';
+my $sendmailcmd = '/usr/sbin/sendmail';
+my $smtphost = '';
+my $smtpuser = '';
+my $smtppass = '';
+my $smtphelo = '';
+my $noaction = 0;
+
+# regexp for mailers which require a -t option
+my $sendmail_t = '^/usr/sbin/sendmail$|^/usr/sbin/exim';
+my $includeresolved = 1;
+my $requestack = 1;
+my $interactive_re = '^(force|no|yes)$';
+my $interactive = 'no';
+my @ccemails = ();
+my $toolname = "";
+my $btsserver = 'https://bugs.debian.org';
+my $use_mutt = 0;
+
+# Next, read read configuration files and then command line
+# The next stuff is boilerplate
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'BTS_OFFLINE' => 'no',
+ 'BTS_CACHE' => 'yes',
+ 'BTS_CACHE_MODE' => 'min',
+ 'BTS_FORCE_REFRESH' => 'no',
+ 'BTS_ONLY_NEW' => 'no',
+ 'BTS_MAIL_READER' => 'mutt -f %s',
+ 'BTS_SENDMAIL_COMMAND' => '/usr/sbin/sendmail',
+ 'BTS_INCLUDE_RESOLVED' => 'yes',
+ 'BTS_SMTP_HOST' => '',
+ 'BTS_SMTP_AUTH_USERNAME' => '',
+ 'BTS_SMTP_AUTH_PASSWORD' => '',
+ 'BTS_SMTP_HELO' => '',
+ 'BTS_SUPPRESS_ACKS' => 'no',
+ 'BTS_INTERACTIVE' => 'no',
+ 'BTS_DEFAULT_CC' => '',
+ 'BTS_SERVER' => $btsserver,
+ );
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ # Check validity
+ $config_vars{'BTS_OFFLINE'} =~ /^(yes|no)$/
+ or $config_vars{'BTS_OFFLINE'} = 'no';
+ $config_vars{'BTS_CACHE'} =~ /^(yes|no)$/
+ or $config_vars{'BTS_CACHE'} = 'yes';
+ $config_vars{'BTS_CACHE_MODE'} =~ $cachemode_re
+ or $config_vars{'BTS_CACHE_MODE'} = 'min';
+ $config_vars{'BTS_FORCE_REFRESH'} =~ /^(yes|no)$/
+ or $config_vars{'BTS_FORCE_REFRESH'} = 'no';
+ $config_vars{'BTS_ONLY_NEW'} =~ /^(yes|no)$/
+ or $config_vars{'BTS_ONLY_NEW'} = 'no';
+ $config_vars{'BTS_MAIL_READER'} =~ /\%s/
+ or $config_vars{'BTS_MAIL_READER'} = 'mutt -f %s';
+ $config_vars{'BTS_SENDMAIL_COMMAND'} =~ /./
+ or $config_vars{'BTS_SENDMAIL_COMMAND'} = '/usr/sbin/sendmail';
+ $config_vars{'BTS_INCLUDE_RESOLVED'} =~ /^(yes|no)$/
+ or $config_vars{'BTS_INCLUDE_RESOLVED'} = 'yes';
+ $config_vars{'BTS_SUPPRESS_ACKS'} =~ /^(yes|no)$/
+ or $config_vars{'BTS_SUPPRESS_ACKS'} = 'no';
+ $config_vars{'BTS_INTERACTIVE'} =~ $interactive_re
+ or $config_vars{'BTS_INTERACTIVE'} = 'no';
+
+ if (!length $config_vars{'BTS_SMTP_HOST'}
+ and $config_vars{'BTS_SENDMAIL_COMMAND'} ne '/usr/sbin/sendmail') {
+ my $cmd = (split ' ', $config_vars{'BTS_SENDMAIL_COMMAND'})[0];
+ unless ($cmd =~ /^~?[A-Za-z0-9_\-\+\.\/]*$/) {
+ die
+"BTS_SENDMAIL_COMMAND contained funny characters: $cmd\nPlease fix the configuration file.\n";
+ } elsif (system("command -v $cmd >/dev/null 2>&1") != 0) {
+ die
+"BTS_SENDMAIL_COMMAND $cmd could not be executed.\nPlease fix the configuration file.\n";
+ }
+ }
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $offlinemode = $config_vars{'BTS_OFFLINE'} eq 'yes' ? 1 : 0;
+ $caching = $config_vars{'BTS_CACHE'} eq 'no' ? 0 : 1;
+ $cachemode = $config_vars{'BTS_CACHE_MODE'};
+ $refreshmode = $config_vars{'BTS_FORCE_REFRESH'} eq 'yes' ? 1 : 0;
+ $updatemode = $config_vars{'BTS_ONLY_NEW'} eq 'yes' ? 1 : 0;
+ $mailreader = $config_vars{'BTS_MAIL_READER'};
+ $sendmailcmd = $config_vars{'BTS_SENDMAIL_COMMAND'};
+ $smtphost = $config_vars{'BTS_SMTP_HOST'};
+ $smtpuser = $config_vars{'BTS_SMTP_AUTH_USERNAME'};
+ $smtppass = $config_vars{'BTS_SMTP_AUTH_PASSWORD'};
+ $smtphelo = $config_vars{'BTS_SMTP_HELO'};
+ $includeresolved = $config_vars{'BTS_INCLUDE_RESOLVED'} eq 'yes' ? 1 : 0;
+ $requestack = $config_vars{'BTS_SUPPRESS_ACKS'} eq 'no' ? 1 : 0;
+ $interactive = $config_vars{'BTS_INTERACTIVE'};
+ push @ccemails, $config_vars{'BTS_DEFAULT_CC'} || ();
+ $btsserver = $config_vars{'BTS_SERVER'};
+}
+
+if (exists $ENV{'BUGSOFFLINE'}) {
+ warn
+"BUGSOFFLINE environment variable deprecated: please use ~/.devscripts\nor --offline/-o option instead! (See bts(1) for details.)\n";
+}
+
+my ($opt_help, $opt_version, $opt_noconf);
+my ($opt_cachemode, $opt_mailreader, $opt_sendmail, $opt_smtphost);
+my ($opt_smtpuser, $opt_smtppass, $opt_smtphelo);
+my $opt_cachedelay = 5;
+my $opt_mutt;
+my $opt_soap_timeout;
+my $mboxmode = 0;
+my $quiet = 0;
+my @opt_ccemails = ();
+my $use_default_cc = 1;
+my $ccsecurity = "";
+
+Getopt::Long::Configure(qw(gnu_compat bundling require_order));
+GetOptions(
+ "help|h" => \$opt_help,
+ "version" => \$opt_version,
+ "o" => \$offlinemode,
+ "offline!" => \$offlinemode,
+ "online" => sub { $offlinemode = 0; },
+ "cache!" => \$caching,
+ "cache-mode|cachemode=s" => \$opt_cachemode,
+ "cache-delay=i" => \$opt_cachedelay,
+ "m|mbox" => \$mboxmode,
+ "mailreader|mail-reader=s" => \$opt_mailreader,
+ "cc-addr=s" => \@opt_ccemails,
+ "sendmail=s" => \$opt_sendmail,
+ "smtp-host|smtphost=s" => \$opt_smtphost,
+ "smtp-user|smtp-username=s" => \$opt_smtpuser,
+ "smtp-pass|smtp-password=s" => \$opt_smtppass,
+ "smtp-helo=s" => \$opt_smtphelo,
+ "f" => \$refreshmode,
+ "force-refresh!" => \$refreshmode,
+ "only-new!" => \$updatemode,
+ "n|no-action" => \$noaction,
+ "q|quiet+" => \$quiet,
+ "noconf|no-conf" => \$opt_noconf,
+ "include-resolved!" => \$includeresolved,
+ "ack!" => \$requestack,
+ "i|interactive" => sub { $interactive = 'yes'; },
+ "no-interactive" => sub { $interactive = 'no'; },
+ "force-interactive" => sub { $interactive = 'force'; },
+ "use-default-cc!" => \$use_default_cc,
+ "toolname=s" => \$toolname,
+ "bts-server=s" => \$btsserver,
+ "mutt!" => \$opt_mutt,
+ "soap-timeout:i" => \$opt_soap_timeout,
+ )
+ or die "Usage: $progname [options]\nRun $progname --help for more details\n";
+
+if ($opt_noconf) {
+ die
+"$progname: --no-conf is only acceptable as the first command-line option!\n";
+}
+if ($opt_help) { bts_help(); exit 0; }
+if ($opt_version) { bts_version(); exit 0; }
+
+if (!$use_default_cc) {
+ @ccemails = ();
+}
+
+if (@opt_ccemails) {
+ push @ccemails, @opt_ccemails;
+}
+
+if ($opt_mailreader) {
+ if ($opt_mailreader =~ /\%s/) {
+ $mailreader = $opt_mailreader;
+ } else {
+ warn
+"$progname: ignoring invalid --mailreader option: invalid mail command following it.\n";
+ }
+}
+
+if ($opt_mutt) {
+ $use_mutt = 1;
+}
+
+if ($opt_soap_timeout) {
+ Devscripts::Debbugs::soap_timeout($opt_soap_timeout);
+}
+
+if ($opt_sendmail and $opt_smtphost) {
+ die "$progname: --sendmail and --smtp-host mutually exclusive\n";
+} elsif ($opt_mutt and $opt_sendmail) {
+ die "$progname: --sendmail and --mutt mutually exclusive\n";
+} elsif ($opt_mutt and $opt_smtphost) {
+ die "$progname: --smtp-host and --mutt mutually exclusive\n";
+}
+
+$smtphost = $opt_smtphost if $opt_smtphost;
+$smtpuser = $opt_smtpuser if $opt_smtpuser;
+$smtppass = $opt_smtppass if $opt_smtppass;
+$smtphelo = $opt_smtphelo if $opt_smtphelo;
+
+if ($opt_sendmail) {
+ if ( $opt_sendmail ne '/usr/sbin/sendmail'
+ and $opt_sendmail ne $sendmailcmd) {
+ my $cmd = (split ' ', $opt_sendmail)[0];
+ unless ($cmd =~ /^~?[A-Za-z0-9_\-\+\.\/]*$/) {
+ die "--sendmail command contained funny characters: $cmd\n";
+ } elsif (system("command -v $cmd >/dev/null 2>&1") != 0) {
+ die "--sendmail command $cmd could not be executed.\n";
+ }
+ }
+}
+
+if ($opt_sendmail) {
+ $sendmailcmd = $opt_sendmail;
+ $smtphost = '';
+} else {
+ if (length $smtphost and !length $smtphelo) {
+ if (-e "/etc/mailname") {
+ if (open MAILNAME, '<', "/etc/mailname") {
+ $smtphelo = <MAILNAME>;
+ chomp $smtphelo;
+ close MAILNAME;
+ } else {
+ warn
+"Unable to open /etc/mailname: $!\nUsing default HELO for SMTP\n";
+ }
+ }
+ }
+}
+
+if ($opt_cachemode) {
+ if ($opt_cachemode =~ $cachemode_re) {
+ $cachemode = $opt_cachemode;
+ } else {
+ warn
+"$progname: ignoring invalid --cache-mode; must be one of min, mbox, full.\n";
+ }
+}
+
+if ($toolname) {
+ $toolname = " (using $toolname)";
+}
+
+my $btsurl;
+if ($btsserver =~ m%^https?://(.*)/?$%) {
+ $btsurl = $btsserver . '/';
+ $btsserver = $1;
+} else {
+ $btsurl = "http://$btsserver/";
+}
+$btsurl =~ s%//$%/%;
+my $btscgiurl = $btsurl . 'cgi-bin/';
+if ($btsserver =~ /^debbugs\.gnu\.org/) {
+ $btscgiurl = $btsurl . 'cgi/';
+}
+my $btscgipkgurl = $btscgiurl . 'pkgreport.cgi';
+my $btscgibugurl = $btscgiurl . 'bugreport.cgi';
+my $btscgispamurl = $btscgiurl . 'bugspam.cgi';
+my $btsemail = 'control@' . $btsserver;
+my $packagesserver = '';
+if ($btsserver =~ /^bugs(-[\w-]+)?\.debian\.org/i) {
+ $packagesserver = 'packages.debian.org';
+ $btscgispamurl =~ s|$btsurl|http://bugs-master.debian.org/|;
+}
+no warnings 'once';
+$Devscripts::Debbugs::btsurl = $btsurl;
+use warnings 'once';
+
+if (@ARGV == 0) {
+ bts_help();
+ exit 0;
+}
+
+# Otherwise, parse the arguments
+my @command;
+my @args;
+our @comment = ('');
+my $ncommand = 0;
+my $iscommand = 1;
+while (@ARGV) {
+ $_ = shift @ARGV;
+ if ($_ =~ /^[\.,]$/) {
+ next if $iscommand; # ". ." in command line - oops!
+ $ncommand++;
+ $iscommand = 1;
+ $comment[$ncommand] = '';
+ } elsif ($iscommand) {
+ push @command, $_;
+ $iscommand = 0;
+ } elsif ($comment[$ncommand]) {
+ $comment[$ncommand] .= " $_";
+ } elsif (/^\#/ and not /^\#\d+$/) {
+ $comment[$ncommand] = $_;
+ } else {
+ push @{ $args[$ncommand] }, $_;
+ }
+}
+$ncommand-- if $iscommand;
+
+# Grub through the symbol table to find matching commands.
+my $subject = '';
+my $body = '';
+our $index;
+for $index (0 .. $ncommand) {
+ no strict 'refs';
+ if (exists $::{"bts_$command[$index]"}) {
+ "bts_$command[$index]"->(@{ $args[$index] });
+ } elsif ($command[$index] =~ /^#/) {
+ mailbts('', $command[$index]);
+ } else {
+ my @matches = grep /^bts_\Q$command[$index]\E/, keys %::;
+ if (@matches != 1) {
+ die
+"$progname: Couldn't find a unique match for the command $command[$index]!\nRun $progname --help for a list of valid commands.\n";
+ }
+
+ # Replace the abbreviated command with its expanded equivalent
+ $command[$index] = $matches[0];
+ $command[$index] =~ s/^bts_//;
+
+ $matches[0]->(@{ $args[$index] });
+ }
+}
+
+# Send all cached commands.
+mailbtsall($subject, $body) if length $body;
+
+# Unnecessary, but we'll do this for clarity
+exit 0;
+
+=head1 COMMANDS
+
+For full details about the commands, see the BTS documentation.
+L<https://www.debian.org/Bugs/server-control>
+
+=over 4
+
+=item B<show> [I<options>] [I<bug number> | I<package> | I<maintainer> | B<:> ] [I<opt>B<=>I<val> ...]
+
+=item B<show> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] [I<opt>B<=>I<val> ...]
+
+=item B<show> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] [I<opt>B<=>I<val> ...]
+
+=item B<show> [B<release-critical> | B<release-critical/>... | B<RC>]
+
+This is a synonym for B<bts bugs>.
+
+=cut
+
+sub bts_show {
+ goto &bts_bugs;
+}
+
+=item B<bugs> [I<options>] [I<bug_number> | I<package> | I<maintainer> | B<:> ] [I<opt>B<=>I<val> ...]
+
+=item B<bugs> [I<options>] [B<src:>I<package> | B<from:>I<submitter>] [I<opt>B<=>I<val> ...]
+
+=item B<bugs> [I<options>] [B<tag:>I<tag> | B<usertag:>I<tag> ] [I<opt>B<=>I<val> ...]
+
+=item B<bugs> [B<release-critical> | B<release-critical/>... | B<RC>]
+
+Display the page listing the requested bugs in a web browser using
+sensible-browser(1).
+
+Options may be specified after the B<bugs> command in addition to or
+instead of options at the start of the command line: recognised
+options at this point are: B<-o>/B<--offline>/B<--online>, B<-m>/B<--mbox>, B<--mailreader>
+and B<-->[B<no->]B<cache>. These are described earlier in this manpage. If
+either the B<-o> or B<--offline> option is used, or there is already an
+up-to-date copy in the local cache, the cached version will be used.
+
+The meanings of the possible arguments are as follows:
+
+=over 8
+
+=item (none)
+
+If nothing is specified, B<bts bugs> will display your bugs, assuming
+that either B<DEBEMAIL> or B<EMAIL> (examined in that order) is set to the
+appropriate email address.
+
+=item I<bug_number>
+
+Display bug number I<bug_number>.
+
+=item I<package>
+
+Display the bugs for the package I<package>.
+
+=item B<src:>I<package>
+
+Display the bugs for the source package I<package>.
+
+=item I<maintainer>
+
+Display the bugs for the maintainer email address I<maintainer>.
+
+=item B<from:>I<submitter>
+
+Display the bugs for the submitter email address I<submitter>.
+
+=item B<tag:>I<tag>
+
+Display the bugs which are tagged with I<tag>.
+
+=item B<usertag:>I<tag>
+
+Display the bugs which are tagged with usertag I<tag>. See the BTS
+documentation for more information on usertags. This will require the
+use of a B<users=>I<email> option.
+
+=item B<:>
+
+Details of the bug tracking system itself, along with a bug-request
+page with more options than this script, can be found on
+https://bugs.debian.org/. This page itself will be opened if the
+command 'bts bugs :' is used.
+
+=item B<release-critical>, B<RC>
+
+Display the front page of the release-critical pages on the BTS. This
+is a synonym for https://bugs.debian.org/release-critical/index.html.
+It is also possible to say release-critical/debian/main.html and the like.
+RC is a synonym for release-critical/other/all.html.
+
+=back
+
+After the argument specifying what to display, you can optionally
+specify options to use to format the page or change what it displayed.
+These are passed to the BTS in the URL downloaded. For example, pass
+dist=stable to see bugs affecting the stable version of a package,
+version=1.0 to see bugs affecting that version of a package, or reverse=yes
+to display newest messages first in a bug log.
+
+If caching has been enabled (that is, B<--no-cache> has not been used,
+and B<BTS_CACHE> has not been set to B<no>), then any page requested by
+B<bts show> will automatically be cached, and be available offline
+thereafter. Pages which are automatically cached in this way will be
+deleted on subsequent "B<bts show>|B<bugs>|B<cache>" invocations if they have
+not been accessed in 30 days. Warning: on a filesystem mounted with
+the "noatime" option, running "B<bts show>|B<bugs>" does not update the cache
+files' access times; a cached bug will then be subject to auto-cleaning
+30 days after its initial download, even if it has been accessed in the
+meantime.
+
+Any other B<bts> commands following this on the command line will be
+executed after the browser has been exited.
+
+The desired browser can be specified and configured by setting the
+B<BROWSER> environment variable. The conventions follow those defined by
+Eric Raymond at http://www.catb.org/~esr/BROWSER/; we here reproduce the
+relevant part.
+
+The value of B<BROWSER> may consist of a colon-separated series of
+browser command parts. These should be tried in order until one
+succeeds. Each command part may optionally contain the string B<%s>; if
+it does, the URL to be viewed is substituted there. If a command part
+does not contain B<%s>, the browser is to be launched as if the URL had
+been supplied as its first argument. The string B<%%> must be substituted
+as a single %.
+
+Rationale: We need to be able to specify multiple browser commands so
+programs obeying this convention can do the right thing in either X or
+console environments, trying X first. Specifying multiple commands may
+also be useful for people who share files like F<.profile> across
+multiple systems. We need B<%s> because some popular browsers have
+remote-invocation syntax that requires it. Unless B<%%> reduces to %, it
+won't be possible to have a literal B<%s> in the string.
+
+For example, on most Linux systems a good thing to do would be:
+
+BROWSER='mozilla -raise -remote "openURL(%s,new-window)":links'
+
+=cut
+
+sub bts_bugs {
+ @ARGV = @_; # needed for GetOptions
+ my ($sub_offlinemode, $sub_caching, $sub_mboxmode, $sub_mailreader);
+ GetOptions(
+ "o" => \$sub_offlinemode,
+ "offline!" => \$sub_offlinemode,
+ "online" => sub { $sub_offlinemode = 0; },
+ "cache!" => \$sub_caching,
+ "m|mbox" => \$sub_mboxmode,
+ "mailreader|mail-reader=s" => \$sub_mailreader,
+ ) or die "$progname: unknown options for bugs command\n";
+ @_ = @ARGV; # whatever's left
+
+ if (defined $sub_offlinemode) {
+ ($offlinemode, $sub_offlinemode) = ($sub_offlinemode, $offlinemode);
+ }
+ if (defined $sub_caching) {
+ ($caching, $sub_caching) = ($sub_caching, $caching);
+ }
+ if (defined $sub_mboxmode) {
+ ($mboxmode, $sub_mboxmode) = ($sub_mboxmode, $mboxmode);
+ }
+ if (defined $sub_mailreader) {
+ if ($sub_mailreader =~ /\%s/) {
+ ($mailreader, $sub_mailreader) = ($sub_mailreader, $mailreader);
+ } else {
+ warn
+"$progname: ignoring invalid --mailreader $sub_mailreader option:\ninvalid mail command following it.\n";
+ $sub_mailreader = undef;
+ }
+ }
+
+ my $url = sanitizething(shift);
+ if (!$url) {
+ if (defined $ENV{'DEBEMAIL'}) {
+ $url = $ENV{'DEBEMAIL'};
+ } else {
+ if (defined $ENV{'EMAIL'}) {
+ $url = $ENV{'EMAIL'};
+ } else {
+ die
+"bts bugs: Please set DEBEMAIL or EMAIL to your Debian email address.\n";
+ }
+ }
+ }
+ if ($url =~ /^.*\s<(.*)>\s*$/) { $url = $1; }
+ $url =~ s/^:$//;
+
+ # Are there any options?
+ my $urlopts = '';
+ if (@_) {
+ $urlopts = join(";", '', @_); # so it'll be ";opt1=val1;opt2=val2"
+ $urlopts =~ s/:/=/g;
+ $urlopts =~ s/;tag=/;include=/;
+ }
+
+ browse($url, $urlopts);
+
+ # revert options
+ if (defined $sub_offlinemode) {
+ $offlinemode = $sub_offlinemode;
+ }
+ if (defined $sub_caching) {
+ $caching = $sub_caching;
+ }
+ if (defined $sub_mboxmode) {
+ $mboxmode = $sub_mboxmode;
+ }
+ if (defined $sub_mailreader) {
+ $mailreader = $sub_mailreader;
+ }
+}
+
+=item B<select> [I<key>B<:>I<value> ...]
+
+Uses the SOAP interface to output a list of bugs which match the given
+selection requirements.
+
+The following keys are allowed, and may be given multiple times.
+
+=over 8
+
+=item B<package>
+
+Binary package name.
+
+=item B<source>
+
+Source package name.
+
+=item B<maintainer>
+
+E-mail address of the maintainer.
+
+=item B<submitter>
+
+E-mail address of the submitter.
+
+=item B<severity>
+
+Bug severity.
+
+=item B<status>
+
+Status of the bug. One of B<open>, B<done>, or B<forwarded>.
+
+=item B<tag>
+
+Tags applied to the bug. If B<users> is specified, may include
+usertags in addition to the standard tags.
+
+=item B<owner>
+
+Bug's owner.
+
+=item B<correspondent>
+
+Address of someone who sent mail to the log.
+
+=item B<affects>
+
+Bugs which affect this package.
+
+=item B<bugs>
+
+List of bugs to search within.
+
+=item B<users>
+
+Users to use when looking up usertags.
+
+=item B<archive>
+
+Whether to search archived bugs or normal bugs; defaults to B<0>
+(i.e. only search normal bugs). As a special case, if archive is
+B<both>, both archived and unarchived bugs are returned.
+
+=back
+
+For example, to select the set of bugs submitted by
+jrandomdeveloper@example.com and tagged B<wontfix>, one would use
+
+bts select submitter:jrandomdeveloper@example.com tag:wontfix
+
+If a key is used multiple times then the set of bugs selected includes
+those matching any of the supplied values; for example
+
+bts select package:foo severity:wishlist severity:minor
+
+returns all bugs of package foo with either wishlist or minor severity.
+
+=cut
+
+sub bts_select {
+ my @args = @_;
+ my $bugs = Devscripts::Debbugs::select(@args);
+ if (not defined $bugs) {
+ die "Error while retrieving bugs from SOAP server";
+ }
+ print map { qq($_\n) } @{$bugs};
+}
+
+=item B<status> [I<bug> | B<file:>I<file> | B<fields:>I<field>[B<,>I<field> ...] | B<verbose>] ...
+
+Uses the SOAP interface to output status information for the given bugs
+(or as read from the listed files -- use B<-> to indicate STDIN).
+
+By default, all populated fields for a bug are displayed.
+
+If B<verbose> is given, empty fields will also be displayed.
+
+If B<fields> is given, only those fields will be displayed. No validity
+checking is performed on any specified fields.
+
+=cut
+
+sub bts_status {
+ my @args = @_;
+
+ my @bugs;
+ my $showempty = 0;
+ my %field;
+ for my $bug (@args) {
+ if (looks_like_number($bug)) {
+ push @bugs, $bug;
+ } elsif ($bug =~ m{^file:(.+)}) {
+ my $file = $1;
+ my $fh;
+ if ($file eq '-') {
+ $fh = \*STDIN;
+ } else {
+ $fh = IO::File->new($file, 'r')
+ or die "Unable to open $file for reading: $!";
+ }
+ while (<$fh>) {
+ chomp;
+ next if /^\s*\#/;
+ s/\s//g;
+ next unless looks_like_number($_);
+ push @bugs, $_;
+ }
+ } elsif ($bug =~ m{^fields:(.+)}) {
+ my $fields = $1;
+ for my $field (split /,/, $fields) {
+ $field{ lc $field } = 1;
+ }
+ $showempty = 1;
+ } elsif ($bug =~ m{^verbose$}) {
+ $showempty = 1;
+ }
+ }
+ my $bugs
+ = Devscripts::Debbugs::status(map { [bug => $_, indicatesource => 1] }
+ @bugs);
+ return if ($bugs eq "");
+
+ my $first = 1;
+ for my $bug (keys %{$bugs}) {
+ print "\n" if not $first;
+ $first = 0;
+ my @keys = grep { $_ ne 'bug_num' }
+ keys %{ $bugs->{$bug} };
+ for my $key ('bug_num', @keys) {
+ if (%field) {
+ next unless exists $field{$key};
+ }
+ my $out;
+ if (ref($bugs->{$bug}{$key}) eq 'ARRAY') {
+ $out .= join(',', @{ $bugs->{$bug}{$key} });
+ } elsif (ref($bugs->{$bug}{$key}) eq 'HASH') {
+ $out .= join(',',
+ map { $_ . ' => ' . ($bugs->{$bug}{$key}{$_} || '') }
+ keys %{ $bugs->{$bug}{$key} });
+ } else {
+ $out .= $bugs->{$bug}{$key} || '';
+ }
+ if ($out || $showempty) {
+ print "$key\t$out\n";
+ }
+ }
+ }
+}
+
+=item B<clone> I<bug> I<new_ID> [I<new_ID> ...]
+
+The B<clone> control command allows you to duplicate a I<bug> report. It is useful
+in the case where a single report actually indicates that multiple distinct
+bugs have occurred. "New IDs" are negative numbers, separated by spaces,
+which may be used in subsequent control commands to refer to the newly
+duplicated bugs. A new report is generated for each new ID.
+
+=cut
+
+sub bts_clone {
+ my $bug = checkbug(shift) or die "bts clone: clone what bug?\n";
+ @_ or die "bts clone: must specify at least one new ID\n";
+ foreach (@_) {
+ $_ =~ /^-\d+$/ or die "bts clone: new IDs must be negative numbers\n";
+ $clonedbugs{$_} = 1;
+ }
+ mailbts("cloning $bug", "clone $bug " . join(" ", @_));
+}
+
+sub common_close {
+ my $bug = checkbug(shift) or die "bts $command[$index]: close what bug?\n";
+ my $version = shift;
+ $version = "" unless defined $version;
+ opts_done(@_);
+ mailbts("closing $bug", "close $bug $version");
+ return $bug;
+}
+
+# Do not include this in the manpage - it's deprecated
+#
+# =item B<close> I<bug> I<version>
+#
+# Close a I<bug>. Remember that using this to close a bug is often bad manners,
+# sending an informative mail to nnnnn-done@bugs.debian.org is much better.
+# You should specify which I<version> of the package closed the I<bug>, if
+# possible.
+#
+# =cut
+
+sub bts_close {
+ my ($bug) = common_close(@_);
+ warn <<"EOT";
+$progname: Closing $bug as you requested.
+Please note that the "$progname close" command is deprecated!
+It is usually better to email nnnnnn-done\@$btsserver with
+an informative mail.
+Please remember to email $bug-submitter\@$btsserver with
+an explanation of why you have closed this bug. Thank you!
+EOT
+}
+
+=item B<done> I<bug> [I<version>]
+
+Mark a I<bug> as Done. This forces interactive mode since done messages should
+include an explanation why the bug is being closed. You should specify which
+I<version> of the package closed the bug, if possible.
+
+=cut
+
+sub bts_done {
+ my ($bug) = common_close(@_);
+ # Force interactive mode since done mails shouldn't be sent without an
+ # explanation
+ if (not $use_mutt) {
+ $interactive = 'force';
+ }
+
+ # Include the submitter in the email, so we act like a mail to -done
+ $ccsubmitters{"$bug-submitter"} = 1;
+}
+
+=item B<reopen> I<bug> [I<submitter>]
+
+Reopen a I<bug>, with optional I<submitter>.
+
+=cut
+
+sub bts_reopen {
+ my $bug = checkbug(shift) or die "bts reopen: reopen what bug?\n";
+ my $submitter = shift || ''; # optional
+ opts_done(@_);
+ mailbts("reopening $bug", "reopen $bug $submitter");
+}
+
+=item B<archive> I<bug>
+
+Archive a I<bug> that has previously been archived but is currently not.
+The I<bug> must fulfill all of the requirements for archiving with the
+exception of those that are time-based.
+
+=cut
+
+sub bts_archive {
+ my $bug = checkbug(shift) or die "bts archive: archive what bug?\n";
+ opts_done(@_);
+ mailbts("archiving $bug", "archive $bug");
+}
+
+=item B<unarchive> I<bug>
+
+Unarchive a I<bug> that is currently archived.
+
+=cut
+
+sub bts_unarchive {
+ my $bug = checkbug(shift) or die "bts unarchive: unarchive what bug?\n";
+ opts_done(@_);
+ mailbts("unarchiving $bug", "unarchive $bug");
+}
+
+=item B<retitle> I<bug> I<title>
+
+Change the I<title> of the I<bug>.
+
+=cut
+
+sub bts_retitle {
+ my $bug = checkbug(shift) or die "bts retitle: retitle what bug?\n";
+ my $title = join(" ", @_);
+ if (!length $title) {
+ die "bts retitle: set title of $bug to what?\n";
+ }
+ mailbts("retitle $bug to $title", "retitle $bug $title");
+}
+
+=item B<summary> I<bug> [I<messagenum>]
+
+Select a message number that should be used as
+the summary of a I<bug>.
+
+If no message number is given, the summary is cleared.
+
+=cut
+
+sub bts_summary {
+ my $bug = checkbug(shift)
+ or die "bts summary: change summary of what bug?\n";
+ my $msg = shift || '';
+ mailbts("summary $bug $msg", "summary $bug $msg");
+}
+
+=item B<submitter> I<bug> [I<bug> ...] I<submitter-email>
+
+Change the submitter address of a I<bug> or a number of bugs, with B<!> meaning
+`use the address on the current email as the new submitter address'.
+
+=cut
+
+sub bts_submitter {
+ @_ or die "bts submitter: change submitter of what bug?\n";
+ my $submitter = checkemail(pop, 1);
+ if (!defined $submitter) {
+ die "bts submitter: change submitter to what?\n";
+ }
+ foreach (@_) {
+ my $bug = checkbug($_)
+ or die "bts submitter: $_ is not a bug number\n";
+ mailbts("submitter $bug", "submitter $bug $submitter");
+ }
+}
+
+=item B<reassign> I<bug> [I<bug> ...] I<package> [I<version>]
+
+Reassign a I<bug> or a number of bugs to a different I<package>.
+The I<version> field is optional; see the explanation at
+L<https://www.debian.org/Bugs/server-control>.
+
+=cut
+
+sub bts_reassign {
+ my ($bug, @bugs);
+ while ($_ = shift) {
+ $bug = checkbug($_, 1) or last;
+ push @bugs, $bug;
+ }
+ @bugs or die "bts reassign: reassign what bug(s)?\n";
+ my $package = $_ or die "bts reassign: reassign bug(s) to what package?\n";
+ my $version = shift;
+ $version = "" unless defined $version;
+ if (length $version and $version !~ /\d/) {
+ die "bts reassign: version number $version contains no digits!\n";
+ }
+ opts_done(@_);
+
+ foreach $bug (@bugs) {
+ mailbts("reassign $bug to $package",
+ "reassign $bug $package $version");
+ }
+
+ foreach my $packagename (split /,/, $package) {
+ $packagename =~ s/^src://;
+ $ccpackages{$packagename} = 1;
+ }
+}
+
+=item B<found> I<bug> [I<version>]
+
+Indicate that a I<bug> was found to exist in a particular package version.
+Without I<version>, the list of fixed versions is cleared and the bug is
+reopened.
+
+=cut
+
+sub bts_found {
+ my $bug = checkbug(shift) or die "bts found: found what bug?\n";
+ my $version = shift;
+ if (!defined $version) {
+ warn
+"$progname: found has no version number, but sending to the BTS anyway\n";
+ $version = "";
+ }
+ opts_done(@_);
+ mailbts("found $bug in $version", "found $bug $version");
+}
+
+=item B<notfound> I<bug> I<version>
+
+Remove the record that I<bug> was encountered in the given version of the
+package to which it is assigned.
+
+=cut
+
+sub bts_notfound {
+ my $bug = checkbug(shift) or die "bts notfound: what bug?\n";
+ my $version = shift
+ or die "bts notfound: remove record \#$bug from which version?\n";
+ opts_done(@_);
+ mailbts("notfound $bug in $version", "notfound $bug $version");
+}
+
+=item B<fixed> I<bug> I<version>
+
+Indicate that a I<bug> was fixed in a particular package version, without
+affecting the I<bug>'s open/closed status.
+
+=cut
+
+sub bts_fixed {
+ my $bug = checkbug(shift) or die "bts fixed: what bug?\n";
+ my $version = shift or die "bts fixed: \#$bug fixed in which version?\n";
+ opts_done(@_);
+ mailbts("fixed $bug in $version", "fixed $bug $version");
+}
+
+=item B<notfixed> I<bug> I<version>
+
+Remove the record that a I<bug> was fixed in the given version of the
+package to which it is assigned.
+
+This is equivalent to the sequence of commands "B<found> I<bug> I<version>",
+"B<notfound> I<bug> I<version>".
+
+=cut
+
+sub bts_notfixed {
+ my $bug = checkbug(shift) or die "bts notfixed: what bug?\n";
+ my $version = shift
+ or die "bts notfixed: remove record \#$bug from which version?\n";
+ opts_done(@_);
+ mailbts("notfixed $bug in $version", "notfixed $bug $version");
+}
+
+=item B<block> I<bug> B<by>|B<with> I<bug> [I<bug> ...]
+
+Note that a I<bug> is blocked from being fixed by a set of other bugs.
+
+=cut
+
+sub bts_block {
+ my $bug = checkbug(shift) or die "bts block: what bug is blocked?\n";
+ my $word = shift;
+ if (defined $word && $word ne 'by' && $word ne 'with') {
+ unshift @_, $word;
+ }
+ @_ or die "bts block: need to specify at least two bug numbers\n";
+ my @blockers;
+ foreach (@_) {
+ my $blocker = checkbug($_)
+ or die "bts block: some blocking bug number(s) not valid\n";
+ push @blockers, $blocker;
+ }
+ mailbts("block $bug with @blockers", "block $bug with @blockers");
+}
+
+=item B<unblock> I<bug> B<by>|B<with> I<bug> [I<bug> ...]
+
+Note that a I<bug> is no longer blocked from being fixed by a set of other bugs.
+
+=cut
+
+sub bts_unblock {
+ my $bug = checkbug(shift) or die "bts unblock: what bug is blocked?\n";
+ my $word = shift;
+ if (defined $word && $word ne 'by' && $word ne 'with') {
+ unshift @_, $word;
+ }
+ @_ or die "bts unblock: need to specify at least two bug numbers\n";
+ my @blockers;
+ foreach (@_) {
+ my $blocker = checkbug($_)
+ or die "bts unblock: some blocking bug number(s) not valid\n";
+ push @blockers, $blocker;
+ }
+ mailbts("unblock $bug with @blockers", "unblock $bug with @blockers");
+}
+
+=item B<merge> I<bug> I<bug> [I<bug> ...]
+
+Merge a set of bugs together.
+
+=cut
+
+sub bts_merge {
+ my @bugs;
+ foreach (@_) {
+ my $bug = checkbug($_)
+ or die "bts merge: some bug number(s) not valid\n";
+ push @bugs, $bug;
+ }
+ @bugs > 1
+ or die
+ "bts merge: at least two bug numbers to be merged must be specified\n";
+ mailbts("merging @bugs", "merge @bugs");
+}
+
+=item B<forcemerge> I<bug> I<bug> [I<bug> ...]
+
+Forcibly merge a set of bugs together. The first I<bug> listed is the master bug,
+and its settings (those which must be equal in a normal B<merge>) are assigned to
+the bugs listed next.
+
+=cut
+
+sub bts_forcemerge {
+ my @bugs;
+ foreach (@_) {
+ my $bug = checkbug($_)
+ or die "bts forcemerge: some bug number(s) not valid\n";
+ push @bugs, $bug;
+ }
+ @bugs > 1
+ or die
+"bts forcemerge: at least two bug numbers to be merged must be specified\n";
+ mailbts("forcibly merging @bugs", "forcemerge @bugs");
+}
+
+=item B<unmerge> I<bug>
+
+Unmerge a I<bug>.
+
+=cut
+
+sub bts_unmerge {
+ my $bug = checkbug(shift) or die "bts unmerge: unmerge what bug?\n";
+ opts_done(@_);
+ mailbts("unmerging $bug", "unmerge $bug");
+}
+
+=item B<tag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]
+
+=item B<tags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]
+
+Set or unset a I<tag> on a I<bug>. The tag may either be the exact tag name
+or it may be abbreviated to any unique tag substring. (So using
+B<fixed> will set the tag B<fixed>, not B<fixed-upstream>, for example,
+but B<fix> would not be acceptable.) Multiple tags may be specified as
+well. The two commands (tag and tags) are identical. At least one tag
+must be specified, unless the B<=> flag is used, where the command
+
+ bts tags <bug> =
+
+will remove all tags from the specified I<bug>.
+
+Adding/removing the B<security> tag will add "team\@security.debian.org"
+to the Cc list of the control email.
+
+The list of valid tags and their significance is available at
+L<https://www.debian.org/Bugs/Developer#tags>. The current valid tags
+are:
+
+patch, wontfix, moreinfo, unreproducible, fixed, help, security, upstream,
+pending, d-i, confirmed, ipv6, lfs, fixed-upstream, l10n, newcomer,
+a11y, ftbfs
+
+There is also a tag for each release of Debian since "potato". Note
+that this list may be out of date, see the website for the most up to
+date source.
+
+=cut
+
+# note that the tag list is also in the @gtag variable, look for
+# "potato" above.
+sub bts_tags {
+ my $bug = checkbug(shift) or die "bts tags: tag what bug?\n";
+ if (!@_) {
+ die "bts tags: set what tag?\n";
+ }
+ # Parse the rest of the command line.
+ my $base_command = "tags $bug";
+ my $commands = [];
+
+ my $curop;
+ foreach my $tag (@_) {
+ if ($tag =~ s/^([-+=])//) {
+ my $op = $1;
+ if ($op eq '=') {
+ $curop = '=';
+ $commands = [];
+ $ccsecurity = '';
+ } elsif (!$curop || $curop ne $op) {
+ $curop = $op;
+ }
+ next unless $tag;
+ }
+ if (!$curop) {
+ $curop = '+';
+ }
+ if ($tag eq 'gift') {
+ my $gift_flag = $curop;
+ if ($gift_flag eq '=') {
+ $gift_flag = '+';
+ }
+ # Backward compatibility: do both gift usertagging and newcomer
+ # tagging. Gifting should be removed after a suitable migration
+ # time. See https://wiki.debian.org/qa.debian.org/GiftTag header
+ # for more info.
+ mailbts("tagging $bug", "tags $bug + newcomer");
+ mailbts(
+ "gifting $bug",
+"user debian-qa\@lists.debian.org\nusertag $bug $gift_flag gift"
+ );
+ next;
+ }
+ if (!exists $valid_tags{$tag}) {
+ # Try prefixes
+ my @matches = grep /^\Q$tag\E/, @valid_tags;
+ if (@matches != 1) {
+ die "bts tags: \"$tag\" is not a "
+ . (@matches > 1 ? "unique" : "valid")
+ . " tag prefix. Choose from: "
+ . join(" ", @valid_tags) . "\n";
+ }
+ $tag = $matches[0];
+ }
+ if (!@$commands || $curop ne $commands->[-1]{op}) {
+ push(@$commands, { op => $curop, tags => [] });
+ }
+ push(@{ $commands->[-1]{tags} }, $tag);
+ if ($tag eq "security") {
+ $ccsecurity = "team\@security.debian.org";
+ }
+ }
+
+ my $command = '';
+ foreach my $cmd (@$commands) {
+ if ($cmd->{op} ne '=' && !@{ $cmd->{tags} }) {
+ die "bts tags: set what tag?\n";
+ }
+ $command .= " $cmd->{op} " . join(' ', @{ $cmd->{tags} });
+ }
+ if (!$command && $curop eq '=') {
+ $command = " $curop";
+ }
+
+ if ($command) {
+ mailbts("tagging $bug", $base_command . $command);
+ }
+}
+
+=item B<affects> I<bug> [B<+>|B<->|B<=>] I<package> [I<package> ...]
+
+Indicates that a I<bug> affects a I<package> other than that against which it is filed, causing
+the I<bug> to be listed by default in the I<package> list of the other I<package>. This should
+generally be used where the I<bug> is severe enough to cause multiple reports from users to be
+assigned to the wrong package. At least one I<package> must be specified, unless
+the B<=> flag is used, where the command
+
+ bts affects <bug> =
+
+will remove all indications that I<bug> affects other packages.
+
+=cut
+
+sub bts_affects {
+ my $bug = checkbug(shift)
+ or die "bts affects: mark what bug as affecting another package?\n";
+
+ if (!@_) {
+ die "bts affects: mark which package as affected?\n";
+ }
+ # Parse the rest of the command line.
+ my $command = "affects $bug";
+ my $flag = "";
+ if ($_[0] =~ /^[-+=]$/) {
+ $flag = $_[0];
+ $command .= " $flag";
+ shift;
+ } elsif ($_[0] =~ s/^([-+=])//) {
+ $flag = $1;
+ $command .= " $flag";
+ }
+
+ if ($flag ne '=' && !@_) {
+ die "bts affects: mark which package as affected?\n";
+ }
+
+ foreach my $package (@_) {
+ $command .= " $package";
+ }
+
+ mailbts("affects $bug", $command);
+}
+
+=item B<user> I<email>
+
+Specify a user I<email> address before using the B<usertags> command.
+
+=cut
+
+sub bts_user {
+ my $email = checkemail(shift)
+ or die "bts user: set user to what email address?\n";
+ if (!length $email) {
+ die "bts user: set user to what email address?\n";
+ }
+ opts_done(@_);
+ if ($email ne $last_user) {
+ mailbts("user $email", "user $email");
+ }
+ $last_user = $email;
+}
+
+=item B<usertag> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]
+
+=item B<usertags> I<bug> [B<+>|B<->|B<=>] I<tag> [I<tag> ...]
+
+Set or unset a user tag on a I<bug>. The I<tag> must be the exact tag name wanted;
+there are no defaults or checking of tag names. Multiple tags may be
+specified as well. The two commands (B<usertag> and B<usertags>) are identical.
+At least one I<tag> must be specified, unless the B<=> flag is used, where the
+command
+
+ bts usertags <bug> =
+
+will remove all user tags from the specified I<bug>.
+
+=cut
+
+sub bts_usertags {
+ my $bug = checkbug(shift) or die "bts usertags: tag what bug?\n";
+ if (!@_) {
+ die "bts usertags: set what user tag?\n";
+ }
+ # Parse the rest of the command line.
+ my $command = "usertags $bug";
+ my $flag = "";
+ if ($_[0] =~ /^[-+=]$/) {
+ $flag = $_[0];
+ $command .= " $flag";
+ shift;
+ } elsif ($_[0] =~ s/^([-+=])//) {
+ $flag = $1;
+ $command .= " $flag";
+ }
+
+ if ($flag ne '=' && !@_) {
+ die "bts usertags: set what user tag?\n";
+ }
+
+ $command .= sprintf(' %s', join(' ', @_));
+
+ mailbts("usertagging $bug", $command);
+}
+
+=item B<claim> I<bug> [I<claim>]
+
+Record that you have claimed a I<bug> (e.g. for a bug squashing party).
+I<claim> should be a unique token allowing the bugs you have claimed
+to be identified; an e-mail address is often used.
+
+If no I<claim> is specified, the environment variable B<DEBEMAIL>
+or B<EMAIL> (checked in that order) is used.
+
+=cut
+
+sub bts_claim {
+ my $bug = checkbug(shift) or die "bts claim: claim what bug?\n";
+ my $claim = checkemail(shift) || $ENV{'DEBEMAIL'} || $ENV{'EMAIL'} || "";
+ if (!length $claim) {
+ die "bts claim: use what claim token?\n";
+ }
+ $claim = extractemail($claim);
+ bts_user("bugsquash\@qa.debian.org");
+ bts_usertags("$bug", "+$claim");
+}
+
+=item B<unclaim> I<bug> [I<claim>]
+
+Remove the record that you have claimed a bug.
+
+If no I<claim> is specified, the environment variable B<DEBEMAIL>
+or B<EMAIL> (checked in that order) is used.
+
+=cut
+
+sub bts_unclaim {
+ my $bug = checkbug(shift) or die "bts unclaim: unclaim what bug?\n";
+ my $claim = checkemail(shift) || $ENV{'DEBEMAIL'} || $ENV{'EMAIL'} || "";
+ if (!length $claim) {
+ die "bts unclaim: use what claim token?\n";
+ }
+ $claim = extractemail($claim);
+ bts_user("bugsquash\@qa.debian.org");
+ bts_usertags("$bug", "-$claim");
+}
+
+=item B<severity> I<bug> I<severity>
+
+Change the I<severity> of a I<bug>. Available severities are: B<wishlist>, B<minor>, B<normal>,
+B<important>, B<serious>, B<grave>, B<critical>. The severity may be abbreviated to any
+unique substring.
+
+=cut
+
+sub bts_severity {
+ my $bug = checkbug(shift)
+ or die "bts severity: change the severity of what bug?\n";
+ my $severity = lc(shift)
+ or die "bts severity: set \#$bug\'s severity to what?\n";
+ my @matches = grep /^\Q$severity\E/i, @valid_severities;
+ if (@matches != 1) {
+ die
+"bts severity: \"$severity\" is not a valid severity.\nChoose from: @valid_severities\n";
+ }
+ opts_done(@_);
+ mailbts("severity of $bug is $matches[0]", "severity $bug $matches[0]");
+}
+
+=item B<forwarded> I<bug> I<address>
+
+Mark the I<bug> as forwarded to the given I<address> (usually an email address or
+a URL for an upstream bug tracker).
+
+=cut
+
+sub bts_forwarded {
+ my $bug = checkbug(shift)
+ or die "bts forwarded: mark what bug as forwarded?\n";
+ my $email = join(' ', @_);
+ if ($email =~ /$btsserver/) {
+ die
+"bts forwarded: We don't forward bugs within $btsserver, use bts reassign instead\n";
+ }
+ if (!length $email) {
+ die
+ "bts forwarded: mark bug $bug as forwarded to what email address?\n";
+ }
+ mailbts("bug $bug is forwarded to $email", "forwarded $bug $email");
+}
+
+=item B<notforwarded> I<bug>
+
+Mark a I<bug> as not forwarded.
+
+=cut
+
+sub bts_notforwarded {
+ my $bug = checkbug(shift) or die "bts notforwarded: what bug?\n";
+ opts_done(@_);
+ mailbts("bug $bug is not forwarded", "notforwarded $bug");
+}
+
+=item B<package> [I<package> ...]
+
+The following commands will only apply to bugs against the listed
+I<package>s; this acts as a safety mechanism for the BTS. If no packages
+are listed, this check is turned off again.
+
+=cut
+
+sub bts_package {
+ if (@_) {
+ bts_limit(map { "package:$_" } @_);
+ } else {
+ bts_limit('package');
+ }
+}
+
+=item B<limit> [I<key>[B<:>I<value>]] ...
+
+The following commands will only apply to bugs which meet the specified
+criterion; this acts as a safety mechanism for the BTS. If no I<value>s are
+listed, the limits for that I<key> are turned off again. If no I<key>s are
+specified, all limits are reset.
+
+=over 8
+
+=item B<submitter>
+
+E-mail address of the submitter.
+
+=item B<date>
+
+Date the bug was submitted.
+
+=item B<subject>
+
+Subject of the bug.
+
+=item B<msgid>
+
+Message-id of the initial bug report.
+
+=item B<package>
+
+Binary package name.
+
+=item B<source>
+
+Source package name.
+
+=item B<tag>
+
+Tags applied to the bug.
+
+=item B<severity>
+
+Bug severity.
+
+=item B<owner>
+
+Bug's owner.
+
+=item B<affects>
+
+Bugs affecting this package.
+
+=item B<archive>
+
+Whether to search archived bugs or normal bugs; defaults to B<0>
+(i.e. only search normal bugs). As a special case, if archive is
+B<both>, both archived and unarchived bugs are returned.
+
+=back
+
+For example, to limit the set of bugs affected by the subsequent control
+commands to those submitted by jrandomdeveloper@example.com and tagged
+B<wontfix>, one would use
+
+bts limit submitter:jrandomdeveloper@example.com tag:wontfix
+
+If a key is used multiple times then the set of bugs selected includes
+those matching any of the supplied values; for example
+
+bts limit package:foo severity:wishlist severity:minor
+
+only applies the subsequent control commands to bugs of package foo with
+either B<wishlist> or B<minor> severity.
+
+=cut
+
+sub bts_limit {
+ my @args = @_;
+ my %limits;
+ # Ensure we're using the limit fields that debbugs expects. These are the
+ # keys from Debbugs::Status::fields
+ my %valid_keys = (
+ submitter => 'originator',
+ date => 'date',
+ subject => 'subject',
+ msgid => 'msgid',
+ package => 'package',
+ source => 'source',
+ src => 'source',
+ tag => 'keywords',
+ severity => 'severity',
+ owner => 'owner',
+ affects => 'affects',
+ archive => 'unarchived',
+ );
+ for my $arg (@args) {
+ my ($key, $value) = split /:/, $arg, 2;
+ next unless $key;
+ if (!defined $value) {
+ die "bts limit: No value given for '$key'\n";
+ }
+ if (exists $valid_keys{$key}) {
+ # Support "$key:" by making it look like "$key", i.e. no $value
+ # defined
+ undef $value unless length($value);
+ if ($key eq "archive") {
+ if (defined $value) {
+ # limit looks for unarchived, not archive. Verify we have
+ # a valid value and then switch the boolean value to match
+ # archive => unarchive
+ if ($value =~ /^yes|1|true|on$/i) {
+ $value = 0;
+ } elsif ($value =~ /^no|0|false|off$/i) {
+ $value = 1;
+ } elsif ($value ne 'both') {
+ die "bts limit: Invalid value ($value) for archive\n";
+ }
+ }
+ }
+ $key = $valid_keys{$key};
+ if (defined $value and $value) {
+ push(@{ $limits{$key} }, $value);
+ } else {
+ $limits{$key} = ();
+ }
+ } elsif ($key eq 'clear') {
+ %limits = ();
+ $limits{$key} = 1;
+ } else {
+ die "bts limit: Unrecognized key: $key\n";
+ }
+ }
+ for my $key (keys %limits) {
+ if ($key eq 'clear') {
+ mailbts('clear all limit(s)', 'limit clear');
+ next;
+ }
+ if (defined $limits{$key}) {
+ my $value = join ' ', @{ $limits{$key} };
+ mailbts("limit $key to $value", "limit $key $value");
+ } else {
+ mailbts("clear $key limit", "limit $key");
+ }
+ }
+}
+
+=item B<owner> I<bug> I<owner-email>
+
+Change the "owner" address of a I<bug>, with B<!> meaning
+`use the address on the current email as the new owner address'.
+
+The owner of a bug accepts responsibility for dealing with it.
+
+=cut
+
+sub bts_owner {
+ my $bug = checkbug(shift) or die "bts owner: change owner of what bug?\n";
+ my $owner = checkemail(shift, 1)
+ or die "bts owner: change owner to what?\n";
+ opts_done(@_);
+ mailbts("owner $bug", "owner $bug $owner");
+}
+
+=item B<noowner> I<bug>
+
+Mark a bug as having no "owner".
+
+=cut
+
+sub bts_noowner {
+ my $bug = checkbug(shift) or die "bts noowner: what bug?\n";
+ opts_done(@_);
+ mailbts("bug $bug has no owner", "noowner $bug");
+}
+
+=item B<subscribe> I<bug> [I<email>]
+
+Subscribe the given I<email> address to the specified I<bug> report. If no email
+address is specified, the environment variable B<DEBEMAIL> or B<EMAIL> (in that
+order) is used. If those are not set, or B<!> is given as email address,
+your default address will be used.
+
+After executing this command, you will be sent a subscription confirmation to
+which you have to reply. When subscribed to a bug report, you receive all
+relevant emails and notifications. Use the unsubscribe command to unsubscribe.
+
+=cut
+
+sub bts_subscribe {
+ my $bug = checkbug(shift) or die "bts subscribe: subscribe to what bug?\n";
+ my $email = checkemail(shift, 1);
+ $email = lc($email) if defined $email;
+ if (defined $email and $email eq '!') { $email = undef; }
+ else {
+ $email ||= $ENV{'DEBEMAIL'};
+ $email ||= $ENV{'EMAIL'};
+ $email = extractemail($email) if defined $email;
+ }
+ opts_done(@_);
+ mailto(
+ 'subscription request for bug #' . $bug, '',
+ $bug . '-subscribe@' . $btsserver, $email
+ );
+}
+
+=item B<unsubscribe> I<bug> [I<email>]
+
+Unsubscribe the given email address from the specified bug report. As with
+subscribe above, if no email address is specified, the environment variables
+B<DEBEMAIL> or B<EMAIL> (in that order) is used. If those are not set, or B<!> is
+given as email address, your default address will be used.
+
+After executing this command, you will be sent an unsubscription confirmation
+to which you have to reply. Use the B<subscribe> command to, well, subscribe.
+
+=cut
+
+sub bts_unsubscribe {
+ my $bug = checkbug(shift)
+ or die "bts unsubscribe: unsubscribe from what bug?\n";
+ my $email = checkemail(shift, 1);
+ $email = lc($email) if defined $email;
+ if (defined $email and $email eq '!') { $email = undef; }
+ else {
+ $email ||= $ENV{'DEBEMAIL'};
+ $email ||= $ENV{'EMAIL'};
+ $email = extractemail($email) if defined $email;
+ }
+ opts_done(@_);
+ mailto(
+ 'unsubscription request for bug #' . $bug, '',
+ $bug . '-unsubscribe@' . $btsserver, $email
+ );
+}
+
+=item B<reportspam> I<bug> ...
+
+The B<reportspam> command allows you to report a I<bug> report as containing spam.
+It saves one from having to go to the bug web page to do so.
+
+=cut
+
+sub bts_reportspam {
+ my @bugs;
+
+ if (!have_lwp()) {
+ die "$progname: Couldn't run bts reportspam: $lwp_broken\n";
+ }
+
+ foreach (@_) {
+ my $bug = checkbug($_)
+ or die "bts reportspam: some bug number(s) not valid\n";
+ push @bugs, $bug;
+ }
+ @bugs >= 1
+ or die "bts reportspam: at least one bug number must be specified\n";
+
+ init_agent() unless $ua;
+ foreach my $bug (@bugs) {
+ my $url = "$btscgispamurl?bug=$bug;ok=ok";
+ if ($noaction) {
+ print "bts reportspam: would report $bug as containing spam (URL: "
+ . $url . ")\n";
+ } else {
+ my $request = HTTP::Request->new('GET', $url);
+ my $response = $ua->request($request);
+ if (!$response->is_success) {
+ warn "$progname: failed to report $bug as containing spam: "
+ . $response->status_line . "\n";
+ }
+ }
+ }
+}
+
+=item B<spamreport> I<bug> ...
+
+B<spamreport> is a synonym for B<reportspam>.
+
+=cut
+
+sub bts_spamreport {
+ goto &bts_reportspam;
+}
+
+=item B<cache> [I<options>] [I<maint_email> | I<pkg> | B<src:>I<pkg> | B<from:>I<submitter>]
+
+=item B<cache> [I<options>] [B<release-critical> | B<release-critical/>... | B<RC>]
+
+Generate or update a cache of bug reports for the given email address
+or package. By default it downloads all bugs belonging to the email
+address in the B<DEBEMAIL> environment variable (or the B<EMAIL> environment
+variable if B<DEBEMAIL> is unset). This command may be repeated to cache
+bugs belonging to several people or packages. If multiple packages or
+addresses are supplied, bugs belonging to any of the arguments will be
+cached; those belonging to more than one of the arguments will only be
+downloaded once. The cached bugs are stored in
+F<$XDG_CACHE_HOME/devscripts/bts/> or, if B<XDG_CACHE_HOME> is not set, in
+F<~/.cache/devscripts/bts/>.
+
+You can use the cached bugs with the B<-o> switch. For example:
+
+ bts -o bugs
+ bts -o show 12345
+
+Also, B<bts> will update the files in it in a piecemeal fashion as it
+downloads information from the BTS using the B<show> command. You might
+thus set up the cache, and update the whole thing once a week, while
+letting the automatic cache updates update the bugs you frequently
+refer to during the week.
+
+Some options affect the behaviour of the B<cache> command. The first is
+the setting of B<--cache-mode>, which controls how much B<bts> downloads
+of the referenced links from the bug page, including boring bits such
+as the acknowledgement emails, emails to the control bot, and the mbox
+version of the bug report. It can take three values: B<min> (the
+minimum), B<mbox> (download the minimum plus the mbox version of the bug
+report) or B<full> (the whole works). The second is B<--force-refresh> or
+B<-f>, which forces the download, even if the cached bug report is
+up-to-date. The B<--include-resolved> option indicates whether bug
+reports marked as resolved should be downloaded during caching.
+
+Each of these is configurable from the configuration
+file, as described below. They may also be specified after the
+B<cache> command as well as at the start of the command line.
+
+Finally, B<-q> or B<--quiet> will suppress messages about caches being
+up-to-date, and giving the option twice will suppress all cache
+messages (except for error messages).
+
+Beware of caching RC, though: it will take a LONG time! (With 1000+
+RC bugs and a delay of 5 seconds between bugs, you're looking at a
+minimum of 1.5 hours, and probably significantly more than that.)
+
+=cut
+
+sub bts_cache {
+ @ARGV = @_;
+ my ($sub_cachemode, $sub_refreshmode, $sub_updatemode);
+ my $sub_quiet = $quiet;
+ my $sub_includeresolved = $includeresolved;
+ GetOptions(
+ "cache-mode|cachemode=s" => \$sub_cachemode,
+ "f" => \$sub_refreshmode,
+ "force-refresh!" => \$sub_refreshmode,
+ "only-new!" => \$sub_updatemode,
+ "q|quiet+" => \$sub_quiet,
+ "include-resolved!" => \$sub_includeresolved,
+ ) or die "$progname: unknown options for cache command\n";
+ @_ = @ARGV; # whatever's left
+
+ if (defined $sub_refreshmode) {
+ ($refreshmode, $sub_refreshmode) = ($sub_refreshmode, $refreshmode);
+ }
+ if (defined $sub_updatemode) {
+ ($updatemode, $sub_updatemode) = ($sub_updatemode, $updatemode);
+ }
+ if (defined $sub_cachemode) {
+ if ($sub_cachemode =~ $cachemode_re) {
+ ($cachemode, $sub_cachemode) = ($sub_cachemode, $cachemode);
+ } else {
+ warn
+"$progname: ignoring invalid --cache-mode $sub_cachemode;\nmust be one of min, mbox, full.\n";
+ }
+ }
+ # This may be a no-op, we don't mind
+ ($quiet, $sub_quiet) = ($sub_quiet, $quiet);
+ ($includeresolved, $sub_includeresolved)
+ = ($sub_includeresolved, $includeresolved);
+
+ prunecache();
+ if (!have_lwp()) {
+ die "$progname: Couldn't run bts cache: $lwp_broken\n";
+ }
+
+ if (!-d $cachedir) {
+ my $err;
+ make_path($cachedir, { error => \$err });
+ if (@$err) {
+ my ($path, $msg) = each(%{ $err->[0] });
+ die "$progname: couldn't mkdir $path: $msg\n";
+ }
+ }
+
+ download("css/bugs.css");
+
+ my $tocache;
+ if (@_ > 0) { $tocache = sanitizething(shift); }
+ else { $tocache = ''; }
+
+ if (!length $tocache) {
+ $tocache = $ENV{'DEBEMAIL'} || $ENV{'EMAIL'} || '';
+ if ($tocache =~ /^.*\s<(.*)>\s*$/) { $tocache = $1; }
+ }
+ if (!length $tocache) {
+ die "bts cache: cache what?\n";
+ }
+
+ my $sub_thgopts = '';
+ $sub_thgopts = ';pend-exc=done'
+ if (!$includeresolved && $tocache !~ /^release-critical/);
+
+ my %bugs = ();
+ my %oldbugs = ();
+
+ do {
+ %oldbugs = (%oldbugs,
+ map { $_ => 1 } bugs_from_thing($tocache, $sub_thgopts));
+
+ # download index
+ download($tocache, $sub_thgopts, 1);
+
+ %bugs
+ = (%bugs, map { $_ => 1 } bugs_from_thing($tocache, $sub_thgopts));
+
+ $tocache = sanitizething(shift);
+ } while (defined $tocache);
+
+ # remove old bugs from cache
+ if (keys %oldbugs) {
+ tie(%timestamp, "Devscripts::DB_File_Lock", $timestampdb,
+ O_RDWR() | O_CREAT(),
+ 0600, $DB_HASH, "write")
+ or die
+ "$progname: couldn't open DB file $timestampdb for writing: $!\n"
+ if !tied %timestamp;
+ }
+
+ foreach my $bug (keys %oldbugs) {
+ if (!$bugs{$bug}) {
+ deletecache($bug);
+ }
+ }
+
+ untie %timestamp;
+
+ # download bugs
+ my $bugcount = 1;
+ my $bugtotal = scalar keys %bugs;
+ foreach my $bug (keys %bugs) {
+ if (-f cachefile($bug, '') and $updatemode) {
+ print "Skipping $bug as requested ... $bugcount/$bugtotal\n"
+ if !$quiet;
+ $bugcount++;
+ next;
+ }
+ download($bug, '', 1, 0, $bugcount, $bugtotal);
+ sleep $opt_cachedelay;
+ $bugcount++;
+ }
+
+ # revert options
+ if (defined $sub_refreshmode) {
+ $refreshmode = $sub_refreshmode;
+ }
+ if (defined $sub_updatemode) {
+ $updatemode = $sub_updatemode;
+ }
+ if (defined $sub_cachemode) {
+ $cachemode = $sub_cachemode;
+ }
+ $quiet = $sub_quiet;
+ $includeresolved = $sub_includeresolved;
+}
+
+=item B<cleancache> I<package> | B<src:>I<package> | I<maintainer>
+
+=item B<cleancache from:>I<submitter> | B<tag:>I<tag> | B<usertag:>I<tag> | I<number> | B<ALL>
+
+Clean the cache for the specified I<package>, I<maintainer>, etc., as
+described above for the B<bugs> command, or clean the entire cache if
+B<ALL> is specified. This is useful if you are going to have permanent
+network access or if the database has become corrupted for some
+reason. Note that for safety, this command does not default to the
+value of B<DEBEMAIL> or B<EMAIL>.
+
+=cut
+
+sub bts_cleancache {
+ prunecache();
+ my $toclean = sanitizething(shift);
+ if (!defined $toclean) {
+ die "bts cleancache: clean what?\n";
+ }
+ if (!-d $cachedir) {
+ return;
+ }
+ if ($toclean eq 'ALL') {
+ if (system("/bin/rm", "-rf", $cachedir) >> 8 != 0) {
+ warn "Problems cleaning cache: $!\n";
+ }
+ return;
+ }
+
+ # clean index
+ tie(%timestamp, "Devscripts::DB_File_Lock", $timestampdb,
+ O_RDWR() | O_CREAT(),
+ 0600, $DB_HASH, "write")
+ or die "$progname: couldn't open DB file $timestampdb for writing: $!\n"
+ if !tied %timestamp;
+
+ if ($toclean =~ /^\d+$/) {
+ # single bug only
+ deletecache($toclean);
+ } else {
+ my @bugs_to_clean = bugs_from_thing($toclean);
+ deletecache($toclean);
+
+ # remove old bugs from cache
+ foreach my $bug (@bugs_to_clean) {
+ deletecache($bug);
+ }
+ }
+
+ untie %timestamp;
+}
+
+=item B<listcachedbugs> [I<number>]
+
+List cached bug ids (intended to support bash completion). The optional number argument
+restricts the list to those bug ids that start with that number.
+
+=cut
+
+sub bts_listcachedbugs {
+ my $number = shift;
+ if (not defined $number) {
+ $number = '';
+ }
+ if ($number =~ m{\D}) {
+ return;
+ }
+ my $untie = 0;
+ if (not tied %timestamp) {
+ tie(%timestamp, "Devscripts::DB_File_Lock", $timestampdb,
+ O_RDONLY(), 0600, $DB_HASH, "read")
+ or die
+ "$progname: couldn't open DB file $timestampdb for reading: $!\n";
+ $untie = 1;
+ }
+
+ print join "\n", grep { $_ =~ m{^$number\d+$} } sort keys %timestamp;
+ print "\n";
+
+ if ($untie) {
+ untie %timestamp;
+ }
+}
+
+# Add any new commands here.
+
+=item B<version>
+
+Display version and copyright information.
+
+=cut
+
+sub bts_version {
+ print <<"EOF";
+$progname version $version
+Copyright (C) 2001-2003 by Joey Hess <joeyh\@debian.org>.
+Modifications Copyright (C) 2002-2004 by Julian Gilbey <jdg\@debian.org>.
+Modifications Copyright (C) 2007 by Josh Triplett <josh\@freedesktop.org>.
+It is licensed under the terms of the GPL, either version 2 of the
+License, or (at your option) any later version.
+EOF
+}
+
+=item B<help>
+
+Display a short summary of commands, suspiciously similar to parts of this
+man page.
+
+=cut
+
+# Other supporting subs
+
+# This must be the last bts_* sub
+sub bts_help {
+ my $inlist = 0;
+ my $insublist = 0;
+ print <<"EOF";
+Usage: $progname [options] command [args] [\#comment] [.|, command ... ]
+Valid options are:
+ -o, --offline Do not attempt to connect to BTS for show/bug
+ commands: use cached copy
+ --online, --no-offline Attempt to connect (default)
+ -n, --no-action Do not send emails but print them to standard output.
+ --no-cache Do not attempt to cache new versions of BTS
+ pages when performing show/bug commands
+ --cache Do attempt to cache new versions of BTS
+ pages when performing show/bug commands (default)
+ --cache-mode={min|mbox|full}
+ How much to cache when we are caching: the sensible
+ bare minimum (default), the mbox as well, or
+ everything?
+ --cache-delay=seconds Time to sleep between each download when caching.
+ -m, --mbox With show or bugs, open a mailreader to read the mbox
+ version instead
+ --mailreader=CMD Run CMD to read an mbox; default is 'mutt -f %s'
+ (must contain %s, which is replaced by mbox name)
+ --cc-addr=CC_EMAIL_ADDRESS
+ Send carbon copies to a list of users.
+ CC_EMAIL_ADDRESS should be a comma-separated list of
+ e-mail addresses. Multiple options add more CCs.
+ --use-default-cc Send carbon copies to any addresses specified in the
+ configuration file BTS_DEFAULT_CC (default)
+ --no-use-default-cc Do not do so
+ --sendmail=cmd Sendmail command to use (default /usr/sbin/sendmail)
+ --mutt Use mutt for sending of mails.
+ --no-mutt Do not do so (default)
+ --smtp-host=host SMTP host to use
+ --smtp-username=user } Credentials to use when connecting to an SMTP
+ --smtp-password=pass } server which requires authentication
+ --smtp-helo=helo HELO to use when connecting to the SMTP server;
+ (defaults to the content of /etc/mailname)
+ --bts-server The name of the debbugs server to use
+ (default https://bugs.debian.org)
+ -f, --force-refresh Reload all bug reports being cached, even unchanged
+ ones
+ --no-force-refresh Do not do so (default)
+ --only-new Download only new bugs when caching. Do not check
+ for updates in bugs we already have.
+ --include-resolved Cache bugs marked as resolved (default)
+ --no-include-resolved Do not cache bugs marked as resolved
+ --no-ack Suppress BTS acknowledgment mails
+ --ack Do not do so (default)
+ -i, --interactive Prompt for confirmation before sending e-mail
+ --force-interactive Same as --interactive, with the exception that an
+ editor is spawned before confirmation is requested
+ --no-interactive Do not do so (default)
+ -q, --quiet Only display information about newly cached pages.
+ If given twice, only display error messages.
+ --no-conf, --noconf Do not read devscripts config files;
+ must be the first option given
+ -h, --help Display this message
+ -v, --version Display version and copyright info
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+
+Valid commands are:
+EOF
+ seek DATA, 0, 0;
+ while (<DATA>) {
+ $inlist = 1 if /^=over 4/;
+ next unless $inlist;
+ $insublist = 1 if /^=over [^4]/;
+ $insublist = 0 if /^=back/;
+ if (/^=item\sB<([^->].*)>/ and !$insublist) {
+ if ($1 eq 'help') {
+ last;
+ }
+ # Strip POD markup before displaying and ensure we don't wrap
+ # longer lines
+ my $parser = Pod::BTS->new(width => 100);
+ $parser->no_whining(1);
+ $parser->output_fh(\*STDOUT);
+ $parser->parse_string_document($_);
+ }
+ }
+}
+
+# Strips any leading # or Bug# and trailing : from a thing if what's left is
+# a pure positive number;
+# also RC is a synonym for release-critical/other/all.html
+sub sanitizething {
+ my $bug = $_[0];
+ defined $bug or return undef;
+
+ return 'release-critical/other/all.html' if $bug eq 'RC';
+ return 'release-critical/index.html' if $bug eq 'release-critical';
+ $bug =~ s/^(?:(?:Bug)?\#)?(\d+):?$/$1/;
+ return $bug;
+}
+
+# Perform basic validation of an argument which should be an email address,
+# handling ! if allowed
+sub checkemail {
+ my $email = $_[0] or return;
+ my $allowbang = $_[1];
+
+ if ($email !~ /\@/ && (!$allowbang || $email ne '!')) {
+ return;
+ }
+
+ return $email;
+}
+
+# Validate a bug number. Strips out extraneous leading junk, allowing
+# for things like "#74041" and "Bug#94921"
+sub checkbug {
+ my $bug = $_[0] or return "";
+ my $quiet = $_[1] || 0; # used when we don't want warnings from checkbug
+
+ if ($bug eq 'it') {
+ if (not defined $it) {
+ die
+"$progname: You specified 'it', but no previous bug number referenced!\n";
+ }
+ } else {
+ $bug =~ s/^(?:(?:bug)?\#)?(-?\d+):?$/$1/i;
+ if (!exists $clonedbugs{$bug}
+ && (!length $bug || $bug !~ /^[0-9]+$/)) {
+ warn "\"$_[0]\" does not look like a bug number\n" unless $quiet;
+ return "";
+ }
+
+ # Valid, now set $it to this so that we can refer to it by 'it' later
+ $it = $bug;
+ }
+
+ return $it;
+}
+
+# Stores up some extra information for a mail to the bts.
+sub mailbts {
+ if ($subject eq '') {
+ $subject = $_[0];
+ } elsif (length($subject) + length($_[0]) < 100) {
+ $subject .= ", $_[0]" if length($_[0]);
+ } elsif ($subject !~ / ...$/) {
+ $subject .= " ...";
+ }
+ $body .= "$comment[$index]\n" if $comment[$index];
+ $body .= "$_[1]\n";
+}
+
+# Extract an array of email addresses from a string
+sub extract_addresses {
+ my $s = shift;
+ my @addresses;
+
+ # Original regular expression from git-send-email, slightly modified
+ while ($s and $s =~ /([^,<>"\s\@]+\@[^.,<>"\s@]+(?:\.[^.,<>"\s\@]+)+)(.*)/)
+ {
+ push @addresses, $1;
+ $s = $2;
+ }
+ return @addresses;
+}
+
+# Send one full mail message using the smtphost or sendmail.
+sub send_mail {
+ my ($from, $to, $cc, $subject, $body) = @_;
+
+ my @fromaddresses = extract_addresses($from);
+ unless (@fromaddresses) {
+ die "Something went wrong: no from address" unless $noaction;
+ @fromaddresses = ($from = '<undefined>');
+ }
+ my $fromaddress = $fromaddresses[0];
+ # Message-ID algorithm from git-send-email
+ my $msgid
+ = sprintf("%s-%s", time(), int(rand(4200))) . "-bts-$fromaddress";
+ my $date = strftime "%a, %d %b %Y %T %z", localtime;
+
+ my $message = fold_from_header("From: $from") . "\n";
+ $message .= "To: $to\n" if length $to;
+ $message .= "Cc: $cc\n" if length $cc;
+ $message .= "X-Debbugs-No-Ack: Yes\n" if not $requestack;
+ $message
+ .= "Subject: $subject\n"
+ . "Date: $date\n"
+ . "User-Agent: devscripts bts/$version$toolname\n"
+ . "Message-ID: <$msgid>\n" . "\n";
+
+ $body = addfooter($body);
+ ($message, $body) = confirmmail($message, $body);
+
+ return if not defined $body;
+
+ $message .= "$body\n";
+ if ($noaction) {
+ print "$message\n";
+ } elsif ($use_mutt) {
+ my ($fh, $filename) = tempfile(
+ "btsXXXXXX",
+ SUFFIX => ".mail",
+ DIR => File::Spec->tmpdir,
+ UNLINK => 1
+ );
+ open(MAILOUT, ">&", $fh)
+ or die "$progname: writing to temporary file: $!\n";
+
+ print MAILOUT $message;
+
+ my $mailcmd = $muttcmd;
+ $mailcmd =~ s/\%([%s])/$1 eq '%' ? '%' : $filename/eg;
+
+ exec($mailcmd) or die "$progname: unable to start mailclient: $!";
+ } elsif (length $smtphost) {
+ my $smtp;
+
+ if ($smtphost =~ m%^(?:(?:ssmtp|smtps)://)(.*)$%) {
+ my ($host, $port) = split(/:/, $1);
+ $port ||= '465';
+
+ $smtp = Net::SMTP->new(
+ $host,
+ Port => $port,
+ Hello => $smtphelo,
+ SSL => 1,
+ )
+ or die
+"$progname: failed to open SMTP connection with TLS to $smtphost\n($@)\n";
+ } else {
+ my ($host, $port) = split(/:/, $smtphost);
+ $port ||= '25';
+
+ $smtp = Net::SMTP->new(
+ $host,
+ Port => $port,
+ Hello => $smtphelo,
+ )
+ or die
+ "$progname: failed to open SMTP connection to $smtphost\n($@)\n";
+ }
+ if ($smtpuser) {
+ if (have_authen_sasl) {
+ $smtppass = getpass() if not $smtppass;
+ $smtp->auth($smtpuser, $smtppass)
+ or die
+ "$progname: failed to authenticate to $smtphost\n($@)\n";
+ } else {
+ die
+"$progname: failed to authenticate to $smtphost: $authen_sasl_broken\n";
+ }
+ }
+ $smtp->mail($fromaddress)
+ or die
+ "$progname: failed to set SMTP from address $fromaddress\n($@)\n";
+ my @addresses = extract_addresses($to);
+ push @addresses, extract_addresses($cc);
+ foreach my $address (@addresses) {
+ $smtp->recipient($address)
+ or die
+ "$progname: failed to set SMTP recipient $address\n($@)\n";
+ }
+ $smtp->data($message)
+ or die "$progname: failed to send message as SMTP DATA\n($@)\n";
+ $smtp->quit
+ or die "$progname: failed to quit SMTP connection\n($@)\n";
+ } else {
+ my $pid = open(MAIL, "|-");
+ if (!defined $pid) {
+ die "$progname: Couldn't fork: $!\n";
+ }
+ $SIG{'PIPE'} = sub { die "$progname: pipe for $sendmailcmd broke\n"; };
+ if ($pid) {
+ # parent
+ print MAIL $message;
+ close MAIL or die "$progname: $sendmailcmd error: $!\n";
+ } else {
+ # child
+ if ($debug) {
+ exec("/bin/cat")
+ or die "$progname: error running cat: $!\n";
+ } else {
+ my @mailcmd = split ' ', $sendmailcmd;
+ push @mailcmd, "-t" if $sendmailcmd =~ /$sendmail_t/;
+ exec @mailcmd
+ or die "$progname: error running $sendmailcmd: $!\n";
+ }
+ }
+ }
+}
+
+sub generate_packages_cc {
+ my @ccs;
+ if (keys %ccpackages && $packagesserver) {
+ push @ccs, map { "$_\@$packagesserver" } sort keys %ccpackages;
+ }
+ if (keys %ccsubmitters && $btsserver) {
+ push @ccs, map { "$_\@$btsserver" } sort keys %ccsubmitters;
+ }
+ return @ccs;
+}
+
+# Sends all cached mail to the bts (duh).
+sub mailbtsall {
+ my $subject = shift;
+ my $body = shift;
+
+ my $charset = `locale charmap`;
+ chomp $charset;
+ $charset =~ s/^ANSI_X3\.4-19(68|86)$/US-ASCII/;
+ $subject = MIME_encode_mimewords($subject, 'Charset' => $charset);
+
+ if ($interactive eq 'force' || $use_mutt) {
+ push @ccemails, generate_packages_cc();
+ }
+ if ($ccsecurity) {
+ push @ccemails, $ccsecurity;
+ }
+ my $ccemail = join(', ', @ccemails);
+ if ($ENV{'DEBEMAIL'} || $ENV{'EMAIL'}) {
+ # We need to fake the From: line
+ my ($email, $name);
+ if (exists $ENV{'DEBFULLNAME'}) { $name = $ENV{'DEBFULLNAME'}; }
+ if (exists $ENV{'DEBEMAIL'}) {
+ $email = $ENV{'DEBEMAIL'};
+ if ($email =~ /^(.*?)\s+<(.*)>\s*$/) {
+ $name ||= $1;
+ $email = $2;
+ }
+ }
+ if (exists $ENV{'EMAIL'}) {
+ if ($ENV{'EMAIL'} =~ /^(.*?)\s+<(.*)>\s*$/) {
+ $name ||= $1;
+ $email ||= $2;
+ } else {
+ $email ||= $ENV{'EMAIL'};
+ }
+ }
+ if (!$name) {
+ # Perhaps not ideal, but it will have to do
+ $name = (getpwuid($<))[6];
+ $name =~ s/,.*//;
+ }
+ my $from = $name ? "$name <$email>" : $email;
+ $from = MIME_encode_mimewords($from, 'Charset' => $charset);
+
+ send_mail($from, $btsemail, $ccemail, $subject, $body);
+ } else { # No DEBEMAIL
+ my $header = "";
+
+ $header = "To: $btsemail\n";
+ $header .= "Cc: $ccemail\n" if length $ccemail;
+ $header .= "X-Debbugs-No-Ack: Yes\n" if not $requestack;
+ $header .= "Subject: $subject\n"
+ . "User-Agent: devscripts bts/$version$toolname\n" . "\n";
+
+ $body = addfooter($body);
+ ($header, $body) = confirmmail($header, $body);
+
+ return if not defined $body;
+
+ if ($noaction) {
+ print "$header$body\n";
+ return;
+ }
+
+ my $pid = open(MAIL, "|-");
+ if (!defined $pid) {
+ die "$progname: Couldn't fork: $!\n";
+ }
+ $SIG{'PIPE'} = sub { die "$progname: pipe for $sendmailcmd broke\n"; };
+ if ($pid) {
+ # parent
+ print MAIL $header;
+ print MAIL $body;
+ close MAIL or die "$progname: $sendmailcmd: $!\n";
+ } else {
+ # child
+ if ($debug) {
+ exec("/bin/cat")
+ or die "$progname: error running cat: $!\n";
+ } else {
+ my @mailcmd = split ' ', $sendmailcmd;
+ push @mailcmd, "-t" if $sendmailcmd =~ /$sendmail_t/;
+ exec @mailcmd
+ or die "$progname: error running $sendmailcmd: $!\n";
+ }
+ }
+ }
+}
+
+sub confirmmail {
+ my ($header, $body) = @_;
+
+ return ($header, $body) if $noaction;
+
+ $body = edit($body) if $interactive eq 'force';
+ my $setHeader = 0;
+ if ($interactive ne 'no') {
+ while (1) {
+ print "\n", $header, "\n", $body, "\n---\n";
+ print "OK to send? [Y/n/e] ";
+ $_ = <STDIN>;
+ if (/^n/i) {
+ $body = undef;
+ last;
+ } elsif (/^(y|$)/i) {
+ last;
+ } elsif (/^e/i) {
+ # Since the user has chosen to edit the message, we go ahead
+ # and add the $ccpackages Ccs (if they haven't already been
+ # added due to interactive).
+ if ($interactive ne 'force' && !$setHeader) {
+ $setHeader = 1;
+ my @ccemails = generate_packages_cc();
+ my $ccs = join(', ', @ccemails);
+ if ($header =~ m/^Cc: (.*?)$/m) {
+ $ccs = "$1, $ccs";
+ $header =~ s/^Cc: .*?$/Cc: $ccs/m;
+ } else {
+ $header =~ s/^(To: .*?)$/$1\nCc: $ccs/m;
+ }
+ }
+ $body = edit($body);
+ }
+ }
+ }
+
+ return ($header, $body);
+}
+
+sub addfooter() {
+ my $body = shift;
+
+ $body .= "thanks\n";
+ if ($interactive eq 'force') {
+ if (-r $ENV{'HOME'} . "/.signature") {
+ if (open SIG, "<", $ENV{'HOME'} . "/.signature") {
+ $body .= "-- \n";
+ while (<SIG>) {
+ $body .= $_;
+ }
+ close SIG;
+ }
+ }
+ }
+
+ return $body;
+}
+
+sub getpass() {
+ system "stty -echo cbreak </dev/tty";
+ die "$progname: error disabling stty echo\n" if $?;
+ print "\a${smtpuser}";
+ print "\@$smtphost" if $smtpuser !~ /\@/;
+ print "'s SMTP password: ";
+ $_ = <STDIN>;
+ chomp;
+ print "\n";
+ system "stty echo -cbreak </dev/tty";
+ die "$progname: error enabling stty echo\n" if $?;
+ return $_;
+}
+
+sub extractemail() {
+ my $thing = shift or die "$progname: extract e-mail from what?\n";
+
+ if ($thing =~ /^(.*?)\s+<(.*)>\s*$/) {
+ $thing = $2;
+ }
+
+ return $thing;
+}
+
+# A simplified version of mailbtsall which sends one message only to
+# a specified address using the specified email From: header
+sub mailto {
+ my ($subject, $body, $to, $from) = @_;
+
+ if (defined($from) || $noaction) {
+ send_mail($from, $to, '', $subject, $body);
+ } else { # No $from
+ unless (system("command -v mailx >/dev/null 2>&1") == 0) {
+ die
+"$progname: You need to either specify an email address (say using DEBEMAIL)\nor have the bsd-mailx package (or another package providing mailx) installed\nto send mail!\n";
+ }
+ my $pid = open(MAIL, "|-");
+ if (!defined $pid) {
+ die "$progname: Couldn't fork: $!\n";
+ }
+ $SIG{'PIPE'} = sub { die "$progname: pipe for mailx broke\n"; };
+ if ($pid) {
+ # parent
+ print MAIL $body;
+ close MAIL or die "$progname: mailx: $!\n";
+ } else {
+ # child
+ if ($debug) {
+ exec("/bin/cat")
+ or die "$progname: error running cat: $!\n";
+ } else {
+ exec("mailx", "-s", $subject, $to)
+ or die "$progname: error running mailx: $!\n";
+ }
+ }
+ }
+}
+
+# The following routines are taken from a patched version of MIME::Words
+# posted at http://mail.nl.linux.org/linux-utf8/2002-01/msg00242.html
+# by Richard Čepas (Chepas) <rch@richard.eu.org>
+
+sub MIME_encode_B {
+ my $str = shift;
+ require MIME::Base64;
+ MIME::Base64::encode_base64($str, '');
+}
+
+sub MIME_encode_Q {
+ my $str = shift;
+ $str
+ =~ s{([_\?\=\015\012\t $NONPRINT])}{$1 eq ' ' ? '_' : sprintf("=%02X", ord($1))}eog
+ ; # RFC-2047, Q rule 3
+ $str;
+}
+
+sub MIME_encode_mimeword {
+ my $word = shift;
+ my $encoding = uc(shift || 'Q');
+ my $charset = uc(shift || 'ISO-8859-1');
+ my $encfunc = (($encoding eq 'Q') ? \&MIME_encode_Q : \&MIME_encode_B);
+ "=?$charset?$encoding?" . &$encfunc($word) . "?=";
+}
+
+sub MIME_encode_mimewords {
+ my ($rawstr, %params) = @_;
+ # check if we have something to encode
+ $rawstr !~ /[$NONPRINT]/o and $rawstr !~ /\=\?/o and return $rawstr;
+ my $charset = $params{Charset} || 'ISO-8859-1';
+ # if there is 1/3 unsafe bytes, the Q encoded string will be 1.66 times
+ # longer and B encoded string will be 1.33 times longer than original one
+ my $encoding = lc(
+ $params{Encoding}
+ || (
+ length($rawstr) > 3 * ($rawstr =~ tr/[\x00-\x1F\x7F-\xFF]//)
+ ? 'q'
+ : 'b'
+ ));
+
+ # Encode any "words" with unsafe bytes.
+ my ($last_token, $last_word_encoded, $token) = ('', 0);
+ $rawstr =~ s{([^\015\012\t ]+|[\015\012\t ]+)}{ # get next "word"
+ $token = $1;
+ if ($token =~ /[\015\012\t ]+/) { # white-space
+ $last_token = $token;
+ } else {
+ if ($token !~ /[$NONPRINT]/o and $token !~ /\=\?/o) {
+ # no unsafe bytes, leave as it is
+ $last_word_encoded = 0;
+ $last_token = $token;
+ } else {
+ # has unsafe bytes, encode to one or more encoded words
+ # white-space between two encoded words is skipped on
+ # decoding, so we should encode space in that case
+ $_ = $last_token =~ /[\015\012\t ]+/ && $last_word_encoded ? $last_token.$token : $token;
+ # We limit such words to about 18 bytes, to guarantee that the
+ # worst-case encoding give us no more than 54 + ~10 < 75 bytes
+ s{(.{1,15}[\x80-\xBF]{0,4})}{
+ # don't split multibyte characters - this regexp should
+ # work for UTF-8 characters
+ MIME_encode_mimeword($1, $encoding, $charset).' ';
+ }sxeg;
+ $_ = substr($_, 0, -1); # remove trailing space
+ $last_word_encoded = 1;
+ $last_token = $token;
+ $_;
+ }
+ }
+ }sxeg;
+ $rawstr;
+}
+
+# This is a stripped-down version of Mail::Header::_fold_line, but is
+# not as general-purpose as the original, so take care if using it elsewhere!
+# The heuristics are changed to prevent splitting in the middle of an
+# encoded word; we should not have any commas or semicolons!
+sub fold_from_header {
+ my $header = shift;
+ chomp $header; # We assume there wasn't a newline anyhow
+
+ my $maxlen = 76;
+ my $max = int($maxlen - 5); # 4 for leading spcs + 1 for [\,\;]
+
+ if (length($header) > $maxlen) {
+ # Split the line up:
+ # first split at a whitespace,
+ # else we are looking at a single word and we won't try to split
+ # it, even though we really ought to
+ # But this could only happen if someone deliberately uses a really
+ # long name with no spaces in it.
+ my @x;
+
+ push @x, $1
+ while (
+ $header =~ s/^\s*
+ ([^\"]{1,$max}\s
+ |[^\s\"]*(?:\"[^\"]*\"[ \t]?[^\s\"]*)+\s
+ |[^\s\"]+\s
+ )
+ //x
+ );
+ push @x, $header;
+ map { s/\s*$// } @x;
+ if (@x > 1 and length($x[-1]) + length($x[-2]) < $max) {
+ $x[-2] .= " $x[-1]";
+ pop @x;
+ }
+ $x[0] =~ s/^\s*//;
+ $header = join("\n ", @x);
+ }
+
+ $header =~ s/^(\S+)\n\s*(?=\S)/$1 /so;
+ return $header;
+}
+
+########## Browsing and caching subroutines
+
+# Mirrors a given thing; if the online version is no newer than our
+# cached version, then returns an empty string, otherwise returns the
+# live thing as a (non-empty) string
+sub download {
+ my $thing = shift;
+ my $thgopts = shift || '';
+ my $manual = shift; # true="bts cache", false="bts show/bug"
+ my $mboxing = shift; # true="bts --mbox show/bugs", and only if $manual=0
+ my $bug_current = shift; # current bug being downloaded if caching
+ my $bug_total = shift; # total things to download if caching
+ my $timestamp = 0;
+ my $versionstamp = '';
+ my $url;
+
+ my $oldcwd = getcwd;
+
+ # What URL are we to download?
+ if ($thgopts ne '') {
+ # have to be intelligent here :/
+ $url = thing_to_url($thing) . $thgopts;
+ } else {
+ # let the BTS be intelligent
+ $url = "$btsurl$thing";
+ }
+
+ if (!-d $cachedir) {
+ die "$progname: download() called but no cachedir!\n";
+ }
+
+ chdir($cachedir) || die "$progname: chdir $cachedir: $!\n";
+
+ if (-f cachefile($thing, $thgopts)) {
+ ($timestamp, $versionstamp) = get_timestamp($thing, $thgopts);
+ $timestamp ||= 0;
+ $versionstamp ||= 0;
+ # And ensure we preserve any manual setting
+ if (is_manual($timestamp)) { $manual = 1; }
+ }
+
+ # do we actually have to do more than we might have thought?
+ # yes, if we've caching with --cache-mode=mbox or full and the bug had
+ # previously been cached in a less thorough format
+ my $forcedownload = 0;
+ if ($thing =~ /^\d+$/ and !$refreshmode) {
+ if (old_cache_format_version($versionstamp)) {
+ $forcedownload = 1;
+ } elsif ($cachemode ne 'min' or $mboxing) {
+ if (!-r mboxfile($thing)) {
+ $forcedownload = 1;
+ } elsif ($cachemode eq 'full' and -d $thing) {
+ opendir DIR, $thing
+ or die "$progname: opendir $cachedir/$thing: $!\n";
+ my @htmlfiles = grep { /^\d+\.html$/ } readdir(DIR);
+ closedir DIR;
+ $forcedownload = 1 unless @htmlfiles;
+ }
+ }
+ }
+
+ print "Downloading $url ... "
+ if !$quiet
+ and $manual
+ and $thing ne "css/bugs.css";
+ IO::Handle::flush(\*STDOUT);
+ my ($ret, $msg, $livepage, $contenttype)
+ = bts_mirror($url, $timestamp, $forcedownload);
+ my $charset = $contenttype || '';
+ if ($charset =~ m/charset=(.*?)(;|\Z)/) {
+ $charset = $1;
+ } else {
+ $charset = "";
+ }
+ if ($ret == MIRROR_UP_TO_DATE) {
+ # we have an up-to-date version already, nothing to do
+ # and $timestamp is guaranteed to be well-defined
+ if (is_automatic($timestamp) and $manual) {
+ set_timestamp($thing, $thgopts, make_manual($timestamp),
+ $versionstamp);
+ }
+
+ if (!$quiet and $manual and $thing ne "css/bugs.css") {
+ print "(cache already up-to-date) ";
+ print "$bug_current/$bug_total" if $bug_total;
+ print "\n";
+ }
+ chdir $oldcwd or die "$progname: chdir $oldcwd failed: $!\n";
+ return "";
+ } elsif ($ret == MIRROR_DOWNLOADED) {
+ # Note the current timestamp, but don't record it until
+ # we've successfully stashed the data away
+ $timestamp = time;
+
+ die "$progname: empty page downloaded\n" unless length $livepage;
+
+ my $bug2filename = {};
+
+ if ($thing =~ /^\d+$/) {
+ # we've downloaded an individual bug, and it's been updated,
+ # so we need to also download all the attachments
+ $bug2filename
+ = download_attachments($thing, $livepage, $timestamp);
+ }
+
+ my $data = $livepage; # work on a copy, not the original
+ my $cachefile = cachefile($thing, $thgopts);
+ open(OUT_CACHE, ">$cachefile")
+ or die "$progname: open $cachefile: $!\n";
+
+ $data = mangle_cache_file($data, $thing, $bug2filename, $timestamp,
+ $charset ? $contenttype : '');
+ print OUT_CACHE $data;
+ close OUT_CACHE
+ or die "$progname: problems writing to $cachefile: $!\n";
+
+ set_timestamp($thing, $thgopts,
+ $manual ? make_manual($timestamp) : make_automatic($timestamp),
+ $version);
+
+ if (!$quiet and $manual and $thing ne "css/bugs.css") {
+ print "(cached new version) ";
+ print "$bug_current/$bug_total" if $bug_total;
+ print "\n";
+ } elsif ($quiet == 1 and $manual and $thing ne "css/bugs.css") {
+ print "Downloading $url ... (cached new version)\n";
+ } elsif ($quiet > 1) {
+ # do nothing
+ }
+
+ # Add a <base> tag to the live page content, so that relative urls
+ # in it work when it's passed to the web browser.
+ my $base = $url;
+ $base =~ s%/[^/]*$%%;
+ $livepage =~ s%<head>%<head><base href="$base">%i;
+
+ chdir $oldcwd or die "$progname: chdir $oldcwd failed: $!\n";
+ return $livepage;
+ } else {
+ die "$progname: couldn't download $url:\n$msg\n";
+ }
+}
+
+sub download_attachments {
+ my ($thing, $toppage, $timestamp) = @_;
+ my %bug2filename;
+
+ # We search for appropriate strings in the top page, and save the
+ # attachments in files with names as follows:
+ # - if the attachment specifies a filename, save as bug#/msg#-att#/filename
+ # - if not, save as bug#/msg#-att# with suffix .txt if plain/text and
+ # .html if plain/html, no suffix otherwise (too much like hard work!)
+ # Since messages are never modified retrospectively, we don't download
+ # attachments which have already been downloaded
+
+ # Yuck, yuck, yuck. This regex splits the $data string at every
+ # occurrence of either "[<a " or plain "<a ", preserving any "[".
+ my @data = split /(?:(?=\[<[Aa]\s)|(?<!\[)(?=<[Aa]\s))/, $toppage;
+ foreach (@data) {
+ next
+ unless
+m%<a(?: class=\".*?\")? href="(?:/cgi(?:-bin)?/)?((bugreport\.cgi[^\"]+)"(?: .*?)?>|(version\.cgi[^\"]+)"><img[^>]* src="(?:/cgi(?:-bin)?/)?([^\"]+)">|(version\.cgi[^\"]+)">)%i;
+
+ my $ref = $5;
+ $ref = $4 if not defined $ref;
+ $ref = $2 if not defined $ref;
+
+ my ($msg, $filename) = href_to_filename($_);
+
+ next unless defined $msg;
+
+ if ($msg =~ /^\d+-\d+$/) {
+ # it's an attachment, must download
+
+ if (-f dirname($filename)) {
+ warn
+"$progname: found file where directory expected; using existing file ("
+ . dirname($filename) . ")\n";
+ $bug2filename{$msg} = dirname($filename);
+ } else {
+ $bug2filename{$msg} = $filename;
+ }
+
+ # already downloaded?
+ next if -f $bug2filename{$msg} and not $refreshmode;
+ } elsif ($cachemode eq 'full' and $msg =~ /^\d+$/) {
+ $bug2filename{$msg} = $filename;
+ # already downloaded?
+ next if -f $bug2filename{$msg} and not $refreshmode;
+ } elsif ($cachemode eq 'full' and $msg =~ /^\d+-mbox$/) {
+ $bug2filename{$msg} = $filename;
+ # already downloaded?
+ next if -f $bug2filename{$msg} and not $refreshmode;
+ } elsif (($cachemode eq 'full' or $cachemode eq 'mbox' or $mboxmode)
+ and $msg eq 'mbox') {
+ $bug2filename{$msg} = $filename;
+ # This always needs refreshing, as it does change as the bug
+ # changes
+ } elsif ($cachemode eq 'full' and $msg =~ /^(status|raw)mbox$/) {
+ $bug2filename{$msg} = $filename;
+ # Always need refreshing, as they could change each time the
+ # bug does
+ } elsif ($cachemode eq 'full' and $msg eq 'versions') {
+ $bug2filename{$msg} = $filename;
+ # Ensure we always download the full size images for
+ # version graphs, without the informational links
+ $ref =~ s%;info=1%;info=0%;
+ $ref =~ s%(;|\?)(height|width)=\d+%$1%g;
+ # already downloaded?
+ next if -f $bug2filename{$msg} and not $refreshmode;
+ }
+
+ next unless exists $bug2filename{$msg};
+
+ warn "bts debug: downloading $btscgiurl$ref\n" if $debug;
+ init_agent() unless $ua; # shouldn't be necessary, but do just in case
+ my $request = HTTP::Request->new('GET', $btscgiurl . $ref);
+ my $response = $ua->request($request);
+ if ($response->is_success) {
+ my $content_length
+ = defined $response->content ? length($response->content) : 0;
+ if ($content_length == 0) {
+ warn
+ "$progname: failed to download $ref (length 0), skipping\n";
+ next;
+ }
+
+ my $data = $response->content;
+
+ if ($msg =~ /^\d+$/) {
+ # we're dealing with a boring message, and so we must be
+ # in 'full' mode
+ $data =~ s%<HEAD>%<HEAD><BASE href="../">%;
+ $data = mangle_cache_file($data, $thing, 'full', $timestamp);
+ }
+ make_path(dirname($bug2filename{$msg}));
+ open OUT_CACHE, ">$bug2filename{$msg}"
+ or die "$progname: open cache $bug2filename{$msg}\n";
+ print OUT_CACHE $data;
+ close OUT_CACHE;
+ } else {
+ my $status = $response->status_line;
+ warn "$progname: failed to download $ref ($status), skipping\n";
+ next;
+ }
+ }
+
+ return \%bug2filename;
+}
+
+# Download the mailbox for a given bug, return mbox ($fh, filename) on success,
+# die on failure
+sub download_mbox {
+ my $thing = shift;
+ my $temp = shift; # do we wish to store it in cache or in a temp file?
+ my $mboxfile = mboxfile($thing);
+
+ die "$progname: trying to download mbox for illegal bug number $thing.\n"
+ unless $mboxfile;
+
+ if (!have_lwp()) {
+ die "$progname: couldn't run bts --mbox: $lwp_broken\n";
+ }
+ init_agent() unless $ua;
+
+ my $request = HTTP::Request->new('GET',
+ $btscgiurl . "bugreport.cgi?bug=$thing;mboxmaint=yes");
+ my $response = $ua->request($request);
+ if ($response->is_success) {
+ my $content_length
+ = defined $response->content ? length($response->content) : 0;
+ if ($content_length == 0) {
+ die "$progname: failed to download mbox (length 0).\n";
+ }
+
+ my ($fh, $filename);
+ if ($temp) {
+ ($fh, $filename) = tempfile(
+ "btsXXXXXX",
+ SUFFIX => ".mbox",
+ DIR => File::Spec->tmpdir,
+ UNLINK => 1
+ );
+ # Use filehandle for security
+ open(OUT_MBOX, ">&", $fh)
+ or die "$progname: writing to temporary file: $!\n";
+ } else {
+ $filename = $mboxfile;
+ open(OUT_MBOX, ">$mboxfile")
+ or die "$progname: writing to mbox file $mboxfile: $!\n";
+ }
+ print OUT_MBOX $response->content;
+ close OUT_MBOX;
+
+ return ($fh, $filename);
+ } else {
+ my $status = $response->status_line;
+ die "$progname: failed to download mbox ($status).\n";
+ }
+}
+
+# Mangle downloaded file to work in the local cache, so
+# selectively modify the links
+sub mangle_cache_file {
+ my ($data, $thing, $bug2filename, $timestamp, $ctype) = @_;
+ my $fullmode = !ref $bug2filename;
+
+ # Undo unnecessary '+' encoding in URLs
+ while ($data =~ s!(href=\"[^\"]*)\%2b!$1+!ig) { }
+ my $time = localtime(abs($timestamp));
+ $data
+ =~ s%(<BODY.*>)%$1<p><em>[Locally cached on $time by devscripts version $version]</em></p>%i;
+ $data =~ s%href="/css/bugs.css"%href="bugs.css"%;
+ if ($ctype) {
+ $data
+ =~ s%(<HEAD.*>)%$1<META HTTP-EQUIV="Content-Type" CONTENT="$ctype">%i;
+ }
+
+ my @data;
+ # We have to distinguish between release-critical pages and normal BTS
+ # pages as they have a different structure
+ if ($thing =~ /^release-critical/) {
+ @data = split /(?=<[Aa])/, $data;
+ foreach (@data) {
+s%<a href="(https?://$btsserver/cgi(?:-bin)?/bugreport\.cgi.*bug=(\d+)[^\"]*)">(.+?)</a>%<a href="$2.html">$3</a> (<a href="$1">online</a>)%i;
+s%<a href="(https?://$btsserver/cgi(?:-bin)?/pkgreport\.cgi.*pkg=([^\"&;]+)[^\"]*)">(.+?)</a>%<a href="$2.html">$3</a> (<a href="$1">online</a>)%i;
+ # References to other bug lists on bugs.d.o/release-critical
+ if (m%<a href="((?:debian|other)[-a-z/]+\.html)"%i) {
+ my $ref = 'release-critical/' . $1;
+ $ref =~ s%/%_%g;
+s%<a href="((?:debian|other)[-a-z/]+\.html)">(.+?)</a>%<a href="$ref">$2</a> (<a href="${btsurl}release-critical/$1">online</a>)%i;
+ }
+ # Maintainer email address - YUCK!!
+s%<a href="(https?://$btsserver/([^\"?]*\@[^\"?]*))">(.+?)</a>&gt;%<a href="$2.html">$3</a>&gt; (<a href="$1">online</a>)%i;
+ # Graph - we don't download
+s%<img src="graph.png" alt="Graph of RC bugs">%<img src="${btsurl}release-critical/graph.png" alt="Graph of RC bugs (online)">%;
+ }
+ } else {
+ # Yuck, yuck, yuck. This regex splits the $data string at every
+ # occurrence of either "[<a " or plain "<a ", preserving any "[".
+ @data = split /(?:(?=\[<[Aa]\s)|(?<!\[)(?=<[Aa]\s))/, $data;
+ foreach (@data) {
+ if (
+m%<a(?: class=\".*?\")? href=\"(?:/cgi(?:-bin)?/)?bugreport\.cgi[^\?]*\?.*?;?bug=(\d+)%i
+ ) {
+ my $bug = $1;
+ my ($msg, $filename) = href_to_filename($_);
+ if ($bug eq $thing and defined $msg) {
+ if ($fullmode
+ or (!$fullmode and exists $$bug2filename{$msg})) {
+s%<a((?: class=\".*?\")?) href="(?:/cgi(?:-bin)?/)?(bugreport\.cgi[^\"]*)">(.+?)</a>%<a$1 href="$filename">$3</a> (<a$1 href="$btscgiurl$2">online</a>)%i;
+ } else {
+s%<a((?: class=\".*?\")?) href="(?:/cgi(?:-bin)?/)?(bugreport\.cgi[^\"]*)">(.+?)</a>%$3 (<a$1 href="$btscgiurl$2">online</a>)%i;
+ }
+ } else {
+s%<a((?: class=\".*?\")?) href="(?:/cgi(?:-bin)?/)?(bugreport\.cgi[^\?]*\?.*?bug=(\d+))"(.*?)>(.+?)</a>%<a$1 href="$3.html"$4>$5</a> (<a$1 href="$btscgiurl$2">online</a>)%i;
+ }
+ } else {
+s%<a((?: class=\".*?\")?) href="(?:/cgi(?:-bin)?/)?(pkgreport\.cgi\?(?:pkg|maint)=([^\"&;]+)[^\"]*)">(.+?)</a>%<a$1 href="$3.html">$4</a> (<a$1 href="$btscgiurl$2">online</a>)%gi;
+s%<a((?: class=\".*?\")?) href="(?:/cgi(?:-bin)?/)?(pkgreport\.cgi\?src=([^\"&;]+)[^\"]*)">(.+?)</a>%<a$1 href="src_$3.html">$4</a> (<a$1 href="$btscgiurl$2">online</a>)%i;
+s%<a((?: class=\".*?\")?) href="(?:/cgi(?:-bin)?/)?(pkgreport\.cgi\?submitter=([^\"&;]+)[^\"]*)">(.+?)</a>%<a$1 href="from_$3.html">$4</a> (<a$1 href="$btscgiurl$2">online</a>)%i;
+s%<a((?: class=\".*?\")?) href="(?:/cgi(?:-bin)?/)?(pkgreport\.cgi\?.*?;?archive=([^\"&;]+);submitter=([^\"&;]+)[^\"]*)">(.+?)</a>%<a$1 href="from_$4_3Barchive_3D$3.html">$5</a> (<a$1 href="$btscgiurl$2">online</a>)%i;
+s%<a((?: class=\".*?\")?) href="(?:/cgi(?:-bin)?/)?(pkgreport\.cgi\?.*?;?package=([^\"&;]+)[^\"]*)">(.+?)</a>%<a$1 href="$3.html">$4</a> (<a$1 href="$btscgiurl$2">online</a>)%gi;
+s%<a((?: class=\".*?\")?) href="(?:/cgi(?:-bin)?/)?(bugspam\.cgi[^\"]+)">%<a$1 href="$btscgiurl$2">%i;
+s%<a((?: class=\".*?\")?) href="/([0-9]+?)">(.+?)</a>%<a$1 href="$2.html">$3</a> (<a$1 href="$btsurl$2">online</a>)%i;
+
+ # Version graphs
+ # - remove 'package=' and move the package to the front
+s%((?:<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?)([^\"]+)package=([^;\"]+)([^\"]+\"|\")>%$1$3;$2$4>%gi;
+ # - replace 'found=' with '.f.' and 'fixed=' with '.fx.'
+ 1 while
+s%((?:<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?)(.*?;)found=([^\"]+)\">%$1$2.f.$3">%i;
+ 1 while
+s%((?:<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?)(.*?;)fixed=([^\"]+)\">%$1$2.fx.$3">%i;
+ 1 while
+s%((?:<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?found=)([^\"]+)\">%$1.f.$2">%i;
+ 1 while
+s%((?:<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?fixed=)([^\"]+)\">%$1.fx.$2">%i;
+ # - replace '%2F' or '%2C' (a URL-encoded / or ,) with '.'
+ 1 while
+s%((?:<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?[^\%]*)\%2[FC]([^\"]+)\">%$1.$2">%gi;
+ # - display collapsed graph images at 25%
+s%(<img[^>]* src=\"[^\"]+);collapse=1([^\"]+)\">%$1$2.co" width="25\%" height="25\%">%gi;
+ # - and link to the collapsed graph
+ s%(<a[^>]* href=\"[^\"]+);collapse=1([^\"]+)\">%$1$2.co">%gi;
+ # - remove any other parameters
+ 1 while
+s%((?:<img[^>]* src|<a[^>]* href)=\"(?:/cgi(?:-bin)?/)?version\.cgi\?[^\"]+);(?:\w+=\d+)([^>]+)\>%$1$2>%gi;
+ # - remove any +s (encoded spaces)
+ 1 while
+s%((?:<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?[^\+]*)\+([^\"]+)\">%$1$2">%gi;
+ # - remove trailing ";" and ";." from previous substitutions
+ 1 while
+s%((?:<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?[^\"]+);\.(.*?)>%$1.$2>%gi;
+ 1 while
+s%((?:<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?[^\"]+);\">%$1">%gi;
+ # - final reference should be $package.$versions[.co].png
+s%(<img[^>]* src=\"|<a[^>]* href=\")(?:/cgi(?:-bin)?/)?version\.cgi\?([^\"]+)(\"[^>]*)>%$1$2.png$3>%gi;
+ }
+ }
+ }
+
+ return join("", @data);
+}
+
+# Removes a specified thing from the cache
+sub deletecache {
+ my $thing = shift;
+ my $thgopts = shift || '';
+
+ if (!-d $cachedir) {
+ die "$progname: deletecache() called but no cachedir!\n";
+ }
+
+ delete_timestamp($thing, $thgopts);
+ unlink cachefile($thing, $thgopts);
+ if ($thing =~ /^\d+$/) {
+ rmtree("$cachedir/$thing", 0, 1) if -d "$cachedir/$thing";
+ unlink("$cachedir/$thing.mbox") if -f "$cachedir/$thing.mbox";
+ unlink("$cachedir/$thing.status.mbox")
+ if -f "$cachedir/$thing.status.mbox";
+ unlink("$cachedir/$thing.raw.mbox") if -f "$cachedir/$thing.raw.mbox";
+ }
+}
+
+# Given a thing, returns the filename for it in the cache.
+sub cachefile {
+ my $thing = shift;
+ my $thgopts = shift || '';
+ if ($thing eq '') { die "$progname: cachefile given empty argument\n"; }
+ if ($thing =~ /bugs.css$/) { return $cachedir . "bugs.css" }
+ $thing =~ s/^src:/src_/;
+ $thing =~ s/^from:/from_/;
+ $thing =~ s/^tag:/tag_/;
+ $thing =~ s/^usertag:/usertag_/;
+ $thing =~ s%^release-critical/index\.html$%release-critical.html%;
+ $thing =~ s%/%_%g;
+ $thgopts =~ s/;/_3B/g;
+ $thgopts =~ s/=/_3D/g;
+ return File::Spec->catfile($cachedir,
+ $thing . $thgopts . ($thing =~ /\.html$/ ? "" : ".html"));
+}
+
+# Given a thing, returns the filename for its mbox in the cache.
+sub mboxfile {
+ my $thing = shift;
+ return $thing =~ /^\d+$/
+ ? File::Spec->catfile($cachedir, $thing . ".mbox")
+ : undef;
+}
+
+# Given a bug number, returns the dirname for it in the cache.
+sub cachebugdir {
+ my $thing = shift;
+ if ($thing !~ /^\d+$/) {
+ die "$progname: cachebugdir given faulty argument: $thing\n";
+ }
+ return File::Spec->catdir($cachedir, $thing);
+}
+
+# And the reverse: Given a filename in the cache, returns the corresponding
+# "thing".
+sub cachefile_to_thing {
+ my $thing = basename(shift, '.html');
+ my $thgopts = '';
+ $thing =~ s/^src_/src:/;
+ $thing =~ s/^from_/from:/;
+ $thing =~ s/^tag_/tag:/;
+ $thing =~ s/^usertag_/usertag:/;
+ $thing =~ s%^release-critical\.html$%release-critical/index\.html%;
+ $thing =~ s%_%/%g;
+ $thing =~ s/_3B/;/g;
+ $thing =~ s/_3D/=/g;
+ $thing =~ /^(.*?)((?:;.*)?)$/;
+ ($thing, $thgopts) = ($1, $2);
+ return ($thing, $thgopts);
+}
+
+# Given a thing, gives the official BTS cgi page for it
+sub thing_to_url {
+ my $thing = shift;
+ my $thingurl;
+
+ # have to be intelligent here :/
+ if ($thing =~ /^\d+$/) {
+ $thingurl = $btscgibugurl . "?bug=" . $thing;
+ } elsif ($thing =~ /^from:/) {
+ ($thingurl = $thing) =~ s/^from:/submitter=/;
+ $thingurl = $btscgipkgurl . '?' . $thingurl;
+ } elsif ($thing =~ /^src:/) {
+ ($thingurl = $thing) =~ s/^src:/src=/;
+ $thingurl = $btscgipkgurl . '?' . $thingurl;
+ } elsif ($thing =~ /^tag:/) {
+ ($thingurl = $thing) =~ s/^tag:/tag=/;
+ $thingurl = $btscgipkgurl . '?' . $thingurl;
+ } elsif ($thing =~ /^usertag:/) {
+ ($thingurl = $thing) =~ s/^usertag:/tag=/;
+ $thingurl = $btscgipkgurl . '?' . $thingurl;
+ } elsif ($thing =~ m%^release-critical(\.html|/(index\.html)?)?$%) {
+ $thingurl = $btsurl . 'release-critical/index.html';
+ } elsif ($thing =~ m%^release-critical/%) {
+ $thingurl = $btsurl . $thing;
+ } elsif ($thing =~ /\@/) { # so presume it's a maint request
+ $thingurl = $btscgipkgurl . '?maint=' . $thing;
+ } else { # it's a package, or had better be...
+ $thingurl = $btscgipkgurl . '?pkg=' . $thing;
+ }
+
+ return $thingurl;
+}
+
+# Given a thing, reads all links to bugs from the corresponding cache file
+# if there is one, and returns a list of them.
+sub bugs_from_thing {
+ my $thing = shift;
+ my $thgopts = shift || '';
+ my $cachefile = cachefile($thing, $thgopts);
+
+ if (-f $cachefile) {
+ local $/;
+ open(IN, $cachefile) || die "$progname: open $cachefile: $!\n";
+ my $data = <IN>;
+ close IN;
+
+ return $data =~ m!href="(\d+)\.html"!g;
+ } else {
+ return ();
+ }
+}
+
+# Given an <a href="bugreport.cgi?...>...</a> string, return a
+# msg id and corresponding filename
+sub href_to_filename {
+ my $href = $_[0];
+ my ($msg, $filename);
+
+ if ($href
+ =~ m%\[<a(?: class=\".*?\")? href="((?:/cgi(?:-bin)?/)?bugreport\.cgi([^\?]*)\?[^\"]*)">.*?\(([^,]*), .*?\)\]%
+ ) {
+ # this looks like an attachment; $4 should give the MIME-type
+ my $uri = URI->new($1);
+ my $urlfilename = $2;
+ my $bug = $uri->query_param_delete('bug');
+ my $mimetype = $3;
+
+ my $ref = $uri->query();
+ $ref =~ s/&(?:amp;)?/;/g; # normalise all hrefs
+ $uri->query($ref);
+
+ $msg = $uri->query_param('msg');
+ my $att = $uri->query_param('att');
+ return undef unless $msg && $att;
+ $msg .= "-$att";
+ $urlfilename ||= $att // '';
+
+ my $fileext = '';
+ if ($urlfilename =~ m%^/%) {
+ $filename = basename($urlfilename);
+ } else {
+ $filename = '';
+ if ($mimetype eq 'text/plain') { $fileext = '.txt'; }
+ if ($mimetype eq 'text/html') { $fileext = '.html'; }
+ }
+ if (length($filename)) {
+ $filename = "$bug/$msg/$filename";
+ } else {
+ $filename = "$bug/$msg$fileext";
+ }
+ } elsif ($href
+ =~ m%<a(?: class=\".*?\")? href="((?:/cgi(?:-bin)?/)?bugreport\.cgi([^\?]*)\?([^"]*))".*?>%
+ ) {
+ my $uri = URI->new($1);
+ my $urlfilename = $2;
+ my $bug = $uri->query_param_delete('bug');
+ $msg = $uri->query_param_delete('msg');
+
+ my $ref = $uri->query // '';
+ $ref =~ s/&(?:amp;)?/;/g; # normalise all hrefs
+ $ref =~ s/;archive=(yes|no)\b//;
+ $ref =~ s/%3D/=/g;
+ $uri->query($ref);
+
+ my %params = (
+ mboxstatus => '',
+ mboxstat => '',
+ mboxmaint => '',
+ mbox => '',
+ $uri->query_form(),
+ );
+
+ if ($msg && !%params) {
+ $filename = File::Spec->catfile($bug, "$msg.html");
+ } elsif (($params{mboxstat} || $params{mboxstatus}) eq 'yes') {
+ $msg = 'statusmbox';
+ $filename = "$bug.status.mbox";
+ } elsif ($params{mboxmaint} eq 'yes') {
+ $msg = 'mbox';
+ $filename = "$bug.mbox";
+ } elsif ($params{mbox} eq 'yes') {
+ if ($msg) {
+ $filename = "$bug/$msg.mbox";
+ $msg .= '-mbox';
+ } else {
+ $filename = "$bug.raw.mbox";
+ $msg = 'rawmbox';
+ }
+ } elsif (!$ref) {
+ return undef;
+ } else {
+ $href =~ s/>.*/>/s;
+ warn
+"$progname: in href_to_filename: unrecognised BTS URL type: $href\n";
+ return undef;
+ }
+ } elsif ($href
+ =~ m%<(?:a[^>]* href|img [^>]* src)="((?:/cgi(?:-bin)?/)?version\.cgi\?[^"]+)"[^>]*>%i
+ ) {
+ my $uri = URI->new($1);
+ my %params = $uri->query_form();
+
+ if ($params{package}) {
+ $filename .= $params{package};
+ }
+ if ($params{found}) {
+ $filename .= ".f.$params{found}";
+ }
+ if ($params{fixed}) {
+ $filename .= ".fx.$params{fixed}";
+ }
+ if ($params{collapse}) {
+ $filename .= '.co';
+ }
+
+ # Replace encoded "/" and "," characters with "."
+ $filename =~ s@(?:%2[FC]|/|,)@.@gi;
+ # Remove encoded spaces
+ $filename =~ s/\+//g;
+
+ $msg = 'versions';
+ $filename .= '.png';
+ } else {
+ return undef;
+ }
+
+ return ($msg, $filename);
+}
+
+# Browses a given thing, with preprocessed list of URL options such as
+# ";opt1=val1;opt2=val2" with possible caching if there are no options
+sub browse {
+ prunecache();
+ my $thing = shift;
+ my $thgopts = shift || '';
+
+ if ($thing eq '') {
+ if ($thgopts ne '') {
+ die
+"$progname: you can only give options for a BTS page if you specify a bug/maint/... .\n";
+ }
+ runbrowser($btsurl);
+ return;
+ }
+
+ my $hascache = -d $cachedir;
+ my $cachefile = cachefile($thing, $thgopts);
+ my $mboxfile = mboxfile($thing);
+ if ($mboxmode and !$mboxfile) {
+ die
+"$progname: you can only request a mailbox for a single bug report.\n";
+ }
+
+ # Check that if we're requesting a tag, that it's a valid tag
+ if (($thing . $thgopts) =~ /(?:^|;)(?:tag|include|exclude)[:=]([^;]*)/) {
+ unless (exists $valid_tags{$1}) {
+ die
+"$progname: invalid tag requested: $1\nRecognised tag names are: "
+ . join(" ", @valid_tags) . "\n";
+ }
+ }
+
+ my $livedownload = 1;
+ if ($offlinemode) {
+ $livedownload = 0;
+ if (!$hascache) {
+ die
+"$progname: Sorry, you are in offline mode and have no cache.\nRun \"bts cache\" or \"bts show\" to create one.\n";
+ } elsif ((!$mboxmode and !-r $cachefile)
+ or ($mboxmode and !-r $mboxfile)) {
+ die
+"$progname: Sorry, you are in offline mode and that is not cached.\nUse \"bts [--cache-mode=...] cache\" to update the cache.\n";
+ }
+ if ($mboxmode) {
+ runmailreader($mboxfile);
+ } else {
+ runbrowser("file://$cachefile");
+ }
+ }
+ # else we're in online mode
+ elsif ($caching && have_lwp() && $thing ne '') {
+ if (!$hascache) {
+ if (!-d dirname($cachedir)) {
+ unless (make_path(dirname($cachedir))) {
+ warn "$progname: couldn't mkdir "
+ . dirname($cachedir)
+ . ": $!\n";
+ goto LIVE;
+ }
+ }
+ unless (make_path($cachedir)) {
+ warn "$progname: couldn't mkdir $cachedir: $!\n";
+ goto LIVE;
+ }
+ }
+
+ $livedownload = 0;
+ my $live = download($thing, $thgopts, 0, $mboxmode);
+
+ if ($mboxmode) {
+ runmailreader($mboxfile);
+ } else {
+ if (length($live)) {
+ my ($fh, $livefile) = tempfile(
+ "btsXXXXXX",
+ SUFFIX => ".html",
+ DIR => File::Spec->tmpdir,
+ UNLINK => 1
+ );
+
+ # Use filehandle for security
+ open(OUT_LIVE, ">&", $fh)
+ or die "$progname: writing to temporary file: $!\n";
+ # Correct relative urls to point to the bts.
+ $live
+ =~ s%\shref="(?:/cgi(?:-bin)?/)?(\w+\.cgi)% href="$btscgiurl$1%g;
+ print OUT_LIVE $live;
+ # Some browsers don't like unseekable filehandles,
+ # so use filename
+ runbrowser("file://$livefile");
+ } else {
+ runbrowser("file://$cachefile");
+ }
+ }
+ }
+
+ LIVE: # we are not caching; just show it live
+ if ($livedownload) {
+ if ($mboxmode) {
+ # we appear not to be caching; OK, we'll download to a
+ # temporary file
+ warn
+"bts debug: downloading ${btscgiurl}bugreport.cgi?bug=$thing;mbox=yes\n"
+ if $debug;
+ my ($fh, $fn) = download_mbox($thing, 1);
+ runmailreader($fn);
+ } else {
+ if ($thgopts ne '') {
+ my $thingurl = thing_to_url($thing);
+ runbrowser($thingurl . $thgopts);
+ } else {
+ # let the BTS be intelligent
+ runbrowser($btsurl . $thing);
+ }
+ }
+ }
+}
+
+# Removes all files from the cache which were downloaded automatically
+# and have not been accessed for more than 30 days. We also only run
+# this at most once per day for efficiency.
+
+sub prunecache {
+ # TODO: Remove handling of $oldcache post-Stretch
+ my $oldcache = File::Spec->catdir($ENV{HOME}, '.devscripts_cache', 'bts');
+ if (-d $oldcache && !-d $cachedir) {
+ my $err;
+ make_path(dirname($cachedir), { error => \$err });
+ if (!@$err) {
+ system('mv', $oldcache, $cachedir);
+ }
+ }
+ return unless -d $cachedir;
+ return if -f $prunestamp and -M _ < 1;
+
+ my $oldcwd = getcwd;
+
+ chdir($cachedir) || die "$progname: chdir $cachedir: $!\n";
+
+ # remove the now-defunct live-download file
+ unlink "live_download.html";
+
+ opendir DIR, '.' or die "$progname: opendir $cachedir: $!\n";
+ my @cachefiles = grep { !/^\.\.?$/ } readdir(DIR);
+ closedir DIR;
+
+ # Are there any unexpected files lying around?
+ my @known_files = map { basename($_) }
+ ($timestampdb, $timestampdb . ".lock", $prunestamp);
+
+ my %weirdfiles = map { $_ => 1 } grep { !/\.(html|css|png)$/ } @cachefiles;
+ foreach (@known_files) {
+ delete $weirdfiles{$_} if exists $weirdfiles{$_};
+ }
+ # and bug directories
+ foreach (@cachefiles) {
+ if (/^(\d+)\.html$/) {
+ delete $weirdfiles{$1} if exists $weirdfiles{$1} and -d $1;
+ delete $weirdfiles{"$1.mbox"}
+ if exists $weirdfiles{"$1.mbox"} and -f "$1.mbox";
+ delete $weirdfiles{"$1.raw.mbox"}
+ if exists $weirdfiles{"$1.raw.mbox"} and -f "$1.raw.mbox";
+ delete $weirdfiles{"$1.status.mbox"}
+ if exists $weirdfiles{"$1.status.mbox"} and -f "$1.status.mbox";
+ }
+ }
+
+ warn "$progname: unexpected files/dirs in cache directory $cachedir:\n "
+ . join("\n ", keys %weirdfiles) . "\n"
+ if keys %weirdfiles;
+
+ my @oldfiles;
+ foreach (@cachefiles) {
+ next unless /\.(html|css)$/;
+ push @oldfiles, $_ if -A $_ > 30;
+ }
+
+ # We now remove the oldfiles if they're automatically downloaded
+ tie(%timestamp, "Devscripts::DB_File_Lock", $timestampdb,
+ O_RDWR() | O_CREAT(),
+ 0600, $DB_HASH, "write")
+ or die "$progname: couldn't open DB file $timestampdb for writing: $!\n"
+ if !tied %timestamp;
+
+ my @unrecognised;
+ foreach my $oldfile (@oldfiles) {
+ my ($thing, $thgopts) = cachefile_to_thing($oldfile);
+ unless (defined get_timestamp($thing, $thgopts)) {
+ push @unrecognised, $oldfile;
+ next;
+ }
+ next if is_manual(get_timestamp($thing, $thgopts));
+
+ # Otherwise, it's automatic and we purge it
+ deletecache($thing, $thgopts);
+ }
+
+ untie %timestamp;
+
+ if (!-e $prunestamp) {
+ open PRUNESTAMP,
+ ">$prunestamp" || die "$progname: prune timestamp: $!\n";
+ close PRUNESTAMP;
+ }
+ chdir $oldcwd || die "$progname: chdir $oldcwd: $!\n";
+ utime time, time, $prunestamp;
+}
+
+# Determines which browser to use
+sub runbrowser {
+ my $URL = shift;
+
+ if (system('sensible-browser', $URL) >> 8 != 0) {
+ warn "Problem running sensible-browser: $!\n";
+ }
+}
+
+# Determines which mailreader to use
+sub runmailreader {
+ my $file = shift;
+ my $quotedfile;
+ die "$progname: could not read mbox file $file!\n" unless -r $file;
+
+ if ($file !~ /\'/) { $quotedfile = qq['$file']; }
+ elsif ($file !~ /[\"\\\$\'\!]/) { $quotedfile = qq["$file"]; }
+ else {
+ die
+"$progname: could not figure out how to quote the mbox filename \"$file\"\n";
+ }
+
+ my $reader = $mailreader;
+ $reader =~ s/\%([%s])/$1 eq '%' ? '%' : $quotedfile/eg;
+
+ if (system($reader) >> 8 != 0) {
+ warn "Problem running mail reader: $!\n";
+ }
+}
+
+# Timestamp handling
+#
+# We store a +ve timestamp to represent an automatic download and
+# a -ve one to represent a manual download.
+
+sub get_timestamp {
+ my $thing = shift;
+ my $thgopts = shift || '';
+ my $timestamp = undef;
+ my $versionstamp = undef;
+
+ if (tied %timestamp) {
+ ($timestamp, $versionstamp) = split /;/,
+ $timestamp{ $thing . $thgopts }
+ if exists $timestamp{ $thing . $thgopts };
+ } else {
+ tie(%timestamp, "Devscripts::DB_File_Lock", $timestampdb,
+ O_RDONLY(), 0600, $DB_HASH, "read")
+ or die
+ "$progname: couldn't open DB file $timestampdb for reading: $!\n";
+
+ ($timestamp, $versionstamp) = split /;/,
+ $timestamp{ $thing . $thgopts }
+ if exists $timestamp{ $thing . $thgopts };
+
+ untie %timestamp;
+ }
+
+ return wantarray ? ($timestamp, $versionstamp) : $timestamp;
+}
+
+sub set_timestamp {
+ my $thing = shift;
+ my $thgopts = shift || '';
+ my $timestamp = shift;
+ my $versionstamp = shift || $version;
+
+ if (tied %timestamp) {
+ $timestamp{ $thing . $thgopts } = "$timestamp;$versionstamp";
+ } else {
+ tie(%timestamp, "Devscripts::DB_File_Lock", $timestampdb,
+ O_RDWR() | O_CREAT(),
+ 0600, $DB_HASH, "write")
+ or die
+ "$progname: couldn't open DB file $timestampdb for writing: $!\n";
+
+ $timestamp{ $thing . $thgopts } = "$timestamp;$versionstamp";
+
+ untie %timestamp;
+ }
+}
+
+sub delete_timestamp {
+ my $thing = shift;
+ my $thgopts = shift || '';
+
+ if (tied %timestamp) {
+ delete $timestamp{ $thing . $thgopts };
+ } else {
+ tie(%timestamp, "Devscripts::DB_File_Lock", $timestampdb,
+ O_RDWR() | O_CREAT(),
+ 0600, $DB_HASH, "write")
+ or die
+ "$progname: couldn't open DB file $timestampdb for writing: $!\n";
+
+ delete $timestamp{ $thing . $thgopts };
+
+ untie %timestamp;
+ }
+}
+
+sub is_manual {
+ return $_[0] < 0;
+}
+
+sub make_manual {
+ return -abs($_[0]);
+}
+
+sub is_automatic {
+ return $_[0] > 0;
+}
+
+sub make_automatic {
+ return abs($_[0]);
+}
+
+# Returns true if current cached version is older than critical version
+# We're only using really simple version numbers here: a.b.c
+sub old_cache_format_version {
+ my $cacheversion = $_[0];
+
+ my @cache = split /\./, $cacheversion;
+ my @new = split /\./, $new_cache_format_version;
+
+ push @cache, 0, 0, 0, 0;
+ push @new, 0, 0;
+
+ return
+ ($cache[0] < $new[0])
+ || ($cache[0] == $new[0] && $cache[1] < $new[1])
+ || ($cache[0] == $new[0] && $cache[1] == $new[1] && $cache[2] < $new[2])
+ || ( $cache[0] == $new[0]
+ && $cache[1] == $new[1]
+ && $cache[2] == $new[2]
+ && $cache[3] < $new[3]);
+}
+
+# We would love to use LWP::Simple::mirror in this script.
+# Unfortunately, bugs.debian.org does not respect the
+# If-Modified-Since header. For single bug reports, however,
+# bugreport.cgi will return a Last-Modified header if sent a HEAD
+# request. So this is a hack, based on code from the LWP modules. :-(
+# Return value:
+# (return value, error string)
+# with return values: MIRROR_ERROR failed
+# MIRROR_DOWNLOADED downloaded new version
+# MIRROR_UP_TO_DATE up-to-date
+
+sub bts_mirror {
+ my ($url, $timestamp, $force) = @_;
+
+ init_agent() unless $ua;
+ if ($url =~ m%/\d+$% and !$refreshmode and !$force) {
+ # Single bug, worth doing timestamp checks
+ my $request = HTTP::Request->new('HEAD', $url);
+ my $response = $ua->request($request);
+
+ if ($response->is_success) {
+ my $lm = $response->last_modified;
+ if (defined $lm and $lm <= abs($timestamp)) {
+ return (MIRROR_UP_TO_DATE, $response->status_line);
+ }
+ } else {
+ return (MIRROR_ERROR, $response->status_line);
+ }
+ }
+
+ # So now we download the full thing regardless
+ # We don't care if we scotch the contents of $file - it's only
+ # a temporary file anyway
+ my $request = HTTP::Request->new('GET', $url);
+ my $response = $ua->request($request);
+
+ if ($response->is_success) {
+ # This check from LWP::UserAgent; I don't even know whether
+ # the BTS sends a Content-Length header...
+ my $nominal_content_length = $response->content_length || 0;
+ my $true_content_length
+ = defined $response->content ? length($response->content) : 0;
+ if ($true_content_length == 0) {
+ return (MIRROR_ERROR, $response->status_line);
+ }
+ if ($nominal_content_length > 0) {
+ if ($true_content_length < $nominal_content_length) {
+ return (MIRROR_ERROR,
+"Transfer truncated: only $true_content_length out of $nominal_content_length bytes received"
+ );
+ }
+ if ($true_content_length > $nominal_content_length) {
+ return (MIRROR_ERROR,
+"Content-length mismatch: expected $nominal_content_length bytes, got $true_content_length"
+ );
+ }
+ # else OK
+ }
+
+ return (
+ MIRROR_DOWNLOADED, $response->status_line,
+ $response->content, $response->header('Content-Type'));
+ } else {
+ return (MIRROR_ERROR, $response->status_line);
+ }
+}
+
+sub init_agent {
+ $ua = new LWP::UserAgent; # we create a global UserAgent object
+ $ua->agent("LWP::UserAgent/Devscripts/$version");
+ $ua->env_proxy;
+}
+
+sub opts_done {
+ if (@_) {
+ die "$progname: unknown options to '$command[$index]': @_\n";
+ }
+}
+
+sub edit {
+ my $message = shift;
+ my ($fh, $filename);
+ ($fh, $filename) = tempfile(
+ "btsXXXX",
+ SUFFIX => ".mail",
+ DIR => File::Spec->tmpdir
+ );
+ open(OUT_MAIL, ">$filename")
+ or die "$progname: writing to temporary file: $!\n";
+ print OUT_MAIL $message;
+ close OUT_MAIL;
+ my $rc = system("sensible-editor $filename");
+ undef $message;
+
+ if ($rc == 0) {
+ open(OUT_MAIL, "<$filename")
+ or die "$progname: reading from temporary file: $!\n";
+ while (<OUT_MAIL>) {
+ $message .= $_;
+ }
+ close OUT_MAIL;
+ }
+ unlink($filename);
+ return $message;
+}
+
+=back
+
+=head1 ENVIRONMENT VARIABLES
+
+=over 4
+
+=item B<DEBEMAIL>
+
+If this is set, the From: line in the email will be set to use this email
+address instead of your normal email address (as would be determined by
+B<mail>).
+
+=item B<DEBFULLNAME>
+
+If B<DEBEMAIL> is set, B<DEBFULLNAME> is examined to determine the full name
+to use; if this is not set, B<bts> attempts to determine a name from
+your F<passwd> entry.
+
+=item B<BROWSER>
+
+If set, it specifies the browser to use for the B<show> and B<bugs>
+options. See the description above.
+
+=back
+
+=head1 CONFIGURATION VARIABLES
+
+The two configuration files F</etc/devscripts.conf> and
+F<~/.devscripts> are sourced by a shell in that order to set
+configuration variables. Command line options can be used to override
+configuration file settings. Environment variable settings are
+ignored for this purpose. The currently recognised variables are:
+
+=over 4
+
+=item B<BTS_OFFLINE>
+
+If this is set to B<yes>, then it is the same as the B<--offline> command
+line parameter being used. Only has an effect on the B<show> and B<bugs>
+commands. The default is B<no>. See the description of the B<show>
+command above for more information.
+
+=item B<BTS_CACHE>
+
+If this is set to B<no>, then it is the same as the B<--no-cache> command
+line parameter being used. Only has an effect on the B<show> and B<bug>
+commands. The default is B<yes>. Again, see the B<show> command above
+for more information.
+
+=item B<BTS_CACHE_MODE=>{B<min>,B<mbox>,B<full>}
+
+How much of the BTS should we mirror when we are asked to cache something?
+Just the minimum, or also the mbox or the whole thing? The default is
+B<min>, and it has the same meaning as the B<--cache-mode> command line
+parameter. Only has an effect on the cache. See the B<cache> command for more
+information.
+
+=item B<BTS_FORCE_REFRESH>
+
+If this is set to B<yes>, then it is the same as the B<--force-refresh>
+command line parameter being used. Only has an effect on the B<cache>
+command. The default is B<no>. See the B<cache> command for more
+information.
+
+=item B<BTS_MAIL_READER>
+
+If this is set, specifies a mail reader to use instead of B<mutt>. Same as
+the B<--mailreader> command line option.
+
+=item B<BTS_SENDMAIL_COMMAND>
+
+If this is set, specifies a B<sendmail> command to use instead of
+F</usr/sbin/sendmail>. Same as the B<--sendmail> command line option.
+
+=item B<BTS_ONLY_NEW>
+
+Download only new bugs when caching. Do not check for updates in
+bugs we already have. The default is B<no>. Same as the B<--only-new>
+command line option.
+
+=item B<BTS_SMTP_HOST>
+
+If this is set, specifies an SMTP host to use for sending mail rather
+than using the B<sendmail> command. Same as the B<--smtp-host> command line
+option.
+
+Note that this option takes priority over B<BTS_SENDMAIL_COMMAND> if both are
+set, unless the B<--sendmail> option is used.
+
+=item B<BTS_SMTP_AUTH_USERNAME>, B<BTS_SMTP_AUTH_PASSWORD>
+
+If these options are set, then it is the same as the B<--smtp-username> and
+B<--smtp-password> options being used.
+
+=item B<BTS_SMTP_HELO>
+
+Same as the B<--smtp-helo> command line option.
+
+=item B<BTS_INCLUDE_RESOLVED>
+
+If this is set to B<no>, then it is the same as the B<--no-include-resolved>
+command line parameter being used. Only has an effect on the B<cache>
+command. The default is B<yes>. See the B<cache> command for more
+information.
+
+=item B<BTS_SUPPRESS_ACKS>
+
+If this is set to B<yes>, then it is the same as the B<--no-ack> command
+line parameter being used. The default is B<no>.
+
+=item B<BTS_INTERACTIVE>
+
+If this is set to B<yes> or B<force>, then it is the same as the
+B<--interactive> or B<--force-interactive> command line parameter being used.
+The default is B<no>.
+
+=item B<BTS_DEFAULT_CC>
+
+Specify a list of e-mail addresses to which a carbon copy of the generated
+e-mail to the control bot should automatically be sent.
+
+=item B<BTS_SERVER>
+
+Specify the name of a debbugs server which should be used instead of
+https://bugs.debian.org.
+
+=back
+
+=head1 SEE ALSO
+
+Please see L<https://www.debian.org/Bugs/server-control> for
+more details on how to control the BTS using emails and
+L<https://www.debian.org/Bugs/> for more information about the BTS.
+
+querybts(1), reportbug(1), pts-subscribe(1), devscripts.conf(5)
+
+=head1 COPYRIGHT
+
+This program is Copyright (C) 2001-2003 by Joey Hess <joeyh@debian.org>.
+Many modifications have been made, Copyright (C) 2002-2005 Julian
+Gilbey <jdg@debian.org> and Copyright (C) 2007 Josh Triplett
+<josh@freedesktop.org>.
+
+It is licensed under the terms of the GPL, either version 2 of the
+License, or (at your option) any later version.
+
+=cut
+
+# Please leave this alone unless you understand the seek above.
+__DATA__
diff --git a/scripts/build-rdeps.pl b/scripts/build-rdeps.pl
new file mode 100755
index 0000000..85142bf
--- /dev/null
+++ b/scripts/build-rdeps.pl
@@ -0,0 +1,551 @@
+#!/usr/bin/perl
+# -*- tab-width: 4; indent-tabs-mode: t; cperl-indent-level: 4 -*-
+# vim: set ai shiftwidth=4 tabstop=4 expandtab:
+# Copyright (C) Patrick Schoenfeld
+# 2015 Johannes Schauer Marin Rodrigues <josch@debian.org>
+# 2017 James McCoy <jamessan@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+=head1 NAME
+
+build-rdeps - find packages that depend on a specific package to build (reverse build depends)
+
+=head1 SYNOPSIS
+
+B<build-rdeps> I<package>
+
+=head1 DESCRIPTION
+
+B<build-rdeps> searches for all packages that build-depend on the specified package.
+
+The default behaviour is to just `grep` for the given dependency in the
+Build-Depends field of apt's Sources files.
+
+If the package dose-extra >= 4.0 is installed, then a more complete reverse
+build dependency computation is carried out. In particular, with that package
+installed, build-rdeps will find transitive reverse dependencies, respect
+architecture and build profile restrictions, take Provides relationships,
+Conflicts, Pre-Depends, Build-Depends-Arch and versioned dependencies into
+account and correctly resolve multiarch relationships for crossbuild reverse
+dependency resolution. (This tends to be a slow process due to the complexity
+of the package interdependencies.)
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-u>, B<--update>
+
+Run apt-get update before searching for build-depends.
+
+=item B<-s>, B<--sudo>
+
+Use sudo when running apt-get update. Has no effect if -u is omitted.
+
+=item B<--distribution>
+
+Select another distribution, which is searched for build-depends.
+
+=item B<--only-main>
+
+Ignore contrib and non-free
+
+=item B<--exclude-component>
+
+Ignore the given component (e.g. main, contrib, non-free).
+
+=item B<--origin>
+
+Restrict the search to only the specified origin (such as "Debian").
+
+=item B<-m>, B<--print-maintainer>
+
+Print the value of the maintainer field for each package.
+
+=item B<--host-arch>
+
+Explicitly set the host architecture. The default is the value of
+`dpkg-architecture -qDEB_HOST_ARCH`. This option only works if dose-extra >=
+4.0 is installed.
+
+=item B<--build-arch>
+
+Explicitly set the build architecture. The default is the value of
+`dpkg-architecture -qDEB_BUILD_ARCH`. This option only works if dose-extra >=
+4.0 is installed.
+
+=item B<--no-arch-all>, B<--no-arch-any>
+
+Ignore Build-Depends-Indep or Build-Depends-Arch while looking for reverse
+dependencies.
+
+=item B<--old>
+
+Force the old simple behaviour without dose-ceve support even if dose-extra >=
+4.0 is installed. (This tends to be faster.)
+
+Notice, that the old behaviour only finds direct dependencies, ignores virtual
+dependencies, does not find transitive dependencies and does not take version
+relationships, architecture restrictions, build profiles or multiarch
+relationships into account.
+
+=item B<-q>, B<--quiet>
+
+Don't print meta information (header, counter). Making it easier to use in
+scripts.
+
+=item B<-d>, B<--debug>
+
+Run the debug mode
+
+=item B<--help>
+
+Show the usage information.
+
+=item B<--version>
+
+Show the version information.
+
+=back
+
+=head1 REQUIREMENTS
+
+The tool requires apt Sources files to be around for the checked components.
+In the default case this means that in /var/lib/apt/lists files need to be
+around for main, contrib and non-free.
+
+In practice this means one needs to add one deb-src line for each component,
+e.g.
+
+deb-src http://<mirror>/debian <dist> main contrib non-free
+
+and run apt-get update afterwards or use the update option of this tool.
+
+=cut
+
+use warnings;
+use strict;
+use File::Basename;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+
+use Dpkg::Control;
+use Dpkg::Vendor qw(get_current_vendor);
+
+my $progname = basename($0);
+my $version = '1.0';
+my $use_ceve = 0;
+my $ceve_compatible;
+my $opt_debug;
+my $opt_update;
+my $opt_sudo;
+my $opt_maintainer;
+my $opt_mainonly;
+my $opt_distribution;
+my $opt_origin = 'Debian';
+my @opt_exclude_components;
+my $opt_buildarch;
+my $opt_hostarch;
+my $opt_without_ceve;
+my $opt_quiet;
+my $opt_noarchall;
+my $opt_noarchany;
+
+sub version {
+ print <<"EOT";
+This is $progname $version, from the Debian devscripts package, v. ###VERSION###
+This code is copyright by Patrick Schoenfeld, all rights reserved.
+It comes with ABSOLUTELY NO WARRANTY. You are free to redistribute this code
+under the terms of the GNU General Public License, version 2 or later.
+EOT
+ exit(0);
+}
+
+sub usage {
+ print <<"EOT";
+usage: $progname packagename
+ $progname --help
+ $progname --version
+
+Searches for all packages that build-depend on the specified package.
+
+Options:
+ -u, --update Run apt-get update before searching for build-depends.
+ (needs root privileges)
+ -s, --sudo Use sudo when running apt-get update
+ (has no effect when -u is omitted)
+ -q, --quiet Don't print meta information
+ -d, --debug Enable the debug mode
+ -m, --print-maintainer Print the maintainer information (experimental)
+ --distribution distribution Select a distribution to search for build-depends
+ (Default: unstable)
+ --origin origin Select an origin to search for build-depends
+ (Default: Debian)
+ --only-main Ignore contrib and non-free
+ --exclude-component COMPONENT Ignore the specified component (can be given multiple times)
+ --host-arch Set the host architecture (requires dose-extra >= 4.0)
+ --build-arch Set the build architecture (requires dose-extra >= 4.0)
+ --no-arch-all Ignore Build-Depends-Indep
+ --no-arch-any Ignore Build-Depends-Arch
+ --old Use the old simple reverse dependency resolution
+
+EOT
+ version;
+}
+
+sub test_ceve {
+ return $ceve_compatible if defined $ceve_compatible;
+
+ # test if the debsrc input and output format is supported by the installed
+ # ceve version
+ system('dose-ceve -T debsrc debsrc:///dev/null > /dev/null 2>&1');
+ if ($? == -1) {
+ print STDERR "DEBUG: dose-ceve cannot be executed: $!\n"
+ if ($opt_debug);
+ $ceve_compatible = 0;
+ } elsif ($? == 0) {
+ $ceve_compatible = 1;
+ } else {
+ print STDERR "DEBUG: dose-ceve is too old\n" if ($opt_debug);
+ $ceve_compatible = 0;
+ }
+ return $ceve_compatible;
+}
+
+sub is_devel_release {
+ my $ctrl = shift;
+ if (get_current_vendor() eq 'Debian') {
+ return $ctrl->{Suite} eq 'unstable' || $ctrl->{Codename} eq 'sid';
+ } else {
+ return $ctrl->{Suite} eq 'devel';
+ }
+}
+
+sub indextargets {
+ my @cmd = ('apt-get', 'indextargets', 'DefaultEnabled: yes');
+
+ if (!$use_ceve) {
+ # ceve needs both Packages and Sources
+ push(@cmd, 'Created-By: Sources');
+ }
+
+ if ($opt_origin) {
+ push(@cmd, "Origin: $opt_origin");
+ }
+
+ if ($opt_mainonly) {
+ push(@cmd, 'Component: main');
+ }
+
+ print STDERR 'DEBUG: Running ' . join(' ', map { "'$_'" } @cmd) . "\n"
+ if $opt_debug;
+ return @cmd;
+}
+
+# Gather information about the available package/source lists.
+#
+# Returns a hash reference following this structure:
+#
+# <site> => {
+# <suite> => {
+# <component> => {
+# sources => $src_fname,
+# <arch1> => $arch1_fname,
+# ...,
+# },
+# },
+# ...,
+sub collect_files {
+ my %info = ();
+
+ open(my $targets, '-|', indextargets());
+
+ until (eof $targets) {
+ my $ctrl = Dpkg::Control->new(type => CTRL_UNKNOWN);
+ if (!$ctrl->parse($targets, 'apt-get indextargets')) {
+ next;
+ }
+ # Only need Sources/Packages stanzas
+ if ( $ctrl->{'Created-By'} ne 'Packages'
+ && $ctrl->{'Created-By'} ne 'Sources') {
+ next;
+ }
+
+ # In expected components
+ if ( !$opt_mainonly
+ && exists $ctrl->{Component}
+ && @opt_exclude_components) {
+ my $invalid_component = '(?:'
+ . join('|', map { "\Q$_\E" } @opt_exclude_components) . ')';
+ if ($ctrl->{Component} =~ m/$invalid_component/) {
+ next;
+ }
+ }
+
+ # And the provided distribution
+ if ($opt_distribution) {
+ if ( $ctrl->{Suite} !~ m/\Q$opt_distribution\E/
+ && $ctrl->{Codename} !~ m/\Q$opt_distribution\E/) {
+ next;
+ }
+ } elsif (!is_devel_release($ctrl)) {
+ next;
+ }
+
+ $info{ $ctrl->{Site} }{ $ctrl->{Suite} }{ $ctrl->{Component} } ||= {};
+ my $ref
+ = $info{ $ctrl->{Site} }{ $ctrl->{Suite} }{ $ctrl->{Component} };
+
+ if ($ctrl->{'Created-By'} eq 'Sources') {
+ $ref->{sources} = $ctrl->{Filename};
+ print STDERR "DEBUG: Added source file: $ctrl->{Filename}\n"
+ if $opt_debug;
+ } else {
+ $ref->{ $ctrl->{Architecture} } = $ctrl->{Filename};
+ }
+ }
+ close($targets);
+
+ return \%info;
+}
+
+sub findreversebuilddeps {
+ my ($package, $info) = @_;
+ my $count = 0;
+
+ my $source_file = $info->{sources};
+ if ($use_ceve) {
+ die "build arch undefined" if !defined $opt_buildarch;
+ die "host arch undefined" if !defined $opt_hostarch;
+
+ my $buildarch_file = $info->{$opt_buildarch};
+ my $hostarch_file = $info->{$opt_hostarch};
+
+ my @ceve_cmd = (
+ 'dose-ceve', '-T',
+ 'debsrc', '-r',
+ $package, '-G',
+ 'pkg', "--deb-native-arch=$opt_buildarch",
+ "deb://$buildarch_file", "debsrc://$source_file"
+ );
+ if ($opt_buildarch ne $opt_hostarch) {
+ push(@ceve_cmd,
+ "--deb-host-arch=$opt_hostarch",
+ "deb://$hostarch_file");
+ }
+ push(@ceve_cmd, "--deb-drop-b-d-indep") if ($opt_noarchall);
+ push(@ceve_cmd, "--deb-drop-b-d-arch") if ($opt_noarchany);
+ my %sources;
+ print STDERR 'DEBUG: executing: ' . join(' ', @ceve_cmd)
+ if ($opt_debug);
+ open(SOURCES, '-|', @ceve_cmd);
+ while (<SOURCES>) {
+ next unless s/^Package:\s+//;
+ chomp;
+ $sources{$_} = 1;
+ }
+ for my $source (sort keys %sources) {
+ print $source;
+ if ($opt_maintainer) {
+ my $maintainer
+ = `apt-cache showsrc $source | grep-dctrl -n -s Maintainer '' | sort -u`;
+ print " ($maintainer)";
+ }
+ print "\n";
+ $count += 1;
+ }
+ } else {
+ open(my $out, '-|', '/usr/lib/apt/apt-helper', 'cat-file',
+ $source_file)
+ or die
+"$progname: Unable to run \"apt-helper cat-file '$source_file'\": $!";
+
+ my %packages;
+ until (eof $out) {
+ my $ctrl = Dpkg::Control->new(type => CTRL_INDEX_SRC);
+ if (!$ctrl->parse($out, 'apt-helper cat-file')) {
+ next;
+ }
+ print STDERR "$ctrl\n" if ($opt_debug);
+ for my $relation (
+ qw(Build-Depends Build-Depends-Indep Build-Depends-Arch)) {
+ if (exists $ctrl->{$relation}) {
+ if ($ctrl->{$relation}
+ =~ m/^(.*\s)?\Q$package\E(?::[a-zA-Z0-9][a-zA-Z0-9-]*)?([\s,]|$)/
+ ) {
+ $packages{ $ctrl->{Package} }{Maintainer}
+ = $ctrl->{Maintainer};
+ }
+ }
+ }
+ }
+
+ close($out);
+
+ while (my $depending_package = each(%packages)) {
+ print $depending_package;
+ if ($opt_maintainer) {
+ print " ($packages{$depending_package}->{'Maintainer'})";
+ }
+ print "\n";
+ $count += 1;
+ }
+ }
+
+ if (!$opt_quiet) {
+ if ($count == 0) {
+ print "No reverse build-depends found for $package.\n\n";
+ } else {
+ print
+"\nFound a total of $count reverse build-depend(s) for $package.\n\n";
+ }
+ }
+}
+
+if ($#ARGV < 0) { usage; exit(0); }
+
+GetOptions(
+ "u|update" => \$opt_update,
+ "s|sudo" => \$opt_sudo,
+ "m|print-maintainer" => \$opt_maintainer,
+ "distribution=s" => \$opt_distribution,
+ "only-main" => \$opt_mainonly,
+ "exclude-component=s" => \@opt_exclude_components,
+ "origin=s" => \$opt_origin,
+ "host-arch=s" => \$opt_hostarch,
+ "build-arch=s" => \$opt_buildarch,
+ "no-arch-all" => \$opt_noarchall,
+ "no-arch-any" => \$opt_noarchany,
+ # "profiles=s" => \$opt_profiles, # FIXME: add build profile support
+ # once dose-ceve has a
+ # --deb-profiles option
+ "old" => \$opt_without_ceve,
+ "q|quiet" => \$opt_quiet,
+ "d|debug" => \$opt_debug,
+ "h|help" => sub { usage; },
+ "v|version" => sub { version; }) or do { usage; exit 1; };
+
+my $package = shift;
+
+if (!$package) {
+ die "$progname: missing argument. expecting packagename\n";
+}
+
+print STDERR "DEBUG: Package => $package\n" if ($opt_debug);
+
+if ($opt_hostarch) {
+ if ($opt_without_ceve) {
+ die
+"$progname: the --host-arch option cannot be used together with --old\n";
+ }
+ if (test_ceve()) {
+ $use_ceve = 1;
+ } else {
+ die
+"$progname: the --host-arch option requires dose-extra >= 4.0 to be installed\n";
+ }
+}
+
+if ($opt_buildarch) {
+ if ($opt_without_ceve) {
+ die
+"$progname: the --build-arch option cannot be used together with --old\n";
+ }
+ if (test_ceve()) {
+ $use_ceve = 1;
+ } else {
+ die
+"$progname: the --build-arch option requires dose-extra >= 4.0 to be installed\n";
+ }
+}
+
+# if ceve usage has not been activated yet, check if it can be activated
+if (!$use_ceve and !$opt_without_ceve) {
+ if (test_ceve()) {
+ $use_ceve = 1;
+ } else {
+ print STDERR
+"WARNING: dose-extra >= 4.0 is not installed. Falling back to old unreliable behaviour.\n";
+ }
+}
+
+if ($use_ceve) {
+ if (system('command -v grep-dctrl >/dev/null 2>&1')) {
+ die
+"$progname: Fatal error. grep-dctrl is not available.\nPlease install the 'dctrl-tools' package.\n";
+ }
+
+ # set hostarch and buildarch if they have not been set yet
+ if (!$opt_hostarch) {
+ $opt_hostarch = `dpkg-architecture --query DEB_HOST_ARCH`;
+ chomp $opt_hostarch;
+ }
+ if (!$opt_buildarch) {
+ $opt_buildarch = `dpkg-architecture --query DEB_BUILD_ARCH`;
+ chomp $opt_buildarch;
+ }
+ print STDERR "DEBUG: running with dose-ceve resolver\n" if ($opt_debug);
+ print STDERR "DEBUG: buildarch=$opt_buildarch hostarch=$opt_hostarch\n"
+ if ($opt_debug);
+} else {
+ print STDERR "DEBUG: running with old resolver\n" if ($opt_debug);
+}
+
+if ($opt_update) {
+ print STDERR "DEBUG: Updating apt-cache before search\n" if ($opt_debug);
+ my @cmd;
+ if ($opt_sudo) {
+ print STDERR "DEBUG: Using sudo to become root\n" if ($opt_debug);
+ push(@cmd, 'sudo');
+ }
+ push(@cmd, 'apt-get', 'update');
+ system @cmd;
+}
+
+my $file_info = collect_files();
+
+if (!%{$file_info}) {
+ die
+"$progname: unable to find sources files.\nDid you forget to run apt-get update (or add --update to this command)?";
+}
+
+foreach my $site (sort keys %{$file_info}) {
+ foreach my $suite (sort keys %{ $file_info->{$site} }) {
+ foreach my $comp (qw(main contrib non-free)) {
+ if (exists $file_info->{$site}{$suite}{$comp}) {
+ if (!$opt_quiet) {
+ print "Reverse Build-depends in ${comp}:\n";
+ print "------------------------------\n\n";
+ }
+ findreversebuilddeps($package,
+ $file_info->{$site}{$suite}{$comp});
+ }
+ }
+ }
+}
+
+=head1 LICENSE
+
+This code is copyright by Patrick Schoenfeld
+<schoenfeld@debian.org>, all rights reserved.
+This program comes with ABSOLUTELEY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+
+=head1 AUTHOR
+
+Patrick Schoenfeld <schoenfeld@debian.org>
+
+=cut
diff --git a/scripts/chdist.bash_completion b/scripts/chdist.bash_completion
new file mode 100644
index 0000000..51dbf49
--- /dev/null
+++ b/scripts/chdist.bash_completion
@@ -0,0 +1,60 @@
+# /usr/share/bash-completion/completions/chdist
+# Bash command completion for ‘chdist(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+_chdist ()
+{
+ local cur=$2 prev=$3
+ local options='--help -h --data-dir -d --arch -a'
+ local commands='create apt apt-get apt-cache apt-rdepends aptitude
+ src2bin bin2src
+ compare-packages compare-bin-packages
+ compare-versions compare-bin-versions
+ grep-dctrl-packages grep-dctrl-sources
+ list'
+ # Sync'd with buildd.debian.org on 2016-04-02:
+ local archs="all alpha amd64 arm64 armel armhf hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 m68k mips mips64el mipsel powerpc powerpcspe ppc64 ppc64el s390 s390x sh4 sparc sparc64 x32"
+ local dists=$(ls ~/.chdist 2>/dev/null)
+
+ COMPREPLY=()
+
+
+ case "$prev" in
+ -@(-arch|a))
+ COMPREPLY=( $( compgen -W "$archs" -- $cur ) )
+ return 0
+ ;;
+ -@(-data-dir|d))
+ _filedir
+ return 0
+ ;;
+ -@(-help|h)|list)
+ return 0
+ ;;
+ create|apt|apt-get|apt-cache|apt-rdepends|aptitude|src2bin|bin2src|compare-packages|compare-bin-packages|compare-versions|compare-bin-versions|grep-dctrl-packages|grep-dctrl-sources)
+ COMPREPLY=( $( compgen -W "$dists" -- $cur ) )
+ return 0
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ # return one of the possible options
+ COMPREPLY=( $( compgen -W "$options" -- $cur ) )
+ else
+ # return one of the possible commands
+ COMPREPLY=( $( compgen -W "$commands" -- $cur ) )
+ fi
+
+ return 0
+
+}
+
+
+complete -F _chdist chdist
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/chdist.pl b/scripts/chdist.pl
new file mode 100755
index 0000000..39f14d7
--- /dev/null
+++ b/scripts/chdist.pl
@@ -0,0 +1,778 @@
+#!/usr/bin/perl
+
+# Debian GNU/Linux chdist. Copyright (C) 2007 Lucas Nussbaum and Luk Claes.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+=head1 NAME
+
+chdist - script to easily play with several distributions
+
+=head1 SYNOPSIS
+
+B<chdist> [I<options>] [I<command>] [I<command parameters>]
+
+=head1 DESCRIPTION
+
+B<chdist> is a rewrite of what used to be known as 'MultiDistroTools'
+(or mdt). Its use is to create 'APT trees' for several distributions,
+making it easy to query the status of packages in other distribution
+without using chroots, for instance.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-h>, B<--help>
+
+Provide a usage message.
+
+=item B<-d>, B<--data-dir> I<DIR>
+
+Choose data directory (default: F<~/.chdist/>).
+
+=item B<-a>, B<--arch> I<ARCH>
+
+Choose architecture (default: `B<dpkg --print-architecture>`).
+
+=item B<--version>
+
+Display version information.
+
+=back
+
+=head1 COMMANDS
+
+=over 4
+
+=item B<create> I<DIST> [I<URL> I<RELEASE> I<SECTIONS>]
+
+Prepare a new tree named I<DIST>
+
+=item B<apt> I<DIST> <B<update>|B<source>|B<show>|B<showsrc>|...>
+
+Run B<apt> inside I<DIST>
+
+=item B<apt-get> I<DIST> <B<update>|B<source>|...>
+
+Run B<apt-get> inside I<DIST>
+
+=item B<apt-cache> I<DIST> <B<show>|B<showsrc>|...>
+
+Run B<apt-cache> inside I<DIST>
+
+=item B<apt-file> I<DIST> <B<update>|B<search>|...>
+
+Run B<apt-file> inside I<DIST>
+
+=item B<apt-rdepends> I<DIST> [...]
+
+Run B<apt-rdepends> inside I<DIST>
+
+=item B<aptitude> I<DIST> [...]
+
+Run B<aptitude> inside I<DIST>
+
+=item B<src2bin> I<DIST SRCPKG>
+
+List binary packages for I<SRCPKG> in I<DIST>
+
+=item B<bin2src> I<DIST BINPKG>
+
+List source package for I<BINPKG> in I<DIST>
+
+=item B<compare-packages> I<DIST1 DIST2> [I<DIST3>, ...]
+
+=item B<compare-bin-packages> I<DIST1 DIST2> [I<DIST3>, ...]
+
+List versions of packages in several I<DIST>ributions
+
+=item B<compare-versions> I<DIST1 DIST2>
+
+=item B<compare-bin-versions> I<DIST1 DIST2>
+
+Same as B<compare-packages>/B<compare-bin-packages>, but also runs
+B<dpkg --compare-versions> and display where the package is newer.
+
+=item B<compare-src-bin-packages> I<DIST>
+
+Compare sources and binaries for I<DIST>
+
+=item B<compare-src-bin-versions> I<DIST>
+
+Same as B<compare-src-bin-packages>, but also run B<dpkg --compare-versions>
+and display where the package is newer
+
+=item B<grep-dctrl-packages> I<DIST> [...]
+
+Run B<grep-dctrl> on F<*_Packages> inside I<DIST>
+
+=item B<grep-dctrl-sources> I<DIST> [...]
+
+Run B<grep-dctrl> on F<*_Sources> inside I<DIST>
+
+=item B<list>
+
+List available I<DIST>s
+
+=back
+
+=head1 COPYRIGHT
+
+This program is copyright 2007 by Lucas Nussbaum and Luk Claes. This
+program comes with ABSOLUTELY NO WARRANTY.
+
+It is licensed under the terms of the GPL, either version 2 of the
+License, or (at your option) any later version.
+
+=cut
+
+use strict;
+use warnings;
+no if $] >= 5.018, 'warnings', 'experimental::smartmatch';
+use feature 'switch';
+use File::Copy qw(cp);
+use File::HomeDir;
+use File::Path qw(make_path);
+use File::Basename;
+use Getopt::Long qw(:config gnu_compat bundling require_order);
+use Cwd qw(abs_path cwd);
+use Dpkg::Version qw(version_compare);
+use Pod::Usage;
+
+# Redefine Pod::Text's cmd_i so pod2usage converts I<...> to <...> instead of
+# *...*
+{
+
+ package Pod::Text;
+ no warnings qw(redefine);
+
+ sub cmd_i { '<' . $_[2] . '>' }
+}
+
+my $progname = basename($0);
+
+sub usage {
+ pod2usage(
+ -verbose => 99,
+ -exitval => $_[0],
+ -sections => 'SYNOPSIS|OPTIONS|ARGUMENTS|COMMANDS'
+ );
+}
+
+# specify the options we accept and initialize
+# the option parser
+my $help = '';
+
+my $version = '';
+my $versioninfo = <<"EOF";
+This is $progname, from the Debian devscripts package, version
+###VERSION### This code is copyright 2007 by Lucas Nussbaum and Luk
+Claes. This program comes with ABSOLUTELY NO WARRANTY. You are free
+to redistribute this code under the terms of the GNU General Public
+License, version 2 or (at your option) any later version.
+EOF
+
+my $arch;
+my $datadir = File::HomeDir->my_home . '/.chdist';
+
+GetOptions(
+ "h|help" => \$help,
+ "d|data-dir=s" => \$datadir,
+ "a|arch=s" => \$arch,
+ "version" => \$version,
+) or usage(1);
+
+# Fix-up relative paths
+$datadir = cwd() . "/$datadir" if $datadir !~ m!^/!;
+$datadir = abs_path($datadir);
+
+if ($help) {
+ usage(0);
+}
+
+if ($version) {
+ print $versioninfo;
+ exit 0;
+}
+
+########################################################
+### Functions
+########################################################
+
+sub fatal {
+ my ($msg) = @_;
+ $msg =~ s/\n?$/\n/;
+ print STDERR "$progname: $msg";
+ exit 1;
+}
+
+sub uniq (@) {
+ my %hash;
+ map { $hash{$_}++ == 0 ? $_ : () } @_;
+}
+
+sub dist_check {
+ # Check that dist exists in $datadir
+ my ($dist) = @_;
+ if ($dist) {
+ my $dir = "$datadir/$dist";
+ return 0 if (-d $dir);
+ fatal(
+"Could not find $dist in $datadir. Run `$progname create $dist` first."
+ );
+ } else {
+ fatal('No dist provided.');
+ }
+}
+
+sub type_check {
+ my ($type) = @_;
+ if (($type ne 'Sources') && ($type ne 'Packages')) {
+ fatal("Unknown type $type.");
+ }
+}
+
+sub aptopts {
+ # Build apt options
+ my ($dist) = @_;
+ my @opts = ();
+ if ($arch) {
+ print "W: Forcing arch $arch for this command only.\n";
+ push(@opts, '-o', "Apt::Architecture=$arch");
+ push(@opts, '-o', "Apt::Architectures=$arch");
+ }
+ return @opts;
+}
+
+sub aptconfig {
+ # Build APT_CONFIG override
+ my ($dist) = @_;
+ my $aptconf = "$datadir/$dist/etc/apt/apt.conf";
+ if (!-r $aptconf) {
+ fatal("Unable to read $aptconf");
+ }
+ $ENV{'APT_CONFIG'} = $aptconf;
+}
+
+###
+
+sub aptcmd {
+ my ($cmd, $dist, @args) = @_;
+ dist_check($dist);
+ unshift(@args, aptopts($dist));
+ aptconfig($dist);
+ exec($cmd, @args);
+}
+
+sub apt_file {
+ my ($dist, @args) = @_;
+ dist_check($dist);
+ aptconfig($dist);
+ my @query = ('dpkg-query', '-W', '-f');
+ open(my $fd, '-|', @query, '${Version}', 'apt-file')
+ or fatal('Unable to run dpkg-query.');
+ my $aptfile_version = <$fd>;
+ close($fd);
+ if (version_compare('3.0~', $aptfile_version) < 0) {
+ open($fd, '-|', @query, '${Conffiles}\n', 'apt-file')
+ or fatal('Unable to run dpkg-query.');
+ my @aptfile_confs = map { (split)[0] }
+ grep { /apt\.conf\.d/ } <$fd>;
+ close($fd);
+ # New-style apt-file
+ for my $conffile (@aptfile_confs) {
+ if (!-f "$datadir/$dist/$conffile") {
+ cp($conffile, "$datadir/$dist/$conffile");
+ }
+ }
+ } else {
+ my $cache_directory
+ = $datadir . '/' . $dist . "/var/cache/apt/apt-file";
+ unshift(@args, '--cache', $cache_directory);
+ }
+ exec('apt-file', @args);
+}
+
+sub bin2src {
+ my ($dist, $pkg) = @_;
+ dist_check($dist);
+ if (!defined($pkg)) {
+ fatal("No package name provided. Exiting.");
+ }
+ my @args = (aptopts($dist), 'show', $pkg);
+ aptconfig($dist);
+ my $src = $pkg;
+ my $pid = open(CACHE, '-|', 'apt-cache', @args);
+ if (!defined($pid)) {
+ fatal("Couldn't run apt-cache: $!");
+ }
+ if ($pid) {
+ while (<CACHE>) {
+ if (m/^Source: (.*)/) {
+ $src = $1;
+ # Slurp remaining output to avoid SIGPIPE
+ local $/ = undef;
+ my $junk = <CACHE>;
+ last;
+ }
+ }
+ close CACHE || fatal("bad apt-cache $!: $?");
+ print "$src\n";
+ }
+}
+
+sub src2bin {
+ my ($dist, $pkg) = @_;
+ dist_check($dist);
+ if (!defined($pkg)) {
+ fatal("no package name provided. Exiting.");
+ }
+ my @args = (aptopts($dist), 'showsrc', $pkg);
+ aptconfig($dist);
+ my $pid = open(CACHE, '-|', 'apt-cache', @args);
+ if (!defined($pid)) {
+ fatal("Couldn't run apt-cache: $!");
+ }
+ if ($pid) {
+ while (<CACHE>) {
+ if (m/^Binary: (.*)/) {
+ print join("\n", split(/, /, $1)) . "\n";
+ # Slurp remaining output to avoid SIGPIPE
+ local $/ = undef;
+ my $junk = <CACHE>;
+ last;
+ }
+ }
+ close CACHE || fatal("bad apt-cache $!: $?");
+ }
+}
+
+sub dist_create {
+ my ($dist, $method, $version, @sections) = @_;
+ if (!defined($dist)) {
+ fatal("you must provide a dist name.");
+ }
+ my $dir = "$datadir/$dist";
+ if (-d $dir) {
+ fatal("$dir already exists, exiting.");
+ }
+ make_path($datadir);
+ foreach my $d ((
+ '/etc/apt', '/etc/apt/apt.conf.d',
+ '/etc/apt/preferences.d', '/etc/apt/trusted.gpg.d',
+ '/etc/apt/sources.list.d', '/var/lib/apt/lists/partial',
+ '/var/cache/apt/archives/partial', '/var/lib/dpkg'
+ )
+ ) {
+ make_path("$dir/$d");
+ }
+
+ # Create sources.list
+ open(FH, '>', "$dir/etc/apt/sources.list");
+ if ($version) {
+ # Use provided method, version and sections
+ my $sections_str = join(' ', @sections);
+ print FH <<EOF;
+deb $method $version $sections_str
+deb-src $method $version $sections_str
+EOF
+ } else {
+ if ($method) {
+ warn
+"W: method provided without a section. Using default content for sources.list\n";
+ }
+ # Fill in sources.list with example contents
+ print FH <<EOF;
+#deb http://deb.debian.org/debian/ unstable main contrib non-free
+#deb-src http://deb.debian.org/debian/ unstable main contrib non-free
+
+#deb http://archive.ubuntu.com/ubuntu jammy main universe restricted multiverse
+#deb-src http://archive.ubuntu.com/ubuntu jammy main universe restricted multiverse
+EOF
+ }
+ close FH;
+ # Create dpkg status
+ open(FH, '>', "$dir/var/lib/dpkg/status");
+ close FH; #empty file
+ # Create apt.conf
+ $arch ||= `dpkg --print-architecture`;
+ chomp $arch;
+ open(FH, ">$dir/etc/apt/apt.conf");
+ print FH <<EOF;
+Apt {
+ Architecture "$arch";
+ Architectures "$arch";
+};
+
+Dir "$dir";
+EOF
+ close FH;
+
+ foreach my $keyring (
+ qw(debian-archive-keyring.gpg
+ debian-archive-removed-keys.gpg
+ ubuntu-archive-keyring.gpg
+ ubuntu-archive-removed-keys.gpg)
+ ) {
+ my $src = "/usr/share/keyrings/$keyring";
+ if (-f $src) {
+ symlink $src, "$dir/etc/apt/trusted.gpg.d/$keyring";
+ }
+ }
+ print "Now edit $dir/etc/apt/sources.list\n" unless $version;
+ print "Run chdist apt $dist update\n";
+ print "And enjoy.\n";
+}
+
+sub get_distfiles {
+ # Retrieve files to be read
+ # Takes a dist and a type
+ my ($dist, $type) = @_;
+
+ my @files;
+
+ foreach
+ my $file (glob($datadir . '/' . $dist . "/var/lib/apt/lists/*_$type")) {
+ if (-f $file) {
+ push @files, $file;
+ }
+ }
+
+ return \@files;
+}
+
+sub dist_compare(\@$$) {
+ # Takes a list of dists, a type of comparison and a do_compare flag
+ my ($dists, $do_compare, $type) = @_;
+ type_check($type);
+
+ # Get the list of dists from the reference
+ my @dists = @$dists;
+ map { dist_check($_) } @dists;
+
+ # Get all packages
+ my %packages;
+
+ foreach my $dist (@dists) {
+ my $files = get_distfiles($dist, $type);
+ my @files = @$files;
+ foreach my $file (@files) {
+ my $parsed_file = parseFile($file);
+ foreach my $package (keys(%{$parsed_file})) {
+ if ($packages{$dist}{$package}) {
+ my $version = $packages{$dist}{$package}{Version};
+ my $alt_ver = $parsed_file->{$package}{Version};
+ my $delta
+ = $version
+ && $alt_ver
+ && version_compare($version, $alt_ver);
+ if (defined($delta) && $delta < 0) {
+ $packages{$dist}{$package} = $parsed_file->{$package};
+ } else {
+ warn
+"W: Package $package is already listed for $dist. Not overriding.\n";
+ }
+ } else {
+ $packages{$dist}{$package} = $parsed_file->{$package};
+ }
+ }
+ }
+ }
+
+ # Get entire list of packages
+ my @all_packages = uniq sort (map { keys(%{ $packages{$_} }) } @dists);
+
+ foreach my $package (@all_packages) {
+ my $line = "$package ";
+ my $status = "";
+ my $details;
+
+ foreach my $dist (@dists) {
+ if ($packages{$dist}{$package}) {
+ $line .= "$packages{$dist}{$package}{'Version'} ";
+ } else {
+ $line .= "UNAVAIL ";
+ $status = "not_in_$dist";
+ }
+ }
+
+ my @versions = map { $packages{$_}{$package}{'Version'} } @dists;
+ # Escaped versions
+ my @esc_vers = @versions;
+ foreach my $vers (@esc_vers) {
+ $vers =~ s|\+|\\\+| if defined $vers;
+ }
+
+ # Do compare
+ if ($do_compare) {
+ if (!@dists) {
+ fatal('Can only compare versions if there are two distros.');
+ }
+ if (!$status) {
+ my $cmp = version_compare($versions[0], $versions[1]);
+ if (!$cmp) {
+ $status = "same_version";
+ } elsif ($cmp < 0) {
+ $status = "newer_in_$dists[1]";
+ if ($versions[1] =~ m|^$esc_vers[0]|) {
+ $details = " local_changes_in_$dists[1]";
+ }
+ } else {
+ $status = "newer_in_$dists[0]";
+ if ($versions[0] =~ m|^$esc_vers[1]|) {
+ $details = " local_changes_in_$dists[0]";
+ }
+ }
+ }
+ $line .= " $status $details";
+ }
+
+ print "$line\n";
+ }
+}
+
+sub compare_src_bin {
+ my ($dist, $do_compare) = @_;
+
+ dist_check($dist);
+
+ # Get all packages
+ my %packages;
+ my @parse_types = ('Sources', 'Packages');
+ my @comp_types = ('Sources_Bin', 'Packages');
+
+ foreach my $type (@parse_types) {
+ my $files = get_distfiles($dist, $type);
+ my @files = @$files;
+ foreach my $file (@files) {
+ my $parsed_file = parseFile($file);
+ foreach my $package (keys(%{$parsed_file})) {
+ if ($packages{$dist}{$package}) {
+ warn
+"W: Package $package is already listed for $dist. Not overriding.\n";
+ } else {
+ $packages{$type}{$package} = $parsed_file->{$package};
+ }
+ }
+ }
+ }
+
+ # Build 'Sources_Bin' hash
+ foreach my $package (keys(%{ $packages{Sources} })) {
+ my $package_h = \%{ $packages{Sources}{$package} };
+ if ($package_h->{'Binary'}) {
+ my @binaries = split(", ", $package_h->{'Binary'});
+ my $version = $package_h->{'Version'};
+ foreach my $binary (@binaries) {
+ if (defined $packages{Sources_Bin}{$binary}) {
+ my $alt_ver = $packages{Sources_Bin}{$binary}{Version};
+ # Skip this entry if it's an older version than we already
+ # have
+ if (version_compare($version, $alt_ver) < 0) {
+ next;
+ }
+ }
+ $packages{Sources_Bin}{$binary}{Version} = $version;
+ }
+ } else {
+ warn "Source $package has no binaries!\n";
+ }
+ }
+
+ # Get entire list of packages
+ my @all_packages
+ = uniq sort (map { keys(%{ $packages{$_} }) } @comp_types);
+
+ foreach my $package (@all_packages) {
+ my $line = "$package ";
+ my $status = "";
+ my $details = '';
+
+ foreach my $type (@comp_types) {
+ if ($packages{$type}{$package}) {
+ $line .= "$packages{$type}{$package}{'Version'} ";
+ } else {
+ $line .= "UNAVAIL ";
+ $status = "not_in_$type";
+ }
+ }
+
+ my @versions = map { $packages{$_}{$package}{'Version'} } @comp_types;
+
+ # Do compare
+ if ($do_compare) {
+ if (!@comp_types) {
+ fatal('Can only compare versions if there are two types.');
+ }
+ if (!$status) {
+ my $cmp = version_compare($versions[0], $versions[1]);
+ if (!$cmp) {
+ $status = "same_version";
+ } elsif ($cmp < 0) {
+ $status = "newer_in_$comp_types[1]";
+ if ($versions[1] =~ m|^\Q$versions[0]\E|) {
+ $details = " local_changes_in_$comp_types[1]";
+ }
+ } else {
+ $status = "newer_in_$comp_types[0]";
+ if ($versions[0] =~ m|^\Q$versions[1]\E|) {
+ $details = " local_changes_in_$comp_types[0]";
+ }
+ }
+ }
+ $line .= " $status $details";
+ }
+
+ print "$line\n";
+ }
+}
+
+sub grep_file(\@$) {
+ my ($argv, $file) = @_;
+ my $dist = shift @{$argv};
+ dist_check($dist);
+ my @f = glob($datadir . '/' . $dist . "/var/lib/apt/lists/*_$file");
+ if (@f) {
+ exec('grep-dctrl', @{$argv}, @f);
+ } else {
+ fatal("Couldn't find a $file for $dist.");
+ }
+}
+
+sub list {
+ opendir(DIR, $datadir) or fatal("can't open dir $datadir: $!");
+ while (my $file = readdir(DIR)) {
+ if ((-d "$datadir/$file") && ($file =~ m|^\w+|)) {
+ print "$file\n";
+ }
+ }
+ closedir(DIR);
+}
+
+sub parseFile {
+ my ($file) = @_;
+
+ # Parse a source file and returns results as a hash
+
+ open(FILE, '<', $file) || fatal("Could not open $file : $!");
+
+ # Use %tmp hash to store tmp data
+ my %tmp;
+ my %result;
+
+ while (my $line = <FILE>) {
+ if ($line =~ m|^$|) {
+ # Commit data if empty line
+ if ($tmp{'Package'}) {
+ #print "Committing data for $tmp{'Package'}\n";
+ while (my ($field, $data) = each(%tmp)) {
+ if ($field ne "Package") {
+ $result{ $tmp{'Package'} }{$field} = $data;
+ }
+ }
+ # Reset %tmp
+ %tmp = ();
+ } else {
+ warn "W: No Package field found. Not committing data.\n";
+ }
+ } elsif ($line =~ m|^[a-zA-Z]|) {
+ # Gather data
+ my ($field, $data) = $line =~ m|([a-zA-Z-]+): (.*)$|;
+ if ($data) {
+ $tmp{$field} = $data;
+ }
+ }
+ }
+ close(FILE);
+
+ return \%result;
+}
+
+########################################################
+### Command parsing
+########################################################
+
+my $recursed = 0;
+MAIN:
+my $command = shift @ARGV;
+given ($command) {
+ when ('create') {
+ dist_create(@ARGV);
+ }
+ when ('apt') {
+ aptcmd('apt', @ARGV);
+ }
+ when ('apt-get') {
+ aptcmd('apt-get', @ARGV);
+ }
+ when ('apt-cache') {
+ aptcmd('apt-cache', @ARGV);
+ }
+ when ('apt-file') {
+ apt_file(@ARGV);
+ }
+ when ('apt-rdepends') {
+ aptcmd('apt-rdepends', @ARGV);
+ }
+ when ('aptitude') {
+ aptcmd('aptitude', @ARGV);
+ }
+ when ('bin2src') {
+ bin2src(@ARGV);
+ }
+ when ('src2bin') {
+ src2bin(@ARGV);
+ }
+ when ('compare-packages') {
+ dist_compare(@ARGV, 0, 'Sources');
+ }
+ when ('compare-bin-packages') {
+ dist_compare(@ARGV, 0, 'Packages');
+ }
+ when ('compare-versions') {
+ dist_compare(@ARGV, 1, 'Sources');
+ }
+ when ('compare-bin-versions') {
+ dist_compare(@ARGV, 1, 'Packages');
+ }
+ when ('grep-dctrl-packages') {
+ grep_file(@ARGV, 'Packages');
+ }
+ when ('grep-dctrl-sources') {
+ grep_file(@ARGV, 'Sources');
+ }
+ when ('compare-src-bin-packages') {
+ compare_src_bin(@ARGV, 0);
+ }
+ when ('compare-src-bin-versions') {
+ compare_src_bin(@ARGV, 1);
+ }
+ when ('list') {
+ list;
+ }
+ default {
+ my $dist = $command;
+ my $dir = "$datadir/$dist";
+ if (-d $dir && !$recursed) {
+ splice @ARGV, 1, 0, $dist;
+ $recursed = 1;
+ goto MAIN;
+ } elsif ($dist && !$recursed) {
+ dist_check($dist);
+ } else {
+ usage(1);
+ }
+ }
+}
diff --git a/scripts/checkbashisms.1 b/scripts/checkbashisms.1
new file mode 100644
index 0000000..8f706ab
--- /dev/null
+++ b/scripts/checkbashisms.1
@@ -0,0 +1,77 @@
+.TH CHECKBASHISMS 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+checkbashisms \- check for bashisms in /bin/sh scripts
+.SH SYNOPSIS
+\fBcheckbashisms\fR \fIscript\fR ...
+.br
+\fBcheckbashisms \-\-help\fR|\fB\-\-version\fR
+.SH DESCRIPTION
+\fBcheckbashisms\fR, based on one of the checks from the \fBlintian\fR
+system, performs basic checks on \fI/bin/sh\fR shell scripts for the
+possible presence of bashisms. It takes the names of the shell
+scripts on the command line, and outputs warnings if possible bashisms
+are detected.
+.PP
+Note that the definition of a bashism in this context roughly equates
+to "a shell feature that is not required to be supported by POSIX"; this
+means that some issues flagged may be permitted under optional sections
+of POSIX, such as XSI or User Portability.
+.PP
+In cases where POSIX and Debian Policy disagree, \fBcheckbashisms\fR by
+default allows extensions permitted by Policy but may also provide
+options for stricter checking.
+.SH OPTIONS
+.TP
+.BR \-\-help ", " \-h
+Show a summary of options.
+.TP
+.BR \-\-newline ", " \-n
+Check for "\fBecho \-n\fR" usage (non POSIX but required by Debian Policy 10.4.)
+.TP
+.BR \-\-posix ", " \-p
+Check for issues which are non POSIX but required to be supported by Debian
+Policy 10.4 (implies \fB\-n\fR).
+.TP
+.BR \-\-force ", " \-f
+Force each script to be checked, even if it would normally not be (for
+instance, it has a bash or non POSIX shell shebang or appears to be a
+shell wrapper).
+.TP
+.BR \-\-lint ", " \-l
+Act like a linter, for integration into a text editor. Possible
+bashisms will be printed in stdout, like so:
+.IP
+.I {filename}:{lineno}:1: warning: possible bashism; {explanation}
+.TP
+.BR \-\-extra ", " \-x
+Highlight lines which, whilst they do not contain bashisms, may be
+useful in determining whether a particular issue is a false positive
+which may be ignored.
+For example, the use of "\fB$BASH_ENV\fR" may be preceded by checking
+whether "\fB$BASH\fR" is set.
+.TP
+.BR \-\-early-fail ", " \-e
+Exit right after a first error is seen.
+.TP
+.BR \-\-version ", " \-v
+Show version and copyright information.
+.SH "EXIT VALUES"
+The exit value will be 0 if no possible bashisms or other problems
+were detected. Otherwise it will be the sum of the following error
+values:
+.TP
+1
+A possible bashism was detected.
+.TP
+2
+A file was skipped for some reason, for example, because it was
+unreadable or not found. The warning message will give details.
+.TP
+4
+No bashisms were detected in a bash script.
+.SH "SEE ALSO"
+.BR lintian (1)
+.SH AUTHOR
+\fBcheckbashisms\fR was originally written as a shell script by Yann Dirson
+<\fIdirson@debian.org\fR> and rewritten in Perl with many more features by
+Julian Gilbey <\fIjdg@debian.org\fR>.
diff --git a/scripts/checkbashisms.bash_completion b/scripts/checkbashisms.bash_completion
new file mode 100644
index 0000000..b0e30fd
--- /dev/null
+++ b/scripts/checkbashisms.bash_completion
@@ -0,0 +1,28 @@
+# /usr/share/bash-completion/completions/checkbashisms
+# Bash command completion for ‘checkbashisms(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+# Copyright © 2015, Nicholas Bamber <nicholas@periapt.co.uk>
+
+_checkbashisms()
+{
+ local cur prev words cword special
+ _init_completion || return
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '--newline --posix --force --extra --early-fail' -- "$cur" ) )
+ else
+ COMPREPLY=( $( compgen -o filenames -f -- "$cur" ) )
+ fi
+
+ return 0
+} &&
+complete -F _checkbashisms checkbashisms
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/checkbashisms.pl b/scripts/checkbashisms.pl
new file mode 100755
index 0000000..b775e51
--- /dev/null
+++ b/scripts/checkbashisms.pl
@@ -0,0 +1,822 @@
+#!/usr/bin/perl
+
+# This script is essentially copied from /usr/share/lintian/checks/scripts,
+# which is:
+# Copyright (C) 1998 Richard Braakman
+# Copyright (C) 2002 Josip Rodin
+# This version is
+# Copyright (C) 2003 Julian Gilbey
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use File::Temp qw/tempfile/;
+
+sub init_hashes;
+
+(my $progname = $0) =~ s|.*/||;
+
+my $usage = <<"EOF";
+Usage: $progname [-n] [-f] [-x] [-e] [-l] script ...
+ or: $progname --help
+ or: $progname --version
+This script performs basic checks for the presence of bashisms
+in /bin/sh scripts and the lack of bashisms in /bin/bash ones.
+EOF
+
+my $version = <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2003 by Julian Gilbey <jdg\@debian.org>,
+based on original code which is copyright 1998 by Richard Braakman
+and copyright 2002 by Josip Rodin.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2, or (at your option) any later version.
+EOF
+
+my ($opt_echo, $opt_force, $opt_extra, $opt_posix, $opt_early_fail, $opt_lint);
+my ($opt_help, $opt_version);
+my @filenames;
+
+# Detect if STDIN is a pipe
+if (scalar(@ARGV) == 0 && (-p STDIN or -f STDIN)) {
+ push(@ARGV, '-');
+}
+
+##
+## handle command-line options
+##
+$opt_help = 1 if int(@ARGV) == 0;
+
+GetOptions(
+ "help|h" => \$opt_help,
+ "version|v" => \$opt_version,
+ "newline|n" => \$opt_echo,
+ "lint|l" => \$opt_lint,
+ "force|f" => \$opt_force,
+ "extra|x" => \$opt_extra,
+ "posix|p" => \$opt_posix,
+ "early-fail|e" => \$opt_early_fail,
+ )
+ or die
+"Usage: $progname [options] filelist\nRun $progname --help for more details\n";
+
+if ($opt_help) { print $usage; exit 0; }
+if ($opt_version) { print $version; exit 0; }
+
+$opt_echo = 1 if $opt_posix;
+
+my $mode = 0;
+my $issues = 0;
+my $status = 0;
+my $makefile = 0;
+my (%bashisms, %string_bashisms, %singlequote_bashisms);
+
+my $LEADIN
+ = qr'(?:(?:^|[`&;(|{])\s*|(?:(?:if|elif|while)(?:\s+!)?|then|do|shell)\s+)';
+init_hashes;
+
+my @bashisms_keys = sort keys %bashisms;
+my @string_bashisms_keys = sort keys %string_bashisms;
+my @singlequote_bashisms_keys = sort keys %singlequote_bashisms;
+
+foreach my $filename (@ARGV) {
+ my $check_lines_count = -1;
+
+ my $display_filename = $filename;
+
+ if ($filename eq '-') {
+ my $tmp_fh;
+ ($tmp_fh, $filename)
+ = tempfile("chkbashisms_tmp.XXXX", TMPDIR => 1, UNLINK => 1);
+ while (my $line = <STDIN>) {
+ print $tmp_fh $line;
+ }
+ close($tmp_fh);
+ $display_filename = "(stdin)";
+ }
+
+ if (!$opt_force) {
+ $check_lines_count = script_is_evil_and_wrong($filename);
+ }
+
+ if ($check_lines_count == 0 or $check_lines_count == 1) {
+ warn
+"script $display_filename does not appear to be a /bin/sh script; skipping\n";
+ next;
+ }
+
+ if ($check_lines_count != -1) {
+ warn
+"script $display_filename appears to be a shell wrapper; only checking the first "
+ . "$check_lines_count lines\n";
+ }
+
+ unless (open C, '<', $filename) {
+ warn "cannot open script $display_filename for reading: $!\n";
+ $status |= 2;
+ next;
+ }
+
+ $issues = 0;
+ $mode = 0;
+ my $cat_string = "";
+ my $cat_indented = 0;
+ my $quote_string = "";
+ my $last_continued = 0;
+ my $continued = 0;
+ my $found_rules = 0;
+ my $buffered_orig_line = "";
+ my $buffered_line = "";
+ my %start_lines;
+
+ while (<C>) {
+ next unless ($check_lines_count == -1 or $. <= $check_lines_count);
+
+ if ($. == 1) { # This should be an interpreter line
+ if (m,^\#!\s*(?:\S+/env\s+)?(\S+),) {
+ my $interpreter = $1;
+
+ if ($interpreter =~ m,(?:^|/)make$,) {
+ init_hashes if !$makefile++;
+ $makefile = 1;
+ } else {
+ init_hashes if $makefile--;
+ $makefile = 0;
+ }
+ next if $opt_force;
+
+ if ($interpreter =~ m,(?:^|/)bash$,) {
+ $mode = 1;
+ } elsif ($interpreter !~ m,(?:^|/)(sh|dash|posh)$,) {
+### ksh/zsh?
+ warn
+"script $display_filename does not appear to be a /bin/sh script; skipping\n";
+ $status |= 2;
+ last;
+ }
+ } else {
+ warn
+"script $display_filename does not appear to have a \#! interpreter line;\nyou may get strange results\n";
+ }
+ }
+
+ chomp;
+ my $orig_line = $_;
+
+ # We want to remove end-of-line comments, so need to skip
+ # comments that appear inside balanced pairs
+ # of single or double quotes
+
+ # Remove comments in the "quoted" part of a line that starts
+ # in a quoted block? The problem is that we have no idea
+ # whether the program interpreting the block treats the
+ # quote character as part of the comment or as a quote
+ # terminator. We err on the side of caution and assume it
+ # will be treated as part of the comment.
+ # s/^(?:.*?[^\\])?$quote_string(.*)$/$1/ if $quote_string ne "";
+
+ # skip comment lines
+ if ( m,^\s*\#,
+ && $quote_string eq ''
+ && $buffered_line eq ''
+ && $cat_string eq '') {
+ next;
+ }
+
+ # Remove quoted strings so we can more easily ignore comments
+ # inside them
+ s/(^|[^\\](?:\\\\)*)\'(?:\\.|[^\\\'])+\'/$1''/g;
+ s/(^|[^\\](?:\\\\)*)\"(?:\\.|[^\\\"])+\"/$1""/g;
+
+ # If inside a quoted string, remove everything before the quote
+ s/^.+?\'//
+ if ($quote_string eq "'");
+ s/^.+?[^\\]\"//
+ if ($quote_string eq '"');
+
+ # If the remaining string contains what looks like a comment,
+ # eat it. In either case, swap the unmodified script line
+ # back in for processing.
+ if (m/(?:^|[^[\\])[\s\&;\(\)](\#.*$)/) {
+ $_ = $orig_line;
+ s/\Q$1\E//; # eat comments
+ } else {
+ $_ = $orig_line;
+ }
+
+ # Handle line continuation
+ if (!$makefile && $cat_string eq '' && m/\\$/) {
+ chop;
+ $buffered_line .= $_;
+ $buffered_orig_line .= $orig_line . "\n";
+ next;
+ }
+
+ if ($buffered_line ne '') {
+ $_ = $buffered_line . $_;
+ $orig_line = $buffered_orig_line . $orig_line;
+ $buffered_line = '';
+ $buffered_orig_line = '';
+ }
+
+ if ($makefile) {
+ $last_continued = $continued;
+ if (/[^\\]\\$/) {
+ $continued = 1;
+ } else {
+ $continued = 0;
+ }
+
+ # Don't match lines that look like a rule if we're in a
+ # continuation line before the start of the rules
+ if (/^[\w%-]+:+\s.*?;?(.*)$/
+ and !($last_continued and !$found_rules)) {
+ $found_rules = 1;
+ $_ = $1 if $1;
+ }
+
+ last
+ if m%^\s*(override\s|export\s)?\s*SHELL\s*:?=\s*(/bin/)?bash\s*%;
+
+ # Remove "simple" target names
+ s/^[\w%.-]+(?:\s+[\w%.-]+)*::?//;
+ s/^\t//;
+ s/(?<!\$)\$\((\w+)\)/\${$1}/g;
+ s/(\$){2}/$1/g;
+ s/^[\s\t]*[@-]{1,2}//;
+ }
+
+ if (
+ $cat_string ne ""
+ && (m/^\Q$cat_string\E$/
+ || ($cat_indented && m/^\t*\Q$cat_string\E$/))
+ ) {
+ $cat_string = "";
+ next;
+ }
+ my $within_another_shell = 0;
+ if (m,(^|\s+)((/usr)?/bin/)?((b|d)?a|k|z|t?c)sh\s+-c\s*.+,) {
+ $within_another_shell = 1;
+ }
+ # if cat_string is set, we are in a HERE document and need not
+ # check for things
+ if ($cat_string eq "" and !$within_another_shell) {
+ my $found = 0;
+ my $match = '';
+ my $explanation = '';
+ my $line = $_;
+
+ # Remove "" / '' as they clearly aren't quoted strings
+ # and not considering them makes the matching easier
+ $line =~ s/(^|[^\\])(\'\')+/$1/g;
+ $line =~ s/(^|[^\\])(\"\")+/$1/g;
+
+ if ($quote_string ne "") {
+ my $otherquote = ($quote_string eq "\"" ? "\'" : "\"");
+ # Inside a quoted block
+ if ($line =~ /(?:^|^.*?[^\\])$quote_string(.*)$/) {
+ my $rest = $1;
+ my $templine = $line;
+
+ # Remove quoted strings delimited with $otherquote
+ $templine
+ =~ s/(^|[^\\])$otherquote[^$quote_string]*?[^\\]$otherquote/$1/g;
+ # Remove quotes that are themselves quoted
+ # "a'b"
+ $templine
+ =~ s/(^|[^\\])$otherquote.*?$quote_string.*?[^\\]$otherquote/$1/g;
+ # "\""
+ $templine
+ =~ s/(^|[^\\])$quote_string\\$quote_string$quote_string/$1/g;
+
+ # After all that, were there still any quotes left?
+ my $count = () = $templine =~ /(^|[^\\])$quote_string/g;
+ next if $count == 0;
+
+ $count = () = $rest =~ /(^|[^\\])$quote_string/g;
+ if ($count % 2 == 0) {
+ # Quoted block ends on this line
+ # Ignore everything before the closing quote
+ $line = $rest || '';
+ $quote_string = "";
+ } else {
+ next;
+ }
+ } else {
+ # Still inside the quoted block, skip this line
+ next;
+ }
+ }
+
+ # Check even if we removed the end of a quoted block
+ # in the previous check, as a single line can end one
+ # block and begin another
+ if ($quote_string eq "") {
+ # Possible start of a quoted block
+ for my $quote ("\"", "\'") {
+ my $templine = $line;
+ my $otherquote = ($quote eq "\"" ? "\'" : "\"");
+
+ # Remove balanced quotes and their content
+ while (1) {
+ my ($length_single, $length_double) = (0, 0);
+
+ # Determine which one would match first:
+ if ($templine
+ =~ m/(^.+?(?:^|[^\\\"](?:\\\\)*)\')[^\']*\'/) {
+ $length_single = length($1);
+ }
+ if ($templine
+ =~ m/(^.*?(?:^|[^\\\'](?:\\\\)*)\")(?:\\.|[^\\\"])+\"/
+ ) {
+ $length_double = length($1);
+ }
+
+ # Now simplify accordingly (shorter is preferred):
+ if (
+ $length_single != 0
+ && ( $length_single < $length_double
+ || $length_double == 0)
+ ) {
+ $templine =~ s/(^|[^\\\"](?:\\\\)*)\'[^\']*\'/$1/;
+ } elsif ($length_double != 0) {
+ $templine
+ =~ s/(^|[^\\\'](?:\\\\)*)\"(?:\\.|[^\\\"])+\"/$1/;
+ } else {
+ last;
+ }
+ }
+
+ # Don't flag quotes that are themselves quoted
+ # "a'b"
+ $templine =~ s/$otherquote.*?$quote.*?$otherquote//g;
+ # "\""
+ $templine =~ s/(^|[^\\])$quote\\$quote$quote/$1/g;
+ # \' or \"
+ $templine =~ s/\\[\'\"]//g;
+ my $count = () = $templine =~ /(^|(?!\\))$quote/g;
+
+ # If there's an odd number of non-escaped
+ # quotes in the line it's almost certainly the
+ # start of a quoted block.
+ if ($count % 2 == 1) {
+ $quote_string = $quote;
+ $start_lines{'quote_string'} = $.;
+ $line =~ s/^(.*)$quote.*$/$1/;
+ last;
+ }
+ }
+ }
+
+ # since this test is ugly, I have to do it by itself
+ # detect source (.) trying to pass args to the command it runs
+ # The first expression weeds out '. "foo bar"'
+ if ( not $found
+ and not
+m/$LEADIN\.\s+(\"[^\"]+\"|\'[^\']+\'|\$\([^)]+\)+(?:\/[^\s;]+)?)\s*(\&|\||\d?>|<|;|\Z)/o
+ and m/$LEADIN(\.\s+[^\s;\`:]+\s+([^\s;]+))/o) {
+ if ($2 =~ /^(\&|\||\d?>|<)/) {
+ # everything is ok
+ ;
+ } else {
+ $found = 1;
+ $match = $1;
+ $explanation = "sourced script with arguments";
+ output_explanation($display_filename, $orig_line,
+ $explanation);
+ }
+ }
+
+ # Remove "quoted quotes". They're likely to be inside
+ # another pair of quotes; we're not interested in
+ # them for their own sake and removing them makes finding
+ # the limits of the outer pair far easier.
+ $line =~ s/(^|[^\\\'\"])\"\'\"/$1/g;
+ $line =~ s/(^|[^\\\'\"])\'\"\'/$1/g;
+
+ foreach my $re (@singlequote_bashisms_keys) {
+ my $expl = $singlequote_bashisms{$re};
+ if ($line =~ m/($re)/) {
+ $found = 1;
+ $match = $1;
+ $explanation = $expl;
+ output_explanation($display_filename, $orig_line,
+ $explanation);
+ }
+ }
+
+ my $re = '(?<![\$\\\])\$\'[^\']+\'';
+ if ($line =~ m/(.*)($re)/o) {
+ my $count = () = $1 =~ /(^|[^\\])\'/g;
+ if ($count % 2 == 0) {
+ output_explanation($display_filename, $orig_line,
+ q<$'...' should be "$(printf '...')">);
+ }
+ }
+
+ # $cat_line contains the version of the line we'll check
+ # for heredoc delimiters later. Initially, remove any
+ # spaces between << and the delimiter to make the following
+ # updates to $cat_line easier. However, don't remove the
+ # spaces if the delimiter starts with a -, as that changes
+ # how the delimiter is searched.
+ my $cat_line = $line;
+ $cat_line =~ s/(<\<-?)\s+(?!-)/$1/g;
+
+ # Ignore anything inside single quotes; it could be an
+ # argument to grep or the like.
+ $line =~ s/(^|[^\\\"](?:\\\\)*)\'(?:\\.|[^\\\'])+\'/$1''/g;
+
+ # As above, with the exception that we don't remove the string
+ # if the quote is immediately preceded by a < or a -, so we
+ # can match "foo <<-?'xyz'" as a heredoc later
+ # The check is a little more greedy than we'd like, but the
+ # heredoc test itself will weed out any false positives
+ $cat_line =~ s/(^|[^<\\\"-](?:\\\\)*)\'(?:\\.|[^\\\'])+\'/$1''/g;
+
+ $re = '(?<![\$\\\])\$\"[^\"]+\"';
+ if ($line =~ m/(.*)($re)/o) {
+ my $count = () = $1 =~ /(^|[^\\])\"/g;
+ if ($count % 2 == 0) {
+ output_explanation($display_filename, $orig_line,
+ q<$"foo" should be eval_gettext "foo">);
+ }
+ }
+
+ foreach my $re (@string_bashisms_keys) {
+ my $expl = $string_bashisms{$re};
+ if ($line =~ m/($re)/) {
+ $found = 1;
+ $match = $1;
+ $explanation = $expl;
+ output_explanation($display_filename, $orig_line,
+ $explanation);
+ }
+ }
+
+ # We've checked for all the things we still want to notice in
+ # double-quoted strings, so now remove those strings as well.
+ $line =~ s/(^|[^\\\'](?:\\\\)*)\"(?:\\.|[^\\\"])+\"/$1""/g;
+ $cat_line =~ s/(^|[^<\\\'-](?:\\\\)*)\"(?:\\.|[^\\\"])+\"/$1""/g;
+ foreach my $re (@bashisms_keys) {
+ my $expl = $bashisms{$re};
+ if ($line =~ m/($re)/) {
+ $found = 1;
+ $match = $1;
+ $explanation = $expl;
+ output_explanation($display_filename, $orig_line,
+ $explanation);
+ }
+ }
+ # This check requires the value to be compared, which could
+ # be done in the regex itself but requires "use re 'eval'".
+ # So it's better done in its own
+ if ($line =~ m/$LEADIN((?:exit|return)\s+(\d{3,}))/o && $2 > 255) {
+ $explanation = 'exit|return status code greater than 255';
+ output_explanation($display_filename, $orig_line,
+ $explanation);
+ }
+
+ # Only look for the beginning of a heredoc here, after we've
+ # stripped out quoted material, to avoid false positives.
+ if ($cat_line
+ =~ m/(?:^|[^<])\<\<(\-?)\s*(?:(?!<|'|")((?:[^\s;>|]+(?:(?<=\\)[\s;>|])?)+)|[\'\"](.*?)[\'\"])/
+ ) {
+ $cat_indented = ($1 && $1 eq '-') ? 1 : 0;
+ my $quoted = defined($3);
+ $cat_string = $quoted ? $3 : $2;
+ unless ($quoted) {
+ # Now strip backslashes. Keep the position of the
+ # last match in a variable, as s/// resets it back
+ # to undef, but we don't want that.
+ my $pos = 0;
+ pos($cat_string) = $pos;
+ while ($cat_string =~ s/\G(.*?)\\/$1/) {
+ # position += length of match + the character
+ # that followed the backslash:
+ $pos += length($1) + 1;
+ pos($cat_string) = $pos;
+ }
+ }
+ $start_lines{'cat_string'} = $.;
+ }
+ }
+ }
+
+ warn
+"error: $display_filename: Unterminated heredoc found, EOF reached. Wanted: <$cat_string>, opened in line $start_lines{'cat_string'}\n"
+ if ($cat_string ne '');
+ warn
+"error: $display_filename: Unterminated quoted string found, EOF reached. Wanted: <$quote_string>, opened in line $start_lines{'quote_string'}\n"
+ if ($quote_string ne '');
+ warn "error: $display_filename: EOF reached while on line continuation.\n"
+ if ($buffered_line ne '');
+
+ close C;
+
+ if ($mode && !$issues) {
+ warn "could not find any possible bashisms in bash script $filename\n";
+ $status |= 4;
+ }
+}
+
+exit $status;
+
+sub output_explanation {
+ my ($filename, $line, $explanation) = @_;
+
+ if ($mode) {
+ # When examining a bash script, just flag that there are indeed
+ # bashisms present
+ $issues = 1;
+ } else {
+ if ($opt_lint) {
+ print "$filename:$.:1: warning: possible bashism; $explanation\n";
+ } else {
+ warn
+ "possible bashism in $filename line $. ($explanation):\n$line\n";
+ }
+ if ($opt_early_fail) {
+ exit 1;
+ }
+ $status |= 1;
+ }
+}
+
+# Returns non-zero if the given file is not actually a shell script,
+# just looks like one.
+sub script_is_evil_and_wrong {
+ my ($filename) = @_;
+ my $ret = -1;
+ # lintian's version of this function aborts if the file
+ # can't be opened, but we simply return as the next
+ # test in the calling code handles reporting the error
+ # itself
+ open(IN, '<', $filename) or return $ret;
+ my $i = 0;
+ my $var = "0";
+ my $backgrounded = 0;
+ local $_;
+ while (<IN>) {
+ chomp;
+ next if /^#/o;
+ next if /^$/o;
+ last if (++$i > 55);
+ if (
+ m~
+ # the exec should either be "eval"ed or a new statement
+ (^\s*|\beval\s*[\'\"]|(;|&&|\b(then|else))\s*)
+
+ # eat anything between the exec and $0
+ exec\s*.+\s*
+
+ # optionally quoted executable name (via $0)
+ .?\$$var.?\s*
+
+ # optional "end of options" indicator
+ (--\s*)?
+
+ # Match expressions of the form '${1+$@}', '${1:+"$@"',
+ # '"${1+$@', "$@", etc where the quotes (before the dollar
+ # sign(s)) are optional and the second (or only if the $1
+ # clause is omitted) parameter may be $@ or $*.
+ #
+ # Finally the whole subexpression may be omitted for scripts
+ # which do not pass on their parameters (i.e. after re-execing
+ # they take their parameters (and potentially data) from stdin
+ .?(\$\{1:?\+.?)?(\$(\@|\*))?~x
+ ) {
+ $ret = $. - 1;
+ last;
+ } elsif (/^\s*(\w+)=\$0;/) {
+ $var = $1;
+ } elsif (
+ m~
+ # Match scripts which use "foo $0 $@ &\nexec true\n"
+ # Program name
+ \S+\s+
+
+ # As above
+ .?\$$var.?\s*
+ (--\s*)?
+ .?(\$\{1:?\+.?)?(\$(\@|\*))?.?\s*\&~x
+ ) {
+
+ $backgrounded = 1;
+ } elsif (
+ $backgrounded
+ and m~
+ # the exec should either be "eval"ed or a new statement
+ (^\s*|\beval\s*[\'\"]|(;|&&|\b(then|else))\s*)
+ exec\s+true(\s|\Z)~x
+ ) {
+
+ $ret = $. - 1;
+ last;
+ } elsif (m~\@DPATCH\@~) {
+ $ret = $. - 1;
+ last;
+ }
+
+ }
+ close IN;
+ return $ret;
+}
+
+sub init_hashes {
+
+ %bashisms = (
+ qr'(?:^|\s+)function [^<>\(\)\[\]\{\};|\s]+(\s|\(|\Z)' =>
+ q<'function' is useless>,
+ $LEADIN . qr'select\s+\w+' => q<'select' is not POSIX>,
+ qr'(test|-o|-a)\s*[^\s]+\s+==\s' => q<should be 'b = a'>,
+ qr'\[\s+[^\]]+\s+==\s' => q<should be 'b = a'>,
+ qr'\s\|\&' => q<pipelining is not POSIX>,
+ qr'[^\\\$]\{([^\s\\\}]*?,)+[^\\\}\s]*\}' => q<brace expansion>,
+ qr'\{\d+\.\.\d+(?:\.\.\d+)?\}' =>
+ q<brace expansion, {a..b[..c]}should be $(seq a [c] b)>,
+ qr'(?i)\{[a-z]\.\.[a-z](?:\.\.\d+)?\}' => q<brace expansion>,
+ qr'(?:^|\s+)\w+\[\d+\]=' => q<bash arrays, H[0]>,
+ $LEADIN
+ . qr'read\s+(?:-[a-qs-zA-Z\d-]+)' =>
+ q<read with option other than -r>,
+ $LEADIN
+ . qr'read\s*(?:-\w+\s*)*(?:\".*?\"|[\'].*?[\'])?\s*(?:;|$)' =>
+ q<read without variable>,
+ $LEADIN . qr'echo\s+(-n\s+)?-n?en?\s' => q<echo -e>,
+ $LEADIN . qr'exec\s+-[acl]' => q<exec -c/-l/-a name>,
+ $LEADIN . qr'let\s' => q<let ...>,
+ qr'(?<![\$\(])\(\(.*\)\)' => q<'((' should be '$(('>,
+ qr'(?:^|\s+)(\[|test)\s+-a' => q<test with unary -a (should be -e)>,
+ qr'\&>' => q<should be \>word 2\>&1>,
+ qr'(<\&|>\&)\s*((-|\d+)[^\s;|)}`&\\\\]|[^-\d\s]+(?<!\$)(?!\d))' =>
+ q<should be \>word 2\>&1>,
+ qr'\[\[(?!:)' =>
+ q<alternative test command ([[ foo ]] should be [ foo ])>,
+ qr'/dev/(tcp|udp)' => q</dev/(tcp|udp)>,
+ $LEADIN . qr'builtin\s' => q<builtin>,
+ $LEADIN . qr'caller\s' => q<caller>,
+ $LEADIN . qr'compgen\s' => q<compgen>,
+ $LEADIN . qr'complete\s' => q<complete>,
+ $LEADIN . qr'declare\s' => q<declare>,
+ $LEADIN . qr'dirs(\s|\Z)' => q<dirs>,
+ $LEADIN . qr'disown\s' => q<disown>,
+ $LEADIN . qr'enable\s' => q<enable>,
+ $LEADIN . qr'mapfile\s' => q<mapfile>,
+ $LEADIN . qr'readarray\s' => q<readarray>,
+ $LEADIN . qr'shopt(\s|\Z)' => q<shopt>,
+ $LEADIN . qr'suspend\s' => q<suspend>,
+ $LEADIN . qr'time\s' => q<time>,
+ $LEADIN . qr'type\s' => q<type>,
+ $LEADIN . qr'typeset\s' => q<typeset>,
+ $LEADIN . qr'ulimit(\s|\Z)' => q<ulimit>,
+ $LEADIN . qr'set\s+-[BHT]+' => q<set -[BHT]>,
+ $LEADIN . qr'alias\s+-p' => q<alias -p>,
+ $LEADIN . qr'unalias\s+-a' => q<unalias -a>,
+ $LEADIN . qr'local\s+-[a-zA-Z]+' => q<local -opt>,
+ # function '=' is special-cased due to bash arrays (think of "foo=()")
+ qr'(?:^|\s)\s*=\s*\(\s*\)\s*([\{|\(]|\Z)' =>
+ q<function names should only contain [a-z0-9_]>,
+qr'(?:^|\s)(?<func>function\s)?\s*(?:[^<>\(\)\[\]\{\};|\s]*[^<>\(\)\[\]\{\};|\s\w][^<>\(\)\[\]\{\};|\s]*)(?(<func>)(?=)|(?<!=))\s*(?(<func>)(?:\(\s*\))?|\(\s*\))\s*([\{|\(]|\Z)'
+ => q<function names should only contain [a-z0-9_]>,
+ $LEADIN . qr'(push|pop)d(\s|\Z)' => q<(push|pop)d>,
+ $LEADIN . qr'export\s+-[^p]' => q<export only takes -p as an option>,
+ qr'(?:^|\s+)[<>]\(.*?\)' => q<\<() process substitution>,
+ $LEADIN . qr'readonly\s+-[af]' => q<readonly -[af]>,
+ $LEADIN . qr'(sh|\$\{?SHELL\}?) -[rD]' => q<sh -[rD]>,
+ $LEADIN . qr'(sh|\$\{?SHELL\}?) --\w+' => q<sh --long-option>,
+ $LEADIN . qr'(sh|\$\{?SHELL\}?) [-+]O' => q<sh [-+]O>,
+ qr'\[\^[^]]+\]' => q<[^] should be [!]>,
+ $LEADIN
+ . qr'printf\s+-v' =>
+ q<'printf -v var ...' should be var='$(printf ...)'>,
+ $LEADIN . qr'coproc\s' => q<coproc>,
+ qr';;?&' => q<;;& and ;& special case operators>,
+ $LEADIN . qr'jobs\s' => q<jobs>,
+ # $LEADIN . qr'jobs\s+-[^lp]\s' => q<'jobs' with option other than -l or -p>,
+ $LEADIN
+ . qr'command\s+(?:-[pvV]+\s+)*-(?:[pvV])*[^pvV\s]' =>
+ q<'command' with option other than -p, -v or -V>,
+ $LEADIN
+ . qr'setvar\s' =>
+ q<setvar 'foo' 'bar' should be eval 'foo="'"$bar"'"'>,
+ $LEADIN
+ . qr'trap\s+["\']?.*["\']?\s+.*(?:ERR|DEBUG|RETURN)' =>
+ q<trap with ERR|DEBUG|RETURN>,
+ $LEADIN
+ . qr'(?:exit|return)\s+-\d' =>
+ q<exit|return with negative status code>,
+ $LEADIN
+ . qr'(?:exit|return)\s+--' =>
+ q<'exit --' should be 'exit' (idem for return)>,
+ $LEADIN . qr'hash(\s|\Z)' => q<hash>,
+ qr'(?:[:=\s])~(?:[+-]|[+-]?\d+)(?:[/\s]|\Z)' =>
+ q<non-standard tilde expansion>,
+ );
+
+ %string_bashisms = (
+ qr'\$\[[^][]+\]' => q<'$[' should be '$(('>,
+ qr'\$\{(?:\w+|@|\*)\:(?:\d+|\$\{?\w+\}?)+(?::(?:\d+|\$\{?\w+\}?)+)?\}'
+ => q<${foo:3[:1]}>,
+ qr'\$\{!\w+[\@*]\}' => q<${!prefix[*|@]>,
+ qr'\$\{!\w+\}' => q<${!name}>,
+ qr'\$\{(?:\w+|@|\*)([,^]{1,2}.*?)\}' =>
+ q<${parm,[,][pat]} or ${parm^[^][pat]}>,
+ qr'\$\{[@*]([#%]{1,2}.*?)\}' => q<${[@|*]#[#]pat} or ${[@|*]%[%]pat}>,
+ qr'\$\{#[@*]\}' => q<${#@} or ${#*}>,
+ qr'\$\{(?:\w+|@|\*)(/.+?){1,2}\}' => q<${parm/?/pat[/str]}>,
+ qr'\$\{\#?\w+\[.+\](?:[/,:#%^].+?)?\}' =>
+ q<bash arrays, ${name[0|*|@]}>,
+ qr'\$\{?RANDOM\}?\b' => q<$RANDOM>,
+ qr'\$\{?(OS|MACH)TYPE\}?\b' => q<$(OS|MACH)TYPE>,
+ qr'\$\{?HOST(TYPE|NAME)\}?\b' => q<$HOST(TYPE|NAME)>,
+ qr'\$\{?DIRSTACK\}?\b' => q<$DIRSTACK>,
+ qr'\$\{?EUID\}?\b' => q<$EUID should be "$(id -u)">,
+ qr'\$\{?UID\}?\b' => q<$UID should be "$(id -ru)">,
+ qr'\$\{?SECONDS\}?\b' => q<$SECONDS>,
+ qr'\$\{?BASH_[A-Z]+\}?\b' => q<$BASH_SOMETHING>,
+ qr'\$\{?SHELLOPTS\}?\b' => q<$SHELLOPTS>,
+ qr'\$\{?PIPESTATUS\}?\b' => q<$PIPESTATUS>,
+ qr'\$\{?SHLVL\}?\b' => q<$SHLVL>,
+ qr'\$\{?FUNCNAME\}?\b' => q<$FUNCNAME>,
+ qr'\$\{?TMOUT\}?\b' => q<$TMOUT>,
+ qr'(?:^|\s+)TMOUT=' => q<TMOUT=>,
+ qr'\$\{?TIMEFORMAT\}?\b' => q<$TIMEFORMAT>,
+ qr'(?:^|\s+)TIMEFORMAT=' => q<TIMEFORMAT=>,
+ qr'(?<![$\\])\$\{?_\}?\b' => q<$_>,
+ qr'(?:^|\s+)GLOBIGNORE=' => q<GLOBIGNORE=>,
+ qr'<<<' => q<\<\<\< here string>,
+ $LEADIN
+ . qr'echo\s+(?:-[^e\s]+\s+)?\"[^\"]*(\\[abcEfnrtv0])+.*?[\"]' =>
+ q<unsafe echo with backslash>,
+ qr'\$\(\([\s\w$*/+-]*\w\+\+.*?\)\)' =>
+ q<'$((n++))' should be '$n; $((n=n+1))'>,
+ qr'\$\(\([\s\w$*/+-]*\+\+\w.*?\)\)' =>
+ q<'$((++n))' should be '$((n=n+1))'>,
+ qr'\$\(\([\s\w$*/+-]*\w\-\-.*?\)\)' =>
+ q<'$((n--))' should be '$n; $((n=n-1))'>,
+ qr'\$\(\([\s\w$*/+-]*\-\-\w.*?\)\)' =>
+ q<'$((--n))' should be '$((n=n-1))'>,
+ qr'\$\(\([\s\w$*/+-]*\*\*.*?\)\)' => q<exponentiation is not POSIX>,
+ $LEADIN . qr'printf\s["\'][^"\']*?%q.+?["\']' => q<printf %q>,
+ );
+
+ %singlequote_bashisms = (
+ $LEADIN
+ . qr'echo\s+(?:-[^e\s]+\s+)?\'[^\']*(\\[abcEfnrtv0])+.*?[\']' =>
+ q<unsafe echo with backslash>,
+ $LEADIN
+ . qr'source\s+[\"\']?(?:\.\/|\/|\$|[\w~.-])\S*' =>
+ q<should be '.', not 'source'>,
+ );
+
+ if ($opt_echo) {
+ $bashisms{ $LEADIN . qr'echo\s+-[A-Za-z]*n' } = q<echo -n>;
+ }
+ if ($opt_posix) {
+ $bashisms{ $LEADIN . qr'local\s+\w+(\s+\W|\s*[;&|)]|$)' }
+ = q<local foo>;
+ $bashisms{ $LEADIN . qr'local\s+\w+=' } = q<local foo=bar>;
+ $bashisms{ $LEADIN . qr'local\s+\w+\s+\w+' } = q<local x y>;
+ $bashisms{ $LEADIN . qr'((?:test|\[)\s+.+\s-[ao])\s' } = q<test -a/-o>;
+ $bashisms{ $LEADIN . qr'kill\s+-[^sl]\w*' } = q<kill -[0-9] or -[A-Z]>;
+ $bashisms{ $LEADIN . qr'trap\s+["\']?.*["\']?\s+.*[1-9]' }
+ = q<trap with signal numbers>;
+ }
+
+ if ($makefile) {
+ $string_bashisms{qr'(\$\(|\`)\s*\<\s*([^\s\)]{2,}|[^DF])\s*(\)|\`)'}
+ = q<'$(\< foo)' should be '$(cat foo)'>;
+ } else {
+ $bashisms{ $LEADIN . qr'\w+\+=' } = q<should be VAR="${VAR}foo">;
+ $string_bashisms{qr'(\$\(|\`)\s*\<\s*\S+\s*(\)|\`)'}
+ = q<'$(\< foo)' should be '$(cat foo)'>;
+ }
+
+ if ($opt_extra) {
+ $string_bashisms{qr'\$\{?BASH\}?\b'} = q<$BASH>;
+ $string_bashisms{qr'(?:^|\s+)RANDOM='} = q<RANDOM=>;
+ $string_bashisms{qr'(?:^|\s+)(OS|MACH)TYPE='} = q<(OS|MACH)TYPE=>;
+ $string_bashisms{qr'(?:^|\s+)HOST(TYPE|NAME)='} = q<HOST(TYPE|NAME)=>;
+ $string_bashisms{qr'(?:^|\s+)DIRSTACK='} = q<DIRSTACK=>;
+ $string_bashisms{qr'(?:^|\s+)EUID='} = q<EUID=>;
+ $string_bashisms{qr'(?:^|\s+)UID='} = q<UID=>;
+ $string_bashisms{qr'(?:^|\s+)BASH(_[A-Z]+)?='} = q<BASH(_SOMETHING)=>;
+ $string_bashisms{qr'(?:^|\s+)SHELLOPTS='} = q<SHELLOPTS=>;
+ $string_bashisms{qr'\$\{?POSIXLY_CORRECT\}?\b'} = q<$POSIXLY_CORRECT>;
+ }
+}
diff --git a/scripts/cowpoke.1 b/scripts/cowpoke.1
new file mode 100644
index 0000000..7d5177b
--- /dev/null
+++ b/scripts/cowpoke.1
@@ -0,0 +1,388 @@
+.\" Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH COWPOKE 1 "April 28, 2008"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+cowpoke \- Build a Debian source package in a remote cowbuilder instance
+.SH SYNOPSIS
+.B cowpoke
+.RI [ options ] " packagename.dsc"
+
+.SH DESCRIPTION
+Uploads a Debian source package to a \fBcowbuilder\fR host and builds it,
+optionally also signing and uploading the result to an incoming queue.
+
+
+.SH OPTIONS
+The following options are available:
+
+.TP
+.BI \-\-arch= architecture
+Specify the Debian architecture(s) to build for. A space separated list of
+architectures may be used to build for all of them in a single pass. Valid
+arch names are those returned by \fBdpkg-architecture\fP(1) for
+\fBDEB_BUILD_ARCH\fP.
+
+.TP
+.BI \-\-dist= distribution
+Specify the Debian distribution(s) to build for. A space separated list of
+distributions may be used to build for all of them in a single pass. Either
+codenames (such as \fBsid\fP, or \fBsqueeze\fP) or distribution names (such as
+\fBunstable\fP, or \fBexperimental\fP) may be used, but you should usually stick
+to using one or the other consistently as this name may be used in file paths
+and to locate old packages for comparison reporting.
+
+It is now also possible to use locally defined names with this option, when
+used in conjunction with the \fBBASE_DIST\fP option in a configuration file.
+This permits the maintenance and use of specially configured build chroots,
+which can source package dependencies from the backports archives or a local
+repository, or have other unusual configuration options set, without polluting
+the chroots you use for clean package builds intended for upload to the main
+repositories. See the description of \fBBASE_DIST\fP below.
+
+.TP
+.BI \-\-buildd= host
+Specify the remote host to build on.
+
+.TP
+.BI \-\-buildd\-user= name
+Specify the remote user to build as.
+
+.TP
+.B \-\-create
+Create the remote \fBcowbuilder\fR root if it does not already exist. If this option
+is not passed it is an error for the specified \fB\-\-dist\fP or \fB\-\-arch\fP
+to not have an existing \fBcowbuilder\fR root in the expected location.
+
+The \fB\-\-buildd\-user\fP must have permission to create the \fBRESULT_DIR\fP
+on the build host, or an admin with the necessary permission must first create
+it and give that user (or some group they are in) write access to it, for this
+option to succeed.
+
+.TP
+.BR \-\-return= [ \fIpath ]
+Copy results of the build to \fIpath\fP. If \fIpath\fP is not specified, then return
+them to the current directory. The given \fIpath\fP must exist, it will not be created.
+
+.TP
+.B \-\-no\-return
+Do not copy results of the build to \fBRETURN_DIR\fP (overriding a path set for
+it in the configuration files).
+
+.TP
+.BI \-\-dpkg\-opts= "'opt1 opt2 ...'"
+Specify additional options to be passed to \fBdpkg-buildpackage\fP(1). Multiple
+options are delimited with spaces. This will override any options specified in
+\fBDEBBUILDOPTS\fP in the build host's \fIpbuilderrc\fP.
+
+.TP
+.BI \-\-create\-opts= "'cowbuilder option'"
+Specify additional arguments to be passed verbatim to \fBcowbuilder\fR when a
+chroot is first created (using the \fB\-\-create\fP option above). If multiple
+arguments need to be passed, this option should be specified separately for
+each of them.
+
+E.g., \fB\-\-create\-opts "\-\-othermirror" \-\-create\-opts "deb http:// ..."\fP
+
+This option will override any \fBCREATE_OPTS\fP specified for a chroot in the
+cowpoke configuration files.
+
+.TP
+.BI \-\-update\-opts= "'cowbuilder option'"
+Specify additional arguments to be passed verbatim to \fBcowbuilder\fR if the
+base of the chroot is updated. If multiple arguments need to be passed, this
+option should be specified separately for each of them.
+
+This option will override any \fBUPDATE_OPTS\fP specified for a chroot in the
+cowpoke configuration files.
+
+.TP
+.BI \-\-build\-opts= "'cowbuilder option'"
+Specify additional arguments to be passed verbatim to \fBcowbuilder\fR when
+a package build is performed. If multiple arguments need to be passed, this
+option should be specified separately for each of them.
+
+This option will override any \fBBUILD_OPTS\fP specified for a chroot in the
+cowpoke configuration files.
+
+.TP
+.BI \-\-sign= keyid
+Specify the key to sign packages with. This will override any \fBSIGN_KEYID\fP
+specified for a chroot in the cowpoke configuration files.
+
+.TP
+.BI \-\-upload= queue
+Specify the dput queue to upload signed packages to. This will override any
+\fBUPLOAD_QUEUE\fP specified for a chroot in the cowpoke configuration files.
+
+.TP
+.B \-\-help
+Display a brief summary of the available options and current configuration.
+
+.TP
+.B \-\-version
+Display the current version information.
+
+
+.SH CONFIGURATION OPTIONS
+When \fBcowpoke\fP is run the following configuration options are read from
+global, per\-user, and per\-project configuration files if present. File paths
+may be absolute or relative, the latter being relative to the \fBBUILDD_USER\fR's
+home directory. Since the paths are typically quoted when used, tilde expansion
+will \fBnot\fP be performed on them.
+
+.SS Global defaults
+These apply to every \fIarch\fP and \fIdist\fP in a single cowpoke invocation.
+
+.TP
+.B BUILDD_HOST
+The network address or fqdn of the build machine where \fBcowbuilder\fR is configured.
+This may be overridden by the \fB\-\-buildd\fP command line option.
+.TP
+.B BUILDD_USER
+The unprivileged user name for operations on the build machine. This defaults
+to the local name of the user executing \fBcowpoke\fP (or to a username that is
+specified in your SSH configuration for \fBBUILDD_HOST\fR), and may be overridden by the
+\fB\-\-buildd\-user\fP command line option.
+.TP
+.B BUILDD_ARCH
+The Debian architecture(s) to build for. This must match the \fBDEB_BUILD_ARCH\fP
+of the build chroot being used. It defaults to the local machine architecture where
+\fBcowpoke\fP is executed, and may be overridden by the \fB\-\-arch\fP command line
+option. A (quoted) space separated list of architectures may be used here to build
+for all of them in a single pass.
+.TP
+.B BUILDD_DIST
+The Debian distribution(s) to build for. A (quoted) space separated list of
+distributions may be used to build for all of them in a single pass. This may
+be overridden by the \fB\-\-dist\fP command line option.
+
+.TP
+.B INCOMING_DIR
+The directory path on the build machine where the source package will initially
+be placed. This must be writable by the \fBBUILDD_USER\fP.
+.TP
+.B PBUILDER_BASE
+The filesystem root for all pbuilder CoW and result files. \fIArch\fP and \fIdist\fP
+specific subdirectories will normally be created under this. The apt cache
+and temporary build directory will also be located under this path.
+
+.TP
+.B SIGN_KEYID
+If this option is set, it is expected to contain the gpg key ID to pass to
+\fBdebsign\fP(1) if the packages are to be remotely signed. You will be prompted
+to confirm whether you wish to sign the packages after all builds are complete.
+If this option is unset or an empty string, no attempt to sign packages will be
+made. It may be overridden on an \fIarch\fP and \fIdist\fP specific basis using
+the
+.IB arch _ dist _SIGN_KEYID
+option described below, or per-invocation with the \fB\-\-sign\fP command line
+option.
+
+.TP
+.B UPLOAD_QUEUE
+If this option is set, it is expected to contain a 'host' specification for
+\fBdput\fP(1) which will be used to upload them after they are signed. You will
+be prompted to confirm whether you wish to upload the packages after they are
+signed. If this option is unset or an empty string, no attempt to upload packages
+will be made. If \fBSIGN_KEYID\fP is not set, this option will be ignored entirely.
+It may be overridden on an \fIarch\fP and \fIdist\fP specific basis using the
+.IB arch _ dist _UPLOAD_QUEUE
+option described below, or per-invocation with the \fB\-\-upload\fP command line
+option.
+
+
+.TP
+.B BUILDD_ROOTCMD
+The command to use to gain root privileges on the remote build machine. If
+unset the default is \fBsudo\fP(8). This is only required to invoke \fBcowbuilder\fR
+and allow it to enter its chroot, so you may restrict this user to only being
+able to run that command with escalated privileges. Something like this in
+sudoers will enable invoking \fBcowbuilder\fR without an additional password entry
+required:
+.TP
+.B " "
+.RS 1.5i
+youruser ALL = NOPASSWD: /usr/sbin/cowbuilder
+.RE
+.TP
+.B " "
+Alternatively you could use SSH with a forwarded key, or whatever other
+mechanism suits your local access policy. Using \fBsu \-c\fR isn't really
+suitable here due to its quoting requirements being somewhat different to
+the rest.
+
+.TP
+.B DEBOOTSTRAP
+The utility to use when creating a new build root. Alternatives are
+.BR debootstrap " or " cdebootstrap .
+
+.TP
+.B RETURN_DIR
+If set, package files resulting from the build will be copied to the path
+(local or remote) that this is set to, after the build completes. The path
+must exist, it will not be created. This option is unset by default and can
+be overridden with \fB\-\-return\fR or \fB\-\-no-return\fR.
+
+
+.SS Arch and dist specific options
+These are variables of the form: $arch_$dist\fB_VAR\fR which apply only for a
+particular target arch/dist build.
+
+.TP
+.IB arch _ dist _RESULT_DIR
+The directory path on the build machine where the resulting packages (source and
+binary) will be found, and where older versions of the package that were built
+previously may be found. If any such older packages exist, \fBdebdiff\fP will
+be used to compare the new package with the previous version after the build is
+complete, and the result will be included in the build log. Files in it must be
+readable by the \fBBUILDD_USER\fP for sanity checking with \fBlintian\fP(1) and
+\fBdebdiff\fP(1), and for upload with \fBdput\fP(1). If this option is not
+specified for some arch and dist combination then it will default to
+.I $PBUILDER_BASE/$arch/$dist/result
+
+.TP
+.IB arch _ dist _BASE_PATH
+The directory where the CoW master files are to be found (or created if the
+\fB\-\-create\fP command line option was passed). If this option is not specified
+for some arch or dist then it will default to
+.I $PBUILDER_BASE/$arch/$dist/base.cow
+
+.TP
+.IB arch _ dist _BASE_DIST
+The code name to pass as the \fB\-\-distribution\fP option for cowbuilder instead
+of \fIdist\fP. This is necessary when \fIdist\fP is a locally significant name
+assigned to some specially configured build chroot, such as 'wheezy_backports',
+and not the formal suite name of a distro release known to debootstrap. This
+option cannot be overridden on the command line, since it would rarely, if ever,
+make any sense to change it for individual invocations of \fBcowpoke\fP. If this
+option is not specified for an arch and dist combination then it will default to
+.IR dist .
+
+.TP
+.IB arch _ dist _CREATE_OPTS
+A bash array containing additional options to pass verbatim to \fBcowbuilder\fP
+when this chroot is created for the first time (using the \fB\-\-create\fP option).
+This is useful when options like \fB\-\-othermirror\fP are wanted to create
+specialised chroot configurations such as 'wheezy_backports'. By default this
+is unset. All values set in it will be overridden if the \fB\-\-create\-opts\fP
+option is passed on the command line.
+
+Each element in this array corresponds to a single argument (in the ARGV sense)
+that will be passed to cowbuilder. This ensures that arguments which may contain
+whitespace or have strange quoting requirements or other special characters will
+not be mangled before they get to cowbuilder.
+
+Bash arrays are initialised using the following form:
+
+ OPTS=( "arg1" "arg 2" "\-\-option" "value" "\-\-opt=val" "etc. etc." )
+
+.TP
+.IB arch _ dist _UPDATE_OPTS
+A bash array containing additional options to pass verbatim to \fBcowbuilder\fP
+each time the base of this chroot is updated. It behaves similarly to the
+\fBCREATE_OPTS\fP option above, except for acting when the chroot is updated.
+
+.TP
+.IB arch _ dist _BUILD_OPTS
+A bash array containing additional options to pass verbatim to \fBcowbuilder\fP
+each time a package build is performed in this chroot. This is useful when you
+want to use some option like \fB\-\-twice\fP which cowpoke does not directly
+need to care about. It otherwise behaves similarly to \fBUPDATE_OPTS\fP above
+except that it acts during the build phase of \fBcowbuilder\fP.
+
+.TP
+.IB arch _ dist _SIGN_KEYID
+An optional arch and dist specific override for the global \fBSIGN_KEYID\fP
+option.
+
+.TP
+.IB arch _ dist _UPLOAD_QUEUE
+An optional arch and dist specific override for the global \fBUPLOAD_QUEUE\fP
+option.
+
+
+.SH CONFIGURATION FILES
+.TP
+.I /etc/cowpoke.conf
+Global configuration options. Will override hardcoded defaults.
+.TP
+.I ~/.cowpoke
+Per\-user configuration options. Will override any global configuration.
+.TP
+.I .cowpoke
+Per\-project configuration options. Will override any per-user or global
+configuration if \fBcowpoke\fP is called from the directory where they exist.
+
+If the environment variable \fBCOWPOKE_CONF\fP is set, it specifies an additional
+configuration file which will override all of those above. Options specified
+explicitly on the command line override all configuration files.
+
+
+.SH COWBUILDER CONFIGURATION
+There is nothing particularly special required to configure a \fBcowbuilder\fR instance
+for use with \fBcowpoke\fP. Simply create them in the flavour you require with
+`\fBcowbuilder \-\-create\fP` according to the \fBcowbuilder\fR documentation, then
+configure \fBcowpoke\fP with the user, arch, and path information required to
+access it, on the machines you wish to invoke it from (or alternatively configure
+\fBcowpoke\fP with the path, arch and distribution information and pass the
+\fB\-\-create\fP option to it on the first invocation). The build host running
+\fBcowbuilder\fR does not require \fBcowpoke\fP installed locally.
+
+The build machine should have the \fBlintian\fP and \fBdevscripts\fR packages
+installed for post-build sanity checking. Upon completion, the build log and
+the results of automated checks will be recorded in the \fBINCOMING_DIR\fP.
+If you wish to upload signed packages the build machine will also need
+\fBdput\fP(1) installed and configured to use the '\fIhost\fP' alias specified
+by \fBUPLOAD_QUEUE\fP. If \fBrsync\fP(1) is available on both the local and
+build machine, then it will be used to transfer the source package (this may
+save on some transfers of the \fIorig.tar.*\fP when building subsequent Debian
+revisions).
+
+The user executing \fBcowpoke\fP must have SSH access to the build machine as
+the \fBBUILDD_USER\fP. That user must be able to invoke \fBcowbuilder\fR as root by
+using the \fBBUILDD_ROOTCMD\fP. Signing keys are not required to be installed
+on the build machine (and will be ignored there if they are). If the package
+is signed, keys will be expected on the machine that executes \fBcowpoke\fP.
+
+When \fBcowpoke\fP is invoked, it will first attempt to update the \fBcowbuilder\fR
+image if that has not already been done on the same day. This is checked by
+the presence or absence of a \fIcowbuilder-$arch-$dist-update-log-$date\fP file
+in the \fBINCOMING_DIR\fP. You may move, remove, or touch this file if you wish
+the image to be updated more or less often than that. Its contents log the
+output of \fBcowbuilder\fR during the update (or creation) of the build root.
+
+
+.SH NOTES
+Since \fBcowbuilder\fP creates a chroot, and to do that you need root, \fBcowpoke\fP
+also requires some degree of root access. So all the horrible things that can
+go wrong with that may well one day rain down upon you. \fBcowbuilder\fR has been
+known to accidentally wipe out bind-mounted filesystems outside the chroot, and
+worse than that can easily happen. So be careful, keep good backups of things
+you don't want to lose on your build machine, and use \fBcowpoke\fP to keep all
+that on a machine that isn't your bleeding edge dev box with your last few hours
+of uncommitted work.
+
+.SH SEE ALSO
+.BR cowbuilder (1),
+.BR pbuilder (1),
+.BR ssh-agent (1),
+.BR sudoers (5)
+
+.SH AUTHOR
+.B cowpoke
+was written by Ron <\fIron@debian.org\fP>.
+
diff --git a/scripts/cowpoke.sh b/scripts/cowpoke.sh
new file mode 100755
index 0000000..54dd9fc
--- /dev/null
+++ b/scripts/cowpoke.sh
@@ -0,0 +1,542 @@
+#!/bin/bash
+# Simple shell script for driving a remote cowbuilder via ssh
+#
+# Copyright(C) 2007, 2008, 2009, 2011, 2012, 2014, Ron <ron@debian.org>
+# This script is distributed according to the terms of the GNU GPL.
+
+set -e
+
+#BUILDD_HOST=
+#BUILDD_USER=
+BUILDD_ARCH="$(dpkg-architecture -qDEB_BUILD_ARCH 2>/dev/null)"
+
+# The 'default' dist is whatever cowbuilder is locally configured for
+BUILDD_DIST="default"
+
+INCOMING_DIR="cowbuilder-incoming"
+PBUILDER_BASE="/var/cache/pbuilder"
+
+#SIGN_KEYID=
+#UPLOAD_QUEUE="ftp-master"
+BUILDD_ROOTCMD="sudo"
+
+REMOTE_SCRIPT="cowssh_it"
+DEBOOTSTRAP="cdebootstrap"
+
+for f in /etc/cowpoke.conf ~/.cowpoke .cowpoke "$COWPOKE_CONF"; do [ -r "$f" ] && . "$f"; done
+
+
+get_archdist_vars() {
+ _ARCHDIST_OPTIONS="RESULT_DIR BASE_PATH BASE_DIST CREATE_OPTS UPDATE_OPTS BUILD_OPTS SIGN_KEYID UPLOAD_QUEUE"
+ _RESULT_DIR="result"
+ _BASE_PATH="base.cow"
+
+ for arch in $BUILDD_ARCH; do
+ for dist in $BUILDD_DIST; do
+ for var in $_ARCHDIST_OPTIONS; do
+ eval "val=( \"\${${arch}_${dist}_${var}[@]}\" )"
+
+ if [ "$1" = "display" ]; then
+ case $var in
+ RESULT_DIR | BASE_PATH )
+ [ ${#val[@]} -gt 0 ] || eval "val=\"$PBUILDER_BASE/$arch/$dist/\$_$var\""
+ echo " ${arch}_${dist}_${var} = $val"
+ ;;
+
+ *_OPTS )
+ # Don't display these if they are overridden on the command line.
+ eval "override=( \"\${OVERRIDE_${var}[@]}\" )"
+ [ ${#override[@]} -gt 0 ] || [ ${#val[@]} -eq 0 ] ||
+ echo " ${arch}_${dist}_${var} =$(printf " '%s'" "${val[@]}")"
+ ;;
+
+ * )
+ [ ${#val[@]} -eq 0 ] || echo " ${arch}_${dist}_${var} = $val"
+ ;;
+ esac
+ else
+ case $var in
+ RESULT_DIR | BASE_PATH )
+ # These are always a single value, and must always be set,
+ # either by the user or to their default value.
+ [ ${#val[@]} -gt 0 ] || eval "val=\"$PBUILDER_BASE/$arch/$dist/\$_$var\""
+ echo "${arch}_${dist}_${var}='$val'"
+ ;;
+
+ *_OPTS )
+ # These may have zero, one, or many values which we must not word-split.
+ # They can safely remain unset if there are no values.
+ #
+ # We don't need to worry about the command line overrides here,
+ # they will be taken care of in the remote script.
+ [ ${#val[@]} -eq 0 ] ||
+ echo "${arch}_${dist}_${var}=($(printf " %q" "${val[@]}") )"
+ ;;
+
+ SIGN_KEYID | UPLOAD_QUEUE )
+ # We don't need these in the remote script
+ ;;
+
+ * )
+ # These may have zero or one value.
+ # They can safely remain unset if there are no values.
+ [ ${#val[@]} -eq 0 ] || echo "${arch}_${dist}_${var}='$val'"
+ ;;
+ esac
+ fi
+ done
+ done
+ done
+}
+
+display_override_vars() {
+ _OVERRIDE_OPTIONS="CREATE_OPTS UPDATE_OPTS BUILD_OPTS SIGN_KEYID UPLOAD_QUEUE"
+
+ for var in $_OVERRIDE_OPTIONS; do
+ eval "override=( \"\${OVERRIDE_${var}[@]}\" )"
+ [ ${#override[@]} -eq 0 ] || echo " override: $var =$(printf " '%s'" "${override[@]}")"
+ done
+}
+
+
+PROGNAME=${0##*/}
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is Copyright 2007-2014, Ron <ron@debian.org>.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License."
+ exit 0
+}
+
+usage() {
+ cat 1>&2 <<EOF
+
+cowpoke [options] package.dsc
+
+ Uploads a Debian source package to a cowbuilder host and builds it,
+ optionally also signing and uploading the result to an incoming queue.
+ The following options are supported:
+
+ --arch="arch" Specify the Debian architecture(s) to build for.
+ --dist="dist" Specify the Debian distribution(s) to build for.
+ --buildd="host" Specify the remote host to build on.
+ --buildd-user="name" Specify the remote user to build as.
+ --create Create the remote cowbuilder root if necessary.
+ --return[="path"] Copy results of the build to 'path'. If path is
+ not specified, return them to the current directory.
+ --no-return Do not copy results of the build to RETURN_DIR
+ (overriding a path set for it in the config files).
+ --sign="keyid" Specify the key to sign packages with.
+ --upload="queue" Specify the dput queue to upload signed packages to.
+
+ The current default configuration is:
+
+ BUILDD_HOST = $BUILDD_HOST
+ BUILDD_USER = $BUILDD_USER
+ BUILDD_ARCH = $BUILDD_ARCH
+ BUILDD_DIST = $BUILDD_DIST
+ RETURN_DIR = $RETURN_DIR
+ SIGN_KEYID = $SIGN_KEYID
+ UPLOAD_QUEUE = $UPLOAD_QUEUE
+
+ The expected remote paths are:
+
+ INCOMING_DIR = $INCOMING_DIR
+ PBUILDER_BASE = ${PBUILDER_BASE:-/}
+
+$(get_archdist_vars display)
+$(display_override_vars)
+
+ The cowbuilder image must have already been created on the build host
+ and the expected remote paths must already exist if the --create option
+ is not passed. You must have ssh access to the build host as BUILDD_USER
+ if that is set, else as the user executing cowpoke or a user specified
+ in your ssh config for '$BUILDD_HOST'.
+ That user must be able to execute cowbuilder as root using '$BUILDD_ROOTCMD'.
+
+EOF
+
+ exit $1
+}
+
+
+for arg; do
+ case "$arg" in
+ --arch=*)
+ BUILDD_ARCH="${arg#*=}"
+ ;;
+
+ --dist=*)
+ BUILDD_DIST="${arg#*=}"
+ ;;
+
+ --buildd=*)
+ BUILDD_HOST="${arg#*=}"
+ ;;
+
+ --buildd-user=*)
+ BUILDD_USER="${arg#*=}"
+ ;;
+
+ --create)
+ CREATE_COW="yes"
+ ;;
+
+ --return=*)
+ RETURN_DIR="${arg#*=}"
+ ;;
+
+ --return)
+ RETURN_DIR=.
+ ;;
+
+ --no-return)
+ RETURN_DIR=
+ ;;
+
+ --dpkg-opts=*)
+ # This one is a bit tricky, given the combination of the calling convention here,
+ # the calling convention for cowbuilder, and the behaviour of things that might
+ # pass this option to us. Some things, like when we are called from the gitpkg
+ # hook using options from git-config, will preserve any quoting that was used in
+ # the .gitconfig file, which is natural for anyone to want to use in a construct
+ # like: options = --dpkg-opts='-uc -us -j6'. People are going to cringe if we
+ # tell them they must not use quotes there no matter how much it may 'make sense'
+ # if you know too much about the internals. And it will only get worse when we
+ # then tell them they must quote it like that if they type it directly in their
+ # shell ...
+ #
+ # So we do the only thing that seems sensible, and try to Deal With It here.
+ # If the outermost characters are paired quotes, we manually strip them off.
+ # We don't want to let the shell do quote removal, since that might change a
+ # part of this which we don't want modified.
+ # We collect however many sets of those we are passed in an array, which we'll
+ # then combine back into a single argument at the final point of use.
+ #
+ # Which _should_ DTRT for anyone who isn't trying to blow this up deliberately
+ # and maybe will still do it for them too in spite of their efforts. But unless
+ # someone finds a sensible case this fails on, I'm not going to cry over people
+ # who want to stuff up their own system with input they created themselves.
+ val=${arg#*=}
+ [[ $val == \'*\' || $val == \"*\" ]] && val=${val:1:-1}
+ DEBBUILDOPTS+=( "$val" )
+ ;;
+
+ --create-opts=*)
+ OVERRIDE_CREATE_OPTS+=( "${arg#*=}" )
+ ;;
+
+ --update-opts=*)
+ OVERRIDE_UPDATE_OPTS+=( "${arg#*=}" )
+ ;;
+
+ --build-opts=*)
+ OVERRIDE_BUILD_OPTS+=( "${arg#*=}" )
+ ;;
+
+ --sign=*)
+ OVERRIDE_SIGN_KEYID=${arg#*=}
+ ;;
+
+ --upload=*)
+ OVERRIDE_UPLOAD_QUEUE=${arg#*=}
+ ;;
+
+ *.dsc)
+ DSC="$arg"
+ ;;
+
+ --help)
+ usage 0
+ ;;
+
+ --version)
+ version
+ ;;
+
+ *)
+ echo "ERROR: unrecognised option '$arg'"
+ usage 1
+ ;;
+ esac
+done
+
+if [ -z "$REMOTE_SCRIPT" ]; then
+ echo "No remote script name set. Aborted."
+ exit 1
+fi
+if [ -z "$DSC" ]; then
+ echo "ERROR: No package .dsc specified"
+ usage 1
+fi
+if ! [ -r "$DSC" ]; then
+ echo "ERROR: '$DSC' not found."
+ exit 1
+fi
+if [ -z "$BUILDD_ARCH" ]; then
+ echo "No BUILDD_ARCH set. Aborted."
+ exit 1
+fi
+if [ -z "$BUILDD_HOST" ]; then
+ echo "No BUILDD_HOST set. Aborted."
+ exit 1
+fi
+if [ -z "$BUILDD_ROOTCMD" ]; then
+ echo "No BUILDD_ROOTCMD set. Aborted."
+ exit 1
+fi
+if [ -e "$REMOTE_SCRIPT" ]; then
+ echo "$REMOTE_SCRIPT file already exists and will be overwritten."
+ echo -n "Do you wish to continue (Y/n)? "
+ read -e yesno
+ case "$yesno" in
+ N* | n*)
+ echo "Ok, bailing out."
+ echo "You should set the REMOTE_SCRIPT variable to some other value"
+ echo "if this name conflicts with something you already expect to use"
+ exit 1
+ ;;
+ *) ;;
+ esac
+fi
+
+[ -z "$BUILDD_USER" ] || BUILDD_USER="$BUILDD_USER@"
+
+PACKAGE="$(basename $DSC .dsc)"
+DATE="$(date +%Y%m%d 2>/dev/null)"
+
+
+cat > "$REMOTE_SCRIPT" <<-EOF
+ #!/bin/bash
+ # cowpoke generated remote worker script.
+ # Normally this should have been deleted already, you can safely remove it now.
+
+ compare_changes() {
+ p1="\${1%_*.changes}"
+ p2="\${2%_*.changes}"
+ p1="\${p1##*_}"
+ p2="\${p2##*_}"
+
+ dpkg --compare-versions "\$p1" gt "\$p2"
+ }
+
+ $(get_archdist_vars)
+
+ for arch in $BUILDD_ARCH; do
+ for dist in $BUILDD_DIST; do
+
+ echo " ------- Begin build for \$arch \$dist -------"
+
+ CHANGES="\$arch.changes"
+ LOGFILE="$INCOMING_DIR/build.${PACKAGE}_\$arch.\$dist.log"
+ UPDATELOG="$INCOMING_DIR/cowbuilder-\${arch}-\${dist}-update-log-$DATE"
+ eval "RESULT_DIR=\"\\\$\${arch}_\${dist}_RESULT_DIR\""
+ eval "BASE_PATH=\"\\\$\${arch}_\${dist}_BASE_PATH\""
+ eval "BASE_DIST=\"\\\$\${arch}_\${dist}_BASE_DIST\""
+ eval "CREATE_OPTS=( \"\\\${\${arch}_\${dist}_CREATE_OPTS[@]}\" )"
+ eval "UPDATE_OPTS=( \"\\\${\${arch}_\${dist}_UPDATE_OPTS[@]}\" )"
+ eval "BUILD_OPTS=( \"\\\${\${arch}_\${dist}_BUILD_OPTS[@]}\" )"
+
+ [ -n "\$BASE_DIST" ] || BASE_DIST=\$dist
+ [ ${#OVERRIDE_CREATE_OPTS[@]} -eq 0 ] || CREATE_OPTS=("${OVERRIDE_CREATE_OPTS[@]}")
+ [ ${#OVERRIDE_UPDATE_OPTS[@]} -eq 0 ] || UPDATE_OPTS=("${OVERRIDE_UPDATE_OPTS[@]}")
+ [ ${#OVERRIDE_BUILD_OPTS[@]} -eq 0 ] || BUILD_OPTS=("${OVERRIDE_BUILD_OPTS[@]}")
+ [ ${#DEBBUILDOPTS[*]} -eq 0 ] || DEBBUILDOPTS=("--debbuildopts" "${DEBBUILDOPTS[*]}")
+
+
+ # Sort the list of old changes files for this package to try and
+ # determine the most recent one preceding this version. We will
+ # debdiff to this revision in the final sanity checks if one exists.
+ # This is adapted from the insertion sort trickery in git-debimport.
+
+ OLD_CHANGES="\$(find "\$RESULT_DIR/" -maxdepth 1 -type f \\
+ -name "${PACKAGE%%_*}_*_\$CHANGES" 2>/dev/null \\
+ | sort 2>/dev/null)"
+ P=( \$OLD_CHANGES )
+ count=\${#P[*]}
+
+ for(( i=1; i < count; ++i )) do
+ j=i
+ #echo "was \$i: \${P[i]}"
+ while ((\$j)) && compare_changes "\${P[j-1]}" "\${P[i]}"; do ((--j)); done
+ ((i==j)) || P=( \${P[@]:0:j} \${P[i]} \${P[j]} \${P[@]:j+1:i-(j+1)} \${P[@]:i+1} )
+ done
+ #for(( i=1; i < count; ++i )) do echo "now \$i: \${P[i]}"; done
+
+ OLD_CHANGES=
+ for(( i=count-1; i >= 0; --i )) do
+ if [ "\${P[i]}" != "\$RESULT_DIR/${PACKAGE}_\$CHANGES" ]; then
+ OLD_CHANGES="\${P[i]}"
+ break
+ fi
+ done
+
+
+ set -eo pipefail
+
+ if ! [ -e "\$BASE_PATH" ]; then
+ if [ "$CREATE_COW" = "yes" ]; then
+ mkdir -p "\$RESULT_DIR"
+ mkdir -p "\$(dirname \$BASE_PATH)"
+ mkdir -p "$PBUILDER_BASE/aptcache"
+ $BUILDD_ROOTCMD cowbuilder --create --distribution \$BASE_DIST \\
+ --basepath "\$BASE_PATH" \\
+ --aptcache "$PBUILDER_BASE/aptcache" \\
+ --debootstrap "$DEBOOTSTRAP" \\
+ --debootstrapopts --arch="\$arch" \\
+ "\${CREATE_OPTS[@]}" \\
+ 2>&1 | tee "\$UPDATELOG"
+ else
+ echo "SKIPPING \$dist/\$arch build, '\$BASE_PATH' does not exist" | tee "\$LOGFILE"
+ echo " use the cowpoke --create option to bootstrap a new build root" | tee -a "\$LOGFILE"
+ continue
+ fi
+ elif ! [ -e "\$UPDATELOG" ]; then
+ $BUILDD_ROOTCMD cowbuilder --update --distribution \$BASE_DIST \\
+ --basepath "\$BASE_PATH" \\
+ --aptcache "$PBUILDER_BASE/aptcache" \\
+ --autocleanaptcache \\
+ "\${UPDATE_OPTS[@]}" \\
+ 2>&1 | tee "\$UPDATELOG"
+ fi
+ $BUILDD_ROOTCMD cowbuilder --build --basepath "\$BASE_PATH" \\
+ --aptcache "$PBUILDER_BASE/aptcache" \\
+ --buildplace "$PBUILDER_BASE/build" \\
+ --buildresult "\$RESULT_DIR" \\
+ "\${DEBBUILDOPTS[@]}" \\
+ "\${BUILD_OPTS[@]}" \\
+ "$INCOMING_DIR/$(basename $DSC)" 2>&1 \\
+ | tee "\$LOGFILE"
+
+ set +eo pipefail
+
+
+ echo >> "\$LOGFILE"
+ echo "lintian \$RESULT_DIR/${PACKAGE}_\$CHANGES" >> "\$LOGFILE"
+ lintian "\$RESULT_DIR/${PACKAGE}_\$CHANGES" 2>&1 | tee -a "\$LOGFILE"
+
+ if [ -n "\$OLD_CHANGES" ]; then
+ echo >> "\$LOGFILE"
+ echo "debdiff \$OLD_CHANGES ${PACKAGE}_\$CHANGES" >> "\$LOGFILE"
+ debdiff "\$OLD_CHANGES" "\$RESULT_DIR/${PACKAGE}_\$CHANGES" 2>&1 \\
+ | tee -a "\$LOGFILE"
+ else
+ echo >> "\$LOGFILE"
+ echo "No previous packages for \$dist/\$arch to compare" >> "\$LOGFILE"
+ fi
+
+ done
+ done
+
+EOF
+chmod 755 "$REMOTE_SCRIPT"
+
+
+if ! dcmd rsync -vP $DSC "$REMOTE_SCRIPT" "$BUILDD_USER$BUILDD_HOST:$INCOMING_DIR";
+then
+ dcmd scp $DSC "$REMOTE_SCRIPT" "$BUILDD_USER$BUILDD_HOST:$INCOMING_DIR"
+fi
+
+ssh -t "$BUILDD_USER$BUILDD_HOST" "\"$INCOMING_DIR/$REMOTE_SCRIPT\" && rm -f \"$INCOMING_DIR/$REMOTE_SCRIPT\""
+
+echo
+echo "Build completed."
+
+for arch in $BUILDD_ARCH; do
+ CHANGES="$arch.changes"
+ for dist in $BUILDD_DIST; do
+
+ sign_keyid=$OVERRIDE_SIGN_KEYID
+ [ -n "$sign_keyid" ] || eval "sign_keyid=\"\$${arch}_${dist}_SIGN_KEYID\""
+ [ -n "$sign_keyid" ] || sign_keyid="$SIGN_KEYID"
+ [ -n "$sign_keyid" ] || continue
+
+ eval "RESULT_DIR=\"\$${arch}_${dist}_RESULT_DIR\""
+ [ -n "$RESULT_DIR" ] || RESULT_DIR="$PBUILDER_BASE/$arch/$dist/result"
+
+ _desc="$dist/$arch"
+ [ "$dist" != "default" ] || _desc="$arch"
+
+ while true; do
+ echo -n "Sign $_desc $PACKAGE with key '$sign_keyid' (yes/no)? "
+ read -e yesno
+ case "$yesno" in
+ YES | yes)
+ debsign "-k$sign_keyid" -r "$BUILDD_USER$BUILDD_HOST" "$RESULT_DIR/${PACKAGE}_$CHANGES"
+
+ upload_queue=$OVERRIDE_UPLOAD_QUEUE
+ [ -n "$upload_queue" ] || eval "upload_queue=\"\$${arch}_${dist}_UPLOAD_QUEUE\""
+ [ -n "$upload_queue" ] || upload_queue="$UPLOAD_QUEUE"
+
+ if [ -n "$upload_queue" ]; then
+ while true; do
+ echo -n "Upload $_desc $PACKAGE to '$upload_queue' (yes/no)? "
+ read -e upload
+ case "$upload" in
+ YES | yes)
+ ssh "$BUILDD_USER$BUILDD_HOST" \
+ "cd \"$RESULT_DIR/\" && dput \"$upload_queue\" \"${PACKAGE}_$CHANGES\""
+ break 2
+ ;;
+
+ NO | no)
+ echo "Package upload skipped."
+ break 2
+ ;;
+ *)
+ echo "Please answer 'yes' or 'no'"
+ ;;
+ esac
+ done
+ fi
+ break
+ ;;
+
+ NO | no)
+ echo "Package signing skipped."
+ break
+ ;;
+ *)
+ echo "Please answer 'yes' or 'no'"
+ ;;
+ esac
+ done
+ done
+done
+
+if [ -n "$RETURN_DIR" ]; then
+ for arch in $BUILDD_ARCH; do
+ CHANGES="$arch.changes"
+ for dist in $BUILDD_DIST; do
+
+ eval "RESULT_DIR=\"\$${arch}_${dist}_RESULT_DIR\""
+ [ -n "$RESULT_DIR" ] || RESULT_DIR="$PBUILDER_BASE/$arch/$dist/result"
+
+
+ cache_dir="./cowpoke-return-cache"
+ mkdir -p $cache_dir
+
+ scp "$BUILDD_USER$BUILDD_HOST:$RESULT_DIR/${PACKAGE}_$CHANGES" $cache_dir
+
+ for f in $(cd $cache_dir && dcmd ${PACKAGE}_$CHANGES); do
+ RESULTS="$RESULTS $RESULT_DIR/$f"
+ done
+
+ rm -f $cache_dir/${PACKAGE}_$CHANGES
+ rmdir $cache_dir
+
+
+ if ! rsync -vP "$BUILDD_USER$BUILDD_HOST:$RESULTS" "$RETURN_DIR" ;
+ then
+ scp "$BUILDD_USER$BUILDD_HOST:$RESULTS" "$RETURN_DIR"
+ fi
+
+ done
+ done
+fi
+
+rm -f "$REMOTE_SCRIPT"
+
+# vi:sts=4:sw=4:noet:foldmethod=marker
diff --git a/scripts/cvs-debc.1 b/scripts/cvs-debc.1
new file mode 100644
index 0000000..98a399e
--- /dev/null
+++ b/scripts/cvs-debc.1
@@ -0,0 +1,67 @@
+.TH CVS-DEBC 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+cvs-debc \- view contents of a cvs-buildpackage/cvs-debuild generated package
+.SH SYNOPSIS
+\fBcvs-debc\fP [\fIoptions\fR] [\fIpackage\fR ...]
+.SH DESCRIPTION
+\fBcvs-debc\fR is run from the CVS working directory after
+\fBcvs-buildpackage\fR or \fBcvs-debuild\fR. It uses the
+\fBcvs-buildpackage\fR system to locate the \fI.changes\fR file
+generated in that run. It then displays information about the \fI.deb\fR
+files which were generated in that run, by running \fBdpkg-deb \-I\fR
+and \fBdpkg-deb \-c\fR on every \fI.deb\fR archive listed in
+the \fI.changes\fR file, assuming that all of the \fI.deb\fR archives
+live in the same directory as the \fI.changes\fR file. It is
+useful for ensuring that the expected files have ended up in the
+Debian package.
+.PP
+If a list of packages is given on the command line, then only those
+debs with names in this list of packages will be processed.
+.PP
+Note that unlike \fBcvs-buildpackage\fR, the only way to specify the
+source package name is with the \fB\-P\fR option; you cannot simply
+have it as the last command-line parameter.
+.SH OPTIONS
+All current \fBcvs-buildpackage\fR options are silently accepted;
+however, only the ones listed below have any effect. For more details
+on all of them, see the \fBcvs-buildpackage\fR(1) manpage.
+.TP
+\fB\-a\fIdebian-architecture\fR, \fB\-t\fIGNU-system-type\fR
+See \fBdpkg-architecture\fR(1) for a description of these options.
+They affect the search for the \fI.changes\fR file. They are provided
+to mimic the behaviour of \fBdpkg-buildpackage\fR when determining the
+name of the \fI.changes\fR file.
+.TP
+.BR \-M\fImodule
+The name of the CVS module.
+.TP
+.BR \-P\fIpackage
+The name of the package.
+.TP
+.B \-V\fIversion
+The version number of the package.
+.TP
+.B \-T\fItag
+The CVS tag to use for exporting sources.
+.TP
+.B \-R\fIroot\ directory
+Root of the original sources archive.
+.TP
+.B \-W\fIwork directory
+The full path name for the cvs-buildpackage working directory.
+.TP
+.B \-x\fIprefix
+This option provides the CVS default module prefix.
+.TP
+\fB\-\-help\fR, \fB\-\-version\fR
+Show help message and version information respectively.
+.SH "SEE ALSO"
+.BR cvs-buildpackage (1),
+.BR cvs-debi (1),
+.BR cvs-debuild (1),
+.BR debc (1)
+.SH AUTHOR
+\fBcvs-buildpackage\fR was written by Manoj Srivastava, and the
+current version of \fBdebi\fR was written by Julian Gilbey
+<jdg@debian.org>. They have been combined into this program by
+Julian Gilbey.
diff --git a/scripts/cvs-debi.1 b/scripts/cvs-debi.1
new file mode 100644
index 0000000..bb0ac8c
--- /dev/null
+++ b/scripts/cvs-debi.1
@@ -0,0 +1,71 @@
+.TH CVS-DEBI 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+cvs-debi \- install cvs-buildpackage/cvs-debuild generated package
+.SH SYNOPSIS
+\fBcvs-debi\fP [\fIoptions\fR] [\fIpackage\fR ...]
+.SH DESCRIPTION
+\fBcvs-debi\fR is run from the CVS working directory after
+\fBcvs-buildpackage\fR or \fBcvs-debuild\fR. It uses the
+\fBcvs-buildpackage\fR system to locate the \fI.changes\fR file
+generated in that run. It then runs \fBdebpkg \-i\fR on
+every \fI.deb\fR archive listed in the \fI.changes\fR file to install
+them, assuming that all of the \fI.deb\fR archives live in the same
+directory as the \fI.changes\fR file. Note that you probably don't
+want to run this program on a \fI.changes\fR file relating to a
+different architecture after cross-compiling the package!
+.PP
+If a list of packages is given on the command line, then only those
+debs with names in this list of packages will be installed.
+.PP
+Note that unlike \fBcvs-buildpackage\fR, the only way to specify the
+source package name is with the \fB\-P\fR option; you cannot simply
+have it as the last command-line parameter.
+.PP
+Since installing a package requires root privileges, \fBdebi\fR calls
+\fBdebpkg\fR rather than \fBdpkg\fR directly. Thus \fBdebi\fR will
+only be useful if it is either being run as root or \fBdebpkg\fR can
+be run as root. See \fBdebpkg\fR(1) for more details.
+.SH OPTIONS
+All current \fBcvs-buildpackage\fR options are silently accepted;
+however, only the ones listed below have any effect. For more details
+on all of them, see the \fBcvs-buildpackage\fR(1) manpage.
+.TP
+\fB\-a\fIdebian-architecture\fR, \fB\-t\fIGNU-system-type\fR
+See \fBdpkg-architecture\fR(1) for a description of these options.
+They affect the search for the \fI.changes\fR file. They are provided
+to mimic the behaviour of \fBdpkg-buildpackage\fR when determining the
+name of the \fI.changes\fR file.
+.TP
+.BR \-M\fImodule
+The name of the CVS module.
+.TP
+.BR \-P\fIpackage
+The name of the package.
+.TP
+.B \-V\fIversion
+The version number of the package.
+.TP
+.B \-T\fItag
+The CVS tag to use for exporting sources.
+.TP
+.B \-R\fIroot\ directory
+Root of the original sources archive.
+.TP
+.B \-W\fIwork directory
+The full path name for the cvs-buildpackage working directory.
+.TP
+.B \-x\fIprefix
+This option provides the CVS default module prefix.
+.TP
+\fB\-\-help\fR, \fB\-\-version\fR
+Show help message and version information respectively.
+.SH "SEE ALSO"
+.BR cvs-buildpackage (1),
+.BR cvs-debc (1),
+.BR cvs-debuild (1),
+.BR debi (1)
+.SH AUTHOR
+\fBcvs-buildpackage\fR was written by Manoj Srivastava, and the
+current version of \fBdebi\fR was written by Julian Gilbey
+<jdg@debian.org>. They have been combined into this program by
+Julian Gilbey.
diff --git a/scripts/cvs-debi.sh b/scripts/cvs-debi.sh
new file mode 100755
index 0000000..49b89d9
--- /dev/null
+++ b/scripts/cvs-debi.sh
@@ -0,0 +1,370 @@
+#!/bin/bash
+
+# cvs-debi: Install current version of deb package
+# cvs-debc: List contents of current version of deb package
+#
+# Based on debi/debc; see them for copyright information
+# Based on cvs-buildpackage, copyright 1997 Manoj Srivastava
+# (CVS Id: cvs-buildpackage,v 1.58 2003/08/22 17:24:29 srivasta Exp)
+# This code is copyright 2003, Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+set -e
+
+PROGNAME=${0##*/} PROGNAME="${PROGNAME%.sh}" # .sh for debugging purposes
+
+usage() {
+ if [ "$PROGNAME" = cvs-debi ]; then usage_i
+ elif [ "$PROGNAME" = cvs-debc ]; then usage_c
+ else echo "Unrecognised invocation name: $PROGNAME" >&2; exit 1
+ fi;
+}
+
+usage_i() {
+ echo \
+"Usage: $PROGNAME [options] [package ...]
+ Install the .deb file(s) just created by cvs-buildpackage or cvs-debuild,
+ as listed in the .changes file generated on that run. If packages are
+ listed, only install those specified binary packages from the .changes file.
+
+ Note that unlike cvs-buildpackage, the only way to specify the
+ source package name is with the -P option; you cannot simply have it
+ as the last parameter.
+
+ Also uses the cvs-buildpackage configuration files to determine the
+ location of the build tree, as described in the manpage.
+
+ Available options:
+ -M<module> CVS module name
+ -P<package> Package name
+ -V<version> Package version
+ -T<tag> CVS tag to use
+ -R<root dir> Root directory
+ -W<work dir> Working directory
+ -x<prefix> CVS default module prefix
+ -a<arch> Search for .changes file made for Debian build <arch>
+ -t<target> Search for .changes file made for GNU <target> arch
+ --help Show this message
+ --version Show version and copyright information
+ Other cvs-buildpackage options will be silently ignored."
+}
+
+usage_c() {
+ echo \
+"Usage: $PROGNAME [options] [package ...]
+ Display the contents of the .deb file(s) just created by
+ cvs-buildpackage or cvs-debuild, as listed in the .changes file generated
+ on that run. If packages are listed, only display those specified binary
+ packages from the .changes file.
+
+ Note that unlike cvs-buildpackage, the only way to specify the
+ source package name is with the -P option; you cannot simply have it
+ as the last parameter.
+
+ Also uses the cvs-buildpackage configuration files to determine the
+ location of the build tree, as described in its manpage.
+
+ Available options:
+ -M<module> CVS module name
+ -P<package> Package name
+ -V<version> Package version
+ -T<tag> CVS tag to use
+ -R<root dir> Root directory
+ -W<work dir> Working directory
+ -x<prefix> CVS default module prefix
+ -a<arch> Search for .changes file made for Debian build <arch>
+ -t<target> Search for .changes file made for GNU <target> arch
+ --help Show this message
+ --version Show version and copyright information
+ Other cvs-buildpackage options will be silently ignored."
+}
+
+version() { echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2003, Julian Gilbey <jdg@debian.org>,
+all rights reserved.
+Based on original code by Christoph Lameter and Manoj Srivastava.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of
+the GNU General Public License, version 2 or later."
+}
+
+setq() {
+ # Variable Value Doc string
+ if [ "x$2" = "x" ]; then
+ echo >&2 "$PROGNAME: Unable to determine $3"
+ exit 1;
+ else
+ if [ ! "x$Verbose" = "x" ]; then
+ echo "$PROGNAME: $3 is $2";
+ fi
+ eval "$1=\"\$2\"";
+ fi
+}
+
+# Is cvs-buildpackage installed?
+if ! command -v cvs-buildpackage > /dev/null; then
+ echo "$PROGNAME: need the cvs-buildpackage package installed to run this" >&2
+ exit 1
+fi
+
+# Long term variables, which may be set in the cvsdeb config file or the
+# environment:
+# rootdir workdir (if all original sources are kept in one dir)
+
+TEMPDIR=$(mktemp -dt cvs-debi.XXXXXXXX) || {
+ echo "$PROGNAME: unable to create temporary directory" >&2
+ echo "Aborting..." >&2
+ exit 1
+}
+TEMPFILE=$TEMPDIR/cl-tmp
+trap 'rm -f "$TEMPFILE"; rmdir "$TEMPDIR"' EXIT
+
+TAGOPT=
+
+# Command line; will bomb out if unrecognised options
+TEMP=$(getopt -a -s bash \
+ -o hC:EH:G:M:P:R:T:U:V:W:Ff:dcnr:x:Bp:Dk:a:Sv:m:e:i:I:t: \
+ --long help,version,ctp,tC,sgpg,spgp,us,uc,op \
+ --long si,sa,sd,ap,sp,su,sk,sr,sA,sP,sU,sK,sR,ss,sn \
+ -n "$PROGNAME" -- "$@")
+eval set -- $TEMP
+
+while true ; do
+ case "$1" in
+ -h|--help) usage; exit 0 ; shift ;;
+ --version) version; exit 0 ; shift ;;
+ -M) opt_cvsmodule="$2" ; shift 2 ;;
+ -P) opt_package="$2" ; shift 2 ;;
+ -R) opt_rootdir="$2" ; shift 2 ;;
+ -T) opt_tag="$2" ; shift 2 ;;
+ -V) opt_version="$2" ; shift 2 ;;
+ -W) opt_workdir="$2" ; shift 2 ;;
+ -x) opt_prefix="$2" ; shift 2 ;;
+ -a) targetarch="$2" ; shift 2 ;;
+ -t) if [ "$2" != "C" ]; then targetgnusystem="$2"; fi
+ shift 2 ;;
+
+ # everything else is silently ignored
+ -[CHfGUr]) shift 2 ;;
+ -[FnE]) shift ;;
+ --ctp|--op|--tC) shift ;;
+ -[dDBbS]) shift ;;
+ -p) shift 2 ;;
+ --us|--uc|--sgpg|--spgp) shift ;;
+ --s[idapukrAPUKRns]) shift ;;
+ --ap) shift ;;
+ -[kvmeiI]) shift 2 ;;
+
+ --) shift ; break ;;
+ *) echo >&2 "Internal error! ($1)"
+ usage; exit 1 ;;
+ esac
+done
+
+if [ "x$opt_cvsmodule" = "x" -a "x$opt_package" = "x" -a \
+ ! -e 'debian/changelog' ] ; then
+ echo >&2 "$PROGNAME should be run in the top working directory of"
+ echo >&2 "a Debian Package, or an explicit package (or CVS module) name"
+ echo >&2 "should be given."
+ exit 1
+fi
+
+if [ "x$opt_tag" != "x" ]; then
+ TAGOPT=-r$opt_tag
+fi
+
+# Command line, env variable, config file, or default
+# This anomalous position is in case we need to check out the changelog
+# below (anomalous since we have not loaded the config file yet)
+if [ ! "x$opt_prefix" = "x" ]; then
+ prefix="$opt_prefix"
+elif [ ! "x$CVSDEB_PREFIX" = "x" ]; then
+ prefix="$CVSDEB_PREFIX"
+elif [ ! "x$conf_prefix" = "x" ]; then
+ prefix="$conf_prefix"
+else
+ prefix=""
+fi
+
+# put a slash at the end of the prefix
+if [ "X$prefix" != "X" ]; then
+ prefix="$prefix/";
+ prefix=$(echo $prefix | sed 's://:/:g');
+fi
+
+if [ ! -f CVS/Root ]; then
+ if [ "X$CVSROOT" = "X" ]; then
+ echo "no CVS/Root file found, and CVSROOT var is empty" >&2
+ exit 1
+ fi
+else
+ CVSROOT=$(cat CVS/Root)
+ export CVSROOT
+fi
+
+if [ "x$opt_package" = "x" ]; then
+ # Get the official package name and version.
+ if [ -f debian/changelog ]; then
+ # Ok, changelog exists
+ setq "package" \
+ "`dpkg-parsechangelog -SSource`" \
+ "source package"
+ setq "version" \
+ "`dpkg-parsechangelog -SVersion`" \
+ "source version"
+ elif [ "x$opt_cvsmodule" != "x" ]; then
+ # Hmm. Well, see if we can checkout the changelog file
+ rm -f $TEMPFILE
+ cvs -q co -p $TAGOPT $opt_cvsmodule/debian/changelog > $TEMPFILE
+ setq "package" \
+ "`dpkg-parsechangelog -l$TEMPFILE -SSource`" \
+ "source package"
+ setq "version" \
+ "`dpkg-parsechangelog -l$TEMPFILE -SVersion`" \
+ "source version"
+ rm -f "$TEMPFILE"
+ else
+ # Well. We don't know what this package is.
+ echo >&2 " This does not appear be a Debian source tree, since"
+ echo >&2 " there is no debian/changelog, and there was no"
+ echo >&2 " package name or cvs module given on the command line"
+ echo >&2 " it is hard to figure out what the package name "
+ echo >&2 " should be. I give up."
+ exit 1
+ fi
+else
+ # The user knows best; package name is provided
+ setq "package" "$opt_package" "source package"
+
+ # Now, the version number
+ if [ "x$opt_version" != "x" ]; then
+ # All hail the user provided value
+ setq "version" "$opt_version" "source package"
+ elif [ -f debian/changelog ]; then
+ # Fine, see what the changelog says
+ setq "version" \
+ "`dpkg-parsechangelog -SVersion`" \
+ "source version"
+ elif [ "x$opt_cvsmodule" != "x" ]; then
+ # Hmm. The CVS module name is known, so lets us try exporting changelog
+ rm -f $TEMPFILE
+ cvs -q co -p $TAGOPT $opt_cvsmodule/debian/changelog > $TEMPFILE
+ setq "version" \
+ "`dpkg-parsechangelog -l$TEMPFILE -SVersion`" \
+ "source version"
+ rm -f "$TEMPFILE"
+ else
+ # Ok, try exporting the package name
+ rm -f $TEMPFILE
+ cvsmodule="${prefix}$package"
+ cvs -q co -p $TAGOPT $cvsmodule/debian/changelog > $TEMPFILE
+ setq "version" \
+ "`dpkg-parsechangelog -l$TEMPFILE -SVersion`" \
+ "source version"
+ rm -f "$TEMPFILE"
+ fi
+fi
+
+rm -f $TEMPFILE
+rmdir $TEMPDIR
+trap "" 0 1 2 3 7 10 13 15
+
+
+non_epoch_version=$(echo -n "$version" | perl -pe 's/^\d+://')
+upstream_version=$(echo -n "$non_epoch_version" | sed -e 's/-[^-]*$//')
+debian_version=$(echo -n $non_epoch_version | perl -nle 'm/-([^-]*)$/ && print $1')
+
+# The default
+if [ "X$opt_rootdir" != "X" ]; then
+ rootdir="$opt_rootdir"
+else
+ rootdir='/usr/local/src/Packages'
+fi
+
+if [ "X$opt_workdir" != "X" ]; then
+ workdir="$opt_workdir"
+else
+ workdir="$rootdir/$package"
+fi
+
+# Load site defaults and over rides.
+if [ -f /etc/cvsdeb.conf ]; then
+ . /etc/cvsdeb.conf
+fi
+
+# Load user defaults and over rides.
+if [ -f ~/.cvsdeb.conf ]; then
+ . ~/.cvsdeb.conf
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_rootdir" = "x" ]; then
+ rootdir="$opt_rootdir"
+elif [ ! "x$CVSDEB_ROOTDIR" = "x" ]; then
+ rootdir="$CVSDEB_ROOTDIR"
+elif [ ! "x$conf_rootdir" = "x" ]; then
+ rootdir="$conf_rootdir"
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_workdir" = "x" ]; then
+ workdir="$opt_workdir"
+elif [ ! "x$CVSDEB_WORKDIR" = "x" ]; then
+ workdir="$CVSDEB_WORKDIR"
+elif [ ! "x$conf_workdir" = "x" ]; then
+ workdir="$conf_workdir"
+else
+ workdir="$rootdir/$package"
+fi
+
+if [ ! -d "$workdir" ]; then
+ echo >&2 "The working directory, $workdir, does not exist. Aborting."
+ if [ ! -d "$rootdir" ]; then
+ echo >&2 "The root directory, $rootdir, does not exist either."
+ fi
+ exit 1;
+fi
+
+# The next part is based on debi
+
+if [ -n "$targetarch" ] && [ -n "$targetgnusystem" ]; then
+ setq arch "$(dpkg-architecture "-a${targetarch}" "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+elif [ -n "$targetarch" ]; then
+ setq arch "$(dpkg-architecture "-a${targetarch}" -qDEB_HOST_ARCH)" "build architecture"
+elif [ -n "$targetgnusystem" ]; then
+ setq arch "$(dpkg-architecture "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+else
+ setq arch "$(dpkg-architecture -qDEB_HOST_ARCH)" "build architecture"
+fi
+
+pva="${package}_${non_epoch_version}_${arch}"
+changes="$pva.changes"
+
+cd $workdir || {
+ echo "Couldn't cd $workdir. Aborting" >&2
+ exit 1
+}
+
+if [ ! -r "$changes" ]; then
+ echo "Can't read $workdir/$changes! Have you built the package yet?" >&2
+ exit 1
+fi
+
+# Just call debc/debi respectively, now that we have a changes file
+
+SUBPROG="${PROGNAME#cvs-}"
+
+exec "$SUBPROG" --check-dirname-level 0 $changes "$@"
diff --git a/scripts/cvs-debrelease.1 b/scripts/cvs-debrelease.1
new file mode 100644
index 0000000..c911b0d
--- /dev/null
+++ b/scripts/cvs-debrelease.1
@@ -0,0 +1,72 @@
+.TH CVS-DEBC 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+cvs-debrelease \- upload a cvs-buildpackage/cvs-debuild generated package
+.SH SYNOPSIS
+\fBcvs-debrelease\fP [\fIcvs-debrelease options\fR] [\fB\-\-dopts\fR
+[\fIdupload/dput options\fR]]
+.SH DESCRIPTION
+\fBcvs-debrelease\fR is run from the CVS working directory after
+\fBcvs-buildpackage\fR or \fBcvs-debuild\fR. It uses the
+\fBcvs-buildpackage\fR system to locate the \fI.changes\fR file
+generated in that run. It then uploads the package using
+\fBdebrelease\fR(1), which in turn calls either \fBdupload\fR or
+\fBdput\fR. Note that the \fB\-\-dopts\fR option must be specified to
+distinguish the \fBcvs-debrelease\fR options from the \fBdupload\fR or
+\fBdput\fR options. Also, the \fBdevscripts\fR configuration files
+will be read, as described in the \fBdebrelease\fR(1) manpage.
+.PP
+Note that unlike \fBcvs-buildpackage\fR, the only way to specify the
+source package name is with the \fB\-P\fR option; you cannot simply
+have it as the last command-line parameter.
+.SH OPTIONS
+All current \fBcvs-buildpackage\fR options are silently accepted;
+however, only the ones listed below have any effect. For more details
+on all of them, see the \fBcvs-buildpackage\fR(1) manpage. All
+\fBdebrelease\fR options (as listed below) are also accepted.
+.TP
+\fB\-\-dupload\fR, \fB\-\-dput\fR
+This specifies which uploader program to use; the default is
+\fBdupload\fR.
+.TP
+\fB\-a\fIdebian-architecture\fR, \fB\-t\fIGNU-system-type\fR
+See \fBdpkg-architecture\fR(1) for a description of these options.
+They affect the search for the \fI.changes\fR file. They are provided
+to mimic the behaviour of \fBdpkg-buildpackage\fR when determining the
+name of the \fI.changes\fR file.
+.TP
+.BR \-M\fImodule
+The name of the CVS module.
+.TP
+.BR \-P\fIpackage
+The name of the package.
+.TP
+.B \-V\fIversion
+The version number of the package.
+.TP
+.B \-T\fItag
+The CVS tag to use for exporting sources.
+.TP
+.B \-R\fIroot\ directory
+Root of the original sources archive.
+.TP
+.B \-W\fIwork directory
+The full path name for the cvs-buildpackage working directory.
+.TP
+.B \-x\fIprefix
+This option provides the CVS default module prefix.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+\fB\-\-help\fR, \fB\-\-version\fR
+Show help message and version information respectively.
+.SH "SEE ALSO"
+.BR cvs-buildpackage (1),
+.BR cvs-debuild (1),
+.BR debrelease (1)
+.SH AUTHOR
+\fBcvs-buildpackage\fR was written by Manoj Srivastava, and the
+current version of \fBdebrelease\fR was written by Julian Gilbey
+<jdg@debian.org>. They have been combined into this program by
+Julian Gilbey.
diff --git a/scripts/cvs-debrelease.sh b/scripts/cvs-debrelease.sh
new file mode 100755
index 0000000..7fe5ccc
--- /dev/null
+++ b/scripts/cvs-debrelease.sh
@@ -0,0 +1,385 @@
+#!/bin/bash
+
+# cvs-debrelease: Call dupload/dput to upload package built with
+# cvs-buildpackage or cvs-debuild
+#
+# Based on debrelease; see it for copyright information
+# Based on cvs-buildpackage, copyright 1997 Manoj Srivastava
+# (CVS Id: cvs-buildpackage,v 1.58 2003/08/22 17:24:29 srivasta Exp)
+# This code is copyright 2003, Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+set -e
+
+PROGNAME=${0##*/} PROGNAME="${PROGNAME%.sh}" # .sh for debugging purposes
+
+usage() {
+ echo \
+"Usage: $PROGNAME [cvs-debrelease options] [--dopts [dupload/dput options]]
+ Upload the .changes file(s) just created by cvs-buildpackage or
+ cvs-debuild, as listed in the .changes file generated on that run.
+
+ Note that unlike cvs-buildpackage, the only way to specify the
+ source package name is with the -P option; you cannot simply have it
+ as the last parameter.
+
+ Also uses the cvs-buildpackage configuration files to determine the
+ location of the build tree, as described in its manpage.
+
+ Available cvs-debrelease options:
+ -M<module> CVS module name
+ -P<package> Package name
+ -V<version> Package version
+ -T<tag> CVS tag to use
+ -R<root dir> Root directory
+ -W<work dir> Working directory
+ -x<prefix> CVS default module prefix
+ -a<arch> Search for .changes file made for Debian build <arch>
+ -t<target> Search for .changes file made for GNU <target> arch
+ --dupload Use dupload to upload files (default)
+ --dput Use dput to upload files
+ --no-conf, --noconf
+ Don't read devscripts config files;
+ must be the first option given
+ --dopts The remaining options are for dupload/dput
+ --help Show this message
+ --version Show version and copyright information
+ Other cvs-buildpackage options will be silently ignored.
+
+Default settings modified by devscripts configuration files:
+ (no configuration files are read by $PROGNAME)
+For information on default debrelease settings modified by the
+configuration files, run: debrelease --help"
+}
+
+
+version() { echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2003, Julian Gilbey <jdg@debian.org>,
+all rights reserved.
+Based on original code by Christoph Lameter and Manoj Srivastava.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of
+the GNU General Public License, version 2 or later."
+}
+
+setq() {
+ # Variable Value Doc string
+ if [ "x$2" = "x" ]; then
+ echo >&2 "$PROGNAME: Unable to determine $3"
+ exit 1;
+ else
+ if [ ! "x$Verbose" = "x" ]; then
+ echo "$PROGNAME: $3 is $2";
+ fi
+ eval "$1=\"\$2\"";
+ fi
+}
+
+# Is cvs-buildpackage installed?
+if ! command -v cvs-buildpackage > /dev/null; then
+ echo "$PROGNAME: need the cvs-buildpackage package installed to run this" >&2
+ exit 1
+fi
+
+# Long term variables, which may be set in the cvsdeb config file or the
+# environment:
+# rootdir workdir (if all original sources are kept in one dir)
+
+TEMPDIR=$(mktemp -dt cvs-debrelease.XXXXXXXX) || {
+ echo "$PROGNAME: Unable to create temporary directory" >&2
+ echo "Aborting...." >&2
+ exit 1
+}
+TEMPFILE=$TEMPDIR/cl-tmp
+trap 'rm -f "$TEMPFILE"; rmdir "$TEMPDIR"' EXIT
+
+TAGOPT=
+
+# Command line
+# Start by pulling off all options up to --dopts
+declare -a cvsopts debreleaseopts
+if [ "$1" = --no-conf -o "$1" = --noconf ]; then
+ debreleaseopts=("$1")
+ shift
+fi
+
+debreleaseopts=("${debreleaseopts[@]}" "--check-dirname-level=0")
+
+while [ $# -gt 0 ]; do
+ if [ "$1" = "--dopts" ]; then
+ shift
+ break
+ fi
+ cvsopts=("${cvsopts[@]}" "$1")
+ shift
+done
+
+# This will bomb out if there is an unrecognised option
+TEMP=$(getopt -a -s bash \
+ -o hC:EH:G:M:P:R:T:U:V:W:Ff:dcnr:x:Bp:Dk:a:Sv:m:e:i:I:t: \
+ --long help,version,ctp,tC,sgpg,spgp,us,uc,op \
+ --long si,sa,sd,ap,sp,su,sk,sr,sA,sP,sU,sK,sR,ss,sn \
+ --long dupload,dput,no-conf,noconf \
+ --long check-dirname-level:,check-dirname-regex: \
+ -n "$PROGNAME" -- "${cvsopts[@]}")
+
+eval set -- $TEMP
+
+while true ; do
+ case "$1" in
+ -h|--help) usage; exit 0 ; shift ;;
+ --version) version; exit 0 ; shift ;;
+ -M) opt_cvsmodule="$2" ; shift 2 ;;
+ -P) opt_package="$2" ; shift 2 ;;
+ -R) opt_rootdir="$2" ; shift 2 ;;
+ -T) opt_tag="$2" ; shift 2 ;;
+ -V) opt_version="$2" ; shift 2 ;;
+ -W) opt_workdir="$2" ; shift 2 ;;
+ -x) opt_prefix="$2" ; shift 2 ;;
+ -a) debreleaseopts=("${debreleaseopts[@]}" "$1" "$2")
+ targetarch="$2" ; shift 2 ;;
+ -t) if [ "$2" != "C" ]; then
+ debreleaseopts=("${debreleaseopts[@]}" "$1" "$2")
+ targetgnusystem="$2"
+ fi
+ shift 2 ;;
+ --dupload|--dput)
+ debreleaseopts=("${debreleaseopts[@]}" "$1"); shift ;;
+ --no-conf|--noconf)
+ echo "$PROGNAME: $1 is only acceptable as the first command-line option!" >&2
+ exit 1 ;;
+ --check-dirname-level|--check-dirname-regex)
+ debreleaseopts=("${debreleaseopts[@]}" "$1" "$2"); shift 2 ;;
+
+ # everything else is silently ignored
+ -[CHfGUr]) shift 2 ;;
+ -[FnE]) shift ;;
+ --ctp|--op|--tC) shift ;;
+ -[dDBbS]) shift ;;
+ -p) shift 2 ;;
+ --us|--uc|--sgpg|--spgp) shift ;;
+ --s[idapukrAPUKRns]) shift ;;
+ --ap) shift ;;
+ -[kvmeiI]) shift 2 ;;
+
+ --) shift ; break ;;
+ *) echo >&2 "Internal error! ($1)"
+ usage; exit 1 ;;
+ esac
+done
+
+if [ "x$opt_cvsmodule" = "x" -a "x$opt_package" = "x" -a \
+ ! -e 'debian/changelog' ] ; then
+ echo >&2 "$PROGNAME should be run in the top working directory of"
+ echo >&2 "a Debian Package, or an explicit package (or CVS module) name"
+ echo >&2 "should be given."
+ exit 1
+fi
+
+if [ "x$opt_tag" != "x" ]; then
+ TAGOPT=-r$opt_tag
+fi
+
+# Command line, env variable, config file, or default
+# This anomalous position is in case we need to check out the changelog
+# below (anomalous since we have not loaded the config file yet)
+if [ ! "x$opt_prefix" = "x" ]; then
+ prefix="$opt_prefix"
+elif [ ! "x$CVSDEB_PREFIX" = "x" ]; then
+ prefix="$CVSDEB_PREFIX"
+elif [ ! "x$conf_prefix" = "x" ]; then
+ prefix="$conf_prefix"
+else
+ prefix=""
+fi
+
+# put a slash at the end of the prefix
+if [ "X$prefix" != "X" ]; then
+ prefix="$prefix/";
+ prefix=$(echo $prefix | sed 's://:/:g');
+fi
+
+if [ ! -f CVS/Root ]; then
+ if [ "X$CVSROOT" = "X" ]; then
+ echo "no CVS/Root file found, and CVSROOT var is empty" >&2
+ exit 1
+ fi
+else
+ CVSROOT=$(cat CVS/Root)
+ export CVSROOT
+fi
+
+if [ "x$opt_package" = "x" ]; then
+ # Get the official package name and version.
+ if [ -f debian/changelog ]; then
+ # Ok, changelog exists
+ setq "package" \
+ "`dpkg-parsechangelog -SSource`" \
+ "source package"
+ setq "version" \
+ "`dpkg-parsechangelog -SVersion`" \
+ "source version"
+ elif [ "x$opt_cvsmodule" != "x" ]; then
+ # Hmm. Well, see if we can checkout the changelog file
+ rm -f $TEMPFILE
+ cvs -q co -p $TAGOPT $opt_cvsmodule/debian/changelog > $TEMPFILE
+ setq "package" \
+ "`dpkg-parsechangelog -l$TEMPFILE -SSource`" \
+ "source package"
+ setq "version" \
+ "`dpkg-parsechangelog -l$TEMPFILE -SVersion`" \
+ "source version"
+ rm -f "$TEMPFILE"
+ else
+ # Well. We don't know what this package is.
+ echo >&2 " This does not appear be a Debian source tree, since"
+ echo >&2 " there is no debian/changelog, and there was no"
+ echo >&2 " package name or cvs module given on the command line"
+ echo >&2 " it is hard to figure out what the package name "
+ echo >&2 " should be. I give up."
+ exit 1
+ fi
+else
+ # The user knows best; package name is provided
+ setq "package" "$opt_package" "source package"
+
+ # Now, the version number
+ if [ "x$opt_version" != "x" ]; then
+ # All hail the user provided value
+ setq "version" "$opt_version" "source package"
+ elif [ -f debian/changelog ]; then
+ # Fine, see what the changelog says
+ setq "version" \
+ "`dpkg-parsechangelog -SVersion`" \
+ "source version"
+ elif [ "x$opt_cvsmodule" != "x" ]; then
+ # Hmm. The CVS module name is known, so lets us try exporting changelog
+ rm -f $TEMPFILE
+ cvs -q co -p $TAGOPT $opt_cvsmodule/debian/changelog > $TEMPFILE
+ setq "version" \
+ "`dpkg-parsechangelog -l$TEMPFILE -SVersion`" \
+ "source version"
+ rm -f "$TEMPFILE"
+ else
+ # Ok, try exporting the package name
+ rm -f $TEMPFILE
+ cvsmodule="${prefix}$package"
+ cvs -q co -p $TAGOPT $cvsmodule/debian/changelog > $TEMPFILE
+ setq "version" \
+ "`dpkg-parsechangelog -l$TEMPFILE -SVersion`" \
+ "source version"
+ rm -f "$TEMPFILE"
+ fi
+fi
+
+rm -f $TEMPFILE
+rmdir $TEMPDIR
+trap "" 0 1 2 3 7 10 13 15
+
+
+non_epoch_version=$(echo -n "$version" | perl -pe 's/^\d+://')
+upstream_version=$(echo -n "$non_epoch_version" | sed -e 's/-[^-]*$//')
+debian_version=$(echo -n $non_epoch_version | perl -nle 'm/-([^-]*)$/ && print $1')
+
+# The default
+if [ "X$opt_rootdir" != "X" ]; then
+ rootdir="$opt_rootdir"
+else
+ rootdir='/usr/local/src/Packages'
+fi
+
+if [ "X$opt_workdir" != "X" ]; then
+ workdir="$opt_workdir"
+else
+ workdir="$rootdir/$package"
+fi
+
+# Load site defaults and over rides.
+if [ -f /etc/cvsdeb.conf ]; then
+ . /etc/cvsdeb.conf
+fi
+
+# Load user defaults and over rides.
+if [ -f ~/.cvsdeb.conf ]; then
+ . ~/.cvsdeb.conf
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_rootdir" = "x" ]; then
+ rootdir="$opt_rootdir"
+elif [ ! "x$CVSDEB_ROOTDIR" = "x" ]; then
+ rootdir="$CVSDEB_ROOTDIR"
+elif [ ! "x$conf_rootdir" = "x" ]; then
+ rootdir="$conf_rootdir"
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_workdir" = "x" ]; then
+ workdir="$opt_workdir"
+elif [ ! "x$CVSDEB_WORKDIR" = "x" ]; then
+ workdir="$CVSDEB_WORKDIR"
+elif [ ! "x$conf_workdir" = "x" ]; then
+ workdir="$conf_workdir"
+else
+ workdir="$rootdir/$package"
+fi
+
+if [ ! -d "$workdir" ]; then
+ echo >&2 "The working directory, $workdir, does not exist. Aborting"
+ if [ ! -d "$rootdir" ]; then
+ echo >&2 "The root directory, $rootdir, does not exist either."
+ fi
+ exit 1;
+fi
+
+pkgdir="$workdir/$package-$upstream_version"
+
+if [ ! -d "$pkgdir" ]; then
+ echo "The build directory $pkgdir does not exist!" >&2
+ echo "Have you built the package yet?" >&2
+ exit 1
+fi
+
+if [ -n "$targetarch" ] && [ -n "$targetgnusystem" ]; then
+ setq arch "$(dpkg-architecture "-a${targetarch}" "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+elif [ -n "$targetarch" ]; then
+ setq arch "$(dpkg-architecture "-a${targetarch}" -qDEB_HOST_ARCH)" "build architecture"
+elif [ -n "$targetgnusystem" ]; then
+ setq arch "$(dpkg-architecture "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+else
+ setq arch "$(dpkg-architecture -qDEB_HOST_ARCH)" "build architecture"
+fi
+
+pva="${package}_${non_epoch_version}_${arch}"
+changes="$pva.changes"
+
+if [ ! -f "$workdir/$changes" ]; then
+ echo "Can't find $workdir/$changes!" >&2
+ echo "Have you built the package yet?" >&2
+ exit 1
+fi
+
+
+cd $pkgdir || {
+ echo "Couldn't cd $pkgdir. Aborting" >&2
+ exit 1
+}
+
+# Just call debrelease, now that we are in the correct directory
+
+SUBPROG="${PROGNAME#cvs-}"
+
+exec "$SUBPROG" "${debreleaseopts[@]}" "$@"
diff --git a/scripts/cvs-debuild.1 b/scripts/cvs-debuild.1
new file mode 100644
index 0000000..bd4712a
--- /dev/null
+++ b/scripts/cvs-debuild.1
@@ -0,0 +1,59 @@
+.TH CVS-DEBUILD 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+cvs-debuild \- build a Debian package using cvs-buildpackage and debuild
+.SH SYNOPSIS
+\fBcvs-debuild\fR [\fIdebuild options\fR] [\fIcvs-buildpackage options\fR]
+[\fB\-\-lintian-opts\fR \fIlintian options\fR]
+.SH DESCRIPTION
+\fBcvs-debuild\fR is a wrapper around \fBcvs-buildpackage\fR to run it
+with \fBdebuild\fR as the package-building program. (This cannot
+simply be accomplished using the \fB\-C\fR option of
+\fBcvs-buildpackage\fR, as it does not know how to handle all of the
+special \fBdebuild\fR options.)
+.PP
+The program simply stashes the \fBdebuild\fR and \fBlintian\fR
+options, and passes them to \fBdebuild\fR when it is
+called by \fBcvs-buildpackage\fR. All of the standard \fBdebuild\fR
+options may be used (as listed below), but note that the root command
+specified by any \fB\-\-rootcmd\fR or \fB\-r\fR command-line option
+will be passed as an option to \fBcvs-buildpackage\fR. The first
+non-\fBdebuild\fR option detected will signal the start of the
+\fBcvs-buildpackage\fR options.
+.PP
+The selection of the root command is slightly subtle: if there are any
+command-line options, these will be used. If not, then if
+\fBcvs-buildpackage\fR is set up to use a default root command, that
+will be used. Finally, if neither of these are the case, then
+\fBdebuild\fR will use its procedures to determine an appropriate
+command, as described in its documentation.
+.PP
+See the manpages for \fBdebuild\fR(1) and \fBcvs-buildpackage\fR for
+more information about the behaviour of each.
+.SH "OPTIONS"
+The following are the \fBdebuild\fR options recognised by
+\fBcvs-debuild\fR. All \fBcvs-buildpackage\fR and \fBlintian\fR
+options are simply passed to the appropriate program. For
+explanations of the meanings of these variables, see
+\fBdebuild\fR(1).
+.TP
+.B \-\-no\-conf\fR, \fB\-\-noconf
+.TP
+.BI \-\-rootcmd= "gain-root-command\fR, \fP" \-r gain-root-command
+.TP
+.B \-\-preserve\-env
+.TP
+.BI \-\-preserve\-envvar= "var\fR, \fP" \-e var
+.TP
+.BI \-\-set\-envvar= var = "value\fR, \fP" \-e var = value
+.TP
+.B \-\-lintian\fR, \fB\-\-no\-lintian
+.TP
+\fB\-\-ignore-dirname\fR, \fB\-\-check-dirname\fR
+These should not be needed, but it is provided nevertheless.
+.SH "SEE ALSO"
+.BR cvs-buildpackage (1),
+.BR debuild (1),
+.BR dpkg-buildpackage (1),
+.BR lintian (1)
+.SH AUTHOR
+This program was written by Julian Gilbey <jdg@debian.org>.
diff --git a/scripts/cvs-debuild.pl b/scripts/cvs-debuild.pl
new file mode 100755
index 0000000..4a33f0f
--- /dev/null
+++ b/scripts/cvs-debuild.pl
@@ -0,0 +1,216 @@
+#!/usr/bin/perl
+
+# A wrapper for cvs-buildpackage to use debuild, still giving access
+# to all of debuild's functionality.
+
+# Copyright 2003, Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# We will do simple option processing. The calling syntax of this
+# program is:
+#
+# cvs-debuild [<debuild options>] [<cvs-buildpackage options>]
+# [--lintian-opts <lintian options>]
+#
+# cvs-debuild will run cvs-buildpackage, using debuild as the
+# package-building program, passing the debuild and lintian options to
+# it. For details of these options, and more information on debuild in
+# general, refer to debuild(1).
+
+use 5.006;
+use strict;
+use warnings;
+use FileHandle;
+use File::Basename;
+use File::Temp qw/ tempfile /;
+use Fcntl;
+
+my $progname = basename($0);
+
+# Predeclare functions
+sub fatal($);
+
+sub usage {
+ print <<"EOF";
+ $progname [<debuild options>] [<cvs-buildpackage options>]
+ [--lintian-opts <lintian options>]
+ to run cvs-buildpackage using debuild as the package building program
+
+ Accepted debuild options, see debuild(1) or debuild --help for more info:
+ --no-conf, --noconf
+ --lintian, --no-lintian
+ --rootcmd=<gain-root-command>, -r<gain-root-command>
+ --preserve-envvar=<envvar>, -e<envvar>
+ --set-envvar=<envvar>=<value>, -e<envvar>=<value>
+ --preserve-env
+ --check-dirname-level=<value>, --check-dirname-regex=<regex>
+ -d, -D
+
+ --help display this message
+ --version show version and copyright information
+ All cvs-buildpackage options are accepted, as are all lintian options.
+
+ Note that any cvs-buildpackage options (command line or configuration file)
+ for setting a root command will override any debuild configuration file
+ options for this.
+
+Default settings modified by devscripts configuration files:
+ (no configuration files are read by $progname)
+For information on default debuild settings modified by the
+configuration files, run: debuild --help
+EOF
+}
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2003 by Julian Gilbey <jdg\@debian.org>,
+all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+# First check we can execute cvs-buildpackage
+unless (system("command -v cvs-buildpackage >/dev/null 2>&1") == 0) {
+ fatal "can't run cvs-buildpackage; have you installed it?";
+}
+
+# We start by parsing the command line to collect debuild and
+# lintian options. We stash them away in temporary files,
+# which we will pass to debuild.
+
+my (@debuild_opts, @cvs_opts, @lin_opts);
+{
+ no locale;
+ # debuild opts first
+ while (@ARGV) {
+ my $arg = shift;
+ $arg eq '--help' and usage(), exit 0;
+ $arg eq '--version' and version(), exit 0;
+
+ # rootcmd gets passed on to cvs-buildpackage
+ if ($arg eq '-r' or $arg eq '--rootcmd') {
+ push @cvs_opts, '-r' . shift;
+ next;
+ }
+ if ($arg =~ /^(?:-r|--rootcmd=)(.*)$/) {
+ push @cvs_opts, "-r$1";
+ next;
+ }
+
+ # other debuild options are stashed
+ if ($arg =~ /^--(no-?conf|(no-?)?lintian)$/) {
+ push @debuild_opts, $arg;
+ next;
+ }
+ if ($arg =~ /^--preserve-env$/) {
+ push @debuild_opts, $arg;
+ next;
+ }
+ if ($arg =~ /^--check-dirname-(level|regex)$/) {
+ push @debuild_opts, $arg, shift;
+ next;
+ }
+ if ($arg =~ /^--check-dirname-(level|regex)=/) {
+ push @debuild_opts, $arg;
+ next;
+ }
+ if ($arg =~ /^--(preserve|set)-envvar$/) {
+ push @debuild_opts, $arg, shift;
+ next;
+ }
+ if ($arg =~ /^--(preserve|set)-envvar=/) {
+ push @debuild_opts, $arg;
+ next;
+ }
+ # dpkg-buildpackage now has a -e option, so we have to be
+ # careful not to confuse the two; their option will always have
+ # the form -e<maintainer email> or similar
+ if ($arg eq '-e') {
+ push @debuild_opts, $arg, shift;
+ next;
+ }
+ if ($arg =~ /^-e(\w+(=.*)?)$/) {
+ push @debuild_opts, $arg;
+ next;
+ }
+ if ($arg eq '-d' or $arg eq '-D') {
+ push @debuild_opts, $arg;
+ next;
+ }
+ # Anything else matching /^-e/ is a dpkg-buildpackage option,
+ # and we've also now considered all debuild options.
+ # So now handle cvs-buildpackage options
+ unshift @ARGV, $arg;
+ last;
+ }
+
+ while (@ARGV) {
+ my $arg = shift;
+ if ($arg eq '-L' or $arg eq '--lintian') {
+ fatal "$arg argument not recognised; use --lintian-opts instead";
+ }
+ if ($arg =~ /^--lin(tian|da)-opts$/) {
+ push @lin_opts, $arg;
+ last;
+ }
+ push @cvs_opts, $arg;
+ }
+
+ if (@ARGV) {
+ push @lin_opts, @ARGV;
+ }
+}
+
+# So we've now got three arrays, and we'll have to store the debuild
+# options in temporary files
+my $debuild_cmd = 'debuild --cvs-debuild';
+my ($fhdeb, $fhlin);
+if (@debuild_opts) {
+ $fhdeb = tempfile("cvspreXXXXXX", UNLINK => 1)
+ or fatal "cannot create temporary file: $!";
+ fcntl $fhdeb, Fcntl::F_SETFD(), 0
+ or fatal "disabling close-on-exec for temporary file: $!";
+ print $fhdeb join("\0", @debuild_opts);
+ $debuild_cmd .= ' --cvs-debuild-deb /dev/fd/' . fileno($fhdeb);
+}
+if (@lin_opts) {
+ $fhlin = tempfile("cvspreXXXXXX", UNLINK => 1)
+ or fatal "cannot create temporary file: $!";
+ fcntl $fhlin, Fcntl::F_SETFD(), 0
+ or fatal "disabling close-on-exec for temporary file: $!";
+ print $fhlin join("\0", @lin_opts);
+ $debuild_cmd .= ' --cvs-debuild-lin /dev/fd/' . fileno($fhlin);
+}
+
+# Now we can run cvs-buildpackage
+my $status = system('cvs-buildpackage', '-C' . $debuild_cmd, @cvs_opts);
+
+if ($status & 255) {
+ die "cvs-debuild: cvs-buildpackage terminated abnormally: "
+ . sprintf("%#x", $status) . "\n";
+} else {
+ exit($status >> 8);
+}
+
+sub fatal($) {
+ my ($pack, $file, $line);
+ ($pack, $file, $line) = caller();
+ (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d;
+ $msg =~ s/\n\n$/\n/;
+ die $msg;
+}
diff --git a/scripts/dcmd.1 b/scripts/dcmd.1
new file mode 100644
index 0000000..0438082
--- /dev/null
+++ b/scripts/dcmd.1
@@ -0,0 +1,112 @@
+.TH DCMD 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+dcmd \- expand file lists of .dsc/.changes files in the command line
+.SH SYNOPSIS
+\fBdcmd\fR [\fIoptions\fR] [\fIcommand\fR] [\fIchanges-file\fR|\fIdsc-file\fR] ...
+.SH DESCRIPTION
+\fBdcmd\fR replaces any reference to a \fI.dsc\fR or \fI.changes\fR file in the
+command line with the list of files in its 'Files' section, plus the
+file itself. It allows easy manipulation of all the files involved in
+an upload (for \fI.changes\fR files) or a source package (for \fI.dsc\fR files).
+
+If \fIcommand\fR is omitted (that is the first argument is an existing \fI.dsc\fR
+or \fI.changes\fR file), the expanded list of files is printed to stdout, one file
+by line. Useful for usage in backticks.
+.SH OPTIONS
+There are a number of options which may be used in order to select only a
+subset of the files listed in the \fI.dsc\fR or \fI.changes\fR file. If a requested file
+is not found, an error message will be printed.
+.TP 14
+.B \-\-dsc
+Select the \fI.dsc\fR file.
+.TP
+.B \-\-schanges
+Select \fI.changes\fR files for the 'source' architecture.
+.TP
+.B \-\-bchanges
+Select \fI.changes\fR files for binary architectures.
+.TP
+.B \-\-changes
+Select \fI.changes\fR files. Implies \fB\-\-schanges\fR and \fB\-\-bchanges\fR.
+.TP
+.B \-\-archdeb
+Select architecture-dependent binary packages (\fI.deb\fR files).
+.TP
+.B \-\-indepdeb
+Select architecture-independent binary packages (\fI.deb\fR files).
+.TP
+.B \-\-deb
+Select binary packages (\fI.deb\fR files). Implies \fB\-\-archdeb\fR and \fB\-\-indepdeb\fR.
+.TP
+.B \-\-archudeb
+Select architecture-dependent \fI.udeb\fR binary packages.
+.TP
+.B \-\-indepudeb
+Select architecture-independent \fI.udeb\fR binary packages.
+.TP
+.B \-\-udeb
+Select \fI.udeb\fR binary packages. Implies \fB\-\-archudeb\fR and \fB\-\-indepudeb\fR.
+.TP
+.BR \-\-tar ,\ \-\-orig
+Select the upstream \fI.tar\fR file.
+.TP
+.BR \-\-diff ,\ \-\-debtar
+Select the Debian \fI.debian.tar\fR or \fI.diff\fR file.
+.PP
+Each option may be prefixed by \fB\-\-no\fR to indicate that all files
+\fInot\fR matching the specification should be selected.
+.PP
+It is not possible to combine positive filtering options (e.g. \fB\-\-dsc\fR)
+and negative filtering options (e.g. \fB\-\-no\-changes\fR) in the same
+\fBdcmd\fR invocation.
+.TP
+.B \-\-no\-fail\-on\-missing\fR, \fB\-r
+If any of the requested files were not found, do not output an error.
+.TP
+.B \-\-package\fR, \fB\-p
+Output package name part only.
+.TP
+.B \-\-sort\fR, \fB\-s
+Sort output alphabetically.
+.TP
+.B \-\-tac\fR, \fB\-t
+Reverse output order.
+
+.SH "EXAMPLES"
+Copy the result of a build to another machine:
+
+.nf
+$ dcmd scp rcs_5.7-23_amd64.changes elegiac:/tmp
+rcs_5.7-23.dsc 100% 490 0.5KB/s 00:00
+rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00
+rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00
+rcs_5.7-23_amd64.changes 100% 1095 1.1KB/s 00:00
+$
+
+$ dcmd \-\-diff \-\-deb scp rcs_5.7-23_amd64.changes elegiac:/tmp
+rcs_5.7-23.diff.gz 100% 12KB 11.7KB/s 00:00
+rcs_5.7-23_amd64.deb 100% 363KB 362.7KB/s 00:00
+$
+.fi
+
+Check the contents of a source package:
+
+.nf
+$ dcmd md5sum rcs_5.7-23.dsc
+8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz
+f0ceeae96603e823eacba6721a30b5c7 rcs_5.7-23.diff.gz
+5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc
+$
+
+$ dcmd \-\-no\-diff md5sum rcs_5.7-23.dsc
+8fd09ea9654cda128f8d5c337d3b8de7 rcs_5.7.orig.tar.gz
+5241db1e231b1f43ae5514b63d2523f8 rcs_5.7-23.dsc
+$
+.fi
+
+.SH "SEE ALSO"
+.BR dpkg-genchanges (1),
+.BR dpkg-source (1)
+.SH AUTHOR
+This program was written by Romain Francoise <rfrancoise@debian.org> and
+is released under the GPL, version 2 or later.
diff --git a/scripts/dcmd.sh b/scripts/dcmd.sh
new file mode 100755
index 0000000..927baf8
--- /dev/null
+++ b/scripts/dcmd.sh
@@ -0,0 +1,326 @@
+#!/bin/sh
+#
+# dcmd: expand file lists of .dsc/.changes files in the command line
+#
+# Copyright (C) 2008 Romain Francoise <rfrancoise@debian.org>
+# Copyright (C) 2008 Christoph Berg <myon@debian.org>
+# Copyright (C) 2008 Adam D. Barratt <adsb@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+# Usage:
+#
+# dcmd replaces any reference to a .dsc or .changes file in the command
+# line with the list of files in its 'Files' section, plus the
+# .dsc/.changes file itself.
+#
+# $ dcmd sha1sum rcs_5.7-23_amd64.changes
+# f61254e2b61e483c0de2fc163321399bbbeb43f1 rcs_5.7-23.dsc
+# 7a2b283b4c505d8272a756b230486a9232376771 rcs_5.7-23.diff.gz
+# e3bac970a57a6b0b41c28c615f2919c931a6cb68 rcs_5.7-23_amd64.deb
+# c531310b18773d943249cfaa8b539a9b6e14b8f4 rcs_5.7-23_amd64.changes
+# $
+
+PROGNAME=${0##*/}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2008 by Romain Francoise, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+usage() {
+ printf "Usage: %s [options] [command] [dsc or changes file] [...]\n" $PROGNAME
+}
+
+endswith() {
+ case $1 in
+ *$2) return 0 ;;
+ *) return 1;;
+ esac
+}
+
+# Instead of parsing the file completely as the previous Python
+# implementation did (using python-debian), let's just select lines
+# that look like they might be part of the file list.
+RE="^ [0-9a-f]{32} [0-9]+ ((([a-zA-Z0-9_.-]+/)?[a-zA-Z0-9_.-]+|-) ([a-zA-Z]+|-) )?(.*)$"
+
+maybe_expand() {
+ local dir
+ local sedre
+ if [ -e "$1" ] && (endswith "$1" .changes || endswith "$1" .dsc || endswith "$1" .buildinfo); then
+ # Need to escape whatever separator is being used in sed expression so
+ # it doesn't prematurely end the s command
+ dir=$(dirname "$1" | sed 's/,/\\,/g')
+ if [ "$(echo "$1" | cut -b1-2)" != "./" ]; then
+ sedre="\."
+ fi
+ sed --regexp-extended -n "s,$RE,$dir/\5,p" <"$1" | sed "s,^$sedre/,,"
+ fi
+}
+
+DSC=1; BCHANGES=1; SCHANGES=1; ARCHDEB=1; INDEPDEB=1; TARBALL=1; DIFF=1
+CHANGES=1; DEB=1; ARCHUDEB=1; INDEPUDEB=1; UDEB=1; BUILDINFO=1;
+FILTERED=0; FAIL_MISSING=1
+EXTRACT_PACKAGE_NAME=0
+SORT=0
+TAC=0
+
+while [ $# -gt 0 ]; do
+ TYPE=""
+ case "$1" in
+ --version|-v) version; exit 0;;
+ --help|-h) usage; exit 0;;
+ --no-fail-on-missing|-r) FAIL_MISSING=0;;
+ --fail-on-missing) FAIL_MISSING=1;;
+ --package|-p) EXTRACT_PACKAGE_NAME=1;;
+ --sort|-s) SORT=1;;
+ --tac|-t) TAC=1;;
+ --) shift; break;;
+ --no-*)
+ TYPE=${1#--no-}
+ case "$FILTERED" in
+ 1) echo "$PROGNAME: Can't combine --foo and --no-foo options" >&2;
+ exit 1;;
+ 0) FILTERED=-1;;
+ esac;;
+ --**)
+ TYPE=${1#--}
+ case "$FILTERED" in
+ -1) echo "$PROGNAME: Can't combine --foo and --no-foo options" >&2;
+ exit 1;;
+ 0) FILTERED=1; DSC=0; BCHANGES=0; SCHANGES=0; CHANGES=0
+ ARCHDEB=0; INDEPDEB=0; DEB=0; ARCHUDEB=0; INDEPUDEB=0
+ UDEB=0; TARBALL=0; DIFF=0; BUILDINFO=0;;
+ esac;;
+ *) break;;
+ esac
+
+ case "$TYPE" in
+ "") ;;
+ dsc) [ "$FILTERED" = "1" ] && DSC=1 || DSC=0;;
+ buildinfo) [ "$FILTERED" = "1" ] && BUILDINFO=1 || BUILDINFO=0;;
+ changes) [ "$FILTERED" = "1" ] &&
+ { BCHANGES=1; SCHANGES=1; CHANGES=1; } ||
+ { BCHANGES=0; SCHANGES=0; CHANGES=0; } ;;
+ bchanges) [ "$FILTERED" = "1" ] && BCHANGES=1 || BCHANGES=0;;
+ schanges) [ "$FILTERED" = "1" ] && SCHANGES=1 || SCHANGES=1;;
+ deb) [ "$FILTERED" = "1" ] &&
+ { ARCHDEB=1; INDEPDEB=1; DEB=1; } ||
+ { ARCHDEB=0; INDEPDEB=0; DEB=0; };;
+ archdeb) [ "$FILTERED" = "1" ] && ARCHDEB=1 || ARCHDEB=0;;
+ indepdeb) [ "$FILTERED" = "1" ] && INDEPDEB=1 || INDEPDEB=0;;
+ udeb) [ "$FILTERED" = "1" ] &&
+ { ARCHUDEB=1; INDEPUDEB=1; UDEB=1; } ||
+ { ARCHUDEB=0; INDEPUDEB=0; UDEB=0; };;
+ archudeb) [ "$FILTERED" = "1" ] && ARCHUDEB=1 || ARCHUDEB=0;;
+ indepudeb) [ "$FILTERED" = "1" ] && INDEPUDEB=1 || INDEPUDEB=0;;
+ tar|orig) [ "$FILTERED" = "1" ] && TARBALL=1 || TARBALL=0;;
+ diff|debtar) [ "$FILTERED" = "1" ] && DIFF=1 || DIFF=0;;
+ *) echo "$PROGNAME: Unknown option '$1'" >&2; exit 1;;
+ esac
+ shift
+done
+
+cmd=
+args=""
+while [ $# -gt 0 ]; do
+ arg="$1"
+ shift
+ temparg="$(maybe_expand "$arg")"
+ if [ -z "$temparg" ]; then
+ if [ -z "$cmd" ]; then
+ cmd="$arg"
+ continue
+ fi
+ # Not expanded, so simply add to argument list
+ args="$args
+$arg"
+ else
+ SEEN_INDEPDEB=0; SEEN_ARCHDEB=0; SEEN_SCHANGES=0; SEEN_BCHANGES=0
+ SEEN_INDEPUDEB=0; SEEN_ARCHUDEB=0; SEEN_UDEB=0;
+ SEEN_TARBALL=0; SEEN_DIFF=0; SEEN_DSC=0; SEEN_BUILDINFO=0;
+ MISSING=0
+ newarg=""
+ # Output those items from the expanded list which were
+ # requested, and record which files are contained in the list
+ eval "$(echo "$temparg" | while read THISARG; do
+ if [ -z "$THISARG" ]; then
+ # Skip
+ :
+ elif endswith "$THISARG" _all.deb; then
+ [ "$INDEPDEB" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_INDEPDEB=1;"
+ elif endswith "$THISARG" .deb; then
+ [ "$ARCHDEB" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_ARCHDEB=1;"
+ elif endswith "$THISARG" _all.udeb; then
+ [ "$INDEPUDEB" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_INDEPUDEB=1;"
+ elif endswith "$THISARG" .udeb; then
+ [ "$ARCHUDEB" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_ARCHUDEB=1;"
+ elif endswith "$THISARG" .debian.tar.gz || \
+ endswith "$THISARG" .debian.tar.xz || \
+ endswith "$THISARG" .debian.tar.bz2; then
+ [ "$DIFF" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_DIFF=1;"
+ elif endswith "$THISARG" .tar.bz2 || \
+ endswith "$THISARG" .tar.gz || \
+ endswith "$THISARG" .tar.lzma || \
+ endswith "$THISARG" .tar.xz || \
+ endswith "$THISARG" .tar.zst || \
+ endswith "$THISARG" .tar.*.asc; then
+ [ "$TARBALL" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_TARBALL=1;"
+ elif endswith "$THISARG" _source.changes; then
+ [ "$SCHANGES" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_SCHANGES=1;"
+ elif endswith "$THISARG" .changes; then
+ [ "$BCHANGES" = "0" ] || echo "newarg\"\$newarg
+$THISARG\";"
+ echo "SEEN_BCHANGES=1;"
+ elif endswith "$THISARG" .dsc; then
+ [ "$DSC" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_DSC=1;"
+ elif endswith "$THISARG" .buildinfo; then
+ [ "$BUILDINFO" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_BUILDINFO=1;"
+ elif endswith "$THISARG" .diff.gz; then
+ [ "$DIFF" = "0" ] || echo "newarg=\"\$newarg
+$THISARG\";"
+ echo "SEEN_DIFF=1;"
+ elif [ "$FILTERED" != "1" ]; then
+ # What is it? Output anyway
+ echo "newarg=\"\$newarg
+$THISARG\";"
+ fi
+ done)"
+
+ INCLUDEARG=1
+ if endswith "$arg" _source.changes; then
+ [ "$SCHANGES" = "1" ] || INCLUDEARG=0
+ SEEN_SCHANGES=1
+ elif endswith "$arg" .changes; then
+ [ "$BCHANGES" = "1" ] || INCLUDEARG=0
+ SEEN_BCHANGES=1
+ elif endswith "$arg" .dsc; then
+ [ "$DSC" = "1" ] || INCLUDEARG=0
+ SEEN_DSC=1
+ elif endswith "$arg" .buildinfo; then
+ [ "$BUILDINFO" = "1" ] || INCLUDEARG=0
+ SEEN_BUILDINFO=1
+ fi
+
+ if [ "$FAIL_MISSING" = "1" ] && [ "$FILTERED" = "1" ]; then
+ if [ "$CHANGES" = "1" ]; then
+ if [ "$SEEN_SCHANGES" = "0" ] && [ "$SEEN_BCHANGES" = "0" ]; then
+ MISSING=1; echo "$arg: .changes fiie not found" >&2
+ fi
+ else
+ if [ "$SCHANGES" = "1" ] && [ "$SEEN_SCHANGES" = "0" ]; then
+ MISSING=1; echo "$arg: source .changes file not found" >&2
+ fi
+ if [ "$BCHANGES" = "1" ] && [ "$SEEN_BCHANGES" = "0" ]; then
+ MISSING=1; echo "$arg: binary .changes file not found" >&2
+ fi
+ fi
+
+ if [ "$DEB" = "1" ]; then
+ if [ "$SEEN_INDEPDEB" = "0" ] && [ "$SEEN_ARCHDEB" = "0" ]; then
+ MISSING=1; echo "$arg: binary packages not found" >&2
+ fi
+ else
+ if [ "$INDEPDEB" = "1" ] && [ "$SEEN_INDEPDEB" = "0" ]; then
+ MISSING=1; echo "$arg: arch-indep packages not found" >&2
+ fi
+ if [ "$ARCHDEB" = "1" ] && [ "$SEEN_ARCHDEB" = "0" ]; then
+ MISSING=1; echo "$arg: arch-dep packages not found" >&2
+ fi
+ fi
+
+ if [ "$UDEB" = "1" ]; then
+ if [ "$SEEN_INDEPUDEB" = "0" ] && [ "$SEEN_ARCHUDEB" = "0" ]; then
+ MISSING=1; echo "$arg: udeb packages not found" >&2
+ fi
+ else
+ if [ "$INDEPUDEB" = "1" ] && [ "$SEEN_INDEPUDEB" = "0" ]; then
+ MISSING=1; echo "$arg: arch-indep udeb packages not found" >&2
+ fi
+ if [ "$ARCHUDEB" = "1" ] && [ "$SEEN_ARCHUDEB" = "0" ]; then
+ MISSING=1; echo "$arg: arch-dep udeb packages not found" >&2
+ fi
+
+ fi
+
+ if [ "$BUILDINFO" = "1" ] && [ "$SEEN_BUILDINFO" = "0" ]; then
+ MISSING=1; echo "$arg: .buildinfo file not found" >&2
+ fi
+ if [ "$DSC" = "1" ] && [ "$SEEN_DSC" = "0" ]; then
+ MISSING=1; echo "$arg: .dsc file not found" >&2
+ fi
+ if [ "$TARBALL" = "1" ] && [ "$SEEN_TARBALL" = "0" ]; then
+ MISSING=1; echo "$arg: upstream tar not found" >&2
+ fi
+ if [ "$DIFF" = "1" ] && [ "$SEEN_DIFF" = "0" ]; then
+ MISSING=1; echo "$arg: Debian debian.tar/diff not found" >&2
+ fi
+
+ [ "$MISSING" = "0" ] || exit 1
+ fi
+
+ args="$args
+$newarg"
+ [ "$INCLUDEARG" = "0" ] || args="$args
+$arg"
+ fi
+done
+
+IFS='
+'
+if [ "$EXTRACT_PACKAGE_NAME" = "1" ]; then
+ packages=""
+ for arg in $args; do
+ packages="$packages
+$(echo "$arg" |sed s/_.*//)"
+ done
+ args="$packages"
+fi
+if [ "$SORT" = "1" ]; then
+ args="$(echo "$args"| sort -)"
+fi
+if [ "$TAC" = "1" ]; then
+ args="$(echo "$args"| tac -)"
+fi
+if [ -z "$cmd" ]; then
+ for arg in $args; do
+ echo $arg
+ done
+ exit 0
+fi
+
+exec $cmd $args
diff --git a/scripts/dd-list.1 b/scripts/dd-list.1
new file mode 100644
index 0000000..61f9231
--- /dev/null
+++ b/scripts/dd-list.1
@@ -0,0 +1,110 @@
+.\" Copyright 2005 Lars Wirzenius
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" This program is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program. If not, see <https://www.gnu.org/licenses/>.
+.\"
+.TH DD\-LIST 1 2011-10-27 "Debian"
+.\" --------------------------------------------------------------------
+.SH NAME
+dd\-list \- nicely list .deb packages and their maintainers
+.\" --------------------------------------------------------------------
+.SH SYNOPSIS
+.BR dd\-list " [" \-hiusV "] [" \-\-help "] [" \-\-stdin "]"
+.BR "" "[" "\-\-sources \fISources_file" "]
+.BR "" "[" \-\-dctrl "] [" \-\-version "] [" \-\-uploaders "] [" \fIpackage " ...]"
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.B dd\-list
+produces nicely formatted lists of Debian (.deb) packages and their
+maintainers.
+.PP
+Input is a list of source or binary package names on the command line
+(or the standard input if
+.B \-\-stdin
+is given).
+Output is a list of the following format, where package names are source
+packages by default:
+.PP
+.nf
+.RS
+J. Random Developer <jrandom@debian.org>
+.RS
+j-random-package
+j-random-other
+.RE
+.PP
+Diana Hacker <diana@example.org>
+.RS
+fun-package
+more-fun-package
+.RE
+.RE
+.fi
+.PP
+This is useful when you want, for example, to produce a list of packages
+that need to attention from their maintainers, e.g., to be rebuilt when
+a library version transition happens.
+.\" --------------------------------------------------------------------
+.SH OPTIONS
+.TP
+.BR \-h ", " \-\-help
+Print brief help message.
+.TP
+.BR \-i ", " \-\-stdin
+Read package names from the standard input, instead of taking them
+from the command line. Package names are whitespace delimited.
+.TP
+.BR \-d ", " \-\-dctrl
+Read package list from standard input in the format of a Debian
+package control file. This includes the status file, or output of
+apt-cache. This is the fastest way to use dd-list, as it uses the
+maintainer information from the input instead of looking up the maintainer
+of each listed package.
+.IP
+If no \fISource:\fP line is given, the \fIPackage:\fP name is used for
+output, which might be a binary package name.
+.TP
+.BR \-z ", " \-\-uncompress
+Try to uncompress the \-\-dctrl input before parsing. Supported compression
+formats are gz, bzip2 or xz.
+.TP
+\fB\-s\fR, \fB\-\-sources\fR \fISources_file\fR
+Read package information from the specified \fISources_file\fRs. This can be
+given multiple times. The files can be gz, bzip2 or xz compressed. If the
+filename does not end in \fI.gz\fR, \fI.bz2\fR or \fI.xz\fR, then the \fB-z\fR
+option must be used.
+.IP
+If no \fISources_file\fRs are specified, dd\-list will ask apt\-get for
+an appropriate set of sources (if \fIapt\fR is at version greater than 1.1.8),
+else any files matching \fI/var/lib/apt/lists/*_source_Sources\fR will be used.
+.TP
+.BR \-u ", " \-\-uploaders
+Also list developers who are named as uploaders of packages, not only
+the maintainers; this is the default behaviour, use \-\-nouploaders to
+prevent it. Uploaders are indicated with "(U)" appended to the package name.
+.TP
+.BR \-nou ", " \-\-nouploaders
+Only list package Maintainers, do not list Uploaders.
+.TP
+.BR \-b ", " \-\-print\-binary
+Use binary package names in the output instead of source package names
+(has no effect with \fB--dctrl\fP if the \fIPackage:\fP line contains
+source package names).
+.TP
+.BR \-V ", " \-\-version
+Print the version.
+.\" --------------------------------------------------------------------
+.SH AUTHOR
+Lars Wirzenius <liw@iki.fi>
+.P
+Joey Hess <joeyh@debian.org>
diff --git a/scripts/dd-list.pl b/scripts/dd-list.pl
new file mode 100755
index 0000000..d1dbcfb
--- /dev/null
+++ b/scripts/dd-list.pl
@@ -0,0 +1,322 @@
+#!/usr/bin/perl
+#
+# dd-list: Generate a list of maintainers of packages.
+#
+# Written by Joey Hess <joeyh@debian.org>
+# Modifications by James McCoy <jamessan@debian.org>
+# Based on a python implementation by Lars Wirzenius.
+# Copyright 2005 Lars Wirzenius, Joey Hess
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+use FileHandle;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use Dpkg::Version;
+use Dpkg::IPC;
+
+my $uncompress;
+
+BEGIN {
+ $uncompress = eval {
+ require IO::Uncompress::AnyUncompress;
+ IO::Uncompress::AnyUncompress->import('$AnyUncompressError');
+ 1;
+ };
+}
+
+my $version = '###VERSION###';
+
+sub normalize_package {
+ my $name = shift;
+ # Remove any arch-qualifier
+ $name =~ s/:.*//;
+ return lc($name);
+}
+
+sub sort_developers {
+ return map { $_->[0] }
+ sort { $a->[1] cmp $b->[1] }
+ map { [$_, uc] } @_;
+}
+
+sub help {
+ print <<"EOF";
+Usage: dd-list [options] [package ...]
+
+ -h, --help
+ Print this help text.
+
+ -i, --stdin
+ Read package names from the standard input.
+
+ -d, --dctrl
+ Read package list in Debian control data from standard input.
+
+ -z, --uncompress
+ Try to uncompress the --dctrl input before parsing. Supported
+ compression formats are gz, bzip2 and xz.
+
+ -s, --sources SOURCES_FILE
+ Read package information from given SOURCES_FILE instead of all files
+ matching /var/lib/apt/lists/*_source_Sources. Can be specified
+ multiple times. The files can be gz, bzip2 or xz compressed.
+
+ -u, --uploaders
+ Also list Uploaders of packages, not only the listed Maintainers
+ (this is the default behaviour, use --nouploaders to prevent this).
+
+ -nou, --nouploaders
+ Only list package Maintainers, do not list Uploaders.
+
+ -b, --print-binary
+ If binary package names are given as input, print these names
+ in the output instead of corresponding source packages.
+
+ -V, --version
+ Print version (it\'s $version by the way).
+EOF
+}
+
+my $use_stdin = 0;
+my $use_dctrl = 0;
+my $source_files = [];
+my $show_uploaders = 1;
+my $opt_uncompress = 0;
+my $print_binary = 0;
+GetOptions(
+ "help|h" => sub { help(); exit },
+ "stdin|i" => \$use_stdin,
+ "dctrl|d" => \$use_dctrl,
+ "sources|s=s@" => \$source_files,
+ "uploaders|u!" => \$show_uploaders,
+ 'z|uncompress' => \$opt_uncompress,
+ "print-binary|b" => \$print_binary,
+ "version" => sub { print "dd-list version $version\n" })
+ or do {
+ help();
+ exit(1);
+ };
+
+if ($opt_uncompress && !$uncompress) {
+ warn
+"You must have the libio-compress-perl package installed to use the -z option.\n";
+ exit 1;
+}
+
+my %dict;
+my $errors = 0;
+my %package_name;
+
+sub parsefh {
+ my ($fh, $fname, $check_package) = @_;
+ local $/ = "\n\n";
+ my $package_names;
+ if ($check_package) {
+ $package_names = sprintf '(?:^| )(%s)(?:,|$)',
+ join '|', map { "\Q$_\E" }
+ keys %package_name;
+ }
+ my %sources;
+ while (<$fh>) {
+ my ($package, $source, $binaries, $maintainer, @uploaders);
+
+ # These source packages are only kept around because of stale binaries
+ # on old archs or due to Built-Using relationships.
+ if (/^Extra-Source-Only:\s+yes/m) {
+ next;
+ }
+
+ # Binary is shown in _source_Sources and contains all binaries produced by
+ # that source package
+ if (/^Binary:\s+(.*(?:\n .*)*)$/m) {
+ $binaries = $1;
+ $binaries =~ s/\n//;
+ }
+ # Package is shown both in _source_Sources and _binary-*. It is the
+ # name of the package, source or binary respectively, being described
+ # in that control stanza
+ if (/^Package:\s+(.*)$/m) {
+ $package = $1;
+ }
+ # Source is shown in _binary-* and specifies the source package which
+ # produced the binary being described
+ if (/^Source:\s+(.*)$/m) {
+ $source = $1;
+ }
+ if (/^Maintainer:\s+(.*)$/m) {
+ $maintainer = $1;
+ }
+ if (/^Uploaders:\s+(.*(?:\n .*)*)$/m) {
+ my $matches = $1;
+ $matches =~ s/\n//g;
+ @uploaders = split /(?<=>)\s*,\s*/, $matches;
+ }
+ my $version = '0~0~0';
+ if (/^Version:\s+(.*)$/m) {
+ $version = $1;
+ }
+
+ if (defined $maintainer
+ && (defined $package || defined $source || defined $binaries)) {
+ $source ||= $package;
+ $binaries ||= $package;
+ my @names;
+ if ($check_package) {
+ my @pkgs;
+ if (@pkgs = ($binaries =~ m/$package_names/g)) {
+ $sources{$source}{$version}{binaries} = [@pkgs];
+ } elsif ($source !~ m/$package_names/) {
+ next;
+ }
+ } else {
+ $sources{$source}{$version}{binaries} = [$binaries];
+ }
+ $sources{$source}{$version}{maintainer} = $maintainer;
+ $sources{$source}{$version}{uploaders} = [@uploaders];
+ } else {
+ warn "E: parse error in stanza $. of $fname\n";
+ $errors = 1;
+ }
+ }
+
+ for my $source (keys %sources) {
+ my @versions
+ = sort map { Dpkg::Version->new($_) } keys %{ $sources{$source} };
+ my $version = $versions[-1];
+ my $srcinfo = $sources{$source}{$version};
+ my @names;
+ if ($check_package) {
+ $package_name{$source}--;
+ $package_name{$_}-- for @{ $srcinfo->{binaries} };
+ }
+ @names = $print_binary ? @{ $srcinfo->{binaries} } : $source;
+ push @{ $dict{ $srcinfo->{maintainer} } }, @names;
+ if ($show_uploaders && @{ $srcinfo->{uploaders} }) {
+ foreach my $uploader (@{ $srcinfo->{uploaders} }) {
+ push @{ $dict{$uploader} }, map "$_ (U)", @names;
+ }
+ }
+ }
+}
+
+if ($use_dctrl) {
+ my $fh;
+ if ($uncompress) {
+ $fh = IO::Uncompress::AnyUncompress->new('-')
+ or die "E: Unable to decompress STDIN: $AnyUncompressError\n";
+ } else {
+ $fh = \*STDIN;
+ }
+ parsefh($fh, 'STDIN');
+} else {
+ my @packages;
+ if ($use_stdin) {
+ while (my $line = <STDIN>) {
+ chomp $line;
+ $line =~ s/^\s+|\s+$//g;
+ push @packages, split(' ', $line);
+ }
+ } else {
+ @packages = @ARGV;
+ }
+ for my $name (@packages) {
+ $package_name{ normalize_package($name) } = 1;
+ }
+
+ my $apt_version;
+ spawn(
+ exec => ['dpkg-query', '-W', '-f', '${source:Version}', 'apt'],
+ to_string => \$apt_version,
+ wait_child => 1,
+ nocheck => 1
+ );
+
+ my $useAptHelper = 0;
+ if (defined $apt_version) {
+ $useAptHelper
+ = version_compare_relation($apt_version, REL_GE, '1.1.8');
+ }
+
+ unless (@{$source_files}) {
+ if ($useAptHelper) {
+ my ($sources, $err);
+ spawn(
+ exec => [
+ 'apt-get', 'indextargets',
+ '--format', '$(FILENAME)',
+ 'Created-By: Sources'
+ ],
+ to_string => \$sources,
+ error_to_string => \$err,
+ wait_child => 1,
+ nocheck => 1
+ );
+ if ($? >> 8) {
+ die "Unable to get list of Sources files from apt: $err\n";
+ }
+
+ $source_files = [split(/\n/, $sources)];
+ } else {
+ $source_files = [glob('/var/lib/apt/lists/*_source_Sources')];
+ }
+ }
+
+ foreach my $source (@{$source_files}) {
+ my $fh;
+ if ($useAptHelper) {
+ my $good = open($fh, '-|', '/usr/lib/apt/apt-helper', 'cat-file',
+ $source);
+ if (!$good) {
+ warn
+"E: Couldn't run apt-helper to get contents of '$source': $!\n";
+ $errors = 1;
+ next;
+ }
+ } else {
+ if ($opt_uncompress
+ || ($uncompress && $source =~ m/\.(?:gz|bz2|xz)$/)) {
+ $fh = IO::Uncompress::AnyUncompress->new($source);
+ } else {
+ $fh = FileHandle->new("<$source");
+ }
+ unless (defined $fh) {
+ warn "E: Couldn't open $source\n";
+ $errors = 1;
+ next;
+ }
+ }
+ parsefh($fh, $source, 1);
+ close $fh;
+ }
+}
+
+foreach my $developer (sort_developers(keys %dict)) {
+ print "$developer\n";
+ my %seen;
+ foreach my $package (sort @{ $dict{$developer} }) {
+ next if $seen{$package};
+ $seen{$package} = 1;
+ print " $package\n";
+ }
+ print "\n";
+}
+
+foreach my $package (grep { $package_name{$_} > 0 } keys %package_name) {
+ warn "E: Unknown package: $package\n";
+ $errors = 1;
+}
+
+exit($errors);
diff --git a/scripts/deb-janitor b/scripts/deb-janitor
new file mode 100755
index 0000000..9f5f242
--- /dev/null
+++ b/scripts/deb-janitor
@@ -0,0 +1,320 @@
+#!/usr/bin/python3
+# Copyright (c) 2020 Jelmer Vernooij <jelmer@debian.org>
+#
+# 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.
+#
+# See file /usr/share/common-licenses/GPL-3 for more details.
+#
+# pylint: disable=invalid-name
+# pylint: enable=invalid-name
+
+"""
+Command-line interface for the Debian Janitor.
+
+See https://janitor.debian.net/
+"""
+
+import argparse
+import json
+import logging
+import subprocess
+import sys
+from typing import Any, Optional
+from urllib.error import HTTPError
+from urllib.parse import quote, urlencode
+from urllib.request import Request, urlopen
+
+from debian.changelog import Changelog
+
+import devscripts
+
+DEFAULT_API_URL = "https://janitor.debian.net/api/"
+USER_AGENT = f"devscripts janitor cli ({devscripts.__version__})"
+DEFAULT_URLLIB_TIMEOUT = 30
+
+
+def _get_json_url(http_url: str, timeout: int = DEFAULT_URLLIB_TIMEOUT) -> Any:
+ headers = {"User-Agent": USER_AGENT, "Accept": "application/json"}
+ logging.debug("Retrieving %s", http_url)
+ with urlopen(Request(http_url, headers=headers), timeout=timeout) as resp:
+ http_contents = resp.read()
+ return json.loads(http_contents)
+
+
+def schedule(source, campaign, api_url=DEFAULT_API_URL):
+ """Schedule a new run for a package.
+
+ Args:
+ source: the source package name
+ campaign: the campaign to schedule for
+ """
+ url = f"{api_url}{quote(campaign)}/pkg/{quote(source)}/schedule"
+ headers = {"User-Agent": USER_AGENT}
+ req = Request(url, headers=headers, method="POST")
+ try:
+ with urlopen(req) as resp:
+ resp = json.load(resp)
+ except HTTPError as err:
+ if err.code == 404:
+ raise NoSuchSource(json.loads(err.read())["reason"]) from err
+ raise
+ estimated_duration = resp["estimated_duration_seconds"]
+ queue_position = resp["queue_position"]
+ queue_wait_time = resp["queue_wait_time"]
+ return (estimated_duration, queue_position, queue_wait_time)
+
+
+class MissingDiffError(Exception):
+ """There is no diff for the specified package/campaign combination."""
+
+
+class NoSuchSource(Exception):
+ """There is no source package known with the specified name."""
+
+
+def diff(source, campaign, api_url=DEFAULT_API_URL):
+ """Retrieve the source diff for a package/campaign.
+
+ Args:
+ source: the source package name
+ campaign: the campaign to retrieve
+ Returns:
+ the diff as a bytestring
+ Raises:
+ MissingDiffError: If the diff was missing
+ (source not valid, campaign not valid, no runs yet, etc)
+ """
+ url = f"{api_url}{quote(campaign)}/pkg/{quote(source)}/diff"
+ headers = {"User-Agent": USER_AGENT, "Accept": "text/plain"}
+ req = Request(url, headers=headers)
+ try:
+ with urlopen(req) as resp:
+ data = resp.read()
+ except HTTPError as err:
+ if err.code == 404:
+ raise MissingDiffError(err.read().decode()) from err
+ raise err
+ return data
+
+
+def merge(
+ source: str, campaign: str, api_url: str = DEFAULT_API_URL, force: bool = False
+): # pylint: disable=R0915
+ """Merge changes from a campaign.
+
+ Args:
+ source: the source package name
+ campaign: applicable campaign
+ api_url: API URL
+ """
+ url = f"{api_url}{quote(campaign)}/pkg/{quote(source)}"
+ try:
+ result = _get_json_url(url)
+ except HTTPError as err:
+ if err.code == 404:
+ logging.warning("No runs for %s/%s", source, campaign)
+ return 1
+ raise
+
+ if result["result_code"] != "success":
+ if force:
+ logging.fatal(
+ "Last run was not successful: %s; run with --force to merge anyway.",
+ result["result_code"],
+ )
+ return 1
+ logging.warning("Last run was not success: %s, merging anyway.")
+
+ remotes = subprocess.check_output(["git", "remote"], text=True).splitlines(False)
+ if "debian-janitor" not in remotes:
+ logging.info("Adding debian-janitor remote")
+ subprocess.check_call(
+ [
+ "git",
+ "remote",
+ "add",
+ "debian-janitor",
+ f"https://janitor.debian.net/git/{source}",
+ ]
+ )
+ else:
+ logging.debug("debian-janitor already remote exists")
+
+ if len(result["branches"]) > 1:
+ logging.fatal(
+ "Merging changes with multiple branches is currently not supported"
+ )
+ return 1
+
+ if len(result["branches"]) < 1:
+ logging.fatal("No branches to merge")
+ return 1
+
+ # TODO(jelmer): Fetch tags
+
+ ret = 0
+ for role, _details in result["branches"].items():
+ try:
+ subprocess.check_call(
+ ["git", "pull", "debian-janitor", f"{campaign}/{role or 'main'}"]
+ )
+ except subprocess.CalledProcessError:
+ # Git would have already printed an error to stderr
+ ret = 1
+
+ return ret
+
+
+def review(
+ source: str,
+ campaign: str,
+ verdict: str,
+ comment: Optional[str] = None,
+ api_url=DEFAULT_API_URL,
+) -> int:
+ """Submit a review of a package.
+
+ Args:
+ source: the source package name
+ campaign: applicable campaign
+ verdict: a verdict ("approved", "abstained", "rejected", "reschedule")
+ comment: optional comment explaining the verdict
+ """
+ url = f"{api_url}{quote(campaign)}/pkg/{quote(source)}"
+ headers = {"User-Agent": USER_AGENT, "Accept": "text/plain"}
+ data = {"review-status": verdict}
+ if comment:
+ data["review-comment"] = comment
+ req = Request(url, headers=headers, method="POST", data=urlencode(data).encode())
+ with urlopen(req) as resp:
+ resp.read()
+ return 0
+
+
+def status(source: str, campaign: str, api_url: str = DEFAULT_API_URL) -> int:
+ """Print the status for a package.
+
+ Args:
+ source: the source package name
+ campaign: applicable campaign
+ """
+ url = f"{api_url}{quote(campaign)}/pkg/{quote(source)}"
+ try:
+ data = _get_json_url(url)
+ except HTTPError as err:
+ if err.code == 404:
+ logging.info("No relevant runs.")
+ # TODO(jelmer): print info about next scheduled run and command?
+ return 2
+ raise
+ logging.info("Status: %s - %s", data["result_code"], data["description"])
+ logging.info("Command: %s", data["command"])
+ if data.get("failure"):
+ logging.warning("Failure stage: %s", data["failure"])
+ return 1
+ return 0
+
+
+def main(argv): # pylint: disable=R0911,R0912,R0915
+ """Handle command-line arguments."""
+ parser = argparse.ArgumentParser("janitor")
+ parser.add_argument("--debug", action="store_true")
+ parser.add_argument(
+ "--api-url", type=str, help="API endpoint to talk to", default=DEFAULT_API_URL
+ )
+ subparsers = parser.add_subparsers(help="sub-command help", dest="subcommand")
+ schedule_parser = subparsers.add_parser("schedule")
+ schedule_parser.add_argument("campaign")
+ schedule_parser.add_argument("source", help="Source package name", nargs="?")
+ diff_parser = subparsers.add_parser("diff")
+ diff_parser.add_argument("campaign")
+ diff_parser.add_argument("source", help="Source package name", nargs="?")
+ merge_parser = subparsers.add_parser("merge")
+ merge_parser.add_argument("campaign")
+ review_parser = subparsers.add_parser("review")
+ review_parser.add_argument("campaign")
+ review_parser.add_argument("--source", help="Source package name")
+ review_parser.add_argument(
+ "verdict",
+ help="Verdict",
+ choices=["approved", "rejected", "abstained", "reschedule"],
+ type=str,
+ )
+ review_parser.add_argument("comment", help="Comment explaining review", nargs="?")
+ status_parser = subparsers.add_parser("status")
+ status_parser.add_argument("campaign")
+ status_parser.add_argument("source", help="Source package name", nargs="?")
+ args = parser.parse_args(argv)
+ logging.basicConfig(
+ format="%(message)s", level=logging.INFO if not args.debug else logging.DEBUG
+ )
+
+ def _get_local_source() -> str:
+ try:
+ with open("debian/changelog", "r", encoding="utf-8") as changelog_file:
+ changelog = Changelog(changelog_file)
+ except FileNotFoundError:
+ parser.error("not in Debian package, and no source package name specified")
+ logging.info("Using source package: %s", changelog.package)
+ return changelog.package
+
+ if args.subcommand == "schedule":
+ if args.source is None:
+ args.source = _get_local_source()
+ try:
+ (est_duration, pos, wait_time) = schedule(
+ args.source, args.campaign, api_url=args.api_url
+ )
+ except NoSuchSource as err:
+ logging.fatal("%s", err.args[0])
+ return 1
+ if pos is not None:
+ logging.info(
+ "Scheduled. Estimated duration: %.2fs,"
+ " queue position: %d (wait time: %.2f)",
+ est_duration,
+ pos,
+ wait_time,
+ )
+ else:
+ logging.info("Scheduled.")
+ return 0
+ if args.subcommand == "diff":
+ if args.source is None:
+ args.source = _get_local_source()
+ try:
+ sys.stdout.buffer.write(
+ diff(args.source, args.campaign, api_url=args.api_url)
+ )
+ sys.stdout.flush()
+ except MissingDiffError as err:
+ logging.fatal("%s", err.args[0])
+ return 1
+ return 0
+ if args.subcommand == "merge":
+ source = _get_local_source()
+ return merge(source, args.campaign, api_url=args.api_url)
+ if args.subcommand == "review":
+ if args.source is None:
+ args.source = _get_local_source()
+ return review(
+ args.source, args.campaign, args.verdict, args.comment, api_url=args.api_url
+ )
+ if args.subcommand == "status":
+ if args.source is None:
+ args.source = _get_local_source()
+ return status(args.source, args.campaign, api_url=args.api_url)
+ parser.print_usage()
+ return 1
+
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv[1:]))
diff --git a/scripts/deb-janitor.1 b/scripts/deb-janitor.1
new file mode 100644
index 0000000..223a206
--- /dev/null
+++ b/scripts/deb-janitor.1
@@ -0,0 +1,94 @@
+.\" Copyright (c) 2020 Jelmer Vernooij <jelmer@debian.org>
+.\"
+.\" 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.
+.\"
+.\" See file /usr/share/common-licenses/GPL-3 for more details.
+.\"
+.TH "DEB\-JANITOR" 1 "Debian Utilities" "DEBIAN"
+
+.SH NAME
+deb-janitor \- interact with the Debian Janitor service
+
+.SH SYNOPSIS
+.TP
+.B deb-janitor status CAMPAIGN SOURCE?
+.TP
+.B deb-janitor diff CAMPAIGN SOURCE?
+.TP
+.B deb-janitor schedule CAMPAIGN SOURCE?
+.TP
+.B deb-janitor merge [--force] CAMPAIGN
+.TP
+.B deb-janitor review CAMPAIGN [--source SOURCE] rejected|approved|reschedule COMMENT?
+
+.SH DESCRIPTION
+.B deb-janitor
+is a command-line client for the Debian Janitor service, interacting
+with the API. It currently allows retrieving the diff for
+specific packages or scheduling new runs.
+.PP
+\fBCAMPAIGN\fR is the name of one of the campaigns supported by the janitor. Common values
+include \fIlintian-fixes\fR and \fImultiarch-fixes\fR. See the homepage for a
+full list.
+.PP
+\fBSOURCE\fR is the name of a source package. If no source package name is specified,
+the source name is retrieved from debian/changelog in the current directory.
+
+.SH OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+show this help message and exit
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Output more information
+.TP
+\fB\-\-api-url\fR
+Override the API endpoint to communicate with, rather than using the
+main Debian Janitor instance. E.g. --api-url=https://janitor.kali.org/api/.
+
+.SH EXAMPLES
+.EX
+# Schedule a new run fixing lintian issues in the "dulwich" package:
+$ deb-janitor schedule dulwich lintian-fixes
+Scheduled. Estimated duration: 236.32s, queue position: 1 (wait time: 0.00)
+
+# Retrieve the diff for fontmake
+$ deb-janitor diff fontmake lintian-fixes
+=== added file 'debian/upstream/metadata'
+--- a/debian/upstream/metadata 1970-01-01 00:00:00 +0000
++++ b/debian/upstream/metadata 2020-11-28 11:58:34 +0000
+@@ -0,0 +1,5 @@
++---
++Bug-Database: https://github.com/googlei18n/fontmake/issues
++Bug-Submit: https://github.com/googlei18n/fontmake/issues/new
++Repository: https://github.com/googlei18n/fontmake.git
++Repository-Browse: https://github.com/googlei18n/fontmake
+
+# Leave a review for a package
+$ deb-janitor review fontmake lintian-fixes rejected "Some fonts are no longer installed"
+
+# Merge lintian-fixes for a package
+$ debcheckout a56
+$ cd a56
+$ deb-janitor merge lintian-fixes
+Adding debian-janitor remote
+
+
+.EE
+
+.SH AUTHORS
+\fBdeb-janitor\fR and this manual page were written by Jelmer Vernooij
+<jelmer@debian.org>
+.PP
+Both are released under the GNU General Public License, version 3 or later.
+
+.SH SEE ALSO
+.BR lintian-brush (1)
diff --git a/scripts/deb-reversion.dbk b/scripts/deb-reversion.dbk
new file mode 100644
index 0000000..942f4e9
--- /dev/null
+++ b/scripts/deb-reversion.dbk
@@ -0,0 +1,320 @@
+<?xml version='1.0' encoding='ISO-8859-1'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
+
+<!--
+
+Process this file with an XSLT processor: `xsltproc \
+-''-nonet /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
+manpages/docbook.xsl manpage.dbk'. A manual page
+<package>.<section> will be generated. You may view the
+manual page with: nroff -man <package>.<section> | less'. A
+typical entry in a Makefile or Makefile.am is:
+
+DB2MAN=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
+manpages/docbook.xsl
+XP=xsltproc -''-nonet
+
+manpage.1: manpage.dbk
+ $(XP) $(DB2MAN) $<
+
+The xsltproc binary is found in the xsltproc package. The
+XSL files are in docbook-xsl. Please remember that if you
+create the nroff version in one of the debian/rules file
+targets (such as build), you will need to include xsltproc
+and docbook-xsl in your Build-Depends control field.
+
+-->
+
+ <!-- Fill in your name for FIRSTNAME and SURNAME. -->
+ <!ENTITY dhfirstname "<firstname>martin f.</firstname>">
+ <!ENTITY dhsurname "<surname>krafft</surname>">
+ <!ENTITY dhmaintfirstname "<firstname>Julian</firstname>">
+ <!ENTITY dhmaintsurname "<surname>Gilbey</surname>">
+ <!-- Please adjust the date whenever revising the manpage. -->
+ <!ENTITY dhdate "<date>Feb 13, 2006</date>">
+ <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+ allowed: see man(7), man(1). -->
+ <!ENTITY dhsection "<manvolnum>1</manvolnum>">
+ <!ENTITY dhemail "<email>madduck@debian.org</email>">
+ <!ENTITY dhmaintemail "<email>jdg@debian.org</email>">
+ <!ENTITY dhusername "martin f. krafft">
+ <!ENTITY dhmaintusername "Julian Gilbey">
+ <!ENTITY dhucpackage "<refentrytitle>deb-reversion</refentrytitle>">
+ <!ENTITY dhpackage "deb-reversion">
+ <!ENTITY dhcommand "deb-reversion">
+
+ <!ENTITY debian "<productname>Debian</productname>">
+ <!ENTITY gnu "<acronym>GNU</acronym>">
+ <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+
+<refentry>
+ <refentryinfo>
+ <address>
+ &dhemail;
+ </address>
+ &dhdate;
+ </refentryinfo>
+ <refmeta>
+ &dhucpackage;
+
+ &dhsection;
+ </refmeta>
+ <refnamediv>
+ <refname>&dhcommand;</refname>
+
+ <refpurpose>simple script to change the version of a .deb file</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>&dhcommand;</command>
+ <arg choice="opt">
+ <replaceable>options</replaceable>
+ </arg>
+ <replaceable> .deb-file</replaceable>
+ <arg choice="opt" rep="repeat"><replaceable>log message</replaceable></arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>DESCRIPTION</title>
+
+ <para>
+ <command>&dhcommand;</command> unpacks the specified <filename>.deb</filename> file, changes the version
+ number in the relevant locations, appends a Debian
+ <filename>changelog</filename> entry with the specified
+ contents, and creates a new <filename>.deb</filename> file with the updated version.
+ </para>
+
+ <para>
+ By default, the tool creates a new version number suitable for
+ local changes, such that the new package will be greater than
+ the current one, but lesser than any future, official Debian
+ packages. With <option>-v <replaceable
+ class="parameter">version</replaceable></option>, the version
+ number can be specified directly. On the other hand, the
+ <option>-c</option> simply calculates the new version number but
+ does not generate a new package.
+ </para>
+
+ <para>
+ When building a <filename>.deb</filename> file, root privileges are required in order
+ to have the correct permissions and ownerships in the resulting
+ <filename>.deb</filename> file. This can be achieved either by running
+ <command>&dhcommand;</command> as root or running under
+ <citerefentry><refentrytitle>fakeroot</refentrytitle>
+ <manvolnum>1</manvolnum></citerefentry>, as 'fakeroot
+ &dhcommand; foo.deb'.
+ </para>
+
+ <para>
+ With <option>-k <replaceable
+ class="parameter">hook</replaceable></option>, a hook script may
+ be specified, which is run on the unpacked binary packages just
+ before it is repacked. If you want to write changelog entries
+ from within the hook, use '<command>dch -a -- <replaceable
+ class="parameter">your message</replaceable></command>'.
+ (Alternatively, do not give a changelog entry on the
+ <command>&dhcommand;</command> command line and
+ <command>dch</command> will be called automatically.) The hook
+ command must be placed in quotes if it has more than one word;
+ it is called via <command>sh -c</command>.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>OPTIONS</title>
+ <variablelist>
+ <varlistentry>
+ <term><option>-v</option> <replaceable class="parameter">new-version</replaceable></term>
+ <term><option>--new-version</option> <replaceable class="parameter">new-version</replaceable></term>
+ <listitem>
+ <para>
+ Specifies the version number to be used for the new
+ version. Passed to <citerefentry>
+ <refentrytitle>dch</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-o</option> <replaceable class="parameter">old-version</replaceable></term>
+ <term><option>--old-version</option> <replaceable class="parameter">old-version</replaceable></term>
+ <listitem>
+ <para>
+ Specifies the version number to be used as the old
+ version instead of the version stored in the <filename>.deb</filename>'s
+ <filename>control</filename> file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-c</option></term>
+ <term><option>--calculate-only</option></term>
+ <listitem>
+ <para>
+ Only calculate and display the new version number which
+ would be used; do not build a new <filename>.deb</filename> file. Cannot be
+ used in conjunction with <option>-v</option>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-s</option> <replaceable class="parameter">string</replaceable></term>
+ <term><option>--string</option> <replaceable class="parameter">string</replaceable></term>
+ <listitem>
+ <para>
+ Instead of using 'LOCAL.' as the version string to append
+ to the old version number, use <replaceable
+ class="parameter">string</replaceable> instead.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-k</option> <replaceable class="parameter">hook-command</replaceable></term>
+ <term><option>--hook</option> <replaceable class="parameter">hook-command</replaceable></term>
+ <listitem>
+ <para>
+ A hook command to run after unpacking the old <filename>.deb</filename> file and
+ modifying the <filename>changelog</filename>, and before packing up the new <filename>.deb</filename>
+ file. Must be in quotes if it is more than one (shell)
+ word. Only one hook command may be specified; if you want
+ to perform more than this, you could specify 'bash' as the
+ hook command, and you will then be given a shell to work
+ in.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-D</option></term>
+ <term><option>--debug</option></term>
+ <listitem>
+ <para>
+ Pass <option>--debug</option> to
+ <citerefentry>
+ <refentrytitle>dpkg-deb</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-b</option></term>
+ <term><option>--force-bad-version</option></term>
+ <listitem>
+ <para>
+ Pass <option>--force-bad-version</option> to
+ <citerefentry>
+ <refentrytitle>dch</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-h</option></term>
+ <term><option>--help</option></term>
+ <listitem>
+ <para>
+ Display usage information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-V</option></term>
+ <term><option>--version</option></term>
+ <listitem>
+ <para>
+ Display version information.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>SEE ALSO</title>
+ <para>
+ <citerefentry>
+ <refentrytitle>dch</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>dpkg-deb</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>,
+ <citerefentry>
+ <refentrytitle>fakeroot</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>DISCLAIMER</title>
+ <para>
+ &dhpackage; is a tool intended to help porters with
+ modifying packages for other architectures, and to augment deb-repack,
+ which creates modified packages with identical version numbers as the
+ official packages. Chaos will ensue! With &dhpackage;, a proper version
+ number can be selected, which does not obstruct the next official
+ release but can be specifically pinned with APT or held with dpkg.
+ </para>
+
+ <para>
+ Please take note that &dhpackage; does not come without problems. While
+ it works fine in most cases, it may just not in yours. Especially,
+ please consider that it changes binary packages (only!) and hence can
+ break strict versioned dependencies between binary packages generated
+ from the same source. </para>
+
+ <para>
+ You are using this tool at your own risk and I shall not shed a tear if
+ your gerbil goes up in flames, your microwave attacks the stereo, or the
+ angry slamming of your fist spills your coffee into the keyboard, which
+ sets off a chain reaction resulting in a vast amount of money transferred
+ from your account to mine.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>AUTHOR</title>
+
+ <para>
+ &dhpackage; is Copyright 2004-5 by &dhusername; &dhemail; and
+ modifications are Copyright 2006 by &dhmaintusername; &dhmaintemail;.
+ </para>
+
+ <para>
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the Artistic License:
+ <ulink>http://www.opensource.org/licenses/artistic-license.php</ulink>.
+ On Debian systems, the complete text of the Artistic License can be
+ found
+ in <filename>/usr/share/common-licenses/Artistic</filename>.
+ </para>
+
+ <para>
+ This manual page was written by &dhusername; &dhemail; and
+ modified by &dhmaintusername; &dhmaintemail;.
+ </para>
+
+ </refsect1>
+</refentry>
+
+<!--
+ Local Variables:
+ mode: xml
+ End:
+-->
diff --git a/scripts/deb-reversion.sh b/scripts/deb-reversion.sh
new file mode 100755
index 0000000..88ee290
--- /dev/null
+++ b/scripts/deb-reversion.sh
@@ -0,0 +1,231 @@
+#!/bin/bash
+#
+# deb-reversion -- a script to bump a .deb file's version number.
+#
+# Copyright © martin f. krafft <madduck@madduck.net>
+# with contributions by: Goswin von Brederlow, Filippo Giunchedi
+# Released under the terms of the Artistic License 2.0
+#
+# TODO:
+# - add debugging output.
+# - allow to be used on dpkg-source and dpkg-deb unpacked source packages.
+#
+set -eu
+
+PROGNAME=${0##*/}
+PROGVERSION=0.9.1
+VERSTR='LOCAL.'
+
+versioninfo() {
+ echo "$PROGNAME $PROGVERSION"
+ echo "$PROGNAME is copyright © martin f. krafft"
+ echo "Released under the terms of the Artistic License 2.0"
+ echo "This programme is part of devscripts ###VERSION###."
+}
+
+usage() {
+ cat <<-_eousage
+ Usage: $PROGNAME [options] .deb-file [log message]
+ $PROGNAME -o <version> -c
+
+ Increase the .deb file's version number, noting the change in the
+ changelog with the specified log message. You should run this
+ program either as root or under fakeroot.
+
+ Options:
+ _eousage
+ cat <<-_eooptions | column -s\& -t
+ -v ver|--new-version=ver & use this as new version number
+ -o old|--old-version=ver & calculate new version number based on this old one
+ -c|--calculate-only & only calculate (and print) the augmented version
+ -s str|--string=str & append this string instead of '$VERSTR' to
+ & calculate new version number
+ -k script|--hook=script & call this script before repacking
+ -D|--debug & call dpkg-deb in debug mode
+ -b|--force-bad-version & passed through to dch
+ -h|--help & show this output
+ -V|--version & show version information
+ _eooptions
+}
+
+write() {
+ local PREFIX; PREFIX="$1"; shift
+ echo "${PREFIX}: $PROGNAME: $@" >&2
+}
+
+err() {
+ write E "$@"
+}
+
+CURDIR="$(pwd)"
+SHORTOPTS=hVo:v:ck:Ds:b
+LONGOPTS=help,version,old-version:,new-version:,calculate-only,hook:,debug,string:,force-bad-version
+eval set -- "$(getopt -s bash -o $SHORTOPTS -l $LONGOPTS -n "$PROGNAME" -- "$@")"
+
+CALCULATE=0
+DPKGDEB_DEBUG=
+DEB=
+DCH_OPTIONS=
+for opt in "$@"; do
+ case "${OPT_STATE:-}" in
+ SET_OLD_VERSION) OLD_VERSION="$opt";;
+ SET_NEW_VERSION) NEW_VERSION="$opt";;
+ SET_STRING) VERSTR="$opt";;
+ SET_HOOK) HOOK="$opt";;
+ *) :;;
+ esac
+ [ -n "${OPT_STATE:-}" ] && unset OPT_STATE && continue
+
+ case $opt in
+ -v|--new-version) OPT_STATE=SET_NEW_VERSION;;
+ -o|--old-version) OPT_STATE=SET_OLD_VERSION;;
+ -c|--calculate-only|--print-only) CALCULATE=1;;
+ -s|--string) OPT_STATE=SET_STRING;;
+ -k|--hook) OPT_STATE=SET_HOOK;;
+ -D|--debug) DPKGDEB_DEBUG=--debug;;
+ -b|--force-bad-version) DCH_OPTIONS="${DCH_OPTIONS} -b";;
+ -h|--help) usage; exit 0;;
+ -V|--version) versioninfo; exit 0;;
+ --) :;;
+ *)
+ if [ -f "$opt" ]; then
+ if [ -n "$DEB" ]; then
+ err "multiple .deb files specified: ${DEB##*/} and $opt"
+ exit 1
+ else
+ case "$opt" in
+ /*.deb|/*.udeb) DEB="$opt";;
+ *.deb| *.udeb) DEB="${CURDIR}/$opt";;
+ *)
+ err "not a .deb file: $opt";
+ exit 2
+ ;;
+ esac
+ fi
+ else
+ LOG="${LOG:+$LOG }$opt"
+ fi
+ ;;
+ esac
+done
+
+if [ $CALCULATE -eq 0 ] || [ -z "${OLD_VERSION:-}" ]; then
+ if [ -z "$DEB" ]; then
+ err no .deb file specified.
+ exit 3
+ fi
+fi
+
+if [ -n "${NEW_VERSION:-}" ] && [ $CALCULATE -eq 1 ]; then
+ echo "$PROGNAME error: the options -v and -c cannot be used together" >&2
+ usage
+ exit 4
+fi
+
+make_temp_dir() {
+ TMPDIR=$(mktemp -d --tmpdir deb-reversion.XXXXXX)
+ trap 'rm -rf "$TMPDIR"' EXIT
+ mkdir -p ${TMPDIR}/package
+ TMPDIR=${TMPDIR}/package
+}
+
+extract_deb_file() {
+ dpkg-deb $DPKGDEB_DEBUG --extract "$1" .
+ dpkg-deb $DPKGDEB_DEBUG --control "$1" DEBIAN
+}
+
+get_version() {
+ dpkg-deb -f "$1" Version
+}
+
+bump_version() {
+ case "$1" in
+ *${VERSTR}[0-9]*)
+ REV=${1##*${VERSTR}}
+ echo ${1%${VERSTR}*}${VERSTR}$((++REV));;
+ *-*)
+ echo ${1}${VERSTR}1;;
+ *)
+ echo ${1}-0${VERSTR}1;;
+ esac
+}
+
+call_hook() {
+ [ -z "${HOOK:-}" ] && return 0
+ export VERSION
+ sh -c "$HOOK"
+}
+
+change_version() {
+ PACKAGE=$(sed -ne 's,^Package: ,,p' DEBIAN/control)
+ VERSION=$1
+
+ # changelog massaging is only needed in the deb (not-udeb) case:
+ if [ "$DEB_TYPE" = "deb" ]; then
+ LOGFILE=
+ for i in changelog{,.Debian}.gz; do
+ [ -f usr/share/doc/${PACKAGE}/$i ] \
+ && LOGFILE=usr/share/doc/${PACKAGE}/$i
+ done
+ if [ -n "$LOGFILE" ]; then
+ mkdir -p debian
+ zcat "$LOGFILE" > debian/changelog
+ shift
+ dch $DCH_OPTIONS -v "$VERSION" -- "$@"
+ call_hook
+ gzip -9 -c debian/changelog >| "$LOGFILE"
+ MD5SUM=$(md5sum "$LOGFILE")
+ sed -i "s@^[^ ]* $LOGFILE\$@$MD5SUM@" DEBIAN/md5sums
+ fi
+ else
+ call_hook
+ fi
+
+ sed -i -e "s,^Version: .*,Version: $VERSION," DEBIAN/control
+ rm -rf debian
+}
+
+repack_file() {
+ cd ..
+ dpkg-deb -b package >/dev/null
+ debfile=$(DPKG_COLORS=never DPKG_NLS=0 dpkg-name package.deb | sed -e "s,.*['\`]\(.*\).,\1,")
+ # if Package-Type: udeb is absent, dpkg-name can't rename into *.udeb,
+ # so we're left to an extra rename afterwards:
+ if [ "$DEB_TYPE" = udeb ]; then
+ udebfile=${debfile%%.deb}.udeb
+ mv $debfile $udebfile
+ echo $udebfile
+ else
+ echo $debfile
+ fi
+}
+
+[ -z "${OLD_VERSION:-}" ] && OLD_VERSION="$(get_version "$DEB")"
+[ -z "${NEW_VERSION:-}" ] && NEW_VERSION="$(bump_version $OLD_VERSION)"
+
+if [ $CALCULATE -eq 1 ]; then
+ echo $NEW_VERSION
+ exit 0
+fi
+
+if [ $(id -u) -ne 0 ]; then
+ err need root rights.
+ exit 5
+fi
+
+make_temp_dir
+cd "$TMPDIR"
+
+DEB_TYPE=$(echo "$DEB"|sed 's/.*[.]//')
+extract_deb_file "$DEB"
+change_version "$NEW_VERSION" "${LOG:-Bumped version with $PROGNAME}"
+FILE="$(repack_file)"
+
+if [ -f "$CURDIR/$FILE" ]; then
+ echo "$CURDIR/$FILE exists, moving to $CURDIR/$FILE.orig ." >&2
+ mv -i "$CURDIR/$FILE" "$CURDIR/$FILE.orig"
+fi
+
+mv "../$FILE" "$CURDIR"
+
+echo "version $VERSION of $PACKAGE is now available in $FILE ." >&2
diff --git a/scripts/deb-why-removed.pl b/scripts/deb-why-removed.pl
new file mode 100755
index 0000000..1c496b4
--- /dev/null
+++ b/scripts/deb-why-removed.pl
@@ -0,0 +1,251 @@
+#!/usr/bin/perl
+#
+# Copyright © 2017-2019 Guillem Jover <guillem@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use File::Basename;
+use File::Path qw(make_path);
+use File::Copy qw(cp);
+use File::Spec;
+use Getopt::Long qw(:config posix_default no_ignorecase);
+use HTTP::Tiny;
+use Dpkg::Index;
+use Devscripts::Output;
+
+my $VERSION = '0.0';
+my ($PROGNAME) = $0 =~ m{(?:.*/)?([^/]*)};
+
+my %url_map = ('debian' => 'https://ftp-master.debian.org/removals-full.822');
+my $default_url_origin = 'debian';
+
+#
+# Functions
+#
+
+sub version {
+ print "$PROGNAME $VERSION (devscripts ###VERSION###)\n";
+}
+
+sub usage {
+ print <<HELP;
+Usage: $PROGNAME [<option>...] <package>...
+
+Options:
+ -u, --url URL URL to the removals deb822 file list (defaults to
+ <$url_map{$default_url_origin}>).
+ --no-refresh Do not refresh the cached removals file even if old.
+ -h, -?, --help Print this help text.
+ --version Print the version.
+HELP
+}
+
+# XXX: DAK produces broken output, fix it up here before we process it.
+#
+# The two current bogus instances are, at least two fused paragraphs, and
+# bogus "sh: 0: getcwd() failed: No such file or directory" command output
+# interpersed within the file.
+sub fixup_broken_metadata {
+ my $cachefile = shift;
+ my $para_sep = 1;
+
+ open my $fh_old, '<', $cachefile
+ or ds_error("cannot open cache file $cachefile for fixup");
+ open my $fh_new, '>', "$cachefile.new"
+ or ds_error("cannot open cache file $cachefile.new for fixup");
+ while (my $line = <$fh_old>) {
+ if ($line =~ m/^\s*$/) {
+ $para_sep = 1;
+ } elsif (not $para_sep and $line =~ m/^Date:/) {
+ # XXX: We assume each paragraph starts with a Date: field, and
+ # inject the missing newline.
+ print {$fh_new} "\n";
+ } else {
+ $para_sep = 0;
+ }
+
+ # XXX: Fixup shell output detritus.
+ if ($line =~ s/sh: 0: getcwd\(\) failed: No such file or directory//) {
+ # Remove the trailing line so that the next line gets folded back
+ # into this one.
+ chomp $line;
+ }
+
+ print {$fh_new} $line;
+ }
+ close $fh_new or ds_error("cannot write cache file $cachefile.new");
+ close $fh_old;
+
+ # Preserve the original mtime so that mirroring works.
+ my ($atime, $mtime) = (stat $cachefile)[8, 9];
+ utime $atime, $mtime, "$cachefile.new";
+
+ rename "$cachefile.new", $cachefile
+ or ds_error("cannot replace cache file with fixup version");
+}
+
+sub cache_file {
+ my ($url, $cachefile) = @_;
+
+ cp($url, $cachefile) or ds_error("cannot copy removal metadata: $!");
+ fixup_broken_metadata($cachefile);
+}
+
+sub cache_http {
+ my ($url, $cachefile) = @_;
+
+ my $http = HTTP::Tiny->new(verify_SSL => 1);
+ my $resp = $http->mirror($url, $cachefile);
+
+ unless ($resp->{success}) {
+ ds_error(
+ "cannot fetch removal metadata: $resp->{status} $resp->{reason}");
+ }
+
+ if ($resp->{status} != 304) {
+ fixup_broken_metadata($cachefile);
+ }
+}
+
+#
+# Main program
+#
+
+my $opts;
+
+GetOptions(
+ 'url|u=s' => \$opts->{'url'},
+ 'no-refresh' => \$opts->{'no-refresh'},
+ 'help|h|?' => sub { usage(); exit 0 },
+ 'version' => sub { version(); exit 0 },
+ )
+ or die "\nUsage: $PROGNAME [<option>...] <package>...\n"
+ . "Run $PROGNAME --help for more details.\n";
+
+unless (@ARGV) {
+ ds_error('need at least one package name as an argument');
+}
+
+my $url = $opts->{url} // $default_url_origin;
+$url = $url_map{$url} if $url_map{$url};
+
+my $cachehome = $ENV{XDG_CACHE_HOME};
+$cachehome ||= File::Spec->catdir($ENV{HOME}, '.cache') if length $ENV{HOME};
+if (length $cachehome == 0) {
+ ds_error("unknown user home, cannot download removal metadata");
+}
+my $cachedir = File::Spec->catdir($cachehome, 'devscripts', 'deb-why-removed');
+my $cachefile = File::Spec->catfile($cachedir, basename($url));
+
+if (not -d $cachedir) {
+ make_path($cachedir);
+}
+
+if (not -e $cachefile or (-e _ and not $opts->{'no-refresh'})) {
+ # Normalize the URL.
+ $url =~ s{^file://}{};
+
+ # Cache the file locally.
+ if (-e $url) {
+ cache_file($url, $cachefile);
+ } else {
+ cache_http($url, $cachefile);
+ }
+}
+
+my $meta
+ = Dpkg::Index->new(
+ get_key_func => sub { return $_[0]->{Sources} // $_[0]->{Binaries} // '' },
+ );
+
+$meta->load($cachefile, compression => 0);
+
+STANZA: foreach my $entry ($meta->get) {
+ foreach my $pkg (@ARGV) {
+ # XXX: Skip bogus entries with no indexable fields.
+ next
+ if not defined $entry->{Sources}
+ and not defined $entry->{Binaries};
+
+ next
+ if ($entry->{Sources} // '') !~ m/\Q$pkg\E_/
+ && ($entry->{Binaries} // '') !~ m/\Q$pkg\E_/;
+
+ print $entry->output();
+ print "\n";
+ next STANZA;
+ }
+}
+
+=encoding utf8
+
+=head1 NAME
+
+deb-why-removed - shows the reason a package was removed from the archive
+
+=head1 SYNOPSIS
+
+B<deb-why-removed> [I<option>...] I<package>...
+
+=head1 DESCRIPTION
+
+This program will download the removals metadata from the archive, search
+and print the entries within for a source or binary package name match.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-u>, B<--url> I<URL>
+
+URL to the archive removals deb822-formatted file list.
+This can be either an actual URL (https://, http://, file://), an pathname
+or an origin name.
+Currently the only origin name known is B<debian>.
+
+=item B<--no-refresh>
+
+Do not refresh the cached removals file even if there is a newer version
+in the archive.
+
+=item B<-h>, B<-?>, B<--help>
+
+Show a help message and exit.
+
+=item B<--version>
+
+Show the program version.
+
+=back
+
+=head1 FILES
+
+=over 4
+
+=item I<cachedir>B</devscripts/deb-why-removed/>
+
+This directory contains the cached removal files downloaded from the archive.
+I<cachedir> will be either B<$XDG_CACHE_HOME> or if that is not defined
+B<$HOME/.cache/>.
+
+=back
+
+=head1 SEE ALSO
+
+L<https://ftp-master.debian.org/#removed>
+
+=cut
diff --git a/scripts/debbisect b/scripts/debbisect
new file mode 100755
index 0000000..d4a42c7
--- /dev/null
+++ b/scripts/debbisect
@@ -0,0 +1,1229 @@
+#!/usr/bin/env python3
+#
+# Copyright 2020 Johannes Schauer Marin Rodrigues <josch@debian.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# snapshot.d.o API feature requests:
+#
+# Currently, the API does not allow to list all dates for which a snapshot
+# was made. This would be useful to allow skipping snapshots. Currently we
+# blindly bisect but without knowing which date on snapshot.d.o a given
+# timestamp resolves to, we cannot mark it as untestable (see feature request
+# above) and without a list of testable timestamps we cannot reliably test
+# a timestamp before and after the one to skip.
+# See also: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=969603
+#
+# It would be useful to know when a package version was first seen in a given
+# suite. Without this knowledge we cannot reliably pick the snapshot timestamps
+# at which we want to test a given suite. For example, a package version might
+# appear in experimental long before it appears in unstable or any other suite
+# that is to be tested. Thus, the first_seen attribute of the snapshot API is
+# not very useful to determine a limited set of timestamps to test.
+# See also: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=806329
+
+# wishlist features
+# -----------------
+#
+# - restrict set of tested snapshot timestamps to those where a given package
+# set actually changed (needs a resolution to #806329)
+#
+# - allow marking snapshot timestamps as skippable, for example via script
+# exit code (needs resolution to #969603)
+#
+# - add convenience function which builds a given source package and installs
+# its build dependencies automatically
+
+# complains about log_message cannot be fixed because the original function
+# names one of its arguments "format" which is also forbidden...
+# pylint: disable=W0221
+#
+# pylint complains about too many branches but the code would not become more
+# readable by spreading it out across more functions
+# pylint: disable=R0912
+#
+# allow more than 1000 lines in this file
+# pylint: disable=C0302
+#
+# TODO: Adress invalid names
+# pylint: disable=invalid-name
+
+import argparse
+import atexit
+import collections
+import email.utils
+import http.client
+import http.server
+import io
+import logging
+import lzma
+import math
+import os
+import pty
+import re
+import select
+import shutil
+import socketserver
+import subprocess
+import sys
+import tempfile
+import threading
+import urllib.error
+import urllib.request
+from datetime import date, datetime, time, timedelta, timezone
+from functools import partial
+from http import HTTPStatus
+from time import sleep
+
+import debian
+import debian.deb822
+import requests
+
+HAVE_DATEUTIL = True
+try:
+ import dateutil.parser
+except ImportError:
+ HAVE_DATEUTIL = False
+
+HAVE_PARSEDATETIME = True
+try:
+ import parsedatetime
+except ImportError:
+ HAVE_PARSEDATETIME = False
+
+DINSTALLRATE = 21600
+
+
+def format_timestamp(timestamp):
+ return timestamp.strftime("%Y%m%dT%H%M%SZ")
+
+
+# We utilize the fact that the HTTP interface of snapshot.d.o responds with a
+# HTTP 301 redirect to the corresponding timestamp.
+# It would be better if there as an officially documented API function:
+# http://bugs.debian.org/969605
+def sanitize_timestamp(timestamp):
+ conn = http.client.HTTPConnection("snapshot.debian.org")
+ conn.request(
+ "HEAD", "/archive/debian/" + timestamp.strftime("%Y%m%dT%H%M%SZ") + "/"
+ )
+ res = conn.getresponse()
+ if res.status == 200:
+ return timestamp
+ assert res.status in (301, 302), res.status # moved permanently or temporarily
+ prefix = "http://snapshot.debian.org/archive/debian/"
+ location = res.headers["Location"]
+ assert location.startswith(prefix)
+ # flake8 wrongly insists that there must be no whitespace before colon
+ # See https://github.com/PyCQA/pycodestyle/issues/373
+ location = location[len(prefix) :] # noqa: E203
+ return datetime.strptime(location, "%Y%m%dT%H%M%S%z/")
+
+
+# we use a http proxy for two reasons
+# 1. it allows us to cache package data locally which is useful even for
+# single runs because temporally close snapshot timestamps share packages
+# and thus we reduce the load on snapshot.d.o which is also useful because
+# 2. snapshot.d.o requires manual bandwidth throttling or else it will cut
+# our TCP connection. Instead of using Acquire::http::Dl-Limit as an apt
+# option we use a proxy to only throttle on the initial download and then
+# serve the data with full speed once we have it locally
+class Proxy(http.server.SimpleHTTPRequestHandler):
+ def do_GET(self):
+ # check validity and extract the timestamp
+ try:
+ c1, c2, c3, timestamp, _ = self.path.split("/", 4)
+ except ValueError:
+ logging.error("don't know how to handle this request: %s", self.path)
+ self.send_error(HTTPStatus.BAD_REQUEST, f"Bad request path ({self.path})")
+ return
+ if ["", "archive", "debian"] != [c1, c2, c3]:
+ logging.error("don't know how to handle this request: %s", self.path)
+ self.send_error(HTTPStatus.BAD_REQUEST, f"Bad request path ({self.path})")
+ return
+ # make sure the pool directory is symlinked to the global pool
+ linkname = os.path.join(self.directory, c2, c3, timestamp, "pool")
+ if not os.path.exists(linkname):
+ os.makedirs(os.path.join(self.directory, c2, c3, timestamp), exist_ok=True)
+ os.symlink("../../../pool", linkname)
+ path = os.path.abspath(self.translate_path(self.path))
+ if not os.path.exists(path):
+ self._download_new(path)
+ return
+ f = self.send_head()
+ if f:
+ try:
+ self.copyfile(f, self.wfile)
+ except ConnectionResetError:
+ pass
+ f.close()
+
+ def _download_new(self, path):
+ # save file in local cache
+ maxtries = 3
+ head, _ = os.path.split(path)
+ os.makedirs(head, exist_ok=True)
+ totalsize = -1
+ downloaded = 0
+ for trynum in range(maxtries):
+ try:
+ headers = {}
+ if downloaded > 0:
+ # if file was partly downloaded, only request the rest
+ headers["Range"] = f"bytes={downloaded}-"
+ req = urllib.request.Request(
+ "http://snapshot.debian.org/" + self.path, headers=headers
+ )
+ # we use os.fdopen(os.open(...)) because we don't want to
+ # truncate the file and seek to the right position but also
+ # create it if it doesn't exist yet
+ with urllib.request.urlopen(req) as f, os.fdopen(
+ os.open(path, os.O_RDWR | os.O_CREAT), "rb+"
+ ) as out:
+ out.seek(downloaded)
+ if trynum == 0:
+ self.send_response(HTTPStatus.OK)
+ self.send_header("Content-type", f.headers["Content-type"])
+ self.send_header("Content-Length", f.headers["Content-Length"])
+ self.send_header("Last-Modified", f.headers["Last-Modified"])
+ self.end_headers()
+ totalsize = int(f.headers["Content-Length"])
+ while downloaded < totalsize:
+ chunksize = 200 * 1024
+ if totalsize - downloaded < chunksize:
+ chunksize = totalsize - downloaded
+ buf = f.read(chunksize) # 200 kB/s
+ if len(buf) != chunksize:
+ # something went wrong
+ logging.warning(
+ "%s: wanted %d but got %d bytes (try %d of %d)",
+ path,
+ chunksize,
+ len(buf),
+ trynum + 1,
+ maxtries,
+ )
+ sleep(10)
+ break
+ sleep(1) # snapshot.d.o needs heavy throttling
+ out.write(buf)
+ self.wfile.write(buf)
+ downloaded += chunksize
+ except urllib.error.HTTPError as e:
+ if e.code == 404:
+ self.send_error(404, "URLError")
+ return
+ logging.warning("got urllib.error.HTTPError: %s %s", repr(e), self.path)
+ except urllib.error.URLError as e:
+ logging.warning("got urllib.error.URLError: %s", repr(e))
+ if downloaded == totalsize:
+ break
+ if totalsize != downloaded:
+ if os.path.exists(path):
+ os.unlink(path)
+ self.send_error(500, "URLError")
+ return
+
+ def log_message(self, fmt, *args):
+ pass
+
+
+def srcpkgversions_by_timestamp(srcpkgname, timestamp, suite):
+ versions = set()
+ timestamp_str = timestamp.strftime("%Y%m%dT%H%M%SZ")
+ r = requests.get(
+ f"http://snapshot.debian.org/archive/debian/{timestamp_str}"
+ f"/dists/{suite}/main/source/Sources.xz",
+ timeout=60,
+ )
+ data = lzma.decompress(r.content)
+ for src in debian.deb822.Sources.iter_paragraphs(io.BytesIO(data)):
+ if src["Package"] != srcpkgname:
+ continue
+ versions.add(debian.debian_support.Version(src["Version"]))
+ return versions
+
+
+def binpkgversion_by_timestamp(binpkgname, timestamp, suite, architecture):
+ timestamp_str = timestamp.strftime("%Y%m%dT%H%M%SZ")
+ r = requests.get(
+ f"http://snapshot.debian.org/archive/debian/{timestamp_str}"
+ f"/dists/{suite}/main/binary-{architecture}/Packages.xz",
+ timeout=60,
+ )
+ data = lzma.decompress(r.content)
+ for pkg in debian.deb822.Packages.iter_paragraphs(io.BytesIO(data)):
+ if pkg["Package"] == binpkgname:
+ return debian.debian_support.Version(pkg["Version"])
+ return None
+
+
+# This function does something similar to what this wiki page describes
+# https://wiki.debian.org/BisectDebian#Finding_dates_for_specific_packages
+#
+# The problem with the approach on that wiki page as well as the one below in
+# Python is, that it relies on the first_seen entry provided by snapshot.d.o.
+# This means that we do not know when a package first appeared in a given
+# suite. It could've first appeared in experimental or even in Debian Ports.
+#
+# Also see: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=806329
+def first_seen_by_pkg(packages, timestamp_begin, timestamp_end, suite, architecture):
+ timestamps = set()
+ for pkg in packages:
+ logging.info("obtaining versions for %s", pkg)
+ if pkg.startswith("src:"):
+ pkg = pkg[4:]
+ oldest_versions = srcpkgversions_by_timestamp(pkg, timestamp_begin, suite)
+ if len(oldest_versions) == 0:
+ logging.error(
+ "source package %s cannot be found in good timestamp", pkg
+ )
+ sys.exit(1)
+ elif len(oldest_versions) == 1:
+ oldest_version = oldest_versions.pop()
+ else:
+ oldest_version = min(oldest_versions)
+ newest_versions = srcpkgversions_by_timestamp(pkg, timestamp_end, suite)
+ if len(newest_versions) == 0:
+ logging.error("source package %s cannot be found in bad timestamp", pkg)
+ sys.exit(1)
+ elif len(newest_versions) == 1:
+ newest_version = newest_versions.pop()
+ else:
+ newest_version = max(newest_versions)
+
+ for result in requests.get(
+ f"http://snapshot.debian.org/mr/package/{pkg}/", timeout=60
+ ).json()["result"]:
+ if debian.debian_support.Version(result["version"]) < oldest_version:
+ continue
+ if debian.debian_support.Version(result["version"]) > newest_version:
+ continue
+ r = requests.get(
+ f"http://snapshot.debian.org/mr/package/{pkg}"
+ f"/{result['version']}/allfiles?fileinfo=1",
+ timeout=60,
+ )
+ logging.info("retrieving for: %s", result["version"])
+ for fileinfo in [
+ fileinfo
+ for fileinfos in r.json()["fileinfo"].values()
+ for fileinfo in fileinfos
+ ]:
+ if fileinfo["archive_name"] != "debian":
+ continue
+ timestamps.add(
+ datetime.strptime(fileinfo["first_seen"], "%Y%m%dT%H%M%S%z")
+ )
+ else:
+ oldest_version = binpkgversion_by_timestamp(
+ pkg, timestamp_begin, suite, architecture
+ )
+ if oldest_version is None:
+ logging.error(
+ "binary package %s cannot be found in good timestamp", pkg
+ )
+ sys.exit(1)
+ newest_version = binpkgversion_by_timestamp(
+ pkg, timestamp_end, suite, architecture
+ )
+ if newest_version is None:
+ logging.error("binary package %s cannot be found in bad timestamp", pkg)
+ sys.exit(1)
+ r = requests.get(f"http://snapshot.debian.org/mr/binary/{pkg}/", timeout=60)
+ for result in r.json()["result"]:
+ if debian.debian_support.Version(result["version"]) < oldest_version:
+ continue
+ if debian.debian_support.Version(result["version"]) > newest_version:
+ continue
+ r = requests.get(
+ f"http://snapshot.debian.org/mr/binary/{pkg}"
+ f"/{result['version']}/binfiles?fileinfo=1",
+ timeout=60,
+ )
+ logging.info("retrieving for: %s", result["version"])
+ hashes = [
+ e["hash"]
+ for e in r.json()["result"]
+ if e["architecture"] == architecture
+ ]
+ for fileinfo in [
+ fileinfo for h in hashes for fileinfo in r.json()["fileinfo"][h]
+ ]:
+ if fileinfo["archive_name"] != "debian":
+ continue
+ timestamps.add(
+ datetime.strptime(fileinfo["first_seen"], "%Y%m%dT%H%M%S%z")
+ )
+ return timestamps
+
+
+def get_mirror(port, timestamp):
+ timestamp_str = timestamp.strftime("%Y%m%dT%H%M%SZ")
+ if port is not None:
+ return f"http://127.0.0.1:{port}/archive/debian/{timestamp_str}"
+ return f"http://snapshot.debian.org/archive/debian/{timestamp_str}"
+
+
+def runtest_cmd(cmd, env):
+ ret = 0
+ output = b""
+ try:
+ # we only use the more complex Popen method if live output is required
+ # for logging levels of INFO or lower
+ if logging.root.isEnabledFor(logging.INFO):
+ parent_fd, child_fd = pty.openpty()
+ with subprocess.Popen(
+ cmd,
+ stdin=child_fd,
+ stderr=child_fd,
+ stdout=child_fd,
+ close_fds=True,
+ env=env,
+ ) as process:
+ buf = io.BytesIO()
+ os.close(child_fd)
+ while process.poll() is None:
+ ready, _, _ = select.select([parent_fd], [], [], 1)
+ if parent_fd in ready:
+ try:
+ data = os.read(parent_fd, 10240)
+ except OSError:
+ break
+ if not data:
+ break # EOF
+ os.write(sys.stdout.fileno(), data)
+ buf.write(data)
+ os.close(parent_fd)
+ ret = process.wait()
+ output = buf.getvalue()
+ else:
+ output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, env=env)
+ except subprocess.CalledProcessError as e:
+ ret = e.returncode
+ output = e.output
+ return (ret, output)
+
+
+def runtest(timestamp, staticargs, toupgrade=None, badtimestamp=None):
+ goodmirror = get_mirror(staticargs.port, timestamp)
+ env = {k: v for k, v in os.environ.items() if k.startswith("DEBIAN_BISECT_")}
+ env["DEBIAN_BISECT_EPOCH"] = str(int(timestamp.timestamp()))
+ env["DEBIAN_BISECT_TIMESTAMP"] = timestamp.strftime("%Y%m%dT%H%M%SZ")
+ env["PATH"] = os.environ.get("PATH", "/usr/sbin:/usr/bin:/sbin:/bin")
+ if staticargs.port is not None:
+ env["DEBIAN_BISECT_MIRROR"] = goodmirror
+ if staticargs.depends or staticargs.qemu:
+ scriptname = "run_bisect"
+ if staticargs.qemu:
+ scriptname = "run_bisect_qemu"
+ # first try run_bisect.sh from the directory where debbisect lives in
+ # case we run this from a git clone
+ run_bisect = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)), scriptname + ".sh"
+ )
+ if not os.path.exists(run_bisect):
+ run_bisect = os.path.join("/usr/share/devscripts/scripts/", scriptname)
+ cmd = [run_bisect]
+ if staticargs.depends is not None:
+ cmd.append(staticargs.depends)
+ else:
+ cmd.append("")
+ cmd.extend(
+ [
+ staticargs.script,
+ goodmirror,
+ staticargs.architecture,
+ staticargs.suite,
+ staticargs.components,
+ ]
+ )
+ if staticargs.qemu:
+ cmd.extend([staticargs.qemu["memsize"], staticargs.qemu["disksize"]])
+ if toupgrade:
+ cmd.extend([get_mirror(staticargs.port, badtimestamp), toupgrade])
+ else:
+ # execute it directly if it's an executable file or if it there are no
+ # shell metacharacters
+ if (
+ os.access(staticargs.script, os.X_OK)
+ or re.search(r"[^\w@\%+=:,.\/-]", staticargs.script, re.ASCII) is None
+ ):
+ cmd = [staticargs.script]
+ else:
+ cmd = ["sh", "-c", staticargs.script]
+ return runtest_cmd(cmd, env)
+
+
+def get_log_fname(timestamp, goodbad, toupgrade=None):
+ if toupgrade is None:
+ return f"debbisect.{timestamp.strftime('%Y%m%dT%H%M%SZ')}.log.{goodbad}"
+ return f"debbisect.{timestamp.strftime('%Y%m%dT%H%M%SZ')}.{toupgrade}.log.{goodbad}"
+
+
+def write_log_symlink(goodbad, output, timestamp, toupgrade=None):
+ fname = get_log_fname(timestamp, goodbad, toupgrade)
+ with open(fname, "wb") as f:
+ f.write(output)
+ if goodbad == "good":
+ if os.path.lexists("debbisect.log.good"):
+ os.unlink("debbisect.log.good")
+ os.symlink(fname, "debbisect.log.good")
+ elif goodbad == "bad":
+ if os.path.lexists("debbisect.log.bad"):
+ os.unlink("debbisect.log.bad")
+ os.symlink(fname, "debbisect.log.bad")
+
+
+def bisect(good, bad, staticargs):
+ # no idea how to split this function into parts without making it
+ # unreadable
+ # pylint: disable=too-many-statements
+ diff = bad - good
+ print(f"snapshot timestamp difference: {diff / timedelta(days=1)} days")
+
+ stepnum = 1
+ starttime = datetime.now(timezone.utc)
+
+ steps = round(
+ (math.log(diff.total_seconds()) - math.log(DINSTALLRATE)) / math.log(2) + 2
+ )
+ print(f"approximately {steps} steps left to test")
+ # verify that the good timestamp is really good and the bad timestamp is really bad
+ # we try the bad timestamp first to make sure that the problem exists
+ if not staticargs.ignore_cached_results and os.path.exists(
+ get_log_fname(good, "good")
+ ):
+ print(f"#{stepnum}: using cached results from {get_log_fname(good, 'good')}")
+ else:
+ print(f"#{stepnum}: trying known good {format_timestamp(good)}...")
+ ret, output = runtest(good, staticargs)
+ if ret != 0:
+ write_log_symlink("bad", output, good)
+ print(
+ "good timestamp was actually bad -- see debbisect.log.bad for details"
+ )
+ return None
+ write_log_symlink("good", output, good)
+ stepnum += 1
+ steps = round(
+ (math.log(diff.total_seconds()) - math.log(DINSTALLRATE)) / math.log(2) + 1
+ )
+ timeleft = steps * (datetime.now(timezone.utc) - starttime) / (stepnum - 1)
+ print(f"computation time left: {timeleft}")
+ print(f"approximately {steps} steps left to test")
+ if not staticargs.ignore_cached_results and os.path.exists(
+ get_log_fname(bad, "bad")
+ ):
+ print(f"#{stepnum}: using cached results from {get_log_fname(bad, 'bad')}")
+ else:
+ print(f"#{stepnum}: trying known bad {format_timestamp(bad)}...")
+ ret, output = runtest(bad, staticargs)
+ if ret == 0:
+ write_log_symlink("good", output, bad)
+ print(
+ "bad timestamp was actually good -- see debbisect.log.good for details"
+ )
+ return None
+ write_log_symlink("bad", output, bad)
+ stepnum += 1
+
+ while True:
+ diff = bad - good
+ # One may be tempted to try and optimize this step by finding all the
+ # packages that differ between the two timestamps and then finding
+ # all the snapshot timestamps where the involved packages changed
+ # in their version. But since dependencies can arbitrarily change
+ # between two given timestamps, drawing in more packages or requiring
+ # less packages, the only reliable method is really to strictly bisect
+ # by taking the timestamp exactly between the two and not involve
+ # other guessing magic.
+ newts = sanitize_timestamp(good + diff / 2)
+ if newts in [good, bad]:
+ # If the middle timestamp mapped onto good or bad, then the
+ # timestamps are very close to each other. Test if there is maybe
+ # not another one between them by sanitizing the timestamp one
+ # second before the bad one
+ newts = sanitize_timestamp(bad - timedelta(seconds=1))
+ if newts == good:
+ break
+ print(f"snapshot timestamp difference: {diff / timedelta(days=1)} days")
+ steps = round(
+ (math.log(diff.total_seconds()) - math.log(DINSTALLRATE)) / math.log(2) + 0
+ )
+ timeleft = steps * (datetime.now(timezone.utc) - starttime) / (stepnum - 1)
+ print(f"computation time left: {timeleft}")
+ print(f"approximately {steps} steps left to test")
+ if not staticargs.ignore_cached_results and os.path.exists(
+ get_log_fname(newts, "good")
+ ):
+ print(
+ f"#{stepnum}: using cached result (was good)"
+ f" from {get_log_fname(newts, 'good')}"
+ )
+ good = newts
+ elif not staticargs.ignore_cached_results and os.path.exists(
+ get_log_fname(newts, "bad")
+ ):
+ print(
+ f"#{stepnum}: using cached result (was bad)"
+ f" from {get_log_fname(newts, 'bad')}"
+ )
+ bad = newts
+ else:
+ print(f"#{stepnum}: trying {format_timestamp(newts)}...")
+ ret, output = runtest(newts, staticargs)
+ if ret == 0:
+ print("test script output: good")
+ write_log_symlink("good", output, newts)
+ good = newts
+ else:
+ print("test script output: bad")
+ write_log_symlink("bad", output, newts)
+ bad = newts
+ stepnum += 1
+ return good, bad
+
+
+def datetimestr(val):
+ if val == "now":
+ return datetime.now(timezone.utc)
+ if val == "today":
+ return datetime.combine(date.today(), time(0, 0, 0, 0), timezone.utc)
+
+ # since py3 we don't need pytz to figure out the local timezone
+ localtz = datetime.now(timezone.utc).astimezone().tzinfo
+
+ # first trying known formats
+ for fmt in [
+ "%Y%m%dT%H%M%SZ", # snapshot.debian.org style
+ # ISO 8601
+ "%Y-%m-%d",
+ "%Y-%m-%dT%H:%M",
+ "%Y-%m-%dT%H:%M:%S",
+ "%Y-%m-%dT%H:%M:%S%z",
+ ]:
+ try:
+ dt = datetime.strptime(val, fmt)
+ except ValueError:
+ continue
+ else:
+ # if we don't know the timezone, assume the local one
+ if dt.tzinfo is None:
+ dt = dt.replace(tzinfo=localtz)
+ return dt
+
+ # try parsing the debian/changelog datetime format as specified by RFC 2822
+ # we cannot use strptime() because that honors the locale and RFC
+ # 2822 requires that day and month names be the English abbreviations.
+ try:
+ dt = email.utils.parsedate_to_datetime(val)
+ except TypeError:
+ pass
+ else:
+ return dt
+
+ # next, try parsing using dateutil.parser
+ if HAVE_DATEUTIL:
+ try:
+ dt = dateutil.parser.parse(val)
+ except ValueError:
+ pass
+ else:
+ # if we don't know the timezone, assume the local one
+ if dt.tzinfo is None:
+ dt = dt.replace(tzinfo=localtz)
+ return dt
+
+ # if that didn't work, try freeform formats
+ if HAVE_PARSEDATETIME:
+ cal = parsedatetime.Calendar()
+ dt, ret = cal.parseDT(val)
+ if ret != 0:
+ # if we don't know the timezone, assume the local one
+ if dt.tzinfo is None:
+ dt = dt.replace(tzinfo=localtz)
+ return dt
+
+ if not HAVE_DATEUTIL:
+ logging.info("parsing date failed -- maybe install python3-dateutil")
+ if not HAVE_PARSEDATETIME:
+ logging.info("parsing date failed -- maybe install python3-parsedatetime")
+
+ # all failed, we cannot parse this
+ raise argparse.ArgumentTypeError(f"not a valid datetime: {val}")
+
+
+def qemuarg(val):
+ defaultmem = "1G"
+ defaultdisk = "4G"
+ ret = {"memsize": defaultmem, "disksize": defaultdisk}
+ for keyval in val.split(","):
+ # we use startswith() so that "defaults" can also be abbreviated (even
+ # down to the empty string)
+ if "defaults".startswith(keyval):
+ ret["memsize"] = defaultmem
+ ret["disksize"] = defaultdisk
+ continue
+ try:
+ key, val = keyval.split("=", maxsplit=1)
+ except ValueError as e:
+ raise argparse.ArgumentTypeError(f"no key=val pair: {keyval}") from e
+ if key not in ["memsize", "disksize"]:
+ raise argparse.ArgumentTypeError(f"unknown key: {key}")
+ if not re.fullmatch(r"\d+((k|K|M|G|T|P|E|Z|Y)(iB|B)?)?", val):
+ raise argparse.ArgumentTypeError(f"cannot parse size value: {val}")
+ ret[key] = val
+ return ret
+
+
+def scriptarg(val):
+ if os.path.exists(val) and not os.access(val, os.X_OK):
+ logging.warning("script %s is a file but not executable", val)
+ return val
+
+
+def read_pkglist(infile):
+ result = {}
+ with open(infile, encoding="utf8") as f:
+ for line in f:
+ pkg, version = line.split("\t")
+ result[pkg] = version.strip()
+ return result
+
+
+def upgrade_single_package(toupgrade, goodpkgs, badpkgs, good, bad, staticargs):
+ if toupgrade in goodpkgs:
+ print(
+ f"test upgrading {toupgrade} {goodpkgs[toupgrade]}"
+ f" -> {badpkgs[toupgrade]}..."
+ )
+ else:
+ print(f"test installing {toupgrade} {badpkgs[toupgrade]}...")
+ newbadpkgpath = f"./debbisect.{good.strftime('%Y%m%dT%H%M%SZ')}.{toupgrade}.pkglist"
+ if (
+ not staticargs.ignore_cached_results
+ and os.path.exists(newbadpkgpath)
+ and os.path.exists(get_log_fname(good, "good", toupgrade))
+ ):
+ print(
+ f"using cached result (was good)"
+ f" from {get_log_fname(good, 'good', toupgrade)}"
+ )
+ if toupgrade in goodpkgs:
+ print(f" upgrading {toupgrade} does not cause the problem")
+ else:
+ print(f" installing {toupgrade} does not cause the problem")
+ return
+ if (
+ not staticargs.ignore_cached_results
+ and os.path.exists(newbadpkgpath)
+ and os.path.exists(get_log_fname(good, "bad", toupgrade))
+ ):
+ print(
+ f"using cached result (was bad)"
+ f" from {get_log_fname(good, 'bad', toupgrade)}"
+ )
+ print(f" upgrading {toupgrade} triggered the problem")
+ else:
+ ret, output = runtest(good, staticargs, toupgrade, bad)
+ if ret == 0:
+ write_log_symlink("good", output, good, toupgrade)
+ if toupgrade in goodpkgs:
+ print(f" upgrading {toupgrade} does not cause the problem")
+ else:
+ print(f" installing {toupgrade} does not cause the problem")
+ return
+ write_log_symlink("bad", output, good, toupgrade)
+ print(f" upgrading {toupgrade} triggered the problem")
+ # this package introduced the regression check if more than
+ # just the package in question got upgraded
+ newbadpkgs = read_pkglist(newbadpkgpath)
+ # find all packages that are completely new or of a
+ # different version than those in the last good test
+ newupgraded = []
+ for pkg, version in newbadpkgs.items():
+ if pkg not in goodpkgs or version != goodpkgs[pkg]:
+ newupgraded.append(pkg)
+ if not newupgraded:
+ logging.error("no difference -- this should never happen")
+ sys.exit(1)
+ elif len(newupgraded) == 1:
+ # the only upgraded package should be the one that was
+ # requested to be upgraded
+ assert newupgraded[0] == toupgrade
+ else:
+ print(" additional packages that got upgraded/installed at the same time:")
+ for newtoupgrade in newupgraded:
+ if newtoupgrade == toupgrade:
+ continue
+ print(
+ f" {newtoupgrade} {goodpkgs.get(newtoupgrade, '(n.a.)')}"
+ f" -> {newbadpkgs[newtoupgrade]}"
+ )
+
+
+def parseargs():
+ progname = sys.argv[0]
+ parser = argparse.ArgumentParser(
+ formatter_class=argparse.RawDescriptionHelpFormatter,
+ description=f"""\
+
+Execute a script or a shell snippet for a known good timestamp and a known bad
+timestamp and then bisect the timestamps until a timestamp from
+snapshot.debian.org is found where the script first fails. Environment
+variables are used to tell the script which timestamp to test. See ENVIRONMENT
+VARIABLES below. At the end of the execution, the files debbisect.log.good and
+debbisect.log.bad are the log files of the last good and last bad run,
+respectively. By default, a temporary caching mirror is executed to reduce
+bandwidth usage on snapshot.debian.org. If you plan to run debbisect multiple
+times on a similar range of timestamps, consider setting a non-temporary cache
+directory with the --cache option.
+
+The program has three basic modes of operation. In the first, the given script
+is responsible to set up everything as needed:
+
+ $ {progname} "last week" today script.sh
+ $ diff -u debbisect.log.good debbisect.log.bad
+
+If also the --depends option is given, then a chroot of the correct timestamp
+will be created each time and the script will receive as first argument the
+path to that chroot. Additionally, this mode allows debbisect to figure out the
+exact package that was responsible for the failure instead of only presenting
+you the last good and first bad timestamp.
+
+Lastly, you can also provide the --qemu option. In this mode, your test will be
+create a qemu virtual machine of the correct timestamp each time. The script
+will receive the correct ssh config to log into a host named qemu and execute
+arbitrary commands.
+
+""",
+ epilog=f"""\
+
+*EXAMPLES*
+
+Just run "do_something" which runs the test and returns a non-zero exit on
+failure.
+
+ $ {progname} "last week" today "mmdebstrap --customize-hook\
+='chroot \\"\\$1\\" do_something' unstable - \\$DEBIAN_BISECT_MIRROR >/dev/null"
+ $ diff -u debbisect.log.good debbisect.log.bad
+
+Since the command can easily become very long and quoting very involved, lets
+instead use a script:
+
+ $ cat << END > script.sh
+ > #!/bin/sh
+ > set -exu
+ > mmdebstrap \\
+ > --verbose \\
+ > --aptopt='Acquire::Check-Valid-Until "false"' \\
+ > --variant=apt \\
+ > --include=pkga,pkgb,pkgc \\
+ > --customize-hook='chroot "$1" dpkg -l' \\
+ > --customize-hook='chroot "$1" do_something' \\
+ > unstable \\
+ > - \\
+ > $DEBIAN_BISECT_MIRROR \\
+ > >/dev/null
+ > END
+ $ chmod +x script.sh
+ $ {progname} --verbose --cache=./cache "two years ago" yesterday ./script.sh
+ $ diff -u debbisect.log.good debbisect.log.bad
+ $ rm -r ./cache
+
+This example sets Acquire::Check-Valid-Until to not fail on snapshot timestamps
+from "two years ago", uses the "apt" variant (only Essential:yes plus apt),
+installs the packages required for the test using --include, runs "dpkg -l" so
+that we can see which packages differed in the logs at the end and uses
+--cache=cache so that the apt cache does not get discarded at the end and the
+command can be re-run without downloading everything from snapshot.debian.org
+again.
+
+If you want to build a source package you can use the script shipped by
+devscripts as /usr/share/doc/devscripts/examples/debbisect_buildsrc.sh and
+either use it unmodified like this:
+
+ $ DEBIAN_BISECT_SRCPKG=mysrc {progname} "two years ago" yesterday \
+ > /usr/share/doc/devscripts/examples/debbisect_buildsrc.sh
+
+or use the script as a starting point to do your own custom builds.
+
+Once debbisect has finished bisecting and figured out the last good and the
+first bad timestamp, there might be more than one package that differs in
+version between these two timestamps. debbisect can figure out which package is
+the culprit if you hand it control over installing dependencies for you via the
+--depends option. With that option active, the script will not be responsible
+to set up a chroot itself but is given the path to an existing chroot as the
+first argument. Here is a real example that verifies the package responsible
+for Debian bug #912935:
+
+ $ {progname} --depends=botch "2018-11-17" "2018-11-22" \
+'chroot "$1" botch-dose2html --packages=/dev/null --help'
+ [...]
+ test upgrading python3-minimal 3.6.7-1 -> 3.7.1-2...
+ upgrading python3-minimal triggered the problem
+
+If you want to run above test under qemu, then you would run:
+
+ $ {progname} --depends=botch --qemu=defaults "2018-11-17" "2018-11-22" \
+'ssh -F "$1" qemu botch-dose2html --packages=/dev/null --help'
+
+In the last two examples we omitted the --cache argument for brevity. But
+please make use of it to reduce the load on snapshot.debian.org.
+
+*TIMESTAMPS*
+
+Valid good and bad timestamp formats are either:
+
+ > the format used by snapshot.debian.org
+ > ISO 8601 (with or without time, seconds and timezone)
+ > RFC 2822 (used in debian/changelog)
+ > all formats understood by the Python dateutil module (if installed)
+ > all formats understood by the Python parsedatetime module (if installed)
+
+Without specifying the timezone explicitly, the local offset is used.
+
+Examples (corresponding to the items in above list, respectively):
+
+ > 20200313T065326Z
+ > 2020-03-13T06:53:26+00:00
+ > Fri, 29 Nov 2019 14:00:08 +0100
+ > 5:50 A.M. on June 13, 1990
+ > two weeks ago
+
+The earliest timestamp that works with debbisect should be 2006-08-10.
+
+*ENVIRONMENT VARIABLES*
+
+The following environment variables are available to the test script:
+
+DEBIAN_BISECT_MIRROR Contains the caching mirror address.
+
+DEBIAN_BISECT_EPOCH Contains an integer representing the unix epoch of the
+ current timestamp. The value of this variable can
+ directly be assigned to SOURCE_DATE_EPOCH.
+
+DEBIAN_BISECT_TIMESTAMP Contains a timestamp in the format used by
+ snapshot.debian.org. Can also be generated from
+ DEBIAN_BISECT_EPOCH via:
+ date --utc --date=@$DEBIAN_BISECT_EPOCH +%Y%m%dT%H%M%SZ
+
+DEBIAN_BISECT_* All environment variables starting with DEBIAN_BISECT_
+ are passed to the test script.
+
+Written by Johannes Schauer Marin Rodrigues <josch@debian.org>
+""",
+ )
+ parser.add_argument(
+ "-d",
+ "--debug",
+ help="Print lots of debugging statements",
+ action="store_const",
+ dest="loglevel",
+ const=logging.DEBUG,
+ default=logging.WARNING,
+ )
+ parser.add_argument(
+ "-v",
+ "--verbose",
+ help="Be verbose",
+ action="store_const",
+ dest="loglevel",
+ const=logging.INFO,
+ )
+ parser.add_argument(
+ "--cache", help="cache directory -- by default $TMPDIR is used", type=str
+ )
+ parser.add_argument("--nocache", help="disable cache", action="store_true")
+ parser.add_argument(
+ "--port",
+ help="manually choose port number for the apt cache instead of "
+ "automatically choosing a free port",
+ type=int,
+ default=0,
+ )
+ parser.add_argument(
+ "--depends",
+ help="Comma separated list of binary packages the test script "
+ "requires. With this option, the test script will run inside a "
+ "chroot with the requested packages installed.",
+ type=str,
+ )
+ parser.add_argument(
+ "--qemu",
+ help="Create qemu virtual machine and pass a ssh config file to the "
+ "test script. This argument takes a comma-separated series of "
+ "key=value pairs to specify the virtual machine memory size (via "
+ "memsize) and the virtual machine disksize (via disksize). Sizes "
+ "are measured in bytes or with common unit suffixes like M or G. "
+ "To pick the default values (disksize=4G,memsize=1G) the shorthand "
+ "'defaults' can be passed.",
+ type=qemuarg,
+ )
+ parser.add_argument(
+ "--architecture",
+ help="Chosen architecture when creating the chroot with --depends or "
+ "--qemu (default: native architecture)",
+ default=subprocess.check_output(["dpkg", "--print-architecture"]).rstrip(),
+ type=str,
+ )
+ parser.add_argument(
+ "--suite",
+ help="Chosen suite when creating the chroot with --depends or --qemu "
+ "(default: unstable)",
+ default="unstable",
+ type=str,
+ )
+ parser.add_argument(
+ "--components",
+ help="Chosen components (separated by comma or whitespace) when "
+ "creating the chroot with --depends or --qemu (default: main)",
+ default="main",
+ type=str,
+ )
+ parser.add_argument(
+ "--no-find-exact-package",
+ help="Normally, when the --depends argument is given so that "
+ "debbisect takes care of managing dependencies, the precise package "
+ "that introduced the problem is determined after bisection by "
+ "installing the packages that differ between the last good and "
+ "first bad timestamp one by one. This option disables this feature.",
+ action="store_true",
+ )
+ parser.add_argument(
+ "--ignore-cached-results",
+ help="Perform a run for a timestamp even if a log file for it exists "
+ "in the current directory",
+ action="store_true",
+ )
+ parser.add_argument(
+ "good",
+ type=datetimestr,
+ help="good timestamp -- see section TIMESTAMPS for valid formats",
+ )
+ parser.add_argument(
+ "bad",
+ type=datetimestr,
+ help="bad timestamp -- see section TIMESTAMPS for valid formats",
+ )
+ parser.add_argument(
+ "script",
+ type=scriptarg,
+ help="test script -- can either be a shell code snippet or an "
+ "executable script. A non zero exit code indicates failure. "
+ "When also --depends is used, then the first argument to the "
+ "script will be the chroot directory. When --qemu is used, then "
+ "the first argument to the script will an ssh config for a host "
+ "named qemu.",
+ )
+ return parser.parse_args()
+
+
+def setupcache(cache, port):
+ if cache:
+ cachedir = cache
+ else:
+ cachedir = tempfile.mkdtemp(prefix="debbisect")
+ logging.info("using cache directory: %s", cachedir)
+ os.makedirs(cachedir + "/pool", exist_ok=True)
+ httpd = socketserver.TCPServer(
+ # the default address family for socketserver is AF_INET so we
+ # explicitly bind to ipv4 localhost
+ ("127.0.0.1", port),
+ partial(Proxy, directory=cachedir),
+ # to avoid "Address already in use" when the port is specified
+ # manually, we set socket.SO_REUSEADDR
+ # to do so, we must set allow_reuse_address and then bind and
+ # activate manually
+ bind_and_activate=False,
+ )
+ # this sets socket.SO_REUSEADDR
+ httpd.allow_reuse_address = True
+ httpd.server_bind()
+ httpd.server_activate()
+ # run server in a new thread
+ server_thread = threading.Thread(target=httpd.serve_forever)
+ server_thread.daemon = True
+ # start thread
+ server_thread.start()
+ # retrieve port (in case it was generated automatically)
+ _, port = httpd.server_address
+
+ def teardown():
+ httpd.shutdown()
+ httpd.server_close()
+ server_thread.join()
+ if not cache:
+ # this should be a temporary directory but lets still be super
+ # careful
+ if os.path.exists(cachedir + "/pool"):
+ shutil.rmtree(cachedir + "/pool")
+ if os.path.exists(cachedir + "/archive"):
+ shutil.rmtree(cachedir + "/archive")
+ os.rmdir(cachedir)
+
+ return port, teardown
+
+
+def find_exact_package(good, bad, staticargs, depends, no_find_exact_package):
+ goodpkglist = f"./debbisect.{good.strftime('%Y%m%dT%H%M%SZ')}.pkglist"
+ if not os.path.exists(goodpkglist):
+ logging.error("%s doesn't exist", goodpkglist)
+ sys.exit(1)
+ badpkglist = f"./debbisect.{bad.strftime('%Y%m%dT%H%M%SZ')}.pkglist"
+ if not os.path.exists(badpkglist):
+ logging.error("%s doesn't exist", badpkglist)
+ sys.exit(1)
+
+ # Create a set of packages for which either the version in the last good
+ # and first bad run differs or which only exist in the first bad run.
+ goodpkgs = read_pkglist(goodpkglist)
+ badpkgs = read_pkglist(badpkglist)
+ upgraded = set()
+ for pkg, version in goodpkgs.items():
+ if pkg in badpkgs and version != badpkgs[pkg]:
+ upgraded.add(pkg)
+ for pkg, version in badpkgs.items():
+ if pkg not in goodpkgs or version != goodpkgs[pkg]:
+ upgraded.add(pkg)
+ upgraded = list(sorted(upgraded))
+ if not upgraded:
+ logging.error("no difference -- this should never happen")
+ sys.exit(1)
+ elif len(upgraded) == 1:
+ print(
+ f"only one package differs: {upgraded[0]}"
+ f" {goodpkgs.get(upgraded[0], '(n.a.)')} -> {badpkgs[upgraded[0]]}"
+ )
+ else:
+ print(
+ "the following packages differ between the last good and "
+ "first bad timestamp:"
+ )
+ for toupgrade in upgraded:
+ print(
+ f" {toupgrade} {goodpkgs.get(toupgrade, '(n.a.)')}"
+ f" -> {badpkgs[toupgrade]}"
+ )
+
+ # if debbisect was tasked with handling dependencies itself, try to
+ # figure out the exact package that introduce the break
+ if depends and not no_find_exact_package:
+ for toupgrade in upgraded:
+ upgrade_single_package(
+ toupgrade, goodpkgs, badpkgs, good, bad, staticargs
+ )
+
+
+def ensure_mmdebstrap_version(reqver: str) -> bool:
+ try:
+ version = subprocess.check_output(
+ ["mmdebstrap", "--version"], stderr=subprocess.DEVNULL
+ )
+ except subprocess.CalledProcessError:
+ print("running mmdebstrap --version resulted in non-zero exit")
+ sys.exit(1)
+ except FileNotFoundError:
+ print("you need to install mmdebstrap")
+ sys.exit(1)
+
+ version = version.decode().removeprefix("mmdebstrap ")
+
+ return debian.debian_support.Version(version) >= debian.debian_support.Version(
+ reqver
+ )
+
+
+def main():
+ args = parseargs()
+
+ logging.basicConfig(level=args.loglevel)
+
+ good = sanitize_timestamp(args.good)
+ if good != args.good:
+ print(
+ f"good timestamp {format_timestamp(args.good)} was remapped to"
+ f" snapshot.d.o timestamp {format_timestamp(good)}"
+ )
+ bad = sanitize_timestamp(args.bad)
+ if bad != args.bad:
+ print(
+ f"bad timestamp {format_timestamp(args.bad)} was remapped to"
+ f" snapshot.d.o timestamp {format_timestamp(bad)}"
+ )
+
+ if good > bad:
+ print("good is later than bad")
+ sys.exit(1)
+
+ # check if mmdebstrap is installed and at least 1.3.0
+ if (args.depends or args.qemu) and not ensure_mmdebstrap_version("1.3.0"):
+ print("you need at least mmdebstrap version 1.3.0")
+ sys.exit(1)
+
+ port = None
+ if not args.nocache:
+ port, teardown = setupcache(args.cache, args.port)
+ atexit.register(teardown)
+
+ staticargs = collections.namedtuple(
+ "args",
+ [
+ "script",
+ "port",
+ "depends",
+ "architecture",
+ "suite",
+ "components",
+ "qemu",
+ "ignore_cached_results",
+ ],
+ )
+ for a in staticargs._fields:
+ setattr(staticargs, a, getattr(args, a))
+ staticargs.port = port
+ if good == bad:
+ # test only single timestamp
+ print(f"trying single timestamp {format_timestamp(good)}...")
+ if not staticargs.ignore_cached_results and os.path.exists(
+ get_log_fname(good, "good")
+ ):
+ print(f"using cached result (was good) from {get_log_fname(good, 'good')}")
+ ret = 0
+ elif not staticargs.ignore_cached_results and os.path.exists(
+ get_log_fname(good, "bad")
+ ):
+ print(f"using cached result (was bad) from {get_log_fname(good, 'bad')}")
+ ret = 1
+ else:
+ ret, output = runtest(good, staticargs)
+ if ret == 0:
+ print("test script output: good")
+ write_log_symlink("good", output, good)
+ else:
+ print("test script output: bad")
+ write_log_symlink("bad", output, good)
+ sys.exit(ret)
+ res = bisect(good, bad, staticargs)
+ if res is not None:
+ good, bad = res
+ print("bisection finished successfully")
+ print(f" last good timestamp: {format_timestamp(good)}")
+ print(f" first bad timestamp: {format_timestamp(bad)}")
+
+ find_exact_package(
+ good, bad, staticargs, args.depends, args.no_find_exact_package
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/debc.1 b/scripts/debc.1
new file mode 100644
index 0000000..b043ee5
--- /dev/null
+++ b/scripts/debc.1
@@ -0,0 +1,131 @@
+.TH DEBC 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debc \- view contents of a generated Debian package
+.SH SYNOPSIS
+\fBdebc\fP [\fIoptions\fR] [\fIchanges file\fR] [\fIpackage\fR ...]
+.SH DESCRIPTION
+\fBdebc\fR figures out the current version of a package and displays
+information about the \fI.deb\fR and \fI.udeb\fR files which have been generated
+in the current build process. If a \fI.changes\fR file is specified
+on the command line, the filename must end with \fI.changes\fR, as
+this is how the program distinguishes it from package names. If not,
+then \fBdebc\fR has to be called from within the source code directory
+tree. In this case, it will look for the \fI.changes\fR file
+corresponding to the current package version (by determining the name
+and version number from the changelog, and the architecture in the
+same way as \fBdpkg-buildpackage\fR(1) does). It then runs
+\fBdpkg-deb \-I\fR and \fBdpkg-deb \-c\fR on every \fI.deb\fR and
+\fI.udeb\fR archive listed in the \fI.changes\fR file to display
+information about the contents of the \fI.deb\fR / \fI.udeb\fR files.
+It precedes every \fI.deb\fR or \fI.udeb\fR file with the name of the
+file. It assumes that all of the \fI.deb\fR / \fI.udeb\fR archives
+live in the same directory as the \fI.changes\fR file. It is
+useful for ensuring that the expected files have ended up in the
+Debian package.
+.PP
+If a list of packages is given on the command line, then only those
+debs or udebs with names in this list of packages will be processed.
+.SH "Directory name checking"
+In common with several other scripts in the \fBdevscripts\fR package,
+\fBdebc\fR will climb the directory tree until it finds a
+\fIdebian/changelog\fR file. As a safeguard against stray files
+causing potential problems, it will examine the name of the parent
+directory once it finds the \fIdebian/changelog\fR file, and check
+that the directory name corresponds to the package name. Precisely
+how it does this is controlled by two configuration file variables
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR and \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR can take the following values:
+.TP
+.B 0
+Never check the directory name.
+.TP
+.B 1
+Only check the directory name if we have had to change directory in
+our search for \fIdebian/changelog\fR. This is the default behaviour.
+.TP
+.B 2
+Always check the directory name.
+.PP
+The directory name is checked by testing whether the current directory
+name (as determined by \fBpwd\fR(1)) matches the regex given by the
+configuration file option \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR or by the
+command line option \fB\-\-check-dirname-regex\fR \fIregex\fR. Here
+\fIregex\fR is a Perl regex (see \fBperlre\fR(3perl)), which will be
+anchored at the beginning and the end. If \fIregex\fR contains a '/',
+then it must match the full directory path. If not, then it must
+match the full directory name. If \fIregex\fR contains the string
+\'PACKAGE', this will be replaced by the source package name, as
+determined from the changelog. The default value for the regex is:
+\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and
+PACKAGE-version.
+.SH OPTIONS
+.TP
+\fB\-a\fIdebian-architecture\fR, \fB\-t\fIGNU-system-type\fR
+See \fBdpkg-architecture\fR(1) for a description of these options.
+They affect the search for the \fI.changes\fR file. They are provided
+to mimic the behaviour of \fBdpkg-buildpackage\fR when determining the
+name of the \fI.changes\fR file.
+.TP
+\fB\-\-debs\-dir\fR \fIdirectory\fR
+Look for the \fI.changes\fR, \fI.deb\fR and \fI.udeb\fR files in
+\fIdirectory\fR instead of the parent of the source directory.
+This should either be an absolute path or relative to the top of the
+source directory.
+.TP
+\fB\-\-check-dirname-level\fR \fIN\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-\-list-changes\fR
+List the filename of the .changes file, and do not display anything else. This
+option only makes sense if a .changes file is NOT passed explicitly in the
+command line. This can be used for example in a script that needs to reference
+the .changes file, without having to duplicate the heuristics for finding it
+that debc already implements.
+.TP
+\fB\-\-list-debs\fR
+List the filenames of the .deb packages, and do not display their contents.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+\fB\-\-help\fR, \fB\-\-version\fR
+Show help message and version information respectively.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B DEBRELEASE_DEBS_DIR
+This specifies the directory in which to look for the \fI.changes\fR,
+\fI.deb\fR and \fI.udeb\fR files, and is either an absolute path or
+relative to the top of the source tree. This corresponds to the
+\fB\-\-debs\-dir\fR command line option. This directive could be
+used, for example, if you always use \fBpbuilder\fR or
+\fBsvn-buildpackage\fR to build your packages. Note that it also
+affects \fBdebrelease\fR(1) in the same way, hence the strange name of
+the option.
+.TP
+.BR DEVSCRIPTS_CHECK_DIRNAME_LEVEL ", " DEVSCRIPTS_CHECK_DIRNAME_REGEX
+See the above section \fBDirectory name checking\fR for an explanation of
+these variables. Note that these are package-wide configuration
+variables, and will therefore affect all \fBdevscripts\fR scripts
+which check their value, as described in their respective manpages and
+in \fBdevscripts.conf\fR(5).
+.SH "SEE ALSO"
+.BR debdiff (1),
+.BR dpkg-deb (1),
+.BR devscripts.conf (5)
+.SH AUTHOR
+Julian Gilbey <jdg@debian.org>, based on an original script by
+Christoph Lameter <clameter@debian.org>.
diff --git a/scripts/debc.pl b/scripts/debc.pl
new file mode 120000
index 0000000..1a1d45b
--- /dev/null
+++ b/scripts/debc.pl
@@ -0,0 +1 @@
+debi.pl \ No newline at end of file
diff --git a/scripts/debchange.1 b/scripts/debchange.1
new file mode 100644
index 0000000..d1f02de
--- /dev/null
+++ b/scripts/debchange.1
@@ -0,0 +1,491 @@
+.TH DEBCHANGE 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debchange \- Tool for maintenance of the debian/changelog file in a source package
+.SH SYNOPSIS
+\fBdebchange\fR [\fIoptions\fR] [\fItext\fR ...]
+.br
+\fBdch\fR [\fIoptions\fR] [\fItext\fR ...]
+.SH DESCRIPTION
+\fBdebchange\fR or its alias \fBdch\fR will add a new comment line to
+the Debian changelog in the current source tree. This command must be
+run from within that tree. If the text of the change is given on the
+command line, \fBdebchange\fR will run in batch mode and simply add the
+text, with line breaks as necessary, at the appropriate place in
+\fIdebian/changelog\fR (or the changelog specified by options, as described
+below). If the text given on the command line is a null string,
+\fBdebchange\fR will run in batch mode without adding any text. If the
+text given on the command line is a space string, \fBdebchange\fR will run
+in batch mode and add a blank changelog entry.
+If no text is specified then \fBdebchange\fR
+will run the editor as determined by \fBsensible-editor\fR for you to
+edit the file. (The environment variables \fBVISUAL\fR and
+\fBEDITOR\fR are used in this order to determine which editor to use.)
+Editors which understand the \fI+n\fR option for starting the editing
+on a specified line will use this to move to the correct line of the
+file for editing. If the editor is quit without modifying the
+temporary file, \fBdebchange\fR will exit without touching the
+existing changelog. \fBNote that the changelog is assumed to be
+encoded with the UTF-8 encoding. If it is not, problems may occur.\fR
+Please see the \fBiconv\fR(1) manpage to find out how to convert
+changelogs from legacy encodings. Finally, a \fIchangelog\fR or \fINEWS\fR
+file can be created from scratch using the \fB\-\-create\fR option
+described below.
+.PP
+\fBdebchange\fR also supports automatically producing bug-closing
+changelog entries, using the \fB\-\-closes\fR option. This will
+usually query the BTS, the Debian Bug Tracking System (see
+https://bugs.debian.org/) to determine the title of the bug and the
+package in which it occurs. This behaviour can be stopped by giving a
+\fB\-\-noquery\fR option or by setting the configuration variable
+\fBDEBCHANGE_QUERY_BTS\fR to \fIno\fR, as described below. In either
+case, the editor (as described above) will always be invoked to give
+an opportunity to modify the entries, and the changelog will be
+accepted whether or not modifications are made. An extra changelog
+entry can be given on the command line in addition to the closes
+entries.
+.PP
+At most one of \fB\-\-append\fR, \fB\-\-increment\fR, \fB\-\-edit\fR,
+\fB\-\-release\fR, and \fB\-\-newversion\fR may be specified as listed
+below. If no options are specified, \fBdebchange\fR will use heuristics to
+guess whether or not the package has been successfully released, and behave
+as if \fB\-\-increment\fR had been specified if the package has been
+released, or otherwise as if \fB\-\-append\fR has been specified.
+.PP
+Two different sets of heuristics can be used, as controlled by the
+\fB\-\-release-heuristic\fR option or the
+\fBDEBCHANGE_RELEASE_HEURISTIC\fR configuration variable. The default
+\fIchangelog\fR heuristic assumes the package has been released unless its
+changelog contains \fBUNRELEASED\fR in the distribution field. If this heuristic
+is enabled then the distribution will default to \fBUNRELEASED\fR in new
+changelog entries, and the \fB\-\-mainttrailer\fR option described below will be
+automatically enabled. This can be useful if a package can be released by
+different maintainers, or if you do not keep the upload logs. The alternate
+\fIlog\fR heuristic determines if a package has been released by looking for an
+appropriate \fBdupload\fR(1) or \fBdput\fR(1) log file in the parent directory.
+A warning will be issued if the log file is found but a successful upload is not
+recorded. This may be because the previous upload was performed with a version
+of \fBdupload\fR prior to 2.1 or because the upload failed.
+.PP
+If either \fB\-\-increment\fR or \fB\-\-newversion\fR is used, the
+name and email for the new version will be determined as follows. If
+the environment variable \fBDEBFULLNAME\fR is set, this will be used
+for the maintainer full name; if not, then \fBNAME\fR will be checked.
+If the environment variable \fBDEBEMAIL\fR is set, this will be used
+for the email address. If this variable has the form "name <email>",
+then the maintainer name will also be taken from here if neither
+\fBDEBFULLNAME\fR nor \fBNAME\fR is set. If this variable is not set,
+the same test is performed on the environment variable \fBEMAIL\fR.
+Next, if the full name has still not been determined, then use
+\fBgetpwuid\fR(3) to determine the name from the password file. If
+this fails, use the previous changelog entry. For the email address,
+if it has not been set from \fBDEBEMAIL\fR or \fBEMAIL\fR, then look
+in \fI/etc/mailname\fR, then attempt to build it from the username and
+FQDN, otherwise use the email address in the previous changelog entry.
+In other words, it's a good idea to set \fBDEBEMAIL\fR and
+\fBDEBFULLNAME\fR when using this script.
+.PP
+Support is included for changelogs that record changes by multiple
+co-maintainers of a package. If an entry is appended to the current
+version's entries, and the maintainer is different from the maintainer who
+is listed as having done the previous entries, then lines will be added to
+the changelog to tell which maintainers made which changes. Currently only
+one of the several such styles of recording this information is supported,
+in which the name of the maintainer who made a set of changes appears
+on a line before the changes, inside square brackets. This can be
+switched on and off using the \fB\-\-\fR[\fBno\fR]\fBmultimaint\fR option or the
+\fBDEBCHANGE_MULTIMAINT\fR configuration file option; the default is to
+enable it. Note that if an entry has already been marked in this way,
+then this option will be silently ignored.
+.PP
+If the directory name of the source tree has the form
+\fIpackage\fR-\fIversion\fR, then \fBdebchange\fR will also attempt to
+rename it if the (upstream) version number changes. This can be
+prevented by using the \fB\-\-preserve\fR command line or
+configuration file option as described below.
+.PP
+If \fB\-\-force\-bad\-version\fR or \fB\-\-allow\-lower\-version\fR is used,
+\fBdebchange\fR will not stop if the new version is less than the current one.
+This is especially useful while doing backports.
+.SH "Directory name checking"
+In common with several other scripts in the \fBdevscripts\fR package,
+\fBdebchange\fR will climb the directory tree until it finds a
+\fIdebian/changelog\fR file. As a safeguard against stray files
+causing potential problems, it will examine the name of the parent
+directory once it finds the \fIdebian/changelog\fR file, and check
+that the directory name corresponds to the package name. Precisely
+how it does this is controlled by two configuration file variables
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR and \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR can take the following values:
+.TP
+.B 0
+Never check the directory name.
+.TP
+.B 1
+Only check the directory name if we have had to change directory in
+our search for \fIdebian/changelog\fR. This is the default behaviour.
+.TP
+.B 2
+Always check the directory name.
+.PP
+The directory name is checked by testing whether the current directory
+name (as determined by \fBpwd\fR(1)) matches the regex given by the
+configuration file option \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR or by the
+command line option \fB\-\-check-dirname-regex\fR \fIregex\fR. Here
+\fIregex\fR is a Perl regex (see \fBperlre\fR(3perl)), which will be
+anchored at the beginning and the end. If \fIregex\fR contains a '\fB/\fR',
+then it must match the full directory path. If not, then it must
+match the full directory name. If \fIregex\fR contains the string
+\'\fBPACKAGE\fR', this will be replaced by the source package name, as
+determined from the changelog. The default value for the regex is:
+\'\fBPACKAGE(-.+)?\fR', thus matching directory names such as \fBPACKAGE\fR and
+\fBPACKAGE-\fIversion\fR.
+.PP
+The default changelog to be edited is \fIdebian/changelog\fR; however,
+this can be changed using the \fB\-\-changelog\fR or \fB\-\-news\fR
+options or the \fBCHANGELOG\fR environment variable, as described below.
+.SH OPTIONS
+.TP
+.BR \-\-append ", " \-a
+Add a new changelog entry at the end of the current version's entries.
+.TP
+.BR \-\-increment ", " \-i
+Increment either the final component of the Debian release number or,
+if this is a native Debian package, the version number. On Ubuntu or Tanglu,
+this will also change the suffix from buildX to ubuntu1/tanglu1. Use
+\fB\-R\fR, \fB\-\-rebuild\fR for a no change rebuild increment. This creates
+a new section at the beginning of the changelog with appropriate
+headers and footers. Also, if this is a new version of a native
+Debian package, the directory name is changed to reflect this.
+If \fBDEBCHANGE_RELEASE_HEURISTIC\fR is \fIchangelog\fR (default) and the
+current release is \fIUNRELEASED\fR, this will only change the version of the
+current changelog stanza. Otherwise, this will create a new changelog stanza
+with the new version.
+.TP
+\fB\-\-newversion \fIversion\fR, \fB\-v \fIversion\fR
+This specifies the version number (including the Debian release part)
+explicitly and behaves as the \fB\-\-increment\fR option in other
+respects. It will also change the directory name if the upstream
+version number has changed.
+If \fBDEBCHANGE_RELEASE_HEURISTIC\fR is \fIchangelog\fR (default) and the
+current release is \fIUNRELEASED\fR, this will only change the version of the
+current changelog stanza. Otherwise, this will create a new changelog stanza
+with the new version.
+.TP
+.BR \-\-edit ", " \-e
+Edit the changelog in an editor.
+.TP
+.BR \-\-release ", " \-r
+Finalize the changelog for a release.
+Update the changelog timestamp. If the distribution is set to
+\fBUNRELEASED\fR, change it to the distribution from the previous changelog entry
+(or another distribution as specified by \fB\-\-distribution\fR). If there are
+no previous changelog entries and an explicit distribution has not been
+specified, \fBunstable\fR will be used (or the name of the current development
+release when run under Ubuntu).
+.TP
+.BR \-\-force\-save\-on\-release
+When \fB\-\-release\fR is used, an editor is opened to allow inspection
+of the changelog. The user is required to save the file to accept the modified
+changelog, otherwise the original will be kept (default).
+.TP
+.BR \-\-no\-force\-save\-on\-release
+Do not do so. Note that a dummy changelog entry may be supplied
+in order to achieve the same effect - e.g. \fBdebchange \-\-release ""\fR.
+The entry will not be added to the changelog but its presence will suppress
+the editor.
+.TP
+.BR \-\-create
+This will create a new \fIdebian/changelog\fR file (or \fINEWS\fR if
+the \fB\-\-news\fR option is used). You must be in the top-level
+directory to use this; no directory name checking will be performed.
+The package name and version can either be specified using the
+\fB\-\-package\fR and \fB\-\-newversion\fR options, determined from
+the directory name using the \fB\-\-fromdirname\fR option or entered
+manually into the generated \fIchangelog\fR file. The maintainer name is
+determined from the environment if this is possible, and the
+distribution is specified either using the \fB\-\-distribution\fR
+option or in the generated \fIchangelog\fR file.
+.TP
+.BR \-\-empty
+When used in combination with \fB\-\-create\fR, suppress the automatic
+addition of an "\fBinitial release\fR" changelog entry (so that the next
+invocation of \fBdebchange\fR adds the first entry). Note that this
+will cause a \fBdpkg\-parsechangelog\fR warning on the next invocation
+due to the lack of changes.
+.TP
+\fB\-\-package\fR \fIpackage\fR
+This specifies the package name to be used in the new changelog; this
+may only be used in conjunction with the \fB\-\-create\fR, \fB\-\-increment\fR and
+\fB\-\-newversion\fR options.
+.TP
+.BR \-\-nmu ", " \-n
+Increment the Debian release number for a non-maintainer upload by
+either appending a "\fB.1\fR" to a non-NMU version number (unless the package
+is Debian native, in which case "\fB+nmu1\fR" is appended) or by incrementing
+an NMU version number, and add an NMU changelog comment. This happens
+automatically if the packager is neither in the \fBMaintainer\fR nor the \fBUploaders\fR
+field in \fIdebian/control\fR, unless \fBDEBCHANGE_AUTO_NMU\fR is set to
+\fIno\fR or the \fB\-\-no\-auto\-nmu\fR option is used.
+.TP
+.BR \-\-bin\-nmu
+Increment the Debian release number for a binary non-maintainer upload
+by either appending a "\fB+b1\fR" to a non-binNMU version number or by
+incrementing a binNMU version number, and add a binNMU changelog comment.
+.TP
+.BR \-\-qa ", " \-q
+Increment the Debian release number for a Debian QA Team upload, and
+add a \fBQA upload\fR changelog comment.
+.TP
+.BR \-\-rebuild ", " \-R
+Increment the Debian release number for a no-change rebuild by
+appending a "build1" or by incrementing a rebuild version number.
+.TP
+.BR \-\-security ", " \-s
+Increment the Debian release number for a Debian Security Team non-maintainer
+upload, and add a \fBSecurity Team upload\fR changelog comment.
+.TP
+.BR \-\-lts
+Increment the Debian release number for a LTS Security Team non-maintainer
+upload, and add a \fBLTS Security Team upload\fR changelog comment.
+.TP
+.B \-\-team
+Increment the Debian release number for a team upload, and add a \fBTeam upload\fR
+changelog comment.
+.TP
+.BR \-\-upstream ", " \-U
+Don't append \fBdistro-name1\fR to the version on a derived
+distribution. Increment the Debian version.
+.TP
+.B \-\-bpo
+Increment the Debian release number for an upload to bullseye-backports,
+and add a backport upload changelog comment.
+.TP
+.B \-\-stable
+Increment the Debian release number for an upload to the current stable
+release.
+.TP
+.BR \-\-local ", " \-l \fIsuffix\fR
+ Add a suffix to the Debian version number for a local build.
+.TP
+.BR \-\-force\-bad\-version ", " \-b
+Force a version number to be less than the current one (e.g., when
+backporting).
+.TP
+.B \-\-allow\-lower\-version \fIpattern\fR
+Allow a version number to be less than the current one if the new version
+matches the specified pattern.
+.TP
+.BR \-\-force\-distribution
+Force the provided distribution to be used, even if it doesn't match the list of known
+distributions (e.g. for unofficial distributions).
+.TP
+.BR \-\-auto\-nmu
+Attempt to automatically determine whether a change to the changelog
+represents a Non Maintainer Upload. This is the default.
+.TP
+.BR \-\-no\-auto\-nmu
+Disable automatic NMU detection. Equivalent to setting
+\fBDEBCHANGE_AUTO_NMU\fR to \fIno\fR.
+.TP
+.BR \-\-fromdirname ", " \-d
+This will take the upstream version number from the directory name,
+which should be of the form \fIpackage\fB-\fIversion\fR. If the
+upstream version number has increased from the most recent changelog
+entry, then a new entry will be made with version number
+\fIversion\fB-1\fR (or \fIversion\fR if the package is Debian native),
+with the same epoch as the previous package version. If the upstream
+version number is the same, this option will behave in the same way as
+\fB\-i\fR.
+.TP
+.BI \-\-closes " nnnnn\fR[\fB,\fInnnnn \fR...]
+Add changelog entries to close the specified bug numbers. Also invoke
+the editor after adding these entries. Will generate warnings if the
+BTS cannot be contacted (and \fB\-\-noquery\fR has not been
+specified), or if there are problems with the bug report located.
+.TP
+.B \-\-\fR[\fBno\fR]\fBquery
+Should we attempt to query the BTS when generating closes entries?
+.TP
+.BR \-\-preserve ", " \-p
+Preserve the source tree directory name if the upstream version number
+(or the version number of a Debian native package) changes. See also
+the configuration variables section below.
+.TP
+\fB\-\-no\-preserve\fR, \fB\-\-nopreserve\fR
+Do not preserve the source tree directory name (default).
+.TP
+\fB\-\-vendor \fIvendor\fR
+Override the distributor ID over the default returned by dpkg-vendor.
+This name is used for heuristics applied to new package versions and for
+sanity checking of the target distribution.
+.TP
+\fB\-\-distribution \fIdist\fR, \fB\-D \fIdist\fR
+Use the specified distribution in the changelog entry being edited,
+instead of using the previous changelog entry's distribution for new
+entries or the existing value for existing entries.
+.TP
+\fB\-\-urgency \fIurgency\fR, \fB\-u \fIurgency\fR
+Use the specified urgency in the changelog entry being edited,
+instead of using the default "\fBmedium\fR" for new entries or the existing
+value for existing entries.
+.TP
+\fB\-\-changelog \fIfile\fR, \fB\-c \fIfile\fR
+This will edit the changelog \fIfile\fR instead of the standard
+\fIdebian/changelog\fR. This option overrides any \fBCHANGELOG\fR
+environment variable setting. Also, no directory traversing or
+checking will be performed when this option is used.
+.TP
+\fB\-\-news\fR [\fInewsfile\fR]
+This will edit \fInewsfile\fR (by default, \fIdebian/NEWS\fR) instead
+of the regular changelog. Directory searching will be performed.
+The changelog will be examined in order to determine the current package
+version.
+.TP
+\fB\-\-\fR[\fBno\fR]\fBmultimaint\fR
+Should we indicate that parts of a changelog entry have been made by
+different maintainers? Default is yes; see the discussion above and
+also the \fBDEBCHANGE_MULTIMAINT\fR configuration file option below.
+.TP
+\fB\-\-\fR[\fBno\fR]\fBmultimaint\-merge\fR
+Should all changes made by the same author be merged into the same
+changelog section? Default is no; see the discussion above and also the
+\fBDEBCHANGE_MULTIMAINT_MERGE\fR configuration file option below.
+.TP
+.BR \-\-maintmaint ", " \-m
+Do not modify the maintainer details previously listed in the changelog.
+This is useful particularly for sponsors wanting to automatically add a
+sponsorship message without disrupting the other changelog details.
+Note that there may be some interesting interactions if
+multi-maintainer mode is in use; you will probably wish to check the
+changelog manually before uploading it in such cases.
+.TP
+.BR \-\-controlmaint ", " \-M
+Use maintainer details from the \fIdebian/control\fR \fBMaintainer\fR field
+rather than relevant environment variables (\fBDEBFULLNAME\fR, \fBDEBEMAIL\fR,
+etc.). This option might be useful to restore details of the main maintainer
+in the changelog trailer after a bogus edit (e.g. when \fB\-m\fR was intended
+but forgot) or when releasing a package in the name of the main maintainer
+(e.g. the team).
+.TP
+.BR \-\-\fR[\fBno\fR]\fBmainttrailer ", " \-t
+If \fBmainttrailer\fR is set, it will avoid modifying the existing changelog
+trailer line (i.e. the maintainer and date-stamp details), unless
+used with options that require the trailer to be modified
+(e.g. \fB\-\-create\fR, \fB\-\-release\fR, \fB\-i\fR, \fB\-\-qa\fR, etc.)
+This option differs from \fB\-\-maintmaint\fR in that it will use
+multi-maintainer mode if appropriate, with the exception of editing the
+trailer. See also the \fBDEBCHANGE_MAINTTRAILER\fR configuration file option
+below.
+.TP
+\fB\-\-check-dirname-level\fR \fIN\fR
+See the above section "\fBDirectory name checking\fR" for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section "\fBDirectory name checking\fR" for an explanation of
+this option.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+\fB\-\-release\-heuristic\fR \fIlog\fR|\fIchangelog\fR
+Controls how \fBdebchange\fR determines if a package has been released,
+when deciding whether to create a new changelog entry or append to an
+existing changelog entry.
+.TP
+.BR \-\-help ", " \-h
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B DEBCHANGE_PRESERVE
+If this is set to \fIyes\fR, then it is the same as the
+\fB\-\-preserve\fR command line parameter being used.
+.TP
+.B DEBCHANGE_QUERY_BTS
+If this is set to \fIno\fR, then it is the same as the
+\fB\-\-noquery\fR command line parameter being used.
+.TP
+.BR DEVSCRIPTS_CHECK_DIRNAME_LEVEL ", " DEVSCRIPTS_CHECK_DIRNAME_REGEX
+See the above section "\fBDirectory name checking\fR" for an explanation of
+these variables. Note that these are package-wide configuration
+variables, and will therefore affect all \fBdevscripts\fR scripts
+which check their value, as described in their respective manpages and
+in \fBdevscripts.conf\fR(5).
+.TP
+.BR DEBCHANGE_RELEASE_HEURISTIC
+Controls how \fBdebchange\fR determines if a package has been released,
+when deciding whether to create a new changelog entry or append to an
+existing changelog entry. Can be either \fIlog\fR or \fIchangelog\fR.
+.TP
+.BR DEBCHANGE_MULTIMAINT
+If set to \fIno\fR, \fBdebchange\fR will not introduce multiple-maintainer
+distinctions when a different maintainer appends an entry to an
+existing changelog. See the discussion above. Default is \fIyes\fR.
+.TP
+.BR DEBCHANGE_MULTIMAINT_MERGE
+If set to \fIyes\fR, when adding changes in multiple-maintainer mode
+\fBdebchange\fR will check whether previous changes by the current
+maintainer exist and add the new changes to the existing block
+rather than creating a new block. Default is \fIno\fR.
+.TP
+.BR DEBCHANGE_MAINTTRAILER
+If this is set to \fIno\fR, then it is the same as the
+\fB\-\-nomainttrailer\fR command line parameter being used.
+.TP
+.BR DEBCHANGE_TZ
+Use this timezone for changelog entries. Default is the user/system
+timezone as shown by `\fBdate \-R\fR` and affected by the environment variable \fBTZ\fR.
+.TP
+.BR DEBCHANGE_LOWER_VERSION_PATTERN
+If this is set, then it is the same as the
+\fB\-\-allow\-lower\-version\fR command line parameter being used.
+.TP
+.BR DEBCHANGE_AUTO_NMU
+If this is set to \fIno\fR then \fBdebchange\fR will not attempt to
+automatically determine whether the current changelog stanza represents
+an NMU. The default is \fIyes\fR. See the discussion of the
+\fB\-\-nmu\fR option above.
+.TP
+.BR DEBCHANGE_FORCE_SAVE_ON_RELEASE
+If this is set to \fIno\fR, then it is the same as the
+\fB\-\-no\-force\-save\-on\-release\fR command line parameter being used.
+.TP
+.B DEBCHANGE_VENDOR
+Use this vendor instead of the default (dpkg-vendor output). See
+\fB\-\-vendor\fR for details.
+.SH ENVIRONMENT
+.TP
+.BR DEBEMAIL ", " EMAIL ", " DEBFULLNAME ", " NAME
+See the above description of the use of these environment variables.
+.TP
+.B CHANGELOG
+This variable specifies the changelog to edit in place of
+\fIdebian/changelog\fR. No directory traversal or checking is
+performed when this variable is set. This variable is overridden by
+the \fB\-\-changelog\fR command-line setting.
+.TP
+.BR VISUAL ", " EDITOR
+These environment variables (in this order) determine the editor used
+by \fBsensible-editor\fR.
+.SH "SEE ALSO"
+.BR debc (1),
+.BR debclean (1),
+.BR dput (1),
+.BR dupload (1),
+.BR devscripts.conf (5)
+.SH AUTHOR
+The original author was Christoph Lameter <clameter@debian.org>.
+Many substantial changes and improvements were made by Julian Gilbey
+<jdg@debian.org>.
diff --git a/scripts/debchange.bash_completion b/scripts/debchange.bash_completion
new file mode 100644
index 0000000..e2f89c9
--- /dev/null
+++ b/scripts/debchange.bash_completion
@@ -0,0 +1,90 @@
+# /usr/share/bash-completion/completions/debchange
+# Bash command completion for ‘debchange(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+_debchange()
+{
+ local cur prev options
+
+ COMPREPLY=()
+ cur=${COMP_WORDS[COMP_CWORD]}
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+ options='-a --append -i --increment -v --newversion -e --edit\
+ -r --release --force-save-on-release --no-force-save-on-release\
+ --create --empty --package --auto-nmu --no-auto-nmu -n --nmu --lts\
+ --bin-nmu -q --qa -R --rebuild -s --security --team -U --upstream\
+ --bpo --stable -l --local -b --force-bad-version --allow-lower-version\
+ --force-distribution --closes --noquery --query -d --fromdirname\
+ -p --preserve --no-preserve --vendor -D --distribution\
+ -u --urgency -c --changelog --news --nomultimaint --multimaint\
+ --nomultimaint-merge --multimaint-merge -m --maintmaint\
+ -M --controlmaint -t --mainttrailer --check-dirname-level\
+ --check-dirname-regex --no-conf --noconf --release-heuristic\
+ --help -h --version'
+
+#--------------------------------------------------------------------------
+#FIXME: I don't want hard-coding codename...
+#--------------------------------------------------------------------------
+ oldstable_codename='bullseye'
+ stable_codename='bookworm'
+ testing_codename='trixie'
+
+ lts='buster-lts'
+
+ distro="oldstable-security oldstable-proposed-updates\
+ "$oldstable_codename"-security\
+ "$oldstable_codename"-backports\
+ "$oldstable_codename"-backports-sloppy\
+ stable-security stable-proposed-updates\
+ "$stable_codename"-security\
+ "$stable_codename"-backports\
+ "$stable_codename"-updates\
+ testing-security testing-proposed-updates\
+ "$testing_codename"-security\
+ unstable experimental $lts"
+
+ urgency='low medium high critical'
+
+ case $prev in
+ --changelog | -c | --news)
+ COMPREPLY=( $( compgen -G "${cur}*" ) )
+ ;;
+ --check-dirname-level)
+ COMPREPLY=( $( compgen -W [0 1 2] ) )
+ ;;
+#FIXME: we need "querybts --list" option with no verbose output
+# --closes)
+# package=`dpkg-parsechangelog -SSource`
+# bugnumber=`querybts --list -b $package|grep ^#|cut -d' ' -f1`
+# COMPREPLY=( $( compgen -W "$bugnumber" ) )
+# ;;
+ -D | --distribution)
+ COMPREPLY=( $( compgen -W "$distro" ) )
+ ;;
+ --newversion | -v | --package | --local | -l | --allow-lower-version)
+ ;;
+ --release-heuristic)
+ COMPREPLY=( $( compgen -W 'log changelog' ) )
+ ;;
+ -u | --urgency)
+ COMPREPLY=( $( compgen -W "$urgency" ) )
+ ;;
+ *)
+ COMPREPLY=( $(
+ compgen -W "$options" | grep "^$cur"
+ ) )
+ ;;
+ esac
+
+ return 0
+
+}
+complete -F _debchange debchange dch
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/debchange.pl b/scripts/debchange.pl
new file mode 100755
index 0000000..a82ab80
--- /dev/null
+++ b/scripts/debchange.pl
@@ -0,0 +1,1882 @@
+#!/usr/bin/perl
+# vim: set ai shiftwidth=4 tabstop=4 expandtab:
+
+# debchange: update the debian changelog using your favorite visual editor
+# For options, see the usage message below.
+#
+# When creating a new changelog section, if either of the environment
+# variables DEBEMAIL or EMAIL is set, debchange will use this as the
+# uploader's email address (with the former taking precedence), and if
+# DEBFULLNAME or NAME is set, it will use this as the uploader's full name.
+# Otherwise, it will take the standard values for the current user or,
+# failing that, just copy the values from the previous changelog entry.
+#
+# Originally by Christoph Lameter <clameter@debian.org>
+# Modified extensively by Julian Gilbey <jdg@debian.org>
+#
+# Copyright 1999-2005 by Julian Gilbey
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use 5.008; # We're using PerlIO layers
+use strict;
+use warnings;
+use open ':utf8'; # changelogs are written with UTF-8 encoding
+use filetest 'access'; # use access rather than stat for -w
+# for checking whether user names are valid and making format() behave
+use Encode qw/decode_utf8 encode_utf8/;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use File::Copy;
+use File::Basename;
+use Cwd;
+use Dpkg::Vendor qw(get_current_vendor);
+use Dpkg::Changelog::Parse qw(changelog_parse);
+use Dpkg::Control;
+use Dpkg::Version;
+use Devscripts::Compression;
+use Devscripts::Debbugs;
+use POSIX qw(locale_h strftime);
+
+setlocale(LC_TIME, "C"); # so that strftime is locale independent
+
+# Predeclare functions
+sub fatal($);
+my $warnings = 0;
+
+# And global variables
+my $progname = basename($0);
+my $modified_conf_msg;
+my %env;
+my $CHGLINE; # used by the format O section at the end
+
+my $compression_re = compression_get_file_extension_regex();
+
+my $debian_distro_info;
+
+sub get_debian_distro_info {
+ return $debian_distro_info if defined $debian_distro_info;
+ eval { require Debian::DistroInfo; };
+ if ($@) {
+ printf "libdistro-info-perl is not installed, Debian release names "
+ . "are not known.\n";
+ $debian_distro_info = 0;
+ } else {
+ $debian_distro_info = DebianDistroInfo->new();
+ }
+ return $debian_distro_info;
+}
+
+my $ubuntu_distro_info;
+
+sub get_ubuntu_distro_info {
+ return $ubuntu_distro_info if defined $ubuntu_distro_info;
+ eval { require Debian::DistroInfo; };
+ if ($@) {
+ printf "libdistro-info-perl is not installed, Ubuntu release names "
+ . "are not known.\n";
+ $ubuntu_distro_info = 0;
+ } else {
+ $ubuntu_distro_info = UbuntuDistroInfo->new();
+ }
+ return $ubuntu_distro_info;
+}
+
+sub get_ubuntu_devel_distro {
+ my $ubu_info = get_ubuntu_distro_info();
+ if ($ubu_info == 0 or !$ubu_info->devel()) {
+ warn "$progname warning: Unable to determine the current Ubuntu "
+ . "development release. Using UNRELEASED instead.\n";
+ return 'UNRELEASED';
+ } else {
+ return $ubu_info->devel();
+ }
+}
+
+sub usage () {
+ print <<"EOF";
+Usage: $progname [options] [changelog entry]
+Options:
+ -a, --append
+ Append a new entry to the current changelog
+ -i, --increment
+ Increase the Debian release number, adding a new changelog entry
+ -v <version>, --newversion=<version>
+ Add a new changelog entry with version number specified
+ -e, --edit
+ Don't change version number or add a new changelog entry, just
+ opens an editor
+ -r, --release
+ Update the changelog timestamp. If the distribution is set to
+ "UNRELEASED", change it to unstable (or another distribution as
+ specified by --distribution, or the name of the current development
+ release when run under Ubuntu).
+ --force-save-on-release
+ When --release is used and an editor opened to allow inspection
+ of the changelog, require the user to save the changelog their
+ editor opened. Otherwise, the original changelog will not be
+ modified. (default)
+ --no-force-save-on-release
+ Do not do so. Note that a dummy changelog entry may be supplied
+ in order to achieve the same effect - e.g. $progname --release ""
+ The entry will not be added to the changelog but its presence will
+ suppress the editor
+ --create
+ Create a new changelog (default) or NEWS file (with --news) and
+ open for editing
+ --empty
+ When creating a new changelog, don't add any changes to it
+ (i.e. only include the header and trailer lines)
+ --package <package>
+ Specify the package name when using --create (optional)
+ --auto-nmu
+ Attempt to intelligently determine whether a change to the
+ changelog represents an NMU (default)
+ --no-auto-nmu
+ Do not do so
+ -n, --nmu
+ Increment the Debian release number for a non-maintainer upload
+ --bin-nmu
+ Increment the Debian release number for a binary non-maintainer upload
+ -q, --qa
+ Increment the Debian release number for a Debian QA Team upload
+ -R, --rebuild
+ Increment the Debian release number for a no-change rebuild
+ -s, --security
+ Increment the Debian release number for a Debian Security Team upload
+ --lts
+ Increment the Debian release number for a LTS Security Team upload
+ --team
+ Increment the Debian release number for a team upload
+ -U, --upstream
+ Increment the Debian release number without any appended derivative
+ distribution name
+ --bpo
+ Increment the Debian release number for a backports upload
+ to "bookworm-backports"
+ --stable
+ Increment the Debian release number for a stable upload.
+ -l, --local <suffix>
+ Add a suffix to the Debian version number for a local build
+ -b, --force-bad-version
+ Force a version to be less than the current one (e.g., when
+ backporting)
+ --allow-lower-version <pattern>
+ Allow a version to be less than the current one (e.g., when
+ backporting) if it matches the specified pattern
+ --force-distribution
+ Force the provided distribution to be used, even if it doesn't match
+ the list of known distributions
+ --closes nnnnn[,nnnnn,...]
+ Add entries for closing these bug numbers,
+ getting bug titles from the BTS (bug-tracking system, bugs.debian.org)
+ --[no]query
+ [Don\'t] try contacting the BTS to get bug titles (default: do query)
+ -d, --fromdirname
+ Add a new changelog entry with version taken from the directory name
+ -p, --preserve
+ Preserve the directory name
+ --no-preserve
+ Do not preserve the directory name (default)
+ --vendor <vendor>
+ Override the distributor ID from dpkg-vendor.
+ -D, --distribution <dist>
+ Use the specified distribution in the changelog entry being edited
+ -u, --urgency <urgency>
+ Use the specified urgency in the changelog entry being edited
+ -c, --changelog <changelog>
+ Specify the name of the changelog to use in place of debian/changelog
+ No directory traversal or checking is performed in this case.
+ --news <newsfile>
+ Specify that the newsfile (default debian/NEWS) is to be edited
+ --[no]multimaint
+ When appending an entry to a changelog section (-a), [do not]
+ indicate if multiple maintainers are now involved (default: do so)
+ --[no]multimaint-merge
+ When appending an entry to a changelog section, [do not] merge the
+ entry into an existing changelog section for the current author.
+ (default: do not)
+ -m, --maintmaint
+ Don\'t change (maintain) the maintainer details in the changelog entry
+ -M, --controlmaint
+ Use maintainer name and email from the debian/control Maintainer field
+ -t, --mainttrailer
+ Don\'t change (maintain) the trailer line in the changelog entry; i.e.
+ maintain the maintainer and date/time details
+ --check-dirname-level N
+ How much to check directory names:
+ N=0 never
+ N=1 only if program changes directory (default)
+ N=2 always
+ --check-dirname-regex REGEX
+ What constitutes a matching directory name; REGEX is
+ a Perl regular expression; the string \`PACKAGE\' will
+ be replaced by the package name; see manpage for details
+ (default: 'PACKAGE(-.+)?')
+ --no-conf, --noconf
+ Don\'t read devscripts config files; must be the first option given
+ --release-heuristic log|changelog
+ Select heuristic used to determine if a package has been released.
+ (default: changelog)
+ --help, -h
+ Display this help message and exit
+ --version
+ Display version information
+ At most one of -a, -i, -e, -r, -v, -d, -n, --bin-nmu, -q, --qa, -R, -s,
+ --lts, --team, --bpo, --stable, -l (or their long equivalents) may be used.
+ With no options, one of -i or -a is chosen by looking at the release
+ specified in the changelog.
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOF
+}
+
+sub version () {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version 2.17.10
+This code is copyright 1999-2003 by Julian Gilbey, all rights reserved.
+Based on code by Christoph Lameter.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+# Start by setting default values
+my $check_dirname_level = 1;
+my $check_dirname_regex = 'PACKAGE(-.+)?';
+my $opt_p = 0;
+my $opt_query = 1;
+my $opt_release_heuristic = 'changelog';
+my $opt_release_heuristic_re = '^(changelog|log)$';
+my $opt_multimaint = 1;
+my $opt_multimaint_merge = 0;
+my $opt_tz = undef;
+my $opt_t = '';
+my $opt_allow_lower = '';
+my $opt_auto_nmu = 1;
+my $opt_force_save_on_release = 1;
+my $opt_vendor = undef;
+
+# Next, read configuration files and then command line
+# The next stuff is boilerplate
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'DEBCHANGE_PRESERVE' => 'no',
+ 'DEBCHANGE_QUERY_BTS' => 'yes',
+ 'DEVSCRIPTS_CHECK_DIRNAME_LEVEL' => 1,
+ 'DEVSCRIPTS_CHECK_DIRNAME_REGEX' => 'PACKAGE(-.+)?',
+ 'DEBCHANGE_RELEASE_HEURISTIC' => 'changelog',
+ 'DEBCHANGE_MULTIMAINT' => 'yes',
+ 'DEBCHANGE_TZ' => $ENV{TZ}, # undef if TZ unset
+ 'DEBCHANGE_MULTIMAINT_MERGE' => 'no',
+ 'DEBCHANGE_MAINTTRAILER' => '',
+ 'DEBCHANGE_LOWER_VERSION_PATTERN' => '',
+ 'DEBCHANGE_AUTO_NMU' => 'yes',
+ 'DEBCHANGE_FORCE_SAVE_ON_RELEASE' => 'yes',
+ 'DEBCHANGE_VENDOR' => '',
+ );
+ $config_vars{'DEBCHANGE_TZ'} ||= '';
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ # Check validity
+ $config_vars{'DEBCHANGE_PRESERVE'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCHANGE_PRESERVE'} = 'no';
+ $config_vars{'DEBCHANGE_QUERY_BTS'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCHANGE_QUERY_BTS'} = 'yes';
+ $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'} =~ /^[012]$/
+ or $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'} = 1;
+ $config_vars{'DEBCHANGE_RELEASE_HEURISTIC'} =~ $opt_release_heuristic_re
+ or $config_vars{'DEBCHANGE_RELEASE_HEURISTIC'} = 'changelog';
+ $config_vars{'DEBCHANGE_MULTIMAINT'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCHANGE_MULTIMAINT'} = 'yes';
+ $config_vars{'DEBCHANGE_MULTIMAINT_MERGE'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCHANGE_MULTIMAINT_MERGE'} = 'no';
+ $config_vars{'DEBCHANGE_AUTO_NMU'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCHANGE_AUTO_NMU'} = 'yes';
+ $config_vars{'DEBCHANGE_FORCE_SAVE_ON_RELEASE'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCHANGE_FORCE_SAVE_ON_RELEASE'} = 'yes';
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $opt_p = $config_vars{'DEBCHANGE_PRESERVE'} eq 'yes' ? 1 : 0;
+ $opt_query = $config_vars{'DEBCHANGE_QUERY_BTS'} eq 'no' ? 0 : 1;
+ $check_dirname_level = $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'};
+ $check_dirname_regex = $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_REGEX'};
+ $opt_release_heuristic = $config_vars{'DEBCHANGE_RELEASE_HEURISTIC'};
+ $opt_multimaint = $config_vars{'DEBCHANGE_MULTIMAINT'} eq 'no' ? 0 : 1;
+ $opt_tz = $config_vars{'DEBCHANGE_TZ'};
+ $opt_multimaint_merge
+ = $config_vars{'DEBCHANGE_MULTIMAINT_MERGE'} eq 'no' ? 0 : 1;
+ $opt_t = ($config_vars{'DEBCHANGE_MAINTTRAILER'} eq 'no' ? 0 : 1)
+ if $config_vars{'DEBCHANGE_MAINTTRAILER'};
+ $opt_allow_lower = $config_vars{'DEBCHANGE_LOWER_VERSION_PATTERN'};
+ $opt_auto_nmu = $config_vars{'DEBCHANGE_AUTO_NMU'} eq 'yes';
+ $opt_force_save_on_release
+ = $config_vars{'DEBCHANGE_FORCE_SAVE_ON_RELEASE'} eq 'yes' ? 1 : 0;
+ $opt_vendor = $config_vars{'DEBCHANGE_VENDOR'};
+}
+
+# We use bundling so that the short option behaviour is the same as
+# with older debchange versions.
+my ($opt_help, $opt_version);
+my (
+ $opt_i, $opt_a, $opt_e, $opt_r, $opt_v,
+ $opt_b, $opt_d, $opt_D, $opt_u, $opt_force_dist
+);
+my (
+ $opt_n, $opt_bn, $opt_qa, $opt_R, $opt_s,
+ $opt_lts, $opt_team, $opt_U, $opt_bpo, $opt_stable,
+ $opt_l, $opt_c, $opt_m, $opt_M, $opt_create,
+ $opt_package, @closes
+);
+my ($opt_news);
+my ($opt_noconf, $opt_empty);
+
+Getopt::Long::Configure('bundling');
+GetOptions(
+ "help|h" => \$opt_help,
+ "version" => \$opt_version,
+ "i|increment" => \$opt_i,
+ "a|append" => \$opt_a,
+ "e|edit" => \$opt_e,
+ "r|release" => \$opt_r,
+ "create" => \$opt_create,
+ "package=s" => \$opt_package,
+ "v|newversion=s" => \$opt_v,
+ "b|force-bad-version" => \$opt_b,
+ "allow-lower-version=s" => \$opt_allow_lower,
+ "force-distribution" => \$opt_force_dist,
+ "d|fromdirname" => \$opt_d,
+ "p" => \$opt_p,
+ "preserve!" => \$opt_p,
+ "D|distribution=s" => \$opt_D,
+ "u|urgency=s" => \$opt_u,
+ "n|nmu" => \$opt_n,
+ "bin-nmu" => \$opt_bn,
+ "q|qa" => \$opt_qa,
+ "R|rebuild" => \$opt_R,
+ "s|security" => \$opt_s,
+ "team" => \$opt_team,
+ "U|upstream" => \$opt_U,
+ "bpo" => \$opt_bpo,
+ "lts" => \$opt_lts,
+ "stable" => \$opt_stable,
+ "l|local=s" => \$opt_l,
+ "query!" => \$opt_query,
+ "closes=s" => \@closes,
+ "c|changelog=s" => \$opt_c,
+ "news:s" => \$opt_news,
+ "multimaint!" => \$opt_multimaint,
+ "multi-maint!" => \$opt_multimaint,
+ 'multimaint-merge!' => \$opt_multimaint_merge,
+ 'multi-maint-merge!' => \$opt_multimaint_merge,
+ "m|maintmaint" => \$opt_m,
+ "M|controlmaint" => \$opt_M,
+ "t|mainttrailer!" => \$opt_t,
+ "check-dirname-level=s" => \$check_dirname_level,
+ "check-dirname-regex=s" => \$check_dirname_regex,
+ "noconf" => \$opt_noconf,
+ "no-conf" => \$opt_noconf,
+ "release-heuristic=s" => \$opt_release_heuristic,
+ "empty" => \$opt_empty,
+ "auto-nmu!" => \$opt_auto_nmu,
+ "force-save-on-release!" => \$opt_force_save_on_release,
+ "vendor=s" => \$opt_vendor,
+ )
+ or die
+"Usage: $progname [options] [changelog entry]\nRun $progname --help for more details\n";
+
+# So that we can distinguish, if required, between an explicit
+# passing of -a / -i and their values being automagically deduced
+# later on
+my $opt_a_passed = $opt_a || 0;
+my $opt_i_passed = $opt_i || 0;
+$opt_news = 'debian/NEWS' if defined $opt_news and $opt_news eq '';
+
+if ($opt_t eq '' && $opt_release_heuristic eq 'changelog') {
+ $opt_t = 1;
+}
+
+if ($opt_noconf) {
+ fatal "--no-conf is only acceptable as the first command-line option!";
+}
+if ($opt_help) { usage; exit 0; }
+if ($opt_version) { version; exit 0; }
+
+if ($check_dirname_level !~ /^[012]$/) {
+ fatal "Unrecognised --check-dirname-level value (allowed are 0,1,2)";
+}
+if ($opt_release_heuristic !~ $opt_release_heuristic_re) {
+ fatal "Allowed values for --release-heuristics are log and changelog.";
+}
+
+# Only allow at most one non-help option
+fatal
+"Only one of -a, -i, -e, -r, -v, -d, -n/--nmu, --bin-nmu, -q/--qa, -R/--rebuild, -s/--security, --lts, --team, --bpo, --stable, -l/--local is allowed;\ntry $progname --help for more help"
+ if ($opt_i ? 1 : 0)
+ + ($opt_a ? 1 : 0)
+ + ($opt_e ? 1 : 0)
+ + ($opt_r ? 1 : 0)
+ + ($opt_v ? 1 : 0)
+ + ($opt_d ? 1 : 0)
+ + ($opt_n ? 1 : 0)
+ + ($opt_bn ? 1 : 0)
+ + ($opt_qa ? 1 : 0)
+ + ($opt_R ? 1 : 0)
+ + ($opt_s ? 1 : 0)
+ + ($opt_lts ? 1 : 0)
+ + ($opt_team ? 1 : 0)
+ + ($opt_bpo ? 1 : 0)
+ + ($opt_stable ? 1 : 0)
+ + ($opt_l ? 1 : 0) > 1;
+
+if ($opt_s) {
+ $opt_u = "high";
+}
+
+if (defined $opt_u) {
+ fatal "Urgency can only be one of: low, medium, high, critical, emergency"
+ unless $opt_u =~ /^(low|medium|high|critical|emergency)$/;
+}
+
+# See if we're Debian, Ubuntu or someone else, if we can
+my $vendor;
+if (defined $opt_vendor && $opt_vendor) {
+ $vendor = $opt_vendor;
+} else {
+ if (defined $opt_D) {
+ # Try to guess the vendor based on the given distribution name
+ my $distro = $opt_D;
+ $distro =~ s/-.*//;
+ my $deb_info = get_debian_distro_info();
+ my $ubu_info = get_ubuntu_distro_info();
+ if ($deb_info != 0 and $deb_info->valid($distro)) {
+ $vendor = 'Debian';
+ } elsif ($ubu_info != 0 and $ubu_info->valid($distro)) {
+ $vendor = 'Ubuntu';
+ }
+ }
+ if (not defined $vendor) {
+ # Get the vendor from dpkg-vendor (dpkg-vendor --query Vendor)
+ $vendor = get_current_vendor();
+ }
+}
+$vendor ||= 'Debian';
+if ($vendor eq 'Ubuntu'
+ and ($opt_n or $opt_bn or $opt_qa or $opt_bpo or $opt_stable or $opt_lts))
+{
+ $vendor = 'Debian';
+}
+
+# Check the distro name given.
+if (defined $opt_D) {
+ if ($vendor eq 'Debian') {
+ unless ($opt_D
+ =~ /^(experimental|unstable|sid|UNRELEASED|((old){0,2}stable|testing|buster|bullseye|bookworm|trixie)(-proposed-updates|-security)?|proposed-updates)$/
+ ) {
+ my $deb_info = get_debian_distro_info();
+ my ($oldstable_backports, $stable_backports) = ("", "");
+ if ($deb_info == 0) {
+ warn
+"$progname warning: Unable to determine Debian's backport distributions.\n";
+ } else {
+ $stable_backports = $deb_info->stable() . "-backports";
+# Silence any potential warnings $deb_info emits when oldstable is no longer supported
+ local $SIG{__WARN__} = sub { };
+ my $oldstable = $deb_info->old();
+ $oldstable_backports = "$oldstable-backports" if $oldstable;
+ }
+ if ( $deb_info == 0
+ || $opt_D
+ !~ m/^(\Q$stable_backports\E|\Q$oldstable_backports\E)$/) {
+ $stable_backports = ", " . $stable_backports
+ if $stable_backports;
+ $oldstable_backports = ", " . $oldstable_backports
+ if $oldstable_backports;
+ warn "$progname warning: Recognised distributions are: \n"
+ . "experimental, unstable, testing, stable, oldstable, oldoldstable,\n"
+ . "{trixie,bookworm,bullseye,buster}-proposed-updates,\n"
+ . "{testing,stable,oldstable,oldoldstable}-proposed-updates,\n"
+ . "{trixie,bookworm,bullseye,buster}-security,\n"
+ . "{testing,stable,oldstable,oldoldstable}}-security$oldstable_backports$stable_backports and UNRELEASED.\n"
+ . "Using your request anyway.\n";
+ $warnings++ if not $opt_force_dist;
+ }
+ }
+ } elsif ($vendor eq 'Ubuntu') {
+ if ($opt_D eq 'UNRELEASED') {
+ ;
+ } else {
+ my $ubu_release = $opt_D;
+ $ubu_release =~ s/(-updates|-security|-proposed|-backports)$//;
+ my $ubu_info = get_ubuntu_distro_info();
+ if ($ubu_info == 0) {
+ warn "$progname warning: Unable to determine if $ubu_release "
+ . "is a valid Ubuntu release.\n";
+ } elsif (!$ubu_info->valid($ubu_release)) {
+ warn "$progname warning: Recognised distributions are:\n{"
+ . join(',', $ubu_info->supported())
+ . "}{,-updates,-security,-proposed,-backports} and UNRELEASED.\n"
+ . "Using your request anyway.\n";
+ $warnings++ if not $opt_force_dist;
+ }
+ }
+ } else {
+ # Unknown vendor, skip check
+ }
+}
+
+fatal
+"--closes should not be used with --news; put bug numbers in the changelog not the NEWS file"
+ if $opt_news && @closes;
+
+# hm, this can probably be used with more than just -i.
+fatal "--package can only be used with --create, --increment and --newversion"
+ if $opt_package && !($opt_create || $opt_i || $opt_v);
+
+my $changelog_path = $opt_c || $ENV{'CHANGELOG'} || 'debian/changelog';
+my $real_changelog_path = $changelog_path;
+if ($opt_news) { $changelog_path = $opt_news; }
+if ($changelog_path ne 'debian/changelog' and not $opt_news) {
+ $check_dirname_level = 0;
+}
+
+# extra --create checks
+fatal "--package cannot be used when creating a NEWS file"
+ if $opt_package && $opt_news;
+
+if ($opt_create) {
+ if ( $opt_a
+ || $opt_i
+ || $opt_e
+ || $opt_r
+ || $opt_b
+ || $opt_n
+ || $opt_bn
+ || $opt_qa
+ || $opt_R
+ || $opt_s
+ || $opt_lts
+ || $opt_team
+ || $opt_bpo
+ || $opt_stable
+ || $opt_l
+ || $opt_allow_lower) {
+ warn
+"$progname warning: ignoring -a/-i/-e/-r/-b/--allow-lower-version/-n/--bin-nmu/-q/--qa/-R/-s/--lts/--team/--bpo/--stable,-l options with --create\n";
+ $warnings++;
+ }
+ if ($opt_package && $opt_d) {
+ fatal "Can only use one of --package and -d";
+ }
+}
+
+@closes = split(/,/, join(',', @closes));
+map { s/^\#//; } @closes; # remove any leading # from bug numbers
+
+# We'll process the rest of the command line later.
+
+# Look for the changelog
+my $chdir = 0;
+if (!$opt_create) {
+ if ($changelog_path eq 'debian/changelog' or $opt_news) {
+ until (-f $changelog_path) {
+ $chdir = 1;
+ chdir '..' or fatal "Can't chdir ..: $!";
+ if (cwd() eq '/') {
+ fatal
+"Cannot find $changelog_path anywhere!\nAre you in the source code tree?\n(You could use --create if you wish to create this file.)";
+ }
+ }
+
+ # Can't write, so stop now.
+ if (!-w $changelog_path) {
+ fatal "$changelog_path is not writable!";
+ }
+ } else {
+ unless (-f $changelog_path) {
+ fatal
+"Cannot find $changelog_path!\nAre you in the correct directory?\n(You could use --create if you wish to create this file.)";
+ }
+
+ # Can't write, so stop now.
+ if (!-w $changelog_path) {
+ fatal "$changelog_path is not writable!";
+ }
+ }
+} else { # $opt_create
+ unless (-d dirname $changelog_path) {
+ fatal "Cannot find "
+ . (dirname $changelog_path)
+ . " directory!\nAre you in the correct directory?";
+ }
+ if (-f $changelog_path) {
+ fatal "File $changelog_path already exists!";
+ }
+ unless (-w dirname $changelog_path) {
+ fatal "Cannot find "
+ . (dirname $changelog_path)
+ . " directory!\nAre you in the correct directory?";
+ }
+ if ($opt_news && !-f 'debian/changelog') {
+ fatal "I can't create $opt_news without debian/changelog present";
+ }
+}
+
+#####
+
+# Find the current version number etc.
+my $changelog;
+my $PACKAGE = 'PACKAGE';
+my $VERSION = 'VERSION';
+my $MAINTAINER = 'MAINTAINER';
+my $EMAIL = 'EMAIL';
+my $DISTRIBUTION = 'UNRELEASED';
+# when updating the lines below also update the help text, the manpage and the testcases.
+my %dists = (10, 'buster', 11, 'bullseye', 12, 'bookworm', 13, 'trixie');
+my $lts_dist = '10';
+my $latest_dist = '12';
+# dist guessed from backports, SRU, security uploads...
+my $guessed_dist = '';
+my $CHANGES = '';
+# Changelog urgency, possibly propagated to NEWS files
+my $CL_URGENCY = '';
+
+if (!$opt_create || ($opt_create && $opt_news)) {
+ my $file = $opt_create ? 'debian/changelog' : $changelog_path;
+ $changelog = changelog_parse(file => $file);
+
+ # Now we've read the changelog, set some variables and then
+ # let's check the directory name is sensible
+ fatal "No package name in changelog!"
+ unless exists $changelog->{Source};
+ $PACKAGE = $changelog->{Source};
+ fatal "No version number in changelog!"
+ unless exists $changelog->{Version};
+ $VERSION = $changelog->{Version};
+ fatal "No maintainer in changelog!"
+ unless exists $changelog->{Maintainer};
+ $changelog->{Maintainer} = decode_utf8($changelog->{Maintainer});
+ ($MAINTAINER, $EMAIL) = ($changelog->{Maintainer} =~ /^([^<]*) <(.*)>/);
+ $MAINTAINER ||= '';
+ fatal "No distribution in changelog!"
+ unless exists $changelog->{Distribution};
+
+ if ($vendor eq 'Ubuntu') {
+ # In Ubuntu the development release regularly changes, don't just copy
+ # the previous name.
+ $DISTRIBUTION = get_ubuntu_devel_distro();
+ } else {
+ $DISTRIBUTION = $changelog->{Distribution};
+ }
+ fatal "No changes in changelog!"
+ unless exists $changelog->{Changes};
+
+ # Find the current package version
+ if ($opt_news) {
+ my $found_version = 0;
+ my $found_urgency = 0;
+ my $clog = changelog_parse(file => $real_changelog_path);
+ $VERSION = $clog->{Version};
+ $VERSION =~ s/~$//;
+
+ $CL_URGENCY = $clog->{Urgency};
+ }
+
+ # Is the directory name acceptable?
+ if ($check_dirname_level == 2
+ or ($check_dirname_level == 1 and $chdir)) {
+ my $re = $check_dirname_regex;
+ $re =~ s/PACKAGE/\\Q$PACKAGE\\E/g;
+ my $gooddir;
+ if ($re =~ m%/%) { $gooddir = eval "cwd() =~ /^$re\$/;"; }
+ else { $gooddir = eval "basename(cwd()) =~ /^$re\$/;"; }
+
+ if (!$gooddir) {
+ my $pwd = cwd();
+ fatal <<"EOF";
+Found debian/changelog for package $PACKAGE in the directory
+ $pwd
+but this directory name does not match the package name according to the
+regex $check_dirname_regex.
+
+To run $progname on this package, see the --check-dirname-level and
+--check-dirname-regex options; run $progname --help for more info.
+EOF
+ }
+ }
+} else {
+ # we're creating and we don't know much about our package
+ if ($opt_d) {
+ my $pwd = basename(cwd());
+ # The directory name should be <package>-<version>
+ my $version_chars = '0-9a-zA-Z+\.\-';
+ if ($pwd =~ m/^([a-z0-9][a-z0-9+\-\.]+)-([0-9][$version_chars]*)$/) {
+ $PACKAGE = $1;
+ $VERSION = "$2-1"; # introduce a Debian version of -1
+ } elsif ($pwd =~ m/^[a-z0-9][a-z0-9+\-\.]+$/) {
+ $PACKAGE = $pwd;
+ } else {
+ # don't know anything
+ }
+ }
+ if ($opt_v) {
+ $VERSION = $opt_v;
+ }
+ if ($opt_D) {
+ $DISTRIBUTION = $opt_D;
+ }
+}
+
+if ($opt_package) {
+ if ($opt_package =~ m/^[a-z0-9][a-z0-9+\-\.]+$/) {
+ $PACKAGE = $opt_package;
+ } else {
+ warn
+"$progname warning: illegal package name used with --package: $opt_package\n";
+ $warnings++;
+ }
+}
+
+# Clean up after old versions of debchange
+if (-f "debian/RELEASED") {
+ unlink("debian/RELEASED");
+}
+
+if (-e "$changelog_path.dch") {
+ fatal "The backup file $changelog_path.dch already exists --\n"
+ . "please move it before trying again";
+}
+
+# Is this a native Debian package, i.e., does it have a - in the
+# version number?
+(my $EPOCH) = ($VERSION =~ /^(\d+):/);
+(my $SVERSION = $VERSION) =~ s/^\d+://;
+(my $UVERSION = $SVERSION) =~ s/-[^-]*$//;
+
+# Check, sanitise and decode these environment variables
+check_env_utf8('DEBFULLNAME');
+check_env_utf8('NAME');
+check_env_utf8('DEBEMAIL');
+check_env_utf8('EMAIL');
+check_env_utf8('UBUMAIL');
+
+if (exists $env{'DEBEMAIL'} and $env{'DEBEMAIL'} =~ /^(.*)\s+<(.*)>$/) {
+ $env{'DEBFULLNAME'} = $1 unless exists $env{'DEBFULLNAME'};
+ $env{'DEBEMAIL'} = $2;
+}
+if (!exists $env{'DEBEMAIL'} or !exists $env{'DEBFULLNAME'}) {
+ if (exists $env{'EMAIL'} and $env{'EMAIL'} =~ /^(.*)\s+<(.*)>$/) {
+ $env{'DEBFULLNAME'} = $1 unless exists $env{'DEBFULLNAME'};
+ $env{'EMAIL'} = $2;
+ }
+}
+if (exists $env{'UBUMAIL'} and $env{'UBUMAIL'} =~ /^(.*)\s+<(.*)>$/) {
+ $env{'DEBFULLNAME'} = $1 unless exists $env{'DEBFULLNAME'};
+ $env{'UBUMAIL'} = $2;
+}
+
+# Now use the gleaned values to determine our MAINTAINER and EMAIL values
+if (!$opt_m and !$opt_M) {
+ if (exists $env{'DEBFULLNAME'}) {
+ $MAINTAINER = $env{'DEBFULLNAME'};
+ } elsif (exists $env{'NAME'}) {
+ $MAINTAINER = $env{'NAME'};
+ } else {
+ my @pw = getpwuid $<;
+ if ($pw[6]) {
+ if (my $pw = decode_utf8($pw[6])) {
+ $pw =~ s/,.*//;
+ $MAINTAINER = $pw;
+ } else {
+ warn
+"$progname warning: passwd full name field for uid $<\nis not UTF-8 encoded; ignoring\n";
+ $warnings++;
+ }
+ }
+ }
+ # Otherwise, $MAINTAINER retains its default value of the last
+ # changelog entry
+
+ # Email is easier
+ if ($vendor eq 'Ubuntu' and exists $env{'UBUMAIL'}) {
+ $EMAIL = $env{'UBUMAIL'};
+ } elsif (exists $env{'DEBEMAIL'}) {
+ $EMAIL = $env{'DEBEMAIL'};
+ } elsif (exists $env{'EMAIL'}) {
+ $EMAIL = $env{'EMAIL'};
+ } else {
+ warn
+"$progname warning: neither DEBEMAIL nor EMAIL environment variable is set\n";
+ $warnings++;
+ my $addr;
+ if (open MAILNAME, '/etc/mailname') {
+ warn
+"$progname warning: building email address from username and mailname\n";
+ $warnings++;
+ chomp($addr = <MAILNAME>);
+ close MAILNAME;
+ }
+ if (!$addr) {
+ warn
+"$progname warning: building email address from username and FQDN\n";
+ $warnings++;
+ chomp($addr = `hostname --fqdn 2>/dev/null`);
+ $addr = undef if $?;
+ }
+ if ($addr) {
+ my $user = getpwuid $<;
+ if (!$user) {
+ $addr = undef;
+ } else {
+ $addr = "$user\@$addr";
+ }
+ }
+ $EMAIL = $addr if $addr;
+ }
+ # Otherwise, $EMAIL retains its default value of the last changelog entry
+} # if (! $opt_m and ! $opt_M)
+
+if ($opt_M) {
+ if (-f 'debian/control') {
+ my $parser = Dpkg::Control->new(type => CTRL_INFO_SRC);
+ $parser->load('debian/control');
+ my $maintainer = decode_utf8($parser->{Maintainer});
+ if ($maintainer =~ /^(.*)\s+<(.*)>$/) {
+ $MAINTAINER = $1;
+ $EMAIL = $2;
+ } else {
+ fatal "$progname: invalid debian/control Maintainer field value\n";
+ }
+ } else {
+ fatal "Missing file debian/control";
+ }
+}
+
+#####
+
+if (
+ $opt_auto_nmu
+ and !$opt_v
+ and !$opt_l
+ and !$opt_s
+ and !$opt_lts
+ and !$opt_team
+ and !$opt_qa
+ and !$opt_R
+ and !$opt_bpo
+ and !$opt_bn
+ and !$opt_n
+ and !$opt_c
+ and !$opt_stable
+ and !(exists $ENV{'CHANGELOG'} and length $ENV{'CHANGELOG'})
+ and !$opt_M
+ and !$opt_create
+ and !$opt_a_passed
+ and !$opt_r
+ and !$opt_e
+ and $vendor ne 'Ubuntu'
+ and $vendor ne 'Tanglu'
+ and !(
+ $opt_release_heuristic eq 'changelog'
+ and $changelog->{Distribution} eq 'UNRELEASED'
+ and !$opt_i_passed
+ )
+) {
+
+ if (-f 'debian/control') {
+ my $parser = Dpkg::Control->new(type => CTRL_INFO_SRC);
+ $parser->load('debian/control');
+ my $uploader = decode_utf8($parser->{Uploaders}) || '';
+ $uploader =~ s/^\s+//;
+ my $maintainer = decode_utf8($parser->{Maintainer});
+ my @uploaders = split(/\s*,\s*/, $uploader);
+
+ my $packager = "$MAINTAINER <$EMAIL>";
+
+ if ( $maintainer !~ m/<packages\@qa\.debian\.org>/
+ and !grep { $_ eq $packager } ($maintainer, @uploaders)
+ and $packager ne $changelog->{Maintainer}
+ and !$opt_team) {
+ $opt_n = 1;
+ $opt_a = 0;
+ }
+ } else {
+ fatal "Missing file debian/control";
+ }
+}
+#####
+
+# Do we need to generate "closes" entries?
+
+my @closes_text = ();
+my $initial_release = 0;
+if (@closes and $opt_query) { # and we have to query the BTS
+ if (!Devscripts::Debbugs::have_soap) {
+ warn
+"$progname warning: libsoap-lite-perl not installed, so cannot query the bug-tracking system\n";
+ $opt_query = 0;
+ $warnings++;
+ # This will now go and execute the "if (@closes and ! $opt_query)" code
+ } else {
+ my $bugs = Devscripts::Debbugs::select("src:" . $PACKAGE);
+ my $statuses = Devscripts::Debbugs::status(
+ map { [bug => $_, indicatesource => 1] } @{$bugs});
+ if ($statuses eq "") {
+ warn "$progname: No bugs found for package $PACKAGE\n";
+ }
+ foreach my $close (@closes) {
+ if ($statuses and exists $statuses->{$close}) {
+ my $title = $statuses->{$close}->{subject};
+ my $pkg = $statuses->{$close}->{package};
+ $title =~ s/^($pkg|$PACKAGE): //;
+ push @closes_text,
+"Fix \"$title\" <explain what you changed and why> (Closes: \#$close)\n";
+ } else { # not our package, or wnpp
+ my $bug = Devscripts::Debbugs::status(
+ [bug => $close, indicatesource => 1]);
+ if ($bug eq "") {
+ warn
+"$progname warning: unknown bug \#$close does not belong to $PACKAGE,\n disabling closing changelog entry\n";
+ $warnings++;
+ push @closes_text,
+ "Closes?? \#$close: UNKNOWN BUG IN WRONG PACKAGE!!\n";
+ } else {
+ my $bugtitle = $bug->{$close}->{subject};
+ $bugtitle ||= '';
+ my $bugpkg = $bug->{$close}->{package};
+ $bugpkg ||= '?';
+ my $bugsrcpkg = $bug->{$close}->{source};
+ $bugsrcpkg ||= '?';
+ if ($bugsrcpkg eq $PACKAGE) {
+ warn
+"$progname warning: bug \#$close appears to be already archived,\n disabling closing changelog entry\n";
+ $warnings++;
+ push @closes_text,
+"Closes?? \#$close: ALREADY ARCHIVED? $bugtitle!!\n";
+ } elsif ($bugpkg eq 'wnpp') {
+ if ($bugtitle =~ /(^(O|RFA|ITA): )/) {
+ push @closes_text,
+"New maintainer. (Closes: \#$close: $bugtitle)\n";
+ } elsif ($bugtitle =~ /(^(RFP|ITP): )/) {
+ push @closes_text,
+"Initial release. (Closes: \#$close: $bugtitle)\n";
+ $initial_release = 1;
+ }
+ } else {
+ warn
+"$progname warning: bug \#$close belongs to package $bugpkg (src $bugsrcpkg),\n not to $PACKAGE: disabling closing changelog entry\n";
+ $warnings++;
+ push @closes_text,
+ "Closes?? \#$close: WRONG PACKAGE!! $bugtitle\n";
+ }
+ }
+ }
+ }
+ }
+}
+
+if (@closes and !$opt_query) { # and we don't have to query the BTS
+ foreach my $close (@closes) {
+ unless ($close =~ /^\d{3,}$/) {
+ warn "$progname warning: Bug number $close is invalid; ignoring\n";
+ $warnings++;
+ next;
+ }
+ push @closes_text, "Closes: \#$close: \n";
+ }
+}
+
+# Get a possible changelog entry from the command line
+my $ARGS = join(' ', @ARGV);
+my $TEXT = decode_utf8($ARGS);
+my $EMPTY_TEXT = 0;
+
+if (@ARGV and !$TEXT) {
+ if ($ARGS) {
+ warn
+"$progname warning: command-line changelog entry not UTF-8 encoded; ignoring\n";
+ $TEXT = '';
+ } else {
+ $EMPTY_TEXT = 1;
+ }
+}
+
+# Get the date
+my $DATE;
+{
+ local $ENV{TZ} = $opt_tz if $opt_tz;
+ $DATE = strftime "%a, %d %b %Y %T %z", localtime();
+}
+
+if ($opt_news && !$opt_i && !$opt_a) {
+ if ($VERSION eq $changelog->{Version} && !$opt_v && !$opt_l) {
+ $opt_a = 1;
+ } else {
+ $opt_i = 1;
+ }
+}
+
+# Are we going to have to figure things out for ourselves?
+if ( !$opt_i
+ && !$opt_v
+ && !$opt_d
+ && !$opt_a
+ && !$opt_e
+ && !$opt_r
+ && !$opt_n
+ && !$opt_bn
+ && !$opt_qa
+ && !$opt_R
+ && !$opt_s
+ && !$opt_lts
+ && !$opt_team
+ && !$opt_bpo
+ && !$opt_stable
+ && !$opt_l
+ && !$opt_create) {
+ # Yes, we are
+ if ($opt_release_heuristic eq 'log') {
+ my @UPFILES = glob("../$PACKAGE\_$SVERSION\_*.upload");
+ if (@UPFILES > 1) {
+ fatal "Found more than one appropriate .upload file!\n"
+ . "Please use an explicit -a, -i or -v option instead.";
+ } elsif (@UPFILES == 0) {
+ $opt_a = 1;
+ } else {
+ open UPFILE, "<${UPFILES[0]}"
+ or fatal "Couldn't open .upload file for reading: $!\n"
+ . "Please use an explicit -a, -i or -v option instead.";
+ while (<UPFILE>) {
+ if (
+m%^(s|Successfully uploaded) (/.*/)?\Q$PACKAGE\E\_\Q$SVERSION\E\_[\w\-\+]+\.changes %
+ ) {
+ $opt_i = 1;
+ last;
+ }
+ }
+ close UPFILE
+ or fatal "Problems experienced reading .upload file: $!\n"
+ . "Please use an explicit -a, -i or -v option instead.";
+ if (!$opt_i) {
+ warn
+"$progname warning: A successful upload of the current version was not logged\n"
+ . "in the upload log file; adding log entry to current version.\n";
+ $opt_a = 1;
+ }
+ }
+ } elsif ($opt_release_heuristic eq 'changelog') {
+ if ($changelog->{Distribution} eq 'UNRELEASED') {
+ $opt_a = 1;
+ } elsif ($EMPTY_TEXT == 1) {
+ $opt_a = 1;
+ } else {
+ $opt_i = 1;
+ }
+ } else {
+ fatal "Bad release heuristic value";
+ }
+}
+
+# Open in anticipation....
+unless ($opt_create) {
+ open S, $changelog_path
+ or fatal "Cannot open existing $changelog_path: $!";
+
+ # Read the first stanza from the changelog file
+ # We do this directly rather than reusing $changelog->{Changes}
+ # so that we have the verbatim changes rather than a (albeit very
+ # slightly) reformatted version. See Debian bug #452806
+
+ while (<S>) {
+ last if /^ --/;
+
+ $CHANGES .= $_;
+ }
+
+ chomp $CHANGES;
+
+ # Reset file pointer
+ seek(S, 0, 0);
+}
+open O, ">$changelog_path.dch"
+ or fatal "Cannot write to temporary file: $!";
+# Turn off form feeds; taken from perlform
+select((select(O), $^L = "")[0]);
+
+# Note that we now have to remove it
+my $tmpchk = 1;
+my ($NEW_VERSION, $NEW_SVERSION, $NEW_UVERSION);
+my $line;
+my $optionsok = 0;
+my $merge = 0;
+
+if ((
+ $opt_i
+ || $opt_n
+ || $opt_bn
+ || $opt_qa
+ || $opt_R
+ || $opt_s
+ || $opt_lts
+ || $opt_team
+ || $opt_bpo
+ || $opt_stable
+ || $opt_l
+ || $opt_v
+ || $opt_d
+ || ($opt_news && $VERSION ne $changelog->{Version}))
+ && !$opt_create
+) {
+
+ $optionsok = 1;
+
+ # Check that a given explicit version number is sensible.
+ if ($opt_v || $opt_d) {
+ if ($opt_v) {
+ $NEW_VERSION = $opt_v;
+ } else {
+ my $pwd = basename(cwd());
+ # The directory name should be <package>-<version>
+ my $version_chars = '0-9a-zA-Z+\.~';
+ $version_chars .= ':' if defined $EPOCH;
+ $version_chars .= '\-' if $UVERSION ne $SVERSION;
+ if ($pwd =~ m/^\Q$PACKAGE\E-([0-9][$version_chars]*)$/) {
+ $NEW_VERSION = $1;
+ if ($NEW_VERSION eq $UVERSION) {
+ # So it's a Debian-native package
+ if ($SVERSION eq $UVERSION) {
+ fatal
+"New version taken from directory ($NEW_VERSION) is equal to\n"
+ . "the current version number ($UVERSION)!";
+ }
+ # So we just increment the Debian revision
+ warn
+"$progname warning: Incrementing Debian revision without altering\nupstream version number.\n";
+ $VERSION =~ /^(.*?)([a-yA-Y][a-zA-Z]*|\d*)$/;
+ my $end = $2;
+ if ($end eq '') {
+ fatal
+"Cannot determine new Debian revision; please use -v option!";
+ }
+ $end++;
+ $NEW_VERSION = "$1$end";
+ } else {
+ $NEW_VERSION = "$EPOCH:$NEW_VERSION" if defined $EPOCH;
+ $NEW_VERSION .= "-1";
+ }
+ } else {
+ fatal
+"The directory name must be <package>-<version> for -d to work!\n"
+ . "No underscores allowed!";
+ }
+ # Don't try renaming the directory in this case!
+ $opt_p = 1;
+ }
+
+ if (version_compare($VERSION, $NEW_VERSION) == 1) {
+ if ($opt_b
+ or ($opt_allow_lower and $NEW_VERSION =~ /$opt_allow_lower/)) {
+ warn
+"$progname warning: new version ($NEW_VERSION) is less than\n"
+ . "the current version number ($VERSION).\n";
+ } else {
+ fatal "New version specified ($NEW_VERSION) is less than\n"
+ . "the current version number ($VERSION)! Use -b to force.";
+ }
+ }
+
+ ($NEW_SVERSION = $NEW_VERSION) =~ s/^\d+://;
+ ($NEW_UVERSION = $NEW_SVERSION) =~ s/-[^-]*$//;
+ }
+
+ # We use the following criteria for the version and release number:
+ # the last component of the version number is used as the
+ # release number. If this is not a Debian native package, then the
+ # upstream version number is everything up to the final '-', not
+ # including epochs.
+
+ if (!$NEW_VERSION) {
+ if ($VERSION =~ /(.*?)([a-yA-Y][a-zA-Z]*|\d+)([+~])?$/i) {
+ my $extra = $3 || '';
+ my $useextra = 0;
+ my $end = $2;
+ my $start = $1;
+ # If it's not already an NMU make it so
+ # otherwise we can be safe if we behave like dch -i
+
+ if (
+ ($opt_n or $opt_s)
+ and $vendor ne 'Ubuntu'
+ and $vendor ne 'Tanglu'
+ and ( ($VERSION eq $UVERSION and not $start =~ /\+nmu/)
+ or ($VERSION ne $UVERSION and not $start =~ /\.$/))
+ ) {
+
+ if ($VERSION eq $UVERSION) {
+ # First NMU of a Debian native package
+ $end .= "+nmu1";
+ } else {
+ $end += 0.1;
+ }
+ } elsif ($opt_bn and not $start =~ /\+b/) {
+ $end .= "+b1";
+ } elsif ($opt_qa and $start =~ /(.*?)-(\d+)\.$/) {
+ # Drop NMU revision when doing a QA upload
+ my $upstream_version = $1;
+ my $debian_revision = $2;
+ $debian_revision++;
+ $start = "$upstream_version-$debian_revision";
+ $end = "";
+ } elsif ($opt_R
+ and $vendor eq 'Ubuntu'
+ and not $start =~ /build/
+ and not $start =~ /ubuntu/) {
+ $end .= "build1";
+ } elsif ($opt_R
+ and $vendor eq 'Tanglu'
+ and not "$start$end" =~ /(b\d+)$/
+ and not $start =~ /tanglu/) {
+ $end .= "b1";
+ } elsif ($opt_bpo and not $start =~ /~bpo[0-9]+\+$/) {
+ # If it's not already a backport make it so
+ # otherwise we can be safe if we behave like dch -i
+ $end .= "~bpo$latest_dist+1";
+ } elsif ($opt_stable and not $start =~ /\+deb\d+u/) {
+ $end .= "+deb${latest_dist}u1";
+ } elsif ($opt_lts and not $start =~ /\+deb\d+u/) {
+ $end .= "+deb${lts_dist}u1";
+ $guessed_dist = $dists{$lts_dist} . '-security';
+ } elsif ($opt_l and not $start =~ /\Q$opt_l\E/) {
+ # If it's not already a local package make it so
+ # otherwise we can be safe if we behave like dch -i
+ $end .= $opt_l . "1";
+ } elsif (!$opt_news) {
+ # Don't bump the version of a NEWS file in this case as we're
+ # using the version from the changelog
+ if ( ($opt_i or $opt_s)
+ and $vendor eq 'Ubuntu'
+ and $start !~ /(ubuntu|~ppa)(\d+\.)*$/
+ and not $opt_U) {
+
+ if ($start =~ /build/) {
+ # Drop buildX suffix in favor of ubuntu1
+ $start =~ s/build//;
+ $end = "";
+ }
+ $end .= "ubuntu1";
+ } elsif (($opt_i or $opt_s)
+ and $vendor eq 'Tanglu'
+ and $start !~ /(tanglu)(\d+\.)*$/
+ and not $opt_U) {
+
+ if ("$start$end" =~ /(b\d+)$/) {
+ # Drop bX suffix in favor of tanglu1
+ $start =~ s/b$//;
+ $end = "";
+ }
+ $end .= "tanglu1";
+ } else {
+ $end++;
+ }
+
+ # Attempt to set the distribution for a stable upload correctly
+ # based on the version of the previous upload
+ if ($opt_stable || $opt_bpo || $opt_s || $opt_lts) {
+ my $previous_dist = $start;
+ $previous_dist =~ s/^.*[+~](?:deb|bpo)(\d+)(?:u\+)$/$1/;
+ if ( defined $previous_dist
+ and defined $dists{$previous_dist}) {
+ if ($opt_s || $opt_lts) {
+ $guessed_dist
+ = $dists{$previous_dist} . '-security';
+ } elsif ($opt_bpo) {
+ +$guessed_dist
+ = $dists{$previous_dist} . '-backports';
+ } elsif ($opt_stable) {
+ $guessed_dist = $dists{$previous_dist};
+ }
+ } elsif ($opt_s) {
+ $guessed_dist = $dists{$latest_dist} . '-security';
+ } elsif ($opt_lts) {
+ $guessed_dist = $dists{$lts_dist} . '-security';
+ } else {
+ # Fallback to using the previous distribution
+ $guessed_dist = $changelog->{Distribution};
+ }
+ }
+
+ if (
+ !(
+ $opt_s
+ or $opt_n
+ or $vendor eq 'Ubuntu'
+ or $vendor eq 'Tanglu'
+ )
+ ) {
+ if ($start =~ /(.*?)-(\d+)\.$/) {
+ # Drop NMU revision
+ my $upstream_version = $1;
+ my $debian_revision = $2;
+ $debian_revision++;
+ $start = "$upstream_version-$debian_revision";
+ $end = "";
+ }
+ }
+
+ if (!($opt_qa or $opt_bpo or $opt_stable or $opt_l)) {
+ $useextra = 1;
+ }
+ }
+ $NEW_VERSION = "$start$end";
+ if ($useextra) {
+ $NEW_VERSION .= $extra;
+ }
+ ($NEW_SVERSION = $NEW_VERSION) =~ s/^\d+://;
+ ($NEW_UVERSION = $NEW_SVERSION) =~ s/-[^-]*$//;
+ } else {
+ fatal "Error parsing version number: $VERSION";
+ }
+ }
+
+ if ($NEW_VERSION eq $NEW_UVERSION and $VERSION ne $UVERSION) {
+ warn
+"$progname warning: New package version is Debian native whilst previous version was not\n";
+ } elsif ($NEW_VERSION ne $NEW_UVERSION and $VERSION eq $UVERSION) {
+ warn
+"$progname warning: Previous package version was Debian native whilst new version is not\n"
+ unless $opt_n or $opt_s;
+ }
+
+ if ($opt_bpo) {
+ $guessed_dist ||= $dists{$latest_dist} . '-backports';
+ }
+ if ($opt_stable) {
+ $guessed_dist ||= $dists{$latest_dist};
+ }
+ my $distribution
+ = $opt_D
+ || $guessed_dist
+ || (
+ ($opt_release_heuristic eq 'changelog')
+ ? "UNRELEASED"
+ : $DISTRIBUTION
+ );
+
+ my $urgency = $opt_u;
+ if ($opt_news) {
+ $urgency ||= $CL_URGENCY;
+ }
+ $urgency ||= 'medium';
+
+ if ( ($opt_v or $opt_i or $opt_l or $opt_d)
+ and $opt_release_heuristic eq 'changelog'
+ and $changelog->{Distribution} eq 'UNRELEASED') {
+
+ $merge = 1;
+ } else {
+ print O "$PACKAGE ($NEW_VERSION) $distribution; urgency=$urgency";
+ print O ", binary-only=yes" if ($opt_bn);
+ print O "\n\n";
+ if ($opt_n && !$opt_news) {
+ print O " * Non-maintainer upload.\n";
+ $line = 1;
+ } elsif ($opt_bn && !$opt_news) {
+ my $arch = qx/dpkg-architecture -qDEB_BUILD_ARCH/;
+ chomp($arch);
+ print O
+" * Binary-only non-maintainer upload for $arch; no source changes.\n";
+ $line = 1;
+ } elsif ($opt_qa && !$opt_news) {
+ print O " * QA upload.\n";
+ $line = 1;
+ } elsif ($opt_s && !$opt_news) {
+ if ($vendor eq 'Ubuntu' or $vendor eq 'Tanglu') {
+ print O " * SECURITY UPDATE:\n";
+ print O " * References\n";
+ } else {
+ print O " * Non-maintainer upload by the Security Team.\n";
+ }
+ $line = 1;
+ } elsif ($opt_lts && !$opt_news) {
+ print O " * Non-maintainer upload by the LTS Security Team.\n";
+ $line = 1;
+ } elsif ($opt_team && !$opt_news) {
+ print O " * Team upload.\n";
+ $line = 1;
+ } elsif ($opt_bpo && !$opt_news) {
+ print O " * Rebuild for $guessed_dist.\n";
+ $line = 1;
+ }
+ if (@closes_text or $TEXT or $EMPTY_TEXT) {
+ foreach (@closes_text) { format_line($_, 1); }
+ if (length $TEXT) { format_line($TEXT, 1); }
+ } elsif ($opt_news) {
+ print O " \n";
+ } else {
+ print O " * \n";
+ }
+ $line += 3;
+ print O "\n -- $MAINTAINER <$EMAIL> $DATE\n\n";
+
+ # Copy the old changelog file to the new one
+ local $/ = undef;
+ print O <S>;
+ }
+}
+if (($opt_r || $opt_a || $merge) && !$opt_create) {
+ # This means we just have to generate a new * entry in changelog
+ # and if a multi-developer changelog is detected, add developer names.
+
+ $NEW_VERSION = $VERSION unless $NEW_VERSION;
+ $NEW_SVERSION = $SVERSION unless $NEW_SVERSION;
+ $NEW_UVERSION = $UVERSION unless $NEW_UVERSION;
+
+ # Read and discard maintainer line, see who made the
+ # last entry, and determine whether there are existing
+ # multi-developer changes by the current maintainer.
+ $line = -1;
+ my ($lastmaint, $nextmaint, $maintline, $count, $lastheader, $lastdist,
+ $dist_indicator);
+ my $savedline = $line;
+ while (<S>) {
+ $line++;
+ # Start of existing changes by the current maintainer
+ if (/^ \[ \Q$MAINTAINER\E \]$/ && $opt_multimaint_merge) {
+ # If there's more than one such block,
+ # we only care about the first
+ $maintline ||= $line;
+ } elsif (/^ \[ (.*) \]$/ && defined $maintline) {
+ # Start of existing changes following those by the current
+ # maintainer
+ $nextmaint ||= $1;
+ } elsif (
+m/^\w[-+0-9a-z.]* \(([^\(\) \t]+)\)((?:\s+[-+0-9a-z.]+)+)\;\s+urgency=(\w+)/i
+ ) {
+ if (defined $lastmaint) {
+ $lastheader = $_;
+ $lastdist = $2;
+ $lastdist =~ s/^\s+//;
+ undef $lastdist if $lastdist eq "UNRELEASED";
+ # Revert to our previously saved position
+ $line = $savedline;
+ last;
+ } else {
+ my $tmpver = $1;
+ $tmpver =~ s/^\s+//;
+ if ($tmpver =~ m/~bpo(\d+)\+/ && exists $dists{$1}) {
+ $dist_indicator = "$dists{$1}-backports";
+ }
+ if ($tmpver =~ m/\+deb(\d+)u/ && exists $dists{$1}) {
+ $dist_indicator = "$dists{$1}";
+ }
+ }
+ } elsif (/ \* (?:Upload to|Rebuild for) (\S+).*$/) {
+ ($dist_indicator = $1) =~ s/[!:.,;]$//;
+ chomp $dist_indicator;
+ } elsif (/^ --\s+([^<]+)\s+/ || /^ --\s+<(.+?)>/) {
+ $lastmaint = $1;
+ # Remember where we are so we can skip back afterwards
+ $savedline = $line;
+ }
+
+ if (defined $maintline && !defined $nextmaint) {
+ $maintline++;
+ }
+ }
+
+ # Munging of changelog for multimaintainer mode.
+ my $multimaint = 0;
+ if (!$opt_news) {
+ my $lastmultimaint;
+
+ # Parse the changelog for multi-maintainer maintainer lines of
+ # the form [ Full Name ] and record the last of these.
+ while ($CHANGES =~ /.*\n^\s+\[\s+([^\]]+)\s+]\s*$/mg) {
+ $lastmultimaint = $1;
+ }
+
+ if ((
+ !defined $lastmultimaint
+ && defined $lastmaint
+ && $lastmaint ne $MAINTAINER
+ && $opt_multimaint
+ )
+ || (defined $lastmultimaint && $lastmultimaint ne $MAINTAINER)
+ || (defined $nextmaint)
+ ) {
+ $multimaint = 1;
+
+ if (!$lastmultimaint) {
+ # Add a multi-maintainer header to the top of the existing
+ # changelog.
+ my $newchanges = '';
+ $CHANGES =~ s/^( .+)$/ [ $lastmaint ]\n$1/m;
+ }
+ }
+ }
+
+ # based on /usr/lib/dpkg/parsechangelog/debian
+ if ($CHANGES
+ =~ m/^\w[-+0-9a-z.]* \([^\(\) \t]+\)((?:\s+[-+0-9a-z.]+)+)\;\s+urgency=(\w+)/i
+ ) {
+ my $distribution = $1;
+ my $urgency = $2;
+ if ($opt_news) {
+ $urgency = $CL_URGENCY;
+ }
+ $distribution =~ s/^\s+//;
+ if ($opt_r) {
+ # Change the distribution from UNRELEASED for release
+ if ($distribution eq "UNRELEASED") {
+ if ($dist_indicator and not $opt_D) {
+ $distribution = $dist_indicator;
+ } elsif ($vendor eq 'Ubuntu') {
+ if ($opt_D) {
+ $distribution = $opt_D;
+ } else {
+ $distribution = get_ubuntu_devel_distro();
+ }
+ } else {
+ $distribution = $opt_D || $lastdist || "unstable";
+ }
+ } elsif ($opt_D) {
+ warn
+"$progname warning: ignoring distribution passed to --release as changelog has already been released\n";
+ }
+ # Set the start-line to 1, as we don't know what they want to edit
+ $line = 1;
+ } else {
+ $distribution = $opt_D if $opt_D;
+ }
+ $urgency = $opt_u if $opt_u;
+ $CHANGES
+ =~ s/^(\w[-+0-9a-z.]* \([^\(\) \t]+\))(?:\s+[-+0-9a-z.]+)+\;\s+urgency=\w+/$PACKAGE ($NEW_VERSION) $distribution; urgency=$urgency/i;
+ } else {
+ warn
+ "$progname: couldn't parse first changelog line, not touching it\n";
+ $warnings++;
+ }
+
+ if (defined $maintline && defined $nextmaint) {
+ # Output the lines up to the end of the current maintainer block
+ $count = 1;
+ $line = $maintline;
+ foreach (split /\n/, $CHANGES) {
+ print O $_ . "\n";
+ $count++;
+ last if $count == $maintline;
+ }
+ } else {
+ # The first lines are as we have already found
+ print O $CHANGES;
+ }
+
+ if (!$opt_r) {
+ # Add a multi-maintainer header...
+ if ($multimaint
+ and (@closes_text or $TEXT or $opt_news or !$EMPTY_TEXT)) {
+ # ...unless there already is one for this maintainer.
+ if (!defined $maintline) {
+ print O "\n [ $MAINTAINER ]\n";
+ $line += 2;
+ }
+ }
+
+ if (@closes_text or $TEXT) {
+ foreach (@closes_text) { format_line($_, 0); }
+ if (length $TEXT) { format_line($TEXT, 0); }
+ } elsif ($opt_news) {
+ print O "\n \n";
+ $line++;
+ } elsif (!$EMPTY_TEXT) {
+ print O " * \n";
+ }
+ }
+
+ if (defined $count) {
+ # Output the remainder of the changes
+ $count = 1;
+ foreach (split /\n/, $CHANGES) {
+ $count++;
+ next unless $count > $maintline;
+ print O $_ . "\n";
+ }
+ }
+
+ if ($opt_t && $opt_a) {
+ print O "\n -- $changelog->{Maintainer} $changelog->{Date}\n";
+ } else {
+ print O "\n -- $MAINTAINER <$EMAIL> $DATE\n";
+ }
+
+ if ($lastheader) {
+ print O "\n$lastheader";
+ }
+
+ # Copy the rest of the changelog file to new one
+ # Slurp the rest....
+ local $/ = undef;
+ print O <S>;
+} elsif ($opt_e && !$opt_create) {
+ # We don't do any fancy stuff with respect to versions or adding
+ # entries, we just update the timestamp and open the editor
+
+ print O $CHANGES;
+
+ if ($opt_t) {
+ print O "\n -- $changelog->{Maintainer} $changelog->{Date}\n";
+ } else {
+ print O "\n -- $MAINTAINER <$EMAIL> $DATE\n";
+ }
+
+ # Copy the rest of the changelog file to the new one
+ $line = -1;
+ while (<S>) { $line++; last if /^ --/; }
+ # Slurp the rest...
+ local $/ = undef;
+ print O <S>;
+
+ # Set the start-line to 0, as we don't know what they want to edit
+ $line = 0;
+} elsif ($opt_create) {
+ if ( !$initial_release
+ and !$opt_news
+ and !$opt_empty
+ and !$TEXT
+ and !$EMPTY_TEXT) {
+ push @closes_text, "Initial release. (Closes: \#XXXXXX)\n";
+ }
+
+ my $urgency = $opt_u;
+ if ($opt_news) {
+ $urgency ||= $CL_URGENCY;
+ }
+ $urgency ||= 'medium';
+ print O "$PACKAGE ($VERSION) $DISTRIBUTION; urgency=$urgency\n\n";
+
+ if (@closes_text or $TEXT) {
+ foreach (@closes_text) { format_line($_, 1); }
+ if (length $TEXT) { format_line($TEXT, 1); }
+ } elsif ($opt_news) {
+ print O " \n";
+ } elsif ($opt_empty) {
+ # Do nothing, but skip the empty entry
+ } else { # this can't happen, but anyway...
+ print O " * \n";
+ }
+
+ print O "\n -- $MAINTAINER <$EMAIL> $DATE\n";
+
+ $line = 1;
+} elsif (!$optionsok) {
+ fatal "Unknown changelog processing command line options - help!";
+}
+
+if (!$opt_create) {
+ close S or fatal "Error closing $changelog_path: $!";
+}
+close O or fatal "Error closing temporary $changelog_path: $!";
+
+if ($warnings) {
+ if ($warnings > 1) {
+ warn
+"$progname: Did you see those $warnings warnings? Press RETURN to continue...\n";
+ } else {
+ warn
+"$progname: Did you see that warning? Press RETURN to continue...\n";
+ }
+ my $garbage = <STDIN>;
+}
+
+# Now Run the Editor; always run if doing "closes" to give a chance to check
+if ( (!$TEXT and !$EMPTY_TEXT and !($opt_create and $opt_empty))
+ or @closes_text
+ or ($opt_create and !($PACKAGE ne 'PACKAGE' and $VERSION ne 'VERSION'))) {
+
+ my $mtime = (stat("$changelog_path.dch"))[9];
+ defined $mtime
+ or fatal
+ "Error getting modification time of temporary $changelog_path: $!";
+ $mtime--;
+ utime $mtime, $mtime, "$changelog_path.dch";
+
+ system("sensible-editor +$line $changelog_path.dch") == 0
+ or fatal "Error editing $changelog_path";
+
+ my $newmtime = (stat("$changelog_path.dch"))[9];
+ defined $newmtime
+ or fatal
+ "Error getting modification time of temporary $changelog_path: $!";
+ if ( $mtime == $newmtime
+ && !$opt_create
+ && (!$opt_r || ($opt_r && $opt_force_save_on_release))) {
+
+ warn "$progname: $changelog_path unmodified; exiting.\n";
+ exit 0;
+ }
+}
+
+copy("$changelog_path.dch", "$changelog_path")
+ or fatal "Couldn't replace $changelog_path with new version: $!";
+
+# Now find out what the new package version number is if we need to
+# rename the directory
+
+if ( (basename(cwd()) =~ m%^\Q$PACKAGE\E-\Q$UVERSION\E$%)
+ && !$opt_p
+ && !$opt_create) {
+ # Find the current version number etc.
+ my $v;
+ my $changelog = changelog_parse();
+ if (exists $changelog->{Version}) {
+ $v = Dpkg::Version->new($changelog->{Version});
+ }
+
+ fatal "No version number in debian/changelog!"
+ unless defined($v)
+ and $v->is_valid();
+
+ my ($new_version, $new_uversion);
+ $new_version = $v->as_string(omit_epoch => 1);
+ $new_uversion = $v->as_string(omit_epoch => 1, omit_revision => 1);
+
+ if ($new_uversion ne $UVERSION) {
+ # Then we rename the directory
+ if (move(cwd(), "../$PACKAGE-$new_uversion")) {
+ warn
+"$progname warning: your current directory has been renamed to:\n../$PACKAGE-$new_uversion\n";
+ } else {
+ warn "$progname warning: Couldn't rename directory: $!\n";
+ }
+ if (!$v->is_native()) {
+ # And check whether a new orig tarball exists
+ my @origs = glob("../$PACKAGE\_$new_uversion.*");
+ my $num_origs = grep {
+/^..\/\Q$PACKAGE\E_\Q$new_uversion\E\.orig\.tar\.$compression_re$/
+ } @origs;
+ if ($num_origs == 0) {
+ warn
+"$progname warning: no orig tarball found for the new version.\n";
+ }
+ }
+ }
+}
+
+exit 0;
+
+{
+ no warnings 'uninitialized';
+ # Format for standard Debian changelogs
+ format CHANGELOG =
+ * ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ $CHGLINE
+ ~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ $CHGLINE
+.
+ # Format for NEWS files.
+ format NEWS =
+ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ $CHGLINE
+~~^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ $CHGLINE
+.
+}
+
+my $linecount = 0;
+
+sub format_line {
+ $CHGLINE = shift;
+ my $newentry = shift;
+
+ # Work around the fact that write() with formats
+ # seems to assume that characters are single-byte
+ # See https://rt.perl.org/Public/Bug/Display.html?id=33832
+ # and Debian bugs #473769 and #541484
+ # This relies on $CHGLINE being a sequence of unicode characters. We can
+ # compare how many unicode characters we have to how many bytes we have
+ # when encoding to utf8 and therefore how many spaces we need to pad.
+ my $count = length(encode_utf8($CHGLINE)) - length($CHGLINE);
+ $CHGLINE .= " " x $count;
+
+ print O "\n" if $opt_news && !($newentry || $linecount);
+ $linecount++;
+ my $f = select(O);
+ if ($opt_news) {
+ $~ = 'NEWS';
+ } else {
+ $~ = 'CHANGELOG';
+ }
+ write O;
+ select $f;
+}
+
+BEGIN {
+ # Initialise the variable
+ $tmpchk = 0;
+}
+
+END {
+ if ($tmpchk) {
+ unlink "$changelog_path.dch"
+ or warn "$progname warning: Could not remove $changelog_path.dch\n";
+ unlink "$changelog_path.dch~"; # emacs backup file
+ }
+}
+
+sub fatal($) {
+ my ($pack, $file, $line);
+ ($pack, $file, $line) = caller();
+ (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d;
+ $msg =~ s/\n\n$/\n/;
+ die $msg;
+}
+
+# Is the environment variable valid or not?
+sub check_env_utf8 {
+ my $envvar = $_[0];
+
+ if (exists $ENV{$envvar} and $ENV{$envvar} ne '') {
+ if (!decode_utf8($ENV{$envvar})) {
+ warn
+"$progname warning: environment variable $envvar not UTF-8 encoded; ignoring\n";
+ } else {
+ $env{$envvar} = decode_utf8($ENV{$envvar});
+ }
+ }
+}
diff --git a/scripts/debcheckout.pl b/scripts/debcheckout.pl
new file mode 100755
index 0000000..33520e7
--- /dev/null
+++ b/scripts/debcheckout.pl
@@ -0,0 +1,1260 @@
+#!/usr/bin/perl
+#
+# debcheckout: checkout the development repository of a Debian package
+# Copyright (C) 2007-2009 Stefano Zacchiroli <zack@debian.org>
+# Copyright (C) 2010 Christoph Berg <myon@debian.org>
+#
+# 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 <https://www.gnu.org/licenses/>.
+#
+
+# Created: Tue, 14 Aug 2007 10:20:55 +0200
+# Last-Modified: $Date$
+
+=head1 NAME
+
+debcheckout - checkout the development repository of a Debian package
+
+=head1 SYNOPSIS
+
+=over
+
+=item B<debcheckout> [I<OPTIONS>] I<PACKAGE> [I<DESTDIR>]
+
+=item B<debcheckout> [I<OPTIONS>] I<REPOSITORY_URL> [I<DESTDIR>]
+
+=item B<debcheckout> B<--help>
+
+=back
+
+=head1 DESCRIPTION
+
+B<debcheckout> retrieves the information about the Version Control System used
+to maintain a given Debian package (the I<PACKAGE> argument), and then checks
+out the latest (potentially unreleased) version of the package from its
+repository. By default the repository is checked out to the I<PACKAGE>
+directory; this can be overridden by providing the I<DESTDIR> argument.
+
+The information about where the repository is available is expected to be found
+in B<Vcs-*> fields available in the source package record. For example, the B<vim>
+package exposes such information with a field like S<B<Vcs-Hg:
+http://hg.debian.org/hg/pkg-vim/vim>>, you can see it by grepping through
+B<apt-cache showsrc vim>.
+
+If more than one source package record containing B<Vcs-*> fields is available,
+B<debcheckout> will select the record with the highest version number.
+Alternatively, a particular version may be selected from those available by
+specifying the package name as I<PACKAGE>=I<VERSION>.
+
+If you already know the URL of a given repository you can invoke
+B<debcheckout> directly on it, but you will probably need to pass the
+appropriate B<-t> flag. That is, some heuristics are in use to guess
+the repository type from the URL; if they fail, you might want to
+override the guessed type using B<-t>.
+
+The currently supported version control systems are: Arch (arch), Bazaar (bzr), CVS (cvs),
+Darcs (darcs), Git (git), Mercurial (hg) and Subversion (svn).
+
+=head1 OPTIONS
+
+B<GENERAL OPTIONS>
+
+=over
+
+=item B<-a>, B<--auth>
+
+Work in authenticated mode; this means that for known repositories (mainly those
+hosted on S<I<https://salsa.debian.org>>) URL rewriting is attempted before
+checking out, to ensure that the repository can be committed to. For example,
+for Git repositories hosted on Salsa this means that
+S<I<git@salsa.debian.org:...git>> will be used instead of
+S<I<https://salsa.debian.org/...git>>.
+
+There are built-in rules for salsa.debian.org and github.com. Other hosts
+can be configured using B<DEBCHECKOUT_AUTH_URLS>.
+
+=item B<-d>, B<--details>
+
+Only print a list of detailed information about the package
+repository, without checking it out; the output format is a list of
+fields, each field being a pair of TAB-separated field name and field
+value. The actual fields depend on the repository type. This action
+might require a network connection to the remote repository.
+
+Also see B<-p>. This option and B<-p> are mutually exclusive.
+
+=item B<-h>, B<--help>
+
+Print a detailed help message and exit.
+
+=item B<-p>, B<--print>
+
+Only print a summary about package repository information, without
+checking it out; the output format is TAB-separated with two fields:
+repository type, repository URL. This action works offline, it only
+uses "static" information as known by APT's cache.
+
+Also see B<-d>. This option and B<-d> are mutually exclusive.
+
+=item B<-P> I<package>, B<--package> I<package>
+
+When checking out a repository URL, instead of trying to guess the package name
+from the URL, use this package name.
+
+=item B<-t> I<TYPE>, B<--type> I<TYPE>
+
+Override the repository type (which defaults to some heuristics based
+on the URL or, in case of heuristic failure, the fallback "git");
+should be one of the currently supported repository types.
+
+=item B<-u> I<USERNAME>, B<--user> I<USERNAME>
+
+Specify the login name to be used in authenticated mode (see B<-a>). This option
+implies B<-a>: you don't need to specify both.
+
+=item B<-f> I<FILE>, B<--file> I<FILE>
+
+Specify that the named file should be extracted from the repository and placed
+in the destination directory. May be used more than once to extract multiple
+files.
+
+=item B<--source=never>|B<auto>|B<download-only>|B<always>
+
+Some packages only place the F<debian> directory in version control.
+B<debcheckout> can retrieve the remaining parts of the source using B<apt-get
+source> and move the files into the checkout.
+
+=over
+
+=item B<never>
+
+Only use the repository.
+
+=item B<auto> (default)
+
+If the repository only contains the F<debian> directory, retrieve the source
+package, unpack it, and also place the F<.orig.tar.gz> file into the current
+directory. Else, do nothing.
+
+=item B<download-only>
+
+Always retrieve the I<.orig.tar.gz> file, but do not unpack it.
+
+=item B<always>
+
+Always retrieve the I<.orig.tar.gz> file, and if the repository only contains the
+F<debian> directory, unpack it.
+
+=back
+
+=back
+
+B<VCS-SPECIFIC OPTIONS>
+
+I<GIT-SPECIFIC OPTIONS>
+
+=over
+
+=item B<--git-track> I<BRANCHES>
+
+Specify a list of remote branches which will be set up for tracking
+(as in S<B<git branch --track>>, see B<git-branch>(1)) after the remote
+Git repository has been cloned. The list should be given as a
+space-separated list of branch names.
+
+As a shorthand, the string "B<*>" can be given to require tracking of all
+remote branches.
+
+=back
+
+=head1 CONFIGURATION VARIABLES
+
+The two configuration files F</etc/devscripts.conf> and
+F<~/.devscripts> are sourced by a shell in that order to set
+configuration variables. Command line options can be used to override
+configuration file settings. Environment variable settings are ignored
+for this purpose. The currently recognised variables are:
+
+=over
+
+=item B<DEBCHECKOUT_AUTH_URLS>
+
+This variable should be a space separated list of Perl regular
+expressions and replacement texts, which must come in pairs: I<REGEXP>
+I<TEXT> I<REGEXP> I<TEXT> ... and so on. Each pair denotes a substitution which
+is applied to repository URLs if other built-in means of building URLs
+for authenticated mode (see B<-a>) have failed.
+
+References to matching substrings in the replacement texts are
+allowed as usual in Perl by the means of B<$1>, B<$2>, ... and so on.
+
+This setting is used to configure the "authenticated mode" location for
+repositories. The Debian repositories on S<salsa.debian.org> are implicitly
+defined, as is S<github.com>.
+
+Here is a sample snippet suitable for the configuration files:
+
+ DEBCHECKOUT_AUTH_URLS='
+ ^\w+://(svn\.example\.com)/(.*) svn+ssh://$1/srv/svn/$2
+ ^\w+://(git\.example\.com)/(.*) git+ssh://$1/home/git/$2
+ '
+
+Note that whitespace is not allowed in either regexps or
+replacement texts. Also, given that configuration files are sourced by
+a shell, you probably want to use single quotes around the value of
+this variable.
+
+=item B<DEBCHECKOUT_SOURCE>
+
+This variable determines under what scenarios the associated orig.tar.gz for a
+package will be downloaded. See the B<--source> option for a description of
+the values.
+
+=item B<DEBCHECKOUT_USER>
+
+This variable sets the username for authenticated mode. It can be overridden
+with the B<--user> option. Setting this variable does not imply the use of
+authenticated mode, it still has to be activated with B<--auth>.
+
+=back
+
+=head1 SEE ALSO
+
+B<apt-cache>(8), Section 6.2.5 of the Debian Developer's Reference (for
+more information about B<Vcs-*> fields): S<I<https://www.debian.org/doc/developers-reference/best-pkging-practices.html#bpp-vcs>>.
+
+=head1 AUTHOR
+
+B<debcheckout> and this manpage have been written by Stefano Zacchiroli
+<I<zack@debian.org>>.
+
+=cut
+
+use strict;
+use warnings;
+no if $] >= 5.018, 'warnings', 'experimental::smartmatch';
+use feature 'switch';
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use Pod::Usage;
+use File::Basename;
+use File::Copy qw/copy/;
+use File::Temp qw/tempdir/;
+use Cwd;
+use Devscripts::Compression;
+use Devscripts::Versort;
+
+my @files = (); # files to checkout
+
+my $compression_re = compression_get_file_extension_regex();
+
+# <snippet from="bts.pl">
+# <!-- TODO we really need to factor out in a Perl module the
+# configuration file parsing code -->
+my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+my %config_vars = (
+ 'DEBCHECKOUT_AUTH_URLS' => '',
+ 'DEBCHECKOUT_SOURCE' => 'auto',
+ 'DEBCHECKOUT_USER' => '',
+);
+my %config_default = %config_vars;
+my $shell_cmd;
+# Set defaults
+foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+}
+$shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+$shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+# Read back values
+foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+my $shell_out = `/bin/bash -c '$shell_cmd'`;
+@config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+# </snippet>
+
+my $lwp_broken;
+my $ua;
+
+sub have_lwp() {
+ return ($lwp_broken ? 0 : 1) if defined $lwp_broken;
+ eval {
+ require LWP;
+ require LWP::UserAgent;
+ };
+
+ if ($@) {
+ if ($@ =~ m%^Can\'t locate LWP%) {
+ $lwp_broken = "the libwww-perl package is not installed";
+ } else {
+ $lwp_broken = "couldn't load LWP::UserAgent: $@";
+ }
+ } else {
+ $lwp_broken = '';
+ }
+ return $lwp_broken ? 0 : 1;
+}
+
+sub init_agent {
+ $ua = new LWP::UserAgent; # we create a global UserAgent object
+ $ua->agent("LWP::UserAgent/Devscripts");
+ $ua->env_proxy;
+}
+
+sub recurs_mkdir {
+ my ($dir) = @_;
+ my @temp = split /\//, $dir;
+ my $createdir = "";
+ foreach my $piece (@temp) {
+ if (!length $createdir and !length $piece) {
+ $createdir = "/";
+ } elsif (length $createdir and $createdir ne "/") {
+ $createdir .= "/";
+ }
+ $createdir .= "$piece";
+ if (!-d $createdir) {
+ mkdir($createdir) or return 0;
+ }
+ }
+ return 1;
+}
+
+# Find the repository URL (and type) for a given package name, parsing Vcs-*
+# fields. Returns (version, type, url, origtgz_name) tuple.
+sub find_repo($$) {
+ my ($pkg, $desired_ver) = @_;
+ my @repo = ("", 0, "", "");
+ my $found = 0;
+ my ($nonepoch_version, $version) = ("", "");
+ my $origtgz_name = "";
+ my $type = "";
+ my $url = "";
+ my @repos = ();
+
+ open(APT, "apt-cache showsrc $pkg |");
+ while (my $line = <APT>) {
+ $found = 1;
+ chomp($line);
+ if ($line =~ /^(x-)?vcs-(\w+):\s*(.*)$/i) {
+ next if lc($2) eq "browser";
+ ($type, $url) = (lc($2), $3);
+ } elsif ($line =~ /^Version:\s*(.*)$/i) {
+ $version = $1;
+ ($nonepoch_version = $version) =~ s/^\d+://;
+ } elsif ($line
+ =~ /^ [a-f0-9]{32} \d+ (\S+)(?:_\Q$nonepoch_version\E|\.orig)\.tar\.$compression_re$/
+ ) {
+ $origtgz_name = $1;
+ } elsif ($line =~ /^$/) {
+ push(@repos, [$version, $type, $url, $origtgz_name])
+ if ( $version
+ and $type
+ and $url
+ and ($desired_ver eq "" or $desired_ver eq $version));
+ $version = "";
+ $type = "";
+ $url = "";
+ $origtgz_name = "";
+ }
+ }
+ close(APT);
+ die "unknown package '$pkg'\n" unless $found;
+
+ if (@repos) {
+ @repos = Devscripts::Versort::versort(@repos);
+ @repo = @{ $repos[0] };
+ }
+ return @repo;
+}
+
+# Find the browse URL for a given package name, parsing Vcs-* fields.
+sub find_browse($$) {
+ my ($pkg, $desired_ver) = @_;
+ my $browse = "";
+ my $found = 0;
+ my $version = "";
+ my @browses;
+
+ open(APT, "apt-cache showsrc $pkg |");
+ while (my $line = <APT>) {
+ $found = 1;
+ chomp($line);
+ if ($line =~ /^(x-)?vcs-(\w+):\s*(.*)$/i) {
+ if (lc($2) eq "browser") {
+ $browse = $3;
+ }
+ } elsif ($line =~ /^Version:\s*(.*)$/i) {
+ $version = $1;
+ } elsif ($line =~ /^$/) {
+ push(@browses, [$version, $browse])
+ if $version
+ and $browse
+ and ($desired_ver eq "" or $desired_ver eq $version);
+ $version = "";
+ $browse = "";
+ }
+ }
+ close(APT);
+ die "unknown package '$pkg'\n" unless $found;
+ if (@browses) {
+ @browses = Devscripts::Versort::versort(@browses);
+ $browse = $browses[0][1];
+ }
+ return $browse;
+}
+
+# Patch the cmdline invocation of a VCS to ensure the repository is checkout to
+# a given target directory.
+sub set_destdir($$@) {
+ my ($repo_type, $destdir, @cmd) = @_;
+ $destdir =~ s|^-d\s*||;
+
+ given ($repo_type) {
+ when ("cvs") {
+ my $module = pop @cmd;
+ push @cmd, ("-d", $destdir, $module);
+ }
+ when (/^(bzr|darcs|git|hg|svn)$/) {
+ push @cmd, $destdir;
+ }
+ default {
+ die
+"sorry, don't know how to set the destination directory for $repo_type repositories (patches welcome!)\n";
+ }
+ }
+ return @cmd;
+}
+
+# try patching a repository URL to enable authenticated mode, *relying
+# only on user defined rules*
+sub user_set_auth($$) {
+ my ($repo_type, $url) = @_;
+ my @rules = split ' ', $config_vars{'DEBCHECKOUT_AUTH_URLS'};
+ while (my $pat = shift @rules) { # read pairs for s/$pat/$subst/
+ my $subst = shift @rules
+ or die
+"Configuration error for DEBCHECKOUT_AUTH_URLS: regexp and replacement texts must come in pairs. See debcheckout(1).\n";
+ $url =~ s/$pat/qq("$subst")/ee; # ZACK: my worst Perl line ever
+ }
+ return $url;
+}
+
+# Patch a given repository URL to ensure that the checked out out repository
+# can be committed to. Only works for well known repositories (mainly Salsa's).
+sub set_auth($$$$) {
+ my ($repo_type, $url, $user, $dont_act) = @_;
+
+ my $old_url = $url;
+
+ $user .= "@" if length $user;
+ my $user_local = $user;
+ $user_local =~ s|(.*)(@)|$1|;
+ my $user_url = $url;
+
+ # other providers
+ $url =~ s!(?:git|https?)://github\.com/!git\@github.com:!;
+
+ given ($repo_type) {
+ when ("bzr") {
+ $url
+ =~ s[^\w+://(?:(bazaar|code)\.)?(launchpad\.net/.*)][bzr+ssh://${user}bazaar.$2];
+ }
+ when ("git") {
+ $url =~ s!^https://salsa.debian.org/!git\@salsa.debian.org:!;
+ $url
+ =~ s[^\w+://(?:(git|code)\.)?(launchpad\.net/.*)][git+ssh://${user}git.$2];
+ }
+ default {
+ die
+"sorry, don't know how to enable authentication for $repo_type repositories (patches welcome!)\n";
+ }
+ }
+ if ($url eq $old_url) { # last attempt: try with user-defined rules
+ $url = user_set_auth($repo_type, $url);
+ }
+ die
+"can't use authenticated mode on repository '$url' since it is not a known repository (e.g. salsa.debian.org)\n"
+ if $url eq $old_url;
+ return $url;
+}
+
+# Hack around specific, known deficiencies in repositories that don't follow
+# standard behavior.
+sub munge_url($$) {
+ my ($repo_type, $repo_url) = @_;
+
+ return $repo_url;
+}
+
+# returns an error code after system(). If system() exited normally, this is the
+# error code of the child process. If it exited with a signal (if a user hit
+# C-c, say) then this returns something <0. In either case, errorcode()==0 means
+# "success"
+sub errorcode {
+ my $code = $? >> 8;
+ if ($code == 0 && $? != 0) {
+ return -$?;
+ }
+ return $code;
+}
+
+# Checkout a given repository in a given destination directory.
+sub checkout_repo($$$$) {
+ my ($repo_type, $repo_url, $destdir, $anon_repo_url) = @_;
+ my (@cmd, @extracmd);
+
+ given ($repo_type) {
+ when ("arch") { @cmd = ("tla", "grab", $repo_url); } # XXX ???
+ when ("bzr") { @cmd = ("bzr", "branch", $repo_url); }
+ when ("cvs") {
+ $repo_url =~ s|^-d\s*||;
+ my ($root, $module) = split /\s+/, $repo_url;
+ $module ||= '';
+ @cmd = ("cvs", "-d", $root, "checkout", $module);
+ }
+ when ("darcs") { @cmd = ("darcs", "get", $repo_url); }
+ when ("git") {
+ my $push_url;
+
+ if (defined $anon_repo_url and length $anon_repo_url) {
+ if ($repo_url =~ m|(.*)\s+-b\s+(.*)|) {
+ $push_url = $1;
+ } else {
+ $push_url = $repo_url;
+ }
+
+ $repo_url = $anon_repo_url;
+ }
+
+ if ($repo_url =~ m|(.*)\s+-b\s+(.*)|) {
+ @cmd = ("git", "clone", $1, "-b", $2);
+ } else {
+ @cmd = ("git", "clone", $repo_url);
+ }
+
+ if ($push_url) {
+ @extracmd = ('git', 'remote', 'set-url', '--push', 'origin',
+ $push_url);
+ }
+ }
+ when ("hg") { @cmd = ("hg", "clone", $repo_url); }
+ when ("svn") { @cmd = ("svn", "co", $repo_url); }
+ default { die "unsupported version control system '$repo_type'.\n"; }
+ }
+ @cmd = set_destdir($repo_type, $destdir, @cmd) if length $destdir;
+ print "@cmd ...\n";
+ system @cmd;
+ my $rc = errorcode();
+
+ if ($rc == 0 && @extracmd) {
+ my $oldcwd = getcwd();
+ my $clonedir;
+
+ print "@extracmd ...\n";
+
+ if (length $destdir) {
+ $clonedir = $destdir;
+ } else {
+ ($clonedir = $repo_url) =~ s|.*/(.*)(.git)?|$1|;
+ }
+
+ chdir $clonedir;
+ system @extracmd;
+ $rc = errorcode();
+ chdir($oldcwd);
+ }
+
+ return $rc;
+}
+
+# Checkout a given set of files from a given repository in a given
+# destination directory.
+sub checkout_files($$$$) {
+ my ($repo_type, $repo_url, $destdir, $browse_url) = @_;
+ my @cmd;
+ my $tempdir;
+
+ foreach my $file (@files) {
+ my $fetched = 0;
+
+ # Cheap'n'dirty escaping
+ # We should possibly depend on URI::Escape, but this should do...
+ my $escaped_file = $file;
+ $escaped_file =~ s|\+|%2B|g;
+
+ my $dir;
+ if (defined $destdir and length $destdir) {
+ $dir = "$destdir/";
+ } else {
+ $dir = "./";
+ }
+ $dir .= dirname($file);
+
+ if (!recurs_mkdir($dir)) {
+ print STDERR "Failed to create directory $dir\n";
+ return 1;
+ }
+
+ given ($repo_type) {
+ when ("arch") {
+ # If we've already retrieved a copy of the repository,
+ # reuse it
+ if (!length($tempdir)) {
+ if (
+ !(
+ $tempdir = tempdir(
+ "debcheckoutXXXX",
+ TMPDIR => 1,
+ CLEANUP => 1
+ ))
+ ) {
+ print STDERR
+ "Failed to create temporary directory . $!\n";
+ return 1;
+ }
+
+ my $oldcwd = getcwd();
+ chdir $tempdir;
+ @cmd = ("tla", "grab", $repo_url);
+ print "@cmd ...\n";
+ my $rc = system(@cmd);
+ chdir $oldcwd;
+ return ($rc >> 8) if $rc != 0;
+ }
+
+ if (!copy("$tempdir/$file", $dir)) {
+ print STDERR "Failed to copy $file to $dir: $!\n";
+ return 1;
+ }
+ }
+ when ("cvs") {
+ if (!length($tempdir)) {
+ if (
+ !(
+ $tempdir = tempdir(
+ "debcheckoutXXXX",
+ TMPDIR => 1,
+ CLEANUP => 1
+ ))
+ ) {
+ print STDERR
+ "Failed to create temporary directory . $!\n";
+ return 1;
+ }
+ }
+ $repo_url =~ s|^-d\s*||;
+ my ($root, $module) = split /\s+/, $repo_url;
+ # If an explicit module name isn't present, use the last
+ # component of the URL
+ if (!length($module)) {
+ $module = $repo_url;
+ $module =~ s%^.*/(.*?)$%$1%;
+ }
+ $module .= "/$file";
+ $module =~ s%//%/%g;
+
+ my $oldcwd = getcwd();
+ chdir $tempdir;
+ @cmd = ("cvs", "-d", $root, "export", "-r", "HEAD", "-f",
+ $module);
+ print "\n@cmd ...\n";
+ system @cmd;
+ if (errorcode() != 0) {
+ chdir $oldcwd;
+ return (errorcode());
+ } else {
+ chdir $oldcwd;
+ if (copy("$tempdir/$module", $dir)) {
+ print "Copied to $destdir/$file\n";
+ } else {
+ print STDERR "Failed to copy $file to $dir: $!\n";
+ return 1;
+ }
+ }
+ }
+ when (/(svn|bzr)/) {
+ @cmd = ($repo_type, "cat", "$repo_url/$file");
+ print "@cmd > $dir/" . basename($file) . " ... \n";
+ if (!open CAT, '-|', @cmd) {
+ print STDERR "Failed to execute @cmd $!\n";
+ return 1;
+ }
+ local $/;
+ my $content = <CAT>;
+ close CAT;
+ if (!open OUTPUT, ">", $dir . "/" . basename($file)) {
+ print STDERR "Failed to create output file "
+ . basename($file) . " $!\n";
+ return 1;
+ }
+ print OUTPUT $content;
+ close OUTPUT;
+ }
+ when (/(darcs|hg)/) {
+ # Subtly different but close enough
+ if (have_lwp) {
+ print "Attempting to retrieve $file via HTTP ...\n";
+
+ my $file_url
+ = $repo_type eq "darcs"
+ ? "$repo_url/$escaped_file"
+ : "$repo_url/raw-file/tip/$file";
+ init_agent() unless $ua;
+ my $request = HTTP::Request->new('GET', "$file_url");
+ my $response = $ua->request($request);
+ if ($response->is_success) {
+ if (!open OUTPUT, ">", $dir . "/" . basename($file)) {
+ print STDERR "Failed to create output file "
+ . basename($file) . " $!\n";
+ return 1;
+ }
+ print "Writing to $dir/" . basename($file) . " ... \n";
+ print OUTPUT $response->content;
+ close OUTPUT;
+ $fetched = 1;
+ }
+ }
+ if ($fetched == 0) {
+ # If we've already retrieved a copy of the repository,
+ # reuse it
+ if (!length($tempdir)) {
+ if (
+ !(
+ $tempdir = tempdir(
+ "debcheckoutXXXX",
+ TMPDIR => 1,
+ CLEANUP => 1
+ ))
+ ) {
+ print STDERR
+ "Failed to create temporary directory . $!\n";
+ return 1;
+ }
+
+ # Can't get / clone in to a directory that already exists...
+ $tempdir .= "/repo";
+ if ($repo_type eq "darcs") {
+ @cmd = ("darcs", "get", $repo_url, $tempdir);
+ } else {
+ @cmd = ("hg", "clone", $repo_url, $tempdir);
+ }
+ print "@cmd ...\n";
+ my $rc = system(@cmd);
+ return ($rc >> 8) if $rc != 0;
+ print "\n";
+ }
+ }
+ if (copy "$tempdir/$file", $dir) {
+ print "Copied $file to $dir\n";
+ } else {
+ print STDERR "Failed to copy $file to $dir: $!\n";
+ return 1;
+ }
+ }
+ when ("git") {
+ # If there isn't a browse URL (either because the package
+ # doesn't ship one, or because we were called with a URL,
+ # try a common pattern for gitweb
+ if (!length($browse_url)) {
+ if ($repo_url =~ m%^\w+://([^/]+)/(?:git/)?(.*)$%) {
+ $browse_url = "http://$1/?p=$2";
+ }
+ }
+ if (have_lwp and $browse_url =~ /^http/) {
+ $escaped_file =~ s|/|%2F|g;
+
+ print "Attempting to retrieve $file via HTTP ...\n";
+
+ init_agent() unless $ua;
+ my $file_url = "$browse_url;a=blob_plain";
+ $file_url .= ";f=$escaped_file;hb=HEAD";
+ my $request = HTTP::Request->new('GET', $file_url);
+ my $response = $ua->request($request);
+ my $error = 0;
+ if (!$response->is_success) {
+ if ($browse_url =~ /\.git$/) {
+ print "Error retrieving file: "
+ . $response->status_line . "\n";
+ $error = 1;
+ } else {
+ $browse_url .= ".git";
+ $file_url = "$browse_url;a=blob_plain";
+ $file_url .= ";f=$escaped_file;hb=HEAD";
+ $request = HTTP::Request->new('GET', $file_url);
+ $response = $ua->request($request);
+ if (!$response->is_success) {
+ print "Error retrieving file: "
+ . $response->status_line . "\n";
+ $error = 1;
+ }
+ }
+ }
+ if (!$error) {
+ if (!open OUTPUT, ">", $dir . "/" . basename($file)) {
+ print STDERR "Failed to create output file "
+ . basename($file) . " $!\n";
+ return 1;
+ }
+ print "Writing to $dir/" . basename($file) . " ... \n";
+ print OUTPUT $response->content;
+ close OUTPUT;
+ $fetched = 1;
+ }
+ }
+ if ($fetched == 0) {
+ # If we've already retrieved a copy of the repository,
+ # reuse it
+ if (!length($tempdir)) {
+ if (
+ !(
+ $tempdir = tempdir(
+ "debcheckoutXXXX",
+ TMPDIR => 1,
+ CLEANUP => 1
+ ))
+ ) {
+ print STDERR
+ "Failed to create temporary directory . $!\n";
+ return 1;
+ }
+ # Since git won't clone in to a directory that
+ # already exists...
+ $tempdir .= "/repo";
+ # Can't shallow clone from an http:: URL
+ $repo_url =~ s/^http/git/;
+ @cmd = (
+ "git", "clone", "--depth", "1", $repo_url,
+ "$tempdir"
+ );
+ print "@cmd ...\n\n";
+ my $rc = system(@cmd);
+ return ($rc >> 8) if $rc != 0;
+ print "\n";
+ }
+
+ my $oldcwd = getcwd();
+ chdir $tempdir;
+
+ @cmd = ($repo_type, "show", "HEAD:$file");
+ print "@cmd ... > $dir/" . basename($file) . "\n";
+ if (!open CAT, '-|', @cmd) {
+ print STDERR "Failed to execute @cmd $!\n";
+ chdir $oldcwd;
+ return 1;
+ }
+ chdir $oldcwd;
+ local $/;
+ my $content = <CAT>;
+ close CAT;
+ if (!open OUTPUT, ">", $dir . "/" . basename($file)) {
+ print STDERR "Failed to create output file "
+ . basename($file) . " $!\n";
+ return 1;
+ }
+ print OUTPUT $content;
+ close OUTPUT;
+ }
+ }
+ default {
+ die "unsupported version control system '$repo_type'.\n";
+ }
+ }
+ }
+
+ # If we've got this far, all the files were retrieved successfully
+ return 0;
+}
+
+# download source package, unpack it, and merge its contents into the checkout
+sub unpack_source($$$$$) {
+ my ($pkg, $version, $destdir, $origtgz_name, $unpack_source) = @_;
+
+ return 1 if ($unpack_source eq 'never');
+ return 1
+ if (defined $origtgz_name and $origtgz_name eq '')
+ ; # only really relevant with URL on command line
+
+ $destdir ||= $pkg;
+ # Apt will auto-resolve binary package names to source package names. We
+ # need to know the source package name to correctly identify the source
+ # package artifacts (dsc, orig.tar.*, etc)
+ (my $srcpkg = $origtgz_name) =~ s/_.*//;
+ # is this a debian-dir-only repository?
+ unless (-d $destdir) {
+ print STDERR
+"debcheckout did not create the $destdir directory - this is probably a bug\n";
+ return 0;
+ }
+ my @repo_files = glob "$destdir/*";
+ my $debian_only = 0;
+ if (@repo_files == 1 and $repo_files[0] eq "$destdir/debian") {
+ $debian_only = 1;
+ }
+
+ return 1 if ($unpack_source eq 'auto' and not $debian_only);
+ if ($unpack_source ne 'download-only' and $debian_only) {
+ print
+"repository only contains the debian directory, using apt-get source\n";
+ }
+
+ my $tmpdir = File::Temp->newdir(DIR => ".");
+
+ # unpack
+ my $oldcwd = getcwd();
+ chdir $tmpdir;
+ my @args = ('source');
+ push @args, '--download-only'
+ if ($unpack_source eq 'download-only' or not $debian_only);
+ push @args, $version ? "$srcpkg=$version" : $srcpkg;
+ system('apt-get', @args);
+ chdir $oldcwd;
+
+ if (errorcode()) {
+ print STDERR "apt-get source failed\n";
+ return 0;
+ }
+
+ # put source package in place
+ foreach my $sourcefile (glob "$tmpdir/${srcpkg}_*") {
+ next unless (-f $sourcefile); # skip directories
+ my $base = $sourcefile;
+ $base =~ s!.*/!!;
+ rename $sourcefile, $base or die "rename $sourcefile $base: $!";
+ }
+
+ return 1 if ($unpack_source eq 'download-only' or not $debian_only);
+
+ # figure out which directory was created
+ my @dirs = glob "$tmpdir/$srcpkg-*/";
+ unless (@dirs) {
+ print STDERR
+ "apt-get source did not create any $tmpdir/$srcpkg-* directory\n";
+ return 0;
+ }
+ my $directory = $dirs[0];
+ chop $directory;
+
+ # move all files over, except the debian directory
+ opendir DIR, $directory or die "opendir $directory: $!";
+ foreach my $file (readdir DIR) {
+ if ($file eq 'debian') {
+ system('rm', '-rf', "$directory/$file");
+ } elsif ($file eq '.' or $file eq '..') {
+ next;
+ } else {
+ rename "$directory/$file", "$destdir/$file"
+ or die "rename $directory/$file $destdir/$file: $!";
+ }
+ }
+ closedir DIR;
+ rmdir $directory or die "rmdir $directory: $!";
+
+ # $tmpdir is automatically removed
+ return 1;
+}
+
+# Print information about a repository and quit.
+sub print_repo($$) {
+ my ($repo_type, $repo_url) = @_;
+
+ print "$repo_type\t$repo_url\n";
+ exit(0);
+}
+
+sub git_ls_remote($$) {
+ my ($url, $prefix) = @_;
+
+ $url =~ s|\s+-b\s+.*||;
+ my $cmd = "git ls-remote '$url'";
+ $cmd .= " '$prefix/*'" if length $prefix;
+ open GIT, "$cmd |" or die "can't execute $cmd\n";
+ my @refs;
+ while (my $line = <GIT>) {
+ chomp $line;
+ my ($sha1, $name) = split /\s+/, $line;
+ my $ref = $name;
+ $ref = substr($ref, length($prefix) + 1) if length $prefix;
+ push @refs, $ref;
+ }
+ close GIT;
+ return @refs;
+}
+
+# Given a GIT repository URL, extract its topgit info (if any), see
+# the "topgit" package for more information
+sub tg_info($) {
+ my ($url) = @_;
+
+ my %info;
+ $info{'topgit'} = 'no';
+ $info{'top-bases'} = '';
+ my @bases = git_ls_remote($url, 'refs/top-bases');
+ if (@bases) {
+ $info{'topgit'} = 'yes';
+ $info{'top-bases'} = join ' ', @bases;
+ }
+ return (\%info);
+}
+
+# Print details about a repository and quit.
+sub print_details($$) {
+ my ($repo_type, $repo_url) = @_;
+
+ print "type\t$repo_type\n";
+ print "url\t$repo_url\n";
+ if ($repo_type eq "git") {
+ my $tg_info = tg_info($repo_url);
+ while (my ($k, $v) = each %$tg_info) {
+ print "$k\t$v\n";
+ }
+ }
+ exit(0);
+}
+
+sub guess_repo_type($$) {
+ my ($repo_url, $default) = @_;
+ my $repo_type = $default;
+ if ($repo_url =~ /^(git|svn|bzr)(\+ssh)?:/) {
+ $repo_type = $1;
+ } elsif ($repo_url =~ /^https?:\/\/(svn|git|hg|bzr|darcs)\.debian\.org/) {
+ $repo_type = $1;
+ } elsif (
+ $repo_url =~ m@^https?://anonscm.debian.org/(svn|c?git|hg|bzr|darcs)/@)
+ {
+ $repo_type = $1;
+ $repo_type =~ s/cgit/git/;
+ }
+ return $repo_type;
+}
+
+# Does a given string match the lexical rules for package names?
+sub is_package($) {
+ my ($arg) = @_;
+
+ return ($arg =~ /^[a-z0-9.+-]+$/); # lexical rule for package names
+}
+
+sub main() {
+ my $auth = 0; # authenticated mode
+ my $destdir = ""; # destination directory
+ my $pkg = ""; # package name
+ my $version = ""; # package version
+ my $origtgz_name
+ = undef; # orig.tar.gz name (or "" when none; undef means unknown)
+ my $print_mode = 0; # print only mode
+ my $details_mode = 0; # details only mode
+ my $use_package = ''; # use this package instead of guessing from the URL
+ my $repo_type = "git"; # default repo typo, overridden by '-t'
+ my $repo_url = ""; # repository URL
+ my $anon_repo_url; # repository URL (before auth mangling)
+ my $user = ""; # login name (authenticated mode only)
+ my $browse_url = ""; # online browsable repository URL
+ my $git_track = ""; # list of remote GIT branches to --track
+ my $unpack_source
+ = $config_vars{DEBCHECKOUT_SOURCE}; # retrieve and unpack orig.tar.gz
+ GetOptions(
+ "auth|a" => \$auth,
+ "help|h" => sub { pod2usage({ -exitval => 0, -verbose => 1 }); },
+ "print|p" => \$print_mode,
+ "details|d" => \$details_mode,
+ "package|P=s" => \$use_package,
+ "type|t=s" => \$repo_type,
+ "user|u=s" => \$user,
+ "file|f=s" => sub { push(@files, $_[1]); },
+ "git-track=s" => \$git_track,
+ "source=s" => \$unpack_source,
+ ) or pod2usage({ -exitval => 3 });
+ pod2usage({ -exitval => 3 }) if ($#ARGV < 0 or $#ARGV > 1);
+ pod2usage({
+ -exitval => 3,
+ -message => "-d and -p are mutually exclusive.\n",
+ }) if ($print_mode and $details_mode);
+ my $dont_act = 1 if ($print_mode or $details_mode);
+ pod2usage({
+ -exitval => 3,
+ -message =>
+"--source argument must be one of never, auto, download-only, and always\n",
+ }) unless ($unpack_source =~ /^(never|auto|download-only|always)$/);
+
+ # -u|--user implies -a|--auth
+ $auth = 1 if length $user;
+
+ # set user from the config file to be used with -a|--auth without -u|--user
+ $user = $config_vars{DEBCHECKOUT_USER} unless $user;
+
+ $destdir = $ARGV[1] if $#ARGV > 0;
+ ($pkg, $version) = split(/=/, $ARGV[0]);
+ $version ||= "";
+
+ if (not is_package($pkg)) { # repo-url passed on the command line
+ $repo_url = $ARGV[0];
+ $repo_type = guess_repo_type($repo_url, $repo_type);
+ $pkg = "";
+ $version = "";
+ # when --package is given, use it
+ if ($use_package) {
+ $pkg = $use_package;
+ # else guess package from url
+ } elsif ($repo_url =~ m!/trunk/([a-z0-9.+-]+)!)
+ { # svn with {trunk,tags,branches}/$pkg
+ $pkg = $1;
+ } elsif ($repo_url =~ m!([a-z0-9.+-]+)/trunk/?!)
+ { # svn with $pkg/{trunk,tags,branches}
+ $pkg = $1;
+ } elsif ($repo_url =~ /([a-z0-9.+-]+)\.git(\s+-b\s+.*)?$/) { # git
+ $pkg = $1;
+ } elsif ($repo_url =~ /([a-z0-9.+-]+)$/) { # catch-all
+ $pkg = $1;
+ }
+ $origtgz_name = $pkg
+ ; # FIXME: this should rather set srcpkg in unpack_source() directly
+ } else { # package name passed on the command line
+ ($version, $repo_type, $repo_url, $origtgz_name)
+ = find_repo($pkg, $version);
+ unless ($repo_type) {
+ my $vermsg = "";
+ $vermsg = ", version $version" if length $version;
+ print <<EOF;
+No repository found for package $pkg$vermsg.
+
+A Vcs-* field is missing in its source record. See Debian Developer's
+Reference 6.2.5:
+ `https://www.debian.org/doc/developers-reference/best-pkging-practices.html#bpp-vcs'
+If you know that the package is maintained via a version control
+system consider asking the maintainer to expose such information.
+
+Nevertheless, you can get the sources of package $pkg
+from the Debian archive executing:
+
+ apt-get source $pkg
+
+Note however that what you obtain will *not* be a local copy of
+some version control system: your changes will not be preserved
+and it will not be possible to commit them directly.
+
+EOF
+ exit(1);
+ }
+ $browse_url = find_browse($pkg, $version) if @files;
+ }
+
+ $repo_url = munge_url($repo_type, $repo_url);
+ if ($auth and not @files) {
+ $anon_repo_url = $repo_url;
+ $repo_url = set_auth($repo_type, $repo_url, $user, $dont_act);
+ }
+ print_repo($repo_type, $repo_url) if $print_mode; # ... then quit
+ print_details($repo_type, $repo_url) if $details_mode; # ... then quit
+ if (length $pkg) {
+ print "declared $repo_type repository at $repo_url\n";
+ $destdir = $pkg unless length $destdir;
+ }
+ my $rc;
+ if (@files) {
+ $rc = checkout_files($repo_type, $repo_url, $destdir, $browse_url);
+ } else {
+ $rc = checkout_repo($repo_type, $repo_url, $destdir, $anon_repo_url);
+ } # XXX: there is no way to know for sure what is the destdir :-(
+ die "checkout failed (the command above returned a non-zero exit code)\n"
+ if $rc != 0;
+
+ # post-checkout actions
+ if ($repo_type eq 'bzr' and $auth) {
+ if (open B, '>>', "$destdir/.bzr/branch/branch.conf") {
+ print B "\npush_location = $repo_url";
+ close B;
+ } else {
+ print STDERR
+ "failed to open branch.conf to add push_location: $!\n";
+ }
+ } elsif ($repo_type eq 'git') {
+ my $tg_info = tg_info($repo_url);
+ my $wcdir = $destdir;
+ # HACK: if $destdir is unknown, take last URL part and remove /.git$/
+ $wcdir = (split m|\.|, (split m|/|, $repo_url)[-1])[0]
+ unless length $wcdir;
+ if ($$tg_info{'topgit'} eq 'yes') {
+ print "TopGit detected, populating top-bases ...\n";
+ system("cd $wcdir && tg remote --populate origin");
+ $rc = errorcode();
+ print STDERR "TopGit population failed\n" if $rc != 0;
+ }
+
+ if (exists $ENV{'DEBEMAIL'} and $ENV{'DEBEMAIL'} =~ /^(.*)\s+<(.*)>$/)
+ {
+ $ENV{'DEBFULLNAME'} = $1 unless exists $ENV{'DEBFULLNAME'};
+ $ENV{'DEBEMAIL'} = $2;
+ }
+
+ system("cd $wcdir && git config user.name \"$ENV{'DEBFULLNAME'}\"")
+ if (defined($ENV{'DEBFULLNAME'}));
+ system("cd $wcdir && git config user.email \"$ENV{'DEBEMAIL'}\"")
+ if (defined($ENV{'DEBEMAIL'}));
+ if (length $git_track) {
+ my @heads;
+ if ($git_track eq '*') {
+ @heads = git_ls_remote($repo_url, 'refs/heads');
+ } else {
+ @heads = split ' ', $git_track;
+ }
+ # Filter out any branches already populated via TopGit
+ my @tgheads = split ' ', $$tg_info{'top-bases'};
+ my $master = 'master';
+ if (
+ open(HEAD,
+ "env GIT_DIR=\"$wcdir/.git\" git symbolic-ref HEAD |"
+ )
+ ) {
+ $master = <HEAD>;
+ chomp $master;
+ $master =~ s@refs/heads/@@;
+ }
+ close(HEAD);
+ foreach my $head (@heads) {
+ next if $head eq $master;
+ next if grep { $head eq $_ } @tgheads;
+ my $cmd = "cd $wcdir";
+ $cmd .= " && git branch --track $head remotes/origin/$head";
+ system($cmd);
+ }
+ }
+ } elsif ($repo_type eq 'hg') {
+ my $username = '';
+ $username .= " $ENV{'DEBFULLNAME'}" if (defined($ENV{'DEBFULLNAME'}));
+ $username .= " <$ENV{'DEBEMAIL'}>" if (defined($ENV{'DEBEMAIL'}));
+ if ($username) {
+ if (open(HGRC, '>>', "$destdir/.hg/hgrc")) {
+ print HGRC "[ui]\nusername =$username\n";
+ close HGRC;
+ } else {
+ print STDERR "failed to open hgrc to set username: $!\n";
+ }
+ }
+ }
+ die "post-checkout action failed\n"
+ if $rc != 0;
+
+ if ($unpack_source) {
+ unless ($pkg) {
+ print STDERR
+ "could not determine package name for orig.tar.gz retrieval\n";
+ $rc ||= 1;
+ exit($rc);
+ }
+ unpack_source($pkg, $version, $destdir, $origtgz_name, $unpack_source)
+ or $rc = 1;
+ }
+
+ exit($rc);
+}
+
+main();
+
+# vim:sw=4
diff --git a/scripts/debclean.1 b/scripts/debclean.1
new file mode 100644
index 0000000..68fc913
--- /dev/null
+++ b/scripts/debclean.1
@@ -0,0 +1,115 @@
+.TH DEBCLEAN 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debclean \- clean up a sourcecode tree
+.SH SYNOPSIS
+\fBdebclean\fR [\fIoptions\fR]
+.SH DESCRIPTION
+\fBdebclean\fR walks through the directory tree starting at the
+directory tree in which it was invoked, and executes
+.I debuild -- clean
+for each Debian source directory encountered. These directories are
+recognised by containing a debian/changelog file for a package whose
+name matches that of the directory. Name matching is described below.
+.PP
+If \fBdebclean\fR is invoked from a directory that is already a Debian source
+package, it will not descend into its subdirectories.
+.PP
+Also, if the \fB\-\-cleandebs\fR option is given, then in every
+directory containing a Debian source tree, all files named *.deb,
+*.changes and *.build are removed. The .dsc, .diff.gz and
+the (.orig).tar.gz files are not touched so that the release can be
+reconstructed if necessary, and the .upload files are left so that
+\fBdebchange\fR functions correctly. The \fB\-\-nocleandebs\fR option
+prevents this extra cleaning behaviour and the \fB\-\-cleandebs\fR
+option forces it. The default is not to clean these files.
+.PP
+\fBdebclean\fR uses \fBdebuild\fR(1) to clean the source tree.
+.SH "Directory name checking"
+In common with several other scripts in the \fBdevscripts\fR package,
+\fBdebclean\fR will walk through the directory tree searching for
+\fIdebian/changelog\fR files. As a safeguard against stray files
+causing potential problems, it will examine the name of the parent
+directory once it finds a \fIdebian/changelog\fR file, and check
+that the directory name corresponds to the package name. Precisely
+how it does this is controlled by two configuration file variables
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR and \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR can take the following values:
+.TP
+.B 0
+Never check the directory name.
+.TP
+.B 1
+Only check the directory name if we have had to change directory in
+our search for \fIdebian/changelog\fR. This is the default behaviour.
+.TP
+.B 2
+Always check the directory name.
+.PP
+The directory name is checked by testing whether the current directory
+name (as determined by \fBpwd\fR(1)) matches the regex given by the
+configuration file option \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR or by the
+command line option \fB\-\-check-dirname-regex\fR \fIregex\fR. Here
+\fIregex\fR is a Perl regex (see \fBperlre\fR(3perl)), which will be
+anchored at the beginning and the end. If \fIregex\fR contains a '/',
+then it must match the full directory path. If not, then it must
+match the full directory name. If \fIregex\fR contains the string
+\'PACKAGE', this will be replaced by the source package name, as
+determined from the changelog. The default value for the regex is:
+\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and
+PACKAGE-version.
+.SH OPTIONS
+.TP
+.B \-\-cleandebs
+Also remove all .deb, .changes and .build files from the parent
+directory.
+.TP
+.B \-\-nocleandebs
+Do not remove the .deb, .changes and .build files from the parent
+directory; this is the default behaviour.
+.TP
+\fB\-\-check-dirname-level\fR \fIN\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+.B \-d
+Do not run dpkg-checkbuilddeps to check build dependencies.
+.TP
+.B \-\-help
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B DEBCLEAN_CLEANDEBS
+If this is set to \fIyes\fR, then it is the same as the
+\fB\-\-cleandebs\fR command line parameter being used.
+.TP
+.BR DEVSCRIPTS_CHECK_DIRNAME_LEVEL ", " DEVSCRIPTS_CHECK_DIRNAME_REGEX
+See the above section \fBDirectory name checking\fR for an explanation of
+these variables. Note that these are package-wide configuration
+variables, and will therefore affect all \fBdevscripts\fR scripts
+which check their value, as described in their respective manpages and
+in \fBdevscripts.conf\fR(5).
+.SH "SEE ALSO"
+.BR debuild (1),
+.BR devscripts.conf (5)
+.SH AUTHOR
+Christoph Lameter <clameter@debian.org>;
+modifications by Julian Gilbey <jdg@debian.org>.
diff --git a/scripts/debclean.sh b/scripts/debclean.sh
new file mode 100755
index 0000000..5f25807
--- /dev/null
+++ b/scripts/debclean.sh
@@ -0,0 +1,218 @@
+#!/bin/bash
+
+set -e
+
+PROGNAME=${0##*/}
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+
+usage() {
+ echo \
+"Usage: $PROGNAME [options]
+ Clean all debian build trees under current directory.
+
+ Options:
+ --cleandebs Also remove all .deb, .changes and .build
+ files from the parent of each build tree
+
+ --nocleandebs Don't remove the .deb etc. files (default)
+
+ --check-dirname-level N
+ How much to check directory names before cleaning trees:
+ N=0 never
+ N=1 only if program changes directory (default)
+ N=2 always
+
+ --check-dirname-regex REGEX
+ What constitutes a matching directory name; REGEX is
+ a Perl regular expression; the string \`PACKAGE' will
+ be replaced by the package name; see manpage for details
+ (default: 'PACKAGE(-.+)?')
+
+ --no-conf, --noconf
+ Do not read devscripts config files;
+ must be the first option given
+
+ -d Do not run dpkg-checkbuilddeps to check build dependencies
+
+ --help Display this help message and exit
+
+ --version Display version information
+
+$MODIFIED_CONF_MSG"
+}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1999 by Julian Gilbey, all rights reserved.
+Original code by Christoph Lameter.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+# Boilerplate: set config variables
+DEFAULT_DEBCLEAN_CLEANDEBS=no
+DEFAULT_DEVSCRIPTS_CHECK_DIRNAME_LEVEL=1
+DEFAULT_DEVSCRIPTS_CHECK_DIRNAME_REGEX='PACKAGE(-.+)?'
+VARS="DEBCLEAN_CLEANDEBS DEVSCRIPTS_CHECK_DIRNAME_LEVEL DEVSCRIPTS_CHECK_DIRNAME_REGEX"
+
+
+if [ "$1" = "--no-conf" -o "$1" = "--noconf" ]; then
+ shift
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (no configuration files read)"
+
+ # set defaults
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+else
+ # Run in a subshell for protection against accidental errors
+ # in the config files
+ eval $(
+ set +e
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+
+ for file in /etc/devscripts.conf ~/.devscripts
+ do
+ [ -r $file ] && . $file
+ done
+
+ set | grep -E '^(DEBCLEAN|DEVSCRIPTS)_')
+
+ # check sanity
+ case "$DEBCLEAN_CLEANDEBS" in
+ yes|no) ;;
+ *) DEBCLEAN_CLEANDEBS=no ;;
+ esac
+ case "$DEVSCRIPTS_CHECK_DIRNAME_LEVEL" in
+ 0|1|2) ;;
+ *) DEVSCRIPTS_CHECK_DIRNAME_LEVEL=1 ;;
+ esac
+
+ # set config message
+ MODIFIED_CONF=''
+ for var in $VARS; do
+ eval "if [ \"\$$var\" != \"\$DEFAULT_$var\" ]; then
+ MODIFIED_CONF_MSG=\"\$MODIFIED_CONF_MSG
+ $var=\$$var\";
+ MODIFIED_CONF=yes;
+ fi"
+ done
+
+ if [ -z "$MODIFIED_CONF" ]; then
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (none)"
+ fi
+fi
+
+# synonyms
+CHECK_DIRNAME_LEVEL="$DEVSCRIPTS_CHECK_DIRNAME_LEVEL"
+CHECK_DIRNAME_REGEX="$DEVSCRIPTS_CHECK_DIRNAME_REGEX"
+
+# Need -o option to getopt or else it doesn't work
+TEMP=$(getopt -s bash -o "" -o d \
+ --long cleandebs,nocleandebs,no-cleandebs \
+ --long no-conf,noconf \
+ --long check-dirname-level:,check-dirname-regex: \
+ --long help,version -n "$PROGNAME" -- "$@")
+if [ $? != 0 ] ; then exit 1 ; fi
+
+eval set -- $TEMP
+
+# Process Parameters
+while [ "$1" ]; do
+ case $1 in
+ --cleandebs) DEBCLEAN_CLEANDEBS=yes ;;
+ --nocleandebs|--no-cleandebs) DEBCLEAN_CLEANDEBS=no ;;
+ --check-dirname-level)
+ shift
+ case "$1" in
+ 0|1|2) CHECK_DIRNAME_LEVEL=$1 ;;
+ *) echo "$PROGNAME: unrecognised --check-dirname-level value (allowed are 0,1,2)" >&2
+ exit 1 ;;
+ esac
+ ;;
+ -d)
+ CHECKBUILDDEP="-d" ;;
+ --check-dirname-regex)
+ shift; CHECK_DIRNAME_REGEX="$1" ;;
+ --no-conf|--noconf)
+ echo "$PROGNAME: $1 is only acceptable as the first command-line option!" >&2
+ exit 1 ;;
+ --help) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+ --) shift; break ;;
+ *) echo "$PROGNAME: bug in option parser, sorry!" >&2 ; exit 1 ;;
+ esac
+ shift
+done
+
+# Still going?
+if [ $# -gt 0 ]; then
+ echo "$PROGNAME takes no non-option arguments;" >&2
+ echo "try $PROGNAME --help for usage information" >&2
+ exit 1
+fi
+
+
+# Script to clean up debian directories
+
+OPWD="$(pwd)"
+
+TESTDIR=$(echo $OPWD | grep -Eo '.*/debian/?' | sed 's/\/debian\/\?$//')
+
+if [ -f debian/changelog ]; then
+ directories=$OPWD
+elif [ -f "$TESTDIR/debian/changelog" ]; then
+ directories=$TESTDIR
+else
+ directories=$(find . -type d -name "debian" -a ! -wholename '*.git*/debian')
+fi
+
+for i in $directories; do
+ ( # subshell to not lose where we are
+ DIR=${i%/debian}
+ echo "Cleaning in directory $DIR"
+ cd $DIR
+
+ # Clean up the source package, but only if the directory looks like
+ # a genuine build tree
+ if [ ! -f debian/changelog ]; then
+ echo "Directory $DIR: contains no debian/changelog, skipping" >&2
+ exit
+ fi
+ package="$(dpkg-parsechangelog -SSource)"
+ if [ -z "$package" ]; then
+ echo "Directory $DIR: unable to determine package name, skipping" >&2
+ exit
+ fi
+
+ # let's test the directory name if appropriate
+ if [ $CHECK_DIRNAME_LEVEL -eq 2 -o \
+ \( $CHECK_DIRNAME_LEVEL -eq 1 -a "$OPWD" != "$(pwd)" \) ]; then
+ if ! perl -MFile::Basename -w \
+ -e "\$pkg='$package'; \$re='$CHECK_DIRNAME_REGEX';" \
+ -e '$re =~ s/PACKAGE/\\Q$pkg\\E/g; $pwd=`pwd`; chomp $pwd;' \
+ -e 'if ($re =~ m%/%) { eval "exit (\$pwd =~ /^$re\$/ ? 0:1);"; }' \
+ -e 'else { eval "exit (basename(\$pwd) =~ /^$re\$/ ? 0:1);"; }'
+ then
+ echo "Full directory path $(pwd) does not match package name, skipping." >&2
+ echo "Run $PROGNAME --help for more information on directory name matching." >&2
+ exit
+ fi
+ fi
+
+ # We now know we're OK and debuild won't complain about the dirname
+ debuild $CHECKBUILDDEP -- clean
+
+ # Clean up the package related files
+ if [ "$DEBCLEAN_CLEANDEBS" = yes ]; then
+ cd ..
+ rm -f *.changes *.deb *.build
+ fi
+ )
+done
diff --git a/scripts/debcommit.pl b/scripts/debcommit.pl
new file mode 100755
index 0000000..444510c
--- /dev/null
+++ b/scripts/debcommit.pl
@@ -0,0 +1,958 @@
+#!/usr/bin/perl
+
+=head1 NAME
+
+debcommit - commit changes to a package
+
+=head1 SYNOPSIS
+
+B<debcommit> [I<options>] [B<--all> | I<files to commit>]
+
+=head1 DESCRIPTION
+
+B<debcommit> generates a commit message based on new text in B<debian/changelog>,
+and commits the change to a package's repository. It must be run in a working
+copy for the package. Supported version control systems are:
+B<cvs>, B<git>, B<hg> (mercurial), B<svk>, B<svn> (Subversion),
+B<baz>, B<bzr>, B<tla> (arch), B<darcs>.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-c>, B<--changelog> I<path>
+
+Specify an alternate location for the changelog. By default debian/changelog is
+used.
+
+=item B<-r>, B<--release>
+
+Commit a release of the package. The version number is determined from
+debian/changelog, and is used to tag the package in the repository.
+
+Note that svn/svk tagging conventions vary, so debcommit uses
+svnpath(1) to determine where the tag should be placed in the
+repository.
+
+=item B<-R>, B<--release-use-changelog>
+
+When used in conjunction with B<--release>, if there are uncommitted
+changes to the changelog then derive the commit message from those
+changes rather than using the default message.
+
+=item B<-m> I<text>, B<--message> I<text>
+
+Specify a commit message to use. Useful if the program cannot determine
+a commit message on its own based on debian/changelog, or if you want to
+override the default message.
+
+=item B<-n>, B<--noact>
+
+Do not actually do anything, but do print the commands that would be run.
+
+=item B<-d>, B<--diff>
+
+Instead of committing, do print the diff of what would have been committed if
+this option were not given. A typical usage scenario of this option is the
+generation of patches against the current working copy (e.g. when you don't have
+commit access right).
+
+=item B<-C>, B<--confirm>
+
+Display the generated commit message and ask for confirmation before committing
+it. It is also possible to edit the message at this stage; in this case, the
+confirmation prompt will be re-displayed after the editing has been performed.
+
+=item B<-e>, B<--edit>
+
+Edit the generated commit message in your favorite editor before committing
+it.
+
+=item B<-a>, B<--all>
+
+Commit all files. This is the default operation when using a VCS other
+than git.
+
+=item B<-s>, B<--strip-message>, B<--no-strip-message>
+
+If this option is set and the commit message has been derived from the
+changelog, the characters "* " will be stripped from the beginning of
+the message.
+
+This option is set by default and ignored if more than one line of
+the message begins with "[*+-] ".
+
+=item B<--sign-commit>, B<--no-sign-commit>
+
+If this option is set, then the commits that debcommit creates will be
+signed using gnupg. Currently this is only supported by git, hg, and bzr.
+
+=item B<--sign-tags>, B<--no-sign-tags>
+
+If this option is set, then tags that debcommit creates will be signed
+using gnupg. Currently this is only supported by git.
+
+=item B<--changelog-info>
+
+If this option is set, the commit author and date will be determined from
+the Maintainer and Date field of the first paragraph in F<debian/changelog>.
+This is mainly useful when using B<debchange>(1) with the B<--no-mainttrailer>
+option.
+
+=back
+
+=head1 CONFIGURATION VARIABLES
+
+The two configuration files F</etc/devscripts.conf> and
+F<~/.devscripts> are sourced by a shell in that order to set
+configuration variables. Command line options can be used to override
+configuration file settings. Environment variable settings are
+ignored for this purpose. The currently recognised variables are:
+
+=over 4
+
+=item B<DEBCOMMIT_STRIP_MESSAGE>
+
+If this is set to I<no>, then it is the same as the B<--no-strip-message>
+command line parameter being used. The default is I<yes>.
+
+=item B<DEBCOMMIT_SIGN_TAGS>
+
+If this is set to I<yes>, then it is the same as the B<--sign-tags> command
+line parameter being used. The default is I<no>.
+
+=item B<DEBCOMMIT_SIGN_COMMITS>
+
+If this is set to I<yes>, then it is the same as the B<--sign-commit>
+command line parameter being used. The default is I<no>.
+
+=item B<DEBCOMMIT_RELEASE_USE_CHANGELOG>
+
+If this is set to I<yes>, then it is the same as the B<--release-use-changelog>
+command line parameter being used. The default is I<no>.
+
+=item B<DEBSIGN_KEYID>
+
+This is the key id used for signing tags. If not set, a default will be
+chosen by the revision control system.
+
+=back
+
+=head1 VCS SPECIFIC FEATURES
+
+=over 4
+
+=item B<tla> / B<baz>
+
+If the commit message contains more than 72 characters, a summary will
+be created containing as many full words from the message as will fit within
+72 characters, followed by an ellipsis.
+
+=back
+
+Each of the features described below is applicable only if the commit message
+has been automatically determined from the changelog.
+
+=over 4
+
+=item B<git>
+
+If only a single change is detected in the changelog, B<debcommit> will unfold
+it to a single line and behave as if B<--strip-message> was used.
+
+Otherwise, the first change will be unfolded and stripped to form a summary line
+and a commit message formed using the summary line followed by a blank line and
+the changes as extracted from the changelog. B<debcommit> will then spawn an
+editor so that the message may be fine-tuned before committing.
+
+=item B<hg> / B<darcs>
+
+The first change detected in the changelog will be unfolded to form a single line
+summary. If multiple changes were detected then an editor will be spawned to
+allow the message to be fine-tuned.
+
+=item B<bzr>
+
+If the changelog entry used for the commit message closes any bugs then B<--fixes>
+options to "bzr commit" will be generated to associate the revision and the bugs.
+
+=back
+
+=cut
+
+use warnings;
+use strict;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use Cwd;
+use File::Basename;
+use File::HomeDir;
+use File::Temp;
+my $progname = basename($0);
+
+my $modified_conf_msg;
+
+sub usage {
+ print <<"EOT";
+Usage: $progname [options] [files to commit]
+ $progname --version
+ $progname --help
+
+Generates a commit message based on new text in debian/changelog,
+and commit the change to a package\'s repository.
+
+Options:
+ -c --changelog=path Specify the location of the changelog
+ -r --release Commit a release of the package and create a tag
+ -R --release-use-changelog
+ Take any uncommitted changes in the changelog in
+ to account when determining the commit message
+ for a release
+ -m --message=text Specify a commit message
+ -n --noact Dry run, no actual commits
+ -d --diff Print diff on standard output instead of committing
+ -C --confirm Ask for confirmation of the message before commit
+ -e --edit Edit the message in EDITOR before commit
+ -a --all Commit all files (default except for git)
+ -s --strip-message Strip the leading '* ' from the commit message (default)
+ --no-strip-message Do not strip a leading '* '
+ --sign-commit Enable signing of the commit (git, hg, and bzr)
+ --no-sign-commit Do not sign the commit (default)
+ --sign-tags Enable signing of tags (git only)
+ --no-sign-tags Do not sign tags (default)
+ --changelog-info Use author and date information from the changelog
+ for the commit (git, hg, and bzr)
+ -h --help This message
+ -v --version Version information
+
+ --no-conf, --noconf
+ Don\'t read devscripts config files;
+ must be the first option given
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+
+EOT
+}
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright by Joey Hess <joeyh\@debian.org>, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+my $release = 0;
+my $message;
+my $release_use_changelog = 0;
+my $noact = 0;
+my $diffmode = 0;
+my $confirm = 0;
+my $edit = 0;
+my $all = 0;
+my $stripmessage = 1;
+my $signcommit = 0;
+my $signtags = 0;
+my $changelog;
+my $changelog_info = 0;
+my $keyid;
+my ($package, $version, $date, $maintainer);
+my $onlydebian = 0;
+
+# Now start by reading configuration files and then command line
+# The next stuff is boilerplate
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'DEBCOMMIT_STRIP_MESSAGE' => 'yes',
+ 'DEBCOMMIT_SIGN_COMMITS' => 'no',
+ 'DEBCOMMIT_SIGN_TAGS' => 'no',
+ 'DEBCOMMIT_RELEASE_USE_CHANGELOG' => 'no',
+ 'DEBSIGN_KEYID' => '',
+ );
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ # Check validity
+ $config_vars{'DEBCOMMIT_STRIP_MESSAGE'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCOMMIT_STRIP_MESSAGE'} = 'yes';
+ $config_vars{'DEBCOMMIT_SIGN_COMMITS'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCOMMIT_SIGN_COMMITS'} = 'no';
+ $config_vars{'DEBCOMMIT_SIGN_TAGS'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCOMMIT_SIGN_TAGS'} = 'no';
+ $config_vars{'DEBCOMMIT_RELEASE_USE_CHANGELOG'} =~ /^(yes|no)$/
+ or $config_vars{'DEBCOMMIT_RELEASE_USE_CHANGELOG'} = 'no';
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $stripmessage = $config_vars{'DEBCOMMIT_STRIP_MESSAGE'} eq 'no' ? 0 : 1;
+ $signcommit = $config_vars{'DEBCOMMIT_SIGN_COMMITS'} eq 'no' ? 0 : 1;
+ $signtags = $config_vars{'DEBCOMMIT_SIGN_TAGS'} eq 'no' ? 0 : 1;
+ $release_use_changelog
+ = $config_vars{'DEBCOMMIT_RELEASE_USE_CHANGELOG'} eq 'no' ? 0 : 1;
+ if (exists $config_vars{'DEBSIGN_KEYID'}
+ && length $config_vars{'DEBSIGN_KEYID'}) {
+ $keyid = $config_vars{'DEBSIGN_KEYID'};
+ }
+}
+
+# Find a good default for the changelog file location
+
+for (qw"debian/changelog changelog") {
+ if (-e $_) {
+ $changelog = $_;
+ last;
+ }
+}
+
+# Now read the command line arguments
+
+if (
+ !GetOptions(
+ "r|release" => \$release,
+ "m|message=s" => \$message,
+ "n|noact" => \$noact,
+ "d|diff" => \$diffmode,
+ "C|confirm" => \$confirm,
+ "e|edit" => \$edit,
+ "a|all" => \$all,
+ "c|changelog=s" => \$changelog,
+ "s|strip-message!" => \$stripmessage,
+ "sign-commit!" => \$signcommit,
+ "sign-tags!" => \$signtags,
+ "changelog-info!" => \$changelog_info,
+ "R|release-use-changelog!" => \$release_use_changelog,
+ "h|help" => sub { usage(); exit 0; },
+ "v|version" => sub { version(); exit 0; },
+ 'noconf|no-conf' => sub { die '--noconf must be first option'; },
+ )
+) {
+ die "Usage: $progname [options] [--all | files to commit]\n";
+}
+
+if ($diffmode) {
+ $confirm = 0;
+ $edit = 0;
+}
+
+my @files_to_commit = @ARGV;
+if (@files_to_commit && !grep(/$changelog/, @files_to_commit)) {
+ push @files_to_commit, $changelog;
+}
+
+# Main program
+
+my $prog = getprog();
+if (!defined $changelog) {
+ die "debcommit: Could not find a Debian changelog\n";
+}
+if (!-e $changelog) {
+ die "debcommit: cannot find $changelog\n";
+}
+
+$message = getmessage()
+ if !defined $message and (not $release or $release_use_changelog);
+
+if ($release || $changelog_info) {
+ require Dpkg::Changelog::Parse;
+ my $log = Dpkg::Changelog::Parse::changelog_parse(file => $changelog);
+ if ($release) {
+ if ($log->{Distribution} =~ /UNRELEASED/) {
+ die
+"debcommit: $changelog says it's UNRELEASED\nTry running dch --release first\n";
+ }
+ $package = $log->{Source};
+ $version = $log->{Version};
+
+ $message = "releasing package $package version $version"
+ if !defined $message;
+ }
+ if ($changelog_info) {
+ $maintainer = $log->{Maintainer};
+ $date = $log->{Date};
+ }
+}
+
+if ($edit) {
+ my $modified = 0;
+ ($message, $modified) = edit($message);
+ die "$progname: Commit message not modified / saved; aborting\n"
+ unless $modified;
+}
+
+if (not $confirm or confirm($message)) {
+ commit($message);
+ tag($package, $version) if $release;
+}
+
+# End of code, only subs below
+
+sub getprog {
+ if (-d "debian") {
+ if (-d "debian/.svn") {
+ # SVN has .svn even in subdirs...
+ if (!-d ".svn") {
+ $onlydebian = 1;
+ }
+ return "svn";
+ } elsif (-d "debian/CVS") {
+ # CVS has CVS even in subdirs...
+ if (!-d "CVS") {
+ $onlydebian = 1;
+ }
+ return "cvs";
+ } elsif (-d "debian/{arch}") {
+ # I don't think we can tell just from the working copy
+ # whether to use tla or baz, so try baz if it's available,
+ # otherwise fall back to tla.
+ if (system("baz --version >/dev/null 2>&1") == 0) {
+ return "baz";
+ } else {
+ return "tla";
+ }
+ } elsif (-d "debian/_darcs") {
+ $onlydebian = 1;
+ return "darcs";
+ }
+ }
+ if (-d ".svn") {
+ return "svn";
+ }
+ if (-d "CVS") {
+ return "cvs";
+ }
+ if (-d "{arch}") {
+ # I don't think we can tell just from the working copy
+ # whether to use tla or baz, so try baz if it's available,
+ # otherwise fall back to tla.
+ if (system("baz --version >/dev/null 2>&1") == 0) {
+ return "baz";
+ } else {
+ return "tla";
+ }
+ }
+ if (-d ".bzr") {
+ return "bzr";
+ }
+ if (-e ".git") {
+# With certain forms of git checkouts, .git can be a file instead of a directory
+ return "git";
+ }
+ if (-d ".hg") {
+ return "hg";
+ }
+ if (-d "_darcs") {
+ return "darcs";
+ }
+
+ # Test for this file to avoid interactive prompting from svk.
+ if (-d File::HomeDir->my_home . "/.svk/local") {
+ # svk has no useful directories so try to run it.
+ my $svkpath
+ = `svk info . 2>/dev/null| grep -i '^Depot Path:' | cut -d ' ' -f 3`;
+ if (length $svkpath) {
+ return "svk";
+ }
+ }
+
+ # .bzr, .git, .hg, or .svn may be in a parent directory, rather than the
+ # current directory, if multiple packages are kept in one repository.
+ my $dir = getcwd();
+ while ($dir =~ s/[^\/]*\/?$// && length $dir) {
+ if (-d "$dir/.bzr") {
+ return "bzr";
+ }
+ if (-e "$dir/.git") {
+ return "git";
+ }
+ if (-d "$dir/.hg") {
+ return "hg";
+ }
+ if (-d "$dir/.svn") {
+ return "svn";
+ }
+ }
+
+ die
+"debcommit: not in a cvs, Subversion, baz, bzr, git, hg, svk or darcs working copy\n";
+}
+
+sub action {
+ my $prog = shift;
+ if ($prog eq "darcs" && $onlydebian) {
+ splice(@_, 1, 0, "--repodir=debian");
+ }
+ print $prog, " ", join(
+ " ",
+ map {
+ if (/[^-A-Za-z0-9]/) { "'$_'" }
+ else { $_ }
+ } @_
+ ),
+ "\n";
+ return 1 if $noact;
+ return (system($prog, @_) != 0) ? 0 : 1;
+}
+
+sub bzr_find_fixes {
+ my $message = shift;
+
+ require Dpkg::Changelog::Entry::Debian;
+ require Dpkg::Vendor::Ubuntu;
+
+ my @debian_closes = Dpkg::Changelog::Entry::Debian::find_closes($message);
+ my $launchpad_closes
+ = Dpkg::Vendor::Ubuntu::find_launchpad_closes($message);
+
+ my @fixes_arg = ();
+ map { push(@fixes_arg, ("--fixes", "deb:" . $_)) } @debian_closes;
+ map { push(@fixes_arg, ("--fixes", "lp:" . $_)) } @$launchpad_closes;
+ return @fixes_arg;
+}
+
+sub commit {
+ my $message = shift;
+
+ die "debcommit: can't specify a list of files to commit when using --all\n"
+ if (@files_to_commit and $all);
+
+ my $action_rc; # return code of external command
+ if ($prog =~ /^(cvs|svn|svk|hg)$/) {
+ if (!@files_to_commit && $onlydebian) {
+ @files_to_commit = ("debian");
+ }
+ my @extra_args;
+ if ($changelog_info && $prog eq 'hg') {
+ push(@extra_args, '-u', $maintainer, '-d', $date);
+ }
+ $action_rc
+ = $diffmode
+ ? action($prog, "diff", @files_to_commit)
+ : action($prog, "commit", "-m", $message, @extra_args,
+ @files_to_commit);
+ if ($prog eq 'hg' && $action_rc && $signcommit) {
+ my @sign_args;
+ push(@sign_args, '-k', $keyid) if $keyid;
+ push(@sign_args, '-u', $maintainer, '-d', $date)
+ if $changelog_info;
+ if (!action($prog, 'sign', @sign_args)) {
+ die "$progname: failed to sign commit\n";
+ }
+ }
+ } elsif ($prog eq 'git') {
+ if (!@files_to_commit && ($all || $release)) {
+ # check to see if the WC is clean. git-commit would exit
+ # nonzero, so don't run it in --all or --release mode.
+ my $status = `git status --porcelain`;
+ if (!$status) {
+ print $status;
+ return;
+ }
+ }
+ if ($diffmode) {
+ $action_rc = action($prog, "diff", @files_to_commit);
+ } else {
+ if ($all) {
+ @files_to_commit = ("-a");
+ }
+ my @extra_args = ();
+ if ($changelog_info) {
+ @extra_args = ("--author=$maintainer", "--date=$date");
+ }
+ if ($signcommit) {
+ my $sign = '--gpg-sign';
+ $sign .= "=$keyid" if $keyid;
+ push(@extra_args, $sign);
+ }
+ $action_rc = action($prog, "commit", "-m", $message, @extra_args,
+ @files_to_commit);
+ }
+ } elsif ($prog eq 'tla' || $prog eq 'baz') {
+ my $summary = $message;
+ $summary =~ s/^((?:\* )?[^\n]{1,72})(?:(?:\s|\n).*|$)/$1/ms;
+ my @args;
+ if (!$diffmode) {
+ if ($summary eq $message) {
+ $summary =~ s/^\* //s;
+ @args = ("-s", $summary);
+ } else {
+ $summary =~ s/^\* //s;
+ @args = ("-s", "$summary ...", "-L", $message);
+ }
+ }
+ push(@args, (($prog eq 'tla') ? '--' : ()), @files_to_commit,)
+ if @files_to_commit;
+ $action_rc = action($prog, $diffmode ? "diff" : "commit", @args);
+ } elsif ($prog eq 'bzr') {
+ if ($diffmode) {
+ $action_rc = action($prog, "diff", @files_to_commit);
+ } else {
+ my @extra_args = bzr_find_fixes($message);
+ if ($changelog_info) {
+ eval {
+ require Date::Format;
+ require Date::Parse;
+ };
+ if ($@) {
+ my $error
+ = "$progname: Couldn't format the changelog date: ";
+ if ($@ =~ m%^Can\'t locate Date%) {
+ $error
+ .= "the libtimedate-perl package is not installed";
+ } else {
+ $error .= "couldn't load Date::Format/Date::Parse: $@";
+ }
+ die "$error\n";
+ }
+ my @time = Date::Parse::strptime($date);
+ my $time
+ = Date::Format::strftime('%Y-%m-%d %H:%M:%S %z', \@time);
+ push(@extra_args,
+ "--author=$maintainer", "--commit-time=$time");
+ }
+ my @sign_args;
+ if ($signcommit) {
+ push(@sign_args, "-Ocreate_signatures=always");
+ if ($keyid) {
+ push(@sign_args, "-Ogpg_signing_key=$keyid");
+ }
+ }
+ $action_rc = action($prog, @sign_args, "commit", "-m", $message,
+ @extra_args, @files_to_commit);
+ }
+ } elsif ($prog eq 'darcs') {
+ if (!@files_to_commit && ($all || $release)) {
+ # check to see if the WC is clean. darcs record would exit
+ # nonzero, so don't run it in --all or --release mode.
+ $action_rc = action($prog, "status");
+ if (!$action_rc) {
+ return;
+ }
+ }
+ if ($diffmode) {
+ $action_rc = action($prog, "diff", @files_to_commit);
+ } else {
+ my $fh = File::Temp->new(TEMPLATE => '.commit-tmp.XXXXXX');
+ $fh->print("$message\n");
+ $fh->close();
+ $action_rc = action($prog, "record", "--logfile", "$fh", "-a",
+ @files_to_commit);
+ }
+ } else {
+ die "debcommit: unknown program $prog";
+ }
+ die "debcommit: commit failed\n" if (!$action_rc);
+}
+
+sub tag {
+ my ($package, $tag, $tag_msg) = @_;
+
+ # Make the message here so we can mangle $tag later, if needed
+ $tag_msg
+ = !defined $message
+ ? "tagging package $package version $tag"
+ : "$message";
+
+ if ($prog eq 'svn' || $prog eq 'svk') {
+ my $svnpath = `svnpath`;
+ chomp $svnpath;
+ my $tagpath = `svnpath tags`;
+ chomp $tagpath;
+
+ if (!action($prog, "copy", $svnpath, "$tagpath/$tag", "-m", $tag_msg))
+ {
+ if (
+ !action(
+ $prog, "mkdir", $tagpath, "-m", "create tag directory"
+ )
+ || !action(
+ $prog, "copy", $svnpath, "$tagpath/$tag",
+ "-m", $tag_msg
+ )
+ ) {
+ die "debcommit: failed tagging with $tag\n";
+ }
+ }
+ } elsif ($prog eq 'cvs') {
+ $tag =~ s/^[0-9]+://; # strip epoch
+ $tag =~ tr/./_/; # mangle for cvs
+ $tag = "debian_version_$tag";
+ if (!action("cvs", "tag", "-f", $tag)) {
+ die "debcommit: failed tagging with $tag\n";
+ }
+ } elsif ($prog eq 'tla' || $prog eq 'baz') {
+ my $archpath = `archpath`;
+ chomp $archpath;
+ my $tagpath = `archpath releases--\Q$tag\E`;
+ chomp $tagpath;
+ my $subcommand;
+ if ($prog eq 'baz') {
+ $subcommand = "branch";
+ } else {
+ $subcommand = "tag";
+ }
+
+ if (!action($prog, $subcommand, $archpath, $tagpath)) {
+ die "debcommit: failed tagging with $tag\n";
+ }
+ } elsif ($prog eq 'bzr') {
+ if (action("$prog tags >/dev/null 2>&1")) {
+ if (!action($prog, "tag", $tag)) {
+ die "debcommit: failed tagging with $tag\n";
+ }
+ } else {
+ die
+ "debcommit: bazaar or branch version too old to support tags\n";
+ }
+ } elsif ($prog eq 'git') {
+ $tag =~ tr/~/_/; # mangle for git
+ $tag =~ tr/:/%/;
+ if ($tag =~ /-/) {
+ # not a native package, so tag as a debian release
+ $tag = "debian/$tag";
+ }
+
+ if ($signtags) {
+ my $tag_msg = "tagging package $package version $tag";
+ if (defined $keyid) {
+ if (
+ !action(
+ $prog, "tag", "-a", "-u",
+ $keyid, "-m", $tag_msg, $tag
+ )
+ ) {
+ die "debcommit: failed tagging with $tag\n";
+ }
+ } else {
+ if (!action($prog, "tag", "-a", "-s", "-m", $tag_msg, $tag)) {
+ die "debcommit: failed tagging with $tag\n";
+ }
+ }
+ } elsif (!action($prog, "tag", "-a", "-m", $tag_msg, $tag)) {
+ die "debcommit: failed tagging with $tag\n";
+ }
+ } elsif ($prog eq 'hg') {
+ $tag =~ s/^[0-9]+://; # strip epoch
+ $tag = "debian-$tag";
+ if (!action($prog, "tag", "-m", $tag_msg, $tag)) {
+ die "debcommit: failed tagging with $tag\n";
+ }
+ } elsif ($prog eq 'darcs') {
+ if (!action($prog, "tag", $tag)) {
+ die "debcommit: failed tagging with $tag\n";
+ }
+ } else {
+ die "debcommit: unknown program $prog";
+ }
+}
+
+sub getmessage {
+ my $ret;
+
+ if ($prog =~ /^(cvs|svn|svk|tla|baz|bzr|git|hg|darcs)$/) {
+ $ret = '';
+ my @diffcmd;
+
+ if ($prog eq 'tla') {
+ @diffcmd = ($prog, 'diff', '-D', '-w', '--');
+ } elsif ($prog eq 'baz') {
+ @diffcmd = ($prog, 'file-diff');
+ } elsif ($prog eq 'bzr') {
+ @diffcmd = ($prog, 'diff', '--diff-options', '-wu');
+ } elsif ($prog eq 'git') {
+ if (git_repo_has_commits()) {
+ if ($all) {
+ @diffcmd
+ = ('git', 'diff', '--no-ext-diff', '-w', '--no-color');
+ } else {
+ @diffcmd = (
+ 'git', 'diff',
+ '--no-ext-diff', '-w',
+ '--cached', '--no-color'
+ );
+ }
+ } else {
+ # No valid head! Rather than fail, cheat and use 'diff'
+ @diffcmd = ('diff', '-u', '/dev/null');
+ }
+ } elsif ($prog eq 'svn') {
+ @diffcmd = (
+ $prog, 'diff', '--diff-cmd', '/usr/bin/diff', '--extensions',
+ '-wu'
+ );
+ } elsif ($prog eq 'svk') {
+ $ENV{'SVKDIFF'} = '/usr/bin/diff -w -u';
+ @diffcmd = ($prog, 'diff');
+ } elsif ($prog eq 'darcs') {
+ @diffcmd = ($prog, 'diff', '--diff-opts=-wu');
+ if ($onlydebian) {
+ push(@diffcmd, '--repodir=debian');
+ }
+ } else {
+ @diffcmd = ($prog, 'diff', '-w');
+ }
+
+ open CHLOG, '-|', @diffcmd, $changelog
+ or die "debcommit: cannot run $diffcmd[0]: $!\n";
+
+ foreach (<CHLOG>) {
+ next unless s/^\+( |\t)//;
+ next if /^\s*\[.*\]\s*$/; # maintainer name
+ $ret .= $_;
+ }
+
+ if (!length $ret) {
+ if ($release) {
+ return;
+ } else {
+ my $info = '';
+ if ($prog eq 'git') {
+ $info
+ = ' (do you mean "debcommit -a" or did you forget to run "git add"?)';
+ }
+ die
+"debcommit: unable to determine commit message using $prog$info\nTry using the -m flag.\n";
+ }
+ } else {
+ if ($prog =~ /^(git|hg|darcs)$/ and not $diffmode) {
+ my $count = () = $ret =~ /^\s*[\*\+-] /mg;
+
+ if ($count == 1) {
+ # Unfold
+ $ret =~ s/\n\s+/ /mg;
+ } else {
+ my $summary = '';
+
+ # We're constructing a message that can be used as a
+ # good starting point, the user will need to fine-tune it
+ $edit = 1;
+
+ $summary = $ret;
+ # Strip off the second and subsequent changes
+ $summary =~ s/(^\* .*?)^\s*[\*\+-] .*/$1/ms;
+ # Unfold
+ $summary =~ s/\n\s+/ /mg;
+
+ if ($prog eq 'git') {
+ $summary =~ s/^\* //;
+ $ret = $summary . "\n" . $ret;
+ } else {
+ # Strip off the first change so that we can prepend
+ # the unfolded version
+ $ret =~ s/^\* .*?(^\s*[\*\+-] .*)/$1\n/msg;
+ $ret = $summary . $ret;
+ }
+ }
+ }
+
+ if ($stripmessage or $prog eq 'git') {
+ my $count = () = $ret =~ /^[ \t]*[\*\+-] /mg;
+ if ($count == 1) {
+ $ret =~ s/^[ \t]*[\*\+-] //;
+ $ret =~ s/^[ \t]*//mg;
+ }
+ }
+ }
+ } else {
+ die "debcommit: unknown program $prog";
+ }
+
+ chomp $ret;
+ return $ret;
+}
+
+sub confirm {
+ my $confirmmessage = shift;
+ print $confirmmessage, "\n--\n";
+ while (1) {
+ print "OK to commit? [Y/n/e] ";
+ $_ = <STDIN>;
+ return 0 if /^n/i;
+ if (/^(y|$)/i) {
+ $message = $confirmmessage;
+ return 1;
+ } elsif (/^e/i) {
+ ($confirmmessage) = edit($confirmmessage);
+ print "\n", $confirmmessage, "\n--\n";
+ }
+ }
+}
+
+# The string returned by edit is chomp()ed, so anywhere we present that string
+# to the user again needs to have a \n tacked on to the end.
+sub edit {
+ my $message = shift;
+ my $fh = File::Temp->new(TEMPLATE => '.commit-tmp.XXXXXX')
+ || die "$progname: unable to create a temporary file.\n";
+ # Ensure the message we present to the user has an EOL on the last line.
+ chomp($message);
+ $fh->print("$message\n");
+ $fh->close();
+ my $mtime = (stat("$fh"))[9];
+ defined $mtime
+ || die
+"$progname: unable to retrieve modification time for temporary file: $!\n";
+ $mtime--;
+ utime $mtime, $mtime, $fh->filename;
+ system("sensible-editor $fh");
+ open(FH, '<', "$fh")
+ || die "$progname: unable to open temporary file for reading\n";
+ $message = "";
+
+ while (<FH>) {
+ $message .= $_;
+ }
+ close(FH);
+ my $newmtime = (stat("$fh"))[9];
+ defined $newmtime
+ || die
+"$progname: unable to retrieve modification time for updated temporary file: $!\n";
+ chomp $message;
+ return ($message, $mtime != $newmtime);
+}
+
+sub git_repo_has_commits {
+ my $command = "git rev-parse --verify --quiet HEAD >/dev/null";
+ system $command;
+ return ($? >> 8 == 0) ? 1 : 0;
+}
+
+=head1 LICENSE
+
+This code is copyright by Joey Hess <joeyh@debian.org>, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+
+=head1 AUTHOR
+
+Joey Hess <joeyh@debian.org>
+
+=head1 SEE ALSO
+
+B<debchange>(1), B<svnpath>(1)
+
+=cut
diff --git a/scripts/debdiff-apply b/scripts/debdiff-apply
new file mode 100755
index 0000000..aa4d8b8
--- /dev/null
+++ b/scripts/debdiff-apply
@@ -0,0 +1,382 @@
+#!/usr/bin/python3
+# Copyright (c) 2016-2017, Ximin Luo <infinity0@debian.org>
+#
+# 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.
+#
+# See file /usr/share/common-licenses/GPL-3 for more details.
+#
+
+# pylint: disable=invalid-name
+# pylint: enable=invalid-name
+
+"""
+Apply a debdiff to a Debian source package.
+
+It handles d/changelog hunks specially, to avoid conflicts.
+
+Depends on dpkg-dev, devscripts, python3-unidiff, quilt.
+"""
+
+import argparse
+import email.utils
+import hashlib
+import logging
+import os
+import shutil
+import subprocess
+import sys
+import tempfile
+import time
+
+try:
+ import unidiff
+except ImportError:
+ print(
+ "Please install 'python3-unidiff' in order to use this utility.",
+ file=sys.stderr,
+ )
+ sys.exit(1)
+from debian.changelog import ChangeBlock, Changelog
+
+# this can be any valid value, it doesn't appear in the final output
+DCH_DUMMY_TAIL = (
+ "\n -- debdiff-apply dummy tool <infinity0@debian.org> "
+ "Thu, 01 Jan 1970 00:00:00 +0000\n\n"
+)
+CHBLOCK_DUMMY_PACKAGE = "debdiff-apply PLACEHOLDER"
+TRY_ENCODINGS = ["utf-8", "latin-1"]
+DISTRIBUTION_DEFAULT = "experimental"
+
+
+def workaround_dpkg_865430(dscfile, origdir, stdout):
+ filename = subprocess.check_output(["dcmd", "--tar", "echo", dscfile]).rstrip()
+ if not os.path.exists(
+ os.path.join(origdir.encode("utf-8"), os.path.basename(filename))
+ ):
+ subprocess.check_call(["dcmd", "--tar", "cp", dscfile, origdir], stdout=stdout)
+
+
+def is_dch(path):
+ dirname = os.path.dirname(path)
+ return (
+ os.path.basename(path) == "changelog"
+ and os.path.basename(dirname) == "debian"
+ and os.path.dirname(os.path.dirname(dirname)) == ""
+ )
+
+
+def hunk_lines_to_str(hunk_lines):
+ return "".join(map(lambda x: str(x)[1:], hunk_lines))
+
+
+def read_dch_patch(dch_patch):
+ if len(dch_patch) > 1:
+ raise ValueError(
+ "don't know how to deal with debian/changelog patch "
+ "that has more than one hunk"
+ )
+ hunk = dch_patch[0]
+ source_str = hunk_lines_to_str(hunk.source_lines()) + DCH_DUMMY_TAIL
+ target_str = hunk_lines_to_str(hunk.target_lines())
+ # here we assume the debdiff has enough context to see the previous version
+ # this should be true all the time in practice
+ source_version = str(Changelog(source_str, 1)[0].version)
+ target = Changelog(target_str, 1)[0]
+ return source_version, target
+
+
+def apply_dch_patch(source_file, current, old_version, target, dry_run):
+ target_version = str(target.version)
+
+ if not old_version or not target_version.startswith(old_version):
+ logging.warning(
+ "don't know how to rebase version-change (%s => %s) onto %s",
+ old_version,
+ target_version,
+ old_version,
+ )
+ newlog = subprocess.getoutput("EDITOR=cat dch -n 2>/dev/null").rstrip()
+ version = str(Changelog(newlog, 1)[0].version)
+ logging.warning(
+ "using version %s based on `dch -n`; feel free to make me smarter", version
+ )
+ else:
+ version_suffix = target_version[len(old_version) :]
+ version = str(current[0].version) + version_suffix
+ logging.info("using version %s based on suffix %s", version, version_suffix)
+
+ if dry_run:
+ return version
+
+ current._blocks.insert(0, target) # pylint: disable=protected-access
+ current.set_version(version)
+
+ shutil.copy(source_file, source_file + ".new")
+ try:
+ # disable unspecified-encoding, as in Mattia's opinion this should
+ # likely be rewritten to use pure binary instead of encode/decode.
+ # pylint: disable=unspecified-encoding
+ with open(source_file + ".new", "w") as fp:
+ current.write_to_open_file(fp)
+ os.rename(source_file + ".new", source_file)
+ except Exception:
+ logging.warning("failed to patch %s", source_file)
+ logging.warning("half-applied changes in %s", source_file + ".new")
+ logging.warning("current working directory is %s", os.getcwd())
+ raise
+ return version
+
+
+def call_patch(patch_str, *args, check=True, **kwargs):
+ return subprocess.run(
+ ["patch", "-p1"] + list(args),
+ input=patch_str,
+ universal_newlines=True,
+ check=check,
+ **kwargs,
+ )
+
+
+def check_patch(patch_str, *args, **kwargs):
+ patch = call_patch(
+ patch_str,
+ "--dry-run",
+ "-f",
+ "--silent",
+ *args,
+ check=False,
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL,
+ **kwargs,
+ )
+ return patch.returncode == 0
+
+
+def debdiff_apply(patch, patch_name, args):
+ # don't change anything if...
+ dry_run = args.target_version or args.source_version
+
+ changelog = list(filter(lambda x: is_dch(x.path), patch))
+ if not changelog:
+ logging.info("no debian/changelog in patch: %s", args.patch_file)
+ old_version = None
+ target = ChangeBlock(
+ package=CHBLOCK_DUMMY_PACKAGE,
+ author=f"{os.getenv('DEBFULLNAME')} <{os.getenv('DEBEMAIL')}>",
+ date=email.utils.formatdate(time.time(), localtime=True),
+ version=None,
+ distributions=args.distribution,
+ urgency="low",
+ changes=["", f" * Rebase patch {patch_name}.", ""],
+ )
+ target.add_trailing_line("")
+ elif len(changelog) > 1:
+ raise ValueError("more than one debian/changelog patch???")
+ else:
+ patch.remove(changelog[0])
+ old_version, target = read_dch_patch(changelog[0])
+
+ if args.source_version:
+ if old_version:
+ print(old_version)
+ return False
+
+ # read this here so --source-version can work even without a d/changelog
+ with open(args.changelog, encoding="utf8") as fp:
+ current = Changelog(fp.read())
+ if target.package == CHBLOCK_DUMMY_PACKAGE:
+ target.package = current[0].package
+
+ if not dry_run:
+ patch_str = str(patch)
+ if check_patch(patch_str, "-N"):
+ call_patch(patch_str)
+ logging.info("patch %s applies!", patch_name)
+ elif check_patch(patch_str, "-R"):
+ logging.warning("patch %s already applied", patch_name)
+ return False
+ else:
+ call_patch(patch_str, "--dry-run", "-f")
+ raise ValueError(f"patch {patch_name} doesn't apply!")
+
+ # only apply d/changelog patch if the rest of the patch applied
+ new_version = apply_dch_patch(args.changelog, current, old_version, target, dry_run)
+ if args.target_version:
+ print(new_version)
+ return False
+
+ if args.repl:
+ import code # pylint: disable=import-outside-toplevel
+
+ code.interact(local=locals())
+
+ return True
+
+
+def parse_args(args):
+ parser = argparse.ArgumentParser(
+ description="Apply a debdiff to a Debian source package"
+ )
+ parser.add_argument(
+ "-v", "--verbose", action="store_true", help="Output more information"
+ )
+ parser.add_argument(
+ "-c",
+ "--changelog",
+ default="debian/changelog",
+ help="Path to debian/changelog; default: %(default)s",
+ )
+ parser.add_argument(
+ "-D",
+ "--distribution",
+ default="experimental",
+ help="Distribution to use, if the patch doesn't already "
+ "contain a changelog; default: %(default)s",
+ )
+ parser.add_argument(
+ "--repl", action="store_true", help="Run the python REPL after processing."
+ )
+ parser.add_argument(
+ "--source-version",
+ action="store_true",
+ help="Don't apply the patch; instead print out the version of the "
+ "package that it is supposed to be applied to, or nothing if "
+ "the patch does not specify a source version.",
+ )
+ parser.add_argument(
+ "--target-version",
+ action="store_true",
+ help="Don't apply the patch; instead print out the new version of the "
+ "package debdiff-apply(1) would generate, when the patch is applied to the "
+ "the given target package, as specified by the other arguments.",
+ )
+ parser.add_argument(
+ "orig_dsc_or_dir",
+ nargs="?",
+ default=".",
+ help="Target to apply the patch to. This can either be an unpacked "
+ "source tree, or a .dsc file. In the former case, the directory is "
+ "modified in-place; in the latter case, a second .dsc is created. "
+ "Default: %(default)s",
+ )
+ parser.add_argument(
+ "patch_file",
+ nargs="?",
+ default="/dev/stdin",
+ help="Patch file to apply, in the format output by debdiff(1)."
+ " Default: %(default)s",
+ )
+ group1 = parser.add_argument_group("Options for .dsc patch targets")
+ group1.add_argument(
+ "--no-clean",
+ action="store_true",
+ help="Don't clean temporary directories after a failure, so you can "
+ "examine what failed.",
+ )
+ group1.add_argument(
+ "--quilt-refresh",
+ action="store_true",
+ help="If the building of the new source package fails, try to refresh "
+ "patches using quilt(1) then try building it again.",
+ )
+ group1.add_argument(
+ "-d",
+ "--directory",
+ default=None,
+ help="Extract the .dsc into this directory, which won't be cleaned up "
+ "after debdiff-apply(1) exits. If not given, then it will be extracted to a "
+ "temporary directory.",
+ )
+ return parser.parse_args(args)
+
+
+def main(args):
+ # Split this function!
+ # pylint: disable=too-many-branches,too-many-locals,too-many-statements
+ args = parse_args(args)
+ if args.verbose:
+ logging.getLogger().setLevel(logging.DEBUG)
+
+ with open(args.patch_file, "rb") as fp:
+ data = fp.read()
+ for enc in TRY_ENCODINGS:
+ try:
+ patch = unidiff.PatchSet(data.splitlines(keepends=True), encoding=enc)
+ break
+ except Exception: # pylint: disable=broad-except
+ if enc == TRY_ENCODINGS[-1]:
+ raise
+ continue
+
+ hex_digest = hashlib.sha256(data).hexdigest()[
+ : 20 if args.patch_file == "/dev/stdin" else 8
+ ]
+ patch_name = f"{os.path.basename(args.patch_file)}:{hex_digest}"
+ quiet = args.source_version or args.target_version
+ dry_run = args.source_version or args.target_version
+ # user can redirect stderr themselves
+ stdout = subprocess.DEVNULL if quiet else None
+
+ # change directory before applying patches
+ if os.path.isdir(args.orig_dsc_or_dir):
+ os.chdir(args.orig_dsc_or_dir)
+ debdiff_apply(patch, patch_name, args)
+ elif os.path.isfile(args.orig_dsc_or_dir):
+ dscfile = args.orig_dsc_or_dir
+ parts = os.path.splitext(os.path.basename(dscfile))
+ if parts[1] != ".dsc":
+ raise ValueError(f"unrecognised patch target: {dscfile}")
+ extractdir = args.directory if args.directory else tempfile.mkdtemp()
+ if not os.path.isdir(extractdir):
+ os.makedirs(extractdir)
+ try:
+ # dpkg-source doesn't like existing dirs
+ builddir = os.path.join(extractdir, parts[0])
+ subprocess.check_call(
+ ["dpkg-source", "-x", "--skip-patches", dscfile, builddir],
+ stdout=stdout,
+ )
+ origdir = os.getcwd()
+ workaround_dpkg_865430(dscfile, origdir, stdout)
+ os.chdir(builddir)
+ did_patch = debdiff_apply(patch, patch_name, args)
+ if dry_run or not did_patch:
+ return
+ os.chdir(origdir)
+ try:
+ subprocess.check_call(["dpkg-source", "-b", builddir])
+ except subprocess.CalledProcessError:
+ if args.quilt_refresh:
+ subprocess.check_call(
+ [
+ "sh",
+ "-c",
+ """
+set -ex
+export QUILT_PATCHES=debian/patches
+while quilt push; do quilt refresh; done
+""",
+ ],
+ cwd=builddir,
+ )
+ subprocess.check_call(["dpkg-source", "-b", builddir])
+ else:
+ raise
+ finally:
+ cleandir = builddir if args.directory else extractdir
+ if args.no_clean:
+ logging.warning("you should clean up temp files in %s", cleandir)
+ else:
+ shutil.rmtree(cleandir)
+
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv[1:]))
diff --git a/scripts/debdiff-apply.1 b/scripts/debdiff-apply.1
new file mode 100644
index 0000000..cae8fbd
--- /dev/null
+++ b/scripts/debdiff-apply.1
@@ -0,0 +1,112 @@
+.\" Copyright (c) 2016-2017, Ximin Luo <infinity0@debian.org>
+.\"
+.\" 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.
+.\"
+.\" See file /usr/share/common-licenses/GPL-3 for more details.
+.\"
+.TH "DEBDIFF\-APPLY" 1 "Debian Utilities" "DEBIAN"
+
+.SH NAME
+debdiff-apply \- apply a debdiff to a Debian source package
+
+.SH SYNOPSIS
+.B debdiff-apply
+[options] [orig_dsc_or_dir] [patch_file]
+.br
+.B debdiff-apply
+[options] < [patch_file]
+
+.SH DESCRIPTION
+.B debdiff-apply
+takes a \fIpatchfile\fR that describes the differences between two Debian
+source packages \fIold\fR and \fInew\fR, and applies it to a target Debian
+source package \fIorig\fR.
+.PP
+\fIorig\fR could either be the same as \fIold\fR or it could be different.
+\fIpatchfile\fR is expected to be a unified diff between two Debian source
+trees, as what
+.BR debdiff (1)
+normally generates.
+.PP
+Any changes to \fIdebian/changelog\fR are dealt with specially, to avoid the
+conflicts that changelog diffs typically produce when applied naively. The
+exact behaviour may be tweaked in the future, so one should not rely on it.
+.PP
+If \fIpatchfile\fR does not apply to \fIorig\fR, even after the special-casing
+of \fIdebian/changelog\fR, no changes are made and
+.BR debdiff-apply (1)
+will exit with a non-zero error code.
+
+.SH ARGUMENTS
+.TP
+orig_dsc_or_dir
+Target to apply the patch to. This can either be an unpacked source tree, or a
+\[char46]dsc file. In the former case, the directory is modified in\-place; in
+the latter case, a second .dsc is created. Default: \fI.\fP
+.TP
+patch_file
+Patch file to apply, in the format output by
+.BR debdiff (1).
+Default:
+\fI\,/dev/stdin\/\fP
+
+.SH OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+show this help message and exit
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Output more information
+.TP
+\fB\-c\fR CHANGELOG, \fB\-\-changelog\fR CHANGELOG
+Path to debian/changelog; default: debian/changelog
+.TP
+\fB\-D\fR DISTRIBUTION, \fB\-\-distribution\fR DISTRIBUTION
+Distribution to use, if the patch doesn't already contain a changelog; default:
+experimental
+.TP
+\fB\-\-repl\fR
+Run the python REPL after processing.
+.TP
+\fB\-\-source\-version\fR
+Don't apply the patch; instead print out the version of the package that it is
+supposed to be applied to, or nothing if the patch does not specify a source
+version.
+.TP
+\fB\-\-target\-version\fR
+Don't apply the patch; instead print out the new version of the package
+.BR debdiff-apply (1)
+would generate, when the patch is applied to the the given target
+package, as specified by the other arguments.
+.SS "For .dsc patch targets:"
+.TP
+\fB\-\-no\-clean\fR
+Don't clean temporary directories after a failure, so you can examine what
+failed.
+.TP
+\fB\-\-quilt\-refresh\fR
+If the building of the new source package fails, try to refresh patches using
+.BR quilt (1)
+then try building it again.
+.TP
+\fB\-d\fR DIRECTORY, \fB\-\-directory\fR DIRECTORY
+Extract the .dsc into this directory, which won't be cleaned up after
+.BR debdiff-apply (1)
+exits. If not given, then it will be extracted to a temporary directory.
+
+.SH AUTHORS
+\fBdebdiff-apply\fR and this manual page were written by Ximin Luo
+<infinity0@debian.org>
+.PP
+Both are released under the GNU General Public License, version 3 or later.
+
+.SH SEE ALSO
+.BR debdiff (1)
diff --git a/scripts/debdiff.1 b/scripts/debdiff.1
new file mode 100644
index 0000000..b2781a7
--- /dev/null
+++ b/scripts/debdiff.1
@@ -0,0 +1,264 @@
+.TH DEBDIFF 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debdiff \- compare file lists in two Debian packages
+.SH SYNOPSIS
+\fBdebdiff\fR [\fIoptions\fR] \fR
+.br
+\fBdebdiff\fR [\fIoptions\fR] ... \fIdeb1 deb2\fR
+.br
+\fBdebdiff\fR [\fIoptions\fR] ... \fIchanges1 changes2\fR
+.br
+\fBdebdiff\fR [\fIoptions\fR] ... \fB\-\-from \fIdeb1a deb1b ...
+\fB\-\-to \fIdeb2a deb2b ...\fR
+.br
+\fBdebdiff\fR [\fIoptions\fR] ... \fIdsc1 dsc2\fR
+.SH DESCRIPTION
+\fBdebdiff\fR takes the names of two Debian package files (\fI.deb\fRs
+or \fI.udeb\fRs) on the command line and compares their contents
+(considering only the files in the main package, not the maintenance
+scripts). It shows which files have been introduced and which removed
+between the two package files, and is therefore useful for spotting
+files which may have been inadvertently lost between revisions of the
+package. It also checks the file owners and permissions, and compares
+the control files of the two packages using the \fBwdiff\fR program.
+If you want a deeper comparison of two Debian package files you can
+use the \fBdiffoscope\fR tool.
+.PP
+If no arguments are given, \fBdebdiff\fR tries to compare the content
+of the current source directory with the last version of the package.
+.PP
+\fBdebdiff\fR can also handle changes between groups of \fI.deb\fR
+files in two ways. The first is to specify two \fI.changes\fR files.
+In this case, the \fI.deb\fR files listed in the \fI.changes\fR file
+will be compared, by taking the contents of all of the
+listed \fI.deb\fR files together. (The \fI.deb\fR files listed are
+assumed to be in the same directory as the \fI.changes\fR file.) The
+second way is to list the \fI.deb\fR files of interest specifically
+using the \fB\-\-from\fR ... \fB\-\-to\fR syntax. These both help if
+a package is broken up into smaller packages and one wishes to ensure
+that nothing is lost in the interim.
+.PP
+\fBdebdiff\fR examines the \fBdevscripts\fR configuration files as
+described below. Command line options override the configuration file
+settings, though.
+.PP
+If \fBdebdiff\fR is passed two source packages (\fI.dsc\fR files) it
+will compare the contents of the source packages. If the source
+packages differ only in Debian revision number (that is,
+the \fI.orig.tar.gz\fR files are the same in the two \fI.dsc\fR
+files), then \fBinterdiff\fR(1) will be used to compare the two patch
+files if this program is available on the system, otherwise a
+\fBdiff\fR will be performed between the two source trees.
+.SH OPTIONS
+.TP
+.BR \-\-dirs ", " \-d
+The default mode of operation is to ignore directory names which
+appear in the file list, but they, too, will be considered if this
+option is given.
+.TP
+.B \-\-nodirs
+Ignore directory names which appear in the file list. This is the
+default and it can be used to override a configuration file setting.
+.TP
+.BI \-\-move " FROM TO" "\fR,\fP \-m" " FROM TO"
+It sometimes occurs that various files or directories are moved around
+between revisions. This can be handled using this option. There are
+two arguments, the first giving the location of the directory or file
+in the first package, and the second in the second. Any files in the
+first listing whose names begin with the first argument are treated as
+having that substituted for the second argument when the file lists
+are compared. Any number of \fB\-\-move\fR arguments may be given;
+they are processed in the order in which they appear. This only affects
+comparing binary packages, not source packages.
+.TP
+.BI \-\-move\-regex " FROM TO"
+This is the same as \fB\-\-move\fR, except that \fIFROM\fR is treated
+as a regular expression and the \fBperl\fR substitution command
+\fIs/^FROM/TO/\fR is applied to the files. In particular, TO can make
+use of backreferences such as $1.
+.TP
+.B \-\-nocontrol
+\fBdebdiff\fR will usually compare the respective control files of the
+packages using \fBwdiff\fR(1). This option suppresses this part of
+the processing.
+.TP
+.B \-\-control
+Compare the respective control files; this is the default, and it can
+be used to override a configuration file setting.
+.TP
+.BI \-\-controlfiles " FILE\fR[\fP", "FILE\fR ...]\fP"
+Specify which control files to compare; by default this is just
+\fIcontrol\fR, but could include \fIpostinst\fR, \fIconfig\fR and so
+on. Files will only be compared if they are present in both
+\fI.debs\fR being compared. The special value \fIALL\fR compares all
+control files present in both packages, except for md5sums. This
+option can be used to override a configuration file setting.
+.TP
+.B \-\-wdiff\-source\-control
+When processing source packages, compare control files using \fBwdiff\fR.
+Equivalent to the \fB\-\-control\fR option for binary packages.
+.TP
+.B \-\-no\-wdiff\-source\-control
+Do not compare control files in source packages using \fBwdiff\fR. This
+is the default.
+.TP
+.BR \-\-wp ", " \-\-wl ", " \-\-wt
+Pass a \fB\-p\fR, \fB\-l\fR or \fB\-t\fR option to \fBwdiff\fR
+respectively. (This yields the whole \fBwdiff\fR output rather than
+just the lines with any changes.)
+.TP
+.B \-\-show-moved
+If multiple \fI.deb\fR files are specified on the command line, either
+using \fI.changes\fR files or the \fB\-\-from\fR/\fB\-\-to\fR syntax,
+then this option will also show which files (if any) have moved
+between packages. (The package names are simply determined from the
+names of the \fI.deb\fR files.)
+.TP
+.B \-\-noshow-moved
+The default behaviour; can be used to override a configuration file
+setting.
+.TP
+.BI \-\-renamed " FROM TO"
+If \fB\-\-show-moved\fR is being used and a package has been renamed
+in the process, this command instructs \fBdebdiff\fR to treat the
+package in the first list called \fIFROM\fR as if it were called
+\fITO\fR. Multiple uses of this option are permitted.
+.TP
+.BI \-\-exclude " PATTERN"
+Exclude files whose basenames match \fIPATTERN\fR.
+Multiple uses of this option are permitted.
+Note that this option is passed on to \fBdiff\fR and has the same
+behaviour, so only the basename of the file is considered:
+in particular, \fB--exclude='*.patch'\fR will work, but
+\fB--exclude='debian/patches/*'\fR will have no practical effect.
+.TP
+.B \-\-diffstat
+Include the result of \fBdiffstat\fR before the generated diff.
+.TP
+.B \-\-no\-diffstat
+The default behaviour; can be used to override a configuration file
+setting.
+.TP
+.B \-\-auto\-ver\-sort
+When comparing source packages, do so in version order.
+.TP
+.B \-\-no\-auto\-ver\-sort
+Compare source packages in the order they were passed on the
+command-line, even if that means comparing a package with a higher
+version against one with a lower version. This is the default
+behaviour.
+.TP
+.B \-\-unpack\-tarballs
+When comparing source packages, also unpack tarballs found in the top level
+source directory to compare their contents along with the other files.
+This is the default behaviour.
+.TP
+.B \-\-no\-unpack\-tarballs
+Do not unpack tarballs inside source packages.
+.TP
+.B \-\-apply\-patches
+If the old and/or new package is in 3.0 (quilt) format, apply the
+quilt patches (and remove \fB.pc/\fR) before comparison.
+.TP
+.B \-\-no\-apply\-patches, \-\-noapply\-patches
+If the old and/or new package is in 3.0 (quilt) format, do not apply the
+quilt patches before comparison. This is the default behaviour.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+\fB\-\-debs\-dir\fR \fIdirectory\fR
+Look for the \fI.dsc\fR files in \fIdirectory\fR
+instead of the parent of the source directory. This should
+either be an absolute path or relative to the top of the source
+directory.
+.TP
+.BR \-\-help ", " \-h
+Show a summary of options.
+.TP
+.BR \-\-version ", " \-v
+Show version and copyright information.
+.TP
+.BR \-\-quiet ", " \-q
+Be quiet if no differences were found.
+.TP
+.BR \-\-ignore\-space ", " \-w
+Ignore whitespace in diffs.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced by a shell in that order to set
+configuration variables. Command line options can be used to override
+configuration file settings. Environment variable settings are
+ignored for this purpose. The currently recognised variables are:
+.TP
+.B DEBDIFF_DIRS
+If this is set to \fIyes\fR, then it is the same as the
+\fB\-\-dirs\fR command line parameter being used.
+.TP
+.B DEBDIFF_CONTROL
+If this is set to \fIno\fR, then it is the same as the
+\fB\-\-nocontrol\fR command line parameter being used. The default is
+\fIyes\fR.
+.TP
+.B DEBDIFF_CONTROLFILES
+Which control files to compare, corresponding to the
+\fB\-\-controlfiles\fR command line option. The default is
+\fIcontrol\fR.
+.TP
+.B DEBDIFF_SHOW_MOVED
+If this is set to \fIyes\fR, then it is the same as the
+\fB\-\-show\-moved\fR command line parameter being used.
+.TP
+.B DEBDIFF_WDIFF_OPT
+This option will be passed to \fBwdiff\fR; it should be one of
+\fB\-p\fR, \fB\-l\fR or \fB\-t\fR.
+.TP
+.B DEBDIFF_SHOW_DIFFSTAT
+If this is set to \fIyes\fR, then it is the same as the
+\fB\-\-diffstat\fR command line parameter being used.
+.TP
+.B DEBDIFF_WDIFF_SOURCE_CONTROL
+If this is set to \fIyes\fR, then it is the same as the
+\fB\-\-wdiff\-source\-control\fR command line parameter being used.
+.TP
+.B DEBDIFF_AUTO_VER_SORT
+If this is set to \fIyes\fR, then it is the same as the
+\fB\-\-auto\-ver\-sort\fR command line parameter being used.
+.TP
+.B DEBDIFF_UNPACK_TARBALLS
+If this is set to \fIno\fR, then it is the same as the
+\fB\-\-no\-unpack\-tarballs\fR command line parameter being used.
+.TP
+.B DEBDIFF_APPLY_PATCHES
+If this is set to \fIyes\fR, then it is the same as the
+\fB\-\-apply\-patches\fR command line parameter being used.
+The default is \fIno\fR.
+.TP
+.B DEBRELEASE_DEBS_DIR
+This specifies the directory in which to look for the \fI.dsc\fR
+and files, and is either an absolute path or relative to
+the top of the source tree. This corresponds to the
+\fB\-\-debs\-dir\fR command line option. This directive could be
+used, for example, if you always use \fBpbuilder\fR or
+\fBsvn-buildpackage\fR to build your packages. Note that it also
+affects \fBdebrelease\fR(1) in the same way, hence the strange name of
+the option.
+.SH "EXIT VALUES"
+Normally the exit value will be 0 if no differences are reported and 1
+if any are reported. If there is some fatal error, the exit code will
+be 255.
+.SH "SEE ALSO"
+.BR debdiff-apply (1),
+.BR diffstat (1),
+.BR dpkg-deb (1),
+.BR interdiff (1),
+.BR wdiff (1),
+.BR devscripts.conf (5),
+.BR diffoscope (1)
+.SH AUTHOR
+\fBdebdiff\fR was originally written as a shell script by Yann Dirson
+<dirson@debian.org> and rewritten in Perl with many more features by
+Julian Gilbey <jdg@debian.org>. The software may be freely
+redistributed under the terms and conditions of the GNU General Public
+License, version 2.
diff --git a/scripts/debdiff.bash_completion b/scripts/debdiff.bash_completion
new file mode 100644
index 0000000..d6f373c
--- /dev/null
+++ b/scripts/debdiff.bash_completion
@@ -0,0 +1,154 @@
+# /usr/share/bash-completion/completions/debdiff
+# Bash command completion for ‘debdiff(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+# This is free software, and you are welcome to redistribute it under
+# certain conditions; see the end of this file for copyright
+# information, grant of license, and disclaimer of warranty.
+
+_have debdiff &&
+_debdiff () {
+ local cur prev words cword
+ _init_completion || return
+
+ local i
+ local command_name=debdiff
+ local options=(
+ -h --help -v --version
+ -q --quiet
+ -d --dirs --nodirs
+ -w --ignore-space
+ --diffstat --no-diffstat
+ --auto-ver-sort --no-auto-ver-sort
+ --unpack-tarballs --no-unpack-tarballs
+ --apply-patches --no-apply-patches
+ --control --nocontrol --controlfiles
+ --wdiff-source-control --no-wdiff-source-control --wp --wl --wt
+ --show-moved --noshow-moved --renamed
+ --debs-dir
+ --from
+ --move --move-regex
+ --exclude
+ )
+
+ local file_list_mode=normal
+ local -i move_from=-1
+ local -i move_to=-1
+
+ unset COMPREPLY
+
+ case "$prev" in
+ "$command_name")
+ options+=( --noconf --no-conf )
+ ;;
+
+ --debs-dir)
+ COMPREPLY=( $( compgen -A directory -- "$cur" ) )
+ ;;
+
+ esac
+
+ if [[ -v COMPREPLY ]] ; then
+ return 0
+ fi
+
+ for (( i=1; i<${#words[@]}; i++ )); do
+ if [[ $file_list_mode == @(deb|dsc|changes) ]]; then
+ if (( i == ${#words[@]}-1 )); then
+ break
+ else
+ COMPREPLY=()
+ return 0
+ fi
+ fi
+ if (( ${move_from} == -1 && ${move_to} == -1 )); then
+ file_list_mode=normal
+ elif (( ${move_from} >= 0 && ${move_to} == -1 )); then
+ file_list_mode=from
+ elif (( ${move_from} >= 0 && ${move_to} >= 0 && ${move_to} < ${move_from} )); then
+ file_list_mode=to
+ else
+ COMPREPLY=()
+ return 0
+ fi
+ if [[ $file_list_mode == normal && ${words[i]} == --from ]]; then
+ move_from=0
+ file_list_mode=from
+ elif [[ $file_list_mode == normal && ${words[i]} == *.deb ]]; then
+ file_list_mode=deb
+ elif [[ $file_list_mode == normal && ${words[i]} == *.udeb ]]; then
+ file_list_mode=deb
+ elif [[ $file_list_mode == normal && ${words[i]} == *.dsc ]]; then
+ file_list_mode=dsc
+ elif [[ $file_list_mode == normal && ${words[i]} == *.changes ]]; then
+ file_list_mode=changes
+ elif [[ $file_list_mode == from && ${words[i]} == *.deb ]]; then
+ (( ++move_from ))
+ elif [[ $file_list_mode == from && ${words[i]} == *.udeb ]]; then
+ (( ++move_from ))
+ elif [[ $file_list_mode == from && ${words[i]} == --to ]]; then
+ move_to=0
+ file_list_mode=to
+ elif [[ $file_list_mode = to && ${words[i]} == *.deb ]]; then
+ (( ++move_to ))
+ elif [[ $file_list_mode = to && ${words[i]} == *.udeb ]]; then
+ (( ++move_to ))
+ fi
+ done
+
+ case $file_list_mode in
+ normal)
+ if [[ $prev == --debs-dir ]]; then
+ COMPREPLY=( $( compgen -G "${cur}*" ) )
+ compopt -o dirnames
+ elif [[ $cur == -* ]]; then
+ COMPREPLY=( $( compgen -W "${options[*]}" -- "$cur" ) )
+ else
+ COMPREPLY=( $( compgen -G "${cur}*.@(deb|udeb|dsc|changes)" ) )
+ compopt -o filenames
+ compopt -o plusdirs
+ fi
+ ;;
+ deb|from|to)
+ COMPREPLY=( $( compgen -G "${cur}*.deb" "${cur}*.udeb" ) )
+ if (( $move_from > 0 && $move_to < 0 )) ; then
+ COMPREPLY+=( $( compgen -W "--to" -- "$cur" ) )
+ fi
+ compopt -o filenames
+ compopt -o plusdirs
+ ;;
+ dsc)
+ COMPREPLY=( $( compgen -G "${cur}*.dsc" ) )
+ compopt -o filenames
+ compopt -o plusdirs
+ ;;
+ changes)
+ COMPREPLY=( $( compgen -G "${cur}*.changes" ) )
+ compopt -o filenames
+ compopt -o plusdirs
+ ;;
+ *)
+ COMPREPLY=( $( compgen -W "${options[*]}" -- "$cur" ) )
+ ;;
+ esac
+
+ return 0
+
+} &&
+complete -F _debdiff debdiff
+
+
+# Copyright © 2016–2017 Ben Finney <ben+debian@benfinney.id.au>
+# Copyright © 2015 Nicholas Bamber <nicholas@periapt.co.uk>
+#
+# This is free software: you may copy, modify, and/or distribute this work
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; version 2 of that license or any later version.
+# No warranty expressed or implied. See the file ‘LICENSE.GPL-2’ for details.
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/debdiff.pl b/scripts/debdiff.pl
new file mode 100755
index 0000000..4bcffc1
--- /dev/null
+++ b/scripts/debdiff.pl
@@ -0,0 +1,1239 @@
+#!/usr/bin/perl
+
+# Original shell script version:
+# Copyright 1998,1999 Yann Dirson <dirson@debian.org>
+# Perl version:
+# Copyright 1999,2000,2001 by Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2 ONLY,
+# as published by the Free Software Foundation.
+#
+# 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.
+
+use 5.006_000;
+use strict;
+use warnings;
+use Cwd;
+use Dpkg::IPC;
+use File::Copy qw(cp move);
+use File::Basename;
+use File::Spec;
+use File::Path qw/ rmtree /;
+use File::Temp qw/ tempdir tempfile /;
+use Devscripts::Compression;
+use Devscripts::Versort;
+
+# Predeclare functions
+sub wdiff_control_files($$$$$);
+sub process_debc($$);
+sub process_debI($);
+sub mktmpdirs();
+sub fatal(@);
+
+my $progname = basename($0);
+my $modified_conf_msg;
+my $exit_status = 0;
+my $dummyname = "---DUMMY---";
+
+my $compression_re = compression_get_file_extension_regex();
+
+sub usage {
+ print <<"EOF";
+Usage: $progname [option]
+ or: $progname [option] ... deb1 deb2
+ or: $progname [option] ... changes1 changes2
+ or: $progname [option] ... dsc1 dsc2
+ or: $progname [option] ... --from deb1a deb1b ... --to deb2a deb2b ...
+Valid options are:
+ --no-conf, --noconf
+ Don\'t read devscripts config files;
+ must be the first option given
+ --help, -h Display this message
+ --version, -v Display version and copyright info
+ --move FROM TO, The prefix FROM in first packages has
+ -m FROM TO been renamed TO in the new packages
+ only affects comparing binary packages
+ (multiple permitted)
+ --move-regex FROM TO, The prefix FROM in first packages has
+ been renamed TO in the new packages
+ only affects comparing binary packages
+ (multiple permitted), using regexp substitution
+ --dirs, -d Note changes in directories as well as files
+ --nodirs Do not note changes in directories (default)
+ --nocontrol Skip comparing control files
+ --control Do compare control files
+ --controlfiles FILE,FILE,...
+ Which control files to compare; default is just
+ control; could include preinst, etc, config or
+ ALL to compare all control files present
+ --wp, --wl, --wt Pass the option -p, -l, -t respectively to wdiff
+ (only one should be used)
+ --wdiff-source-control When processing source packages, compare control
+ files as with --control for binary packages
+ --no-wdiff-source-control
+ Do not do so (default)
+ --show-moved Indicate also all files which have moved
+ between packages
+ --noshow-moved Do not also indicate all files which have moved
+ between packages (default)
+ --renamed FROM TO The package formerly called FROM has been
+ renamed TO; only of interest with --show-moved
+ (multiple permitted)
+ --quiet, -q Be quiet if no differences were found
+ --exclude PATTERN Exclude files whose basenames match PATTERN
+ --ignore-space, -w Ignore whitespace in diffs
+ --diffstat Include the result of diffstat before the diff
+ --no-diffstat Do not do so (default)
+ --auto-ver-sort When comparing source packages, ensure the
+ comparison is performed in version order
+ --no-auto-ver-sort Do not do so (default)
+ --unpack-tarballs Unpack tarballs found in the top level source
+ directory (default)
+ --no-unpack-tarballs Do not do so
+ --apply-patches If either old or new package is in 3.0 (quilt)
+ format, apply the patch series and remove .pc
+ before comparison
+ --no-apply-patches Do not do so (default)
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+
+Use the diffoscope package for deeper comparisons of .deb files.
+EOF
+}
+
+my $version = <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1999,2000,2001 by Julian Gilbey <jdg\@debian.org>,
+based on original code which is copyright 1998,1999 by
+Yann Dirson <dirson\@debian.org>
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 ONLY.
+EOF
+
+# Start by setting default values
+
+my $debsdir;
+my $debsdir_warning;
+my $ignore_dirs = 1;
+my $compare_control = 1;
+my $controlfiles = 'control';
+my $show_moved = 0;
+my $wdiff_opt = '';
+my @diff_opts = ();
+my $show_diffstat = 0;
+my $wdiff_source_control = 0;
+my $auto_ver_sort = 0;
+my $unpack_tarballs = 1;
+my $apply_patches = 0;
+
+my $quiet = 0;
+
+# Next, read read configuration files and then command line
+# The next stuff is boilerplate
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'DEBDIFF_DIRS' => 'no',
+ 'DEBDIFF_CONTROL' => 'yes',
+ 'DEBDIFF_CONTROLFILES' => 'control',
+ 'DEBDIFF_SHOW_MOVED' => 'no',
+ 'DEBDIFF_WDIFF_OPT' => '',
+ 'DEBDIFF_SHOW_DIFFSTAT' => 'no',
+ 'DEBDIFF_WDIFF_SOURCE_CONTROL' => 'no',
+ 'DEBDIFF_AUTO_VER_SORT' => 'no',
+ 'DEBDIFF_UNPACK_TARBALLS' => 'yes',
+ 'DEBDIFF_APPLY_PATCHES' => 'no',
+ 'DEBRELEASE_DEBS_DIR' => '..',
+ );
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= "$var='$config_vars{$var}';\n";
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ # Check validity
+ $config_vars{'DEBDIFF_DIRS'} =~ /^(yes|no)$/
+ or $config_vars{'DEBDIFF_DIRS'} = 'no';
+ $config_vars{'DEBDIFF_CONTROL'} =~ /^(yes|no)$/
+ or $config_vars{'DEBDIFF_CONTROL'} = 'yes';
+ $config_vars{'DEBDIFF_SHOW_MOVED'} =~ /^(yes|no)$/
+ or $config_vars{'DEBDIFF_SHOW_MOVED'} = 'no';
+ $config_vars{'DEBDIFF_SHOW_DIFFSTAT'} =~ /^(yes|no)$/
+ or $config_vars{'DEBDIFF_SHOW_DIFFSTAT'} = 'no';
+ $config_vars{'DEBDIFF_WDIFF_SOURCE_CONTROL'} =~ /^(yes|no)$/
+ or $config_vars{'DEBDIFF_WDIFF_SOURCE_CONTROL'} = 'no';
+ $config_vars{'DEBDIFF_AUTO_VER_SORT'} =~ /^(yes|no)$/
+ or $config_vars{'DEBDIFF_AUTO_VER_SORT'} = 'no';
+ $config_vars{'DEBDIFF_UNPACK_TARBALLS'} =~ /^(yes|no)$/
+ or $config_vars{'DEBDIFF_UNPACK_TARBALLS'} = 'yes';
+ $config_vars{'DEBDIFF_APPLY_PATCHES'} =~ /^(yes|no)$/
+ or $config_vars{'DEBDIFF_APPLY_PATCHES'} = 'no';
+ # We do not replace this with a default directory to avoid accidentally
+ # installing a broken package
+ $config_vars{'DEBRELEASE_DEBS_DIR'} =~ s%/+%/%;
+ $config_vars{'DEBRELEASE_DEBS_DIR'} =~ s%(.)/$%$1%;
+ $debsdir_warning
+ = "config file specified DEBRELEASE_DEBS_DIR directory $config_vars{'DEBRELEASE_DEBS_DIR'} does not exist!";
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $debsdir = $config_vars{'DEBRELEASE_DEBS_DIR'};
+ $ignore_dirs = $config_vars{'DEBDIFF_DIRS'} eq 'yes' ? 0 : 1;
+ $compare_control = $config_vars{'DEBDIFF_CONTROL'} eq 'no' ? 0 : 1;
+ $controlfiles = $config_vars{'DEBDIFF_CONTROLFILES'};
+ $show_moved = $config_vars{'DEBDIFF_SHOW_MOVED'} eq 'yes' ? 1 : 0;
+ $wdiff_opt = $config_vars{'DEBDIFF_WDIFF_OPT'} =~ /^-([plt])$/ ? $1 : '';
+ $show_diffstat = $config_vars{'DEBDIFF_SHOW_DIFFSTAT'} eq 'yes' ? 1 : 0;
+ $wdiff_source_control
+ = $config_vars{'DEBDIFF_WDIFF_SOURCE_CONTROL'} eq 'yes' ? 1 : 0;
+ $auto_ver_sort = $config_vars{'DEBDIFF_AUTO_VER_SORT'} eq 'yes' ? 1 : 0;
+ $unpack_tarballs
+ = $config_vars{'DEBDIFF_UNPACK_TARBALLS'} eq 'yes' ? 1 : 0;
+ $apply_patches = $config_vars{'DEBDIFF_APPLY_PATCHES'} eq 'yes' ? 1 : 0;
+
+}
+
+# Are they a pair of debs, changes or dsc files, or a list of debs?
+my $type = '';
+my @excludes = ();
+my @move = ();
+my %renamed = ();
+my $opt_debsdir;
+
+# handle command-line options
+
+while (@ARGV) {
+ if ($ARGV[0] =~ /^(--help|-h)$/) { usage(); exit 0; }
+ if ($ARGV[0] =~ /^(--version|-v)$/) { print $version; exit 0; }
+ if ($ARGV[0] =~ /^(--move(-regex)?|-m)$/) {
+ fatal
+"Malformed command-line option $ARGV[0]; run $progname --help for more info"
+ unless @ARGV >= 3;
+
+ my $regex = $ARGV[0] eq '--move-regex' ? 1 : 0;
+ shift @ARGV;
+
+ # Ensure from and to values all begin with a slash
+ # dpkg -c produces filenames such as ./usr/lib/filename
+ my $from = shift;
+ my $to = shift;
+ $from =~ s%^\./%/%;
+ $to =~ s%^\./%/%;
+
+ if ($regex) {
+ # quote ':' in the from and to patterns;
+ # used later as a pattern delimiter
+ $from =~ s/:/\\:/g;
+ $to =~ s/:/\\:/g;
+ }
+ push @move, [$regex, $from, $to];
+ } elsif ($ARGV[0] eq '--renamed') {
+ fatal
+"Malformed command-line option $ARGV[0]; run $progname --help for more info"
+ unless @ARGV >= 3;
+ shift @ARGV;
+
+ my $from = shift;
+ my $to = shift;
+ $renamed{$from} = $to;
+ } elsif ($ARGV[0] eq '--exclude') {
+ fatal
+"Malformed command-line option $ARGV[0]; run $progname --help for more info"
+ unless @ARGV >= 2;
+ shift @ARGV;
+
+ my $exclude = shift;
+ push @excludes, $exclude;
+ } elsif ($ARGV[0] =~ s/^--exclude=//) {
+ my $exclude = shift;
+ push @excludes, $exclude;
+ } elsif ($ARGV[0] eq '--controlfiles') {
+ fatal
+"Malformed command-line option $ARGV[0]; run $progname --help for more info"
+ unless @ARGV >= 2;
+ shift @ARGV;
+
+ $controlfiles = shift;
+ } elsif ($ARGV[0] =~ s/^--controlfiles=//) {
+ $controlfiles = shift;
+ } elsif ($ARGV[0] eq '--debs-dir') {
+ fatal
+"Malformed command-line option $ARGV[0]; run $progname --help for more info"
+ unless @ARGV >= 2;
+ shift @ARGV;
+
+ $opt_debsdir = shift;
+ } elsif ($ARGV[0] =~ s/^--debs-dir=//) {
+ $opt_debsdir = shift;
+ } elsif ($ARGV[0] =~ /^(--dirs|-d)$/) {
+ $ignore_dirs = 0;
+ shift;
+ } elsif ($ARGV[0] eq '--nodirs') {
+ $ignore_dirs = 1;
+ shift;
+ } elsif ($ARGV[0] =~ /^(--quiet|-q)$/) {
+ $quiet = 1;
+ shift;
+ } elsif ($ARGV[0] =~ /^(--show-moved|-s)$/) {
+ $show_moved = 1;
+ shift;
+ } elsif ($ARGV[0] eq '--noshow-moved') {
+ $show_moved = 0;
+ shift;
+ } elsif ($ARGV[0] eq '--nocontrol') {
+ $compare_control = 0;
+ shift;
+ } elsif ($ARGV[0] eq '--control') {
+ $compare_control = 1;
+ shift;
+ } elsif ($ARGV[0] eq '--from') {
+ $type = 'debs';
+ last;
+ } elsif ($ARGV[0] =~ /^--w([plt])$/) {
+ $wdiff_opt = "-$1";
+ shift;
+ } elsif ($ARGV[0] =~ /^(--ignore-space|-w)$/) {
+ push @diff_opts, "-w";
+ shift;
+ } elsif ($ARGV[0] eq '--diffstat') {
+ $show_diffstat = 1;
+ shift;
+ } elsif ($ARGV[0] =~ /^--no-?diffstat$/) {
+ $show_diffstat = 0;
+ shift;
+ } elsif ($ARGV[0] eq '--wdiff-source-control') {
+ $wdiff_source_control = 1;
+ shift;
+ } elsif ($ARGV[0] =~ /^--no-?wdiff-source-control$/) {
+ $wdiff_source_control = 0;
+ shift;
+ } elsif ($ARGV[0] eq '--auto-ver-sort') {
+ $auto_ver_sort = 1;
+ shift;
+ } elsif ($ARGV[0] =~ /^--no-?auto-ver-sort$/) {
+ $auto_ver_sort = 0;
+ shift;
+ } elsif ($ARGV[0] eq '--unpack-tarballs') {
+ $unpack_tarballs = 1;
+ shift;
+ } elsif ($ARGV[0] =~ /^--no-?unpack-tarballs$/) {
+ $unpack_tarballs = 0;
+ shift;
+ } elsif ($ARGV[0] eq '--apply-patches') {
+ $apply_patches = 1;
+ shift;
+ } elsif ($ARGV[0] =~ /^--no-?apply-patches$/) {
+ $apply_patches = 0;
+ shift;
+ } elsif ($ARGV[0] =~ /^--no-?conf$/) {
+ fatal "--no-conf is only acceptable as the first command-line option!";
+ }
+
+ # Not a recognised option
+ elsif ($ARGV[0] =~ /^-/) {
+ fatal
+"Unrecognised command-line option $ARGV[0]; run $progname --help for more info";
+ } else {
+ # End of command line options
+ last;
+ }
+}
+
+for my $exclude (@excludes) {
+ if ($exclude =~ m{/}) {
+ print STDERR
+"$progname: warning: --exclude patterns are matched against the basename, so --exclude='$exclude' will not exclude anything\n";
+ }
+}
+
+my $guessed_version = 0;
+
+if ($opt_debsdir) {
+ $opt_debsdir =~ s%^/+%/%;
+ $opt_debsdir =~ s%(.)/$%$1%;
+ $debsdir_warning = "--debs-dir directory $opt_debsdir does not exist!";
+ $debsdir = $opt_debsdir;
+}
+
+# If no file is given, assume that we are in a source directory
+# and try to create a diff with the previous version
+if (@ARGV == 0) {
+ my $namepat = qr/[-+0-9a-z.]/i;
+
+ fatal $debsdir_warning unless -d $debsdir;
+
+ fatal "Can't read file: debian/changelog" unless -r "debian/changelog";
+ open CHL, "debian/changelog";
+ while (<CHL>) {
+ if (/^(\w$namepat*)\s\((\d+:)?(.+)\)((\s+$namepat+)+)\;\surgency=.+$/)
+ {
+ unshift @ARGV, $debsdir . "/" . $1 . "_" . $3 . ".dsc";
+ $guessed_version++;
+ }
+ last if $guessed_version > 1;
+ }
+ close CHL;
+}
+
+if (!$type) {
+ # we need 2 deb files or changes files to compare
+ fatal "Need exactly two deb files or changes files to compare"
+ unless @ARGV == 2;
+
+ foreach my $i (0, 1) {
+ fatal "Can't read file: $ARGV[$i]" unless -r $ARGV[$i];
+ }
+
+ if ($ARGV[0] =~ /\.deb$/) { $type = 'deb'; }
+ elsif ($ARGV[0] =~ /\.udeb$/) { $type = 'deb'; }
+ elsif ($ARGV[0] =~ /\.changes$/) { $type = 'changes'; }
+ elsif ($ARGV[0] =~ /\.dsc$/) { $type = 'dsc'; }
+ else {
+ fatal
+"Could not recognise files; the names should end .deb, .udeb, .changes or .dsc";
+ }
+ if ($ARGV[1] !~ /\.$type$/ && ($type ne 'deb' || $ARGV[1] !~ /\.udeb$/)) {
+ fatal
+"The two filenames must have the same suffix, either .deb, .udeb, .changes or .dsc";
+ }
+}
+
+# We collect up the individual deb information in the hashes
+# %debs1 and %debs2, each key of which is a .deb name and each value is
+# a list ref. Note we need to use our, not my, as we will be symbolically
+# referencing these variables
+my @CommonDebs = ();
+my @singledeb;
+our (
+ %debs1, %debs2, %files1, %files2, @D1,
+ @D2, $dir1, $dir2, %DebPaths1, %DebPaths2
+);
+
+if ($type eq 'deb') {
+ no strict 'refs';
+ foreach my $i (1, 2) {
+ my $deb = shift;
+ my ($debc, $debI) = ('', '');
+ my %dpkg_env = (LC_ALL => 'C');
+ eval {
+ spawn(
+ exec => ['dpkg-deb', '-c', $deb],
+ env => \%dpkg_env,
+ to_string => \$debc,
+ wait_child => 1
+ );
+ };
+ if ($@) {
+ fatal "dpkg-deb -c $deb failed!";
+ }
+
+ eval {
+ spawn(
+ exec => ['dpkg-deb', '-I', $deb],
+ env => \%dpkg_env,
+ to_string => \$debI,
+ wait_child => 1
+ );
+ };
+ if ($@) {
+ fatal "dpkg-deb -I $deb failed!";
+ }
+ # Store the name for later
+ $singledeb[$i] = $deb;
+ # get package name itself
+ $deb =~ s,.*/,,;
+ $deb =~ s/_.*//;
+ @{"D$i"} = @{ process_debc($debc, $i) };
+ push @{"D$i"}, @{ process_debI($debI) };
+ }
+} elsif ($type eq 'changes' or $type eq 'debs') {
+ # Have to parse .changes files or remaining arguments
+ my $pwd = cwd;
+ foreach my $i (1, 2) {
+ my (@debs) = ();
+ if ($type eq 'debs') {
+ if (@ARGV < 2) {
+ # Oops! There should be at least --from|--to deb ...
+ fatal
+"Missing .deb names or missing --to! (Run debdiff -h for help)\n";
+ }
+ shift; # get rid of --from or --to
+ while (@ARGV and $ARGV[0] ne '--to') {
+ push @debs, shift;
+ }
+
+ # Is there only one .deb listed?
+ if (@debs == 1) {
+ $singledeb[$i] = $debs[0];
+ }
+ } else {
+ my $changes = shift;
+ open CHANGES, $changes
+ or fatal "Couldn't open $changes: $!";
+ my $infiles = 0;
+ while (<CHANGES>) {
+ last if $infiles and /^[^ ]/;
+ /^Files:/ and $infiles = 1, next;
+ next unless $infiles;
+ if (/ (\S*.u?deb)$/) {
+ my $file = $1;
+ $file !~ m,[/\x00],
+ or fatal "File name contains invalid characters: $file";
+ push @debs, dirname($changes) . '/' . $file;
+ }
+ }
+ close CHANGES
+ or fatal "Problem reading $changes: $!";
+
+ # Is there only one .deb listed?
+ if (@debs == 1) {
+ $singledeb[$i] = $debs[0];
+ }
+ }
+
+ foreach my $deb (@debs) {
+ no strict 'refs';
+ fatal "Can't read file: $deb" unless -r $deb;
+ my ($debc, $debI) = ('', '');
+ my %dpkg_env = (LC_ALL => 'C');
+ eval {
+ spawn(
+ exec => ['dpkg-deb', '-c', $deb],
+ to_string => \$debc,
+ env => \%dpkg_env,
+ wait_child => 1
+ );
+ };
+ if ($@) {
+ fatal "dpkg-deb -c $deb failed!";
+ }
+ eval {
+ spawn(
+ exec => ['dpkg-deb', '-I', $deb],
+ to_string => \$debI,
+ env => \%dpkg_env,
+ wait_child => 1
+ );
+ };
+ if ($@) {
+ fatal "dpkg-deb -I $deb failed!";
+ }
+ my $debpath = $deb;
+ # get package name itself
+ $deb =~ s,.*/,,;
+ $deb =~ s/_.*//;
+ $deb = $renamed{$deb} if $i == 1 and exists $renamed{$deb};
+ if (exists ${"debs$i"}{$deb}) {
+ warn
+"Same package name appears more than once (possibly due to renaming): $deb\n";
+ } else {
+ ${"debs$i"}{$deb} = 1;
+ }
+ ${"DebPaths$i"}{$deb} = $debpath;
+ foreach my $file (@{ process_debc($debc, $i) }) {
+ ${"files$i"}{$file} ||= "";
+ ${"files$i"}{$file} .= "$deb:";
+ }
+ foreach my $control (@{ process_debI($debI) }) {
+ ${"files$i"}{$control} ||= "";
+ ${"files$i"}{$control} .= "$deb:";
+ }
+ }
+ no strict 'refs';
+ @{"D$i"} = keys %{"files$i"};
+ # Go back again
+ chdir $pwd or fatal "Couldn't chdir $pwd: $!";
+ }
+} elsif ($type eq 'dsc') {
+ # Compare source packages
+ my $pwd = cwd;
+
+ my (@origs, @diffs, @dscs, @dscformats, @versions);
+ foreach my $i (1, 2) {
+ my $dsc = shift;
+ chdir dirname($dsc)
+ or fatal "Couldn't chdir ", dirname($dsc), ": $!";
+
+ $dscs[$i] = cwd() . '/' . basename($dsc);
+
+ open DSC, basename($dsc) or fatal "Couldn't open $dsc: $!";
+
+ my $infiles = 0;
+ while (<DSC>) {
+ if (/^Files:/) {
+ $infiles = 1;
+ next;
+ } elsif (/^Format: (.*)$/) {
+ $dscformats[$i] = $1;
+ } elsif (/^Version: (.*)$/) {
+ $versions[$i - 1] = [$1, $i];
+ }
+ next unless $infiles;
+ last if /^\s*$/;
+ last if /^[-\w]+:/; # don't expect this, but who knows?
+ chomp;
+
+ # This had better match
+ if (/^\s+[0-9a-f]{32}\s+\d+\s+(\S+)$/) {
+ my $file = $1;
+ $file !~ m,[/\x00],
+ or fatal "File name contains invalid characters: $file";
+ if ($file =~ /\.diff\.gz$/) {
+ $diffs[$i] = cwd() . '/' . $file;
+ } elsif ($file =~ /((?:\.orig)?\.tar\.$compression_re|\.git)$/)
+ {
+ $origs[$i] = $file;
+ }
+ } else {
+ warn "Unrecognised file line in .dsc:\n$_\n";
+ }
+ }
+
+ close DSC or fatal "Problem closing $dsc: $!";
+ # Go back again
+ chdir $pwd or fatal "Couldn't chdir $pwd: $!";
+ }
+
+ @versions = Devscripts::Versort::versort(@versions);
+ # If the versions are currently out of order, should we swap them?
+ if ( $auto_ver_sort
+ and !$guessed_version
+ and $versions[0][1] == 1
+ and $versions[0][0] ne $versions[1][0]) {
+ foreach my $var ((\@origs, \@diffs, \@dscs, \@dscformats)) {
+ my $temp = @{$var}[1];
+ @{$var}[1] = @{$var}[2];
+ @{$var}[2] = $temp;
+ }
+ }
+
+ # Do we have interdiff?
+ system("command -v interdiff >/dev/null 2>&1");
+ my $use_interdiff = ($? == 0) ? 1 : 0;
+ system("command -v diffstat >/dev/null 2>&1");
+ my $have_diffstat = ($? == 0) ? 1 : 0;
+ system("command -v wdiff >/dev/null 2>&1");
+ my $have_wdiff = ($? == 0) ? 1 : 0;
+
+ my ($fh, $filename) = tempfile(
+ "debdiffXXXXXX",
+ SUFFIX => ".diff",
+ DIR => File::Spec->tmpdir,
+ UNLINK => 1
+ );
+
+ # When wdiffing source control files we always fully extract both source
+ # packages as it's the easiest way of getting the debian/control file,
+ # particularly if the orig tar ball contains one which is patched in the
+ # diffs
+ if ( $origs[1] eq $origs[2]
+ and defined $diffs[1]
+ and defined $diffs[2]
+ and scalar(@excludes) == 0
+ and $use_interdiff
+ and !$wdiff_source_control) {
+ # same orig tar ball, interdiff exists and not wdiffing
+
+ my $tmpdir = tempdir(CLEANUP => 1);
+ eval {
+ spawn(
+ exec => ['interdiff', '-z', @diff_opts, $diffs[1], $diffs[2]],
+ to_file => $filename,
+ wait_child => 1,
+ # Make interdiff put its tempfiles in $tmpdir, so they're
+ # automatically cleaned up
+ env => { TMPDIR => $tmpdir });
+ };
+
+ # If interdiff fails for some reason, we'll fall back to our manual
+ # diffing.
+ unless ($@) {
+ if ($have_diffstat and $show_diffstat) {
+ my $header
+ = "diffstat for "
+ . basename($diffs[1]) . " "
+ . basename($diffs[2]) . "\n\n";
+ $header =~ s/\.diff\.gz//g;
+ print $header;
+ spawn(
+ exec => ['diffstat', $filename],
+ wait_child => 1
+ );
+ print "\n";
+ }
+
+ if (-s $filename) {
+ open(INTERDIFF, '<', $filename);
+ while (<INTERDIFF>) {
+ print $_;
+ }
+ close INTERDIFF;
+
+ $exit_status = 1;
+ }
+ exit $exit_status;
+ }
+ }
+
+ # interdiff ran and failed, or any other situation
+ if (!$use_interdiff) {
+ warn
+"Warning: You do not seem to have interdiff (in the patchutils package)\ninstalled; this program would use it if it were available.\n";
+ }
+ # possibly different orig tarballs, or no interdiff installed,
+ # or wdiffing debian/control
+ our ($sdir1, $sdir2);
+ mktmpdirs();
+
+ for my $i (1, 2) {
+ no strict 'refs';
+ my @opts = ('-x');
+ if ($dscformats[$i] eq '3.0 (quilt)' && !$apply_patches) {
+ push @opts, '--skip-patches';
+ }
+ my $diri = ${"dir$i"};
+ eval {
+ spawn(
+ exec => ['dpkg-source', @opts, $dscs[$i]],
+ to_file => '/dev/null',
+ chdir => $diri,
+ wait_child => 1
+ );
+ };
+ if ($@) {
+ my $dir = dirname $dscs[1] if $i == 2;
+ $dir = dirname $dscs[2] if $i == 1;
+ cp "$dir/$origs[$i]",
+ $diri || fatal "copy $dir/$origs[$i] $diri: $!";
+ my $dscx = basename $dscs[$i];
+ cp $diffs[$i], $diri || fatal "copy $diffs[$i] $diri: $!";
+ cp $dscs[$i], $diri || fatal "copy $dscs[$i] $diri: $!";
+ spawn(
+ exec => ['dpkg-source', @opts, $dscx],
+ to_file => '/dev/null',
+ chdir => $diri,
+ wait_child => 1
+ );
+ }
+ opendir DIR, $diri;
+ while ($_ = readdir(DIR)) {
+ next if $_ eq '.' || $_ eq '..' || !-d "$diri/$_";
+ ${"sdir$i"} = $_;
+ last;
+ }
+ closedir(DIR);
+ my $sdiri = ${"sdir$i"};
+
+# also unpack tarballs found in the top level source directory so we can compare their contents too
+ next unless $unpack_tarballs;
+ opendir DIR, $diri . '/' . $sdiri;
+
+ my $tarballs = 1;
+ while ($_ = readdir(DIR)) {
+ my $unpacked = "=unpacked-tar" . $tarballs . "=";
+ my $filename = $_;
+ if ($filename =~ s/\.tar\.$compression_re$//) {
+ my $comp = compression_guess_from_filename($_);
+ $tarballs++;
+ spawn(
+ exec => ['tar', "--$comp", '-xf', $_],
+ to_file => '/dev/null',
+ wait_child => 1,
+ chdir => "$diri/$sdiri",
+ nocheck => 1
+ );
+ if (-d "$diri/$sdiri/$filename") {
+ move "$diri/$sdiri/$filename", "$diri/$sdiri/$unpacked";
+ }
+ }
+ }
+ closedir(DIR);
+ if ($dscformats[$i] eq '3.0 (quilt)' && $apply_patches) {
+ spawn(
+ exec => ['rm', '-fr', "$diri/$sdiri/.pc"],
+ wait_child => 1
+ );
+ }
+ }
+
+ my @command = ("diff", "-Nru", @diff_opts);
+ for my $exclude (@excludes) {
+ push @command, ("--exclude", $exclude);
+ }
+ push @command, ("$dir1/$sdir1", "$dir2/$sdir2");
+
+# Execute diff and remove the common prefixes $dir1/$dir2, so the patch can be used with -p1,
+# as if when interdiff would have been used:
+ spawn(
+ exec => \@command,
+ to_file => $filename,
+ wait_child => 1,
+ nocheck => 1
+ );
+
+ if ($have_diffstat and $show_diffstat) {
+ print "diffstat for $sdir1 $sdir2\n\n";
+ spawn(
+ exec => ['diffstat', $filename],
+ wait_child => 1
+ );
+ print "\n";
+ }
+
+ if ($have_wdiff and $wdiff_source_control) {
+ # Abuse global variables slightly to create some temporary directories
+ my $tempdir1 = $dir1;
+ my $tempdir2 = $dir2;
+ mktmpdirs();
+ our $wdiffdir1 = $dir1;
+ our $wdiffdir2 = $dir2;
+ $dir1 = $tempdir1;
+ $dir2 = $tempdir2;
+ our @cf;
+
+ if ($controlfiles eq 'ALL') {
+ @cf = ('control');
+ } else {
+ @cf = split /,/, $controlfiles;
+ }
+
+ no strict 'refs';
+ for my $i (1, 2) {
+ foreach my $file (@cf) {
+ cp ${"dir$i"} . '/' . ${"sdir$i"} . "/debian/$file",
+ ${"wdiffdir$i"};
+ }
+ }
+ use strict 'refs';
+
+ # We don't support "ALL" for source packages as that would
+ # wdiff debian/*
+ $exit_status = wdiff_control_files($wdiffdir1, $wdiffdir2, $dummyname,
+ $controlfiles eq 'ALL' ? 'control' : $controlfiles, $exit_status);
+ print "\n";
+
+ # Clean up
+ rmtree([$wdiffdir1, $wdiffdir2]);
+ }
+
+ if (!-f $filename) {
+ fatal "Creation of diff file $filename failed!";
+ } elsif (-s $filename) {
+ open(DIFF, '<', $filename)
+ or fatal "Opening diff file $filename failed!";
+
+ while (<DIFF>) {
+ s/^--- $dir1\//--- /;
+ s/^\+\+\+ $dir2\//+++ /;
+ s/^(diff .*) $dir1\/\Q$sdir1\E/$1 $sdir1/;
+ s/^(diff .*) $dir2\/\Q$sdir2\E/$1 $sdir2/;
+ print;
+ }
+ close DIFF;
+
+ $exit_status = 1;
+ }
+
+ exit $exit_status;
+} else {
+ fatal "Internal error: \$type = $type unrecognised";
+}
+
+# Compare
+# Start by a piece of common code to set up the @CommonDebs list and the like
+
+my (@deblosses, @debgains);
+
+{
+ my %debs;
+ grep $debs{$_}--, keys %debs1;
+ grep $debs{$_}++, keys %debs2;
+
+ @deblosses = sort grep $debs{$_} < 0, keys %debs;
+ @debgains = sort grep $debs{$_} > 0, keys %debs;
+ @CommonDebs = sort grep $debs{$_} == 0, keys %debs;
+}
+
+if ($show_moved and $type ne 'deb') {
+ if (@debgains) {
+ my $msg
+ = "Warning: these package names were in the second list but not in the first:";
+ print $msg, "\n", '-' x length $msg, "\n";
+ print join("\n", @debgains), "\n\n";
+ }
+
+ if (@deblosses) {
+ print "\n" if @debgains;
+ my $msg
+ = "Warning: these package names were in the first list but not in the second:";
+ print $msg, "\n", '-' x length $msg, "\n";
+ print join("\n", @deblosses), "\n\n";
+ }
+
+ # We start by determining which files are in the first set of debs, the
+ # second set of debs or both.
+ my %files;
+ grep $files{$_}--, @D1;
+ grep $files{$_}++, @D2;
+
+ my @old = sort grep $files{$_} < 0, keys %files;
+ my @new = sort grep $files{$_} > 0, keys %files;
+ my @same = sort grep $files{$_} == 0, keys %files;
+
+ # We store any changed files in a hash of hashes %changes, where
+ # $changes{$from}{$to} is an array of files which have moved
+ # from package $from to package $to; $from or $to is '-' if
+ # the files have appeared or disappeared
+
+ my %changes;
+ my @funny; # for storing changed files which appear in multiple debs
+
+ foreach my $file (@old) {
+ my @firstdebs = split /:/, $files1{$file};
+ foreach my $firstdeb (@firstdebs) {
+ push @{ $changes{$firstdeb}{'-'} }, $file;
+ }
+ }
+
+ foreach my $file (@new) {
+ my @seconddebs = split /:/, $files2{$file};
+ foreach my $seconddeb (@seconddebs) {
+ push @{ $changes{'-'}{$seconddeb} }, $file;
+ }
+ }
+
+ foreach my $file (@same) {
+ # Are they identical?
+ next if $files1{$file} eq $files2{$file};
+
+ # Ah, they're not the same. If the file has moved from one deb
+ # to another, we'll put a note in that pair. But if the file
+ # was in more than one deb or ends up in more than one deb, we'll
+ # list it separately.
+ my @fdebs1 = split(/:/, $files1{$file});
+ my @fdebs2 = split(/:/, $files2{$file});
+
+ if (@fdebs1 == 1 && @fdebs2 == 1) {
+ push @{ $changes{ $fdebs1[0] }{ $fdebs2[0] } }, $file;
+ } else {
+ # two packages to one or vice versa, or something like that
+ push @funny, [$file, \@fdebs1, \@fdebs2];
+ }
+ }
+
+ # This is not a very efficient way of doing things if there are
+ # lots of debs involved, but since that is highly unlikely, it
+ # shouldn't be much of an issue
+ my $changed = 0;
+
+ for my $deb1 (sort(keys %debs1), '-') {
+ next unless exists $changes{$deb1};
+ for my $deb2 ('-', sort keys %debs2) {
+ next unless exists $changes{$deb1}{$deb2};
+ my $msg;
+ if (!$changed) {
+ print
+"[The following lists of changes regard files as different if they have\ndifferent names, permissions or owners.]\n\n";
+ }
+ if ($deb1 eq '-') {
+ $msg
+ = "New files in second set of .debs, found in package $deb2";
+ } elsif ($deb2 eq '-') {
+ $msg
+ = "Files only in first set of .debs, found in package $deb1";
+ } else {
+ $msg = "Files moved from package $deb1 to package $deb2";
+ }
+ print $msg, "\n", '-' x length $msg, "\n";
+ print join("\n", @{ $changes{$deb1}{$deb2} }), "\n\n";
+ $changed = 1;
+ }
+ }
+
+ if (@funny) {
+ my $msg
+ = "Files moved or copied from at least TWO packages or to at least TWO packages";
+ print $msg, "\n", '-' x length $msg, "\n";
+ for my $funny (@funny) {
+ print $$funny[0], "\n"; # filename and details
+ print "From package", (@{ $$funny[1] } > 1 ? "s" : ""), ": ";
+ print join(", ", @{ $$funny[1] }), "\n";
+ print "To package", (@{ $$funny[2] } > 1 ? "s" : ""), ": ";
+ print join(", ", @{ $$funny[2] }), "\n";
+ }
+ $changed = 1;
+ }
+
+ if (!$quiet && !$changed) {
+ print
+ "File lists identical on package level (after any substitutions)\n";
+ }
+ $exit_status = 1 if $changed;
+} else {
+ my %files;
+ grep $files{$_}--, @D1;
+ grep $files{$_}++, @D2;
+
+ my @losses = sort grep $files{$_} < 0, keys %files;
+ my @gains = sort grep $files{$_} > 0, keys %files;
+
+ if (@losses == 0 && @gains == 0) {
+ print "File lists identical (after any substitutions)\n"
+ unless $quiet;
+ } else {
+ print
+"[The following lists of changes regard files as different if they have\ndifferent names, permissions or owners.]\n\n";
+ }
+
+ if (@gains) {
+ my $msg;
+ if ($type eq 'debs') {
+ $msg = "Files in second set of .debs but not in first";
+ } else {
+ $msg = sprintf "Files in second .%s but not in first",
+ $type eq 'deb' ? 'deb' : 'changes';
+ }
+ print $msg, "\n", '-' x length $msg, "\n";
+ print join("\n", @gains), "\n";
+ $exit_status = 1;
+ }
+
+ if (@losses) {
+ print "\n" if @gains;
+ my $msg;
+ if ($type eq 'debs') {
+ $msg = "Files in first set of .debs but not in second";
+ } else {
+ $msg = sprintf "Files in first .%s but not in second",
+ $type eq 'deb' ? 'deb' : 'changes';
+ }
+ print $msg, "\n", '-' x length $msg, "\n";
+ print join("\n", @losses), "\n";
+ $exit_status = 1;
+ }
+}
+
+# We compare the control files (at least the dependency fields)
+if (defined $singledeb[1] and defined $singledeb[2]) {
+ @CommonDebs = ($dummyname);
+ $DebPaths1{$dummyname} = $singledeb[1];
+ $DebPaths2{$dummyname} = $singledeb[2];
+}
+
+exit $exit_status unless (@CommonDebs > 0) and $compare_control;
+
+unless (system("command -v wdiff >/dev/null 2>&1") == 0) {
+ warn "Can't compare control files; wdiff package not installed\n";
+ exit $exit_status;
+}
+
+for my $debname (@CommonDebs) {
+ no strict 'refs';
+ mktmpdirs();
+
+ for my $i (1, 2) {
+ my $debpath = "${\"DebPaths$i\"}{$debname}";
+ my $diri = ${"dir$i"};
+ eval {
+ spawn(
+ exec => ['dpkg-deb', '-e', $debpath, $diri],
+ wait_child => 1
+ );
+ };
+ if ($@) {
+ my $msg = "dpkg-deb -e ${\"DebPaths$i\"}{$debname} failed!";
+ rmtree([$dir1, $dir2]);
+ fatal $msg;
+ }
+ }
+
+ use strict 'refs';
+ $exit_status = wdiff_control_files($dir1, $dir2, $debname, $controlfiles,
+ $exit_status);
+
+ # Clean up
+ rmtree([$dir1, $dir2]);
+}
+
+exit $exit_status;
+
+###### Subroutines
+
+# This routine takes the output of dpkg-deb -c and returns
+# a processed listref
+sub process_debc($$) {
+ my ($data, $number) = @_;
+ my (@filelist);
+
+ # Format of dpkg-deb -c output:
+ # permissions owner/group size date time name ['->' link destination]
+ $data =~ s/^(\S+)\s+(\S+)\s+(\S+\s+){3}/$1 $2 /mg;
+ $data =~ s, \./, /,mg;
+ @filelist = grep !m| /$|, split /\n/, $data; # don't bother keeping '/'
+
+ # Are we keeping directory names in our filelists?
+ if ($ignore_dirs) {
+ @filelist = grep !m|/$|, @filelist;
+ }
+
+ # Do the "move" substitutions in the order received for the first debs
+ if ($number == 1 and @move) {
+ my @split_filelist
+ = map { m/^(\S+) (\S+) (.*)/ && [$1, $2, $3] } @filelist;
+ for my $move (@move) {
+ my $regex = $$move[0];
+ my $from = $$move[1];
+ my $to = $$move[2];
+ map {
+ if ($regex) { eval "\$\$_[2] =~ s:$from:$to:g"; }
+ else { $$_[2] =~ s/\Q$from\E/$to/; }
+ } @split_filelist;
+ }
+ @filelist = map { "$$_[0] $$_[1] $$_[2]" } @split_filelist;
+ }
+
+ return \@filelist;
+}
+
+# This does the same for dpkg-deb -I
+sub process_debI($) {
+ my ($data) = @_;
+ my (@filelist);
+
+ # Format of dpkg-deb -c output:
+ # 2 (always?) header lines
+ # nnnn bytes, nnn lines [*] filename [interpreter]
+ # Package: ...
+ # rest of control file
+
+ foreach (split /\n/, $data) {
+ last if /^Package:/;
+ next unless /^\s+\d+\s+bytes,\s+\d+\s+lines\s+(\*)?\s+([\-\w]+)/;
+ my $control = $2;
+ my $perms = ($1 ? "-rwxr-xr-x" : "-rw-r--r--");
+ push @filelist, "$perms root/root DEBIAN/$control";
+ }
+
+ return \@filelist;
+}
+
+sub wdiff_control_files($$$$$) {
+ my ($dir1, $dir2, $debname, $controlfiles, $origstatus) = @_;
+ return
+ unless defined $dir1
+ and defined $dir2
+ and defined $debname
+ and defined $controlfiles;
+ my @cf;
+ my $status = $origstatus;
+ if ($controlfiles eq 'ALL') {
+ # only need to list one directory as we are only comparing control
+ # files in both packages
+ @cf = grep { !/md5sums/ } map { basename($_); } glob("$dir1/*");
+ } else {
+ @cf = split /,/, $controlfiles;
+ }
+
+ foreach my $cf (@cf) {
+ next unless -f "$dir1/$cf" and -f "$dir2/$cf";
+ if ($cf eq 'control' or $cf eq 'conffiles' or $cf eq 'shlibs') {
+ for my $file ("$dir1/$cf", "$dir2/$cf") {
+ my ($fd, @hdrs);
+ open $fd, '<', $file or fatal "Cannot read $file: $!";
+ while (<$fd>) {
+ if (/^\s/ and @hdrs > 0) {
+ $hdrs[$#hdrs] .= $_;
+ } else {
+ push @hdrs, $_;
+ }
+ }
+ close $fd;
+ chmod 0644, $file;
+ open $fd, '>', $file or fatal "Cannot write $file: $!";
+ print $fd sort @hdrs;
+ close $fd;
+ }
+ }
+ my $usepkgname = $debname eq $dummyname ? "" : " of package $debname";
+ my @opts = ('-n');
+ push @opts, $wdiff_opt if $wdiff_opt;
+ my ($wdiff, $wdiff_error) = ('', '');
+ spawn(
+ exec => ['wdiff', @opts, "$dir1/$cf", "$dir2/$cf"],
+ to_string => \$wdiff,
+ error_to_string => \$wdiff_error,
+ wait_child => 1,
+ nocheck => 1
+ );
+ if ($? && ($? >> 8) != 1) {
+ print "$wdiff_error\n";
+ warn "wdiff failed\n";
+ } else {
+ if (!$?) {
+ if (!$quiet) {
+ print
+"\nNo differences were encountered between the $cf files$usepkgname\n";
+ }
+ } elsif ($wdiff_opt) {
+ # Don't try messing with control codes
+ my $msg = ucfirst($cf) . " files$usepkgname: wdiff output";
+ print "\n", $msg, "\n", '-' x length $msg, "\n";
+ print $wdiff;
+ $status = 1;
+ } else {
+ my @output;
+ @output = split /\n/, $wdiff;
+ @output = grep /(\[-|\{\+)/, @output;
+ my $msg = ucfirst($cf)
+ . " files$usepkgname: lines which differ (wdiff format)";
+ print "\n", $msg, "\n", '-' x length $msg, "\n";
+ print join("\n", @output), "\n";
+ $status = 1;
+ }
+ }
+ }
+
+ return $status;
+}
+
+sub mktmpdirs () {
+ no strict 'refs';
+
+ for my $i (1, 2) {
+ ${"dir$i"} = tempdir(CLEANUP => 1);
+ fatal "Couldn't create temp directory"
+ if not defined ${"dir$i"};
+ }
+}
+
+sub fatal(@) {
+ my ($pack, $file, $line);
+ ($pack, $file, $line) = caller();
+ (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d;
+ $msg =~ s/\n\n$/\n/;
+ die $msg;
+}
diff --git a/scripts/debi.1 b/scripts/debi.1
new file mode 100644
index 0000000..779462a
--- /dev/null
+++ b/scripts/debi.1
@@ -0,0 +1,140 @@
+.TH DEBI 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debi \- install current version of generated Debian package
+.SH SYNOPSIS
+\fBdebi\fP [\fIoptions\fR] [\fIchanges file\fR] [\fIpackage\fR ...]
+.SH DESCRIPTION
+\fBdebi\fR figures out the current version of a package and installs
+it. If a \fI.changes\fR file is specified on the command line, the
+filename must end with \fI.changes\fR, as this is how the program
+distinguishes it from package names. If not, then \fBdebi\fR has to
+be called from within the source code directory tree. In this case,
+it will look for the \fI.changes\fR file corresponding to the current
+package version (by determining the name and version number from the
+changelog, and the architecture in the same way as
+\fBdpkg-buildpackage\fR(1) does). It then runs \fBdebpkg \-i\fR on
+every \fI.deb\fR archive listed in the \fI.changes\fR file to install
+them, assuming that all of the \fI.deb\fR archives live in the same
+directory as the \fI.changes\fR file. Note that you probably don't
+want to run this program on a \fI.changes\fR file relating to a
+different architecture after cross-compiling the package!
+.PP
+If a list of packages is given on the command line, then only those
+debs with names in this list of packages will be installed.
+.PP
+Since installing a package requires root privileges, \fBdebi\fR calls
+\fBdebpkg\fR rather than \fBdpkg\fR directly. Thus \fBdebi\fR will
+only be useful if it is either being run as root or \fBdebpkg\fR can
+be run as root. See \fBdebpkg\fR(1) for more details.
+.SH "Directory name checking"
+In common with several other scripts in the \fBdevscripts\fR package,
+\fBdebi\fR will climb the directory tree until it finds a
+\fIdebian/changelog\fR file. As a safeguard against stray files
+causing potential problems, it will examine the name of the parent
+directory once it finds the \fIdebian/changelog\fR file, and check
+that the directory name corresponds to the package name. Precisely
+how it does this is controlled by two configuration file variables
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR and \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR can take the following values:
+.TP
+.B 0
+Never check the directory name.
+.TP
+.B 1
+Only check the directory name if we have had to change directory in
+our search for \fIdebian/changelog\fR. This is the default behaviour.
+.TP
+.B 2
+Always check the directory name.
+.PP
+The directory name is checked by testing whether the current directory
+name (as determined by \fBpwd\fR(1)) matches the regex given by the
+configuration file option \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR or by the
+command line option \fB\-\-check-dirname-regex\fR \fIregex\fR. Here
+\fIregex\fR is a Perl regex (see \fBperlre\fR(3perl)), which will be
+anchored at the beginning and the end. If \fIregex\fR contains a '/',
+then it must match the full directory path. If not, then it must
+match the full directory name. If \fIregex\fR contains the string
+\'PACKAGE', this will be replaced by the source package name, as
+determined from the changelog. The default value for the regex is:
+\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and
+PACKAGE-version.
+.SH OPTIONS
+.TP
+\fB\-a\fIdebian-architecture\fR, \fB\-t\fIGNU-system-type\fR
+See \fBdpkg-architecture\fR(1) for a description of these options.
+They affect the search for the \fI.changes\fR file. They are provided
+to mimic the behaviour of \fBdpkg-buildpackage\fR when determining the
+name of the \fI.changes\fR file.
+.TP
+\fB\-\-debs\-dir\fR \fIdirectory\fR
+Look for the \fI.changes\fR and \fI.deb\fR files in \fIdirectory\fR
+instead of the parent of the source directory. This should
+either be an absolute path or relative to the top of the source
+directory.
+.TP
+.BR \-m ", " \-\-multi
+Search for a multiarch \fI.changes\fR file, as created by \fBdpkg-cross\fR.
+.TP
+.BR \-u ", " \-\-upgrade
+Only upgrade packages already installed on the system, rather than
+installing all packages listed in the \fI.changes\fR file.
+Useful for multi-binary packages when you don't want to have all the
+binaries installed at once.
+.TP
+\fB\-\-check-dirname-level\fR \fIN\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-\-with-depends\fR
+Attempt to satisfy the \fIDepends\fR of a package when installing it.
+.TP
+\fB\-\-tool\fR \fItool\fR
+Use the specified \fItool\fR for installing the dependencies of the package(s) to be
+installed. By default, \fBapt-get\fR is used.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+\fB\-\-help\fR, \fB\-\-version\fR
+Show help message and version information respectively.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B DEBRELEASE_DEBS_DIR
+This specifies the directory in which to look for the \fI.changes\fR
+and \fI.deb\fR files, and is either an absolute path or relative to
+the top of the source tree. This corresponds to the
+\fB\-\-debs\-dir\fR command line option. This directive could be
+used, for example, if you always use \fBpbuilder\fR or
+\fBsvn-buildpackage\fR to build your packages. Note that it also
+affects \fBdebrelease\fR(1) in the same way, hence the strange name of
+the option.
+.TP
+.BR DEVSCRIPTS_CHECK_DIRNAME_LEVEL ", " DEVSCRIPTS_CHECK_DIRNAME_REGEX
+See the above section \fBDirectory name checking\fR for an explanation of
+these variables. Note that these are package-wide configuration
+variables, and will therefore affect all \fBdevscripts\fR scripts
+which check their value, as described in their respective manpages and
+in \fBdevscripts.conf\fR(5).
+.SH "SEE ALSO"
+.BR debpkg (1),
+.BR devscripts.conf (5)
+.SH AUTHOR
+\fBdebi\fR was originally written by Christoph Lameter
+<clameter@debian.org>. The now-defunct script \fBdebit\fR was
+originally written by James R. Van Zandt <jrv@vanzandt.mv.com>. They
+have been moulded into one script together with \fBdebc\fR(1) and
+parts extensively modified by Julian Gilbey <jdg@debian.org>.
diff --git a/scripts/debi.bash_completion b/scripts/debi.bash_completion
new file mode 100644
index 0000000..4fa10df
--- /dev/null
+++ b/scripts/debi.bash_completion
@@ -0,0 +1,23 @@
+# /usr/share/bash-completion/completions/debi
+# Bash command completion for ‘debi(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+_debc()
+{
+ local cur
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ COMPREPLY=($(compgen -f -X '!*.changes' -- "$cur"))
+ if echo "$cur" | grep -qs '^[a-z0-9+.-]*$'; then
+ COMPREPLY=(${COMPREPLY[@]} $(apt-cache pkgnames -- $cur 2> /dev/null))
+ fi
+ return 0
+}
+complete -o dirnames -F _debc debc debi
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/debi.pl b/scripts/debi.pl
new file mode 100755
index 0000000..06ddce3
--- /dev/null
+++ b/scripts/debi.pl
@@ -0,0 +1,477 @@
+#!/usr/bin/perl
+
+# debi: Install current version of deb package
+# debc: List contents of current version of deb package
+#
+# debi and debc originally by Christoph Lameter <clameter@debian.org>
+# Copyright Christoph Lameter <clameter@debian.org>
+# The now defunct debit originally by Jim Van Zandt <jrv@vanzandt.mv.com>
+# Copyright 1999 Jim Van Zandt <jrv@vanzandt.mv.com>
+# Modifications by Julian Gilbey <jdg@debian.org>, 1999-2003
+# Copyright 1999-2003, Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use 5.008;
+use strict;
+use warnings;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use File::Basename;
+use filetest 'access';
+use Cwd;
+use Dpkg::Control;
+use Dpkg::Changelog::Parse qw(changelog_parse);
+use Dpkg::IPC;
+
+my $progname = basename($0, '.pl'); # the '.pl' is for when we're debugging
+my $modified_conf_msg;
+
+sub usage_i {
+ print <<"EOF";
+Usage: $progname [options] [.changes file] [package ...]
+ Install the .deb file(s) just created, as listed in the generated
+ .changes file or the .changes file specified. If packages are listed,
+ only install those specified packages from the .changes file.
+ Options:
+ --no-conf or Don\'t read devscripts config files;
+ --noconf must be the first option given
+ -a<arch> Search for .changes file made for Debian build <arch>
+ -t<target> Search for .changes file made for GNU <target> arch
+ --debs-dir DIR Look for the changes and debs files in DIR instead of
+ the parent of the current package directory
+ --multi Search for multiarch .changes file made by dpkg-cross
+ --upgrade Only upgrade packages; don't install new ones.
+ --check-dirname-level N
+ How much to check directory names:
+ N=0 never
+ N=1 only if program changes directory (default)
+ N=2 always
+ --check-dirname-regex REGEX
+ What constitutes a matching directory name; REGEX is
+ a Perl regular expression; the string \`PACKAGE\' will
+ be replaced by the package name; see manpage for details
+ (default: 'PACKAGE(-.+)?')
+ --with-depends Install packages with their depends.
+ --tool TOOL Use the specified tool for installing the dependencies
+ of the package(s) to be installed.
+ (default: apt-get)
+ --help Show this message
+ --version Show version and copyright information
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOF
+}
+
+sub usage_c {
+ print <<"EOF";
+Usage: $progname [options] [.changes file] [package ...]
+ Display the contents of the .deb or .udeb file(s) just created, as listed
+ in the generated .changes file or the .changes file specified.
+ If packages are listed, only display those specified packages
+ from the .changes file. Options:
+ --no-conf or Don\'t read devscripts config files;
+ --noconf must be the first option given
+ -a<arch> Search for changes file made for Debian build <arch>
+ -t<target> Search for changes file made for GNU <target> arch
+ --debs-dir DIR Look for the changes and debs files in DIR instead of
+ the parent of the current package directory
+ --list-changes only list the .changes file
+ --list-debs only list the .deb files; don't display their contents
+ --multi Search for multiarch .changes file made by dpkg-cross
+ --check-dirname-level N
+ How much to check directory names:
+ N=0 never
+ N=1 only if program changes directory (default)
+ N=2 always
+ --check-dirname-regex REGEX
+ What constitutes a matching directory name; REGEX is
+ a Perl regular expression; the string \`PACKAGE\' will
+ be replaced by the package name; see manpage for details
+ (default: 'PACKAGE(-.+)?')
+ --help Show this message
+ --version Show version and copyright information
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOF
+}
+
+if ($progname eq 'debi') { *usage = \&usage_i; }
+elsif ($progname eq 'debc') { *usage = \&usage_c; }
+else { die "Unrecognised invocation name: $progname\n"; }
+
+my $version = <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1999-2003, Julian Gilbey <jdg\@debian.org>,
+all rights reserved.
+Based on original code by Christoph Lameter and James R. Van Zandt.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of
+the GNU General Public License, version 2 or later.
+EOF
+
+# Start by setting default values
+my $debsdir;
+my $debsdir_warning;
+my $check_dirname_level = 1;
+my $check_dirname_regex = 'PACKAGE(-.+)?';
+my $install_tool = (-t STDOUT ? 'apt' : 'apt-get');
+
+# Next, read configuration files and then command line
+# The next stuff is boilerplate
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'DEBRELEASE_DEBS_DIR' => '..',
+ 'DEVSCRIPTS_CHECK_DIRNAME_LEVEL' => 1,
+ 'DEVSCRIPTS_CHECK_DIRNAME_REGEX' => 'PACKAGE(-.+)?',
+ );
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ # Check validity
+ $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'} =~ /^[012]$/
+ or $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'} = 1;
+ # We do not replace this with a default directory to avoid accidentally
+ # installing a broken package
+ $config_vars{'DEBRELEASE_DEBS_DIR'} =~ s%/+%/%;
+ $config_vars{'DEBRELEASE_DEBS_DIR'} =~ s%(.)/$%$1%;
+ $debsdir_warning
+ = "config file specified DEBRELEASE_DEBS_DIR directory $config_vars{'DEBRELEASE_DEBS_DIR'} does not exist!";
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $debsdir = $config_vars{'DEBRELEASE_DEBS_DIR'};
+ $check_dirname_level = $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'};
+ $check_dirname_regex = $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_REGEX'};
+}
+
+# Command line options next
+my ($opt_help, $opt_version, $opt_a, $opt_t, $opt_debsdir, $opt_multi);
+my $opt_upgrade;
+my ($opt_level, $opt_regex, $opt_noconf);
+my ($opt_tool, $opt_with_depends);
+my ($opt_list_changes, $opt_list_debs);
+GetOptions(
+ "help" => \$opt_help,
+ "version" => \$opt_version,
+ "a=s" => \$opt_a,
+ "t=s" => \$opt_t,
+ "debs-dir=s" => \$opt_debsdir,
+ "m|multi" => \$opt_multi,
+ "u|upgrade" => \$opt_upgrade,
+ "check-dirname-level=s" => \$opt_level,
+ "check-dirname-regex=s" => \$opt_regex,
+ "with-depends" => \$opt_with_depends,
+ "tool=s" => \$opt_tool,
+ "noconf" => \$opt_noconf,
+ "no-conf" => \$opt_noconf,
+ "list-changes" => \$opt_list_changes,
+ "list-debs" => \$opt_list_debs,
+ )
+ or die
+"Usage: $progname [options] [.changes file] [package ...]\nRun $progname --help for more details\n";
+
+if ($opt_help) { usage(); exit 0; }
+if ($opt_version) { print $version; exit 0; }
+if ($opt_noconf) {
+ die
+"$progname: --no-conf is only acceptable as the first command-line option!\n";
+}
+
+my ($targetarch, $targetgnusystem);
+$targetarch = $opt_a ? "-a$opt_a" : "";
+$targetgnusystem = $opt_t ? "-t$opt_t" : "";
+
+if (defined $opt_level) {
+ if ($opt_level =~ /^[012]$/) { $check_dirname_level = $opt_level; }
+ else {
+ die
+"$progname: unrecognised --check-dirname-level value (allowed are 0,1,2)\n";
+ }
+}
+
+if (defined $opt_regex) { $check_dirname_regex = $opt_regex; }
+
+if ($opt_tool) {
+ $install_tool = $opt_tool;
+}
+
+# Is a .changes file listed on the command line?
+my ($changes, $mchanges, $arch);
+if (@ARGV and $ARGV[0] =~ /\.changes$/) {
+ $changes = shift;
+}
+
+# Need to determine $arch in any event
+$arch = `dpkg-architecture $targetarch $targetgnusystem -qDEB_HOST_ARCH`;
+if ($? != 0 or !$arch) {
+ die "$progname: unable to determine target architecture.\n";
+}
+chomp $arch;
+
+my @foreign_architectures;
+unless ($opt_a || $opt_t || $progname eq 'debc') {
+ @foreign_architectures
+ = map { chomp; $_ } `dpkg --print-foreign-architectures`;
+}
+
+my $chdir = 0;
+
+if (!defined $changes) {
+ if ($opt_debsdir) {
+ $opt_debsdir =~ s%/+%/%;
+ $opt_debsdir =~ s%(.)/$%$1%;
+ $debsdir_warning = "--debs-dir directory $opt_debsdir does not exist!";
+ $debsdir = $opt_debsdir;
+ }
+
+ if (!-d $debsdir) {
+ die "$progname: $debsdir_warning\n";
+ }
+
+ # Look for .changes file via debian/changelog
+ until (-r 'debian/changelog') {
+ $chdir = 1;
+ chdir '..' or die "$progname: can't chdir ..: $!\n";
+ if (cwd() eq '/') {
+ die
+"$progname: cannot find readable debian/changelog anywhere!\nAre you in the source code tree?\n";
+ }
+ }
+
+ if (-e ".svn/deb-layout") {
+ # Cope with format of svn-buildpackage tree
+ my $fh;
+ open($fh, "<", ".svn/deb-layout")
+ || die "Can't open .svn/deb-layout: $!\n";
+ my ($build_area) = grep /^buildArea=/, <$fh>;
+ close($fh);
+ if (defined($build_area) and not $opt_debsdir) {
+ chomp($build_area);
+ $build_area =~ s/^buildArea=//;
+ $debsdir = $build_area if -d $build_area;
+ }
+ }
+
+ # Find the source package name and version number
+ my $changelog = changelog_parse();
+
+ die "$progname: no package name in changelog!\n"
+ unless exists $changelog->{'Source'};
+ die "$progname: no package version in changelog!\n"
+ unless exists $changelog->{'Version'};
+
+ # Is the directory name acceptable?
+ if ($check_dirname_level == 2
+ or ($check_dirname_level == 1 and $chdir)) {
+ my $re = $check_dirname_regex;
+ $re =~ s/PACKAGE/\\Q$changelog->{'Source'}\\E/g;
+ my $gooddir;
+ if ($re =~ m%/%) { $gooddir = eval "cwd() =~ /^$re\$/;"; }
+ else { $gooddir = eval "basename(cwd()) =~ /^$re\$/;"; }
+
+ if (!$gooddir) {
+ my $pwd = cwd();
+ die <<"EOF";
+$progname: found debian/changelog for package $changelog->{'Source'} in the directory
+ $pwd
+but this directory name does not match the package name according to the
+regex $check_dirname_regex.
+
+To run $progname on this package, see the --check-dirname-level and
+--check-dirname-regex options; run $progname --help for more info.
+EOF
+ }
+ }
+
+ my $sversion = $changelog->{'Version'};
+ $sversion =~ s/^\d+://;
+ my $package = $changelog->{'Source'};
+ my $pva = "${package}_${sversion}_${arch}";
+ $changes = "$debsdir/$pva.changes";
+
+ if (!-e $changes and -d "../build-area") {
+ # Try out default svn-buildpackage structure in case
+ # we were going to fail anyway...
+ $changes = "../build-area/$pva.changes";
+ }
+
+ if ($opt_multi) {
+ my @mchanges = glob("$debsdir/${package}_${sversion}_*+*.changes");
+ @mchanges = grep { /[_+]$arch[\.+]/ } @mchanges;
+ $mchanges = $mchanges[0] || '';
+ $mchanges ||= "$debsdir/${package}_${sversion}_multi.changes"
+ if -f "$debsdir/${package}_${sversion}_multi.changes";
+ }
+}
+
+if ($opt_list_changes) {
+ printf "%s\n", $changes;
+ exit(0);
+}
+
+chdir dirname($changes)
+ or die "$progname: can't chdir to $changes directory: $!\n";
+$changes = basename($changes);
+$mchanges = basename($mchanges) if $opt_multi;
+
+if (!-r $changes or $opt_multi and $mchanges and !-r $mchanges) {
+ die "$progname: can't read $changes"
+ . (($opt_multi and $mchanges) ? " or $mchanges" : "") . "!\n";
+}
+
+if (!-r $changes and $opt_multi) {
+ $changes = $mchanges;
+} else {
+ $opt_multi = 0;
+}
+# $opt_multi now tells us whether we're actually using a multi-arch .changes
+# file
+
+my @debs = ();
+my %pkgs = map { $_ => 0 } @ARGV;
+my $ctrl = Dpkg::Control->new(name => $changes, type => CTRL_FILE_CHANGES);
+$ctrl->load($changes);
+for (split(/\n/, $ctrl->{Files})) {
+ # udebs are only supported for debc
+ if ( (($progname eq 'debi') && (/ (\S*\.deb)$/))
+ || (($progname eq 'debc') && (/ (\S*\.u?deb)$/))) {
+ my $deb = $1;
+ open(my $stdout, '-|', 'dpkg-deb', '-f', $deb);
+ my $fields = Dpkg::Control->new(name => $deb, type => CTRL_PKG_DEB);
+ $fields->parse($stdout, $deb);
+ my $pkg = $fields->{Package};
+
+ # don't want to install other archs' .debs, unless they are
+ # Multi-Arch: same:
+ next
+ unless (
+ $progname eq 'debc'
+ || $fields->{Architecture} eq 'all'
+ || $fields->{Architecture} eq $arch
+ || (($fields->{'Multi-Arch'} || 'no') eq 'same'
+ && grep { $_ eq $fields->{Architecture} }
+ @foreign_architectures));
+
+ if (@ARGV) {
+ if (exists $pkgs{$pkg}) {
+ push @debs, $deb;
+ $pkgs{$pkg}++;
+ } elsif (exists $pkgs{$deb}) {
+ push @debs, $deb;
+ $pkgs{$deb}++;
+ }
+ } else {
+ push @debs, $deb;
+ }
+ }
+}
+
+if (!@debs) {
+ die
+ "$progname: no appropriate .debs found in the changes file $changes!\n";
+}
+
+if ($progname eq 'debi') {
+ my @upgrade = $opt_upgrade ? ('-O') : ();
+ if ($opt_with_depends) {
+ if ($install_tool =~ /^apt(?:-get)?$/ && !$opt_upgrade) {
+ spawn(
+ exec =>
+ [$install_tool, 'install', '--reinstall', "./$changes"],
+ wait_child => 1
+ );
+ } else {
+ my @apt_opts;
+
+ if ($install_tool =~ /^apt(?:-get)?$/) {
+ push @apt_opts, '--with-source', "./$changes";
+ }
+
+ spawn(
+ exec => ['debpkg', @upgrade, '--unpack', @debs],
+ wait_child => 1
+ );
+ spawn(
+ exec => [$install_tool, @apt_opts, '-f', 'install'],
+ wait_child => 1
+ );
+ }
+ } else {
+ if ($install_tool =~ /^apt(?:-get)?$/ && $opt_upgrade) {
+ spawn(
+ exec => [
+ $install_tool, 'install',
+ '--only-upgrade', '--reinstall',
+ "./$changes"
+ ],
+ wait_child => 1
+ );
+ } else {
+ spawn(exec => ['debpkg', @upgrade, '-i', @debs], wait_child => 1);
+ }
+ }
+} else {
+ # $progname eq 'debc'
+ foreach my $deb (@debs) {
+ if ($opt_list_debs) {
+ printf "%s/%s\n", cwd(), $deb;
+ next;
+ }
+ print "$deb\n";
+ print '-' x length($deb), "\n";
+ system('dpkg-deb', '-I', $deb) == 0
+ or die "$progname: dpkg-deb -I $deb failed\n";
+ system('dpkg-deb', '-c', $deb) == 0
+ or die "$progname: dpkg-deb -c $deb failed\n";
+ print "\n";
+ }
+}
+
+# Now do a sanity check
+if (@ARGV) {
+ foreach my $pkg (keys %pkgs) {
+ if ($pkgs{$pkg} == 0) {
+ warn "$progname: package $pkg not found in $changes, ignoring\n";
+ } elsif ($pkgs{$pkg} > 1) {
+ warn
+"$progname: package $pkg found more than once in $changes, installing all\n";
+ }
+ }
+}
+
+exit 0;
diff --git a/scripts/debootsnap b/scripts/debootsnap
new file mode 100755
index 0000000..81297f5
--- /dev/null
+++ b/scripts/debootsnap
@@ -0,0 +1,694 @@
+#!/usr/bin/env python3
+#
+# Copyright 2021 Johannes Schauer Marin Rodrigues <josch@debian.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# This tool is similar to debootstrap but is able to recreate a chroot
+# containing precisely the given package and version selection. The package
+# list is expected on standard input and may be of the format produced by:
+#
+# dpkg-query --showformat '${binary:Package}=${Version}\n' --show
+
+# The name was suggested by Adrian Bunk as a portmanteau of debootstrap and
+# snapshot.debian.org.
+
+# TODO: Adress invalid names
+# pylint: disable=invalid-name
+
+import argparse
+import dataclasses
+import http.server
+import os
+import pathlib
+import re
+import shutil
+import socketserver
+import subprocess
+import sys
+import tempfile
+import threading
+import time
+from collections import defaultdict
+from contextlib import contextmanager
+from functools import partial
+from http import HTTPStatus
+from operator import itemgetter
+
+import pycurl
+import requests
+from debian.deb822 import BuildInfo
+
+
+class MyHTTPException(Exception):
+ pass
+
+
+class MyHTTP404Exception(Exception):
+ pass
+
+
+class MyHTTPTimeoutException(Exception):
+ pass
+
+
+class RetryCountExceeded(Exception):
+ pass
+
+
+# pylint: disable=c-extension-no-member
+class Proxy(http.server.SimpleHTTPRequestHandler):
+ last_request = None
+ maxretries = 10
+
+ def do_GET(self): # pylint: disable=too-many-branches,too-many-statements
+ # check validity and extract the timestamp
+ url = "http://snapshot.debian.org/" + self.path
+ start = None
+ state = ""
+ written = 0
+ for retrynum in range(self.maxretries):
+ try:
+ c = pycurl.Curl()
+ c.setopt(c.URL, url)
+ # even 100 kB/s is too much sometimes
+ c.setopt(c.MAX_RECV_SPEED_LARGE, 1000 * 1024) # bytes per second
+ c.setopt(c.CONNECTTIMEOUT, 30) # the default is 300
+ # sometimes, curl stalls forever and even ctrl+c doesn't work
+ start = time.time()
+
+ def progress(*_):
+ # a download must not last more than 10 minutes
+ # with 100 kB/s this means files cannot be larger than 62MB
+ if time.time() - start > 10 * 60:
+ print("transfer took too long")
+ # the code will not see this exception but instead get a
+ # pycurl.error
+ raise MyHTTPTimeoutException(url)
+
+ c.setopt(pycurl.NOPROGRESS, 0)
+ c.setopt(pycurl.XFERINFOFUNCTION, progress)
+ # $ host snapshot.debian.org
+ # snapshot.debian.org has address 185.17.185.185
+ # snapshot.debian.org has address 193.62.202.27
+ # c.setopt(c.RESOLVE, ["snapshot.debian.org:80:185.17.185.185"])
+ if written > 0:
+ c.setopt(pycurl.RESUME_FROM, written)
+
+ def writer_cb(data):
+ assert state == "headers sent", state
+ nonlocal written
+ written += len(data)
+ return self.wfile.write(data)
+
+ c.setopt(c.WRITEFUNCTION, writer_cb)
+
+ # using a header callback allows us to send headers of our own
+ # with the correct content-length value out without having to
+ # wait for perform() to finish
+ def header_cb(line):
+ nonlocal state
+ # if this is a retry, then the headers have already been
+ # sent and there is nothing to do
+ if state == "headers sent":
+ return
+ # HTTP standard specifies that headers are encoded in iso-8859-1
+ line = line.decode("iso-8859-1").rstrip()
+ # the first try must be a http 200
+ if line == "HTTP/1.1 200 OK":
+ assert state == ""
+ self.send_response(HTTPStatus.OK)
+ state = "http200 sent"
+ return
+ # the header is done
+ if line == "":
+ assert state == "length sent"
+ self.end_headers()
+ state = "headers sent"
+ return
+ field, value = line.split(":", 1)
+ field = field.strip().lower()
+ value = value.strip()
+ # we are only interested in content-length
+ if field != "content-length":
+ return
+ assert state == "http200 sent"
+ self.send_header("Content-Length", value)
+ state = "length sent"
+
+ c.setopt(c.HEADERFUNCTION, header_cb)
+ c.perform()
+ if c.getinfo(c.RESPONSE_CODE) == 404:
+ raise MyHTTP404Exception(f"got HTTP 404 for {url}")
+ if c.getinfo(c.RESPONSE_CODE) not in [200, 206]:
+ raise MyHTTPException(
+ f"got HTTP {c.getinfo(c.RESPONSE_CODE)} for {url}"
+ )
+ c.close()
+ # if the requests finished too quickly, sleep the remaining time
+ # s/r r/h
+ # 3 1020
+ # 2.5 1384
+ # 2.4 1408
+ # 2 1466
+ # 1.5 2267
+ seconds_per_request = 1.5
+ if self.last_request is not None:
+ sleep_time = seconds_per_request - (time.time() - self.last_request)
+ if sleep_time > 0:
+ time.sleep(sleep_time)
+ self.last_request = time.time()
+ break
+ except pycurl.error as e:
+ code, _ = e.args
+ if code in [
+ pycurl.E_PARTIAL_FILE,
+ pycurl.E_COULDNT_CONNECT,
+ pycurl.E_ABORTED_BY_CALLBACK,
+ ]:
+ if retrynum == self.maxretries - 1:
+ break
+ if code == pycurl.E_ABORTED_BY_CALLBACK:
+ # callback was aborted due to timeout
+ pass
+ sleep_time = 4 ** (retrynum + 1)
+ print(f"retrying after {sleep_time} s...")
+ time.sleep(sleep_time)
+ continue
+ raise
+ except MyHTTPException as e:
+ print("got HTTP error:", repr(e))
+ if retrynum == self.maxretries - 1:
+ break
+ sleep_time = 4 ** (retrynum + 1)
+ print(f"retrying after {sleep_time} s...")
+ time.sleep(sleep_time)
+ # restart from the beginning or otherwise, the result might
+ # include a varnish cache error message
+ else:
+ raise RetryCountExceeded("failed too often...")
+
+
+@dataclasses.dataclass
+class Source:
+ archive: str
+ timestamp: str
+ suite: str
+ components: list[str]
+
+ def deb_line(self, host: str = "snapshot.debian.org") -> str:
+ return (
+ f"deb [check-valid-until=no] http://{host}/archive/{self.archive}"
+ f"/{self.timestamp}/ {self.suite} {' '.join(self.components)}\n"
+ )
+
+
+def parse_buildinfo(val):
+ with open(val, encoding="utf8") as f:
+ buildinfo = BuildInfo(f)
+ pkgs = []
+ for dep in buildinfo.relations["installed-build-depends"]:
+ assert len(dep) == 1
+ dep = dep[0]
+ assert dep["arch"] is None
+ assert dep["restrictions"] is None
+ assert len(dep["version"]) == 2
+ rel, version = dep["version"]
+ assert rel == "="
+ pkgs.append((dep["name"], dep["archqual"], version))
+ return pkgs, buildinfo.get("Build-Architecture")
+
+
+def parse_pkgs(val):
+ if val == "-":
+ val = sys.stdin.read()
+ if val.startswith("./") or val.startswith("/"):
+ val = pathlib.Path(val)
+ if not val.exists():
+ print(f"{val} does not exist", file=sys.stderr)
+ sys.exit(1)
+ val = val.read_text(encoding="utf8")
+ pkgs = []
+ pattern = re.compile(
+ r"""
+ ^[^a-z0-9]* # garbage at the beginning
+ ([a-z0-9][a-z0-9+.-]+) # package name
+ (?:[^a-z0-9+.-]+([a-z0-9-]+))? # optional version
+ [^A-Za-z0-9.+~:-]+ # optional garbage
+ ([A-Za-z0-9.+~:-]+) # version
+ [^A-Za-z0-9.+~:-]*$ # garbage at the end
+ """,
+ re.VERBOSE,
+ )
+ for line in re.split(r"[,\r\n]+", val):
+ if not line:
+ continue
+ match = pattern.fullmatch(line)
+ if match is None:
+ print(f"cannot parse: {line}", file=sys.stderr)
+ sys.exit(1)
+ pkgs.append(match.groups())
+ return [pkgs]
+
+
+def parse_args(args: list[str]) -> argparse.Namespace:
+ parser = argparse.ArgumentParser(
+ formatter_class=argparse.RawDescriptionHelpFormatter,
+ description="""\
+
+Combines debootstrap and snapshot.debian.org to create a chroot with exact
+package versions from the past either to reproduce bugs or to test source
+package reproducibility.
+
+To obtain a list of packages run the following command on one machine:
+
+ $ dpkg-query --showformat '${binary:Package}=${Version}\\n' --show
+
+And pass the output to debootsnap with the --packages argument. The result
+will be a chroot tarball with precisely the package versions as they were
+found on the system that ran dpkg-query.
+""",
+ epilog="""\
+
+*EXAMPLES*
+
+On one system run:
+
+ $ dpkg-query --showformat '${binary:Package}=${Version}\\n' --show > pkglist
+
+Then copy over "pkglist" and on another system run:
+
+ $ debootsnap --pkgs=./pkglist chroot.tar
+
+Or use a buildinfo file as input:
+
+ $ debootsnap --buildinfo=./package.buildinfo chroot.tar
+
+""",
+ )
+ parser.add_argument(
+ "--architecture",
+ "--nativearch",
+ help="native architecture of the chroot. Ignored if --buildinfo is"
+ " used. Foreign architectures are inferred from the package list."
+ " Not required if packages are architecture qualified.",
+ )
+ parser.add_argument(
+ "--ignore-notfound",
+ action="store_true",
+ help="only warn about packages that cannot be found on "
+ "snapshot.debian.org instead of exiting",
+ )
+ group = parser.add_mutually_exclusive_group(required=True)
+ group.add_argument(
+ "--buildinfo",
+ type=parse_buildinfo,
+ help="use packages from a buildinfo file. Read buildinfo file from "
+ 'standard input if value is "-".',
+ )
+ group.add_argument(
+ "--packages",
+ "--pkgs",
+ action="extend",
+ type=parse_pkgs,
+ help="list of packages, optional architecture and version, separated "
+ "by comma or linebreak. Read list from standard input if value is "
+ '"-". Read list from a file if value starts with "./" or "/". The '
+ "option can be specified multiple times. Package name, "
+ "version and architecture are separated by one or more characters "
+ "that are not legal in the respective adjacent field. Leading and "
+ "trailing illegal characters are allowed. Example: "
+ "pkg1:arch=ver1,pkg2:arch=ver2",
+ )
+ parser.add_argument(
+ "--sources-list-only",
+ action="store_true",
+ help="only query metasnap.debian.net and print the sources.list "
+ "needed to create chroot and exit",
+ )
+ parser.add_argument(
+ "output", nargs="?", default="-", help="path to output chroot tarball"
+ )
+ return parser.parse_args(args)
+
+
+def query_metasnap(pkgsleft, archive, nativearch):
+ handled_pkgs = set(pkgsleft)
+ r = requests.post(
+ "http://metasnap.debian.net/cgi-bin/api",
+ files={
+ "archive": archive,
+ "arch": nativearch,
+ "pkgs": ",".join([n + ":" + a + "=" + v for n, a, v in handled_pkgs]),
+ },
+ timeout=60,
+ )
+ if r.status_code == 404:
+ for line in r.text.splitlines():
+ n, a, v = line.split()
+ handled_pkgs.remove((n, a, v))
+ r = requests.post(
+ "http://metasnap.debian.net/cgi-bin/api",
+ files={
+ "archive": archive,
+ "arch": nativearch,
+ "pkgs": ",".join([n + ":" + a + "=" + v for n, a, v in handled_pkgs]),
+ },
+ timeout=60,
+ )
+ assert r.status_code == 200, r.text
+
+ suite2pkgs = defaultdict(set)
+ pkg2range = {}
+ for line in r.text.splitlines():
+ n, a, v, s, c, b, e = line.split()
+ assert (n, a, v) in handled_pkgs
+ suite2pkgs[s].add((n, a, v))
+ # this will only keep one range of packages with multiple
+ # ranges but we don't care because we only need one
+ pkg2range[((n, a, v), s)] = (c, b, e)
+
+ return handled_pkgs, suite2pkgs, pkg2range
+
+
+def comp_ts(ranges):
+ last = "19700101T000000Z" # impossibly early date
+ res = []
+ for c, b, e in ranges:
+ if last >= b:
+ # add the component the current timestamp needs
+ res[-1][1].add(c)
+ continue
+ # add new timestamp with initial component
+ last = e
+ res.append((last, set([c])))
+ return res
+
+
+def compute_sources(pkgs, nativearch, ignore_notfound) -> list[Source]:
+ sources = []
+ pkgsleft = set(pkgs)
+ for archive in [
+ "debian",
+ "debian-debug",
+ "debian-security",
+ "debian-ports",
+ "debian-volatile",
+ "debian-backports",
+ ]:
+ if len(pkgsleft) == 0:
+ break
+
+ handled_pkgs, suite2pkgs, pkg2range = query_metasnap(
+ pkgsleft, archive, nativearch
+ )
+
+ # greedy algorithm:
+ # pick the suite covering most packages first
+ while len(handled_pkgs) > 0:
+ bestsuite = sorted(suite2pkgs.items(), key=lambda v: len(v[1]))[-1][0]
+ ranges = [pkg2range[nav, bestsuite] for nav in suite2pkgs[bestsuite]]
+ # sort by end-time
+ ranges.sort(key=itemgetter(2))
+
+ for ts, comps in comp_ts(ranges):
+ sources.append(Source(archive, ts, bestsuite, comps))
+
+ for nav in suite2pkgs[bestsuite]:
+ handled_pkgs.remove(nav)
+ pkgsleft.remove(nav)
+ for suite in suite2pkgs:
+ if suite == bestsuite:
+ continue
+ if nav in suite2pkgs[suite]:
+ suite2pkgs[suite].remove(nav)
+ del suite2pkgs[bestsuite]
+ if pkgsleft:
+ print("cannot find:", file=sys.stderr)
+ print(
+ "\n".join([f"{pkg[0]}:{pkg[1]}={pkg[2]}" for pkg in pkgsleft]),
+ file=sys.stderr,
+ )
+ if not ignore_notfound:
+ sys.exit(1)
+
+ return sources
+
+
+def create_repo(tmpdirname, pkgs):
+ with open(tmpdirname + "/control", "w", encoding="utf8") as f:
+
+ def pkg2name(n, a, v):
+ if a is None:
+ return f"{n} (= {v})"
+ return f"{n}:{a} (= {v})"
+
+ f.write("Package: debootsnap-dummy\n")
+ f.write(f"Depends: {', '.join([pkg2name(*pkg) for pkg in pkgs])}\n")
+ subprocess.check_call(
+ ["equivs-build", tmpdirname + "/control"], cwd=tmpdirname + "/cache"
+ )
+
+ packages_content = subprocess.check_output(
+ ["apt-ftparchive", "packages", "."], cwd=tmpdirname + "/cache"
+ )
+ with open(tmpdirname + "/cache/Packages", "wb") as f:
+ f.write(packages_content)
+ release_content = subprocess.check_output(
+ [
+ "apt-ftparchive",
+ "release",
+ "-oAPT::FTPArchive::Release::Suite=dummysuite",
+ ".",
+ ],
+ cwd=tmpdirname + "/cache",
+ )
+ with open(tmpdirname + "/cache/Release", "wb") as f:
+ f.write(release_content)
+
+
+@contextmanager
+def serve_repo(tmpdirname):
+ httpd = http.server.HTTPServer(
+ ("localhost", 0),
+ partial(http.server.SimpleHTTPRequestHandler, directory=tmpdirname + "/cache"),
+ )
+ # run server in a new thread
+ server_thread = threading.Thread(target=httpd.serve_forever)
+ server_thread.daemon = True
+ # start thread
+ server_thread.start()
+ # retrieve port (in case it was generated automatically)
+ _, port = httpd.server_address
+ try:
+ yield port
+ finally:
+ httpd.shutdown()
+ httpd.server_close()
+ server_thread.join()
+
+
+def run_mmdebstrap(
+ tmpdirname, sources: list[Source], nativearch, foreignarches, output
+):
+ with open(tmpdirname + "/sources.list", "w", encoding="utf8") as f:
+ for source in sources:
+ f.write(source.deb_line())
+ # we serve the directory via http instead of using a copy:// mirror
+ # because the temporary directory is not accessible to the unshared
+ # user
+ with serve_repo(tmpdirname) as port:
+ cmd = [
+ "mmdebstrap",
+ f"--architectures={','.join([nativearch] + list(foreignarches))}",
+ "--variant=essential",
+ "--include=debootsnap-dummy",
+ '--aptopt=Apt::Key::gpgvcommand "/usr/libexec/mmdebstrap/gpgvnoexpkeysig"',
+ '--customize-hook=chroot "$1" dpkg -r debootsnap-dummy',
+ '--customize-hook=chroot "$1" dpkg-query --showformat '
+ "'${binary:Package}=${Version}\\n' --show > \"$1/pkglist\"",
+ "--customize-hook=download /pkglist ./pkglist",
+ '--customize-hook=rm "$1/pkglist"',
+ "--customize-hook=upload sources.list /etc/apt/sources.list",
+ "dummysuite",
+ output,
+ f"deb [trusted=yes] http://localhost:{port}/ ./",
+ ]
+ subprocess.check_call(cmd, cwd=tmpdirname)
+
+ newpkgs = set()
+ with open(tmpdirname + "/pkglist", encoding="utf8") as f:
+ for line in f:
+ line = line.rstrip()
+ n, v = line.split("=")
+ a = nativearch
+ if ":" in n:
+ n, a = n.split(":")
+ newpkgs.add((n, a, v))
+
+ return newpkgs
+
+
+@contextmanager
+def proxy_snapshot(tmpdirname):
+ httpd = socketserver.TCPServer(
+ # the default address family for socketserver is AF_INET so we
+ # explicitly bind to ipv4 localhost
+ ("localhost", 0),
+ partial(Proxy, directory=tmpdirname + "/cache"),
+ )
+ # run server in a new thread
+ server_thread = threading.Thread(target=httpd.serve_forever)
+ server_thread.daemon = True
+ # start thread
+ server_thread.start()
+ # retrieve port (in case it was generated automatically)
+ _, port = httpd.server_address
+ try:
+ yield port
+ finally:
+ httpd.shutdown()
+ httpd.server_close()
+ server_thread.join()
+
+
+def download_packages(
+ tmpdirname, sources: list[Source], pkgs, nativearch, foreignarches
+):
+ for d in [
+ "/etc/apt/apt.conf.d",
+ "/etc/apt/sources.list.d",
+ "/etc/apt/preferences.d",
+ "/var/cache/apt",
+ "/var/lib/apt/lists/partial",
+ "/var/lib/dpkg",
+ ]:
+ os.makedirs(tmpdirname + "/" + d)
+ # apt-get update requires /var/lib/dpkg/status
+ with open(tmpdirname + "/var/lib/dpkg/status", "w", encoding="utf8") as f:
+ pass
+ with open(tmpdirname + "/apt.conf", "w", encoding="utf8") as f:
+ f.write(f'Apt::Architecture "{nativearch}";\n')
+ f.write("Apt::Architectures { " + f'"{nativearch}"; ')
+ for a in foreignarches:
+ f.write(f'"{a}"; ')
+ f.write("};\n")
+ f.write('Dir "' + tmpdirname + '";\n')
+ f.write('Dir::Etc::Trusted "/etc/apt/trusted.gpg";\n')
+ f.write('Dir::Etc::TrustedParts "/usr/share/keyrings/";\n')
+ f.write('Acquire::Languages "none";\n')
+ # f.write("Acquire::http::Dl-Limit \"1000\";\n")
+ # f.write("Acquire::https::Dl-Limit \"1000\";\n")
+ f.write('Acquire::Retries "5";\n')
+ # ignore expired signatures
+ f.write('Apt::Key::gpgvcommand "/usr/libexec/mmdebstrap/gpgvnoexpkeysig";\n')
+
+ os.makedirs(tmpdirname + "/cache")
+
+ with proxy_snapshot(tmpdirname) as port:
+ with open(tmpdirname + "/etc/apt/sources.list", "w", encoding="utf8") as f:
+ for source in sources:
+ f.write(source.deb_line(f"localhost:{port}"))
+ subprocess.check_call(
+ ["apt-get", "update", "--error-on=any"],
+ env={"APT_CONFIG": tmpdirname + "/apt.conf"},
+ )
+ for i, nav in enumerate(pkgs):
+ print(f"{i + 1} of {len(pkgs)}")
+ with tempfile.TemporaryDirectory() as tmpdir2:
+ subprocess.check_call(
+ ["apt-get", "download", "--yes", f"{nav[0]}:{nav[1]}={nav[2]}"],
+ cwd=tmpdir2,
+ env={"APT_CONFIG": tmpdirname + "/apt.conf"},
+ )
+ debs = os.listdir(tmpdir2)
+ assert len(debs) == 1
+ # Normalize the package name to how it appears in the archive.
+ # Mainly this removes the epoch from the filename, see
+ # https://bugs.debian.org/645895
+ # This avoids apt bugs connected with a percent sign in the
+ # filename as they occasionally appear, for example as
+ # introduced in apt 2.1.15 and later fixed by DonKult:
+ # https://salsa.debian.org/apt-team/apt/-/merge_requests/175
+ subprocess.check_call(["dpkg-name", tmpdir2 + "/" + debs[0]])
+ debs = os.listdir(tmpdir2)
+ assert len(debs) == 1
+ shutil.move(tmpdir2 + "/" + debs[0], tmpdirname + "/cache")
+
+
+def main(arguments: list[str]) -> None:
+ args = parse_args(arguments)
+ if args.packages:
+ pkgs = [v for sublist in args.packages for v in sublist]
+ if args.architecture is None:
+ arches = {a for _, a, _ in pkgs if a is not None}
+ if len(arches) == 0:
+ print("packages are not architecture qualified", file=sys.stderr)
+ print(
+ "use --architecture to set the native architecture", file=sys.stderr
+ )
+ sys.exit(1)
+ elif len(arches) > 1:
+ print("more than one architecture in the package list", file=sys.stderr)
+ print(
+ "use --architecture to set the native architecture", file=sys.stderr
+ )
+ sys.exit(1)
+ nativearch = arches.pop()
+ assert arches == set()
+ else:
+ nativearch = args.architecture
+ else:
+ pkgs, nativearch = args.buildinfo
+ # unknown architectures are the native architecture
+ pkgs = [(n, a if a is not None else nativearch, v) for n, a, v in pkgs]
+ # make package list unique
+ pkgs = list(set(pkgs))
+ # compute foreign architectures
+ foreignarches = set()
+ for _, a, _ in pkgs:
+ if a != nativearch:
+ foreignarches.add(a)
+
+ for tool in [
+ "equivs-build",
+ "apt-ftparchive",
+ "mmdebstrap",
+ "apt-get",
+ "dpkg-name",
+ ]:
+ if shutil.which(tool) is None:
+ print(f"{tool} is required but not installed", file=sys.stderr)
+ sys.exit(1)
+
+ sources = compute_sources(pkgs, nativearch, args.ignore_notfound)
+
+ if args.sources_list_only:
+ for source in sources:
+ print(source.deb_line(), end="")
+ sys.exit(0)
+
+ with tempfile.TemporaryDirectory() as tmpdirname:
+ download_packages(tmpdirname, sources, pkgs, nativearch, foreignarches)
+
+ create_repo(tmpdirname, pkgs)
+
+ newpkgs = run_mmdebstrap(
+ tmpdirname, sources, nativearch, foreignarches, args.output
+ )
+
+ # make sure that the installed packages match the requested package
+ # list
+ assert set(newpkgs) == set(pkgs)
+
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
diff --git a/scripts/debootsnap.py b/scripts/debootsnap.py
new file mode 120000
index 0000000..1117123
--- /dev/null
+++ b/scripts/debootsnap.py
@@ -0,0 +1 @@
+debootsnap \ No newline at end of file
diff --git a/scripts/debpkg-wrapper.c b/scripts/debpkg-wrapper.c
new file mode 100644
index 0000000..4a4d48f
--- /dev/null
+++ b/scripts/debpkg-wrapper.c
@@ -0,0 +1,17 @@
+/* Wrapper for debpkg so that we don't have to use suidperl any longer
+ (it's deprecated as of Perl 5.8.0) */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+
+#define REAL_PATH "/usr/share/devscripts/debpkg"
+
+int main(int ac, char **av)
+{
+ execv(REAL_PATH, av);
+
+ fprintf(stderr, "Error executing debpkg: %s\n", strerror(errno));
+ return 1;
+}
diff --git a/scripts/debpkg.1 b/scripts/debpkg.1
new file mode 100644
index 0000000..77df022
--- /dev/null
+++ b/scripts/debpkg.1
@@ -0,0 +1,25 @@
+.TH DEBPKG 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debpkg \- wrapper for dpkg
+.SH SYNOPSIS
+\fBdebpkg\fP \fIdpkg-options\fP
+.SH DESCRIPTION
+\fBdebpkg\fR simply invokes \fBdpkg\fP(1) but first becomes superuser
+so that \fBdpkg\fP is able to install and remove packages. It also
+cleans the environment and resets PATH to a sane default:
+"/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11" so that local versions of
+programs are not run by accident.
+.SH REQUIREMENTS
+\fBdebpkg\fP must be given superuser privileges in some way to
+function properly. \fBAccess to debpkg with those privileges is the
+same as having superuser access to your machine.\fP \fBdebpkg\fP will
+abort if it finds that it neither being run by root nor setuid root.
+.PP
+The \fBdevscripts\fR package has been designed to allow \fBdebpkg\fR
+to be made setuid root. This works by using a compiled wrapper
+script, which means that \fBsuidperl\fR is not required. See
+\fBdpkg-statoverride\fR(8) if you wish to make this program setuid
+root. \fBsudo\fR or \fBsuper\fR could also conceivably be used.
+.SH AUTHOR
+Christoph Lameter <clameter@debian.org>; minor modifications made by
+Julian Gilbey <jdg@debian.org>.
diff --git a/scripts/debpkg.pl b/scripts/debpkg.pl
new file mode 100755
index 0000000..4d8be83
--- /dev/null
+++ b/scripts/debpkg.pl
@@ -0,0 +1,95 @@
+#!/usr/bin/perl
+
+# Perl version of Christoph Lameter's debpkg program.
+# Written by Julian Gilbey, December 1998.
+
+# Copyright 1999, Julian Gilbey
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# All this program does is to check that it is either running as root
+# or setuid root, and then exec dpkg with the command line options.
+
+# As this may be running setuid, we make sure to clean out the
+# environment before we go further. Also wise for building the
+# packages, anyway. We don't put /usr/local/bin in the PATH as Debian
+# programs will presumably be built without the use of any locally
+# installed programs. This could be changed, but in which case,
+# you probably want to add /usr/local/bin at the END so that you don't
+# get any unexpected behaviour.
+
+use 5.003;
+use strict;
+use warnings;
+use File::Basename;
+
+my $progname = basename($0);
+
+# Predeclare functions
+sub fatal($);
+
+my $usage = "Usage: $progname --help|--version|dpkg-options\n";
+
+my $version = <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1999 by Julian Gilbey, all rights reserved.
+Based on code by Christoph Lameter.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+
+##
+## handle command-line options
+##
+if (!@ARGV) { print STDERR $usage; exit 1; }
+if ($ARGV[0] eq '--help') { print $usage; exit 0; }
+if ($ARGV[0] eq '--version') { print $version; exit 0; }
+
+# We *do* preserve locale variables; dpkg should know how to handle
+# them, and anyone running this with root privileges has total power
+# over the system anyway, so doesn't really need to worry about forging
+# locale data. We don't try to preserve TEXTDOMAIN and the like.
+foreach my $var (keys %ENV) {
+ delete $ENV{$var}
+ unless $var =~ /^(PATH|TERM|HOME|LOGNAME|LANG)$/
+ or $var =~ /^LC_[A-Z]+$/;
+}
+
+$ENV{'PATH'} = "/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11";
+# $ENV{'PATH'} = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11";
+$ENV{'TERM'} = 'dumb' unless defined $ENV{'TERM'};
+
+# Pick up superuser privileges if we are running setuid root
+if ($< != 0 && $> == 0) { $< = $>; }
+fatal "debpkg is only useful if it is run by root or setuid root!"
+ if $< != 0;
+
+# Pick up group 'root'
+$( = $) = 0;
+
+# @ARGV is tainted, so we need to untaint it. Don't bother doing any
+# checking; anyone running this as root can do anything anyway.
+my @clean_argv = map { /^(.*)$/ && $1; } @ARGV;
+exec 'dpkg', @clean_argv or fatal "Couldn't exec dpkg: $!\n";
+
+###### Subroutines
+
+sub fatal($) {
+ my ($pack, $file, $line);
+ ($pack, $file, $line) = caller();
+ (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d;
+ $msg =~ s/\n\n$/\n/;
+ die $msg;
+}
diff --git a/scripts/debrebuild.pl b/scripts/debrebuild.pl
new file mode 100755
index 0000000..561db86
--- /dev/null
+++ b/scripts/debrebuild.pl
@@ -0,0 +1,715 @@
+#!/usr/bin/perl
+#
+# Copyright © 2014-2020 Johannes Schauer Marin Rodrigues <josch@debian.org>
+# Copyright © 2020 Niels Thykier <niels@thykier.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+use strict;
+use warnings;
+use autodie;
+
+use Getopt::Long qw(:config gnu_getopt no_bundling no_auto_abbrev);
+
+use Dpkg::Control;
+use Dpkg::Index;
+use Dpkg::Deps;
+use Dpkg::Source::Package;
+use File::Temp qw(tempfile tempdir);
+use File::Path qw(make_path);
+use File::HomeDir;
+use JSON::PP;
+use Time::Piece;
+use File::Basename;
+use List::Util qw(any none);
+
+my $progname;
+
+BEGIN {
+ $progname = basename($0);
+ eval { require String::ShellQuote; };
+ if ($@) {
+ if ($@ =~ /^Can\'t locate String\/ShellQuote\.pm/) {
+ die
+"$progname: you must have the libstring-shellquote-perl package installed\n"
+ . "to use this script";
+ } else {
+ die
+"$progname: problem loading the String::ShellQuote module:\n $@\n"
+ . "Have you installed the libstring-shellquote-perl package?";
+ }
+ }
+
+ eval {
+ require LWP::Simple;
+ require LWP::UserAgent;
+ require URI::Escape; # libwww-perl depends on liburi-perl
+ no warnings;
+ $LWP::Simple::ua
+ = LWP::UserAgent->new(agent => 'LWP::UserAgent/debrebuild');
+ $LWP::Simple::ua->env_proxy();
+ };
+ if ($@) {
+ if ($@ =~ m/Can\'t locate LWP/) {
+ die "$progname: you must have the libwww-perl package installed\n"
+ . "to use this script";
+ } else {
+ die "$progname: problem loading the LWP and URI modules:\n $@\n"
+ . "Have you installed the libwww-perl package?";
+ }
+ }
+
+}
+
+my $respect_build_path = 1;
+my $use_tor = 0;
+my $outdir = './';
+my $builder = 'none';
+
+my %OPTIONS = (
+ 'help|h' => sub { usage(0); },
+ 'use-tor-proxy!' => \$use_tor,
+ 'respect-build-path!' => \$respect_build_path,
+ 'buildresult=s' => \$outdir,
+ 'builder=s' => \$builder,
+);
+
+sub usage {
+ my ($exit_code) = @_;
+ $exit_code //= 0;
+ print <<EOF;
+Usage: $progname [options] <buildinfo>
+ $progname <--help|-h>
+
+Given a buildinfo file from a Debian package, generate instructions for
+attempting to reproduce the binary packages built from the associated source
+and build information.
+
+Options:
+ --help, -h Show this help and exit
+ --[no-]use-tor-proxy Whether to fetch resources via tor (socks://127.0.0.1:9050)
+ Assumes "apt-transport-tor" is installed both in host + chroot
+ --[no-]respect-build-path Whether to setup the build to use the Build-Path from the
+ provided .buildinfo file.
+ --buildresults Directory for the build artifacts (default: ./)
+ --builder=BUILDER Which building software should be used. Possible values are
+ none, sbuild, mmdebstrap, dpkg and sbuild+unshare. The default
+ is none. See section BUILDER for details.
+
+Note: $progname can parse buildinfo files with and without a GPG signature. However,
+the signature (if present) is discarded as debrebuild does not support verifying
+it. If the authenticity or integrity of the buildinfo files are important to
+you, checking these need to be done before invoking $progname, for example by using
+dscverify.
+
+EXAMPLES
+
+ \$ $progname --buildresults=./artifacts --builder=mmdebstrap hello_2.10-2_amd64.buildinfo
+
+BUILDERS
+
+debrebuild can use different backends to perform the actual package rebuild.
+The desired backend is chosen using the --builder option. The default is
+"none".
+
+ none Dry-run mode. No build is performed.
+ sbuild Use sbuild to build the package. This requires sbuild to be
+ setup with schroot chroots of Debian stable distributions.
+ mmdebstrap Use mmdebstrap to build the package. This requires no
+ setup and no superuser privileges.
+ dpkg Directly run apt-get and dpkg-buildpackage on the current
+ system without chroot. This requires root privileges.
+ sbuild+unshare Use sbuild with the unshare backend. This will create the
+ chroot and perform the build without superuser privileges
+ and without any setup.
+
+UNSHARE
+
+Before kernel 5.10.1 or before Debian 11 (Bullseye), unprivileged user
+namespaces were disabled in Debian for security reasons. Refer to Debian bug
+#898446 for details. To enable user namespaces, run:
+
+ \$ sudo sysctl -w kernel.unprivileged_userns_clone=1
+
+The sbuild+unshare builder requires and the mmdebstrap builder benefits from
+having unprivileged user namespaces activated. On Ubuntu they are enabled by
+default.
+
+LIMITATIONS
+
+Currently, the code assumes that all packages were at some point part of Debian
+unstable main. This fails for packages from Debian ports, packages from
+experimental as well as for locally built packages or packages from third
+party repositories. Enabling support for Debian ports and experimental is
+conceptually possible and only needs somebody implementing it.
+
+EOF
+
+ exit($exit_code);
+}
+
+GetOptions(%OPTIONS);
+
+my $buildinfo = shift @ARGV;
+if (not defined($buildinfo)) {
+ print STDERR "ERROR: Missing mandatory buildinfo filename\n";
+ print STDERR "\n";
+ usage(1);
+}
+if ($buildinfo eq '--help' or $buildinfo eq '-h') {
+ usage(0);
+}
+
+if ($buildinfo =~ m/^-/) {
+ print STDERR "ERROR: Unsupported option $buildinfo\n";
+ print STDERR "\n";
+ usage(1);
+}
+
+if (@ARGV) {
+ print STDERR "ERROR: This program requires exactly argument!\n";
+ print STDERR "\n";
+ usage(1);
+}
+
+my $base_mirror = "http://snapshot.debian.org/archive/debian";
+if ($use_tor) {
+ $base_mirror = "tor+http://snapshot.debian.org/archive/debian";
+ eval {
+ $LWP::Simple::ua->proxy([qw(http https)] => 'socks://127.0.0.1:9050');
+ };
+ if ($@) {
+ if ($@ =~ m/Can\'t locate LWP/) {
+ die
+"Unable to use tor: the liblwp-protocol-socks-perl package is not installed\n";
+ } else {
+ die "Unable to use tor: Couldn't load socks proxy support: $@\n";
+ }
+ }
+}
+
+# buildinfo support in libdpkg-perl (>= 1.18.11)
+my $cdata = Dpkg::Control->new(type => CTRL_FILE_BUILDINFO, allow_pgp => 1);
+
+if (not $cdata->load($buildinfo)) {
+ die "cannot load $buildinfo\n";
+}
+
+if ($cdata->get_option('is_pgp_signed')) {
+ print
+"$buildinfo contained a GPG signature; it has NOT been validated (debrebuild does not support this)!\n";
+} else {
+ print "$buildinfo was unsigned\n";
+}
+
+my @architectures = split /\s+/, $cdata->{"Architecture"};
+my $build_source = (scalar(grep /^source$/, @architectures)) == 1;
+my $build_archall = (scalar(grep /^all$/, @architectures)) == 1;
+@architectures = grep { !/^source$/ && !/^all$/ } @architectures;
+if (scalar @architectures > 1) {
+ die "more than one architecture in Architecture field\n";
+}
+my $build_archany = (scalar @architectures) == 1;
+
+my $build_arch = $cdata->{"Build-Architecture"};
+if (not defined($build_arch)) {
+ die "need Build-Architecture field\n";
+}
+my $host_arch = $cdata->{"Host-Architecture"};
+if (not defined($host_arch)) {
+ $host_arch = $build_arch;
+}
+
+my $srcpkgname = $cdata->{Source};
+my $srcpkgver = $cdata->{Version};
+{
+ # make $@ local, so we don't print "Undefined subroutine" error message
+ # in other parts where we evaluate $@
+ local $@ = '';
+ # field_parse_binary_source is only available starting with dpkg 1.21.0
+ eval { ($srcpkgname, $srcpkgver) = field_parse_binary_source($cdata); };
+ if ($@) {
+ ($srcpkgname, $srcpkgver) = split / /, $srcpkgname, 2;
+ # Add a simple control check to avoid the worst surprises and stop
+ # obvious cases of garbage-in-garbage-out.
+ die("Unexpected source package name: ${srcpkgname}\n")
+ if $srcpkgname =~ m{[ \t_/\(\)<>!\n%&\$\#\@]};
+ # remove the surrounding parenthesis from the version
+ $srcpkgver =~ s/^\((.*)\)$/$1/;
+ }
+}
+
+my $srcpkgbinver
+ = $cdata->{Version}; # this version will include the binmu suffix
+
+my $new_buildinfo;
+{
+ my $arch;
+ if ($build_archany) {
+ $arch = $host_arch;
+ } elsif ($build_archall) {
+ $arch = 'all';
+ } else {
+ die "nothing to build\n";
+ }
+ $new_buildinfo = "$outdir/${srcpkgname}_${srcpkgbinver}_$arch.buildinfo";
+}
+if (-e $new_buildinfo) {
+ my ($dev1, $ino1) = (lstat $buildinfo)[0, 1]
+ or die "cannot lstat $buildinfo: $!\n";
+ my ($dev2, $ino2) = (lstat $new_buildinfo)[0, 1]
+ or die "cannot lstat $new_buildinfo: $!\n";
+ if ($dev1 == $dev2 && $ino1 == $ino2) {
+ die "refusing to overwrite the input buildinfo file\n";
+ }
+}
+
+my $inst_build_deps = $cdata->{"Installed-Build-Depends"};
+if (not defined($inst_build_deps)) {
+ die "need Installed-Build-Depends field\n";
+}
+my $custom_build_path = $respect_build_path ? $cdata->{'Build-Path'} : undef;
+
+if (defined($custom_build_path)) {
+ if ($custom_build_path =~ m{['`\$\\"\(\)<>#]|(?:\a|/)[.][.](?:\z|/)}) {
+ warn(
+"Retry build with --no-respect-build-path to ignore the Build-Path field.\n"
+ );
+ die(
+"Refusing to use $custom_build_path as Build-Path: Looks too special to be true"
+ );
+ }
+
+ if ($custom_build_path eq '' or $custom_build_path !~ m{^/}) {
+ warn(
+"Retry build with --no-respect-build-path to ignore the Build-Path field.\n"
+ );
+ die(
+qq{Build-Path must be a non-empty absolute path (i.e. start with "/").\n}
+ );
+ }
+ print "Using defined Build-Path: ${custom_build_path}\n";
+} else {
+ if ($respect_build_path) {
+ print
+"No Build-Path defined; not setting a defined build path for this build.\n";
+ }
+}
+
+my $srcpkg = Dpkg::Source::Package->new();
+$srcpkg->{fields}{'Source'} = $srcpkgname;
+$srcpkg->{fields}{'Version'} = $srcpkgver;
+my $dsc_fname
+ = (dirname($buildinfo)) . '/' . $srcpkg->get_basename(1) . ".dsc";
+
+my $environment = $cdata->{"Environment"};
+if (not defined($environment)) {
+ die "need Environment field\n";
+}
+$environment =~ s/\n/ /g; # remove newlines
+$environment =~ s/^ //; # remove leading whitespace
+
+my @environment;
+foreach my $line (split /\n/, $cdata->{"Environment"}) {
+ chomp $line;
+ if ($line eq '') {
+ next;
+ }
+ my ($name, $val) = split /=/, $line, 2;
+ $val =~ s/^"(.*)"$/$1/;
+ push @environment, "$name=$val";
+}
+
+# gather all installed build-depends and figure out the version of base-files
+my $base_files_version;
+my @inst_build_deps = ();
+$inst_build_deps
+ = deps_parse($inst_build_deps, reduce_arch => 0, build_dep => 0);
+if (!defined $inst_build_deps) {
+ die "deps_parse failed\n";
+}
+
+foreach my $pkg ($inst_build_deps->get_deps()) {
+ if (!$pkg->isa('Dpkg::Deps::Simple')) {
+ die "dependency disjunctions are not allowed\n";
+ }
+ if (not defined($pkg->{package})) {
+ die "name undefined\n";
+ }
+ if (defined($pkg->{relation})) {
+ if ($pkg->{relation} ne "=") {
+ die "wrong relation";
+ }
+ if (not defined($pkg->{version})) {
+ die "version undefined\n";
+ }
+ } else {
+ die "no version";
+ }
+ if ($pkg->{package} eq "base-files") {
+ if (defined($base_files_version)) {
+ die "more than one base-files\n";
+ }
+ $base_files_version = $pkg->{version};
+ }
+ push @inst_build_deps,
+ {
+ name => $pkg->{package},
+ architecture => $pkg->{archqual},
+ version => $pkg->{version} };
+}
+
+if (!defined($base_files_version)) {
+ die "no base-files\n";
+}
+
+if ($builder ne "none") {
+ if (!-e $outdir) {
+ make_path($outdir);
+ }
+}
+
+my $build = '';
+my $changesarch = '';
+if ($build_archany and $build_archall) {
+ $build = "binary";
+ $changesarch = $host_arch;
+} elsif ($build_archany and !$build_archall) {
+ $build = "any";
+ $changesarch = $host_arch;
+} elsif (!$build_archany and $build_archall) {
+ $build = "all";
+ $changesarch = 'all';
+} else {
+ die "nothing to build\n";
+}
+
+my @install = ();
+foreach my $pkg (@inst_build_deps) {
+ my $pkg_name = $pkg->{name};
+ my $pkg_ver = $pkg->{version};
+ my $pkg_arch = $pkg->{architecture};
+ if ( not defined $pkg_arch
+ or $pkg_arch eq "all"
+ or $pkg_arch eq $build_arch) {
+ push @install, "$pkg_name=$pkg_ver";
+ } else {
+ push @install, "$pkg_name:$pkg_arch=$pkg_ver";
+ }
+}
+
+my $tarballpath = '';
+my $sourceslist = '';
+if (any { $_ eq $builder } ('none', 'dpkg')) {
+ open my $fh, '-|', 'debootsnap', "--buildinfo=$buildinfo",
+ '--sources-list-only' // die "cannot exec debootsnap";
+ $sourceslist = do { local $/; <$fh> };
+ close $fh;
+} elsif (any { $_ eq $builder } ('mmdebstrap', 'sbuild', 'sbuild+unshare')) {
+ (undef, $tarballpath)
+ = tempfile('debrebuild.tar.XXXXXXXXXXXX', OPEN => 0, TMPDIR => 1);
+ 0 == system 'debootsnap', "--buildinfo=$buildinfo", $tarballpath
+ or die "debootsnap failed";
+} else {
+ die "unsupported builder: $builder\n";
+}
+
+if ($builder eq "none") {
+ print "\n";
+ print "Manual installation and build\n";
+ print "-----------------------------\n";
+ print "\n";
+ print
+ "The following sources.list contains all the required repositories:\n";
+ print "\n";
+ print "$sourceslist\n";
+ print "\n";
+ print "You can manually install the right dependencies like this:\n";
+ print "\n";
+ print "apt-get install --no-install-recommends";
+
+ # Release files from snapshots.d.o have often expired by the time
+ # we fetch them. Include the option to work around that to assist
+ # the user.
+ print " -oAcquire::Check-Valid-Until=false";
+ foreach my $pkg (@install) {
+ print " $pkg";
+ }
+ print "\n";
+ print "\n";
+ print "And then build your package:\n";
+ print "\n";
+ if ($custom_build_path) {
+ require Cwd;
+ my $custom_build_parent_dir = dirname($custom_build_path);
+ my $dsc_path = Cwd::realpath($dsc_fname)
+ // die("Cannot resolve ${dsc_fname}: $!\n");
+ print "mkdir -p \"${custom_build_parent_dir}\"\n";
+ print qq{dpkg-source -x "${dsc_path}" "${custom_build_path}"\n};
+ print "cd \"$custom_build_path\"\n";
+ } else {
+ print qq{dpkg-source -x "${dsc_fname}"\n};
+ print "cd packagedirectory\n";
+ }
+ print "\n";
+ if ($cdata->{"Binary-Only-Changes"}) {
+ print( "Since this is a binNMU, you must put the following "
+ . "lines at the top of debian/changelog:\n\n");
+ print($cdata->{"Binary-Only-Changes"});
+ }
+ print "\n";
+ print( "$environment dpkg-buildpackage -uc "
+ . "--host-arch=$host_arch --build=$build\n");
+} elsif ($builder eq "dpkg") {
+ if ("$build_arch\n" ne `dpkg --print-architecture`) {
+ die "must be run on $build_arch\n";
+ }
+
+ if ($> != 0) {
+ die "you must be root for the dpkg builder\n";
+ }
+
+ if (-e $custom_build_path) {
+ die "$custom_build_path exists -- refusing to overwrite\n";
+ }
+
+ my $sources = '/etc/apt/sources.list.d/debrebuild.list';
+ if (-e $sources) {
+ die "$sources already exists -- refusing to overwrite\n";
+ }
+ open(FH, '>', $sources) or die "cannot open $sources: $!\n";
+ print FH "$sourceslist\n";
+ close FH;
+
+ my $config = '/etc/apt/apt.conf.d/23-debrebuild.conf';
+ if (-e $config) {
+ die "$config already exists -- refusing to overwrite\n";
+ }
+ open(FH, '>', $config) or die "cannot open $config: $!\n";
+ my @common_aptopts = (
+ 'Acquire::Check-Valid-Until "false";',
+ 'Acquire::http::Dl-Limit "1000";',
+ 'Acquire::https::Dl-Limit "1000";',
+ 'Acquire::Retries "5";',
+ 'APT::Get::allow-downgrades "true";',
+ );
+ foreach my $line (@common_aptopts) {
+ print FH "$line\n";
+ }
+ close FH;
+
+ 0 == system 'apt-get', 'update' or die "apt-get update failed\n";
+
+ my @cmd
+ = ('apt-get', 'install', '--no-install-recommends', '--yes', @install);
+ 0 == system @cmd or die "apt-get install failed\n";
+
+ 0 == system 'apt-get', 'source', '--only-source', '--download-only',
+ "$srcpkgname=$srcpkgver"
+ or die "apt-get source failed\n";
+ unlink $sources or die "failed to unlink $sources\n";
+ unlink $config or die "failed to unlink $config\n";
+ make_path(dirname $custom_build_path);
+ 0 == system 'dpkg-source', '--no-check', '--extract',
+ $srcpkg->get_basename(1) . '.dsc', $custom_build_path
+ or die "dpkg-source failed\n";
+
+ if ($cdata->{"Binary-Only-Changes"}) {
+ open my $infh, '<', "$custom_build_path/debian/changelog"
+ or die "cannot open debian/changelog for reading: $!\n";
+ my $changelogcontent = do { local $/; <$infh> };
+ close $infh;
+ open my $outfh, '>', "$custom_build_path/debian/changelog"
+ or die "cannot open debian/changelog for writing: $!\n";
+ my $logentry = $cdata->{"Binary-Only-Changes"};
+ # due to storing the binnmu changelog entry in deb822 buildinfo, the
+ # first character is an unwanted newline
+ $logentry =~ s/^\n//;
+ print $outfh $logentry;
+ # while the linebreak at the beginning is wrong, there are two missing
+ # at the end
+ print $outfh "\n\n";
+ print $outfh $changelogcontent;
+ close $outfh;
+ }
+ 0 == system 'env', "--chdir=$custom_build_path", @environment,
+ 'dpkg-buildpackage', '-uc', "--host-arch=$host_arch", "--build=$build"
+ or die "dpkg-buildpackage failed\n";
+ # we are not interested in the unpacked source directory
+ 0 == system 'rm', '-r', $custom_build_path
+ or die "failed to remove $custom_build_path: $?";
+ # but instead we want the produced artifacts
+ 0 == system 'dcmd', 'mv',
+ (dirname $custom_build_path)
+ . "/${srcpkgname}_${srcpkgbinver}_$changesarch.changes", $outdir
+ or die "dcmd failed\n";
+} elsif ($builder eq "sbuild" or $builder eq "sbuild+unshare") {
+
+ my @cmd = ('env', "--chdir=$outdir", @environment, 'sbuild');
+ push @cmd, "--build=$build_arch";
+ push @cmd, "--host=$host_arch";
+
+ if ($build_source) {
+ push @cmd, '--source';
+ } else {
+ push @cmd, '--no-source';
+ }
+ if ($build_archany) {
+ push @cmd, '--arch-any';
+ } else {
+ push @cmd, '--no-arch-any';
+ }
+ if ($build_archall) {
+ push @cmd, '--arch-all';
+ } else {
+ push @cmd, '--no-arch-all';
+ }
+ if ($cdata->{"Binary-Only-Changes"}) {
+ push @cmd, "--binNMU-changelog=$cdata->{'Binary-Only-Changes'}";
+ }
+ push @cmd, "--chroot=$tarballpath";
+ push @cmd, "--chroot-mode=unshare";
+ push @cmd, "--dist=unstable";
+ push @cmd, "--no-run-lintian";
+ push @cmd, "--no-run-autopkgtest";
+ push @cmd, "--no-apt-upgrade";
+ push @cmd, "--no-apt-distupgrade";
+ # disable the explainer
+ push @cmd, "--bd-uninstallable-explainer=";
+
+ if ($custom_build_path) {
+ push @cmd, "--build-path=$custom_build_path";
+ }
+ push @cmd, "${srcpkgname}_$srcpkgver";
+ print((join " ", @cmd) . "\n");
+ 0 == system @cmd or die "sbuild failed\n";
+} elsif ($builder eq "mmdebstrap") {
+
+ my @binnmucmds = ();
+ if ($cdata->{"Binary-Only-Changes"}) {
+ my $logentry = $cdata->{"Binary-Only-Changes"};
+ # due to storing the binnmu changelog entry in deb822 buildinfo, the first
+ # character is an unwanted newline
+ $logentry =~ s/^\n//;
+ # while the linebreak at the beginning is wrong, there are two missing at
+ # the end
+ $logentry .= "\n\n";
+ push @binnmucmds,
+ '{ printf "%s" '
+ . (String::ShellQuote::shell_quote $logentry)
+ . "; cat debian/changelog; } > debian/changelog.debrebuild",
+ "mv debian/changelog.debrebuild debian/changelog";
+ }
+
+ my @cmd = (
+ 'env', '-i',
+ 'PATH=/usr/sbin:/usr/bin:/sbin:/bin',
+ 'mmdebstrap',
+ "--arch=$build_arch",
+ "--variant=custom",
+ '--skip=setup',
+ '--skip=update',
+ '--skip=cleanup',
+ "--setup-hook=tar --exclude=\"./dev/*\" -C \"\$1\" -xf "
+ . (String::ShellQuote::shell_quote $tarballpath),
+ '--setup-hook=rm "$1"/etc/apt/sources.list',
+"--customize-hook=debsnap --force --destdir \"\$1\" $srcpkgname $srcpkgver",
+ '--customize-hook=chroot "$1" sh -c "'
+ . (
+ join ' && ',
+ "mkdir -p "
+ . (String::ShellQuote::shell_quote(dirname $custom_build_path)),
+ "dpkg-source --no-check -x /"
+ . $srcpkg->get_basename(1) . '.dsc '
+ . (String::ShellQuote::shell_quote $custom_build_path),
+ 'cd ' . (String::ShellQuote::shell_quote $custom_build_path),
+ @binnmucmds,
+"env $environment dpkg-buildpackage -uc -a $host_arch --build=$build",
+ 'cd /',
+ 'rm -r ' . (String::ShellQuote::shell_quote $custom_build_path))
+ . '"',
+ '--customize-hook=sync-out '
+ . (dirname $custom_build_path)
+ . " $outdir",
+ '',
+ '/dev/null',
+ );
+ print((join ' ', @cmd) . "\n");
+
+ 0 == system @cmd or die "mmdebstrap failed\n";
+} else {
+ die "unsupported builder: $builder\n";
+}
+
+# test if all checksums in the buildinfo file check out
+if ($builder ne "none") {
+ print "build artifacts stored in $outdir\n";
+
+ my $checksums = Dpkg::Checksums->new();
+ $checksums->add_from_control($cdata);
+ # remove the .dsc as we only did the binaries
+ # - the .dsc cannot be reproduced anyways because we cannot reproduce its
+ # signature
+ # - binNMUs can only be done with --build=any
+ foreach my $file ($checksums->get_files()) {
+ if ($file !~ /\.dsc$/) {
+ next;
+ }
+ $checksums->remove_file($file);
+ }
+
+ my $new_cdata
+ = Dpkg::Control->new(type => CTRL_FILE_BUILDINFO, allow_pgp => 1);
+ $new_cdata->load($new_buildinfo);
+ my $new_checksums = Dpkg::Checksums->new();
+ $new_checksums->add_from_control($new_cdata);
+
+ my @files = $checksums->get_files();
+ my @new_files = $new_checksums->get_files();
+
+ if (scalar @files != scalar @new_files) {
+ print("old buildinfo:\n" . (join "\n", @files) . "\n");
+ print("new buildinfo:\n" . (join "\n", @new_files) . "\n");
+ die "new buildinfo contains a different number of files\n";
+ }
+
+ for (my $i = 0 ; $i <= $#files ; $i++) {
+ if ($files[$i] ne $new_files[$i]) {
+ die "different checksum files at position $i\n";
+ }
+ if ($files[$i] =~ /\.dsc$/) {
+ print("skipping $files[$i]\n");
+ next;
+ }
+ print("checking $files[$i]: ");
+ if ($checksums->get_size($files[$i])
+ != $new_checksums->get_size($files[$i])) {
+ die "size differs for $files[$i]\n";
+ } else {
+ print("size... ");
+ }
+ my $chksum = $checksums->get_checksum($files[$i], undef);
+ my $new_chksum = $new_checksums->get_checksum($new_files[$i], undef);
+ if (scalar keys %{$chksum} != scalar keys %{$new_chksum}) {
+ die "different algos for $files[$i]\n";
+ }
+ foreach my $algo (keys %{$chksum}) {
+ if (!exists $new_chksum->{$algo}) {
+ die "$algo is not used in both buildinfo files\n";
+ }
+ if ($chksum->{$algo} ne $new_chksum->{$algo}) {
+ die "value of $algo differs for $files[$i]\n";
+ }
+ print("$algo... ");
+ }
+ print("all OK\n");
+ }
+}
diff --git a/scripts/debrelease.1 b/scripts/debrelease.1
new file mode 100644
index 0000000..48d0f4a
--- /dev/null
+++ b/scripts/debrelease.1
@@ -0,0 +1,138 @@
+.TH DEBRELEASE 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debrelease \- a wrapper around dupload or dput
+.SH SYNOPSIS
+\fBdebrelease\fR [\fIdebrelease options\fR] [\fIdupload/dput options\fR]
+.SH DESCRIPTION
+\fBdebrelease\fR is a simple wrapper around \fBdupload\fR or
+\fBdput\fR. It is called from within the source code tree of a
+package, and figures out the current version of a package. It then
+looks for the corresponding \fI.changes\fR file (which lists the files
+needed to upload in order to release the package) in the parent
+directory of the source code tree and calls \fBdupload\fR or
+\fBdput\fR with the \fI.changes\fR file as parameter in order to
+perform the actual uploading.
+.PP
+Options may be given to \fBdebrelease\fR; except for the ones listed
+below, they are passed on unchanged to \fBdupload\fR or \fBdput\fR.
+The \fBdevscripts\fR configuration files are also read by
+\fBdebrelease\fR as described below.
+.SH "Directory name checking"
+In common with several other scripts in the \fBdevscripts\fR package,
+\fBdebrelease\fR will climb the directory tree until it finds a
+\fIdebian/changelog\fR file. As a safeguard against stray files
+causing potential problems, it will examine the name of the parent
+directory once it finds the \fIdebian/changelog\fR file, and check
+that the directory name corresponds to the package name. Precisely
+how it does this is controlled by two configuration file variables
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR and \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR can take the following values:
+.TP
+.B 0
+Never check the directory name.
+.TP
+.B 1
+Only check the directory name if we have had to change directory in
+our search for \fIdebian/changelog\fR. This is the default behaviour.
+.TP
+.B 2
+Always check the directory name.
+.PP
+The directory name is checked by testing whether the current directory
+name (as determined by \fBpwd\fR(1)) matches the regex given by the
+configuration file option \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR or by the
+command line option \fB\-\-check-dirname-regex\fR \fIregex\fR. Here
+\fIregex\fR is a Perl regex (see \fBperlre\fR(3perl)), which will be
+anchored at the beginning and the end. If \fIregex\fR contains a '/',
+then it must match the full directory path. If not, then it must
+match the full directory name. If \fIregex\fR contains the string
+\'PACKAGE', this will be replaced by the source package name, as
+determined from the changelog. The default value for the regex is:
+\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and
+PACKAGE-version.
+.SH OPTIONS
+.TP
+\fB\-\-dupload\fR, \fB\-\-dput\fR
+This specifies which uploader program to use; the default is
+\fBdupload\fR.
+.TP
+\fB\-S\fR
+If this option is used, or the default \fI.changes\fR file is
+not found but a source-only \fI.changes\fR file is present, then this
+source-only \fI.changes\fR file will be uploaded instead of an
+arch-specific one.
+.TP
+\fB\-a\fIdebian-architecture\fR, \fB\-t\fIGNU-system-type\fR
+See \fBdpkg-architecture\fR(1) for a description of these options.
+They affect the search for the \fI.changes\fR file. They are provided
+to mimic the behaviour of \fBdpkg-buildpackage\fR when determining the
+name of the \fI.changes\fR file. If a plain \fB\-t\fR is given, it is
+taken to be the \fBdupload\fR host-specifying option, and therefore
+signifies the end of the \fBdebrelease\fR-specific options.
+.TP
+\fB\-\-multi\fR
+Multiarch \fI.changes\fR mode: This signifies that \fBdebrelease\fR should
+use the most recent file with the name pattern
+\fIpackage_version_*+*.changes\fR as the \fI.changes\fR file, allowing for the
+\fI.changes\fR files produced by \fBdpkg-cross\fR.
+.TP
+\fB\-\-debs\-dir\fR \fIdirectory\fR
+Look for the \fI.changes\fR and \fI.deb\fR files in \fIdirectory\fR
+instead of the parent of the source directory. This should
+either be an absolute path or relative to the top of the source
+directory.
+.TP
+\fB\-\-check-dirname-level\fR \fIN\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+.BR \-\-help ", " \-h
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B DEBRELEASE_UPLOADER
+The currently recognised values are \fIdupload\fR and \fIdput\fR, and
+it specifies which uploader program should be used. It corresponds to
+the \fB\-\-dupload\fR and \fB\-\-dput\fR command line options.
+.TP
+.B DEBRELEASE_DEBS_DIR
+This specifies the directory in which to look for the \fI.changes\fR
+and \fI.deb\fR files, and is either an absolute path or relative to
+the top of the source tree. This corresponds to the
+\fB\-\-debs\-dir\fR command line option. This directive could be
+used, for example, if you always use \fBpbuilder\fR or
+\fBsvn-buildpackage\fR to build your packages. Note that it also
+affects \fBdebc\fR(1) and \fBdebi\fR(1).
+.TP
+.BR DEVSCRIPTS_CHECK_DIRNAME_LEVEL ", " DEVSCRIPTS_CHECK_DIRNAME_REGEX
+See the above section \fBDirectory name checking\fR for an explanation of
+these variables. Note that these are package-wide configuration
+variables, and will therefore affect all \fBdevscripts\fR scripts
+which check their value, as described in their respective manpages and
+in \fBdevscripts.conf\fR(5).
+.SH "SEE ALSO"
+.BR dput (1),
+.BR dupload (1),
+.BR devscripts.conf (5)
+.SH AUTHOR
+Julian Gilbey <jdg@debian.org>, based on the original \fBrelease\fR
+script by Christoph Lameter <clameter@debian.org>.
diff --git a/scripts/debrelease.sh b/scripts/debrelease.sh
new file mode 100755
index 0000000..b468de0
--- /dev/null
+++ b/scripts/debrelease.sh
@@ -0,0 +1,341 @@
+#!/bin/bash
+
+# debrelease: a devscripts wrapper around dupload/dput which calls
+# dupload/dput with the correct .changes file as parameter.
+# All command line options are passed onto dupload.
+#
+# Written and copyright 1999-2003 by Julian Gilbey <jdg@debian.org>
+# Based on the original 'release' script by
+# Christoph Lameter <clameter@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+set -e
+
+PROGNAME=${0##*/}
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+
+usage() {
+ echo \
+"Usage: $PROGNAME [debrelease options] [dupload/dput options]
+ Run dupload on the newly created changes file.
+ Debrelease options:
+ --dupload Use dupload to upload files (default)
+ --dput Use dput to upload files
+ -a<arch> Search for .changes file made for Debian build <arch>
+ -t<target> Search for .changes file made for GNU <target> arch
+ -S Search for source-only .changes file instead of arch one
+ --multi Search for multiarch .changes file made by dpkg-cross
+ --debs-dir DIR Look for the changes and debs files in DIR instead of
+ the parent of the current package directory
+ --check-dirname-level N
+ How much to check directory names before cleaning trees:
+ N=0 never
+ N=1 only if program changes directory (default)
+ N=2 always
+ --check-dirname-regex REGEX
+ What constitutes a matching directory name; REGEX is
+ a Perl regular expression; the string \`PACKAGE' will
+ be replaced by the package name; see manpage for details
+ (default: 'PACKAGE(-.+)?')
+ --no-conf, --noconf
+ Don't read devscripts config files;
+ must be the first option given
+ --help Show this message
+ --version Show version and copyright information
+
+$MODIFIED_CONF_MSG"
+}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1999-2003 by Julian Gilbey, all rights reserved.
+Based on original code by Christoph Lameter.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+mustsetvar() {
+ if [ "x$2" = x ]
+ then
+ echo >&2 "$PROGNAME: unable to determine $3"
+ exit 1
+ else
+ # echo "$PROGNAME: $3 is $2"
+ eval "$1=\"\$2\""
+ fi
+}
+
+# Boilerplate: set config variables
+DEFAULT_DEBRELEASE_UPLOADER=dupload
+DEFAULT_DEBRELEASE_DEBS_DIR=..
+DEFAULT_DEVSCRIPTS_CHECK_DIRNAME_LEVEL=1
+DEFAULT_DEVSCRIPTS_CHECK_DIRNAME_REGEX='PACKAGE(-.+)?'
+VARS="DEBRELEASE_UPLOADER DEBRELEASE_DEBS_DIR DEVSCRIPTS_CHECK_DIRNAME_LEVEL DEVSCRIPTS_CHECK_DIRNAME_REGEX"
+
+if [ "$1" = "--no-conf" -o "$1" = "--noconf" ]; then
+ shift
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (no configuration files read)"
+
+ # set defaults
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+else
+ # Run in a subshell for protection against accidental errors
+ # in the config files
+ eval $(
+ set +e
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+
+ for file in /etc/devscripts.conf ~/.devscripts
+ do
+ [ -r $file ] && . $file
+ done
+
+ set | grep -E "^(DEBRELEASE|DEVSCRIPTS)_")
+
+ # check sanity
+ case "$DEBRELEASE_UPLOADER" in
+ dupload|dput) ;;
+ *) DEBRELEASE_UPLOADER=dupload ;;
+ esac
+
+ # We do not replace this with a default directory to avoid accidentally
+ # uploading a broken package
+ DEBRELEASE_DEBS_DIR="$(echo "$DEBRELEASE_DEBS_DIR" | sed -e 's%/\+%/%g; s%\(.\)/$%\1%;')"
+ if ! [ -d "$DEBRELEASE_DEBS_DIR" ]; then
+ debsdir_warning="config file specified DEBRELEASE_DEBS_DIR directory $DEBRELEASE_DEBS_DIR does not exist!"
+ fi
+
+ case "$DEVSCRIPTS_CHECK_DIRNAME_LEVEL" in
+ 0|1|2) ;;
+ *) DEVSCRIPTS_CHECK_DIRNAME_LEVEL=1 ;;
+ esac
+
+ # set config message
+ MODIFIED_CONF=''
+ for var in $VARS; do
+ eval "if [ \"\$$var\" != \"\$DEFAULT_$var\" ]; then
+ MODIFIED_CONF_MSG=\"\$MODIFIED_CONF_MSG
+ $var=\$$var\";
+ MODIFIED_CONF=yes;
+ fi"
+ done
+
+ if [ -z "$MODIFIED_CONF" ]; then
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (none)"
+ fi
+fi
+
+
+# synonyms
+CHECK_DIRNAME_LEVEL="$DEVSCRIPTS_CHECK_DIRNAME_LEVEL"
+CHECK_DIRNAME_REGEX="$DEVSCRIPTS_CHECK_DIRNAME_REGEX"
+
+
+sourceonly=
+multiarch=
+debsdir="$DEBRELEASE_DEBS_DIR"
+
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ -a*) targetarch="$(echo "$1" | sed -e 's/^-a//')" ;;
+ -t*) targetgnusystem="$(echo "$1" | sed -e 's/^-t//')"
+ # dupload has a -t option
+ if [ -z "$targetgnusystem" ]; then break; fi ;;
+ -S) sourceonly=source ;;
+ --multi) multiarch=yes ;;
+ --dupload) DEBRELEASE_UPLOADER=dupload ;;
+ --dput) DEBRELEASE_UPLOADER=dput ;;
+ # Delay checking of debsdir until we need it. We need to make sure we're
+ # in the package root directory first.
+ --debs-dir=*)
+ opt_debsdir="$(echo "$1" | sed -e 's/^--debs-dir=//; s%/\+%/%g; s%\(.\)/$%\1%;')"
+ ;;
+ --debs-dir)
+ shift
+ opt_debsdir="$(echo "$1" | sed -e 's%/\+%/%g; s%\(.\)/$%\1%;')"
+ ;;
+ --check-dirname-level=*)
+ level="$(echo "$1" | sed -e 's/^--check-dirname-level=//')"
+ case "$level" in
+ 0|1|2) CHECK_DIRNAME_LEVEL=$level ;;
+ *) echo "$PROGNAME: unrecognised --check-dirname-level value (allowed are 0,1,2)" >&2
+ exit 1 ;;
+ esac
+ ;;
+ --check-dirname-level)
+ shift
+ case "$1" in
+ 0|1|2) CHECK_DIRNAME_LEVEL=$1 ;;
+ *) echo "$PROGNAME: unrecognised --check-dirname-level value (allowed are 0,1,2)" >&2
+ exit 1 ;;
+ esac
+ ;;
+ --check-dirname-regex=*)
+ regex="$(echo "$1" | sed -e 's/^--check-dirname-level=//')"
+ if [ -z "$regex" ]; then
+ echo "$PROGNAME: missing --check-dirname-regex parameter" >&2
+ echo "try $PROGNAME --help for usage information" >&2
+ exit 1
+ else
+ CHECK_DIRNAME_REGEX="$regex"
+ fi
+ ;;
+ --check-dirname-regex)
+ shift;
+ if [ -z "$1" ]; then
+ echo "$PROGNAME: missing --check-dirname-regex parameter" >&2
+ echo "try $PROGNAME --help for usage information" >&2
+ exit 1
+ else
+ CHECK_DIRNAME_REGEX="$1"
+ fi
+ ;;
+ --no-conf|--noconf)
+ echo "$PROGNAME: $1 is only acceptable as the first command-line option!" >&2
+ exit 1 ;;
+ --dopts) shift; break ;; # This is an option for cvs-debrelease,
+ # so we accept it here too, even though we don't
+ # advertise it
+ --help) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+ *) break ;; # a dupload/dput option, so stop parsing here
+ esac
+ shift
+done
+
+# Look for .changes file via debian/changelog
+CHDIR=
+until [ -f debian/changelog ]; do
+ CHDIR=yes
+ cd ..
+ if [ $(pwd) = "/" ]; then
+ echo "$PROGNAME: cannot find debian/changelog anywhere!" >&2
+ echo "Are you in the source code tree?" >&2
+ exit 1
+ fi
+done
+
+# Use svn-buildpackage's directory if there is one and debsdir wasn't already
+# specified on the command-line. This can override DEBRELEASE_DEBS_DIR.
+if [ -n "$opt_debsdir" ]; then
+ debsdir="$opt_debsdir"
+elif [ -e ".svn/deb-layout" ]; then
+ buildArea="$(sed -ne '/^buildArea=/{s/^buildArea=//; s%/\+%/%g; s%\(.\)/$%\1%; p; q}' .svn/deb-layout)"
+ if [ -n "$buildArea" -a -d "$buildArea" ]; then
+ debsdir="$buildArea"
+ fi
+fi
+
+# check sanity of debsdir
+if ! [ -d "$debsdir" ]; then
+ if [ -n "$debsdir_warning" ]; then
+ echo "$PROGNAME: $debsdir_warning" >&2
+ exit 1
+ else
+ echo "$PROGNAME: could not find directory $debsdir!" >&2
+ exit 1
+ fi
+fi
+
+mustsetvar package "`dpkg-parsechangelog -SSource`" "source package"
+mustsetvar version "`dpkg-parsechangelog -SVersion`" "source version"
+
+if [ $CHECK_DIRNAME_LEVEL -eq 2 -o \
+ \( $CHECK_DIRNAME_LEVEL -eq 1 -a "$CHDIR" = yes \) ]; then
+ if ! perl -MFile::Basename -w \
+ -e "\$pkg='$package'; \$re='$CHECK_DIRNAME_REGEX';" \
+ -e '$re =~ s/PACKAGE/\\Q$pkg\\E/g; $pwd=`pwd`; chomp $pwd;' \
+ -e 'if ($re =~ m%/%) { eval "exit (\$pwd =~ /^$re\$/ ? 0:1);"; }' \
+ -e 'else { eval "exit (basename(\$pwd) =~ /^$re\$/ ? 0:1);"; }'
+ then
+ echo >&2 <<EOF
+$PROGNAME: found debian/changelog for package $PACKAGE in the directory
+ $pwd
+but this directory name does not match the package name according to the
+regex $check_dirname_regex.
+
+To run $PROGNAME on this package, see the --check-dirname-level and
+--check-dirname-regex options; run $PROGNAME --help for more info.
+EOF
+ exit 1
+ fi
+fi
+
+if [ "x$sourceonly" = "xsource" ]; then
+ arch=source
+elif [ -n "$targetarch" ] && [ -n "$targetgnusystem" ]; then
+ mustsetvar arch "$(dpkg-architecture "-a${targetarch}" "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+elif [ -n "$targetarch" ]; then
+ mustsetvar arch "$(dpkg-architecture "-a${targetarch}" -qDEB_HOST_ARCH)" "build architecture"
+elif [ -n "$targetgnusystem" ]; then
+ mustsetvar arch "$(dpkg-architecture "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+else
+ mustsetvar arch "$(dpkg-architecture -qDEB_HOST_ARCH)" "build architecture"
+fi
+
+sversion=$(echo "$version" | perl -pe 's/^\d+://')
+pva="${package}_${sversion}_${arch}"
+pvs="${package}_${sversion}_source"
+changes="$debsdir/$pva.changes"
+schanges="$debsdir/$pvs.changes"
+mchanges=$(ls "$debsdir/${package}_${sversion}_*+*.changes" "$debsdir/${package}_${sversion}_multi.changes" 2>/dev/null | head -1)
+
+if [ -n "$multiarch" ]; then
+ if [ -z "$mchanges" -o ! -r "$mchanges" ]; then
+ echo "$PROGNAME: could not find/read any multiarch .changes file with name" >&2
+ echo "$debsdir/${package}_${sversion}_*.changes" >&2
+ exit 1
+ fi
+ changes=$mchanges
+elif [ "$arch" = source ]; then
+ if [ -r "$schanges" ]; then
+ changes=$schanges
+ else
+ echo "$PROGNAME: could not find/read changes file $schanges!" >&2
+ exit 1
+ fi
+else
+ if [ ! -r "$changes" ]; then
+ if [ -r "$mchanges" ]; then
+ changes=$mchanges
+ echo "$PROGNAME: could only find a multiarch changes file:" >&2
+ echo " $mchanges" >&2
+ echo -n "Should I upload this file? (y/n) " >&2
+ read ans
+ case ans in
+ y*) ;;
+ *) exit 1 ;;
+ esac
+ else
+ echo "$PROGNAME: could not read changes file $changes!" >&2
+ exit 1
+ fi
+ fi
+fi
+
+exec $DEBRELEASE_UPLOADER "$@" "$changes"
+
+echo "$PROGNAME: failed to exec $DEBRELEASE_UPLOADER!" >&2
+echo "Aborting...." >&2
+exit 1
diff --git a/scripts/debrepro.pod b/scripts/debrepro.pod
new file mode 100644
index 0000000..6cc7b2d
--- /dev/null
+++ b/scripts/debrepro.pod
@@ -0,0 +1,177 @@
+=head1 NAME
+
+debrepro - reproducibility tester for Debian packages
+
+=head1 SYNOPSIS
+
+B<debrepro> [I<OPTIONS>] [I<SOURCEDIR>]
+
+=head1 DESCRIPTION
+
+B<debrepro> will build a given source directory twice, with a set of
+variations between the first and the second build, and compare the
+produced binary packages. If B<diffoscope> is installed, it is used to
+compare non-matching binaries. If B<disorderfs> is installed, it is used
+during the build to inject non-determinism in filesystem listing
+operations.
+
+I<SOURCEDIR> must be a directory containing an unpacked Debian source
+package. If I<SOURCEDIR> is omitted, the current directory is assumed.
+
+=head1 OUTPUT DIRECTORY
+
+At the very end of a build, B<debrepro> will inform the location of the
+output directory where the build artifacts can be found. In that
+directory, you will find:
+
+=over
+
+=item I<$OUTPUTDIR/first>
+
+Contains the results of the first build, including a copy of the source
+tree, and the resulting binary packages.
+
+=item I<$OUTPUTDIR/first/build.sh>
+
+Contains the exact build script that was used in the first build.
+
+=item I<$OUTPUTDIR/second>
+
+Contains the results of the second build, including a copy of the source tree,
+and the resulting binary packages.
+
+=item I<$OUTPUTDIR/second/build.sh>
+
+Contains the exact build script that was used in the second build.
+
+=back
+
+Taking a B<diff(1)> between I<$OUTPUTDIR/first/build.sh> and
+I<$OUTPUTDIR/second/build.sh> is an excellent way of figuring out
+exactly what changed between the two builds.
+
+=head1 SUPPORTED VARIATIONS
+
+=over
+
+=item B<user>
+
+The I<$USER> environment variable will contain different values between the
+first and second builds.
+
+=item B<path>
+
+During the second build, a fake, non-existing directory will be appended to the
+I<$PATH> environment variable.
+
+=item B<umask>
+
+The builds will use different umask settings.
+
+=item B<locale>
+
+Both I<$LC_ALL> and I<$LANG> will be different across the two builds.
+
+=item B<timezone>
+
+I<$TZ> will be different across builds.
+
+=item B<filesystem-ordering>
+
+If B<disorderfs> is installed, both builds will be done under a disorderfs
+overlay directory. This will cause filesystem listing operations to be return
+items in a non-deterministic order.
+
+=item B<time>
+
+The second build will be executed 213 days, 7 hours and 13 minutes in the
+future with regards to the current time (using B<faketime(1)>).
+
+=back
+
+=head1 OPTIONS
+
+=over
+
+=item -s VARIATION, --skip VARIATION
+
+Don't perform the named VARIATION. Variation names are the ones used in
+their description in section B<SUPPORTED VARIATIONS>.
+
+=item -b COMMAND, --before-second-build COMMAND
+
+Run COMMAND before performing the second build. This can be used for
+example to apply a patch to a source tree for the second build, and
+check whether (or how) the resulting binaries are affected.
+
+Examples:
+
+ $ debrepro --before-second-build "git checkout branch-with-changes"
+
+ $ debrepro --before-second-build "patch -p1 < /path/to/patch"
+
+=item -B COMMAND, --build-command COMMAND
+
+Use custom build command. Default: I<dpkg-buildpackage -b -us -uc>.
+
+If a custom build command is specified, the restriction of only running
+against a Debian source tree is relaxed and you can run debrepro against
+any source directory.
+
+=item -a PATTERN, --artifact-pattern PATTERN
+
+Define a file glob pattern to determine which artifacts need to be
+compared across the builds. Default: I<../*.deb>.
+
+=item -n, --no-copy
+
+Do not copy the source directory to the temporary work directory before
+each build. Use this to run debrepro against the source directory
+directly.
+
+=item -t TIME, --timeout TIME
+
+Apply a timeout to all builds. I<TIME> must be a time specification
+compatible with GNU timeout(1).
+
+
+=item -h, --help
+
+Display this help message and exit.
+
+=back
+
+=head1 EXIT STATUS
+
+=over
+
+=item 0Z<>
+
+Package is reproducible.
+
+Reproducible here means that the two builds produced the exactly the
+same binaries, under the set of variations that B<debrepro> tests. Other
+sources of non-determinism in builds that are not yet tested might still
+affect builds in the wild.
+
+=item 1Z<>
+
+Package is not reproducible.
+
+=item 2Z<>
+
+The given input is not a valid Debian source package.
+
+=item 3Z<>
+
+Required programs are missing.
+
+=back
+
+=head1 SEE ALSO
+
+diffoscope (1), disorderfs (1), timeout(1)
+
+=head1 AUTHOR
+
+Antonio Terceiro <terceiro@debian.org>.
diff --git a/scripts/debrepro.sh b/scripts/debrepro.sh
new file mode 100755
index 0000000..b8b309b
--- /dev/null
+++ b/scripts/debrepro.sh
@@ -0,0 +1,293 @@
+#!/bin/sh
+
+# debrepro: a reproducibility tester for Debian packages
+#
+# © 2016 Antonio Terceiro <terceiro@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+set -eu
+
+check_dependencies() {
+ for optional in disorderfs diffoscope; do
+ if ! command -v "$optional" > /dev/null; then
+ echo "W: $optional not installed, there will be missing functionality" >&2
+ fi
+ done
+
+ local failed=''
+ for mandatory in faketime; do
+ if ! command -v "$mandatory" > /dev/null; then
+ echo "E: $mandatory not installed, cannot proceed." >&2
+ failed=yes
+ fi
+ done
+ if [ -n "$failed" ]; then
+ exit 3
+ fi
+}
+
+usage() {
+ echo "usage: $0 [OPTIONS] [SOURCEDIR]"
+ echo ""
+ echo "Options:"
+ echo ""
+ echo " -b,--before-second-build COMMAND Run COMMAND before second build"
+ echo " (e.g. apply a patch)"
+ echo " -B, --build-command COMMAND Use COMMAND as the build command"
+ echo " (default: dpkg-buildpackage -b -us -uc)"
+ echo " -a, --artifact-pattern Shell glob pattern to determine which"
+ echo " artifacts should be compared across the"
+ echo " different builds (default: ../*.deb)"
+ echo " -n, --no-copy Does not copy the source tree before"
+ echo " each build; run commands directly in the"
+ echo " source tree."
+ echo " -s,--skip VARIATION Don't perform the named variation"
+ echo " -h,--help Display this help message and exit"
+}
+
+first_banner=y
+banner() {
+ if [ "$first_banner" = n ]; then
+ echo
+ fi
+ echo "$@" | sed -e 's/./=/g'
+ echo "$@"
+ echo "$@" | sed -e 's/./=/g'
+ echo
+ first_banner=n
+}
+
+variation() {
+ echo
+ echo "# Variation:" "$@"
+}
+
+vary() {
+ local var="$1"
+
+ for skipped in $skip_variations; do
+ if [ "$skipped" = "$var" ]; then
+ return
+ fi
+ done
+
+ variation "$var"
+ local first="$2"
+ local second="$3"
+ if [ "$which_build" = 'first' ]; then
+ if [ -n "$first" ]; then
+ echo "$first"
+ fi
+ else
+ echo "$second"
+ fi
+}
+
+create_build_script() {
+ echo 'set -eu'
+
+ echo
+ echo "# this script must be run from inside an unpacked Debian source"
+ echo "# package"
+ echo
+
+ vary path \
+ '' \
+ 'export PATH="$PATH":/i/capture/the/path'
+
+ vary user \
+ 'export USER=user1' \
+ 'export USER=user2'
+
+ vary umask \
+ 'umask 0022' \
+ 'umask 0002'
+
+ vary locale \
+ 'export LC_ALL=C.UTF-8 LANG=C.UTF-8' \
+ 'export LC_ALL=pt_BR.UTF-8 LANG=pt_BR.UTF-8'
+
+ vary timezone \
+ 'export TZ=GMT+12' \
+ 'export TZ=GMT-14'
+
+ if command -v disorderfs >/dev/null; then
+ disorderfs_commands='cd .. &&
+mv source orig &&
+mkdir source &&
+disorderfs --shuffle-dirents=yes orig source &&
+trap "cd .. && fusermount -u source && rmdir source && mv orig source" INT TERM EXIT &&
+cd source'
+ vary filesystem-ordering \
+ '' \
+ "$disorderfs_commands"
+ fi
+
+ echo 'build_prefix=""'
+
+ vary time \
+ '' \
+ 'build_prefix="faketime +213days+7hours+13minutes"; export NO_FAKE_STAT=1'
+
+ if [ -n "$timeout" ]; then
+ echo "build_prefix=\"timeout $timeout \$build_prefix\""
+ fi
+
+ echo '${build_prefix:-} '"${build_command:-dpkg-buildpackage -b -us -uc}"
+}
+
+
+build() {
+ export which_build="$1"
+ mkdir "$tmpdir/build"
+
+ if [ "${copy}" = yes ]; then
+ cp -r "$SOURCE" "$tmpdir/build/source"
+ cd "$tmpdir/build/source"
+ fi
+
+ if [ "$which_build" = second ] && [ -n "$before_second_build_command" ]; then
+ banner "I: running before second build: $before_second_build_command"
+ sh -c "$before_second_build_command"
+ fi
+
+ create_build_script > $tmpdir/build/build.sh
+ if ! sh $tmpdir/build/build.sh; then
+ echo "E: $which_build build failed"
+ exit 1
+ fi
+ mkdir -p $tmpdir/build/artifacts
+ cp ${artifact_pattern} $tmpdir/build/artifacts/ || true
+ if [ "${copy}" = yes ]; then
+ cd - > /dev/null
+ fi
+
+ mv "$tmpdir/build" "$tmpdir/$which_build"
+}
+
+binmatch() {
+ cmp --silent "$1" "$2"
+}
+
+compare() {
+ rc=0
+ diff=binmatch
+ if command -v diffoscope >/dev/null; then
+ diff=diffoscope
+ fi
+ for first_artifact in "$tmpdir"/first/artifacts/${artifact_pattern}; do
+ artifact_name="$(basename "$first_artifact")"
+ second_artifact="$tmpdir"/second/artifacts/"$artifact_name"
+ if [ ! -f "${first_artifact}" ]; then
+ echo "✗ $artifact_name: not found"
+ rc=1
+ elif ${diff} "$first_artifact" "$second_artifact"; then
+ echo "✓ $artifact_name: files match"
+ else
+ echo "✗ $artifact_name: files don't match"
+ rc=1
+ fi
+ done
+ if [ "$rc" -ne 0 ]; then
+ echo "E: package is not reproducible."
+ fi
+ return "$rc"
+}
+
+TEMP=$(getopt -n "debrepro" -o 'hs:b:B:a:nft:' \
+ -l 'help,skip:,before-second-build:,build-command:,artifact-pattern:,no-copy,force,timeout:' \
+ -- "$@") || (rc=$?; usage >&2; exit $rc)
+eval set -- "$TEMP"
+
+skip_variations=""
+before_second_build_command=''
+timeout=''
+build_command=''
+artifact_pattern="../*.deb"
+copy=yes
+while true; do
+ case "$1" in
+ -s|--skip)
+ case "$2" in
+ user|path|umask|locale|timezone|filesystem-ordering|time)
+ skip_variations="$skip_variations $2"
+ ;;
+ *)
+ echo "E: invalid variation name $2"
+ exit 1
+ ;;
+ esac
+ shift
+ ;;
+ -b|--before-second-build)
+ before_second_build_command="$2"
+ shift
+ ;;
+ -B|--build-command)
+ build_command="$2"
+ shift
+ ;;
+ -a|--artifact-pattern)
+ artifact_pattern="$2"
+ shift
+ ;;
+ -n|--no-copy)
+ copy=no
+ skip_variations="$skip_variations filesystem-ordering"
+ ;;
+ -t|--timeout)
+ timeout="$2"
+ shift
+ ;;
+ -h|--help)
+ usage
+ exit
+ ;;
+ --)
+ shift
+ break
+ ;;
+ esac
+ shift
+done
+
+SOURCE="${1:-}"
+if [ -z "$SOURCE" ]; then
+ SOURCE="$(pwd)"
+fi
+if [ ! -f "$SOURCE/debian/changelog" ]; then
+ if [ -n "${build_command}" ]; then
+ echo "W: $SOURCE does not look like a Debian source package, but proceeding anyway since a custom build command as provided"
+ else
+ echo "E: $SOURCE does not look like a Debian source package"
+ exit 2
+ fi
+fi
+
+tmpdir=$(mktemp --directory --tmpdir debrepro.XXXXXXXXXX)
+trap "if [ \$? -eq 0 ]; then rm -rf $tmpdir; else echo; echo 'I: artifacts left in $tmpdir'; fi" INT TERM EXIT
+
+check_dependencies
+
+banner "First build"
+build first
+
+banner "Second build"
+build second
+
+banner "Comparing artifacts"
+compare first second
+
+# vim:ts=4 sw=4 et
diff --git a/scripts/debrsign.1 b/scripts/debrsign.1
new file mode 100644
index 0000000..b4eacae
--- /dev/null
+++ b/scripts/debrsign.1
@@ -0,0 +1,72 @@
+.TH DEBRSIGN 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debrsign \- remotely sign a Debian .changes and .dsc file pair using SSH
+.SH SYNOPSIS
+\fBdebrsign\fR [\fIoptions\fR] [\fIuser\fB@\fR]\fIremotehost\fR
+[\fIchanges-file\fR|\fIdsc-file\fR]
+.SH DESCRIPTION
+\fBdebrsign\fR takes either an unsigned \fI.dsc\fR file or an
+unsigned \fI.changes\fR file and the associated unsigned \fI.dsc\fR
+file (found by replacing the architecture name and \fI.changes\fR
+by \fI.dsc\fR) if it appears in the \fI.changes\fR file and signs them
+by copying them to the remote machine using \fBssh\fR(1) and remotely
+running \fBdebsign\fR(1) on that machine. All options not listed
+below are passed to the \fBdebsign\fR program on the remote machine.
+.PP
+If a \fI.changes\fR or \fI.dsc\fR file is specified, it is signed,
+otherwise, \fIdebian/changelog\fR is parsed to determine the name of
+the \fI.changes\fR file to look for in the parent directory.
+.PP
+This utility is useful if a developer must build a package on one
+machine where it is unsafe to sign it; they need then only transfer
+the small \fI.dsc\fR and \fI.changes\fR files to a safe machine and
+then use the \fBdebsign\fR program to sign them before
+transferring them back. This program automates this process.
+.PP
+To do it the other way round, that is to connect to an unsafe machine
+to download the \fI.dsc\fR and \fI.changes\fR files, to sign them
+locally and then to transfer them back, see the \fBdebsign\fR(1)
+program, which can do this task.
+.SH OPTIONS
+.TP
+\fB\-S\fR
+Look for a source-only \fI.changes\fR file instead of a binary-build
+\fI.changes\fR file.
+.TP
+\fB\-a\fIdebian-architecture\fR, \fB\-t\fIGNU-system-type\fR
+See \fBdpkg-architecture\fR(1) for a description of these options.
+They affect the search for the \fI.changes\fR file. They are provided
+to mimic the behaviour of \fBdpkg-buildpackage\fR when determining the
+name of the \fI.changes\fR file.
+.TP
+\fB\-\-multi\fR
+Multiarch \fI.changes\fR mode: This signifies that \fBdebrsign\fR should
+use the most recent file with the name pattern
+\fIpackage_version_*+*.changes\fR as the \fI.changes\fR file, allowing for the
+\fI.changes\fR files produced by \fBdpkg-cross\fR.
+.TP
+\fB\-\-path \fIremote-path\fR
+Specify a path to the GPG binary on the remote host.
+.TP
+\fB\-\-help\fR, \fB\-\-version\fR
+Show help message and version information respectively.
+.TP
+\fBOther options\fR
+All other options are passed on to \fBdebsign\fR on the remote
+machine.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B DEBRSIGN_PGP_PATH
+Equivalent to passing \fB\-\-path\fR on the command line (see above.)
+.SH "SEE ALSO"
+.BR debsign (1),
+.BR dpkg-architecture (1),
+.BR ssh (1)
+.SH AUTHOR
+This program was written by Julian Gilbey <jdg@debian.org> and is
+copyright under the GPL, version 2 or later.
diff --git a/scripts/debrsign.sh b/scripts/debrsign.sh
new file mode 100755
index 0000000..128f88b
--- /dev/null
+++ b/scripts/debrsign.sh
@@ -0,0 +1,273 @@
+#!/bin/bash
+
+# This program is used to REMOTELY sign a .dsc and .changes file
+# pair in the form needed for a legal Debian upload. It is based on
+# dpkg-buildpackage and debsign (which is also part of the devscripts
+# package).
+#
+# In order for this program to work, debsign must be installed
+# on the REMOTE machine which will be used to sign your package.
+# You should run this program from within the package directory on
+# the build machine.
+#
+
+# Debian GNU/Linux debrsign.
+# Copyright 1999 Mike Goldman, all rights reserved
+# Modifications copyright 1999 Julian Gilbey <jdg@debian.org>,
+# all rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# Abort if anything goes wrong
+set -e
+
+PROGNAME=${0##*/}
+
+usage() {
+ echo \
+"Usage: debrsign [options] [username@]remotehost [changes or dsc]
+ Options:
+ -p<sign-command> The command to use for signing
+ -e<maintainer> Sign using key of <maintainer> (takes precedence over -m)
+ -m<maintainer> The same as -e
+ -k<keyid> The key to use for signing
+ -S Use changes file made for source-only upload
+ -a<arch> Use changes file made for Debian target architecture <arch>
+ -t<target> Use changes file made for GNU target architecture <target>
+ --multi Use most recent multiarch .changes file found
+ --path Specify directory GPG binary is located on remote host
+ --help Show this message
+ --version Show version and copyright information
+ If a changes or dscfile is specified, it is signed, otherwise
+ debian/changelog is parsed to find the changes file. The signing
+ is performed on remotehost using ssh and debsign."
+}
+
+version() {
+ echo \
+"This is debrsign, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1999 by Mike Goldman and Julian Gilbey,
+all rights reserved. This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+mustsetvar() {
+ if [ "x$2" = x ]
+ then
+ echo >&2 "$PROGNAME: unable to determine $3"
+ exit 1
+ else
+ # echo "$PROGNAME: $3 is $2"
+ eval "$1=\"\$2\""
+ fi
+}
+
+withecho() {
+ echo " $@"
+ "$@"
+}
+
+# --- main script
+
+# For partial security, even though we know it doesn't work :(
+# I guess maintainers will have to be careful, and there's no way around
+# this in a shell script.
+unset IFS
+PATH=/usr/local/bin:/usr/bin:/bin
+umask $(perl -e 'printf "%03o\n", umask | 022')
+
+eval $(
+ set +e
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+ for file in /etc/devscripts.conf ~/.devscripts; do
+ [ -r $file ] && . $file
+ done
+
+ set | grep '^DEBRSIGN_')
+
+signargs=
+while [ $# != 0 ]
+do
+ value="$(echo x"$1" | sed -e 's/^x-.//')"
+ case "$1" in
+ -S) sourceonly="true" ;;
+ -a*) targetarch="$value" ;;
+ -t*) targetgnusystem="$value" ;;
+ --multi) multiarch="true" ;;
+ --help) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+ --path) DEBRSIGN_PGP_PATH="$value" ;;
+ -*) signargs="$signargs '$1'" ;;
+ *) break ;;
+ esac
+ shift
+done
+
+# Command line parameters are remote host (mandatory) and changes file
+# name (optional). If there is no changes file name, we must be at the
+# top level of a source tree and will figure out its name from
+# debian/changelog
+case $# in
+ 2) remotehost="$1"
+ case "$2" in
+ *.dsc)
+ changes=
+ dsc=$2
+ ;;
+ *.changes)
+ changes=$2
+ dsc=$(echo $changes | \
+ perl -pe 's/\.changes$/.dsc/; s/(.*)_(.*)_(.*)\.dsc/\1_\2.dsc/')
+ buildinfo=$(echo $changes | \
+ perl -pe 's/\.changes$/.buildinfo/; s/(.*)_(.*)_(.*)\.buildinfo/\1_\2_\3.buildinfo/')
+ ;;
+ *)
+ echo "$PROGNAME: Only a .changes or .dsc file is allowed as second argument!" >&2
+ exit 1
+ ;;
+ esac
+ ;;
+
+ 1) remotehost="$1"
+ case "$1" in
+ *.changes)
+ echo "$PROGNAME: You must pass the address of the signing host as as the first argument" >&2
+ exit 1
+ ;;
+ *)
+ # We have to parse debian/changelog to find the current version
+ if [ ! -r debian/changelog ]; then
+ echo "$PROGNAME: Must be run from top of source dir or a .changes file given as arg" >&2
+ exit 1
+ fi
+ ;;
+ esac
+
+
+ mustsetvar package "`dpkg-parsechangelog -SSource`" "source package"
+ mustsetvar version "`dpkg-parsechangelog -SVersion`" "source version"
+
+ if [ "x$sourceonly" = x ]
+ then
+ if [ -n "$targetarch" ] && [ -n "$targetgnusystem" ]; then
+ mustsetvar arch "$(dpkg-architecture "-a${targetarch}" "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+ elif [ -n "$targetarch" ]; then
+ mustsetvar arch "$(dpkg-architecture "-a${targetarch}" -qDEB_HOST_ARCH)" "build architecture"
+ elif [ -n "$targetgnusystem" ]; then
+ mustsetvar arch "$(dpkg-architecture "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+ else
+ mustsetvar arch "$(dpkg-architecture -qDEB_HOST_ARCH)" "build architecture"
+ fi
+ else
+ arch=source
+ fi
+
+ sversion=$(echo "$version" | perl -pe 's/^\d+://')
+ pv="${package}_${sversion}"
+ pva="${package}_${sversion}${arch:+_${arch}}"
+ dsc="../$pv.dsc"
+ buildinfo="../$pva.buildinfo"
+ changes="../$pva.changes"
+ if [ -n "$multiarch" -o ! -r $changes ]; then
+ changes=$(ls "../${package}_${sversion}_*+*.changes" "../${package}_${sversion}_multi.changes" 2>/dev/null | head -1)
+ if [ -z "$multiarch" ]; then
+ if [ -n "$changes" ]; then
+ echo "$PROGNAME: could not find normal .changes file but found multiarch file:" >&2
+ echo " $changes" >&2
+ echo "Using this changes file instead." >&2
+ else
+ echo "$PROGNAME: Can't find or can't read changes file $changes!" >&2
+ exit 1
+ fi
+ elif [ -n "$multiarch" -a -z "$changes" ]; then
+ echo "$PROGNAME: could not find any multiarch .changes file with name" >&2
+ echo "../${package}_${sversion}_*.changes" >&2
+ exit 1
+ fi
+ fi
+ ;;
+
+ *) echo "Usage: $PROGNAME [options] [user@]remotehost [.changes or .dsc file]" >&2
+ exit 1 ;;
+esac
+
+if [ "x$remotehost" == "x" ]
+then
+ echo "No [user@]remotehost specified!" >&2
+ exit 1
+fi
+
+declare -A base
+base["$changes"]=$(basename "$changes")
+base["$dsc"]=$(basename "$dsc")
+base["$buildinfo"]=$(basename "$buildinfo")
+
+if [ -n "$changes" ]
+then
+ if [ ! -f "$changes" -o ! -r "$changes" ]
+ then
+ echo "Can't find or can't read changes file $changes!" >&2
+ exit 1
+ fi
+
+ # Is there a dsc file listed in the changes file?
+ if grep -q "${base[$dsc]}" "$changes"
+ then
+ if [ ! -f "$dsc" -o ! -r "$dsc" ]
+ then
+ echo "Can't find or can't read dsc file $dsc!" >&2
+ exit 1
+ fi
+ else
+ unset base["$dsc"]
+ fi
+ # Is there a buildinfo file listed in the changes file?
+ if grep -q "${base[$buildinfo]}" "$changes"
+ then
+ if [ ! -f "$buildinfo" -o ! -r "$buildinfo" ]
+ then
+ echo "Can't find or can't read buildinfo file $buildinfo!" >&2
+ exit 1
+ fi
+ else
+ unset base["$buildinfo"]
+ fi
+ # Now do the real work
+ withecho scp "${!base[@]}" "$remotehost:\$HOME"
+ withecho ssh -t "$remotehost" "debsign $signargs ${base[$changes]}"
+ for file in "${!base[@]}"
+ do
+ withecho scp "$remotehost:\$HOME/${base["$file"]}" "$file"
+ done
+ withecho ssh "$remotehost" "rm -f ${base[@]}"
+
+ echo "Successfully signed changes file"
+else
+ if [ ! -f "$dsc" -o ! -r "$dsc" ]
+ then
+ echo "Can't find or can't read dsc file $dsc!" >&2
+ exit 1
+ fi
+
+ withecho scp "$dsc" "$remotehost:\$HOME"
+ withecho ssh -t "$remotehost" "${DEBRSIGN_PGP_PATH}debsign $signargs $dscbase"
+ withecho scp "$remotehost:\$HOME/$dscbase" "$dsc"
+ withecho ssh "$remotehost" "rm -f $dscbase"
+
+ echo "Successfully signed dsc file"
+fi
+exit 0
diff --git a/scripts/debsign.1 b/scripts/debsign.1
new file mode 100644
index 0000000..900a61c
--- /dev/null
+++ b/scripts/debsign.1
@@ -0,0 +1,146 @@
+.TH DEBSIGN 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debsign \- sign a Debian .changes and .dsc file pair using GPG
+.SH SYNOPSIS
+\fBdebsign\fR [\fIoptions\fR] [\fIchanges-file\fR|\fIdsc-file\fR|\fIcommands-file\fR ...]
+.SH DESCRIPTION
+\fBdebsign\fR mimics the signing aspects (and bugs) of
+\fBdpkg-buildpackage\fR(1). It takes a \fI.dsc\fR, \fI.buildinfo\fR, or
+\fI.changes\fR file and signs it, and any child \fI.dsc\fR,
+\fI.buildinfo\fR, or \fI.changes\fR files directly or indirectly
+referenced by it, using the GNU Privacy Guard. It is careful to
+calculate the size and checksums of any newly signed child files and
+replace the original values in the parent file.
+.PP
+If no file is specified, \fIdebian/changelog\fR is parsed to determine
+the name of the \fI.changes\fR file to look for in the parent
+directory.
+.PP
+If a \fI.commands\fR file is specified it is first validated (see the
+details at \fIftp://ftp.upload.debian.org/pub/UploadQueue/README\fR),
+and the name specified in the Uploader field is used for signing.
+.PP
+This utility is useful if a developer must build a package on one
+machine where it is unsafe to sign it; they need then only transfer
+the small \fI.dsc\fR, \fI.buildinfo\fR and \fI.changes\fR files to a
+safe machine and then use the \fBdebsign\fR program to sign them before
+transferring them back. This process can be automated in two ways.
+If the files to be signed live on the \fBremote\fR machine, the
+\fB\-r\fR option may be used to copy them to the local machine and back
+again after signing. If the files live on the \fBlocal\fR machine, then
+they may be transferred to the remote machine for signing using
+\fBdebrsign\fR(1). However note that it is probably safer to have your
+trusted signing machine use \fBdebsign\fR to connect to the untrusted
+non-signing machine, rather than using \fBdebrsign\fR to make the
+connection in the reverse direction.
+.PP
+This program can take default settings from the \fBdevscripts\fR
+configuration files, as described below.
+.SH OPTIONS
+.TP
+.B \-r \fR[\fIusername\fB@\fR]\fIremotehost\fR
+The files to be signed live on the specified remote host. In this case,
+a \fI.dsc\fR, \fI.buildinfo\fR or \fI.changes\fR file must be explicitly
+named, with an absolute directory or one relative to the remote home
+directory. \fBscp\fR will be used for the copying. The
+\fR[\fIusername\fB@\fR]\fIremotehost\fB:\fIfilename\fR syntax is
+permitted as an alternative. Wildcards (\fB*\fR etc.) are allowed.
+.TP
+.B \-p\fIprogname\fR
+When \fBdebsign\fR needs to execute GPG to sign it will run \fIprogname\fR
+(searching the \fBPATH\fR if necessary), instead of \fBgpg\fR.
+.TP
+.B \-m\fImaintainer\fR
+Specify the maintainer name to be used for signing. (See
+\fBdpkg-buildpackage\fR(1) for more information about the differences
+between \fB\-m\fR, \fB\-e\fR and \fB\-k\fR when building packages;
+\fBdebsign\fR makes no use of these distinctions except with respect
+to the precedence of the various options. These multiple options are
+provided so that the program will behave as expected when called by
+\fBdebuild\fR(1).)
+.TP
+.B \-e\fImaintainer\fR
+Same as \fB\-m\fR but takes precedence over it.
+.TP
+.B \-k\fIkeyid\fR
+Specify the key ID to be used for signing; overrides any \fB\-m\fR
+and \fB\-e\fR options.
+.TP
+\fB\-S\fR
+Look for a source-only \fI.changes\fR file instead of a binary-build
+\fI.changes\fR file.
+.TP
+\fB\-a\fIdebian-architecture\fR, \fB\-t\fIGNU-system-type\fR
+See \fBdpkg-architecture\fR(1) for a description of these options.
+They affect the search for the \fI.changes\fR file. They are provided
+to mimic the behaviour of \fBdpkg-buildpackage\fR when determining the
+name of the \fI.changes\fR file.
+.TP
+\fB\-\-multi\fR
+Multiarch \fI.changes\fR mode: This signifies that \fBdebsign\fR should
+use the most recent file with the name pattern
+\fIpackage_version_*+*.changes\fR as the \fI.changes\fR file, allowing for the
+\fI.changes\fR files produced by \fBdpkg-cross\fR.
+.TP
+\fB\-\-re\-sign\fR, \fB\-\-no\-re\-sign\fR
+Recreate signature, respectively use the existing signature, if the
+file has been signed already. If neither option is given and an already
+signed file is found the user is asked if he or she likes to use the
+current signature.
+.TP
+\fB\-\-debs\-dir\fR \fIDIR\fR
+Look for the files to be signed in directory \fIDIR\fR instead of the
+parent of the source directory. This should either be an absolute path
+or relative to the top of the source directory.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+.BR \-\-help ", " \-h
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B DEBSIGN_PROGRAM
+Setting this is equivalent to giving a \fB\-p\fR option.
+.TP
+.B DEBSIGN_MAINT
+This is the \fB\-m\fR option.
+.TP
+.B DEBSIGN_KEYID
+And this is the \fB\-k\fR option.
+.TP
+.B DEBSIGN_ALWAYS_RESIGN
+Always re-sign files even if they are already signed, without prompting.
+.TP
+.B DEBRELEASE_DEBS_DIR
+This specifies the directory in which to look for the files to be
+signed, and is either an absolute path or relative to the top of the
+source tree. This corresponds to the \fB\-\-debs\-dir\fR command line
+option. This directive could be used, for example, if you always use
+\fBpbuilder\fR or \fBsvn-buildpackage\fR to build your packages. Note
+that it also affects \fBdebrelease\fR(1) in the same way, hence the
+strange name of the option.
+.SH "SEE ALSO"
+.BR debrsign (1),
+.BR debuild (1),
+.BR dpkg-architecture (1),
+.BR dpkg-buildpackage (1),
+.BR gpg (1),
+.BR gpg2 (1),
+.BR md5sum (1),
+.BR sha1sum (1),
+.BR sha256sum (1),
+.BR scp (1),
+.BR devscripts.conf (5)
+.SH AUTHOR
+This program was written by Julian Gilbey <jdg@debian.org> and is
+copyright under the GPL, version 2 or later.
diff --git a/scripts/debsign.bash_completion b/scripts/debsign.bash_completion
new file mode 100644
index 0000000..a7b72fb
--- /dev/null
+++ b/scripts/debsign.bash_completion
@@ -0,0 +1,99 @@
+# /usr/share/bash-completion/completions/debsign
+# Bash command completion for ‘debsign(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+shopt -s progcomp
+
+_have _debsign_completion &&
+_debsign_completion () {
+ COMPREPLY=()
+
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+ local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+ local options=(
+ -h --help --version
+ -r -m -e -k
+ -a -t --multi
+ -p --debs-dir
+ -S
+ --re-sign --no-re-sign
+ --no-conf --noconf
+ )
+
+ case "$prev" in
+ -r)
+ # The option requires a non-option argument here, but we
+ # have no feasible way to generate auto-completion matches
+ # for ‘username@remotehost’. Use an empty set.
+ local host_options=""
+ COMPREPLY=( $(compgen -W "$host_options" -- "$cur") )
+ ;;
+
+ -m|-e)
+ # The previous option requires an argument, but we
+ # have no feasible way to generate auto-completion matches
+ # for a maintainer identifier. Use an empty set.
+ local maintainer_options=""
+ COMPREPLY=( $(compgen -W "$maintainer_options" -- "$cur") )
+ ;;
+
+ -k)
+ # Provide completions for GnuPG secret key IDs.
+ local keyid_options=$(
+ gpg --fixed-list-mode --with-colons --fingerprint \
+ --list-secret-keys \
+ | awk -F':' '/^sec/{print $5}' )
+ COMPREPLY=( $(
+ compgen -W "$keyid_options" | grep "^${cur:-.}"
+ ) )
+ ;;
+
+ -a)
+ # Provide completions for system architecture identifiers.
+ local arch_options=$(dpkg-architecture --list-known)
+ COMPREPLY=( $(compgen -W "$arch_options" -- "$cur") )
+ ;;
+
+ -t)
+ # The previous option requires an argument, but we
+ # have no feasible way to generate auto-completion matches
+ # for a GNU system type identifier. Use an empty set.
+ local type_options=""
+ COMPREPLY=( $(compgen -W "$type_options" -- "$cur") )
+ ;;
+
+ -p)
+ # Provide completions for available commands.
+ COMPREPLY=( $(compgen -A command -- "$cur") )
+ ;;
+
+ --debs-dir)
+ # Provide completions for existing directory paths.
+ COMPREPLY=( $(compgen -o dirnames -A directory -- "$cur") )
+ ;;
+
+ *)
+ COMPREPLY=( $(
+ compgen -G "${cur}*.changes"
+ compgen -G "${cur}*.buildinfo"
+ compgen -G "${cur}*.dsc"
+ compgen -G "${cur}*.commands"
+ compgen -W "${options[*]}" -- "$cur"
+ ) )
+ compopt -o filenames
+ compopt -o plusdirs
+ ;;
+ esac
+
+ return 0
+
+} && complete -F _debsign_completion debsign
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/debsign.sh b/scripts/debsign.sh
new file mode 100755
index 0000000..7ad2aa4
--- /dev/null
+++ b/scripts/debsign.sh
@@ -0,0 +1,869 @@
+#!/bin/sh
+
+# This program is designed to GPG sign .dsc, .buildinfo, or .changes
+# files (or any combination of these) in the form needed for a legal
+# Debian upload. It is based in part on dpkg-buildpackage.
+
+# Debian GNU/Linux debsign. Copyright (C) 1999 Julian Gilbey.
+# Modifications to work with GPG by Joseph Carter and Julian Gilbey
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# Abort if anything goes wrong
+set -e
+
+PROGNAME=${0##*/}
+PRECIOUS_FILES=0
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+HAVE_SIGNED=""
+NUM_SIGNED=0
+
+# Temporary directories
+signingdir=""
+remotefilesdir=""
+
+trap cleanup_tmpdir EXIT
+
+# --- Functions
+
+mksigningdir() {
+ if [ -z "$signingdir" ]; then
+ signingdir="$(mktemp -dt debsign.XXXXXXXX)" || {
+ echo "$PROGNAME: Can't create temporary directory" >&2
+ echo "Aborting..." >&2
+ exit 1
+ }
+ fi
+}
+
+mkremotefilesdir() {
+ if [ -z "$remotefilesdir" ]; then
+ remotefilesdir="$(mktemp -dt debsign.XXXXXXXX)" || {
+ echo "$PROGNAME: Can't create temporary directory" >&2
+ echo "Aborting..." >&2
+ exit 1
+ }
+ fi
+}
+
+usage() {
+ echo \
+"Usage: debsign [options] [changes, buildinfo, dsc or commands file]
+ Options:
+ -r [username@]remotehost
+ The machine on which the files live. If given, then a
+ changes file with full pathname (or relative to the
+ remote home directory) must be given as the main
+ argument in the rest of the command line.
+ -k<keyid> The key to use for signing
+ -p<sign-command> The command to use for signing
+ -e<maintainer> Sign using key of <maintainer> (takes precedence over -m)
+ -m<maintainer> The same as -e
+ -S Use changes file made for source-only upload
+ -a<arch> Use changes file made for Debian target architecture <arch>
+ -t<target> Use changes file made for GNU target architecture <target>
+ --multi Use most recent multiarch .changes file found
+ --re-sign Re-sign if the file is already signed.
+ --no-re-sign Don't re-sign if the file is already signed.
+ --debs-dir <directory>
+ The location of the files to be signed when called from
+ within a source tree (default "..")
+ --no-conf, --noconf
+ Don't read devscripts config files;
+ must be the first option given
+ --help Show this message
+ --version Show version and copyright information
+ If an explicit filename is specified, it along with any child .buildinfo and
+ .dsc files are signed. Otherwise, debian/changelog is parsed to find the
+ changes file.
+
+$MODIFIED_CONF_MSG"
+}
+
+version() {
+ echo \
+"This is debsign, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1999 by Julian Gilbey, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+temp_filename() {
+ local filename
+
+ if ! [ -w "$(dirname "$1")" ]; then
+ filename=$(mktemp -t "$(basename "$1").$2.XXXXXXXXXX") || {
+ echo "$PROGNAME: Unable to create temporary file; aborting" >&2
+ exit 1
+ }
+ else
+ filename="$1.$2"
+ fi
+
+ echo "$filename"
+}
+
+to_bool() {
+ if "$@"; then echo true; else echo false; fi
+}
+
+movefile() {
+ if [ -w "$(dirname "$2")" ]; then
+ mv -f -- "$1" "$2"
+ else
+ cat "$1" > "$2"
+ rm -f "$1"
+ fi
+}
+
+cleanup_tmpdir() {
+ if [ -n "$remotefilesdir" ] && [ -d "$remotefilesdir" ]; then
+ if [ "$PRECIOUS_FILES" -gt 0 ]; then
+ echo "$PROGNAME: aborting with $PRECIOUS_FILES signed files in $remotefilesdir" >&2
+ # Only produce the warning once...
+ PRECIOUS_FILES=0
+ else
+ cd ..
+ rm -rf "$remotefilesdir"
+ fi
+ fi
+
+ if [ -n "$signingdir" ] && [ -d "$signingdir" ]; then
+ rm -rf "$signingdir"
+ fi
+}
+
+mustsetvar() {
+ if [ "x$2" = x ]
+ then
+ echo >&2 "$PROGNAME: unable to determine $3"
+ exit 1
+ else
+ # echo "$PROGNAME: $3 is $2"
+ eval "$1=\"\$2\""
+ fi
+}
+
+# This takes two arguments: the name of the file to sign and the
+# key or maintainer name to use. NOTE: this usage differs from that
+# of dpkg-buildpackage, because we do not know all of the necessary
+# information when this function is read first.
+signfile() {
+ local type="$1"
+ local file="$2"
+ local signas="$3"
+ local savestty=$(stty -g 2>/dev/null) || true
+ mksigningdir
+ UNSIGNED_FILE="$signingdir/$(basename "$file")"
+ ASCII_SIGNED_FILE="${UNSIGNED_FILE}.asc"
+ (cat "$file" ; echo "") > "$UNSIGNED_FILE"
+
+ gpgversion=$($signcommand --version | head -n 1 | cut -d' ' -f3)
+ gpgmajorversion=$(echo $gpgversion | cut -d. -f1)
+ gpgminorversion=$(echo $gpgversion | cut -d. -f2)
+
+ if [ $gpgmajorversion -gt 1 -o $gpgminorversion -ge 4 ]
+ then
+ $signcommand --local-user "$signas" --clearsign \
+ --list-options no-show-policy-urls \
+ --armor --textmode --output "$ASCII_SIGNED_FILE"\
+ "$UNSIGNED_FILE" || \
+ { SAVESTAT=$?
+ echo "$PROGNAME: $signcommand error occurred! Aborting...." >&2
+ stty $savestty 2>/dev/null || true
+ exit $SAVESTAT
+ }
+ else
+ $signcommand --local-user "$signas" --clearsign \
+ --no-show-policy-url \
+ --armor --textmode --output "$ASCII_SIGNED_FILE" \
+ "$UNSIGNED_FILE" || \
+ { SAVESTAT=$?
+ echo "$PROGNAME: $signcommand error occurred! Aborting...." >&2
+ stty $savestty 2>/dev/null || true
+ exit $SAVESTAT
+ }
+ fi
+ stty $savestty 2>/dev/null || true
+ echo
+ PRECIOUS_FILES=$(($PRECIOUS_FILES + 1))
+ HAVE_SIGNED="${HAVE_SIGNED:+${HAVE_SIGNED}, }$type"
+ NUM_SIGNED=$((NUM_SIGNED + 1))
+ movefile "$ASCII_SIGNED_FILE" "$file"
+}
+
+withecho() {
+ echo " $@"
+ "$@"
+}
+
+file_is_already_signed() {
+ test "$(head -n 1 "$1")" = "-----BEGIN PGP SIGNED MESSAGE-----"
+}
+
+unsignfile() {
+ UNSIGNED_FILE="$(temp_filename "$1" "unsigned")"
+
+ sed -e '1,/^$/d; /^$/,$d' "$1" > "$UNSIGNED_FILE"
+ movefile "$UNSIGNED_FILE" "$1"
+}
+
+# Has the dsc file already been signed, perhaps from a previous, partially
+# successful invocation of debsign? We give the user the option of
+# resigning the file or accepting it as is. Returns success if already
+# and failure if the file needs signing. Parameters: $1=filename,
+# $2=file type for message (e.g. "changes", "commands")
+check_already_signed() {
+ file_is_already_signed "$1" || return 1
+
+ local resign
+ if [ "$opt_re_sign" = "true" ]; then
+ resign="true"
+ elif [ "$opt_re_sign" = "false" ]; then
+ resign="false"
+ else
+ response=n
+ if [ -z "$DEBSIGN_ALWAYS_RESIGN" ]; then
+ printf "The .$2 file is already signed.\nWould you like to use the current signature? [Yn]"
+ read response
+ fi
+ case $response in
+ [Nn]*) resign="true" ;;
+ *) resign="false" ;;
+ esac
+ fi
+
+ [ "$resign" = "true" ] || \
+ return 0
+
+ withecho unsignfile "$1"
+ return 1
+}
+
+# --- main script
+
+# Unset GREP_OPTIONS for sanity
+unset GREP_OPTIONS
+
+# Boilerplate: set config variables
+DEFAULT_DEBSIGN_ALWAYS_RESIGN=
+DEFAULT_DEBSIGN_PROGRAM=
+DEFAULT_DEBSIGN_MAINT=
+DEFAULT_DEBSIGN_KEYID=
+DEFAULT_DEBRELEASE_DEBS_DIR=..
+VARS="DEBSIGN_ALWAYS_RESIGN DEBSIGN_PROGRAM DEBSIGN_MAINT"
+VARS="$VARS DEBSIGN_KEYID DEBRELEASE_DEBS_DIR"
+
+if [ "$1" = "--no-conf" -o "$1" = "--noconf" ]; then
+ shift
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (no configuration files read)"
+
+ # set defaults
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+else
+ # Run in a subshell for protection against accidental errors
+ # in the config files
+ eval $(
+ set +e
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+
+ for file in /etc/devscripts.conf ~/.devscripts
+ do
+ [ -r $file ] && . $file
+ done
+
+ set | grep -E '^(DEBSIGN|DEBRELEASE|DEVSCRIPTS)_')
+
+ # We do not replace this with a default directory to avoid accidentally
+ # signing a broken package
+ DEBRELEASE_DEBS_DIR="$(echo "${DEBRELEASE_DEBS_DIR%/}" | sed -e 's%/\+%/%g')"
+
+ # set config message
+ MODIFIED_CONF=''
+ for var in $VARS; do
+ eval "if [ \"\$$var\" != \"\$DEFAULT_$var\" ]; then
+ MODIFIED_CONF_MSG=\"\$MODIFIED_CONF_MSG
+ $var=\$$var\";
+ MODIFIED_CONF=yes;
+ fi"
+ done
+
+ if [ -z "$MODIFIED_CONF" ]; then
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (none)"
+ fi
+fi
+
+maint="$DEBSIGN_MAINT"
+signkey="$DEBSIGN_KEYID"
+debsdir="$DEBRELEASE_DEBS_DIR"
+debsdir_warning="config file specified DEBRELEASE_DEBS_DIR directory $DEBRELEASE_DEBS_DIR does not exist!"
+
+signcommand=''
+if [ -n "$DEBSIGN_PROGRAM" ]; then
+ signcommand="$DEBSIGN_PROGRAM"
+else
+ if command -v gpg > /dev/null; then
+ signcommand=gpg
+ elif command -v gpg2 > /dev/null; then
+ signcommand=gpg2
+ fi
+fi
+
+TEMP=$(getopt -n "$PROGNAME" -o 'p:m:e:k:Sa:t:r:h' \
+ -l 'multi,re-sign,no-re-sign,debs-dir:' \
+ -l 'noconf,no-conf,help,version' \
+ -- "$@") || (rc=$?; usage >&2; exit $rc)
+
+eval set -- "$TEMP"
+
+while true
+do
+ case "$1" in
+ -p) signcommand="$2"; shift ;;
+ -m) maint="$2"; shift ;;
+ -e) maint="$2"; shift ;;
+ -k) signkey="$2"; shift ;;
+ -S) sourceonly="true" ;;
+ -a) targetarch="$2"; shift ;;
+ -t) targetgnusystem="$2"; shift ;;
+ --multi) multiarch="true" ;;
+ --re-sign) opt_re_sign="true" ;;
+ --no-re-sign) opt_re_sign="false" ;;
+ -r) remotehost=$2; shift
+ # Allow for the [user@]host:filename format
+ hostpart="${remotehost%:*}"
+ filepart="${remotehost#*:}"
+ if [ -n "$filepart" -a "$filepart" != "$remotehost" ]; then
+ remotehost="$hostpart"
+ set -- "$@" "$filepart"
+ fi
+ ;;
+ --debs-dir)
+ shift
+ opt_debsdir="$(echo "${1%/}" | sed -e 's%/\+%/%g')"
+ debsdir_warning="could not find directory $opt_debsdir!"
+ ;;
+ --no-conf|--noconf)
+ echo "$PROGNAME: $1 is only acceptable as the first command-line option!" >&2
+ exit 1 ;;
+ -h|--help)
+ usage; exit 0 ;;
+ --version)
+ version; exit 0 ;;
+ --) shift; break ;;
+ esac
+ shift
+done
+
+debsdir=${opt_debsdir:-$debsdir}
+
+if [ -z "$signcommand" ]; then
+ echo "Could not find a signing program!" >&2
+ exit 1
+fi
+
+if echo "${signkey}" | grep -E -qs '^(0x)?[a-zA-Z0-9]{8}$'; then
+ echo "Refusing to sign with short key ID '$signkey'!" >&2
+ exit 1
+fi
+
+if echo "${signkey}" | grep -E -qs '^(0x)?[a-zA-Z0-9]{16}$'; then
+ echo "long key IDs are discouraged; please use key fingerprints instead" >&2
+fi
+
+ensure_local_copy() {
+ local remotehost="$1"
+ local remotefile="$2"
+ local file="$3"
+ local type="$4"
+ if [ -n "$remotehost" ]
+ then
+ if [ ! -f "$file" ]
+ then
+ withecho scp "$remotehost:$remotefile" "$file"
+ fi
+ fi
+
+ if [ ! -f "$file" -o ! -r "$file" ]
+ then
+ echo "$PROGNAME: Can't find or can't read $type file $file!" >&2
+ exit 1
+ fi
+}
+
+fixup_control() {
+ local filter_out="$1"
+ local childtype="$2"
+ local parenttype="$3"
+ local child="$4"
+ local parent="$5"
+ test -r "$child" || {
+ echo "$PROGNAME: Can't read .$childtype file $child!" >&2
+ return 1
+ }
+
+ local md5=$(md5sum "$child" | cut -d' ' -f1)
+ local sha1=$(sha1sum "$child" | cut -d' ' -f1)
+ local sha256=$(sha256sum "$child" | cut -d' ' -f1)
+ perl -i -pe 'BEGIN {
+ '" \$file='$child'; \$md5='$md5'; "'
+ '" \$sha1='$sha1'; \$sha256='$sha256'; "'
+ $size=(-s $file); ($base=$file) =~ s|.*/||;
+ $infiles=0; $inmd5=0; $insha1=0; $insha256=0; $format="";
+ }
+ if(/^Format:\s+(.*)/) {
+ $format=$1;
+ die "Unrecognised .$parenttype format: $format\n"
+ unless $format =~ /^\d+(\.\d+)*$/;
+ ($major, $minor) = split(/\./, $format);
+ $major+=0;$minor+=0;
+ die "Unsupported .$parenttype format: $format\n"
+ if('"$filter_out"');
+ }
+ /^Files:/i && ($infiles=1,$inmd5=0,$insha1=0,$insha256=0);
+ if(/^Checksums-Sha1:/i) {$insha1=1;$infiles=0;$inmd5=0;$insha256=0;}
+ elsif(/^Checksums-Sha256:/i) {
+ $insha256=1;$infiles=0;$inmd5=0;$insha1=0;
+ } elsif(/^Checksums-Md5:/i) {
+ $inmd5=1;$infiles=0;$insha1=0;$insha256=0;
+ } elsif(/^Checksums-.*?:/i) {
+ die "Unknown checksum format: $_\n";
+ }
+ /^\s*$/ && ($infiles=0,$inmd5=0,$insha1=0,$insha256=0);
+ if ($infiles &&
+ /^ (\S+) (\d+) (\S+) (\S+) \Q$base\E\s*$/) {
+ $_ = " $md5 $size $3 $4 $base\n";
+ $infiles=0;
+ }
+ if ($inmd5 &&
+ /^ (\S+) (\d+) \Q$base\E\s*$/) {
+ $_ = " $md5 $size $base\n";
+ $inmd5=0;
+ }
+ if ($insha1 &&
+ /^ (\S+) (\d+) \Q$base\E\s*$/) {
+ $_ = " $sha1 $size $base\n";
+ $insha1=0;
+ }
+ if ($insha256 &&
+ /^ (\S+) (\d+) \Q$base\E\s*$/) {
+ $_ = " $sha256 $size $base\n";
+ $insha256=0;
+ }' "$parent"
+}
+
+fixup_buildinfo() {
+ fixup_control '($major != 0 or $minor > 2) and ($major != 1 or $minor > 0)' dsc buildinfo "$@"
+}
+
+fixup_changes() {
+ local childtype="$1"
+ shift
+ fixup_control '$major!=1 or $minor > 8 or $minor < 7' $childtype changes "$@"
+}
+
+withtempfile() {
+ local filetype="$1"
+ local mainfile="$2"
+ shift 2
+ local temp_file="$(temp_filename "$mainfile" "temp")"
+ cp "$mainfile" "$temp_file"
+ if "$@" "$temp_file"; then
+ if ! cmp -s "$mainfile" "$temp_file"; then
+ # emulate output of "withecho" but on the mainfile
+ echo " $@" "$mainfile" >&2
+ fi
+ movefile "$temp_file" "$mainfile"
+ else
+ rm "$temp_file"
+ echo "$PROGNAME: Error processing .$filetype file (see above)" >&2
+ exit 1
+ fi
+}
+
+guess_signas() {
+ if [ -n "$maint" ]
+ then maintainer="$maint"
+ # Try the new "Changed-By:" field first
+ else maintainer=$(sed -n 's/^Changed-By: //p' $1)
+ fi
+ if [ -z "$maintainer" ]
+ then maintainer=$(sed -n 's/^Maintainer: //p' $1)
+ fi
+
+ echo "${signkey:-$maintainer}"
+}
+
+maybesign_dsc() {
+ local signas="$1"
+ local remotehost="$2"
+ local dsc="$3"
+
+ if check_already_signed "$dsc" dsc; then
+ echo "Leaving current signature unchanged." >&2
+ return
+ fi
+
+ withecho signfile dsc "$dsc" "$signas"
+
+ if [ -n "$remotehost" ]
+ then
+ withecho scp "$dsc" "$remotehost:$remotedir"
+ PRECIOUS_FILES=$(($PRECIOUS_FILES - 1))
+ fi
+}
+
+maybesign_buildinfo() {
+ local signas="$1"
+ local remotehost="$2"
+ local buildinfo="$3"
+ local dsc="$4"
+
+ if check_already_signed "$buildinfo" "buildinfo"; then
+ echo "Leaving current signature unchanged." >&2
+ return
+ fi
+
+ if [ -n "$dsc" ]; then
+ maybesign_dsc "$signas" "$remotehost" "$dsc"
+ withtempfile buildinfo "$buildinfo" fixup_buildinfo "$dsc"
+ fi
+
+ withecho signfile buildinfo "$buildinfo" "$signas"
+
+ if [ -n "$remotehost" ]
+ then
+ withecho scp "$buildinfo" "$remotehost:$remotedir"
+ PRECIOUS_FILES=$(($PRECIOUS_FILES - 1))
+ fi
+}
+
+maybesign_changes() {
+ local signas="$1"
+ local remotehost="$2"
+ local changes="$3"
+ local buildinfo="$4"
+ local dsc="$5"
+
+ if check_already_signed "$changes" "changes"; then
+ echo "Leaving current signature unchanged." >&2
+ return
+ fi
+
+ hasdsc="$(to_bool [ -n "$dsc" ])"
+ hasbuildinfo="$(to_bool [ -n "$buildinfo" ])"
+
+ if $hasbuildinfo; then
+ # assume that this will also sign the same dsc if it's available
+ maybesign_buildinfo "$signas" "$remotehost" "$buildinfo" "$dsc"
+ elif $hasdsc; then
+ maybesign_dsc "$signas" "$remotehost" "$dsc"
+ fi
+
+ if $hasdsc; then
+ withtempfile changes "$changes" fixup_changes dsc "$dsc"
+ fi
+ if $hasbuildinfo; then
+ withtempfile changes "$changes" fixup_changes buildinfo "$buildinfo"
+ fi
+ withecho signfile changes "$changes" "$signas"
+
+ if [ -n "$remotehost" ]
+ then
+ withecho scp "$changes" "$remotehost:$remotedir"
+ PRECIOUS_FILES=$(($PRECIOUS_FILES - 1))
+ fi
+}
+
+report_signed() {
+ if [ $NUM_SIGNED -eq 1 ]; then
+ echo "Successfully signed $HAVE_SIGNED file"
+ elif [ $NUM_SIGNED -gt 0 ]; then
+ echo "Successfully signed $HAVE_SIGNED files"
+ fi
+}
+
+dosigning() {
+ # Do we have to download the changes file?
+ if [ -n "$remotehost" ]
+ then
+ mkremotefilesdir
+ cd "$remotefilesdir"
+
+ remotechanges=$changes
+ remotebuildinfo=$buildinfo
+ remotedsc=$dsc
+ remotecommands=$commands
+ changes=$(basename "$changes")
+ buildinfo=$(basename "$buildinfo")
+ dsc=$(basename "$dsc")
+ commands=$(basename "$commands")
+
+ if [ -n "$changes" ]; then
+ if [ ! -f "$changes" ]; then
+ # Special handling for changes to support supplying a glob
+ # and downloading all matching changes files (c.f., #491627)
+ withecho scp "$remotehost:$remotechanges" .
+ fi
+ fi
+
+ if [ -n "$changes" ] && echo "$changes" | grep -qE '[][*?]'
+ then
+ for changes in $changes
+ do
+ dsc=
+ buildinfo=
+ printf "\n"
+ dosigning;
+ done
+ exit 0;
+ fi
+ fi
+
+ if [ -n "$commands" ] # sign .commands file
+ then
+ ensure_local_copy "$remotehost" "$remotecommands" "$commands" commands
+ check_already_signed "$commands" commands && {
+ echo "Leaving current signature unchanged." >&2
+ return
+ }
+
+ # simple validator for .commands files, see
+ # ftp://ftp.upload.debian.org/pub/UploadQueue/README
+ perl -ne 'BEGIN { $uploader = 0; $incommands = 0; }
+ END { exit $? if $?;
+ if ($uploader && $incommands) { exit 0; }
+ else { die ".commands file missing Uploader or Commands field\n"; }
+ }
+ sub checkcommands {
+ chomp($line=$_[0]);
+ if ($line =~ m%^\s*reschedule\s+[^\s/]+\.changes\s+[0-9]+-day\s*$%) { return 0; }
+ if ($line =~ m%^\s*cancel\s+[^\s/]+\.changes\s*$%) { return 0; }
+ if ($line =~ m%^\s*rm(\s+(?:DELAYED/[0-9]+-day/)?[^\s/]+)+\s*$%) { return 0; }
+ if ($line eq "") { return 0; }
+ die ".commands file has invalid Commands line: $line\n";
+ }
+ if (/^Uploader:/) {
+ if ($uploader) { die ".commands file has too many Uploader fields!\n"; }
+ $uploader++;
+ } elsif (! $incommands && s/^Commands:\s*//) {
+ $incommands=1; checkcommands($_);
+ } elsif ($incommands == 1) {
+ if (s/^\s+//) { checkcommands($_); }
+ elsif (/./) { die ".commands file: extra stuff after Commands field!\n"; }
+ else { $incommands = 2; }
+ } else {
+ next if /^\s*$/;
+ if (/./) { die ".commands file: extra stuff after Commands field!\n"; }
+ }' $commands || {
+ echo "$PROGNAME: .commands file appears to be invalid. see:
+ftp://ftp.upload.debian.org/pub/UploadQueue/README
+for valid format" >&2;
+ exit 1; }
+
+ if [ -n "$maint" ]
+ then maintainer="$maint"
+ else
+ maintainer=$(sed -n 's/^Uploader: //p' $commands)
+ if [ -z "$maintainer" ]
+ then
+ echo "Unable to parse Uploader, .commands file invalid."
+ exit 1
+ fi
+ fi
+
+ signas="${signkey:-$maintainer}"
+
+ withecho signfile commands "$commands" "$signas"
+
+ if [ -n "$remotehost" ]
+ then
+ withecho scp "$commands" "$remotehost:$remotedir"
+ PRECIOUS_FILES=$(($PRECIOUS_FILES - 1))
+ fi
+
+ report_signed
+
+ elif [ -n "$changes" ]
+ then
+ ensure_local_copy "$remotehost" "$remotechanges" "$changes" changes
+ derive_childfile "$changes" dsc
+ if [ -n "$dsc" ]
+ then
+ ensure_local_copy "$remotehost" "${remotedir}$dsc" "$dsc" dsc
+ fi
+ derive_childfile "$changes" buildinfo
+ if [ -n "$buildinfo" ]
+ then
+ ensure_local_copy "$remotehost" "${remotedir}$buildinfo" "$buildinfo" buildinfo
+ fi
+ signas="$(guess_signas "$changes")"
+ maybesign_changes "$signas" "$remotehost" \
+ "$changes" "$buildinfo" "$dsc"
+ report_signed
+
+ elif [ -n "$buildinfo" ]
+ then
+ ensure_local_copy "$remotehost" "$remotebuildinfo" "$buildinfo" buildinfo
+ derive_childfile "$buildinfo" dsc
+ if [ -n "$dsc" ]
+ then
+ ensure_local_copy "$remotehost" "${remotedir}$dsc" "$dsc" dsc
+ fi
+ signas="$(guess_signas "$buildinfo")"
+ maybesign_buildinfo "$signas" "$remotehost" \
+ "$buildinfo" "$dsc"
+ report_signed
+
+ else
+ ensure_local_copy "$remotehost" "$remotedsc" "$dsc" dsc
+ signas="$(guess_signas "$dsc")"
+ maybesign_dsc "$signas" "$remotehost" "$dsc"
+ report_signed
+
+ fi
+}
+
+derive_childfile() {
+ local base="$1"
+ local ext="$2"
+
+ local fname dir
+ fname="$(sed -n '/^\(Checksum\|Files\)/,/^\(Checksum\|Files\)/s/.*[ ]\([^ ]*\.'"$ext"'\)$/\1/p' "$base" | head -n1)"
+ if [ -n "$fname" ]
+ then
+ get_dirname "$base" dir
+ eval "$ext=\"${dir}$fname\""
+ else
+ eval "$ext="
+ fi
+}
+
+get_dirname() {
+ local path="$1"
+ local varname="$2"
+
+ local d
+ d="$(dirname "$path")"
+
+ if [ "$d" = "." ]
+ then
+ d=""
+ else
+ d="$d/"
+ fi
+
+ eval "$varname=\"$d\""
+}
+
+# If there is a command-line parameter, it is the name of a .changes file
+# If not, we must be at the top level of a source tree and will figure
+# out its name from debian/changelog
+case $# in
+ 0) # We have to parse debian/changelog to find the current version
+ # check sanity of debsdir
+ if ! [ -d "$debsdir" ]; then
+ echo "$PROGNAME: $debsdir_warning" >&2
+ exit 1
+ fi
+ if [ -n "$remotehost" ]; then
+ echo "$PROGNAME: Need to specify a remote file location when giving -r!" >&2
+ exit 1
+ fi
+ if [ ! -r debian/changelog ]; then
+ echo "$PROGNAME: Must be run from top of source dir or a .changes file given as arg" >&2
+ exit 1
+ fi
+
+ mustsetvar package "`dpkg-parsechangelog -SSource`" "source package"
+ mustsetvar version "`dpkg-parsechangelog -SVersion`" "source version"
+
+ if [ "x$sourceonly" = x ]
+ then
+ if [ -n "$targetarch" ] && [ -n "$targetgnusystem" ]; then
+ mustsetvar arch "$(dpkg-architecture "-a${targetarch}" "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+ elif [ -n "$targetarch" ]; then
+ mustsetvar arch "$(dpkg-architecture "-a${targetarch}" -qDEB_HOST_ARCH)" "build architecture"
+ elif [ -n "$targetgnusystem" ]; then
+ mustsetvar arch "$(dpkg-architecture "-t${targetgnusystem}" -qDEB_HOST_ARCH)" "build architecture"
+ else
+ mustsetvar arch "$(dpkg-architecture -qDEB_HOST_ARCH)" "build architecture"
+ fi
+ else
+ arch=source
+ fi
+
+ sversion=$(echo "$version" | perl -pe 's/^\d+://')
+ pva="${package}_${sversion}_${arch}"
+ changes="$debsdir/$pva.changes"
+ if [ -n "$multiarch" -o ! -r $changes ]; then
+ changes=$(ls "$debsdir/${package}_${sversion}_*+*.changes" "$debsdir/${package}_${sversion}_multi.changes" 2>/dev/null | head -1)
+ # TODO: dpkg-cross does not yet do buildinfo, so don't worry about it here
+ if [ -z "$multiarch" ]; then
+ if [ -n "$changes" ]; then
+ echo "$PROGNAME: could not find normal .changes file but found multiarch file:" >&2
+ echo " $changes" >&2
+ echo "Using this changes file instead." >&2
+ else
+ echo "$PROGNAME: Can't find or can't read changes file $changes!" >&2
+ exit 1
+ fi
+ elif [ -n "$multiarch" -a -z "$changes" ]; then
+ echo "$PROGNAME: could not find any multiarch .changes file with name" >&2
+ echo "$debsdir/${package}_${sversion}_*.changes" >&2
+ exit 1
+ fi
+ fi
+ derive_childfile "$changes" dsc
+ derive_childfile "$changes" buildinfo
+ dosigning;
+ ;;
+
+ *) while [ $# -gt 0 ]; do
+ changes=
+ buildinfo=
+ dsc=
+ commands=
+ case "$1" in
+ *.dsc)
+ dsc=$1
+ ;;
+ *.buildinfo)
+ buildinfo=$1
+ ;;
+ *.changes)
+ changes=$1
+ ;;
+ *.commands)
+ commands=$1
+ ;;
+ *)
+ echo "$PROGNAME: Only a .changes, .buildinfo, .dsc or .commands file is allowed as argument!" >&2
+ exit 1 ;;
+ esac
+ get_dirname "$1" remotedir
+ dosigning
+ shift
+ done
+ ;;
+esac
+
+exit 0
diff --git a/scripts/debsnap.1 b/scripts/debsnap.1
new file mode 100644
index 0000000..7958e9e
--- /dev/null
+++ b/scripts/debsnap.1
@@ -0,0 +1,160 @@
+.\" for manpage-specific macros, see man(7)
+.TH DEBSNAP 1 "July 3, 2010" "Debian devscripts" "DebSnap User Manual"
+.SH NAME
+debsnap \- retrieve old snapshots of Debian packages
+
+.SH SYNOPSIS
+.B debsnap
+.RI [ options ] " package " [ version ]
+
+.B debsnap
+.RB [ -h " | " \-\-help ] " " [ \-\-version ]
+
+
+.SH DESCRIPTION
+\fBdebsnap\fP is a tool to help with retrieving snapshots of old packages from
+a daily archive repository.
+
+The only publicly available snapshot archive is currently located at
+\fIhttps://snapshot.debian.org\fP
+
+By default, debsnap will download all the available versions for \fIpackage\fP
+that are found in the snapshot archive. If a \fIversion\fP is specified, only
+that particular version will be downloaded, if available.
+
+
+.SH OPTIONS
+The following options are available:
+
+.TP
+.BI -d " destination\fR,\fP " \-\-destdir " destination"
+Directory to place retrieved packages.
+
+.TP
+.BR \-f ", " \-\-force
+Force writing into an existing \fIdestination\fP. By default \fBdebsnap\fP will
+insist the destination directory does not exist yet unless it is explicitly
+specified to be '\fB.\fR' (the current working directory). This is to avoid files
+being accidentally overwritten by what is fetched from the archive and to
+provide a guarantee for other scripts that only the files fetched will be
+present there upon completion.
+
+.TP
+.BR \-v ", " \-\-verbose
+Report on the \fBdebsnap\fP configuration being used and progress during the
+download operation. Please always use this option when reporting bugs.
+
+.TP
+.BR \-l ", " \-\-list
+Don't download but just list versions.
+
+.TP
+.BR \-\-binary
+Download binary packages instead of source packages.
+
+.TP
+.BR \-a ", " \-\-architecture
+Specify architecture of downloaded binary packages. Implies \fB\-\-binary\fP.
+This can be given multiple times in order to download binary packages for
+multiple architectures.
+
+.TP
+.B \-\-first
+Specify the minimum version of a package which will be downloaded. Any
+versions which compare larger than this, according to \fBdpkg\fP, will be
+considered for download. May be used in combination with \fB\-\-last\fP.
+
+.TP
+.B \-\-last
+Specify the maximum version of a package which will be downloaded. Any package
+versions which compare less than this, according to \fBdpkg\fP, will be
+considered for download. May be used in combination with \fB\-\-first\fP.
+
+.TP
+.BR \-h ", " \-\-help
+Show a summary of these options.
+
+.TP
+.B \-\-version
+Show the version of \fBdebsnap\fP.
+
+
+.SH CONFIGURATION OPTIONS
+\fBdebsnap\fP may also be configured through the use of the following options
+in the devscripts configuration files:
+
+.TP
+.B DEBSNAP_VERBOSE
+Same as the command line option \fB\-\-verbose\fP. Set to \fIyes\fP to enable.
+
+.TP
+.B DEBSNAP_DESTDIR
+Set a default path for the destination directory. If unset
+\fI./source\-<package_name>\fP will be used. The command line option
+\fB\-\-destdir\fP will override this.
+
+.TP
+.B DEBSNAP_BASE_URL
+The base url for the snapshots archive.
+
+If unset this defaults to \fIhttps://snapshot.debian.org\fP
+
+.SH EXIT STATUS
+\fBdebsnap\fP will return an exit status of 0 if all operations succeeded,
+1 if a fatal error occurred, and 2 if some packages failed to be downloaded
+but operations otherwise succeeded as expected. In some cases packages may
+fail to be downloaded because they are no longer available on the snapshot
+mirror, so any caller should expect this may occur in normal use.
+
+.SH EXAMPLES
+.TP
+.BR "debsnap -a amd64 xterm 256-1"
+Download the binary package of a specific xterm version for amd64 architecture.
+.TP
+.BR "debsnap -a armel xterm"
+Download binary packages for all versions of xterm for armel architecture.
+.TP
+.BR "debsnap --binary xterm 256-1"
+Download binary packages for a specific xterm version but for all architectures.
+.TP
+.BR "debsnap --binary xterm"
+Download binary packages for all versions of xterm for all architectures.
+.TP
+.BR "debsnap -v --first 347-1 --last 348-2 xterm"
+Download source packages for local architecture of xterm, between 347-1 and
+348-2 revisions, inclusive, showing the progress when doing it.
+.TP
+.BR "aptitude search '~i' -F '%p %V' | while read pkg ver; do debsnap -a $(dpkg-architecture -qDEB_HOST_ARCH) -a all $pkg $ver; done"
+Download binary packages of all packages that are installed on the system.
+
+.SH FILES
+.TP
+.I /etc/devscripts.conf
+Global devscripts configuration options. Will override hardcoded defaults.
+.TP
+.I ~/.devscripts
+Per\-user configuration options. Will override any global configuration.
+
+.SH SEE ALSO
+.BR devscripts (1),
+.BR devscripts.conf (5),
+.BR git-debimport (1)
+
+.SH AUTHORS
+David Paleino <dapal@debian.org>
+
+.SH COPYRIGHT
+Copyright \(co 2010 David Paleino
+
+Permission is granted to copy, distribute and/or modify this document under
+the terms of the GNU General Public License, Version 3 or (at your option)
+any later version published by the Free Software Foundation.
+
+On Debian systems, the complete text of the GNU General Public License can
+be found in \fI/usr/share/common\-licenses/GPL\fP.
+
+.SH BUGS
+.SS Reporting bugs
+The program is part of the devscripts package. Please report bugs using
+`\fBreportbug devscripts\fP`
+
diff --git a/scripts/debsnap.pl b/scripts/debsnap.pl
new file mode 100755
index 0000000..479e80c
--- /dev/null
+++ b/scripts/debsnap.pl
@@ -0,0 +1,423 @@
+#!/usr/bin/perl
+# vim: set ai shiftwidth=4 tabstop=4 expandtab:
+
+# Copyright © 2010, David Paleino <d.paleino@gmail.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 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 <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use File::Basename;
+use Cwd qw/cwd abs_path/;
+use File::Path qw/make_path/;
+use Dpkg::Version;
+use JSON::PP;
+
+my $progname = basename($0);
+
+eval {
+ require LWP::Simple;
+ require LWP::UserAgent;
+ no warnings;
+ $LWP::Simple::ua = LWP::UserAgent->new(
+ agent => 'LWP::UserAgent/Devscripts/###VERSION###');
+ $LWP::Simple::ua->env_proxy();
+};
+if ($@) {
+ if ($@ =~ m/Can\'t locate LWP/) {
+ die
+ "$progname: Unable to run: the libwww-perl package is not installed";
+ } else {
+ die "$progname: Unable to run: Couldn't load LWP::Simple: $@";
+ }
+}
+
+my $modified_conf_msg = '';
+my %config_vars = ();
+
+my %opt = (architecture => []);
+my $package = '';
+my $pkgversion;
+my $firstversion;
+my $lastversion;
+my $warnings = 0;
+
+sub fatal($);
+sub verbose($);
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2010 by David Paleino <dapal\@debian.org>.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the GNU
+General Public License v3 or, at your option, any later version.
+EOF
+ exit 0;
+}
+
+sub usage {
+ my $rc = shift;
+ print <<"EOF";
+$progname [options] <package name> [package version]
+
+Automatically downloads packages from snapshot.debian.org
+
+The following options are supported:
+ -h, --help Shows this help message
+ --version Shows information about version
+ -v, --verbose Be verbose
+ -d <destination directory>,
+ --destdir=<destination directory> Directory for retrieved packages
+ Default is ./source-<package name>
+ -f, --force Force overwriting an existing
+ destdir
+ -l, --list Don't download but just list versions
+ --binary Download binary packages instead of
+ source packages
+ -a <architecture>,
+ --architecture <architecture> Specify architecture of binary packages,
+ implies --binary. May be given multiple
+ times
+
+Default settings modified by devscripts configuration files or command-line
+options:
+$modified_conf_msg
+EOF
+ exit $rc;
+}
+
+sub fetch_json_page {
+ my ($json_url) = @_;
+
+ # download the json page:
+ verbose "Getting json $json_url\n";
+ my $content = LWP::Simple::get($json_url);
+ return unless defined $content;
+ my $json = JSON::PP->new();
+
+ # these are some nice json options to relax restrictions a bit:
+ my $json_text = $json->allow_nonref->utf8->relaxed->decode($content);
+
+ return $json_text;
+}
+
+sub read_conf {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ %config_vars = (
+ 'DEBSNAP_VERBOSE' => 'no',
+ 'DEBSNAP_DESTDIR' => '',
+ 'DEBSNAP_BASE_URL' => 'https://snapshot.debian.org',
+ );
+
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ $shell_cmd .= qq[unset `set | grep "^DEBSNAP_" | cut -d= -f1`;\n];
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ # Check validity
+ $config_vars{'DEBSNAP_VERBOSE'} =~ /^(yes|no)$/
+ or $config_vars{'DEBSNAP_VERBOSE'} = 'no';
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $opt{verbose} = $config_vars{DEBSNAP_VERBOSE} eq 'yes';
+ $opt{destdir} = $config_vars{DEBSNAP_DESTDIR};
+ $opt{baseurl} = $config_vars{DEBSNAP_BASE_URL};
+}
+
+sub have_file($$) {
+ my ($path, $hash) = @_;
+
+ if (-e $path) {
+ open(HASH, '-|', 'sha1sum', $path) || fatal "Can't run sha1sum: $!";
+ while (<HASH>) {
+ if (m/^([a-fA-F\d]{40}) /) {
+ close(HASH) || fatal "sha1sum problems: $! $?";
+ return $1 eq $hash;
+ }
+ }
+ }
+ return 0;
+}
+
+sub fatal($) {
+ my ($pack, $file, $line);
+ ($pack, $file, $line) = caller();
+ (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d;
+ $msg =~ s/\n\n$/\n/;
+ $! = 1;
+ die $msg;
+}
+
+sub verbose($) {
+ (my $msg = "@_\n") =~ tr/\0//d;
+ $msg =~ s/\n\n$/\n/;
+ print "$msg" if $opt{verbose};
+}
+
+sub keep_version($) {
+ my $version = shift;
+ if (defined $pkgversion) {
+ return version_compare_relation($pkgversion, REL_EQ, $version);
+ }
+ if (defined $firstversion) {
+ if ($firstversion > $version) {
+ verbose "skip version $version: older than first";
+ return 0;
+ }
+ }
+ if (defined $lastversion) {
+ if ($lastversion < $version) {
+ verbose "skip version $version: newer than last";
+ return 0;
+ }
+ }
+ return 1;
+}
+
+###
+# Main program
+###
+read_conf(@ARGV);
+Getopt::Long::Configure('gnu_compat');
+Getopt::Long::Configure('no_ignore_case');
+GetOptions(
+ \%opt, 'verbose|v', 'destdir|d=s', 'force|f',
+ 'help|h', 'version', 'first=s', 'last=s',
+ 'list|l', 'binary', 'architecture|a=s@'
+) || usage(1);
+
+usage(0) if $opt{help};
+version() if $opt{version};
+usage(1) unless @ARGV;
+$package = shift;
+if (@ARGV) {
+ my $version = shift;
+ $pkgversion = Dpkg::Version->new($version);
+ fatal "Invalid version '$version'" unless $pkgversion->is_valid();
+}
+
+if (defined $opt{first}) {
+ $firstversion = Dpkg::Version->new($opt{first});
+ fatal "Invalid version '$opt{first}'" unless $firstversion->is_valid();
+}
+
+if (defined $opt{last}) {
+ $lastversion = Dpkg::Version->new($opt{last});
+ fatal "Invalid version '$opt{last}'" unless $lastversion->is_valid();
+}
+
+$package eq '' && usage(1);
+
+$opt{binary} ||= @{ $opt{architecture} };
+
+my $baseurl;
+if ($opt{binary}) {
+ $opt{destdir} ||= "binary-$package";
+ $baseurl = "$opt{baseurl}/mr/binary/$package/";
+} else {
+ $opt{destdir} ||= "source-$package";
+ $baseurl = "$opt{baseurl}/mr/package/$package/";
+}
+
+my $mkdir_done = 0;
+my $mkDestDir = sub {
+ unless ($mkdir_done) {
+ if (-d $opt{destdir}) {
+ unless ($opt{force} || cwd() eq abs_path($opt{destdir})) {
+ fatal
+"Destination dir $opt{destdir} already exists.\nPlease (re)move it first, or use --force to overwrite.";
+ }
+ }
+
+ make_path($opt{destdir});
+ $mkdir_done = 1;
+ }
+};
+
+my $json_text = fetch_json_page($baseurl);
+unless ($json_text && @{ $json_text->{result} }) {
+ fatal "Unable to retrieve information for $package from $baseurl.";
+}
+
+my @versions = @{ $json_text->{result} };
+@versions
+ = $opt{binary}
+ ? grep { keep_version($_->{binary_version}) } @versions
+ : grep { keep_version($_->{version}) } @versions;
+unless (@versions) {
+ warn "$progname: No matching versions found for $package\n";
+ $warnings++;
+}
+if ($opt{list}) {
+ foreach my $version (@versions) {
+ if ($opt{binary}) {
+ print "$version->{binary_version}\n";
+ } else {
+ print "$version->{version}\n";
+ }
+ }
+} elsif ($opt{binary}) {
+ foreach my $version (@versions) {
+ my $src_json
+ = fetch_json_page(
+"$opt{baseurl}/mr/package/$version->{source}/$version->{version}/binfiles/$version->{name}/$version->{binary_version}?fileinfo=1"
+ );
+
+ unless ($src_json) {
+ warn
+"$progname: No binary packages found for $package version $version->{binary_version}\n";
+ $warnings++;
+ next;
+ }
+
+ my @results = @{ $src_json->{result} };
+ if (@{ $opt{architecture} }) {
+ my %archs = map { ($_ => 0) } @{ $opt{architecture} };
+ @results = grep {
+ exists $archs{ $_->{architecture} }
+ && ++$archs{ $_->{architecture} }
+ } @results;
+ my @missing = grep { $archs{$_} == 0 } sort keys %archs;
+ if (@missing) {
+ warn
+"$progname: No binary packages found for $package version $version->{binary_version} on "
+ . join(', ', @missing) . "\n";
+ $warnings++;
+ }
+ }
+ foreach my $result (@results) {
+ my $hash = $result->{hash};
+ my $fileinfo = @{ $src_json->{fileinfo}{$hash} }[0];
+ my $file_url = "$opt{baseurl}/file/$hash";
+ my $file_name = basename($fileinfo->{name});
+ if (!have_file("$opt{destdir}/$file_name", $hash)) {
+ verbose "Getting file $file_name: $file_url";
+ $mkDestDir->();
+ LWP::Simple::mirror($file_url, "$opt{destdir}/$file_name");
+ }
+ }
+ }
+} else {
+ foreach my $version (@versions) {
+ my $src_json
+ = fetch_json_page("$baseurl$version->{version}/srcfiles?fileinfo=1");
+ unless ($src_json) {
+ warn
+"$progname: No source files found for $package version $version->{version}\n";
+ $warnings++;
+ next;
+ }
+
+ # Get the dsc file and parse it to get the list of files to be
+ # restored (this should fix most issues with multi-tarball
+ # source packages):
+ my $dsc_name;
+ my $dsc_hash;
+ foreach my $hash (keys %{ $src_json->{fileinfo} }) {
+ my $fileinfo = $src_json->{fileinfo}{$hash};
+ foreach my $info (@$fileinfo) {
+ if ($info->{name} =~ m/^\Q${package}\E_.*\.dsc/) {
+ $dsc_name = $info->{name};
+ $dsc_hash = $hash;
+ last;
+ }
+ }
+ last if $dsc_name;
+ }
+ unless ($dsc_name) {
+ warn
+"$progname: No dsc file detected for $package version $version->{version}\n";
+ $warnings++;
+ next;
+ }
+
+ # Retrieve the dsc file:
+ my $file_url = "$opt{baseurl}/file/$dsc_hash";
+ if (!have_file("$opt{destdir}/$dsc_name", $dsc_hash)) {
+ verbose "Getting dsc file $dsc_name: $file_url";
+ $mkDestDir->();
+ LWP::Simple::mirror($file_url, "$opt{destdir}/$dsc_name");
+ }
+
+ # Get the list of files from the dsc:
+ my @files;
+ open my $fh, '<', "$opt{destdir}/$dsc_name"
+ or die "unable to open the dsc file $opt{destdir}/$dsc_name";
+ while (<$fh> !~ /^Files:/) { }
+ while (<$fh> =~ /^ (\S+) (\d+) (\S+)$/) {
+ my ($checksum, $size, $file) = ($1, $2, $3);
+ push @files, $file;
+ }
+ close $fh
+ or die "unable to close the dsc file";
+
+ # Iterate over files and find the right contents:
+ foreach my $file_name (@files) {
+ my $file_hash;
+ foreach my $hash (keys %{ $src_json->{fileinfo} }) {
+ my $fileinfo = $src_json->{fileinfo}{$hash};
+
+ foreach my $info (@{$fileinfo}) {
+ if ($info->{name} eq $file_name) {
+ $file_hash = $hash;
+ last;
+ }
+ }
+ last if $file_hash;
+ }
+ unless ($file_hash) {
+ # Warning: this next statement will only move to the
+ # next files, not the next package
+ print
+"$progname: No hash found for file $file_name needed by $package version $version->{version}\n";
+ $warnings++;
+ next;
+ }
+
+ my $file_url = "$opt{baseurl}/file/$file_hash";
+ $file_name = basename($file_name);
+ if (!have_file("$opt{destdir}/$file_name", $file_hash)) {
+ verbose "Getting file $file_name: $file_url";
+ $mkDestDir->();
+ LWP::Simple::mirror($file_url, "$opt{destdir}/$file_name");
+ }
+ }
+ }
+}
+
+if ($warnings) {
+ exit 2;
+}
+exit 0;
diff --git a/scripts/debuild.1 b/scripts/debuild.1
new file mode 100644
index 0000000..2232c73
--- /dev/null
+++ b/scripts/debuild.1
@@ -0,0 +1,462 @@
+.TH DEBUILD 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debuild \- build a Debian package
+.SH SYNOPSIS
+\fBdebuild\fR [\fIdebuild options\fR] [\fIdpkg-buildpackage options\fR]
+[\fB\-\-lintian-opts\fR \fIlintian options\fR]
+.br
+\fBdebuild\fR [\fIdebuild options\fR] \-\-
+\fBbinary\fR|\fBbinary-arch\fR|\fBbinary-indep\fR|\fBclean\fR ...
+.SH DESCRIPTION
+\fBdebuild\fR creates all the files necessary for uploading a Debian
+package. It first runs \fBdpkg-buildpackage\fR, then runs
+\fBlintian\fR on the \fI.changes\fR file created
+(assuming that \fBlintian\fR is installed), and
+finally signs the appropriate files (using \fBdebsign\fR(1) to do
+this instead of \fBdpkg-buildpackage\fR(1) itself; all relevant
+key-signing options are passed on).
+Signing will be skipped if the distribution is \fIUNRELEASED\fR, unless
+\fBdpkg-buildpackage\fR's \fB\-\-force-sign\fR option is used.
+Parameters can be passed to \fBdpkg-buildpackage\fR
+and \fBlintian\fR, where the parameters to the latter are
+indicated with the \fB\-\-lintian-opts\fR option.
+The allowable options in this case are
+\fB\-\-lintian\fR and \fB\-\-no-lintian\fR to force or skip the
+\fBlintian\fR step, respectively. The default is to run
+\fBlintian\fR. There are also various options
+available for setting and preserving environment variables, as
+described below in the Environment Variables section. In this method
+of running \fBdebuild\fR, we also save a build log to the
+file \fI../<package>_<version>_<arch>.build\fR.
+.PP
+An alternative way of using \fBdebuild\fR is to use one or more of the
+parameters \fBbinary\fR, \fBbinary-arch\fR, \fBbinary-indep\fR and
+\fBclean\fR, in which case \fBdebuild\fR will attempt to gain root
+privileges and then run \fIdebian/rules\fR with the given parameters.
+A \fB\-\-rootcmd=\fIgain-root-command\fR or
+\fB\-r\fIgain-root-command\fR option may be used to specify a method
+of gaining root privileges. The \fIgain-root-command\fR is likely to
+be one of \fIfakeroot\fR, \fIsudo\fR or \fIsuper\fR. See below for
+further discussion of this point. Again, the environment preservation
+options may be used. In this case, \fBdebuild\fR will also attempt to
+run \fBdpkg-checkbuilddeps\fR first; this can be explicitly requested
+or switched off using the options \fB\-D\fR and \fB\-d\fR
+respectively. Note also that if either of these or a \fB\-r\fR option
+is specified in the configuration file option
+\fBDEBUILD_DPKG_BUILDPACKAGE_OPTS\fR, then it will be recognised even in
+this method of invocation of \fBdebuild\fR.
+.PP
+\fBdebuild\fR also reads the \fBdevscripts\fR configuration files as
+described below. This allows default options to be given.
+.SH "Directory name checking"
+In common with several other scripts in the \fBdevscripts\fR package,
+\fBdebuild\fR will climb the directory tree until it finds a
+\fIdebian/changelog\fR file before attempting to build the package.
+As a safeguard against stray files causing potential problems, it will
+examine the name of the parent directory once it finds the
+\fIdebian/changelog\fR file, and check that the directory name
+corresponds to the package name. Precisely how it does this is
+controlled by two configuration file variables
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR and \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+\fBDEVSCRIPTS_CHECK_DIRNAME_LEVEL\fR can take the following values:
+.TP
+.B 0
+Never check the directory name.
+.TP
+.B 1
+Only check the directory name if we have had to change directory in
+our search for \fIdebian/changelog\fR. This is the default behaviour.
+.TP
+.B 2
+Always check the directory name.
+.PP
+The directory name is checked by testing whether the current directory
+name (as determined by \fBpwd\fR(1)) matches the regex given by the
+configuration file option \fBDEVSCRIPTS_CHECK_DIRNAME_REGEX\fR or by the
+command line option \fB\-\-check-dirname-regex\fR \fIregex\fR. Here
+\fIregex\fR is a Perl regex (see \fBperlre\fR(3perl)), which will be
+anchored at the beginning and the end. If \fIregex\fR contains a '/',
+then it must match the full directory path. If not, then it must
+match the full directory name. If \fIregex\fR contains the string
+\'PACKAGE', this will be replaced by the source package name, as
+determined from the \fIchangelog\fR. The default value for the regex is:
+\'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and
+PACKAGE-version.
+.SH ENVIRONMENT VARIABLES
+As environment variables can affect the building of a package, often
+unintentionally, \fBdebuild\fR sanitises the environment by removing
+all environment variables except for \fBTERM\fR, \fBHOME\fR, \fBLOGNAME\fR,
+\fBGNUPGHOME\fR, \fBPGPPATH\fR, \fBGPG_AGENT_INFO\fR, \fBGPG_TTY\fR,
+\fBDBUS_SESSION_BUS_ADDRESS\fR, \fBFAKEROOTKEY\fR, \fBDEBEMAIL\fR,
+\fBDEB_\fI*\fR, the (\fBC\fR, \fBCPP\fR, \fBCXX\fR, \fBLD\fR and
+\fBF\fR)\fBFLAGS\fR variables and their \fB_APPEND\fR counterparts and the
+locale variables \fBLANG\fR and \fBLC_\fI*\fR. \fBTERM\fR is set to `dumb'
+if it is unset, and \fBPATH\fR is set to "/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11".
+.PP
+If a particular environment variable is required to be passed through
+untouched to the build process, this may be specified by using a
+\fB\-\-preserve-envvar\fR \fIenvvar\fR (which can also be written as
+\fB\-e\fR \fIenvvar\fR option). The environment may be left untouched
+by using the \fB\-\-preserve-env\fR option. However, even in this
+case, the \fBPATH\fR will be set to the sane value described above. The
+\fBonly\fR way to prevent \fBPATH\fR from being reset is to specify a
+\fB\-\-preserve-envvar PATH\fR option. But you are warned that using
+programs from non-standard locations can easily result in the package
+being broken, as it will not be able to be built on standard systems.
+.PP
+Note that one may add directories to the beginning of the sanitised
+\fBPATH\fR, using the \fB\-\-prepend\-path\fR option. This is useful when
+one wishes to use tools such as \fBccache\fR or \fBdistcc\fR for building.
+.PP
+It is also possible to avoid having to type something like
+\fIFOO\fB=\fIbar \fBdebuild \-e \fIFOO\fR by writing \fBdebuild \-e
+\fIFOO\fB=\fIbar\fR or the long form \fBdebuild \-\-set\-envvar
+\fIFOO\fB=\fIbar\fR.
+.SH "SUPERUSER REQUIREMENTS"
+\fBdebuild\fR needs to be run as superuser to function properly.
+There are three fundamentally different ways to do this. The first,
+and preferable, method is to use some root-gaining command. The best
+one to use is probably \fBfakeroot\fR(1), since it does not involve
+granting any genuine privileges. \fBsuper\fR(1) and \fBsudo\fR(1) are
+also possibilities. If no \fB\-r\fR (or \fB\-\-rootcmd\fR) option is
+given (and recall that \fBdpkg-buildpackage\fR also accepts a \fB\-r\fR
+option) and neither of the following methods is used, then
+\fB\-rfakeroot\fR will silently be assumed.
+.PP
+The second method is to use some command such as \fBsu\fR(1) to become
+root, and then to do everything as root. Note, though, that
+\fBlintian\fR will abort if it is run as root or setuid root; this can
+be overcome using the \fB\-\-allow-root\fR option of \fBlintian\fR if
+you know what you are doing.
+.PP
+The third possible method is to have \fBdebuild\fR installed as setuid
+root. This is not the default method, and will have to be installed
+as such by the system administrator. It must also be realised that
+anyone who can run \fBdebuild\fR as root or setuid root has \fBfull
+access to the whole machine\fR. This method is therefore not
+recommended, but will work. \fBdebuild\fR could be installed with
+mode 4754, so that only members of the owning group could run it. A
+disadvantage of this method would be that other users would then not
+be able to use the program. There are many other variants of this
+option involving multiple copies of \fBdebuild\fR, or the use of
+programs such as \fBsudo\fR or \fBsuper\fR to grant root privileges to
+users selectively. If the sysadmin wishes to do this, she should use
+the \fBdpkg-statoverride\fR program to change the permissions of
+\fI/usr/bin/debuild\fR. This will ensure that these permissions are
+preserved across upgrades.
+.SH HOOKS
+\fBdebuild\fR supports a number of hooks when running
+\fBdpkg\-buildpackage\fR. Note that the hooks \fBdpkg-buildpackage\fR
+to \fBlintian\fR (inclusive) are passed through to \fBdpkg-buildpackage\fR
+using its corresponding \fB\-\-hook-\fR\fIname\fR option. The available
+hooks are as follows:
+.TP
+\fBdpkg-buildpackage-hook
+Run before \fBdpkg-buildpackage\fR begins by calling \fBdpkg-checkbuilddeps\fR.
+.IP
+Hook is run inside the unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBinit\fR hook.
+.TP
+\fBclean-hook
+Run before \fBdpkg-buildpackage\fR runs \fBdebian/rules clean\fR to clean the
+source tree. (Run even if the tree is not being cleaned because \fB\-nc\fR
+is used.)
+.IP
+Hook is run inside the unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBpreclean\fR hook.
+.TP
+\fBdpkg-source-hook
+Run after cleaning the tree and before running \fBdpkg-source\fR. (Run even
+if \fBdpkg-source\fR is not being called because \fB\-b\fR, \fB\-B\fR, or \fB\-A\fR is used.)
+.IP
+Hook is run inside the unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBsource\fR hook.
+.TP
+\fBdpkg-build-hook\fR
+Run after \fBdpkg-source\fR and before calling \fBdebian/rules build\fR. (Run
+even if this is a source-only build, so \fBdebian/rules build\fR is not
+being called.)
+.IP
+Hook is run inside the unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBbuild\fR hook.
+.TP
+\fBdpkg-binary-hook
+Run between \fBdebian/rules build\fR and \fBdebian/rules binary\fR(\fB\-arch\fR). Run
+\fBonly\fR if a binary package is being built.
+.IP
+Hook is run inside the unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBbinary\fR hook.
+.TP
+\fBdpkg-genchanges-hook
+Run after the binary package is built and before calling
+\fBdpkg-genchanges\fR.
+.IP
+Hook is run inside the unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBchanges\fR hook.
+.TP
+\fBfinal-clean-hook
+Run after \fBdpkg-genchanges\fR and before the final \fBdebian/rules clean\fR.
+(Run even if we are not cleaning the tree post-build, which is the
+default.)
+.IP
+Hook is run inside the unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBpostclean\fR hook.
+.TP
+\fBlintian-hook
+Run (once) before calling \fBlintian\fR. (Run even if we are
+not calling \fBlintian\fR.)
+.IP
+Hook is run from parent directory of unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBcheck\fR hook.
+.TP
+\fBsigning-hook
+Run after calling \fBlintian\fR before any signing takes place.
+(Run even if we are not signing anything.)
+.IP
+Hook is run from parent directory of unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBsign\fR hook, but is run by \fBdebuild\fR.
+.TP
+\fBpost-dpkg-buildpackage-hook
+Run after everything has finished.
+.IP
+Hook is run from parent directory of unpacked source.
+.IP
+Corresponds to \fBdpkg\fR's \fBdone\fR hook, but is run by \fBdebuild\fR.
+.PP
+A hook command can be specified either in the configuration file as,
+for example, DEBUILD_SIGNING_HOOK='foo' (note the hyphens change into
+underscores!) or as a command line option \fB\-\-signing\-hook-foo\fR.
+The command will have certain percent substitutions made on it: \fB%%\fR
+will be replaced by a single \fB%\fR sign, \fB%p\fR will be replaced by the
+package name, \fB%v\fR by the package version number, \fB%s\fR by the source
+version number, \fB%u\fR by the upstream version number. Neither \fB%s\fR nor \fB%u\fR
+will contain an epoch. \fB%a\fR will be \fB1\fR if the immediately following
+action is to be performed and \fB0\fR if not (for example, in the
+\fBdpkg-source\fR hook, \fB%a\fR will become \fB1\fR if \fBdpkg-source\fR is to be run and \fB0\fR
+if not). Then it will be handed to the shell to deal with, so it can
+include redirections and stuff. For example, to only run the
+\fBdpkg-source\fR hook if \fBdpkg-source\fR is to be run, the hook could be
+something like: "if [ %a \-eq 1 ]; then ...; fi".
+.PP
+\fBPlease take care with hooks\fR, as misuse of them can lead to
+packages which FTBFS (fail to build from source). They can be useful
+for taking snapshots of things or the like.
+.SH "OPTIONS"
+For details, see above.
+.TP
+.B \-\-no-conf\fR, \fB\-\-noconf
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+.BI \-\-rootcmd= "gain-root-command\fR, " \-r gain-root-command
+Command to gain root (or fake root) privileges.
+.TP
+.B \-\-preserve\-env
+Do not clean the environment, except for PATH.
+.TP
+.BI \-\-preserve\-envvar= "var\fR, " \-e var
+Do not clean the \fIvar\fR variable from the environment.
+.IP
+If \fIvar\fR ends in an asterisk ("*") then all variables with names
+that match the portion of \fIvar\fR before the asterisk will be
+preserved.
+.TP
+.BI \-\-set\-envvar= var = "value\fR, " \-e var = value
+Set the environment variable \fIvar\fR to \fIvalue\fR and do not
+remove it from the environment.
+.TP
+.BI \-\-prepend\-path= "value "
+Once the normalized PATH has been set, prepend \fIvalue\fR
+to it.
+.TP
+.B \-\-lintian
+Run \fBlintian\fR after \fBdpkg-buildpackage\fR. This is the default
+behaviour, and it overrides any configuration file directive to the
+contrary.
+.TP
+.B \-\-no\-lintian
+Do not run \fBlintian\fR after \fBdpkg-buildpackage\fR.
+.TP
+.B \-\-no\-tgz\-check
+Even if we're running \fBdpkg-buildpackage\fR and the version number
+has a Debian revision, do not check that the \fI.orig.tar.gz\fR file or \fI.orig\fR
+directory exists before starting the build.
+.TP
+.B \-\-tgz\-check
+If we're running \fBdpkg-buildpackage\fR and the version number has a
+Debian revision, check that the \fI.orig.tar.gz\fR file or \fI.orig\fR directory
+exists before starting the build. This is the default behaviour.
+.TP
+\fB\-\-username\fR \fIusername\fR
+When signing, use \fBdebrsign\fR instead of \fBdebsign\fR.
+\fIusername\fR specifies the credentials to be used.
+.TP
+\fB\-\-\fIfoo\fB\-hook\fR=\fIhook\fR
+Set a hook as described above. If \fIhook\fR is blank, this unsets
+the hook.
+.TP
+\fB\-\-clear\-hooks\fR
+Clears all hooks. They may be reinstated by later command line
+options.
+.TP
+\fB\-\-check-dirname-level\fR \fIN\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section \fBDirectory name checking\fR for an explanation of
+this option.
+.TP
+\fB\-d\fR
+Do not run \fBdpkg-checkbuilddeps\fR to check build dependencies.
+.TP
+\fB\-D\fR
+Run \fBdpkg-checkbuilddeps\fR to check build dependencies.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced by a shell in that order to set
+configuration variables. Command line options can be used to override
+some of these configuration file settings, otherwise the
+\fB\-\-no\-conf\fR option can be used to prevent reading these files.
+Environment variable settings are ignored when these configuration
+files are read. The currently recognised variables are:
+.TP
+.B DEBUILD_PRESERVE_ENV
+If this is set to \fIyes\fR, then it is the same as the
+\fB\-\-preserve\-env\fR command line parameter being used.
+.TP
+.B DEBUILD_PRESERVE_ENVVARS
+Which environment variables to preserve. This should be a
+comma-separated list of variables. This corresponds to using possibly
+multiple \fB\-\-preserve\-envvar\fR or \fB\-e\fR options.
+.TP
+.BI DEBUILD_SET_ENVVAR_ var = value
+This corresponds to \fB\-\-set\-envvar=\fIvar\fB=\fIvalue\fR.
+.TP
+.B DEBUILD_PREPEND_PATH
+This corresponds to \fB\-\-prepend\-path\fR.
+.TP
+.B DEBUILD_ROOTCMD
+Setting this variable to \fIprog\fR is the equivalent of
+\fB\-r\fIprog\fR.
+.TP
+.B DEBUILD_TGZ_CHECK
+Setting this variable to \fIno\fR is the same as the
+\fB\-\-no\-tgz\-check\fR command line option.
+.TP
+.B DEBUILD_SIGNING_USERNAME
+Setting this variable is the same as using the \fB\-\-username\fR
+command line option.
+.TP
+.B DEBUILD_DPKG_BUILDPACKAGE_OPTS
+These are options which should be passed to the invocation of
+\fBdpkg-buildpackage\fR. They are given before any command-line
+options. Due to issues of shell quoting, if a word containing spaces
+is required as a single option, extra quotes will be required. For
+example, to ensure that your own GPG key is always used, even for
+sponsored uploads, the configuration file might contain the line:
+.IP
+.nf
+DEBUILD_DPKG_BUILDPACKAGE_OPTS="\-k'Julian Gilbey <jdg@debian.org>' \-sa"
+.fi
+.IP
+which gives precisely two options. Without the extra single quotes,
+\fBdpkg-buildpackage\fR would reasonably complain that \fIGilbey\fR is
+an unrecognised option (it doesn't start with a \fB\-\fR sign).
+.IP
+Also, if this option contains any \fB\-r\fR, \fB\-d\fR or \fB\-D\fR
+options, these will always be taken account of by \fBdebuild\fR. Note
+that a \fB\-r\fR option in this variable will override the setting in
+.BR DEBUILD_ROOTCMD .
+.TP
+\fBDEBUILD_\fIFOO\fB_HOOK
+The hook variable for the \fIfoo\fR hook. See the section on hooks
+above for more details. By default, this is empty.
+.TP
+.B DEBUILD_LINTIAN
+Should we run \fBlintian\fR? If this is set to \fIno\fR, then
+\fBlintian\fR will not be run.
+.TP
+.B DEBUILD_LINTIAN_OPTS
+These are options which should be passed to the invocation of
+\fBlintian\fR. They are given before any command-line options, and
+the usage of this variable is as described for the
+\fBDEBUILD_DPKG_BUILDPACKAGE_OPTS\fR variable.
+.TP
+.BR DEVSCRIPTS_CHECK_DIRNAME_LEVEL ", " DEVSCRIPTS_CHECK_DIRNAME_REGEX
+See the above section \fBDirectory name checking\fR for an explanation of
+these variables. Note that these are package-wide configuration
+variables, and will therefore affect all \fBdevscripts\fR scripts
+which check their value, as described in their respective manpages and
+in \fBdevscripts.conf\fR(5).
+.SH EXAMPLES
+To build your own package, simply run \fBdebuild\fR from inside the
+source tree. \fBdpkg-buildpackage\fR(1) options may be given on the
+command line.
+.PP
+The typical command line options to build only the binary package(s)
+without signing the .changes file (or the non-existent .dsc file):
+.IP
+.nf
+debuild \-i \-us \-uc \-b
+.fi
+.PP
+Change the \fB\-b\fR to \fB\-S\fR to build only a source package.
+.PP
+An example using \fBlintian\fR to check the
+resulting packages and passing options to it:
+.IP
+.nf
+debuild \-\-lintian-opts \-i
+.fi
+.PP
+Note the order of options here: the \fBdebuild\fR options come first,
+then the \fBdpkg-buildpackage\fR ones, then finally the checker
+options. (And \fBlintian\fR is called by default.) If you find
+yourself using the same \fBdpkg-buildpackage\fR options repeatedly,
+consider using the \fBDEBUILD_DPKG_BUILDPACKAGE_OPTS\fR configuration file
+option as described above.
+.PP
+To build a package for a sponsored upload, given
+\fIfoobar_1.0-1.dsc\fR and the respective source files, run something
+like the following commands:
+.IP
+.nf
+dpkg-source \-x foobar_1.0-1.dsc
+cd foobar-1.0
+debuild \-k0x12345678
+.fi
+.PP
+where 0x12345678 is replaced by your GPG key ID or other key
+identifier such as your email address. Again, you could also use the
+\fBDEBUILD_DPKG_BUILDPACKAGE_OPTS\fR configuration file option as described
+above to avoid having to type the \fB\-k\fR option each time you do a
+sponsored upload.
+.SH "SEE ALSO"
+.BR chmod (1),
+.BR debsign (1),
+.BR dpkg-buildpackage (1),
+.BR dpkg-checkbuilddeps (1),
+.BR fakeroot (1),
+.BR lintian (1),
+.BR su (1),
+.BR sudo (1),
+.BR super (1),
+.BR devscripts.conf (5),
+.BR dpkg-statoverride (8)
+.SH AUTHOR
+The original \fBdebuild\fR program was written by Christoph Lameter
+<clameter@debian.org>. The current version has been written by Julian
+Gilbey <jdg@debian.org>.
diff --git a/scripts/debuild.bash_completion b/scripts/debuild.bash_completion
new file mode 100644
index 0000000..22787bc
--- /dev/null
+++ b/scripts/debuild.bash_completion
@@ -0,0 +1,103 @@
+# /usr/share/bash-completion/completions/debuild
+# Bash command completion for ‘debuild(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+# Copyright © 2015, Nicholas Bamber <nicholas@periapt.co.uk>
+
+_debuild()
+{
+ local cur prev words cword i _options special _prefix
+ _init_completion || return
+
+ for (( i=${#words[@]}-1; i > 0; i-- )); do
+ if [[ ${words[i]} == @(binary|binary-arch|binary-indep|clean|--lintian-opts) ]]; then
+ special=${words[i]}
+ break
+ fi
+ done
+
+ if [[ -n $special ]]; then
+
+ case $special in
+ --lintian-opts)
+ case $prev in
+ --include-dir)
+ COMPREPLY=( $( compgen -o filenames -d -- "$cur" ) )
+ return 0
+ ;;
+ --tags-from-file|--cfg|--suppress-tags-from-file)
+ COMPREPLY=( $( compgen -o filenames -f -- "$cur" ) )
+ return 0
+ ;;
+ --color)
+ COMPREPLY=( $( compgen -W 'never always auto html' -- "$cur" ) )
+ return 0
+ ;;
+ --display-source)
+ COMPREPLY=( $( compgen -W 'policy devref' -- "$cur" ) )
+ return 0
+ ;;
+ esac
+ COMPREPLY=( $( compgen -W '-C --ftp-master-rejects --tags --tags-from-file --color --default-display-level --display-source --display-experimental --no-display-experimental --fail-on-warnings --info --display-info --no-override --pedantic --show-overrides --suppress-tags --suppress-tags-from-file --cfg --no-cfg --ignore-lintian-env --include-dir' -- "$cur" ) )
+ return 0
+ ;;
+ *)
+ COMPREPLY=( $( compgen -W 'binary binary-arch binary-indep clean' -- "$cur" ) )
+ return 0
+ ;;
+ esac
+ fi
+
+ case $prev in
+ --rootcmd)
+ _options=
+ for i in fakeroot super sudo
+ do
+ which $i > /dev/null && _options+=" ${i}"
+ done
+ COMPREPLY=( $( compgen -W "${_options}" -- "$cur" ) )
+ return 0
+ ;;
+ --preserve-envvar)
+ COMPREPLY=( $( compgen -o nospace -e -- "$cur" ) )
+ return 0
+ ;;
+ --set-envvar)
+ COMPREPLY=( $( compgen -o nospace -e -S'=' -- "$cur" ) )
+ return 0
+ ;;
+ --prepend-path|--admindir)
+ COMPREPLY=( $( compgen -o filenames -d -- "$cur" ))
+ return 0
+ ;;
+ --check-dirname-level)
+ COMPREPLY=( $( compgen -W '0 1 2' -- "$cur" ) )
+ return 0
+ ;;
+ -j)
+ COMPREPLY=( $( compgen -W 'auto 1 2 3 4 5 6' -- "$cur" ) )
+ return 0
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ _options='--preserve-envvar --set-envvar --rootcmd --preserve-env --prepend-path --lintian --no-lintian --no-tgz-check --tgz-check --username --clear-hooks --check-dirname-level --check-dirname-regex -d -D --dpkg-buildpackage-hook --clean-hook --dpkg-source-hook --dpkg-build-hook --dpkg-binary-hook --dpkg-genchanges-hook --final-clean-hook --lintian-hook signing-hook post-dpkg-buildpackage-hook --lintian-opts -g -G -b -B -A -S -F -si -sa -sd -v -C -m -e -a --host-type --target-arch --target-type -P -j -D -d -nc -tc --admindir --changes-options --source-options -z -Z -i -I -sn -ss -sA -sk -su -sr -sK -sU -sR --force-sign -us -uc -k -p --check-option --check-command -R -r'
+ if [[ "$prev" == debuild ]]; then
+ _options+=' --no-conf'
+ fi
+ COMPREPLY=( $( compgen -W "${_options}" -- "$cur" ) )
+ else
+ COMPREPLY=( $( compgen -W 'binary binary-arch binary-indep clean' -- "$cur" ) )
+ fi
+
+ return 0
+} &&
+complete -F _debuild debuild
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/debuild.pl b/scripts/debuild.pl
new file mode 100755
index 0000000..7396dc1
--- /dev/null
+++ b/scripts/debuild.pl
@@ -0,0 +1,1227 @@
+#!/usr/bin/perl
+
+# Perl version of Christoph Lameter's build program, renamed debuild.
+# Written by Julian Gilbey, December 1998.
+
+# Copyright 1999-2003, Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# We will do simple option processing. The calling syntax of this
+# program is:
+#
+# debuild [<debuild options>] -- binary|binary-arch|binary-indep|clean ...
+# or
+# debuild [<debuild options>] [<dpkg-buildpackage options>]
+# [--lintian-opts <lintian options>]
+#
+# In the first case, debuild will simply run debian/rules with the
+# given parameter. Available options are listed in usage() below.
+#
+# In the second case, the behaviour is to run dpkg-buildpackage and
+# then to run lintian on the resulting .changes file.
+# Lintian options may be specified after --lintian-opts; all following
+# options will be passed only to lintian.
+#
+# As this may be running setuid, we make sure to clean out the
+# environment before we perform the build, subject to any -e etc.
+# options. Also wise for building the packages, anyway.
+# We don't put /usr/local/bin in the PATH as Debian
+# programs will presumably be built without the use of any locally
+# installed programs. This could be changed, but in which case,
+# please add /usr/local/bin at the END so that you don't get any
+# unexpected behaviour.
+
+# We will try to preserve the locale variables, but if it turns out that
+# this harms the package building process, we will clean them out too.
+# Please file a bug report if this is the case!
+
+use strict;
+use warnings;
+use 5.008;
+use File::Basename;
+use filetest 'access';
+use Cwd;
+use Dpkg::Changelog::Parse qw(changelog_parse);
+use Dpkg::IPC;
+use IO::Handle; # for flushing
+use vars qw(*BUILD *OLDOUT *OLDERR); # prevent a warning
+
+my $progname = basename($0);
+my $modified_conf_msg;
+my @warnings;
+
+# Predeclare functions
+sub setDebuildHook;
+sub setDpkgHook;
+sub system_withecho(@);
+sub run_hook ($$);
+sub fatal($);
+
+sub usage {
+ print <<"EOF";
+First usage method:
+ $progname [<debuild options>] -- binary|binary-arch|binary-indep|clean ...
+ to run debian/rules with given parameter(s). Options here are
+ --no-conf, --noconf Don\'t read devscripts config files;
+ must be the first option given
+ --rootcmd=<gain-root-command>, -r<gain-root-command>
+ Command used to become root if $progname
+ not setuid root; default=fakeroot
+
+ --preserve-envvar=<envvar>, -e<envvar>
+ Preserve environment variable <envvar>
+
+ --preserve-env Preserve all environment vars (except PATH)
+
+ --set-envvar=<envvar>=<value>, -e<envvar>=<value>
+ Set environment variable <envvar> to <value>
+
+ --prepend-path=<value> Prepend <value> to the sanitised PATH
+
+ -d Skip checking of build dependencies
+ -D Force checking of build dependencies (default)
+
+ --check-dirname-level N
+ How much to check directory names:
+ N=0 never
+ N=1 only if program changes directory (default)
+ N=2 always
+
+ --check-dirname-regex REGEX
+ What constitutes a matching directory name; REGEX is
+ a Perl regular expression; the string \`PACKAGE\' will
+ be replaced by the package name; see manpage for details
+ (default: 'PACKAGE(-.+)?')
+
+ --help, -h display this message
+
+ --version show version and copyright information
+
+Second usage method:
+ $progname [<debuild options>] [<dpkg-buildpackage options>]
+ [--lintian-opts <lintian options>]
+ to run dpkg-buildpackage and then run lintian on the resulting
+ .changes file.
+
+ Additional debuild options available in this case are:
+
+ --lintian Run lintian (default)
+ --no-lintian Do not run lintian
+ --[no-]tgz-check Do [not] check for an .orig.tar.gz before running
+ dpkg-buildpackage if we have a Debian revision
+ (Default: check)
+ --username Run debrsign instead of debsign, using the
+ supplied credentials
+
+ --dpkg-buildpackage-hook=HOOK
+ --clean-hook=HOOK
+ --dpkg-source-hook=HOOK
+ --build-hook=HOOK
+ --binary-hook=HOOK
+ --dpkg-genchanges-hook=HOOK
+ --final-clean-hook=HOOK
+ --lintian-hook=HOOK
+ --signing-hook=HOOK
+ --post-dpkg-buildpackage-hook=HOOK
+ These hooks run at the various stages of the
+ dpkg-buildpackage run. For details, see the
+ debuild manpage. They default to nothing, and
+ can be reset to nothing with --foo-hook=''
+ --clear-hooks Clear all hooks
+
+ For available dpkg-buildpackage and lintian options, see their
+ respective manpages.
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOF
+}
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1999-2003 by Julian Gilbey <jdg\@debian.org>,
+all rights reserved.
+Based on a shell-script program by Christoph Lameter.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+# Start by reading configuration files and then command line
+# The next stuff is somewhat boilerplate and somewhat not.
+# It's complicated by the fact that the config files are in shell syntax,
+# and we don't want to have to write a general shell parser in Perl.
+# So we'll get the shell to do the work. Yuck.
+# We allow DEBUILD_PRESERVE_ENVVARS="VAR1,VAR2,VAR3"
+# and DEBUILD_SET_ENVVAR_VAR1=VAL1, DEBUILD_SET_ENVVAR_VAR2=VAR2.
+
+# Set default values before we start
+my $preserve_env = 0;
+my %save_vars;
+my $root_command = '';
+my $run_lintian = 1;
+my $lintian_exists = 0;
+my @dpkg_extra_opts = ();
+my @lintian_extra_opts = ();
+my @lintian_opts = ();
+my $checkbuilddep;
+my $check_dirname_level = 1;
+my $check_dirname_regex = 'PACKAGE(-.+)?';
+my $logging = 0;
+my $tgz_check = 1;
+my $prepend_path = '';
+my $username = '';
+my @hooks = (
+ qw(dpkg-buildpackage clean dpkg-source build binary dpkg-genchanges
+ final-clean lintian signing post-dpkg-buildpackage)
+);
+my %hook;
+@hook{@hooks} = ('') x @hooks;
+# dpkg-buildpackage runs all hooks in the source tree, while debuild runs some
+# in the parent directory. Use %externalHook to check which run out of tree
+my %externalHook;
+@externalHook{@hooks} = (0) x @hooks;
+$externalHook{lintian} = 1;
+$externalHook{signing} = 1;
+$externalHook{'post-dpkg-buildpackage'} = 1;
+# Track which hooks are run by dpkg-buildpackage vs. debuild
+my %dpkgHook;
+@dpkgHook{@hooks} = (1) x @hooks;
+$dpkgHook{lintian} = 0;
+$dpkgHook{signing} = 0;
+$dpkgHook{'post-dpkg-buildpackage'} = 0;
+
+# First handle private options from cvs-debuild
+my ($cvsdeb_file, $cvslin_file);
+if (@ARGV and $ARGV[0] eq '--cvs-debuild') {
+ shift;
+ $check_dirname_level = 0; # no need to check dirnames if we're being
+ # called from cvs-debuild
+ if (@ARGV and $ARGV[0] eq '--cvs-debuild-deb') {
+ shift;
+ $cvsdeb_file = shift;
+ unless ($cvsdeb_file =~ m%^/dev/fd/\d+$%) {
+ fatal
+ "--cvs-debuild-deb is an internal option and should not be used";
+ }
+ }
+ if (@ARGV and $ARGV[0] eq '--cvs-debuild-lin') {
+ shift;
+ $cvslin_file = shift;
+ unless ($cvslin_file =~ m%^/dev/fd/\d+$%) {
+ fatal
+ "--cvs-debuild-lin is an internal option and should not be used";
+ }
+ }
+ if (defined $cvsdeb_file) {
+ local $/;
+ open DEBOPTS, $cvsdeb_file
+ or fatal "can't open cvs-debuild debuild options file: $!";
+ my $opts = <DEBOPTS>;
+ close DEBOPTS;
+
+ unshift @ARGV, split(/\0/, $opts, -1);
+ }
+ if (defined $cvslin_file) {
+ local $/;
+ open LINOPTS, $cvslin_file
+ or fatal "can't open cvs-debuild lin* options file: $!";
+ my $opts = <LINOPTS>;
+ close LINOPTS;
+
+ push @ARGV, split(/\0/, $opts, -1);
+ }
+}
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'DEBUILD_PRESERVE_ENV' => 'no',
+ 'DEBUILD_PRESERVE_ENVVARS' => '',
+ 'DEBUILD_LINTIAN' => 'yes',
+ 'DEBUILD_ROOTCMD' => $root_command,
+ 'DEBUILD_TGZ_CHECK' => 'yes',
+ 'DEBUILD_DPKG_BUILDPACKAGE_HOOK' => '',
+ 'DEBUILD_CLEAN_HOOK' => '',
+ 'DEBUILD_DPKG_SOURCE_HOOK' => '',
+ 'DEBUILD_BUILD_HOOK' => '',
+ 'DEBUILD_BINARY_HOOK' => '',
+ 'DEBUILD_DPKG_GENCHANGES_HOOK' => '',
+ 'DEBUILD_FINAL_CLEAN_HOOK' => '',
+ 'DEBUILD_LINTIAN_HOOK' => '',
+ 'DEBUILD_SIGNING_HOOK' => '',
+ 'DEBUILD_PREPEND_PATH' => '',
+ 'DEBUILD_POST_DPKG_BUILDPACKAGE_HOOK' => '',
+ 'DEBUILD_SIGNING_USERNAME' => '',
+ 'DEVSCRIPTS_CHECK_DIRNAME_LEVEL' => 1,
+ 'DEVSCRIPTS_CHECK_DIRNAME_REGEX' => 'PACKAGE(-.+)?',
+ );
+ my %config_default = %config_vars;
+ my $dpkg_opts_var = 'DEBUILD_DPKG_BUILDPACKAGE_OPTS';
+ my $lintian_opts_var = 'DEBUILD_LINTIAN_OPTS';
+
+ my $shell_cmd;
+ # Set defaults
+ $shell_cmd .= qq[unset `set | grep "^DEBUILD_" | cut -d= -f1`;\n];
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+ }
+ foreach my $var ($dpkg_opts_var, $lintian_opts_var) {
+ $shell_cmd .= "$var='';\n";
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ foreach my $var ($dpkg_opts_var, $lintian_opts_var) {
+ $shell_cmd .= "eval set -- \$$var;\n";
+ $shell_cmd .= "echo \">>> $var BEGIN <<<\";\n";
+ $shell_cmd
+ .= 'while [ $# -gt 0 ]; do printf "%s\n" "$1"; shift; done;' . "\n";
+ $shell_cmd .= "echo \">>> $var END <<<\";\n";
+ }
+ # Not totally efficient, but never mind
+ $shell_cmd
+ .= 'for var in `set | grep "^DEBUILD_SET_ENVVAR_" | cut -d= -f1`; do ';
+ $shell_cmd .= 'eval echo $var=\$$var; done;' . "\n";
+ # print STDERR "Running shell command:\n$shell_cmd";
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ # print STDERR "Shell output:\n${shell_out}End shell output\n";
+ my @othervars;
+ (@config_vars{ keys %config_vars }, @othervars) = split /\n/, $shell_out,
+ -1;
+
+ # Check validity
+ $config_vars{'DEBUILD_PRESERVE_ENV'} =~ /^(yes|no)$/
+ or $config_vars{'DEBUILD_PRESERVE_ENV'} = 'no';
+ $config_vars{'DEBUILD_LINTIAN'} =~ /^(yes|no)$/
+ or $config_vars{'DEBUILD_LINTIAN'} = 'yes';
+ $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'} =~ /^[012]$/
+ or $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'} = 1;
+ $config_vars{'DEBUILD_TGZ_CHECK'} =~ /^(yes|no)$/
+ or $config_vars{'DEBUILD_TGZ_CHECK'} = 'yes';
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+
+ # What did we find?
+ $preserve_env = $config_vars{'DEBUILD_PRESERVE_ENV'} eq 'yes' ? 1 : 0;
+ if ($config_vars{'DEBUILD_PRESERVE_ENVVARS'} ne '') {
+ my @preserve_vars = split /\s*,\s*/,
+ $config_vars{'DEBUILD_PRESERVE_ENVVARS'};
+ foreach my $index (0 .. $#preserve_vars) {
+ my $var = $preserve_vars[$index];
+ if ($var =~ /\*$/) {
+ $var =~ s/([^.])\*$/$1.\*/;
+ my @vars = grep /^$var$/, keys %ENV;
+ push @preserve_vars, @vars;
+ delete $preserve_vars[$index];
+ }
+ }
+ @preserve_vars = map { $_ if defined $_ } @preserve_vars;
+ @save_vars{@preserve_vars} = (1) x scalar @preserve_vars;
+ }
+ $run_lintian = $config_vars{'DEBUILD_LINTIAN'} eq 'no' ? 0 : 1;
+ $root_command = $config_vars{'DEBUILD_ROOTCMD'};
+ $tgz_check = $config_vars{'DEBUILD_TGZ_CHECK'} eq 'yes' ? 1 : 0;
+ $prepend_path = $config_vars{'DEBUILD_PREPEND_PATH'};
+ $username = $config_vars{'DEBUILD_SIGNING_USERNAME'};
+ $check_dirname_level = $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'};
+ $check_dirname_regex = $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_REGEX'};
+
+ for my $hookname (@hooks) {
+ my $config_name = uc "debuild_${hookname}_hook";
+ $config_name =~ tr/-/_/;
+ setDebuildHook($hookname, $config_vars{$config_name});
+ }
+
+ # Now parse the opts lists
+ if (shift @othervars ne ">>> $dpkg_opts_var BEGIN <<<") {
+ fatal "internal error: dpkg opts list missing proper header";
+ }
+ while (($_ = shift @othervars) ne ">>> $dpkg_opts_var END <<<"
+ and @othervars) {
+ push @dpkg_extra_opts, $_;
+ }
+ if (!@othervars) {
+ fatal "internal error: dpkg opts list missing proper trailer";
+ }
+ if (@dpkg_extra_opts) {
+ $modified_conf_msg
+ .= " $dpkg_opts_var='" . join(" ", @dpkg_extra_opts) . "'\n";
+ }
+
+ if (shift @othervars ne ">>> $lintian_opts_var BEGIN <<<") {
+ fatal "internal error: lintian opts list missing proper header";
+ }
+ while (($_ = shift @othervars) ne ">>> $lintian_opts_var END <<<"
+ and @othervars) {
+ push @lintian_extra_opts, $_;
+ }
+ if (!@othervars) {
+ fatal "internal error: lintian opts list missing proper trailer";
+ }
+ if (@lintian_extra_opts) {
+ $modified_conf_msg
+ .= " $lintian_opts_var='" . join(" ", @lintian_extra_opts) . "'\n";
+ }
+
+ # And what is left should be any ENV settings
+ foreach my $confvar (@othervars) {
+ $confvar =~ /^DEBUILD_SET_ENVVAR_([^=]*)=(.*)$/ or next;
+ $ENV{$1} = $2;
+ $save_vars{$1} = 1;
+ $modified_conf_msg .= " $1='$2'\n";
+ }
+
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+}
+
+# We first check @dpkg_extra_opts for options which may affect us;
+# these were set in a configuration file, so they have lower
+# precedence than command line settings. The options we care about
+# at this stage are: -r and those which affect the checkbuilddep setting
+
+foreach (@dpkg_extra_opts) {
+ /^-r(.*)$/ and $root_command = $1, next;
+ $_ eq '-d' and $checkbuilddep = 0, next;
+ $_ eq '-D' and $checkbuilddep = 1, next;
+}
+
+# Check @ARGV for debuild options.
+my @preserve_vars = qw(TERM HOME LOGNAME PGPPATH GNUPGHOME GPG_AGENT_INFO
+ DBUS_SESSION_BUS_ADDRESS GPG_TTY FAKEROOTKEY LANG DEBEMAIL);
+@save_vars{@preserve_vars} = (1) x scalar @preserve_vars;
+{
+ no locale;
+ while (my $arg = shift) {
+ my $savearg = $arg;
+ my $opt = '';
+
+ $arg =~ /^(-h|--help)$/ and usage(), exit 0;
+ $arg eq '--version' and version(), exit 0;
+
+ # Let's do the messy case first
+ if ($arg eq '--preserve-envvar') {
+ unless (defined($opt = shift)) {
+ fatal
+"--preserve-envvar requires an argument,\nrun $progname --help for usage information";
+ }
+ $savearg .= " $opt";
+ } elsif ($arg =~ /^--preserve-envvar=(.*)/) {
+ $arg = '--preserve-envvar';
+ $opt = $1;
+ } elsif ($arg eq '--set-envvar') {
+ unless (defined($opt = shift)) {
+ fatal
+"--set-envvar requires an argument,\nrun $progname --help for usage information";
+ }
+ $savearg .= " $opt";
+ } elsif ($arg =~ /^--set-envvar=(.*)/) {
+ $arg = '--set-envvar';
+ $opt = $1;
+ }
+ # dpkg-buildpackage now has a -e option, so we have to be
+ # careful not to confuse the two; their option will always have
+ # the form -e<maintainer email> or similar
+ elsif ($arg eq '-e') {
+ unless (defined($opt = shift)) {
+ fatal
+"-e requires an argument,\nrun $progname --help for usage information";
+ }
+ $savearg .= " $opt";
+ if ($opt =~ /^\w+\*?$/) { $arg = '--preserve-envvar'; }
+ else { $arg = '--set-envvar'; }
+ } elsif ($arg =~ /^-e(\w+\*?)$/) {
+ $arg = '--preserve-envvar';
+ $opt = $1;
+ } elsif ($arg =~ /^-e(\w+=.*)$/) {
+ $arg = '--set-envvar';
+ $opt = $1;
+ } elsif ($arg =~ /^-e/) {
+ # seems like a dpkg-buildpackage option, so stop parsing
+ unshift @ARGV, $arg;
+ last;
+ }
+
+ if ($arg eq '--preserve-envvar') {
+ if ($opt =~ /^\w+$/) {
+ $save_vars{$opt} = 1;
+ } elsif ($opt =~ /^\w+\*$/) {
+ $opt =~ s/([^.])\*$/$1.\*/;
+ my @vars = grep /^$opt$/, keys %ENV;
+ @save_vars{@vars} = (1) x scalar @vars;
+ } else {
+ push @warnings,
+ "Ignoring unrecognised/malformed option: $savearg";
+ }
+ next;
+ }
+ if ($arg eq '--set-envvar') {
+ if ($opt =~ /^(\w+)=(.*)$/) {
+ $ENV{$1} = $2;
+ $save_vars{$1} = 1;
+ } else {
+ push @warnings,
+ "Ignoring unrecognised/malformed option: $savearg";
+ }
+ next;
+ }
+
+ $arg eq '--preserve-env' and $preserve_env = 1, next;
+ if ($arg eq '-E') {
+ push @warnings,
+"-E is deprecated in debuild, as dpkg-buildpackage now uses it.\nPlease use --preserve-env instead in future.\n";
+ $preserve_env = 1;
+ next;
+ }
+ $arg eq '--no-lintian' and $run_lintian = 0, next;
+ $arg eq '--lintian' and $run_lintian = 1, next;
+ if ($arg eq '--rootcmd') {
+ unless (defined($root_command = shift)) {
+ fatal
+"--rootcmd requires an argument,\nrun $progname --help for usage information";
+ }
+ next;
+ }
+ $arg =~ /^--rootcmd=(.*)/ and $root_command = $1, next;
+ if ($arg eq '-r') {
+ unless (defined($opt = shift)) {
+ fatal
+"-r requires an argument,\nrun $progname --help for usage information";
+ }
+ $root_command = $opt;
+ next;
+ }
+ $arg eq '--tgz-check' and $tgz_check = 1, next;
+ $arg =~ /^--no-?tgz-check$/ and $tgz_check = 0, next;
+ $arg =~ /^-r(.*)/ and $root_command = $1, next;
+ if ($arg =~ /^--check-dirname-level=(.*)$/) {
+ $arg = '--check-dirname-level';
+ unshift @ARGV, $1;
+ } # fall through and let the next one handle it ;-)
+ if ($arg eq '--check-dirname-level') {
+ unless (defined($opt = shift)) {
+ fatal
+"--check-dirname-level requires an argument,\nrun $progname --help for usage information";
+ }
+ if ($opt =~ /^[012]$/) { $check_dirname_level = $opt; }
+ else {
+ fatal
+"unrecognised --check-dirname-level value (allowed are 0,1,2)";
+ }
+ next;
+ }
+ if ($arg eq '--check-dirname-regex') {
+ unless (defined($opt = shift)) {
+ fatal
+"--check-dirname-regex requires an argument,\nrun $progname --help for usage information";
+ }
+ $check_dirname_regex = $opt;
+ next;
+ }
+ if ($arg =~ /^--check-dirname-regex=(.*)$/) {
+ $check_dirname_regex = $1;
+ next;
+ }
+
+ if ($arg eq '--prepend-path') {
+ unless (defined($opt = shift)) {
+ fatal
+"--prepend-path requires an argument,\nrun $progname --help for usage information";
+ }
+ $prepend_path = $opt;
+ next;
+ }
+ if ($arg =~ /^--prepend-path=(.*)$/) {
+ $prepend_path = $1;
+ next;
+ }
+
+ if ($arg eq '--username') {
+ unless (defined($opt = shift)) {
+ fatal
+"--username requires an argument,\nrun $progname --help for usage information";
+ }
+ $username = $opt;
+ next;
+ }
+ if ($arg =~ /^--username=(.*)$/) {
+ $username = $1;
+ next;
+ }
+
+ if ($arg =~ /^--no-?conf$/) {
+ fatal "$arg is only acceptable as the first command-line option!";
+ }
+ $arg eq '-d' and $checkbuilddep = 0, next;
+ $arg eq '-D' and $checkbuilddep = 1, next;
+
+ # hooks...
+ if ($arg =~ /^--(.*)-hook$/) {
+ my $argkey = $1;
+ unless (exists $hook{$argkey}) {
+ fatal
+"unknown hook $arg,\nrun $progname --help for usage information";
+ }
+ unless (defined($opt = shift)) {
+ fatal
+"$arg requires an argument,\nrun $progname --help for usage information";
+ }
+
+ setDebuildHook($argkey, $opt);
+ next;
+ }
+
+ if ($arg =~ /^--(.*?)-hook=(.*)/) {
+ my $argkey = $1;
+ my $opt = $2;
+
+ unless (exists $hook{$argkey}) {
+ fatal
+"unknown hook option $arg,\nrun $progname --help for usage information";
+ }
+
+ setDebuildHook($argkey, $opt);
+ next;
+ }
+
+ if ($arg =~ /^--hook-(check|sign|done)=(.*)$/) {
+ my $name = $1;
+ my $opt = $2;
+ unless (defined($opt)) {
+ fatal
+"$arg requires an argmuent,\nrun $progname --help for usage information";
+ }
+ if ($name eq 'check') {
+ setDpkgHook('lintian', $opt);
+ } elsif ($name eq 'sign') {
+ setDpkgHook('signing', $opt);
+ } else {
+ setDpkgHook('post-dpkg-buildpackage', $opt);
+ }
+ next;
+ }
+
+ if ($arg eq '--clear-hooks') { $hook{@hooks} = ('') x @hooks; next; }
+
+ # Not a debuild option, so give up.
+ unshift @ARGV, $arg;
+ last;
+ }
+}
+
+if ($save_vars{'PATH'}) {
+ # Untaint PATH. Very dangerous in general, but anyone running this
+ # as root can do anything anyway.
+ $ENV{'PATH'} =~ /^(.*)$/;
+ $ENV{'PATH'} = $1;
+} else {
+ $ENV{'PATH'} = "/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11";
+ $ENV{'PATH'} = join(':', $prepend_path, $ENV{'PATH'}) if $prepend_path;
+}
+$save_vars{'PATH'} = 1;
+$ENV{'TERM'} = 'dumb' unless exists $ENV{'TERM'};
+
+# Store a few variables for safe keeping.
+my %store_vars;
+foreach my $var ((
+ 'DBUS_SESSION_BUS_ADDRESS', 'DISPLAY',
+ 'GNOME_KEYRING_SOCKET', 'GPG_AGENT_INFO',
+ 'SSH_AUTH_SOCK', 'XAUTHORITY'
+ )
+) {
+ $store_vars{$var} = $ENV{$var} if defined $ENV{$var};
+}
+
+unless ($preserve_env) {
+ foreach my $var (keys %ENV) {
+ delete $ENV{$var}
+ unless $save_vars{$var}
+ or $var =~ /^(LC|DEB)_[A-Z_]+$/
+ or $var =~ /^(C(PP|XX)?|LD|F)FLAGS(_APPEND)?$/
+ or $var eq 'SOURCE_DATE_EPOCH';
+ }
+}
+
+umask 022;
+
+# Start by duping STDOUT and STDERR
+open OLDOUT, ">&", \*STDOUT or fatal "can't dup stdout: $!\n";
+open OLDERR, ">&", \*STDERR or fatal "can't dup stderr: $!\n";
+
+# Look for the debian changelog
+my $chdir = 0;
+until (-r 'debian/changelog') {
+ $chdir = 1;
+ chdir '..' or fatal "can't chdir ..: $!";
+ if (cwd() eq '/') {
+ fatal
+"cannot find readable debian/changelog anywhere!\nAre you in the source code tree?";
+ }
+}
+
+# Find the source package name and version number
+my %changelog;
+my $c = changelog_parse();
+@changelog{ 'Source', 'Version', 'Distribution' }
+ = @{$c}{ 'Source', 'Version', 'Distribution' };
+
+fatal "no package name in changelog!"
+ unless exists $changelog{'Source'};
+my $pkg = $changelog{'Source'};
+fatal "no version number in changelog!"
+ unless exists $changelog{'Version'};
+my $version = $changelog{'Version'};
+(my $sversion = $version) =~ s/^\d+://;
+(my $uversion = $sversion) =~ s/-[a-z0-9+\.]+$//i;
+
+# Is the directory name acceptable?
+if ($check_dirname_level == 2
+ or ($check_dirname_level == 1 and $chdir)) {
+ my $re = $check_dirname_regex;
+ $re =~ s/PACKAGE/\\Q$pkg\\E/g;
+ my $gooddir;
+ if ($re =~ m%/%) { $gooddir = eval "cwd() =~ /^$re\$/;"; }
+ else { $gooddir = eval "basename(cwd()) =~ /^$re\$/;"; }
+
+ if (!$gooddir) {
+ my $pwd = cwd();
+ die <<"EOF";
+$progname: found debian/changelog for package $pkg in the directory
+ $pwd
+but this directory name does not match the package name according to the
+regex $check_dirname_regex.
+
+To run $progname on this package, see the --check-dirname-level and
+--check-dirname-regex options; run $progname --help for more info.
+EOF
+ }
+}
+
+if (!-f "debian/rules") {
+ my $cwd = cwd();
+ fatal
+"found debian/changelog in directory\n $cwd\nbut there's no debian/rules there! Are you in the source code tree?";
+}
+
+if (!-x _ ) {
+ push @warnings, "Making debian/rules executable!\n";
+ chmod 0755, "debian/rules"
+ or fatal "couldn't make debian/rules executable: $!";
+}
+
+# Pick up superuser privileges if we are running set[ug]id root
+my $uid = $<;
+if ($< != 0 && $> == 0) { $< = $> }
+my $gid = $(;
+if ($( != 0 && $) == 0) { $( = $) }
+
+# Our first task is to parse the command line options.
+
+# dpkg-buildpackage variables explicitly initialised in dpkg-buildpackage
+my $nosign;
+my $forcesign;
+my $signsource = $changelog{Distribution} ne 'UNRELEASED';
+my $signchanges = $changelog{Distribution} ne 'UNRELEASED';
+my $signbuildinfo = $changelog{Distribution} ne 'UNRELEASED';
+my $binarytarget = 'binary';
+my $since = '';
+my $usepause = 0;
+
+# extra dpkg-buildpackage variables not initialised there
+my $sourceonly = '';
+my $binaryonly = '';
+my $targetarch = '';
+my $targetgnusystem = '';
+
+my $dirn = basename(cwd());
+
+# and one for us
+my @debsign_opts = ();
+# and one for dpkg-buildpackage if needed
+my @dpkg_opts = qw(-us -uc -ui);
+
+my %debuild2dpkg = (
+ 'dpkg-buildpackage' => 'init',
+ 'clean' => 'preclean',
+ 'dpkg-source' => 'source',
+ 'build' => 'build',
+ 'binary' => 'binary',
+ 'dpkg-genchanges' => 'changes',
+ 'final-clean' => 'postclean',
+);
+
+for my $h_name (@hooks) {
+ if (exists $debuild2dpkg{$h_name} && $hook{$h_name}) {
+ push(@dpkg_opts,
+ sprintf('--hook-%s=%s', $debuild2dpkg{$h_name}, $hook{$h_name}));
+ delete $hook{$h_name};
+ }
+}
+
+# Parse dpkg-buildpackage options
+# First process @dpkg_extra_opts from above
+
+foreach (@dpkg_extra_opts) {
+ $_ eq '-h'
+ and warn "You have a -h option in your configuration file! Ignoring.\n",
+ next;
+ /^-r/ and next; # already been processed
+ /^-p/ and push(@debsign_opts, $_), next; # Key selection options
+ /^-k/ and push(@debsign_opts, $_), next; # Ditto
+ /^-[dD]$/ and next; # already been processed
+ $_ eq '-us' and $signsource = 0, next;
+ $_ eq '--unsigned-source' and $signsource = 0, next;
+ $_ eq '-uc' and $signchanges = 0, next;
+ $_ eq '--unsigned-changes' and $signchanges = 0, next;
+ $_ eq '-ui' and $signbuildinfo = 0, next;
+ $_ eq '--unsigned-buildinfo' and $signbuildinfo = 0, next;
+ $_ eq '--no-sign' and $nosign = 1, next;
+ $_ eq '--force-sign' and $forcesign = 1, next;
+ $_ eq '-ap' and $usepause = 1, next;
+ /^-a(.*)/ and $targetarch = $1, push(@dpkg_opts, $_), next;
+ $_ eq '-tc' and push(@dpkg_opts, $_), next;
+ /^-t(.*)/ and $targetgnusystem = $1, push(@dpkg_opts, $_), next; # Ditto
+ $_ eq '-b' and $binaryonly = $_, $binarytarget = 'binary',
+ push(@dpkg_opts, $_), next;
+ $_ eq '-B' and $binaryonly = $_, $binarytarget = 'binary-arch',
+ push(@dpkg_opts, $_), next;
+ $_ eq '-A' and $binaryonly = $_, $binarytarget = 'binary-indep',
+ push(@dpkg_opts, $_), next;
+ $_ eq '-S' and $sourceonly = $_, push(@dpkg_opts, $_), next;
+ $_ eq '-F' and $binarytarget = 'binary', push(@dpkg_opts, $_), next;
+ $_ eq '-G' and $binarytarget = 'binary-arch', push(@dpkg_opts, $_), next;
+ $_ eq '-g' and $binarytarget = 'binary-indep', push(@dpkg_opts, $_), next;
+
+ if (/^--build=(.*)$/) {
+ my $argstr = $_;
+ my @builds = split(/,/, $1);
+ my ($binary, $source);
+ for my $build (@builds) {
+ if ($build =~ m/^(?:binary|full)$/) {
+ $source++ if $1 eq 'full';
+ $binary++;
+ $binarytarget = 'binary';
+ } elsif ($build eq 'any') {
+ $binary++;
+ $binarytarget = 'binary-arch';
+ } elsif ($build eq 'all') {
+ $binary++;
+ $binarytarget = 'binary-indep';
+ }
+ }
+ $binaryonly = (!$source && $binary);
+ $sourceonly = ($source && !$binary);
+ push(@dpkg_opts, $argstr);
+ }
+ /^-v(.*)/ and $since = $1, push(@dpkg_opts, $_), next;
+ /^-m(.*)/ and push(@debsign_opts, $_), push(@dpkg_opts, $_), next;
+ /^-e(.*)/ and push(@debsign_opts, $_), push(@dpkg_opts, $_), next;
+ push(@dpkg_opts, $_);
+}
+
+while ($_ = shift) {
+ $_ eq '-h' and usage(), exit 0;
+ /^-r(.*)/ and $root_command = $1, next;
+ /^-p/ and push(@debsign_opts, $_), next; # Key selection options
+ /^-k/ and push(@debsign_opts, $_), next; # Ditto
+ $_ eq '-us' and $signsource = 0, next;
+ $_ eq '--unsigned-source' and $signsource = 0, next;
+ $_ eq '-uc' and $signchanges = 0, next;
+ $_ eq '--unsigned-changes' and $signchanges = 0, next;
+ $_ eq '-ui' and $signbuildinfo = 0, next;
+ $_ eq '--unsigned-buildinfo' and $signbuildinfo = 0, next;
+ $_ eq '--no-sign' and $nosign = 1, next;
+ $_ eq '--force-sign' and $forcesign = 1, next;
+ $_ eq '-ap' and $usepause = 1, next;
+ /^-a(.*)/ and $targetarch = $1, push(@dpkg_opts, $_), next;
+ $_ eq '-tc' and push(@dpkg_opts, $_), next;
+ /^-t(.*)/ and $targetgnusystem = $1, next;
+ $_ eq '-b' and $binaryonly = $_, $binarytarget = 'binary',
+ push(@dpkg_opts, $_), next;
+ $_ eq '-B' and $binaryonly = $_, $binarytarget = 'binary-arch',
+ push(@dpkg_opts, $_), next;
+ $_ eq '-A' and $binaryonly = $_, $binarytarget = 'binary-indep',
+ push(@dpkg_opts, $_), next;
+ $_ eq '-S' and $sourceonly = $_, push(@dpkg_opts, $_), next;
+ $_ eq '-F' and $binarytarget = 'binary', push(@dpkg_opts, $_), next;
+ $_ eq '-G' and $binarytarget = 'binary-arch', push(@dpkg_opts, $_), next;
+ $_ eq '-g' and $binarytarget = 'binary-indep', push(@dpkg_opts, $_), next;
+
+ if (/^--build=(.*)$/) {
+ my $argstr = $_;
+ my @builds = split(/,/, $1);
+ my ($binary, $source);
+ for my $build (@builds) {
+ if ($build eq 'full') {
+ $source++;
+ $binary++;
+ $binarytarget = 'binary';
+ } elsif ($build eq 'binary') {
+ $binary++;
+ $binarytarget = 'binary';
+ } elsif ($build eq 'any') {
+ $binary++;
+ $binarytarget = 'binary-arch';
+ } elsif ($build eq 'all') {
+ $binary++;
+ $binarytarget = 'binary-indep';
+ }
+ }
+ $binaryonly = (!$source && $binary);
+ $sourceonly = ($source && !$binary);
+ push(@dpkg_opts, $argstr);
+ }
+ /^-v(.*)/ and $since = $1, push(@dpkg_opts, $_), next;
+ /^-m(.*)/ and push(@debsign_opts, $_), push(@dpkg_opts, $_), next;
+ /^-e(.*)/ and push(@debsign_opts, $_), push(@dpkg_opts, $_), next;
+
+ # these non-dpkg-buildpackage options make us stop
+ if ($_ eq '--lintian-opts') {
+ unshift @ARGV, $_;
+ last;
+ }
+ if ($_ eq '--') {
+ last;
+ }
+ push(@dpkg_opts, $_);
+}
+
+# Pick up lintian options if necessary
+if (@ARGV) {
+ # Check that option is sensible
+ if ($ARGV[0] eq '--lintian-opts') {
+ if (!$run_lintian) {
+ push @warnings, "$ARGV[0] option given but not running lintian!";
+ }
+ shift;
+ push(@lintian_opts, @ARGV);
+ undef @ARGV;
+ }
+}
+
+if ($nosign) {
+ $signchanges = 0;
+ $signsource = 0;
+ $signbuildinfo = 0;
+}
+
+if ($forcesign) {
+ $signchanges = 1;
+ $signsource = 1;
+ $signbuildinfo = 1;
+}
+
+if ($signchanges == 1 and $signsource == 0) {
+ push @warnings, "Setting -us without setting -uc, signing .dsc anyway\n";
+}
+
+if ($signchanges == 1 and $signbuildinfo == 0) {
+ push @warnings,
+ "Setting -ui without setting -uc, signing .buildinfo anyway\n";
+}
+
+# Next dpkg-buildpackage steps:
+# mustsetvar package/version have been done above; we've called the
+# results $pkg and $version
+# mustsetvar maintainer is only needed for signing, so we leave that
+# to debsign or dpkg-sig
+# Call to dpkg-architecture to set DEB_{BUILD,HOST}_* environment
+# variables
+my @dpkgarch = 'dpkg-architecture';
+if ($targetarch) {
+ push @dpkgarch, "-a${targetarch}";
+}
+if ($targetgnusystem) {
+ push @dpkgarch, "-t${targetgnusystem}";
+}
+push @dpkgarch, '-f';
+
+my $archinfo;
+spawn(
+ exec => [@dpkgarch],
+ to_string => \$archinfo,
+ wait_child => 1
+);
+foreach (split /\n/, $archinfo) {
+ /^(.*)=(.*)$/ and $ENV{$1} = $2;
+}
+
+# We need to do the arch, pv, pva stuff to figure out
+# what the changes file will be called,
+my ($arch, $dsc, $changes, $build);
+if ($sourceonly) {
+ $arch = 'source';
+} elsif ($binarytarget eq 'binary-indep') {
+ $arch = 'all';
+} else {
+ $arch = $ENV{DEB_HOST_ARCH};
+}
+
+# Handle dpkg source format "3.0 (git)" packages (no tarballs)
+if (-r "debian/source/format") {
+ open FMT, "debian/source/format" or die $!;
+ my $srcfmt = <FMT>;
+ close FMT;
+ chomp $srcfmt;
+ if ($srcfmt eq "3.0 (git)") { $tgz_check = 0; }
+}
+
+$dsc = "${pkg}_${sversion}.dsc";
+my $orig_prefix = "${pkg}_${uversion}.orig.tar";
+my $origdir = basename(cwd()) . ".orig";
+if ( !$binaryonly
+ and $tgz_check
+ and $uversion ne $sversion
+ and !-f "../${orig_prefix}.bz2"
+ and !-f "../${orig_prefix}.lzma"
+ and !-f "../${orig_prefix}.gz"
+ and !-f "../${orig_prefix}.xz"
+ and !-d "../$origdir") {
+ print STDERR "This package has a Debian revision number but there does"
+ . " not seem to be\nan appropriate original tar file or .orig"
+ . " directory in the parent directory;\n(expected one of"
+ . " ${orig_prefix}.gz, ${orig_prefix}.bz2,\n${orig_prefix}.lzma, "
+ . " ${orig_prefix}.xz or $origdir)\ncontinue anyway? (y/n) ";
+ my $ans = <STDIN>;
+ exit 1 unless $ans =~ /^y/i;
+}
+
+# Convert debuild-specific _APPEND variables to those recognized by
+# dpkg-buildpackage
+my @buildflags = qw(CPPFLAGS CFLAGS CXXFLAGS FFLAGS LDFLAGS);
+foreach my $flag (@buildflags) {
+ if (exists $ENV{"${flag}_APPEND"}) {
+ $ENV{"DEB_${flag}_APPEND"} = delete $ENV{"${flag}_APPEND"};
+ }
+}
+
+if (defined($checkbuilddep)) {
+ unshift @dpkg_opts, ($checkbuilddep ? "-D" : "-d");
+}
+unshift @dpkg_opts, "-r$root_command" if $root_command;
+
+if (@ARGV) {
+ # Run each rule
+ for my $target (@ARGV) {
+ system_withecho('dpkg-buildpackage', '--rules-target', $target,
+ @dpkg_opts);
+ }
+
+ # Any warnings?
+ if (@warnings) {
+ # Don't know why we need this, but seems that we do, otherwise,
+ # the warnings get muddled up with the other output.
+ IO::Handle::flush(\*STDOUT);
+
+ my $warns = @warnings > 1 ? "S" : "";
+ warn "\nWARNING$warns generated by $progname:\n"
+ . join("\n", @warnings) . "\n";
+ }
+} else {
+ if ($run_lintian && system('command -v lintian >/dev/null 2>&1') == 0) {
+ $lintian_exists = 1;
+ }
+ # We'll need to be a bit cleverer to determine the changes file name;
+ # see below
+ $build = "${pkg}_${sversion}_${arch}.build";
+ $changes = "${pkg}_${sversion}_${arch}.changes";
+ open BUILD, "| tee ../$build" or fatal "couldn't open pipe to tee: $!";
+ $logging = 1;
+ close STDOUT;
+ close STDERR;
+ open STDOUT, ">&BUILD" or fatal "can't reopen stdout: $!";
+ open STDERR, ">&BUILD" or fatal "can't reopen stderr: $!";
+
+ system_withecho('dpkg-buildpackage', @dpkg_opts);
+
+ chdir '..' or fatal "can't chdir: $!";
+
+ open CHANGES, '<', $changes or fatal "can't open $changes for reading: $!";
+ my @changefilecontents = <CHANGES>;
+ close CHANGES;
+
+ # check Ubuntu merge Policy: When merging with Debian, -v must be used
+ # and the remaining changes described
+ my $ch = join "\n", @changefilecontents;
+ if ( $sourceonly
+ && $version =~ /ubuntu1$/
+ && $ENV{'DEBEMAIL'} =~ /ubuntu/
+ && $ch =~ /(merge|sync).*Debian/i) {
+ push(@warnings,
+"Ubuntu merge policy: when merging Ubuntu packages with Debian, -v must be used"
+ ) unless $since;
+ push(@warnings,
+"Ubuntu merge policy: when merging Ubuntu packages with Debian, changelog must describe the remaining Ubuntu changes"
+ )
+ unless $ch
+ =~ /Changes:.*(remaining|Ubuntu)(.|\n )*(differen|changes)/is;
+ }
+
+ run_hook('lintian', $run_lintian && $lintian_exists);
+
+ if ($run_lintian && $lintian_exists) {
+ $< = $> = $uid; # Give up on root privileges if we can
+ $( = $) = $gid;
+ my @lintian
+ = ('lintian', @lintian_extra_opts, @lintian_opts, $changes);
+ print "Now running @lintian ...\n";
+ system(@lintian);
+ print "Finished running lintian.\n";
+ }
+
+ # They've insisted. Who knows why?!
+ if (($signchanges or $signsource) and $usepause) {
+ print "Press the return key to start signing process\n";
+ <STDIN>;
+ }
+
+ run_hook('signing', ($signchanges || (!$sourceonly and $signsource)));
+
+ if ($signchanges) {
+ foreach my $var (keys %store_vars) {
+ $ENV{$var} = $store_vars{$var};
+ }
+ print "Now signing changes and any dsc files...\n";
+ if ($username) {
+ system('debrsign', @debsign_opts, $username, $changes) == 0
+ or fatal "running debrsign failed";
+ } else {
+ system('debsign', @debsign_opts, $changes) == 0
+ or fatal "running debsign failed";
+ }
+ } elsif (!$sourceonly and $signsource) {
+ print "Now signing dsc file...\n";
+ if ($username) {
+ system('debrsign', @debsign_opts, $username, $dsc) == 0
+ or fatal "running debrsign failed";
+ } else {
+ system('debsign', @debsign_opts, $dsc) == 0
+ or fatal "running debsign failed";
+ }
+ }
+
+ run_hook('post-dpkg-buildpackage', 1);
+
+ # Any warnings?
+ if (@warnings) {
+ # Don't know why we need this, but seems that we do, otherwise,
+ # the warnings get muddled up with the other output.
+ IO::Handle::flush(\*STDOUT);
+
+ my $warns = @warnings > 1 ? "S" : "";
+ warn "\nWARNING$warns generated by $progname:\n"
+ . join("\n", @warnings) . "\n";
+ }
+ # close the logging process
+ close STDOUT;
+ close STDERR;
+ close BUILD;
+ open STDOUT, ">&", \*OLDOUT;
+ open STDERR, ">&", \*OLDERR;
+}
+exit 0;
+
+###### Subroutines
+
+sub setDebuildHook() {
+ my ($name, $val) = @_;
+
+ unless (grep /^$name$/, @hooks) {
+ fatal
+ "unknown hook $name,\nrun $progname --help for usage information";
+ }
+
+ if ($externalHook{$name} && $dpkgHook{$name} && $val) {
+ $hook{$name} = 'cd ..; ' . $val;
+ } else {
+ $hook{$name} = $val;
+ }
+}
+
+sub setDpkgHook() {
+ my ($name, $val) = @_;
+
+ unless (grep /^$name$/, @hooks) {
+ fatal
+ "unknown hook $name,\nrun $progname --help for usage information";
+ }
+
+ if ($externalHook{$name} && !$dpkgHook{$name} && $val) {
+ $hook{$name} = 'cd ..; ' . $val;
+ } else {
+ $hook{$name} = $val;
+ }
+}
+
+sub system_withecho(@) {
+ print STDERR " ", join(" ", @_), "\n";
+ system(@_);
+ if ($? >> 8) {
+ fatal "@_ failed";
+ }
+}
+
+sub run_hook ($$) {
+ my ($hook, $act) = @_;
+ return unless $hook{$hook};
+
+ print STDERR " Running $hook-hook\n";
+ my $hookcmd = $hook{$hook};
+ $act = $act ? 1 : 0;
+ my %per = (
+ "%" => "%",
+ "p" => $pkg,
+ "v" => $version,
+ "s" => $sversion,
+ "u" => $uversion,
+ "a" => $act
+ );
+ $hookcmd =~ s/\%(.)/exists $per{$1} ? $per{$1} :
+ (warn ("Unrecognised \% substitution in hook: \%$1\n"), "\%$1")/eg;
+
+ system_withecho($hookcmd);
+
+ if ($? >> 8) {
+ warn "$progname: $hook-hook failed\n";
+ exit($? >> 8);
+ }
+}
+
+sub fatal($) {
+ my ($pack, $file, $line);
+ ($pack, $file, $line) = caller();
+ (my $msg = "$progname: fatal error at line $line:\n@_\n") =~ tr/\0//d;
+ $msg =~ s/\n\n$/\n/;
+ # redirect stderr before we die...
+ if ($logging) {
+ close STDOUT;
+ close STDERR;
+ close BUILD;
+ open STDOUT, ">&", \*OLDOUT;
+ open STDERR, ">&", \*OLDERR;
+ }
+ die $msg;
+}
diff --git a/scripts/dep3changelog.1 b/scripts/dep3changelog.1
new file mode 100644
index 0000000..1e5eb9b
--- /dev/null
+++ b/scripts/dep3changelog.1
@@ -0,0 +1,29 @@
+.TH DEP3CHANGELOG 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+dep3changelog \- generate a changelog entry from a DEP3-style patch header
+.SH SYNOPSIS
+\fBdep3changelog\fR \fIpatch\fR [\fIpatch\fR ...] [\fIoptions\fR] [\-\- [\fIdch_options\fR]]
+.SH DESCRIPTION
+\fBdep3changelog\fR extracts the DEP3 patch headers from the given \fIpatch\fR
+files and builds a changelog entry for each patch. If the patch author
+differs from the one detected from the \fBDEBEMAIL\fR, \fBNAME\fR,
+\fBDEBEMAIL\fR, or \fBEMAIL\fR environment variables, \*(lqThanks to
+\fIauthor\fR <\fIemail\fR>\*(rq is added to the changelog entry for that patch.
+Any \fBbug-debian\fR or \fBbug-ubuntu\fR fields are added as \*(lqCloses\*(rq to
+the changelog entry. The generated changelog entries are passed to
+\fBdebchange\fR as an argument along with the given \fIdch_options\fR.
+.SH OPTIONS
+.TP
+.BR \-\-help ", " \-h
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH ENVIRONMENT
+.TP
+.BR DEBEMAIL ", " EMAIL ", " DEBFULLNAME ", " NAME
+See the above description of the use of these environment variables.
+.SH AUTHOR
+Steve Langasek <vorlon@debian.org>
+.SH "SEE ALSO"
+.BR debchange (1)
diff --git a/scripts/dep3changelog.pl b/scripts/dep3changelog.pl
new file mode 100755
index 0000000..4c003c8
--- /dev/null
+++ b/scripts/dep3changelog.pl
@@ -0,0 +1,187 @@
+#!/usr/bin/perl
+
+# dep3changelog: extract a DEP3 patch header from the named file and
+# automatically update debian/changelog with a suitable entry
+#
+# Copyright 2010 Steve Langasek <vorlon@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+# USA
+
+use 5.008; # We're using PerlIO layers
+use strict;
+use warnings;
+use open ':utf8'; # patch headers are required to be UTF-8
+
+# for checking whether user names are valid and making format() behave
+use Encode qw/decode_utf8 encode_utf8/;
+use Getopt::Long;
+use File::Basename;
+
+# And global variables
+my $progname = basename($0);
+my %env;
+
+sub usage () {
+ print <<"EOF";
+Usage: $progname patch [patch...] [options] [-- [dch options]]
+Options:
+ --help, -h
+ Display this help message and exit
+ --version
+ Display version information
+ Additional options specified after -- are passed to dch.
+EOF
+}
+
+sub version () {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2010 by Steve Langasek, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+my ($opt_help, $opt_version);
+GetOptions(
+ "help|h" => \$opt_help,
+ "version" => \$opt_version,
+ )
+ or die
+"Usage: $progname patch [... patch] [-- [dch options]]\nRun $progname --help for more details\n";
+
+if ($opt_help) { usage; exit 0; }
+if ($opt_version) { version; exit 0; }
+
+my @patches;
+
+while (@ARGV && $ARGV[0] !~ /^-/) {
+ push(@patches, shift(@ARGV));
+}
+
+# Check, sanitise and decode these environment variables
+check_env_utf8('DEBFULLNAME');
+check_env_utf8('NAME');
+check_env_utf8('DEBEMAIL');
+check_env_utf8('EMAIL');
+
+if (exists $env{'DEBEMAIL'} and $env{'DEBEMAIL'} =~ /^(.*)\s+<(.*)>$/) {
+ $env{'DEBFULLNAME'} = $1 unless exists $env{'DEBFULLNAME'};
+ $env{'DEBEMAIL'} = $2;
+}
+if (!exists $env{'DEBEMAIL'} or !exists $env{'DEBFULLNAME'}) {
+ if (exists $env{'EMAIL'} and $env{'EMAIL'} =~ /^(.*)\s+<(.*)>$/) {
+ $env{'DEBFULLNAME'} = $1 unless exists $env{'DEBFULLNAME'};
+ $env{'EMAIL'} = $2;
+ }
+}
+
+my $fullname = '';
+my $email = '';
+
+if (exists $env{'DEBFULLNAME'}) {
+ $fullname = $env{'DEBFULLNAME'};
+} elsif (exists $env{'NAME'}) {
+ $fullname = $env{'NAME'};
+} else {
+ my @pw = getpwuid $<;
+ if ($pw[6]) {
+ if (my $pw = decode_utf8($pw[6])) {
+ $pw =~ s/,.*//;
+ $fullname = $pw;
+ } else {
+ warn
+"$progname warning: passwd full name field for uid $<\nis not UTF-8 encoded; ignoring\n";
+ }
+ }
+}
+
+if (exists $env{'DEBEMAIL'}) {
+ $email = $env{'DEBEMAIL'};
+} elsif (exists $env{'EMAIL'}) {
+ $email = $env{'EMAIL'};
+}
+
+for my $patch (@patches) {
+ my $shebang = 0;
+ my $dpatch = 0;
+ # TODO: more than one debian or launchpad bug in a patch?
+ my ($description, $author, $debbug, $lpbug, $origin);
+
+ next unless (open PATCH, $patch);
+ while (<PATCH>) {
+ # first line only
+ if (!$shebang) {
+ $shebang = 1;
+ if (/^#!/) {
+ $dpatch = $shebang = 1;
+ next;
+ }
+ }
+ last if (/^---/);
+ chomp;
+ # only if there was a shebang do we strip comment chars
+ s/^# // if ($dpatch);
+ # fixme: this should only apply to the description field.
+ next if (/^ /);
+
+ if (/^(Description|Subject):\s+(.*)\s*/) {
+ $description = $2;
+ } elsif (/^(Author|From):\s+(.*)\s*/) {
+ $author = $2;
+ } elsif (/^Origin:\s+(.*)\s*/) {
+ $origin = $1;
+ } elsif (/^bug-debian:\s+https?:\/\/bugs\.debian\.org\/([0-9]+)\s*/i) {
+ $debbug = $1;
+ } elsif (/^bug-ubuntu:\s+https:\/\/.*launchpad\.net\/.*\/([0-9]+)\s*/i)
+ {
+ $lpbug = $1;
+ }
+ }
+ close PATCH;
+ if (!$description || (!$origin && !$author)) {
+ warn "$patch: Invalid DEP3 header\n";
+ next;
+ }
+ my $changelog = "$patch: $description";
+ $changelog .= '.' unless ($changelog =~ /\.$/);
+ if ($author && $author ne $fullname && $author ne "$fullname <$email>") {
+ $changelog .= " Thanks to $author.";
+ }
+ if ($debbug || $lpbug) {
+ $changelog .= ' Closes';
+ $changelog .= ": #$debbug" if ($debbug);
+ $changelog .= "," if ($debbug && $lpbug);
+ $changelog .= " LP: #$lpbug" if ($lpbug);
+ $changelog .= '.';
+ }
+ system('dch', $changelog, @ARGV);
+}
+
+# Is the environment variable valid or not?
+sub check_env_utf8 {
+ my $envvar = $_[0];
+
+ if (exists $ENV{$envvar} and $ENV{$envvar} ne '') {
+ if (!decode_utf8($ENV{$envvar})) {
+ warn
+"$progname warning: environment variable $envvar not UTF-8 encoded; ignoring\n";
+ } else {
+ $env{$envvar} = decode_utf8($ENV{$envvar});
+ }
+ }
+}
diff --git a/scripts/desktop2menu.pl b/scripts/desktop2menu.pl
new file mode 100755
index 0000000..195410b
--- /dev/null
+++ b/scripts/desktop2menu.pl
@@ -0,0 +1,317 @@
+#!/usr/bin/perl
+
+# desktop2menu: This program generates a skeleton menu file from a
+# freedesktop.org desktop file
+#
+# Written by Sune Vuorela <debian@pusling.com>
+# Modifications by Adam D. Barratt <adam@adam-barratt.org.uk>
+# Copyright 2007 Sune Vuorela <debian@pusling.com>
+# Modifications Copyright 2007 Adam D. Barratt <adam@adam-barratt.org.uk>
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+=head1 NAME
+
+desktop2menu - create a menu file skeleton from a desktop file
+
+=head1 SYNOPSIS
+
+B<desktop2menu> B<--help>|B<--version>
+
+B<desktop2menu> I<desktop file> [I<package name>]
+
+=head1 DESCRIPTION
+
+B<desktop2menu> generates a skeleton menu file from the supplied
+freedesktop.org desktop file.
+
+The package name to be used in the menu file may be passed as an additional
+argument. If it is not supplied then B<desktop2menu> will attempt to derive
+the package name from the data in the desktop file.
+
+=head1 LICENSE
+
+This program is Copyright (C) 2007 by Sune Vuorela <debian@pusling.com>. It
+was modified by Adam D. Barratt <adam@adam-barratt.org.uk> for the devscripts
+package.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the GNU
+General Public License, version 2 or later.
+
+=head1 AUTHOR
+
+Sune Vuorela <debian@pusling.com> with modifications by Adam D. Barratt
+<adam@adam-barratt.org.uk>
+
+=cut
+
+use warnings;
+use strict;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use File::Basename;
+
+my $progname = basename($0);
+
+BEGIN {
+ pop @INC if $INC[-1] eq '.';
+ # Load the File::DesktopEntry module safely
+ eval { require File::DesktopEntry; };
+ if ($@) {
+ my $progname = basename $0;
+ if ($@ =~ /^Can\'t locate File\/DesktopEntry\.pm/) {
+ die
+"$progname: you must have the libfile-desktopentry-perl package installed\nto use this script\n";
+ }
+ die
+"$progname: problem loading the File::DesktopEntry module:\n $@\nHave you installed the libfile-desktopentry-perl package?\n";
+ }
+ import File::DesktopEntry;
+}
+
+use File::DesktopEntry;
+
+# Big generic mapping between fdo sections and menu sections
+my %mappings = (
+ "AudioVideo" => "Applications/Video",
+ "Audio" => "Applications/Sound",
+ "Video" => "Applications/Video",
+ "Development" => "Applications/Programming",
+ "Education" => "Applications/Education",
+ "Game" => "Games!WARN",
+ "Graphics" => "Applications/Graphics!WARN",
+ "Network" => "Applications/Network!WARN",
+ "Office" => "Applications/Office",
+ "System" => "Applications/System/Administration",
+ "Utility" => "Applications!WARN",
+ "Building" => "Applications/Programming",
+ "Debugger" => "Applications/Programming",
+ "IDE" => "Applications/Programming",
+ "Profiling" => "Applications/Programming",
+ "RevisionControl" => "Applications/Programming",
+ "Translation" => "Applications/Programming",
+ "Calendar" => "Applications/Data Management",
+ "ContactManagement" => "Applications/Data Management",
+ "Database" => "Applications/Data Management",
+ "Dictionary" => "Applications/Text",
+ "Chart" => "Applications/Office",
+ "Email" => "Applications/Network/Communication",
+ "Finance" => "Applications/Office",
+ "FlowChart" => "Applications/Office",
+ "PDA" => "Applications/Mobile Devices",
+ "ProjectManagement" => "Applications/Project Management",
+ "Presentation" => "Applications/Office",
+ "Spreadsheet" => "Applications/Office",
+ "Wordprocessor" => "Applications/Office",
+ "2DGraphics" => "Applications/Graphics",
+ "VectorGraphics" => "Applications/Graphics",
+ "RasterGraphics" => "Applications/Graphics",
+ "3DGraphics" => "Applications/Graphics",
+ "Scanning" => "Applications/Graphics",
+ "OCR" => "Applications/Text",
+ "Photography" => "Applications/Graphics",
+ "Publishing" => "Applications/Office",
+ "Viewer" => "Applications/Viewers",
+ "TextTools" => "Applications/Text",
+ "DesktopSettings" => "Applications/System/Administration",
+ "HardwareSettings" => "Applications/System/Hardware",
+ "Printing" => "Applications/System/Administration",
+ "PackageManager" => "Applications/System/Package Management",
+ "Dialup" => "Applications/System/Administration",
+ "InstantMesasging" => "Applications/Network/Communication",
+ "Chat" => "Applications/Network/Communication",
+ "IRCClient" => "Applications/Network/Communication",
+ "FileTransfer" => "Applications/Network/File Transfer",
+ "HamRadio" => "Applications/Amateur Radio",
+ "News" => "Applications/Network/Web News",
+ "P2P" => "Applications/File Transfer",
+ "RemoteAccess" => "Applications/System/Administration",
+ "Telephony" => "Applications/Network/Communication",
+ "TelephonyTools" => "Applications/Network/Communication",
+ "VideoConference" => "Applications/Network/Communication",
+ "Midi" => "Applications/Sound",
+ "Mixer" => "Applications/Sound",
+ "Sequencer" => "Applications/Sound",
+ "Tuner" => "Applications/TV and Radio",
+ "TV" => "Applications/TV and Radio",
+ "AudioVideoEditing" => "Applications/Video!WARN",
+ "Player" => "Applications/Video!WARN",
+ "Recorder" => "Applications/Video!WARN",
+ "DiscBurning" => "Applications/File Management",
+ "ActionGame" => "Games/Action",
+ "AdventureGame" => "Games/Adventure",
+ "ArcadeGame" => "Games/Action",
+ "BoardGame" => "Games/Board",
+ "BlocksGame" => "Games/Blocks",
+ "CardGame" => "Games/Card",
+ "KidsGames" => "Games/Toys!WARN",
+ "LogicGames" => "Games/Puzzles",
+ "RolePlaying" => "Games/Adventure",
+ "Simulation" => "Games/Simulation",
+ "SportsGame" => "Games/Action",
+ "StrategyGame" => "Games/Strategy",
+ "Art" => "Applications/Education",
+ "Construction" => "Applications/Education",
+ "Music" => "Applications/Education",
+ "Languages" => "Applications/Education",
+ "Science" => "Applications/Science!WARN",
+ "ArtificialIntelligence" => "Applications/Science!WARN",
+ "Astronomy" => "Applications/Science/Astronomy",
+ "Biology" => "Applications/Science/Biology",
+ "Chemistry" => "Applications/Science/Chemistry",
+ "ComputerScience" => "Applications/Science/Electronics!WARN",
+ "DataVisualization" => "Applications/Science/Data Analysis",
+ "Economy" => "Applications/Office",
+ "Electricity" => "Applications/Science/Engineering",
+ "Geography" => "Applications/Science/Geoscience",
+ "Geology" => "Applications/Science/Geoscience",
+ "Geoscience" => "Applications/Science/Geoscience",
+ "History" => "Applications/Science/Social",
+ "ImageProcessing" => "Applications/Graphics",
+ "Literature" => "Applications/Data Management",
+ "Math" => "Applications/Science/Mathematics",
+ "NumericalAnalyzisis" => "Applications/Science/Mathematics",
+ "MedicalSoftware" => "Applications/Science/Medicine",
+ "Physics" => "Applications/Science/Physics",
+ "Robotics" => "Applications/Science/Engineering",
+ "Sports" => "Games/Tools!WARN",
+ "ParallelComputing" => "Applications/Science/Electronics!WARN",
+ "Amusement" => "Games/Toys",
+ "Archiving" => "Applications/File Management",
+ "Compression" => "Applications/File Management",
+ "Electronics" => "Applications/Science/Electronics",
+ "Emulator" => "Applications/Emulators",
+ "Engineering" => "Applications/Science/Engineering",
+ "FileTools" => "Applications/File Management",
+ "FileManager" => "Applications/File Management",
+ "TerminalEmulator" => "Applications/Shells",
+ "Filesystem" => "Applications/System/Administration",
+ "Monitor" => "Applications/System/Monitoring",
+ "Security" => "Applications/System/Security",
+ "Accessibility" => "Applications/Accessibility",
+ "Calculator" => "Applications/Science/Mathematics",
+ "Clock" => "Games/Toys",
+ "TextEditor" => "Applications/Editors",
+);
+
+#values mentioned in Categories we accept as valid hints.
+my %hintscategories = (
+ "KDE" => "true",
+ "Qt" => "true",
+ "GNOME" => "true",
+ "GTK" => "true",
+);
+
+my ($opt_help, $opt_version);
+
+GetOptions(
+ "help|h" => \$opt_help,
+ "version" => \$opt_version,
+ )
+ or die
+"Usage: $progname desktopfile packagename\nRun $progname --help for more details\n";
+
+if ($opt_help) { help(); exit 0; }
+if ($opt_version) { version(); exit 0; }
+
+if (@ARGV == 0) {
+ help();
+ exit 0;
+}
+
+my $section;
+my @hints;
+my $needs;
+my $warnings = 0;
+
+my $filename = shift @ARGV;
+my $file = File::DesktopEntry->new_from_file("$filename");
+
+# do menu files for non-applications make sense?
+die $file->get_value('Name') . " isn't an application\n"
+ unless $file->get_value('Type') eq 'Application';
+
+my $package = join(' ', @ARGV);
+if (!$package) {
+ # Bad guess, but... maybe icon name could be better?
+ $package = $file->get_value('Name');
+ print STDERR
+ "WARNING: Package not specified. Guessing package as: $package\n";
+ $warnings++;
+}
+
+my $category = $file->get_value('Categories');
+
+my @categories = reverse split(";", $category);
+foreach (@categories) {
+ if ($mappings{$_} && !$section) {
+ $section = $mappings{$_};
+ }
+ if ($hintscategories{$_}) {
+ push(@hints, $_);
+ }
+}
+
+die "Desktop file has invalid categories" unless $section;
+
+# Not all mappings are completely accurate. Most are, but...
+if ($section =~ /!WARN/) {
+ print STDERR
+ "WARNING: Section is highly inaccurate. Please check it manually\n";
+ $warnings++;
+}
+
+# Let's just pretend that the wm and the vc needs don't exist.
+if ($category =~ /ConsoleOnly/) {
+ $needs = "text";
+} else {
+ $needs = "X11";
+}
+
+print "\n" if $warnings > 0;
+print "?package(" . $package . "): \\\n";
+print "\tneeds=\"" . $needs . "\" \\\n";
+print "\tsection=\"" . $section . "\" \\\n";
+print "\ttitle=\"" . $file->get_value('Name') . "\" \\\n";
+print "\thints=\"" . join(",", @hints) . "\" \\\n" if @hints;
+print "\tcommand=\"" . $file->get_value('Exec') . "\" \\\n";
+print "\ticon=\"/usr/share/pixmaps/"
+ . $file->get_value('Icon')
+ . ".xpm\" \\\n";
+print "\n";
+
+# Unnecessary. but for clarity
+exit 0;
+
+sub help {
+ print <<"EOF";
+Usage: $progname [options] filename packagename
+
+Valid options are:
+ --help, -h Display this message
+ --version, -v Display version and copyright info
+EOF
+}
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+Copyright (C) 2007 by Sune Vuorela <debian\@pusling.com>.
+Modifications copyright (C) 2007 by Adam D. Barratt <adam\@adam-barratt.org.uk>
+
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2, or (at your option) any
+later version.
+EOF
+}
diff --git a/scripts/devscripts/control.py b/scripts/devscripts/control.py
new file mode 100644
index 0000000..17a22c3
--- /dev/null
+++ b/scripts/devscripts/control.py
@@ -0,0 +1,292 @@
+# control.py - Represents a debian/control file
+#
+# Copyright (C) 2010, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""This module implements facilities to deal with Debian control."""
+import contextlib
+import os
+import sys
+
+from devscripts.logger import Logger
+
+try:
+ import debian.deb822
+except ImportError:
+ Logger.error("Please install 'python3-debian' in order to use this utility.")
+ sys.exit(1)
+
+try:
+ from debian._deb822_repro import Deb822ParagraphElement, parse_deb822_file
+ from debian._deb822_repro.tokens import Deb822Token
+
+ HAS_RTS_PARSER = True
+except ImportError:
+ HAS_RTS_PARSER = False
+
+try:
+ from debian._deb822_repro.formatter import one_value_per_line_formatter
+
+ HAS_FULL_RTS_FORMATTING = True
+except ImportError:
+
+ def one_value_per_line_formatter(
+ indentation, trailing_separator=True, immediate_empty_line=False
+ ):
+ raise AssertionError(
+ "Bug: The dummy one_value_per_line_formatter method should not be called!"
+ )
+
+ HAS_FULL_RTS_FORMATTING = False
+
+
+def _emit_one_line_value(value_tokens, sep_token, trailing_separator):
+ first_token = True
+ yield " "
+ for token in value_tokens:
+ if not first_token:
+ yield sep_token
+ if not sep_token.is_whitespace:
+ yield " "
+ first_token = False
+ yield token
+ if trailing_separator and not sep_token.is_whitespace:
+ yield sep_token
+ yield "\n"
+
+
+def wrap_and_sort_formatter(
+ indentation,
+ trailing_separator=True,
+ immediate_empty_line=False,
+ max_line_length_one_liner=0,
+):
+ """Provide a formatter that can handle indentation and trailing separators
+
+ This is a custom wrap-and-sort formatter capable of supporting wrap-and-sort's
+ needs. Where possible it delegates to python-debian's own formatter.
+
+ :param indentation: Either the literal string "FIELD_NAME_LENGTH" or a positive
+ integer, which determines the indentation fields. If it is an integer,
+ then a fixed indentation is used (notably the value 1 ensures the shortest
+ possible indentation). Otherwise, if it is "FIELD_NAME_LENGTH", then the
+ indentation is set such that it aligns the values based on the field name.
+ This parameter only affects values placed on the second line or later lines.
+ :param trailing_separator: If True, then the last value will have a trailing
+ separator token (e.g., ",") after it.
+ :param immediate_empty_line: Whether the value should always start with an
+ empty line. If True, then the result becomes something like "Field:\n value".
+ This parameter only applies to the values that will be formatted over more than
+ one line.
+ :param max_line_length_one_liner: If greater than zero, then this is the max length
+ of the value if it is crammed into a "one-liner" value. If the value(s) fit into
+ one line, this parameter will overrule immediate_empty_line.
+
+ """
+ if not HAS_FULL_RTS_FORMATTING:
+ raise NotImplementedError(
+ "wrap_and_sort_formatter requires python-debian 0.1.44"
+ )
+ if indentation != "FIELD_NAME_LENGTH" and indentation < 1:
+ raise ValueError('indentation must be at least 1 (or "FIELD_NAME_LENGTH")')
+
+ # The python-debian library provides support for all cases except cramming
+ # everything into a single line. So we "only" have to implement the single-line
+ # case(s) ourselves (which sadly takes plenty of code on its own)
+
+ _chain_formatter = one_value_per_line_formatter(
+ indentation,
+ trailing_separator=trailing_separator,
+ immediate_empty_line=immediate_empty_line,
+ )
+
+ if max_line_length_one_liner < 1:
+ return _chain_formatter
+
+ def _formatter(name, sep_token, formatter_tokens):
+ # We should have unconditionally delegated to the python-debian formatter
+ # if max_line_length_one_liner was set to "wrap_always"
+ assert max_line_length_one_liner > 0
+ all_tokens = list(formatter_tokens)
+ values_and_comments = [x for x in all_tokens if x.is_comment or x.is_value]
+ # There are special-cases where you could do a one-liner with comments, but
+ # they are probably a lot more effort than it is worth investing.
+ # - If you are here because you disagree, patches welcome. :)
+ if all(x.is_value for x in values_and_comments):
+ # We use " " (1 char) or ", " (2 chars) as separated depending on the field.
+ # (at the time of writing, wrap-and-sort only uses this formatted for
+ # dependency fields meaning this will be "2" - but now it is future proof).
+ chars_between_values = 1 + (0 if sep_token.is_whitespace else 1)
+ # Compute the total line length of the field as the sum of all values
+ total_len = sum(len(x.text) for x in values_and_comments)
+ # ... plus the separators
+ total_len += (len(values_and_comments) - 1) * chars_between_values
+ # plus the field name + the ": " after the field name
+ total_len += len(name) + 2
+ if total_len <= max_line_length_one_liner:
+ yield from _emit_one_line_value(
+ values_and_comments, sep_token, trailing_separator
+ )
+ return
+ # If it does not fit in one line, we fall through
+ # Chain into the python-debian provided formatter, which will handle this
+ # formatting for us.
+ yield from _chain_formatter(name, sep_token, all_tokens)
+
+ return _formatter
+
+
+def _insert_after(paragraph, item_before, new_item, new_value):
+ """Insert new_item into directly after item_before
+
+ New items added to a dictionary are appended."""
+ try:
+ paragraph.order_after
+ except AttributeError:
+ pass
+ else:
+ # Use order_after from python-debian (>= 0.1.42~), which is O(1) performance
+ paragraph[new_item] = new_value
+ try:
+ paragraph.order_after(new_item, item_before)
+ except KeyError:
+ # Happens if `item_before` is not present. We ignore this error because we
+ # are fine with `new_item` ending the "end" of the paragraph in that case.
+ pass
+ return
+ # Old method - O(n) performance
+ item_found = False
+ for item in paragraph:
+ if item_found:
+ value = paragraph.pop(item)
+ paragraph[item] = value
+ if item == item_before:
+ item_found = True
+ paragraph[new_item] = new_value
+ if not item_found:
+ paragraph[new_item] = new_value
+
+
+@contextlib.contextmanager
+def _open(filename, fd=None, encoding="utf-8", **kwargs):
+ if fd is None:
+ with open(filename, encoding=encoding, **kwargs) as fileobj:
+ yield fileobj
+ else:
+ yield fd
+
+
+class Control:
+ """Represents a debian/control file"""
+
+ def __init__(self, filename, fd=None, use_rts_parser=None):
+ assert fd is not None or os.path.isfile(filename), f"{filename} does not exist."
+ self.filename = filename
+ self._is_roundtrip_safe = use_rts_parser
+ self.strip_trailing_whitespace_on_save = False
+
+ if self._is_roundtrip_safe:
+ # Note: wrap-and-sort does not trigger this code path without python-debian
+ # 0.1.44 due to the lack of formatter support (that we are not willing to
+ # re-implement ourselves). However, the 0.1.43 version is correct for the
+ # Control class itself and is left as-is for non-"wrap-and-sort" consumers
+ # (if any)
+ if not HAS_RTS_PARSER:
+ raise ValueError(
+ "The use_rts_parser option requires python-debian 0.1.43 or later"
+ )
+ with _open(filename, fd=fd, encoding="utf8") as sequence:
+ self._deb822_file = parse_deb822_file(sequence)
+ self.paragraphs = list(self._deb822_file)
+ else:
+ self._deb822_file = None
+ self.paragraphs = []
+ with _open(filename, fd=fd, encoding="utf8") as sequence:
+ for paragraph in debian.deb822.Deb822.iter_paragraphs(sequence):
+ self.paragraphs.append(paragraph)
+
+ @property
+ def is_roundtrip_safe(self):
+ return self._is_roundtrip_safe
+
+ def get_maintainer(self):
+ """Returns the value of the Maintainer field."""
+ return self.paragraphs[0].get("Maintainer")
+
+ def get_original_maintainer(self):
+ """Returns the value of the XSBC-Original-Maintainer field."""
+ return self.paragraphs[0].get("XSBC-Original-Maintainer")
+
+ def dump(self):
+ if self.is_roundtrip_safe:
+ content = self._dump_rts_file()
+ else:
+ content = "\n".join(x.dump() for x in self.paragraphs)
+ if self.strip_trailing_whitespace_on_save:
+ content = "\n".join(x.rstrip() for x in content.splitlines()) + "\n"
+ return content
+
+ def _dump_rts_file(self):
+ # Use a custom dump of the RTS parser in order to:
+ # 1) support sorting of paragraphs
+ # 2) normalize whitespace between paragraphs
+ #
+ # Ideally, there would be a simpler way to do this - but for now, this is
+ # the best the RTS parser can offer. (Without the above constraints, we
+ # could just have used `self._deb822_file.dump()`)
+ paragraph_index = 0
+ new_content = ""
+ pending_newline = False
+ for part in self._deb822_file.iter_parts():
+ if isinstance(part, Deb822ParagraphElement):
+ part_content = self.paragraphs[paragraph_index].dump()
+ paragraph_index += 1
+ elif isinstance(part, Deb822Token) and part.is_whitespace:
+ # Normalize empty lines between paragraphs to a single newline.
+ #
+ # Note we do this unconditionally of
+ # strip_trailing_whitespace_on_save because preserving whitespace
+ # between paragraphs while reordering them produce funky results.
+ pending_newline = True
+ continue
+ else:
+ part_content = part.convert_to_text()
+ if pending_newline:
+ new_content += "\n"
+ new_content += part_content
+ return new_content
+
+ def save(self, filename=None):
+ """Saves the control file."""
+ if filename:
+ self.filename = filename
+ content = self.dump()
+ with open(self.filename, "wb") as control_file:
+ control_file.write(content.encode("utf-8"))
+
+ def set_maintainer(self, maintainer):
+ """Sets the value of the Maintainer field."""
+ self.paragraphs[0]["Maintainer"] = maintainer
+
+ def set_original_maintainer(self, original_maintainer):
+ """Sets the value of the XSBC-Original-Maintainer field."""
+ if "XSBC-Original-Maintainer" in self.paragraphs[0]:
+ self.paragraphs[0]["XSBC-Original-Maintainer"] = original_maintainer
+ else:
+ _insert_after(
+ self.paragraphs[0],
+ "Maintainer",
+ "XSBC-Original-Maintainer",
+ original_maintainer,
+ )
diff --git a/scripts/devscripts/logger.py b/scripts/devscripts/logger.py
new file mode 100644
index 0000000..f99de37
--- /dev/null
+++ b/scripts/devscripts/logger.py
@@ -0,0 +1,75 @@
+# logger.py - A simple logging helper class
+#
+# Copyright (C) 2010, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software
+# for any purpose with or without fee is hereby granted, provided
+# that the above copyright notice and this permission notice appear
+# in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+import os
+import sys
+
+
+def escape_arg(arg):
+ """Shell-escape arg, if necessary.
+ Fairly simplistic, doesn't escape anything except whitespace.
+ """
+ if " " not in arg:
+ return arg
+ return '"%s"' % arg.replace("\\", r"\\").replace('"', r"\"")
+
+
+class Logger:
+ script_name = os.path.basename(sys.argv[0])
+ verbose = False
+
+ stdout = sys.stdout
+ stderr = sys.stderr
+
+ @classmethod
+ def _print(cls, format_, message, args=None, stderr=False):
+ if args:
+ message = message % args
+ stream = cls.stderr if stderr else cls.stdout
+ stream.write((format_ + "\n") % (cls.script_name, message))
+
+ @classmethod
+ def command(cls, cmd):
+ if cls.verbose:
+ cls._print("%s: I: %s", " ".join(escape_arg(arg) for arg in cmd))
+
+ @classmethod
+ def debug(cls, message, *args):
+ if cls.verbose:
+ cls._print("%s: D: %s", message, args, stderr=True)
+
+ @classmethod
+ def error(cls, message, *args):
+ cls._print("%s: Error: %s", message, args, stderr=True)
+
+ @classmethod
+ def warn(cls, message, *args):
+ cls._print("%s: Warning: %s", message, args, stderr=True)
+
+ @classmethod
+ def info(cls, message, *args):
+ if cls.verbose:
+ cls._print("%s: I: %s", message, args)
+
+ @classmethod
+ def normal(cls, message, *args):
+ cls._print("%s: %s", message, args)
+
+ @classmethod
+ def set_verbosity(cls, verbose):
+ cls.verbose = verbose
diff --git a/scripts/devscripts/test/__init__.py b/scripts/devscripts/test/__init__.py
new file mode 100644
index 0000000..59d2920
--- /dev/null
+++ b/scripts/devscripts/test/__init__.py
@@ -0,0 +1,67 @@
+# Copyright (C) 2017-2021, Benjamin Drung <benjamin.drung@ionos.com>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Helper functions for testing."""
+
+import inspect
+import os
+import unittest
+
+SCRIPTS = [
+ "debbisect",
+ "debdiff-apply",
+ "debootsnap",
+ "deb-janitor",
+ "reproducible-check",
+ "sadt",
+ "suspicious-source",
+ "wrap-and-sort",
+]
+
+
+def get_source_files() -> list[str]:
+ """Return a list of sources files/directories (to check with flake8/pylint)."""
+ modules = ["devscripts"]
+ py_files = ["setup.py"]
+
+ files = []
+ for code_file in SCRIPTS + modules + py_files:
+ is_script = code_file in SCRIPTS
+ if not os.path.exists(code_file): # pragma: no cover
+ # The alternative path is needed for Debian's pybuild
+ alternative = os.path.join(os.environ.get("OLDPWD", ""), code_file)
+ code_file = alternative if os.path.exists(alternative) else code_file
+ if is_script:
+ with open(code_file, "rb") as script_file:
+ shebang = script_file.readline().decode("utf-8")
+ if "python" in shebang:
+ files.append(code_file)
+ else:
+ files.append(code_file)
+ return files
+
+
+def unittest_verbosity() -> int:
+ """
+ Return the verbosity setting of the currently running unittest.
+
+ If no test is running, return 0.
+ """
+ frame = inspect.currentframe()
+ while frame:
+ self = frame.f_locals.get("self")
+ if isinstance(self, unittest.TestProgram):
+ return self.verbosity
+ frame = frame.f_back
+ return 0 # pragma: no cover
diff --git a/scripts/devscripts/test/pylint.conf b/scripts/devscripts/test/pylint.conf
new file mode 100644
index 0000000..888884e
--- /dev/null
+++ b/scripts/devscripts/test/pylint.conf
@@ -0,0 +1,67 @@
+[MASTER]
+
+# A comma-separated list of package or module names from where C extensions may
+# be loaded. Extensions are loading into the active Python interpreter and may
+# run arbitrary code.
+extension-pkg-allow-list=apt_pkg
+
+# Pickle collected data for later comparisons.
+persistent=no
+
+
+[MESSAGES CONTROL]
+
+# Disable the message, report, category or checker with the given id(s). You
+# can either give multiple identifiers separated by comma (,) or put this
+# option multiple times (only on the command line, not in the configuration
+# file where it should appear only once).You can also use "--disable=all" to
+# disable everything first and then re-enable specific checks. For example, if
+# you want to run only the similarities checker, you can use "--disable=all
+# --enable=similarities". If you want to run only the classes checker, but have
+# no Warning level messages displayed, use"--disable=all --enable=classes
+# --disable=W"
+disable=fixme,locally-disabled,missing-docstring
+
+
+[REPORTS]
+
+# Tells whether to display a full report or only the messages
+reports=no
+
+
+[TYPECHECK]
+
+# List of classes names for which member attributes should not be checked
+# (useful for classes with attributes dynamically set).
+ignored-classes=magic
+
+
+[FORMAT]
+
+# Maximum number of characters on a single line.
+max-line-length=88
+
+# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
+# tab).
+indent-string=' '
+
+
+[BASIC]
+
+# Allow variables called e, f, lp
+good-names=i,j,k,ex,Run,_,e,f,lp,fd,fp,ok
+
+
+[SIMILARITIES]
+
+# Imports are removed from the similarity computation
+ignore-imports=yes
+
+# Minimum lines number of a similarity.
+min-similarity-lines=5
+
+
+[DESIGN]
+
+# Maximum number of arguments per function
+max-args=10
diff --git a/scripts/devscripts/test/test_black.py b/scripts/devscripts/test/test_black.py
new file mode 100644
index 0000000..565018f
--- /dev/null
+++ b/scripts/devscripts/test/test_black.py
@@ -0,0 +1,50 @@
+# Copyright (C) 2021, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+"""Run black code formatter in check mode."""
+
+import subprocess
+import sys
+import unittest
+
+import black
+
+from . import get_source_files, unittest_verbosity
+
+
+class BlackTestCase(unittest.TestCase):
+ """
+ This unittest class provides a test that runs the black code
+ formatter in check mode on the Python source code. The list of
+ source files is provided by the get_source_files() function.
+ """
+
+ def test_black(self) -> None:
+ """Test: Run black code formatter on Python source code."""
+ if int(black.__version__.split(".", 1)[0]) <= 20:
+ self.skipTest("black >= 21 needed")
+ cmd = ["black", "--check", "--diff"] + get_source_files()
+ if unittest_verbosity() >= 2:
+ sys.stderr.write(f"Running following command:\n{' '.join(cmd)}\n")
+ process = subprocess.run(cmd, capture_output=True, check=False, text=True)
+
+ if process.returncode == 1: # pragma: no cover
+ self.fail(
+ f"black found code that needs reformatting:\n{process.stdout.strip()}"
+ )
+ if process.returncode != 0: # pragma: no cover
+ self.fail(
+ f"black exited with code {process.returncode}:\n"
+ f"{process.stdout.strip()}"
+ )
diff --git a/scripts/devscripts/test/test_control.py b/scripts/devscripts/test/test_control.py
new file mode 100644
index 0000000..cb6aa0b
--- /dev/null
+++ b/scripts/devscripts/test/test_control.py
@@ -0,0 +1,280 @@
+# Copyright (C) 2022, Niels Thykier <niels@thykier.net>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""test_control.py - Run unit tests for the Control module"""
+import textwrap
+
+try:
+ from debian._deb822_repro.formatter import (
+ COMMA_SEPARATOR_FT,
+ FormatterContentToken,
+ format_field,
+ )
+except ImportError as e:
+ print(e)
+ COMMA_SEPARATOR = object()
+ FormatterContentToken = object()
+
+ def format_field(formatter, field_name, separator_token, token_iter):
+ raise AssertionError("Test should have been skipped!")
+
+
+from devscripts.control import (
+ HAS_FULL_RTS_FORMATTING,
+ HAS_RTS_PARSER,
+ Control,
+ wrap_and_sort_formatter,
+)
+from devscripts.test import unittest
+
+
+def _dedent(text):
+ """Dedent and remove "EOL" line markers
+
+ Removes ¶ which are used as "EOL" markers. The EOL markers helps humans understand
+ that there is trailing whitespace (and it is significant) but also stops "helpful"
+ editors from pruning it away and thereby ruining the text.
+ """
+ return textwrap.dedent(text).replace("¶", "")
+
+
+def _prune_trailing_whitespace(text):
+ return "\n".join(x.rstrip() for x in text.splitlines()) + (
+ "\n" if text.endswith("\n") else ""
+ )
+
+
+class ControlTestCase(unittest.TestCase):
+ @unittest.skipIf(not HAS_RTS_PARSER, "Requires a newer version of python-debian")
+ def test_rts_parsing(self):
+ orig_content = _dedent(
+ """\
+ Source: devscripts ¶
+ Maintainer: Jane Doe <jane.doe@debian.org>¶
+ # Some comment about Build-Depends: ¶
+ Build-Depends: foo, ¶
+ # We need bar (>= 1.2~) because of reason ¶
+ bar (>=1.2~) ¶
+ ¶
+ Package: devscripts ¶
+ Architecture: arm64¶
+ linux-any ¶
+ # Some comment describing why hurd-i386 would work while hurd-amd64 did not¶
+ hurd-i386¶
+ ¶
+ # This should be the "last" package after sorting¶
+ Package: z-pkg¶
+ Architecture: any¶
+ ¶
+ ¶
+ ¶
+ # Random comment here¶
+ ¶
+ ¶
+ ¶
+ # This should be the second one with -kb and the first with -b¶
+ Package: a-pkg¶
+ Architecture: any¶
+ ¶
+ ¶
+ """
+ )
+
+ # "No change" here being just immediately dumping the content again. This will
+ # only prune empty lines (we do not preserve these in wrap-and-sort).
+ no_change_dump_content = _dedent(
+ """\
+ Source: devscripts ¶
+ Maintainer: Jane Doe <jane.doe@debian.org>¶
+ # Some comment about Build-Depends: ¶
+ Build-Depends: foo, ¶
+ # We need bar (>= 1.2~) because of reason ¶
+ bar (>=1.2~) ¶
+ ¶
+ Package: devscripts ¶
+ Architecture: arm64¶
+ linux-any ¶
+ # Some comment describing why hurd-i386 would work while hurd-amd64 did not¶
+ hurd-i386¶
+ ¶
+ # This should be the "last" package after sorting¶
+ Package: z-pkg¶
+ Architecture: any¶
+ ¶
+ # Random comment here¶
+ ¶
+ # This should be the second one with -kb and the first with -b¶
+ Package: a-pkg¶
+ Architecture: any¶
+ """
+ )
+
+ last_paragraph_swap_no_trailing_space = _dedent(
+ """\
+ Source: devscripts¶
+ Maintainer: Jane Doe <jane.doe@debian.org>¶
+ # Some comment about Build-Depends:¶
+ Build-Depends: foo,¶
+ # We need bar (>= 1.2~) because of reason¶
+ bar (>=1.2~)¶
+ ¶
+ Package: devscripts¶
+ Architecture: arm64¶
+ linux-any¶
+ # Some comment describing why hurd-i386 would work while hurd-amd64 did not¶
+ hurd-i386¶
+ ¶
+ # This should be the second one with -kb and the first with -b¶
+ Package: a-pkg¶
+ Architecture: any¶
+ ¶
+ # Random comment here¶
+ ¶
+ # This should be the "last" package after sorting¶
+ Package: z-pkg¶
+ Architecture: any¶
+ """
+ )
+
+ control = Control(
+ "debian/control", fd=orig_content.splitlines(True), use_rts_parser=True
+ )
+ self.assertEqual(control.dump(), no_change_dump_content)
+
+ control.strip_trailing_whitespace_on_save = True
+ stripped_space = _prune_trailing_whitespace(no_change_dump_content)
+ self.assertNotEqual(stripped_space, no_change_dump_content)
+ self.assertEqual(control.dump(), stripped_space)
+
+ control.paragraphs[-2], control.paragraphs[-1] = (
+ control.paragraphs[-1],
+ control.paragraphs[-2],
+ )
+ self.assertEqual(control.dump(), last_paragraph_swap_no_trailing_space)
+
+ @unittest.skipIf(
+ not HAS_FULL_RTS_FORMATTING, "Requires a newer version of python-debian"
+ )
+ def test_rts_formatter(self):
+ # Note that we skip whitespace and separator tokens because:
+ # 1) The underlying formatters ignores them anyway, so they do not affect
+ # the outcome
+ # 2) It makes the test easier to understand
+ tokens_with_comment = [
+ FormatterContentToken.value_token("foo"),
+ FormatterContentToken.comment_token("# some comment about bar\n"),
+ FormatterContentToken.value_token("bar"),
+ ]
+ tokens_without_comment = [
+ FormatterContentToken.value_token("foo"),
+ FormatterContentToken.value_token("bar"),
+ ]
+
+ tokens_very_long_content = [
+ FormatterContentToken.value_token("foo"),
+ FormatterContentToken.value_token("bar"),
+ FormatterContentToken.value_token("some-very-long-token"),
+ FormatterContentToken.value_token("this-should-trigger-a-wrap"),
+ FormatterContentToken.value_token("with line length 20"),
+ FormatterContentToken.value_token(
+ "and (also) show we do not mash up spaces"
+ ),
+ FormatterContentToken.value_token("inside value tokens"),
+ ]
+
+ tokens_starting_comment = [
+ FormatterContentToken.comment_token("# some comment about foo\n"),
+ FormatterContentToken.value_token("foo"),
+ FormatterContentToken.value_token("bar"),
+ ]
+
+ formatter_stl = wrap_and_sort_formatter(
+ 1, # -s
+ immediate_empty_line=True, # -s
+ trailing_separator=True, # -t
+ max_line_length_one_liner=20, # --max-line-length
+ )
+ formatter_sl = wrap_and_sort_formatter(
+ 1, # -s
+ immediate_empty_line=True, # -s
+ trailing_separator=False, # No -t
+ max_line_length_one_liner=20, # --max-line-length
+ )
+ actual = format_field(
+ formatter_stl, "Depends", COMMA_SEPARATOR_FT, tokens_without_comment
+ )
+ # Without comments, format this as one line
+ expected = textwrap.dedent(
+ """\
+ Depends: foo, bar,
+ """
+ )
+ self.assertEqual(actual, expected)
+
+ # With comments, we degenerate into "wrap_always" mode (for simplicity)
+ actual = format_field(
+ formatter_stl, "Depends", COMMA_SEPARATOR_FT, tokens_with_comment
+ )
+ expected = textwrap.dedent(
+ """\
+ Depends:
+ foo,
+ # some comment about bar
+ bar,
+ """
+ )
+ self.assertEqual(actual, expected)
+
+ # Starting with a comment should also work
+ actual = format_field(
+ formatter_stl, "Depends", COMMA_SEPARATOR_FT, tokens_starting_comment
+ )
+ expected = textwrap.dedent(
+ """\
+ Depends:
+ # some comment about foo
+ foo,
+ bar,
+ """
+ )
+ self.assertEqual(actual, expected)
+
+ # Without trailing comma
+ actual = format_field(
+ formatter_sl, "Depends", COMMA_SEPARATOR_FT, tokens_without_comment
+ )
+ expected = textwrap.dedent(
+ """\
+ Depends: foo, bar
+ """
+ )
+ self.assertEqual(actual, expected)
+
+ # Triggering a wrap
+ actual = format_field(
+ formatter_sl, "Depends", COMMA_SEPARATOR_FT, tokens_very_long_content
+ )
+ expected = textwrap.dedent(
+ """\
+ Depends:
+ foo,
+ bar,
+ some-very-long-token,
+ this-should-trigger-a-wrap,
+ with line length 20,
+ and (also) show we do not mash up spaces,
+ inside value tokens
+ """
+ )
+ self.assertEqual(actual, expected)
diff --git a/scripts/devscripts/test/test_debootsnap.py b/scripts/devscripts/test/test_debootsnap.py
new file mode 100644
index 0000000..c1e71fd
--- /dev/null
+++ b/scripts/devscripts/test/test_debootsnap.py
@@ -0,0 +1,56 @@
+# Copyright (C) 2023, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+"""Test debootsnap script."""
+
+import contextlib
+import io
+import tempfile
+import unittest
+import unittest.mock
+
+from debootsnap import main, parse_pkgs
+
+
+class TestDebootsnap(unittest.TestCase):
+ """Test debootsnap script."""
+
+ @unittest.mock.patch("shutil.which")
+ def test_missing_tools(self, which_mock) -> None:
+ """Test debootsnap fails cleanly if required binaries are missing."""
+ which_mock.return_value = None
+ stderr = io.StringIO()
+ with contextlib.redirect_stderr(stderr):
+ with self.assertRaisesRegex(SystemExit, "1"):
+ main(["--packages=pkg1:arch=ver1", "chroot.tar"])
+ self.assertEqual(
+ stderr.getvalue(), "equivs-build is required but not installed\n"
+ )
+ which_mock.assert_called_once_with("equivs-build")
+
+ def test_parse_pkgs_from_file(self) -> None:
+ """Test parse_pkgs() for a given file name."""
+ with tempfile.NamedTemporaryFile(mode="w", prefix="devscripts-") as pkgfile:
+ pkgfile.write("pkg1:arch=ver1\npkg2:arch=ver2\n")
+ pkgfile.flush()
+ pkgs = parse_pkgs(pkgfile.name)
+ self.assertEqual(pkgs, [[("pkg1", "arch", "ver1"), ("pkg2", "arch", "ver2")]])
+
+ def test_parse_pkgs_missing_file(self) -> None:
+ """Test parse_pkgs() for a missing file name."""
+ stderr = io.StringIO()
+ with contextlib.redirect_stderr(stderr):
+ with self.assertRaisesRegex(SystemExit, "1"):
+ parse_pkgs("/non-existing/pkgfile")
+ self.assertEqual(stderr.getvalue(), "/non-existing/pkgfile does not exist\n")
diff --git a/scripts/devscripts/test/test_flake8.py b/scripts/devscripts/test/test_flake8.py
new file mode 100644
index 0000000..9781a5d
--- /dev/null
+++ b/scripts/devscripts/test/test_flake8.py
@@ -0,0 +1,59 @@
+# Copyright (C) 2017-2018, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""Run flake8 check."""
+
+import subprocess
+import sys
+import unittest
+
+from . import get_source_files, unittest_verbosity
+
+
+class Flake8TestCase(unittest.TestCase):
+ """
+ This unittest class provides a test that runs the flake8 code
+ checker (which combines pycodestyle and pyflakes) on the Python
+ source code. The list of source files is provided by the
+ get_source_files() function.
+ """
+
+ def test_flake8(self) -> None:
+ """Test: Run flake8 on Python source code."""
+ cmd = [
+ sys.executable,
+ "-m",
+ "flake8",
+ "--ignore=E203,W503",
+ "--max-line-length=88",
+ ] + get_source_files()
+ if unittest_verbosity() >= 2:
+ sys.stderr.write(f"Running following command:\n{' '.join(cmd)}\n")
+ process = subprocess.run(cmd, capture_output=True, check=False, text=True)
+
+ if process.returncode != 0: # pragma: no cover
+ msgs = []
+ if process.stderr:
+ msgs.append(
+ f"flake8 exited with code {process.returncode} and has"
+ f" unexpected output on stderr:\n{process.stderr.rstrip()}"
+ )
+ if process.stdout:
+ msgs.append(f"flake8 found issues:\n{process.stdout.rstrip()}")
+ if not msgs:
+ msgs.append(
+ f"flake8 exited with code {process.returncode} "
+ "and has no output on stdout or stderr."
+ )
+ self.fail("\n".join(msgs))
diff --git a/scripts/devscripts/test/test_help.py b/scripts/devscripts/test/test_help.py
new file mode 100644
index 0000000..39335f8
--- /dev/null
+++ b/scripts/devscripts/test/test_help.py
@@ -0,0 +1,84 @@
+# test_help.py - Ensure scripts can run --help.
+#
+# Copyright (C) 2010, Stefano Rivera <stefanor@ubuntu.com>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+import fcntl
+import os
+import select
+import signal
+import subprocess
+import time
+import unittest
+
+from . import SCRIPTS
+
+TIMEOUT = 5
+
+
+def load_tests(loader, tests, pattern): # pylint: disable=unused-argument
+ "Give HelpTestCase a chance to populate before loading its test cases"
+ suite = unittest.TestSuite()
+ HelpTestCase.populate()
+ suite.addTests(loader.loadTestsFromTestCase(HelpTestCase))
+ return suite
+
+
+class HelpTestCase(unittest.TestCase):
+ @classmethod
+ def populate(cls):
+ for script in SCRIPTS:
+ setattr(cls, "test_" + script, cls.make_help_tester(script))
+
+ @classmethod
+ def make_help_tester(cls, script):
+ def tester(self):
+ with subprocess.Popen(
+ ["./" + script, "--help"],
+ close_fds=True,
+ stdin=subprocess.DEVNULL,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ ) as process:
+ started = time.time()
+ out = []
+
+ fds = [process.stdout.fileno(), process.stderr.fileno()]
+ for fd in fds:
+ fcntl.fcntl(
+ fd,
+ fcntl.F_SETFL,
+ fcntl.fcntl(fd, fcntl.F_GETFL) | os.O_NONBLOCK,
+ )
+
+ while time.time() - started < TIMEOUT:
+ for fd in select.select(fds, [], fds, TIMEOUT)[0]:
+ out.append(os.read(fd, 1024))
+ if process.poll() is not None:
+ break
+
+ if process.poll() is None:
+ os.kill(process.pid, signal.SIGTERM)
+ time.sleep(1)
+ if process.poll() is None:
+ os.kill(process.pid, signal.SIGKILL)
+
+ self.assertEqual(
+ process.poll(),
+ 0,
+ f"{script} failed to return usage within {TIMEOUT} seconds.\n"
+ f"Output:\n{b''.join(out)}",
+ )
+
+ return tester
diff --git a/scripts/devscripts/test/test_isort.py b/scripts/devscripts/test/test_isort.py
new file mode 100644
index 0000000..4190859
--- /dev/null
+++ b/scripts/devscripts/test/test_isort.py
@@ -0,0 +1,42 @@
+# Copyright (C) 2021, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+"""Run isort to check if Python import definitions are sorted."""
+
+import subprocess
+import sys
+import unittest
+
+from . import get_source_files, unittest_verbosity
+
+
+class IsortTestCase(unittest.TestCase):
+ """
+ This unittest class provides a test that runs isort to check if
+ Python import definitions are sorted. The list of source files
+ is provided by the get_source_files() function.
+ """
+
+ def test_isort(self) -> None:
+ """Test: Run isort on Python source code."""
+ cmd = ["isort", "--check-only", "--diff"] + get_source_files()
+ if unittest_verbosity() >= 2:
+ sys.stderr.write(f"Running following command:\n{' '.join(cmd)}\n")
+ process = subprocess.run(cmd, capture_output=True, check=False, text=True)
+
+ if process.returncode != 0: # pragma: no cover
+ self.fail(
+ f"isort found unsorted Python import definitions:\n"
+ f"{process.stdout.strip()}"
+ )
diff --git a/scripts/devscripts/test/test_logger.py b/scripts/devscripts/test/test_logger.py
new file mode 100644
index 0000000..e6322ea
--- /dev/null
+++ b/scripts/devscripts/test/test_logger.py
@@ -0,0 +1,57 @@
+# test_logger.py - Test devscripts.logger.Logger.
+#
+# Copyright (C) 2012, Stefano Rivera <stefanor@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+import io
+import sys
+
+from devscripts.logger import Logger
+from devscripts.test import unittest
+
+
+class LoggerTestCase(unittest.TestCase):
+ def setUp(self):
+ Logger.stdout = io.StringIO()
+ Logger.stderr = io.StringIO()
+ self._script_name = Logger.script_name
+ Logger.script_name = "test"
+ self._verbose = Logger.verbose
+
+ def tearDown(self):
+ Logger.stdout = sys.stdout
+ Logger.stderr = sys.stderr
+ Logger.script_name = self._script_name
+ Logger.verbose = self._verbose
+
+ def test_command(self):
+ # pylint: disable=no-member
+ Logger.command(("ls", "a b"))
+ self.assertEqual(Logger.stdout.getvalue(), "")
+ Logger.set_verbosity(True)
+ Logger.command(("ls", "a b"))
+ self.assertEqual(Logger.stdout.getvalue(), 'test: I: ls "a b"\n')
+ self.assertEqual(Logger.stderr.getvalue(), "")
+
+ def test_no_args(self):
+ # pylint: disable=no-member
+ Logger.normal("hello %s")
+ self.assertEqual(Logger.stdout.getvalue(), "test: hello %s\n")
+ self.assertEqual(Logger.stderr.getvalue(), "")
+
+ def test_args(self):
+ # pylint: disable=no-member
+ Logger.normal("hello %s", "world")
+ self.assertEqual(Logger.stdout.getvalue(), "test: hello world\n")
+ self.assertEqual(Logger.stderr.getvalue(), "")
diff --git a/scripts/devscripts/test/test_pylint.py b/scripts/devscripts/test/test_pylint.py
new file mode 100644
index 0000000..35c0162
--- /dev/null
+++ b/scripts/devscripts/test/test_pylint.py
@@ -0,0 +1,82 @@
+# Copyright (C) 2010, Stefano Rivera <stefanor@debian.org>
+# Copyright (C) 2017-2018, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+"""Run pylint."""
+
+import os
+import re
+import subprocess
+import sys
+import unittest
+
+import pylint
+from debian.debian_support import Version
+
+from . import get_source_files, unittest_verbosity
+
+CONFIG = os.path.join(os.path.dirname(__file__), "pylint.conf")
+
+
+def check_pylint_version():
+ return Version(pylint.__version__) >= Version("2.11.1")
+
+
+@unittest.skipIf(not check_pylint_version(), "pylint version not supported")
+class PylintTestCase(unittest.TestCase):
+ """
+ This unittest class provides a test that runs the pylint code check
+ on the Python source code. The list of source files is provided by
+ the get_source_files() function and pylint is purely configured via
+ a config file.
+ """
+
+ def test_pylint(self) -> None:
+ """Test: Run pylint on Python source code."""
+ cmd = ["pylint", "--rcfile=" + CONFIG, "--"] + get_source_files()
+ if unittest_verbosity() >= 2:
+ sys.stderr.write(f"Running following command:\n{' '.join(cmd)}\n")
+ process = subprocess.run(cmd, capture_output=True, check=False, text=True)
+
+ if process.returncode != 0: # pragma: no cover
+ # Strip trailing summary (introduced in pylint 1.7).
+ # This summary might look like:
+ #
+ # ------------------------------------
+ # Your code has been rated at 10.00/10
+ #
+ out = re.sub(
+ "^(-+|Your code has been rated at .*)$",
+ "",
+ process.stdout,
+ flags=re.MULTILINE,
+ ).rstrip()
+
+ # Strip logging of used config file (introduced in pylint 1.8)
+ err = re.sub("^Using config file .*\n", "", process.stderr.rstrip())
+
+ msgs = []
+ if err:
+ msgs.append(
+ f"pylint exited with code {process.returncode} "
+ f"and has unexpected output on stderr:\n{err}"
+ )
+ if out:
+ msgs.append(f"pylint found issues:\n{out}")
+ if not msgs:
+ msgs.append(
+ f"pylint exited with code {process.returncode} "
+ "and has no output on stdout or stderr."
+ )
+ self.fail("\n".join(msgs))
diff --git a/scripts/devscripts/test/test_suspicious_source.py b/scripts/devscripts/test/test_suspicious_source.py
new file mode 100644
index 0000000..bb61156
--- /dev/null
+++ b/scripts/devscripts/test/test_suspicious_source.py
@@ -0,0 +1,41 @@
+# Copyright (C) 2023, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+"""Test suspicious-source script."""
+
+import pathlib
+import subprocess
+import tempfile
+import unittest
+
+
+class TestSuspiciousSource(unittest.TestCase):
+ """Test suspicious-source script."""
+
+ @staticmethod
+ def _run_suspicious_source(directory: str) -> str:
+ suspicious_source = subprocess.run(
+ ["./suspicious-source", "-d", directory],
+ check=True,
+ stdout=subprocess.PIPE,
+ text=True,
+ )
+ return suspicious_source.stdout.strip()
+
+ def test_python_sript(self) -> None:
+ """Test not complaining about Python code."""
+ with tempfile.TemporaryDirectory(prefix="devscripts-") as tmpdir:
+ python_file = pathlib.Path(tmpdir) / "example.py"
+ python_file.write_text("#!/usr/bin/python3\nprint('hello world')\n")
+ self.assertEqual(self._run_suspicious_source(tmpdir), "")
diff --git a/scripts/dget.pl b/scripts/dget.pl
new file mode 100755
index 0000000..46bddc9
--- /dev/null
+++ b/scripts/dget.pl
@@ -0,0 +1,745 @@
+#!/usr/bin/perl
+# vim: set ai shiftwidth=4 tabstop=4 expandtab:
+
+# dget - Download Debian source and binary packages
+# Copyright (C) 2005-2013 Christoph Berg <myon@debian.org>
+# Modifications Copyright (C) 2005-06 Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+# 2005-10-04 cb: initial release
+# 2005-12-11 cb: -x option, update documentation
+# 2005-12-31 cb: -b, -q options, use getopt
+# 2006-01-10 cb: support new binnmu version scheme
+# 2006-11-12 cb: also look in other places in the local filesystem (e.g. pbuilder result dir)
+# Later modifications: see debian/changelog
+
+use strict;
+use warnings;
+use Cwd qw(abs_path);
+use IO::Dir;
+use IO::File;
+use Digest::MD5;
+use Devscripts::Compression;
+use Dpkg::Control;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use File::Basename;
+
+# global variables
+
+my $progname = basename($0, '.pl'); # the '.pl' is for when we're debugging
+my $found_dsc;
+my $wget;
+my $opt;
+my $backup_dir = "backup";
+my @dget_path = ("/var/cache/apt/archives");
+my $modified_conf_msg;
+
+my $compression_re = compression_get_file_extension_regex();
+
+# use curl if installed, wget otherwise
+if (system("command -v curl >/dev/null 2>&1") == 0) {
+ $wget = "curl";
+} elsif (system("command -v wget >/dev/null 2>&1") == 0) {
+ $wget = "wget";
+} else {
+ die
+"$progname: can't find either curl or wget; you need at least one of these\ninstalled to run me!\n";
+}
+
+# functions
+
+sub usage {
+ print <<"EOT";
+Usage: $progname [options] URL ...
+ $progname [options] [--all] package[=version] ...
+
+Downloads Debian packages (source and binary) from the specified URLs (first form),
+or using the mirror configured in /etc/apt/sources.list(.d) (second form).
+It is capable of downloading several packages at once.
+
+ -a, --all Package is a source package; download all binary packages
+ -b, --backup Move files that would be overwritten to ./backup
+ -q, --quiet Suppress wget/curl output
+ -d, --download-only
+ Do not extract downloaded source
+ -x, --extract Unpack downloaded source (default)
+ -u, --allow-unauthenticated
+ Do not attempt to verify source package signature
+ --build Build package with dpkg-buildpackage after download
+ --path DIR Check these directories in addition to the apt archive;
+ if DIR='' then clear current list (may be used multiple
+ times)
+ -k, --insecure Do not check SSL certificates when downloading
+ --no-cache Disable server-side HTTP cache
+ --no-conf Don\'t read devscripts config files;
+ must be the first option given
+ -h, --help This message
+ -V, --version Version information
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOT
+}
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2005-08 by Christoph Berg <myon\@debian.org>.
+Modifications copyright 2005-06 by Julian Gilbey <jdg\@debian.org>.
+All rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+sub wget {
+ my ($file, $url) = @_;
+
+ # schemes not supported by all backends
+ if ($url =~ m!^(file|copy):(.+)!) {
+ my $path = abs_path($2);
+ unless ($path) {
+ warn "$progname: unable to resolve full path for $2: $!\n";
+ return 1;
+ }
+ if ($1 eq "copy" or not link($path, $file)) {
+ system 'cp', '-aL', $path, $file;
+ return $? >> 8;
+ }
+ return;
+ }
+
+ my @cmd = ($wget);
+ # curl does not follow document moved headers, and does not exit
+ # with a non-zero error code by default if a document is not found
+ # also try to retain the mtime of the remote file
+ push @cmd, "-f", "-L", "-R" if $wget eq "curl";
+ push @cmd, ($wget eq "wget" ? "-nv" : ("-s", "-S")) if $opt->{'quiet'};
+ push @cmd, ($wget eq "wget" ? "--no-check-certificate" : "--insecure")
+ if $opt->{'insecure'};
+ push @cmd,
+ ($wget eq "wget" ? "--no-cache" : ("--header", "Pragma: no-cache"))
+ if $opt->{'no-cache'};
+ push @cmd, ($wget eq "wget" ? "-O" : "-o");
+ system @cmd, $file, $url;
+ return $? >> 8;
+}
+
+sub backup_or_unlink {
+ my $file = shift;
+ return unless -e $file;
+ if ($opt->{'backup'}) {
+ unless (-d $backup_dir) {
+ mkdir $backup_dir or die "mkdir $backup_dir: $!";
+ }
+ rename $file, "$backup_dir/$file"
+ or die "rename $file $backup_dir/$file: $!";
+ } else {
+ unlink $file or die "unlink $file: $!";
+ }
+}
+
+# some files both are in .dsc and .changes, download only once
+my %seen;
+
+sub get_file {
+ my ($dir, $file, $md5sum) = @_;
+ return 1 if $seen{$file};
+
+ if ($md5sum eq "unlink") {
+ backup_or_unlink($file);
+ }
+
+ # check the existing file's md5sum
+ if (-e $file) {
+ my $md5 = Digest::MD5->new;
+ my $fh5 = new IO::File($file) or die "$file: $!";
+ my $md5sum_new = Digest::MD5->new->addfile($fh5)->hexdigest();
+ close $fh5;
+ if (not $md5sum or ($md5sum_new eq $md5sum)) {
+ print "$progname: using existing $file\n" unless $opt->{'quiet'};
+ } else {
+ print "$progname: removing $file (md5sum does not match)\n"
+ unless $opt->{'quiet'};
+ backup_or_unlink($file);
+ }
+ }
+
+ # look for the file in other local directories
+ unless (-e $file) {
+ foreach my $path (@dget_path) {
+ next unless -e "$path/$file";
+
+ my $fh5 = new IO::File("$path/$file") or next;
+ my $md5 = Digest::MD5->new;
+ my $md5sum_new = Digest::MD5->new->addfile($fh5)->hexdigest();
+ close $fh5;
+
+ if ($md5sum_new eq $md5sum) {
+ if (link "$path/$file", $file) {
+ print "$progname: using $path/$file (hardlink)\n"
+ unless $opt->{'quiet'};
+ } else {
+ print "$progname: using $path/$file (copy)\n"
+ unless $opt->{'quiet'};
+ system 'cp', '-aL', "$path/$file", $file;
+ }
+ last;
+ }
+ }
+ }
+
+ # finally get it from the web
+ unless (-e $file) {
+ print "$progname: retrieving $dir/$file\n" unless $opt->{'quiet'};
+ if (wget($file, "$dir/$file")) {
+ warn "$progname: $wget $file $dir/$file failed\n";
+ unlink $file;
+ }
+ }
+
+ # try apt-get if it is still not there
+ my $ext = $compression_re;
+ if (not -e $file
+ and $file =~ m!^([a-z0-9][a-z0-9.+-]+)_[^/]+\.(?:diff|tar)\.$ext$!) {
+ my @cmd = ('apt-get', 'source', '--print-uris', $1);
+ my $cmd = join ' ', @cmd;
+ open(my $apt, '-|', @cmd) or die "$cmd: $!";
+ while (<$apt>) {
+ if (/'(\S+)'\s+\S+\s+\d+\s+([\da-f]+)/i and $2 eq $md5sum) {
+ if (wget($file, $1)) {
+ warn "$progname: $wget $file $1 failed\n";
+ unlink $file;
+ }
+ }
+ }
+ close $apt;
+ }
+
+ # still not there, return
+ unless (-e $file) {
+ return 0;
+ }
+
+ $seen{$file} = 1;
+
+ if ($file =~ /\.(?:changes|dsc)$/) {
+ parse_file($dir, $file);
+ }
+ if ($file =~ /\.dsc$/) {
+ $found_dsc = $file;
+ }
+
+ return 1;
+}
+
+sub parse_file {
+ my ($dir, $file) = @_;
+
+ my $fh = new IO::File($file);
+ open $fh, $file or die "$file: $!";
+ while (<$fh>) {
+ if (/^ ([0-9a-f]{32}) (?:\S+ )*(\S+)$/) {
+ my ($_sum, $_file) = ($1, $2);
+ $_file !~ m,[/\x00],
+ or die "File name contains invalid characters: $_file";
+ get_file($dir, $_file, $_sum) or return;
+ }
+ }
+ close $fh;
+}
+
+sub quote_version {
+ my $version = shift;
+ $version = quotemeta($version);
+ $version =~ s/^([^:]+:)/(?:$1)?/; # Epochs are not part of the filename
+ $version
+ =~ s/-([^.-]+)$/-$1(?:\\+b\\d+|\.0\.\\d+)?/; # BinNMU: -x -> -x.0.1 -x+by
+ $version =~ s/-([^.-]+\.[^.-]+)$/-$1(?:\\+b\\d+|\.\\d+)?/
+ ; # -x.y -> -x.y.1 -x.y+bz
+ return $version;
+}
+
+# we reinvent "apt-get -d install" here, without requiring root
+# (and we do not download dependencies)
+sub apt_get {
+ my ($package, $version) = @_;
+
+ my ($archpackage, $arch) = $package;
+ ($package, $arch) = split(/:/, $package, 2);
+
+ my $qpackage = quotemeta($package);
+ my $qversion = quote_version($version) if $version;
+ my @hosts;
+
+ my $apt = IO::File->new("LC_ALL=C apt-cache policy $archpackage |")
+ or die "$!";
+ OUTER: while (<$apt>) {
+ if (not $version and /^ Candidate: (.+)/) {
+ $version = $1;
+ $qversion = quote_version($version);
+ }
+ if ($qversion and /^ [ *]{3} ($qversion) \d/) {
+ while (<$apt>) {
+ last OUTER unless /^ *(?:\d+) (\S+)/;
+ (my $host = $1) =~ s@/$@@;
+ next if $host eq '/var/lib/dpkg/status';
+ push @hosts, $host;
+ }
+ }
+ }
+ close $apt;
+ unless ($version) {
+ die "$progname: $archpackage has no installation candidate\n";
+ }
+ unless (@hosts) {
+ die
+"$progname: no hostnames in apt-cache policy $archpackage for version $version found\n";
+ }
+
+ $apt = IO::File->new("LC_ALL=C apt-cache show $archpackage=$version |")
+ or die "$!";
+ my ($v, $p, $filename, $md5sum);
+ while (<$apt>) {
+ if (/^Package: $qpackage$/) {
+ $p = $package;
+ }
+ if (/^Version: $qversion$/) {
+ $v = $version;
+ }
+ if (/^Filename: (.*)/) {
+ $filename = $1;
+ }
+ if (/^MD5sum: (.*)/) {
+ $md5sum = $1;
+ }
+ if (/^Description:/) { # we assume this is the last field
+ if ($p and $v and $filename) {
+ last;
+ }
+ undef $p;
+ undef $v;
+ undef $filename;
+ undef $md5sum;
+ }
+ }
+ close $apt;
+
+ unless ($filename) {
+ die "$progname: no filename for $archpackage ($version) found\n";
+ }
+
+ # find deb lines matching the hosts in the policy output
+ my %repositories;
+# the regexp within the map below can be removed and replaced with only the quotemeta statement once bug #154868 is fixed
+ my $host_re = '(?:' . (
+ join '|',
+ map {
+ my $host = quotemeta;
+ $host =~ s@^(\w+\\:\\/\\/[^:/]+)\\/@$1(?::[0-9]+)?\\/@;
+ $host;
+ } @hosts
+ ) . ')';
+
+ my @sources;
+ if (-f "/etc/apt/sources.list") {
+ push @sources, "/etc/apt/sources.list";
+ }
+ my %dir;
+ tie %dir, "IO::Dir", "/etc/apt/sources.list.d";
+ foreach (keys %dir) {
+ next unless /\.list$/;
+ push @sources, "/etc/apt/sources.list.d/$_";
+ }
+
+ foreach my $source (@sources) {
+ $apt = IO::File->new($source) or die "$source: $!";
+ while (<$apt>) {
+ if (/^\s*deb\s*(?:\[[^]]*\]\s*)?($host_re\b)/) {
+ $repositories{$1} = 1;
+ }
+ }
+ close $apt;
+ }
+ unless (%repositories) {
+ die "no repository found in /etc/apt/sources.list or sources.list.d";
+ }
+
+ # try each repository in turn
+ foreach my $repository (keys %repositories) {
+ my ($dir, $file) = ($repository, $filename);
+ if ($filename =~ /(.*)\/([^\/]*)$/) {
+ ($dir, $file) = ("$repository/$1", $2);
+ }
+
+ get_file($dir, $file, $md5sum) and return;
+ }
+ exit 1;
+}
+
+# main program
+
+# Now start by reading configuration files and then command line
+# The next stuff is boilerplate
+
+my ($dget_path, $dget_unpack, $dget_verify);
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'DGET_PATH' => '',
+ 'DGET_UNPACK' => 'yes',
+ 'DGET_VERIFY' => 'yes',
+ );
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= "$var='$config_vars{$var}';\n";
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $dget_path = $config_vars{'DGET_PATH'};
+ $dget_unpack = $config_vars{'DGET_UNPACK'} =~ /^y/i;
+ $dget_verify = $config_vars{'DGET_VERIFY'} =~ /^y/i;
+}
+
+# handle options
+Getopt::Long::Configure('bundling');
+GetOptions(
+ "a|all" => \$opt->{'all'},
+ "b|backup" => \$opt->{'backup'},
+ "q|quiet" => \$opt->{'quiet'},
+ "build" => \$opt->{'build'},
+ "d|download-only" => sub { $dget_unpack = 0 },
+ "x|extract" => sub { $dget_unpack = 1 },
+ "u|allow-unauthenticated" => sub { $dget_verify = 0 },
+ "k|insecure" => \$opt->{'insecure'},
+ "no-cache" => \$opt->{'no-cache'},
+ "noconf|no-conf" => \$opt->{'no-conf'},
+ "path=s" => sub {
+ if ($_[1] eq '') { $dget_path = ''; }
+ else { $dget_path .= ":$_[1]"; }
+ },
+ "h|help" => \$opt->{'help'},
+ "V|version" => \$opt->{'version'},
+ )
+ or die
+ "$progname: unrecognised option. Run $progname --help for more details.\n";
+
+if ($opt->{'help'}) { usage(); exit 0; }
+if ($opt->{'version'}) { version(); exit 0; }
+if ($opt->{'no-conf'}) {
+ die
+"$progname: --no-conf is only acceptable as the first command-line option!\n";
+}
+
+if ($dget_path) {
+ foreach my $p (split /:/, $dget_path) {
+ push @dget_path, $p if -d $p;
+ }
+}
+
+if (!@ARGV) {
+ die
+"Usage: $progname [options] URL|package[=version]\nRun $progname --help for more details.\n";
+}
+
+# handle arguments
+for my $arg (@ARGV) {
+ $found_dsc = "";
+
+ # case 1: URL
+ if ($arg
+ =~ /^((?:copy|file|ftp|gopher|http|rsh|rsync|scp|sftp|ssh|www).*)\/([^\/]+\.\w+)$/
+ ) {
+ get_file($1, $2, "unlink") or exit 1;
+ if ($found_dsc) {
+ if ($dget_verify) { # We are duplicating work here a bit as
+ # dpkg-source -x will also verify signatures. Still, we
+ # also want to barf with -d, and on unsigned packages.
+ system 'dscverify', $found_dsc;
+ exit $? >> 8 if $? >> 8 != 0;
+ }
+ my @cmd = qw(dpkg-source -x);
+ push @cmd, '--no-check' unless $dget_verify;
+ if ($opt->{'build'}) {
+ my @output = `LC_ALL=C @cmd $found_dsc`;
+ my $rc = $?;
+ print @output unless $opt->{'quiet'};
+ exit $rc >> 8 if $rc >> 8 != 0;
+ foreach (@output) {
+ if (
+/^.*dpkg-source:.* (?:.*info.*: )?extracting .* in (.*)/
+ ) {
+ chdir $1;
+ exec 'dpkg-buildpackage', '-b', '-uc';
+ die "Unable to run dpkg-buildpackage: $!";
+ }
+ }
+ } elsif ($dget_unpack) {
+ system @cmd, $found_dsc;
+ exit $? >> 8 if $? >> 8 != 0;
+ }
+ }
+
+ # case 2a: --all srcpackage[=version]
+ } elsif ($opt->{'all'}
+ and $arg =~ /^([a-z0-9.+-:]{2,})(?:=([a-zA-Z0-9.:~+-]+))?$/) {
+ my ($source, $version, $arch) = ($1, $2);
+ ($source, $arch) = split(/:/, $source, 2);
+ my $cmd = "apt-cache showsrc $source";
+ # unfortunately =version doesn't work here, and even if it did, was the
+ # user referring to the source version or the binary version? The code
+ # assumes binary version.
+ #$cmd .= "=$version" if ($version);
+ open my $showsrc, '-|', $cmd;
+ my $c = Dpkg::Control->new(type => CTRL_INDEX_SRC);
+ while ($c->parse($showsrc, $cmd)) {
+ if ($arch) {
+ my @packages = grep { $_ } split /\n/, $c->{'Package-List'};
+ # Find all packages whose architecture is either 'all', 'any',
+ # or the given architecture. The Package-List lines are
+ # $pkg $debtype $section $priority arch=$archlist
+ foreach my $package (@packages) {
+ $package =~ s/^\s*//;
+ my ($binary, $debtype, $section, $priority, $archs)
+ = split(/\s+/, $package, 5);
+ if ($archs =~ m/all/) {
+ eval { apt_get($binary, $version) } or print "$@";
+ } elsif ($archs =~ m/any|[=,]$arch/) {
+ eval { apt_get("$binary:$arch", $version) }
+ or print "$@";
+ }
+ }
+ } else {
+ my @packages = split /, /, $c->{Binary};
+ foreach my $package (@packages) {
+ eval { apt_get($package, $version) } or print "$@";
+ }
+ }
+ last;
+ }
+ close $showsrc;
+
+ # case 2b: package[=version]
+ } elsif ($arg =~ /^([a-z0-9.+-:]{2,})(?:=([a-zA-Z0-9.:~+-]+))?$/) {
+ apt_get($1, $2);
+
+ } else {
+ usage();
+ }
+}
+
+=head1 NAME
+
+dget - Download Debian source and binary packages
+
+=head1 SYNOPSIS
+
+=over
+
+=item B<dget> [I<options>] I<URL> ...
+
+=item B<dget> [I<options>] [B<--all>] I<package>[B<=>I<version>] ...
+
+=back
+
+=head1 DESCRIPTION
+
+B<dget> downloads Debian packages. In the first form, B<dget> fetches
+the requested URLs. If this is a .dsc or .changes file, then B<dget>
+acts as a source-package aware form of B<wget>: it also fetches any
+files referenced in the .dsc/.changes file. The downloaded source is
+then checked with B<dscverify> and, if successful, unpacked by
+B<dpkg-source>.
+
+In the second form, B<dget> downloads a I<binary> package (i.e., a
+I<.deb> file) from the Debian mirror configured in
+/etc/apt/sources.list(.d). Unlike B<apt-get install -d>, it does not
+require root privileges, writes to the current directory, and does not
+download dependencies. If a version number is specified, this version
+of the package is requested. With B<--all>, the list of all binaries for the
+source package I<package> is extracted from the output of
+C<apt-cache showsrc package>.
+
+In both cases dget is capable of getting several packages and/or URLs
+at once.
+
+(Note that I<.udeb> packages used by debian-installer are located in separate
+packages files from I<.deb> packages. In order to use I<.udebs> with B<dget>,
+you will need to have configured B<apt> to use a packages file for
+I<component>/I<debian-installer>).
+
+Before downloading files listed in .dsc and .changes files, and before
+downloading binary packages, B<dget> checks to see whether any of
+these files already exist. If they do, then their md5sums are
+compared to avoid downloading them again unnecessarily. B<dget> also
+looks for matching files in I</var/cache/apt/archives> and directories
+given by the B<--path> option or specified in the configuration files
+(see below). Finally, if downloading (.orig).tar.gz or .diff.gz files
+fails, dget consults B<apt-get source --print-uris>. Download backends
+used are B<curl> and B<wget>, looked for in that order.
+
+B<dget> was written to make it easier to retrieve source packages from
+the web for sponsor uploads. For checking the package with
+B<debdiff>, the last binary version is available via B<dget>
+I<package>, the last source version via B<apt-get source> I<package>.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-a>, B<--all>
+
+Interpret I<package> as a source package name, and download all binaries as
+found in the output of "apt-cache showsrc I<package>". If I<package> is
+arch-qualified, then only binary packages which are "Arch: all", "Arch: any",
+or "Arch: $arch" will be downloaded.
+
+=item B<-b>, B<--backup>
+
+Move files that would be overwritten to I<./backup>.
+
+=item B<-q>, B<--quiet>
+
+Suppress B<wget>/B<curl> non-error output.
+
+=item B<-d>, B<--download-only>
+
+Do not run B<dpkg-source -x> on the downloaded source package. This can
+only be used with the first method of calling B<dget>.
+
+=item B<-x>, B<--extract>
+
+Run B<dpkg-source -x> on the downloaded source package to unpack it.
+This option is the default and can only be used with the first method of
+calling B<dget>.
+
+=item B<-u>, B<--allow-unauthenticated>
+
+Do not attempt to verify the integrity of downloaded source packages
+using B<dscverify>.
+
+=item B<--build>
+
+Run B<dpkg-buildpackage -b -uc> on the downloaded source package.
+
+=item B<--path> I<DIR>[B<:>I<DIR> ...]
+
+In addition to I</var/cache/apt/archives>, B<dget> uses the
+colon-separated list given as argument to B<--path> to find files with
+a matching md5sum. For example: "--path
+/srv/pbuilder/result:/home/cb/UploadQueue". If DIR is empty (i.e.,
+"--path ''" is specified), then any previously listed directories
+or directories specified in the configuration files will be ignored.
+This option may be specified multiple times, and all of the
+directories listed will be searched; hence, the above example could
+have been written as: "--path /srv/pbuilder/result --path
+/home/cb/UploadQueue".
+
+=item B<-k>, B<--insecure>
+
+Allow SSL connections to untrusted hosts.
+
+=item B<--no-cache>
+
+Bypass server-side HTTP caches by sending a B<Pragma: no-cache> header.
+
+=item B<-h>, B<--help>
+
+Show a help message.
+
+=item B<-V>, B<--version>
+
+Show version information.
+
+=back
+
+=head1 CONFIGURATION VARIABLES
+
+The two configuration files F</etc/devscripts.conf> and
+F<~/.devscripts> are sourced by a shell in that order to set
+configuration variables. Command line options can be used to override
+configuration file settings. Environment variable settings are
+ignored for this purpose. The currently recognised variable is:
+
+=over 4
+
+=item B<DGET_PATH>
+
+This can be set to a colon-separated list of directories in which to
+search for files in addition to the default
+I</var/cache/apt/archives>. It has the same effect as the B<--path>
+command line option. It is not set by default.
+
+=item B<DGET_UNPACK>
+
+Set to 'no' to disable extracting downloaded source packages. Default
+is 'yes'.
+
+=item B<DGET_VERIFY>
+
+Set to 'no' to disable checking signatures of downloaded source
+packages. Default is 'yes'.
+
+=back
+
+=head1 EXAMPLES
+
+Download all I<.deb> files for the previous version of a package and run B<debdiff>
+on them:
+
+ dget --all mypackage=1.2-1
+ debdiff --from *_1.2-1_*.deb --to *_1.2-2_*.deb
+
+=head1 BUGS AND COMPATIBILITY
+
+B<dget> I<package> should be implemented in B<apt-get install -d>.
+
+Before devscripts version 2.10.17, the default was not to extract the
+downloaded source. Set DGET_UNPACK=no to revert to the old behaviour.
+
+=head1 AUTHOR
+
+This program is Copyright (C) 2005-2013 by Christoph Berg <myon@debian.org>.
+Modifications are Copyright (C) 2005-06 by Julian Gilbey <jdg@debian.org>.
+
+This program is licensed under the terms of the GPL, either version 2
+of the License, or (at your option) any later version.
+
+=head1 SEE ALSO
+
+B<apt-get>(1), B<curl>(1), B<debcheckout>(1), B<debdiff>(1), B<dpkg-source>(1),
+B<wget>(1)
diff --git a/scripts/diff2patches.1 b/scripts/diff2patches.1
new file mode 100644
index 0000000..f474dc3
--- /dev/null
+++ b/scripts/diff2patches.1
@@ -0,0 +1,50 @@
+.TH "diff2patches" "1" "" "Raphael Geissert <atomo64@gmail.com>" ""
+.SH "NAME"
+.LP
+diff2patches \- Extract non\-debian/ patches from .diff.gz files
+.SH "SYNTAX"
+.LP
+\fBdiff2patches \fIfilename\fP
+.br
+\fBdiff2patches \-\-help\fR|\fB\-\-version\fP
+.SH "DESCRIPTION"
+.LP
+Extracts patches from .diff.gz which apply to files outside the
+\*(lqdebian/\*(rq directory scope. A patch is created for each modified file.
+Each patch is named according to the path of the modified file, with \*(lq/\*(rq
+replaced by \*(lq___\*(rq, and an extension of \*(lq.patch\*(rq.
+.SH "OPTIONS"
+.LP
+.TP 4
+\fB\fIfilename\fP\fR
+Extract patches from \fB\fIfilename\fP\fR which apply outside the
+\*(lqdebian/\*(rq directory.
+.TP
+\fB\-\-help\fR
+Output help information and exit.
+.TP
+\fB\-\-version\fR
+Output version information and exit.
+.SH "FILES"
+.TP
+\fIdebian/control\fP
+Existence of this file is tested before any patch is extracted.
+.TP
+\fIdebian/\fP
+.TQ
+\fIdebian/patches/\fP
+Patches are extracted to one of these directories. \*(lqdebian/patches/\*(rq is
+preferred, if it exists. If \fIDEB_PATCHES\fP is present in the environment,
+it will override this behavior (see \*(lqENVIRONMENT VARIABLES\*(rq section
+below).
+.SH "ENVIRONMENT VARIABLES"
+.TP
+\fBDEB_PATCHES\fP
+When defined and points to an existing directory, patches are extracted in that directory
+and not under \*(lqdebian/\*(rq nor \*(lqdebian/patches/\*(rq.
+.SH "SEE ALSO"
+.LP
+\fBcombinediff\fR(1)
+.SH "AUTHOR"
+.LP
+Raphael Geissert <atomo64@gmail.com>
diff --git a/scripts/diff2patches.sh b/scripts/diff2patches.sh
new file mode 100755
index 0000000..fa5fd6a
--- /dev/null
+++ b/scripts/diff2patches.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+####################
+# Copyright (C) 2007, 2008 by Raphael Geissert <atomo64@gmail.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 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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 file If not, see <https://www.gnu.org/licenses/>.
+#
+# On Debian systems, the complete text of the GNU General
+# Public License 3 can be found in '/usr/share/common-licenses/GPL-3'.
+####################
+
+set -e
+
+PROGNAME=${0##*/}
+
+usage() {
+ echo \
+"Usage: $PROGNAME [options] FILE.diff.gz
+ Options:
+ --help Show this message
+ --version Show version and copyright information
+ debian/control must exist on the current path for this script to work
+ If debian/patches exists and is a directory, patches are extracted there,
+ otherwise they are extracted under debian/ (unless the environment variable
+ DEB_PATCHES is defined and points to a valid directory, in which case
+ patches are extracted there)."
+}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2007, 2008 by Raphael Geissert, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 3 or later."
+}
+
+case "$1" in
+ --help) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+esac
+
+if ! which lsdiff > /dev/null 2>&1; then
+ echo "lsdiff was not found in \$PATH, package patchutils probably not installed!"
+ exit 1
+fi
+
+diffgz="$1"
+
+if [ ! -f "$diffgz" ]; then
+ [ -z "$diffgz" ] && diffgz="an unspecified .diff.gz"
+ echo "Couldn't find $diffgz, aborting!"
+ exit 1
+fi
+
+if [ -x /usr/bin/dh_testdir ]; then
+ /usr/bin/dh_testdir || exit 1
+else
+ [ ! -f debian/control ] && echo "Couldn't find debian/control!" && exit 1
+fi
+
+if [ -z "$DEB_PATCHES" ] || [ ! -d "$DEB_PATCHES" ]; then
+ DEB_PATCHES=debian
+ [ -d debian/patches ] && DEB_PATCHES=debian/patches
+else
+ DEB_PATCHES="$(readlink -f "$DEB_PATCHES")"
+fi
+
+echo "Patches will be extracted under $DEB_PATCHES/"
+
+FILES=$(zcat "$diffgz" | lsdiff --strip 1 | grep -v ^debian/) || \
+ echo "$(basename "$diffgz") doesn't contain any patch outside debian/"
+
+for file in $FILES; do
+ [ ! -z "$file" ] || continue
+ echo -n "Extracting $file..."
+ newFileName="$DEB_PATCHES/$(echo "$file" | sed 's#/#___#g').patch"
+ zcat "$diffgz" | filterdiff -i "$file" -p1 > "$newFileName"
+ echo "done"
+done
+
+exit
diff --git a/scripts/dpkg-depcheck.1 b/scripts/dpkg-depcheck.1
new file mode 100644
index 0000000..7a546a5
--- /dev/null
+++ b/scripts/dpkg-depcheck.1
@@ -0,0 +1,130 @@
+.TH DPKG-DEPCHECK "1" "March 2002" "dpkg-depcheck" DEBIAN
+.SH NAME
+dpkg-depcheck \- determine packages used to execute a command
+.SH SYNOPSIS
+\fBdpkg-depcheck\fR [\fIoptions\fR] \fIcommand\fR
+.SH DESCRIPTION
+This program runs the specified command under \fBstrace\fR and then
+determines and outputs the packages used in the process. The list can
+be trimmed in various ways as described in the options below. A good
+example of this program would be the command \fBdpkg-depcheck \-b
+debian/rules build\fR, which would give a good first approximation to
+the Build-Depends line needed by a Debian package. Note, however,
+that this does \fInot\fR give any direct information on versions
+required or architecture-specific packages.
+.SH OPTIONS
+.TP
+.BR \-a ", " \-\-all
+Report all packages used to run \fIcommand\fR. This is the default
+behaviour. If used in conjunction with \fB\-b\fR, \fB\-d\fR or
+\fB\-m\fR, gives additional information on those packages skipped by
+these options.
+.TP
+.BR \-b ", " \-\-build-depends
+Do not report any build-essential or essential packages used, or any
+of their (direct or indirect) dependencies.
+.TP
+.BR \-d ", " \-\-ignore-dev-deps
+Do not show packages used which are direct dependencies of \fI\-dev\fR
+packages used. This implies \fB\-b\fR.
+.TP
+.BR \-m ", " \-\-min-deps
+Output a minimal set of packages needed, taking into account direct
+dependencies. Using \fB\-m\fR implies \fB\-d\fR and also \fB\-b\fR.
+.TP
+.BR \-C ", " \-\-C-locale
+Run \fIcommand\fR with the C locale.
+.TP
+.BR \-\-no-C-locale
+Don't change locale when running \fIcommand\fR.
+.TP
+.BR \-l ", " \-\-list-files
+Also report the list of files used in each package.
+.TP
+.BR \-\-no-list-files
+Do not report the files used in each package. Cancels a \fB\-l\fR
+option.
+.TP
+\fB\-o\fR, \fB\-\-output=\fIFILE\fR
+Output the package diagnostics to \fIFILE\fR instead of stdout.
+.TP
+\fB\-O\fR, \fB\-\-strace-output=\fIFILE\fR
+Write the \fBstrace\fR output to \fIFILE\fR when tracing \fIcommand\fR
+instead of using a temporary file.
+.TP
+\fB\-I\fR, \fB\-\-strace-input=\fIFILE\fR
+Get \fBstrace\fR output from \fIFILE\fR instead of tracing
+\fIcommand\fR; \fBstrace\fR must have be run with the \fB\-f \-q\fR
+options for this to work.
+.TP
+\fB\-f\fR, \fB\-\-features=\fILIST\fR
+Enable or disabled features given in the comma-separated \fILIST\fR as
+follows. A feature is enabled with \fI+feature\fR or just
+\fIfeature\fR and disabled with \fI\-feature\fR. The currently
+recognised features are:
+.PD 0
+.RS
+.TP
+.B warn\-local
+Warn if files in \fI/usr/local\fR or \fI/var/local\fR are used.
+Enabled by default.
+.TP
+.B discard-check-version
+Discards \fIexecve\fR when only a \fI\-\-version\fR argument is given
+to the program; this works around some configure scripts that check
+for binaries they don't actually use. Enabled by default.
+.TP
+.B trace-local
+Also try to identify files which are accessed in \fI/usr/local\fR and
+\fI/var/local\fR. Not usually very useful, as Debian does not place
+files in these directories. Disabled by default.
+.TP
+.B catch-alternatives
+Warn about access to files controlled by the Debian \fIalternatives\fR
+mechanism. Enabled by default.
+.TP
+.B discard-sgml-catalogs
+Discards access to SGML catalogs; some SGML tools read all the registered
+catalogs at startup. Files matching the regexp /usr/share/sgml/.*\\.cat are
+recognised as catalogs. Enabled by default.
+.PD
+.RE
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+.BR \-h ", " \-\-help
+Display usage information and exit.
+.TP
+.BR \-v ", " \-\-version
+Display version and copyright information and exit.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variable is:
+.TP
+.B DPKG_DEPCHECK_OPTIONS
+These are options which are parsed before the command-line options.
+For example,
+.IP
+DPKG_DEPCHECK_OPTIONS="\-b \-f-catch-alternatives"
+.IP
+which passes these options to \fBdpkg-depcheck\fR before any
+command-line options are processed. You are advised not to try tricky
+quoting, because of the vagaries of shell quoting!
+.SH "SEE ALSO"
+.BR dpkg (1),
+.BR strace (1),
+.BR devscripts.conf (5),
+.BR update-alternatives (8)
+.SH "COPYING"
+Copyright 2001 Bill Allombert <ballombe@debian.org>.
+Modifications copyright 2002,2003 Julian Gilbey <jdg@debian.org>.
+\fBdpkg-depcheck\fR is free software, covered by the GNU General
+Public License, version 2 or (at your option) any later version,
+and you are welcome to change it and/or distribute copies of it under
+certain conditions. There is absolutely no warranty for
+\fBdpkg-depcheck\fR.
diff --git a/scripts/dpkg-depcheck.pl b/scripts/dpkg-depcheck.pl
new file mode 100755
index 0000000..afa2d75
--- /dev/null
+++ b/scripts/dpkg-depcheck.pl
@@ -0,0 +1,534 @@
+#!/usr/bin/perl
+
+# Copyright Bill Allombert <ballombe@debian.org> 2001.
+# Modifications copyright 2002-2005 Julian Gilbey <jdg@debian.org>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+use 5.006_000; # our() commands
+use Cwd;
+use File::Basename;
+use Getopt::Long;
+
+use Devscripts::Set;
+use Devscripts::Packages;
+use Devscripts::PackageDeps;
+
+# Function prototypes
+sub process_features ($$);
+sub getusedfiles (@);
+sub filterfiles (@);
+
+# Global options
+our %opts;
+
+# A list of files that do not belong to a Debian package but are known
+# to never create a dependency
+our @known_files = (
+ "/etc/ld.so.cache", "/etc/dpkg/shlibs.default",
+ "/etc/dpkg/dpkg.cfg", "/etc/devscripts.conf"
+);
+
+# This will be given information about features later on
+our (%feature, %default_feature);
+
+my $progname = basename($0);
+my $modified_conf_msg;
+
+sub usage () {
+ my @ed = ("disabled", "enabled");
+ print <<"EOF";
+Usage:
+ $progname [options] <command>
+Run <command> and then output packages used to do this.
+Options:
+ Which packages to report:
+ -a, --all Report all packages used to run <command>
+ -b, --build-depends Do not report build-essential or essential packages
+ used or any of their (direct or indirect)
+ dependencies
+ -d, --ignore-dev-deps Do not show packages used which are direct
+ dependencies of -dev packages used
+ -m, --min-deps Output a minimal set of packages needed, taking
+ into account direct dependencies
+ -m implies -d and both imply -b; -a gives additional dependency information
+ if used in conjunction with -b, -d or -m
+
+ -C, --C-locale Run command with C locale
+ --no-C-locale Don\'t change locale
+ -l, --list-files Report list of files used in each package
+ --no-list-files Do not report list of files used in each package
+ -o, --output=FILE Output diagnostic to FILE instead of stdout
+ -O, --strace-output=FILE Write strace output to FILE when tracing <command>
+ instead of a temporary file
+ -I, --strace-input=FILE Get strace output from FILE instead of tracing
+ <command>; strace must be run with -f -q for this
+ to work
+
+ -f, --features=LIST Enable or disabled features given in
+ comma-separated LIST as follows:
+ +feature or feature enable feature
+ -feature disable feature
+
+ Known features and default setting:
+ warn-local ($ed[$default_feature{'warn-local'}]) warn if files in /usr/local are used
+ discard-check-version ($ed[$default_feature{'discard-check-version'}]) discard execve with only
+ --version argument; this works around some
+ configure scripts that check for binaries they
+ don\'t use
+ trace-local ($ed[$default_feature{'trace-local'}]) also try to identify file
+ accesses in /usr/local
+ catch-alternatives ($ed[$default_feature{'catch-alternatives'}]) catch access to alternatives
+ discard-sgml-catalogs ($ed[$default_feature{'discard-sgml-catalogs'}]) discard access to SGML
+ catalogs; some SGML tools read all the
+ registered catalogs at startup.
+
+ --no-conf, --noconf Don\'t read devscripts config files;
+ must be the first option given
+ -h, --help Display this help and exit
+ -v, --version Output version information and exit
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOF
+}
+
+sub version () {
+ print <<'EOF';
+This is $progname, from the Debian devscripts package, version ###VERSION###
+Copyright Bill Allombert <ballombe@debian.org> 2001.
+Modifications copyright 2002, 2003 Julian Gilbey <jdg@debian.org>
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+# Main program
+
+# Features:
+# This are heuristics used to speed up the process.
+# Since they may be considered as "kludges" or worse "bugs"
+# by some, they can be deactivated
+# 0 disabled by default, 1 enabled by default.
+%feature = (
+ "warn-local" => 1,
+ "discard-check-version" => 1,
+ "trace-local" => 0,
+ "catch-alternatives" => 1,
+ "discard-sgml-catalogs" => 1,
+);
+%default_feature = %feature;
+
+# First process configuration file options, then check for command-line
+# options. This is pretty much boilerplate.
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = ('DPKG_DEPCHECK_OPTIONS' => '',);
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ if ($config_vars{'DPKG_DEPCHECK_OPTIONS'} ne '') {
+ unshift @ARGV, split(' ', $config_vars{'DPKG_DEPCHECK_OPTIONS'});
+ }
+}
+
+# Default option:
+$opts{"pkgs"} = 'all';
+$opts{"allpkgs"} = 0;
+
+Getopt::Long::Configure('bundling', 'require_order');
+GetOptions(
+ "h|help" => sub { usage(); exit; },
+ "v|version" => sub { version(); exit; },
+ "a|all" => sub { $opts{"allpkgs"} = 1; },
+ "b|build-depends" => sub { $opts{"pkgs"} = 'build'; },
+ "d|ignore-dev-deps" => sub { $opts{"pkgs"} = 'dev'; },
+ "m|min-deps" => sub { $opts{"pkgs"} = 'min'; },
+ "C|C-locale" => \$opts{"C"},
+ "no-C-locale|noC-locale" => sub { $opts{"C"} = 0; },
+ "l|list-files" => \$opts{"l"},
+ "no-list-files|nolist-files" => sub { $opts{"l"} = 0; },
+ "o|output=s" => \$opts{"o"},
+ "O|strace-output=s" => \$opts{"strace-output"},
+ "I|strace-input=s" => \$opts{"strace-input"},
+ "f|features=s" => \&process_features,
+ "no-conf" => \$opts{"noconf"},
+ "noconf" => \$opts{"noconf"},
+) or do { usage; exit 1; };
+
+if ($opts{"noconf"}) {
+ die
+"$progname: --no-conf is only acceptable as the first command-line option!\n";
+}
+
+if ($opts{"pkgs"} eq 'all') {
+ $opts{"allpkgs"} = 0;
+} else {
+ # We don't initialise the packages database before doing this check,
+ # as that takes quite some time
+ unless (system('dpkg -L build-essential >/dev/null 2>&1') >> 8 == 0) {
+ die
+"You must have the build-essential package installed or use the --all option\n";
+ }
+}
+
+@ARGV > 0
+ or $opts{"strace-input"}
+ or die
+ "You need to specify a command! Run $progname --help for more info\n";
+
+# Run the command and trace it to see what's going on
+my @usedfiles = getusedfiles(@ARGV);
+
+if ($opts{"o"}) {
+ $opts{"o"} =~ s%^(\s)%./$1%;
+ open STDOUT, "> $opts{'o'}"
+ or warn
+ "Cannot open $opts{'o'} for writing: $!\nTrying to use stdout instead\n";
+} else {
+ # Visual space
+ print "\n\n";
+ print '-' x 70, "\n";
+}
+
+# Get each file once only, and drop any we are not interested in.
+# Also, expand all symlinks so we get full pathnames of the real file accessed.
+@usedfiles = filterfiles(@usedfiles);
+
+# Forget about the few files we are expecting to see but can ignore
+@usedfiles = SetMinus(\@usedfiles, \@known_files);
+
+# For a message at the end
+my $number_files_used = scalar @usedfiles;
+
+# Initialise the packages database unless --all is given
+my $packagedeps;
+
+# @used_ess_files will contain those files used which are in essential packages
+my @used_ess_files;
+
+# Exclude essential and build-essential packages?
+if ($opts{"pkgs"} ne 'all') {
+ $packagedeps = Devscripts::PackageDeps->fromStatus();
+ my @essential = PackagesMatch('^Essential: yes$');
+ my @essential_packages
+ = $packagedeps->full_dependencies('build-essential', @essential);
+ my @essential_files = PackagesToFiles(@essential_packages);
+ @used_ess_files = SetInter(\@usedfiles, \@essential_files);
+ @usedfiles = SetMinus(\@usedfiles, \@used_ess_files);
+}
+
+# Now let's find out which packages are used...
+my @ess_packages = FilesToPackages(@used_ess_files);
+my @packages = FilesToPackages(@usedfiles);
+my %dep_packages = (); # packages which are depended upon by others
+
+# ... and remove their files from the filelist
+if ($opts{"l"}) {
+ # Have to do it slowly :-(
+ if ($opts{"allpkgs"}) {
+ print
+"Files used in each of the needed build-essential or essential packages:\n";
+ foreach my $pkg (sort @ess_packages) {
+ my @pkgfiles = PackagesToFiles($pkg);
+ print "Files used in (build-)essential package $pkg:\n ",
+ join("\n ", SetInter(\@used_ess_files, \@pkgfiles)), "\n";
+ }
+ print "\n";
+ }
+ print "Files used in each of the needed packages:\n";
+ foreach my $pkg (sort @packages) {
+ my @pkgfiles = PackagesToFiles($pkg);
+ print "Files used in package $pkg:\n ",
+ join("\n ", SetInter(\@usedfiles, \@pkgfiles)), "\n";
+ # We take care to note any files used which
+ # do not appear in any package
+ @usedfiles = SetMinus(\@usedfiles, \@pkgfiles);
+ }
+ print "\n";
+} else {
+ # We take care to note any files used which
+ # do not appear in any package
+ my @pkgfiles = PackagesToFiles(@packages);
+ @usedfiles = SetMinus(\@usedfiles, \@pkgfiles);
+}
+
+if ($opts{"pkgs"} eq 'dev') {
+ # We also remove any direct dependencies of '-dev' packages
+ my %pkgs;
+ @pkgs{@packages} = (1) x @packages;
+
+ foreach my $pkg (@packages) {
+ next unless $pkg =~ /-dev$/;
+ my @deps = $packagedeps->dependencies($pkg);
+ foreach my $dep (@deps) {
+ $dep = $$dep[0] if ref $dep;
+ if (exists $pkgs{$dep}) {
+ $dep_packages{$dep} = $pkg;
+ delete $pkgs{$dep};
+ }
+ }
+ }
+
+ @packages = keys %pkgs;
+} elsif ($opts{"pkgs"} eq 'min') {
+ # Do a mindep job on the package list
+ my ($packages_ref, $dep_packages_ref)
+ = $packagedeps->min_dependencies(@packages);
+ @packages = @$packages_ref;
+ %dep_packages = %$dep_packages_ref;
+}
+
+print "Summary: $number_files_used files considered.\n" if $opts{"l"};
+# Ignore unrecognised /var/... files
+@usedfiles = grep !/^\/var\//, @usedfiles;
+if (@usedfiles) {
+ warn "The following files did not appear to belong to any package:\n";
+ warn join("\n", @usedfiles) . "\n";
+}
+
+print "Packages ", ($opts{"pkgs"} eq 'all') ? "used" : "needed", ":\n ";
+print join("\n ", @packages), "\n";
+
+if ($opts{"allpkgs"}) {
+ if (@ess_packages) {
+ print "\n(Build-)Essential packages used:\n ";
+ print join("\n ", @ess_packages), "\n";
+ } else {
+ print "\nNo (Build-)Essential packages used\n";
+ }
+
+ if (scalar keys %dep_packages) {
+ print "\nOther packages used with depending packages listed:\n";
+ foreach my $pkg (sort keys %dep_packages) {
+ print " $pkg <= $dep_packages{$pkg}\n";
+ }
+ }
+}
+
+exit 0;
+
+### Subroutines
+
+# This sub is handed two arguments: f or feature, and the setting
+
+sub process_features ($$) {
+ foreach (split(',', $_[1])) {
+ my $state = 1;
+ m/^-/ and $state = 0;
+ s/^[-+]//;
+ if (exists $feature{$_}) {
+ $feature{$_} = $state;
+ } else {
+ die("Unknown feature $_\n");
+ }
+ }
+}
+
+# Get used files. This runs the requested command (given as parameters
+# to this sub) under strace and then parses the output, returning a list
+# of all absolute filenames successfully opened or execve'd.
+
+sub getusedfiles (@) {
+ my $file;
+ if ($opts{"strace-input"}) {
+ $file = $opts{"strace-input"};
+ } else {
+ my $old_locale = $ENV{'LC_ALL'} || undef;
+ $file = $opts{"strace-output"}
+ || `mktemp --tmpdir dpkg-depcheck.XXXXXXXXXX`;
+ chomp $file;
+ $file =~ s%^(\s)%./$1%;
+ my @strace_cmd = (
+ 'strace', '-e', 'trace=open,openat,execve', '-f',
+ '-q', '-o', $file, @_
+ );
+ $ENV{'LC_ALL'} = "C" if $opts{"C"};
+ system(@strace_cmd);
+ $? >> 8 == 0
+ or die "Running strace failed (command line:\n@strace_cmd\n";
+ if (defined $old_locale) { $ENV{'LC_ALL'} = $old_locale; }
+ else { delete $ENV{'LC_ALL'}; }
+ }
+
+ my %openfiles = ();
+ open FILE, $file or die "Cannot open $file for reading: $!\n";
+ while (<FILE>) {
+ # We only consider absolute filenames
+ m/^\d+\s+(\w+)\((?:[\w\d_]*, )?\"(\/.*?)\",.*\) = (-?\d+)/ or next;
+ my ($syscall, $filename, $status) = ($1, $2, $3);
+ if ($syscall eq 'open' || $syscall eq 'openat') {
+ next unless $status >= 0;
+ } elsif ($syscall eq 'execve') {
+ next unless $status == 0;
+ } else {
+ next;
+ } # unrecognised syscall
+ next
+ if $feature{"discard-check-version"}
+ and m/execve\(\"\Q$filename\E\", \[\"[^\"]+\", "--version"\], /;
+ # So it's a real file
+ $openfiles{$filename} = 1;
+ }
+
+ unlink $file unless $opts{"strace-input"} or $opts{"strace-output"};
+
+ return keys %openfiles;
+}
+
+# Select those files which we are interested in, as determined by the
+# user-specified options
+
+sub filterfiles (@) {
+ my %files = ();
+ my %local_files = ();
+ my %alternatives = ();
+ my $pwd = cwd();
+
+ foreach my $file (@_) {
+ next unless -f $file;
+ $file = Cwd::abs_path($file);
+
+ my @links = ();
+ my $prevlink = '';
+ foreach (ListSymlinks($file, $pwd)) {
+ if (m%^/(usr|var)/local(/|\z)%) {
+ $feature{"warn-local"} and $local_files{$_} = 1;
+ unless ($feature{"trace-local"}) {
+ $prevlink = $_;
+ next;
+ }
+ } elsif ($feature{"discard-sgml-catalogs"}
+ and m%^/usr/share/(sgml/.*\.cat|.*/catalog)%) {
+ next;
+ } elsif ($feature{"catch-alternatives"} and m%^/etc/alternatives/%)
+ {
+ $alternatives{ "$prevlink --> " . readlink($_) } = 1
+ if $prevlink;
+ }
+ $prevlink = $_;
+ # If it's not in one of these dirs, we skip it
+ next unless m%^/(bin|etc|lib|sbin|usr|var)%;
+ push @links, $_;
+ }
+
+ @files{@links} = (1) x @links;
+ }
+
+ if (keys %local_files) {
+ print "warning: files in /usr/local or /var/local used:\n",
+ join("\n", sort keys %local_files), "\n";
+ }
+ if (keys %alternatives) {
+ print "warning: alternatives used:\n",
+ join("\n", sort keys %alternatives), "\n";
+ }
+
+ return keys %files;
+}
+
+# The purpose here is to find out all the symlinks crossed by a file access.
+# We work from the end of the filename (basename) back towards the root of
+# the filename (solving bug#246006 where /usr is a symlink to another
+# filesystem), repeating this process until we end up with an absolute
+# filename with no symlinks in it. We return a list of all of the
+# full filenames encountered.
+# For example, if /usr -> /moved/usr, then
+# /usr/bin/X11/xapp would yield:
+# /usr/bin/X11/xapp, /usr/X11R6/bin/xapp, /moved/usr/X11R6/bin/xapp
+
+# input: file, pwd
+# output: if symlink found: (readlink-replaced file, prefix)
+# if not: (file, '')
+
+sub NextSymlink ($) {
+ my $file = shift;
+
+ my $filestart = $file;
+ my $fileend = '';
+
+ while ($filestart ne '/') {
+ if (-l $filestart) {
+ my $link = readlink($filestart);
+ my $parent = dirname $filestart;
+ if ($link =~ m%^/%) { # absolute symlink
+ return $link . $fileend;
+ }
+ while ($link =~ s%^\./%%) { }
+ # The following is not actually correct: if we have
+ # /usr -> /moved/usr and /usr/mylib -> ../mylibdir, then
+ # /usr/mylib should resolve to /moved/mylibdir, not /mylibdir
+ # But if we try to take this into account, we would need to
+ # use something like Cwd(), which would immediately resolve
+ # /usr -> /moved/usr, losing us the opportunity of recognising
+ # the filename we want. This is a bug we'll probably have to
+ # cope with.
+ # One way of doing this correctly would be to have a function
+ # resolvelink which would recursively resolve any initial ../ in
+ # symlinks, but no more than that. But I don't really want to
+ # implement this unless it really proves to be necessary:
+ # people shouldn't be having evil symlinks like that on their
+ # system!!
+ while ($link =~ s%^\.\./%%) { $parent = dirname $parent; }
+ return $parent . '/' . $link . $fileend;
+ } else {
+ $fileend = '/' . basename($filestart) . $fileend;
+ $filestart = dirname($filestart);
+ }
+ }
+ return undef;
+}
+
+# input: file, pwd
+# output: list of full filenames encountered en route
+
+sub ListSymlinks ($$) {
+ my ($file, $path) = @_;
+
+ if ($file !~ m%^/%) { $file = "$path/$file"; }
+
+ my @fn = ($file);
+
+ while ($file = NextSymlink($file)) {
+ push @fn, $file;
+ }
+
+ return @fn;
+}
diff --git a/scripts/dpkg-genbuilddeps.1 b/scripts/dpkg-genbuilddeps.1
new file mode 100644
index 0000000..7a7f5cd
--- /dev/null
+++ b/scripts/dpkg-genbuilddeps.1
@@ -0,0 +1,40 @@
+.TH DPKG-GENBUILDDEPS 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+dpkg-genbuilddeps \- generate a list of packages used to build this package
+.SH SYNOPSIS
+\fBdpkg-genbuilddeps\fR [\fIarg\fR ...]
+.SH DESCRIPTION
+This program is a wrapper around \fBdpkg-depcheck\fR(1). It should be
+run from the top of a Debian build tree. It calls
+\fBdpkg-buildpackage\fR with any arguments given on the command line,
+and by tracing the execution of this, it determines which
+non-essential packages were used during the package building. This
+can be useful in determining what the \fIBuild-Depends\fR control
+fields should contain. It does not determine which packages were used
+for the arch independent parts of the build and which for the arch
+dependent parts, not does it attempt to determine which versions of
+packages are required. It should be able to run under \fBfakeroot\fR
+rather than being run as root, as \fBfakeroot dpkg-genbuilddeps\fR, or
+\fBdpkg-genbuilddeps \-rfakeroot\fR.
+.PP
+This program requires the build-essential package to be installed. If
+it is not, please use \fBdpkg-depcheck\fR directly, with a command
+such as
+.nf
+ dpkg-depcheck \-\-all dpkg-buildpackage \-us \-uc \-b \-rfakeroot ...
+.fi
+All this program itself does is essentially to run the command:
+.nf
+ dpkg-depcheck \-b dpkg-buildpackage \-us \-uc \-b \-rfakeroot [arg ...]
+.fi
+.SH "SEE ALSO"
+.BR dpkg-depcheck (1),
+.BR fakeroot (1)
+
+.B The Debian Policy Manual,
+sections on Build-Depends etc.
+.SH AUTHOR
+The original \fBdpkg-genbuilddeps\fR was written by Ben Collins
+<bcollins@debian.org>. The current version is a simple wrapper around
+\fBdpkg-depcheck\fR written by Bill Allombert <ballombe@debian.org>.
+This manual page was written by Julian Gilbey <jdg@debian.org>.
diff --git a/scripts/dpkg-genbuilddeps.sh b/scripts/dpkg-genbuilddeps.sh
new file mode 100755
index 0000000..5e50e26
--- /dev/null
+++ b/scripts/dpkg-genbuilddeps.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+set -e
+
+PROGNAME=${0##*/}
+
+if [ $# -gt 0 ]; then
+ case $1 in
+ -h|--help)
+ cat <<EOF
+Usage: $PROGNAME [options] [<arg> ...]
+Build package and generate build dependencies.
+All args are passed to dpkg-buildpackage.
+Options:
+ -h, --help This help
+ -v, --version Report version and exit
+EOF
+ exit 1
+ ;;
+ -v|--version)
+ echo "$PROGNAME wrapper for dpkg-depcheck:"
+ dpkg-depcheck --version
+ exit 1
+ ;;
+ esac
+fi
+
+if ! [ -x debian/rules ]; then
+ echo "$PROGNAME must be run in the source package directory" >&2
+ exit 1
+fi
+
+if ! dpkg -L build-essential > /dev/null 2>&1
+then
+ echo "You must have the build-essential package installed to use $PROGNAME" >&2
+ echo "You can try running the dpkg-depcheck program directly as:" >&2
+ echo "dpkg-depcheck --all dpkg-buildpackage -us -uc -b -rfakeroot $*" >&2
+ exit 1
+fi
+
+echo "Warning: if this program hangs, kill it and read the manpage!" >&2
+dpkg-depcheck -b dpkg-buildpackage -us -uc -b "$@"
diff --git a/scripts/dscextract.1 b/scripts/dscextract.1
new file mode 100644
index 0000000..d455c43
--- /dev/null
+++ b/scripts/dscextract.1
@@ -0,0 +1,33 @@
+.TH DSCEXTRACT 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+dscextract \- extract a single file from a Debian source package
+.SH SYNOPSIS
+\fBdscextract\fR [\fIoptions\fR] \fIdscfile\fR \fIfile\fR
+.SH DESCRIPTION
+\fBdscextract\fR reads a single file from a Debian source package. The idea is
+to only look into \fI.diff.gz\fR files (source format 1.0) or \fI.debian.tar.gz/bz2\fR
+files (source format 3.0) where possible, hence avoiding to unpack large
+tarballs. It is most useful for files in the \fIdebian/\fR subdirectory.
+
+\fIfile\fP is relative to the first level directory contained in the package,
+i.e. with the first component stripped.
+.SH OPTIONS
+.TP
+.B \fB\-f
+"Fast" mode. For source format 1.0, avoid to fall back scanning the \fI.orig.tar.gz\fR
+file if \fIfile\fR was not found in the \fI.diff.gz\fR. (For 3.0 packages, it is
+assumed that \fIdebian/*\fR are exactly the contents of \fIdebian.tar.gz/bz2\fR.)
+.SH "EXIT STATUS"
+.TP
+0
+\fIfile\fR was extracted.
+.TP
+1
+\fIfile\fR was not found in the source package.
+.TP
+2
+An error occurred, like \fIdscfile\fR was not found.
+.SH EXAMPLE
+dscextract dds_2.1.1+ddd105-2.dsc debian/watch || test $? = 1
+.SH AUTHOR
+\fBdscextract\fR was written by Christoph Berg <myon@debian.org>.
diff --git a/scripts/dscextract.bash_completion b/scripts/dscextract.bash_completion
new file mode 100644
index 0000000..bf7eadc
--- /dev/null
+++ b/scripts/dscextract.bash_completion
@@ -0,0 +1,34 @@
+# /usr/share/bash-completion/completions/dscextract
+# Bash command completion for ‘dscextract(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+# Copyright © 2015, Nicholas Bamber <nicholas@periapt.co.uk>
+
+_dscextract()
+{
+ local cur prev words cword _options
+ _init_completion || return
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W '-f' -- "$cur" ) )
+ elif [[ "$prev" == -f ]]; then
+ declare -a _compreply=( $( compgen -o filenames -G '*.dsc' ) )
+ COMPREPLY=( $( compgen -W "${_compreply[*]}" -- "$cur" ) )
+ elif [[ "$prev" == *.dsc ]]; then
+ declare -a _compreply=( $( tar tvf ${prev/.dsc/.debian.tar.*} 2>/dev/null | sed 's! \+! !g' | cut -d' ' -f6 ) )
+ COMPREPLY=( $( compgen -W "${_compreply[*]}" -- "$cur" ) )
+ else
+ declare -a _compreply=( $( compgen -W '-f' -o filenames -G '*.dsc' ) )
+ COMPREPLY=( $( compgen -W "${_compreply[*]}" -- "$cur" ) )
+ fi
+
+ return 0
+} && complete -F _dscextract dscextract
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/dscextract.sh b/scripts/dscextract.sh
new file mode 100755
index 0000000..78e2334
--- /dev/null
+++ b/scripts/dscextract.sh
@@ -0,0 +1,121 @@
+#!/bin/sh
+
+# dscextract.sh - Extract a single file from a Debian source package
+# Copyright (C) 2011 Christoph Berg <myon@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+set -eu
+
+PROGNAME=${0##*/}
+
+die() {
+ echo "$*" >&2
+ exit 2
+}
+
+setzip() {
+ case $1 in
+ *.gz) ZIP=--gzip ;;
+ *.xz) ZIP=--xz ;;
+ *.lzma) ZIP=--lzma ;;
+ *.bz2) ZIP=--bzip2 ;;
+ esac
+}
+
+FAST=""
+while getopts "f" opt ; do
+ case $opt in
+ f) FAST=yes ;;
+ *) exit 2 ;;
+ esac
+done
+# shift away args
+shift $(($OPTIND - 1))
+
+[ $# = 2 ] || die "Usage: $PROGNAME <dsc> <file>"
+DSC="$1"
+test -e "$DSC" || die "$DSC not found"
+FILE="$2"
+
+DSCDIR=$(dirname "$DSC")
+WORKDIR=$(mktemp -d --tmpdir dscextract.XXXXXX)
+trap 'rm -rf "$WORKDIR"' EXIT
+
+if DIFFGZ=$(grep -E '^ [0-9a-f]{32,64} [0-9]+ [^ ]+\.diff\.(gz|xz|lzma|bz2)$' "$DSC") ; then
+ DIFFGZ=$(echo "$DIFFGZ" | cut -d ' ' -f 4 | head -n 1)
+ test -e "$DSCDIR/$DIFFGZ" || die "$DSCDIR/$DIFFGZ: not found"
+ filterdiff -p1 -i "$FILE" -z "$DSCDIR/$DIFFGZ" > "$WORKDIR/patch"
+ if test -s "$WORKDIR/patch" ; then
+ # case 1: file found in .diff.gz
+ if ! grep -q '^@@ -0,0 ' "$WORKDIR/patch" ; then
+ # case 1a: patch requires original file
+ ORIGTGZ=$(grep -E '^ [0-9a-f]{32,64} [0-9]+ [^ ]+\.orig\.tar\.(gz|xz|lzma|bz2)$' "$DSC") || die "no orig.tar.* found in $DSC"
+ ORIGTGZ=$(echo "$ORIGTGZ" | cut -d ' ' -f 4 | head -n 1)
+ setzip $ORIGTGZ
+ test -e "$DSCDIR/$ORIGTGZ" || die "$DSCDIR/$ORIGTGZ not found"
+ tar --extract --to-stdout $ZIP --file "$DSCDIR/$ORIGTGZ" --wildcards "*/$FILE" > "$WORKDIR/output" 2>/dev/null || :
+ test -s "$WORKDIR/output" || die "$FILE not found in $DSCDIR/$ORIGTGZ, but required by patch"
+ fi
+ patch --silent "$WORKDIR/output" < "$WORKDIR/patch"
+ test -s "$WORKDIR/output" || die "patch $FILE did not produce any output"
+ cat "$WORKDIR/output"
+ exit 0
+ elif [ "$FAST" ] ; then
+ # in fast mode, don't bother looking into .orig.tar.gz
+ exit 1
+ fi
+fi
+
+if DEBIANTARGZ=$(grep -E '^ [0-9a-f]{32,64} [0-9]+ [^ ]+\.debian\.tar\.(gz|xz|lzma|bz2)$' "$DSC") ; then
+ case $FILE in
+ debian/*)
+ DEBIANTARGZ=$(echo "$DEBIANTARGZ" | cut -d ' ' -f 4 | head -n 1)
+ test -e "$DSCDIR/$DEBIANTARGZ" || die "$DSCDIR/$DEBIANTARGZ not found"
+ setzip $DEBIANTARGZ
+ tar --extract --to-stdout $ZIP --file "$DSCDIR/$DEBIANTARGZ" "$FILE" > "$WORKDIR/output" 2>/dev/null || :
+ test -s "$WORKDIR/output" || exit 1
+ # case 2a: file found in .debian.tar.gz
+ cat "$WORKDIR/output"
+ exit 0
+ # for 3.0 format, no need to look in other places here
+ ;;
+ *)
+ ORIGTGZ=$(grep -E '^ [0-9a-f]{32,64} [0-9]+ [^ ]+\.orig\.tar\.(gz|xz|lzma|bz2)$' "$DSC") || die "no orig.tar.gz found in $DSC"
+ ORIGTGZ=$(echo "$ORIGTGZ" | cut -d ' ' -f 4 | head -n 1)
+ test -e "$DSCDIR/$ORIGTGZ" || die "$DSCDIR/$ORIGTGZ not found"
+ setzip $ORIGTGZ
+ tar --extract --to-stdout $ZIP --file "$DSCDIR/$ORIGTGZ" --wildcards --no-wildcards-match-slash "*/$FILE" > "$WORKDIR/output" 2>/dev/null || :
+ test -s "$WORKDIR/output" || exit 1
+ # case 2b: file found in .orig.tar.gz
+ # TODO: apply patches from debian.tar.gz
+ cat "$WORKDIR/output"
+ exit 0
+ ;;
+ esac
+fi
+
+if TARGZ=$(grep -E '^ [0-9a-f]{32,64} [0-9]+ [^ ]+\.tar\.(gz|xz|lzma|bz2)$' "$DSC") ; then
+ TARGZ=$(echo "$TARGZ" | cut -d ' ' -f 4 | head -n 1)
+ test -e "$DSCDIR/$TARGZ" || die "$DSCDIR/$TARGZ not found"
+ setzip $TARGZ
+ tar --extract --to-stdout $ZIP --file "$DSCDIR/$TARGZ" --wildcards --no-wildcards-match-slash "*/$FILE" > "$WORKDIR/output" 2>/dev/null || :
+ test -s "$WORKDIR/output" || exit 1
+ # case 3: file found in .tar.gz or .orig.tar.gz
+ cat "$WORKDIR/output"
+ exit 0
+fi
+
+exit 1
diff --git a/scripts/dscverify.1 b/scripts/dscverify.1
new file mode 100644
index 0000000..5f065f3
--- /dev/null
+++ b/scripts/dscverify.1
@@ -0,0 +1,86 @@
+.TH DSCVERIFY 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+dscverify \- verify the validity of a Debian package
+.SH SYNOPSIS
+\fBdscverify\fR [\fB\-\-keyring \fIkeyring\fR] ... \fIchanges_or_buildinfo_or_dsc_filename\fR ...
+.SH DESCRIPTION
+\fBdscverify\fR checks that the GPG signatures on the given
+\fI.changes\fR, \fI.buildinfo\fP or \fI.dsc\fR files are good signatures
+made by keys in the current Debian keyrings, found in the \fIdebian-keyring\fR
+package. (Additional keyrings can be specified using the
+\fB--keyring\fR option any number of times.) It then checks that the
+other files listed in the \fI.changes\fR, \fI.buildinfo\fP or \fI.dsc\fR
+files have the
+correct sizes and checksums (MD5 plus SHA1 and SHA256 if the latter are
+present). The exit status is 0 if there are no problems and non-zero
+otherwise.
+.SH OPTIONS
+.TP
+.BI \-\-keyring " " \fIkeyring\fR
+Add \fIkeyring\fR to the list of keyrings to be used.
+.TP
+\fB\-\-no-default-keyrings\fR
+Do not use the default set of keyrings.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+\fB\-\-nosigcheck\fR, \fB\-\-no\-sig\-check\fR, \fB-u\fR
+Skip the signature verification step. That is, only verify the sizes and
+checksums of the files listed in the \fI.changes\fR, \fI.buildinfo\fP or
+\fI.dsc\fR files.
+.TP
+\fB\-\-verbose\fR
+Do not suppress GPG output.
+.TP
+.TP
+.BR \-\-help ", " \-h
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced by a shell in that order to set
+configuration variables. Environment variable settings are ignored
+for this purpose. If the first command line option given is
+\fB\-\-noconf\fR or \fB\-\-no-conf\fR, then these files will not be
+read. The currently recognised variable is:
+.TP
+.B DSCVERIFY_KEYRINGS
+This is a colon-separated list of extra keyrings to use in addition to
+any specified on the command line.
+.SH KEYRING
+Please note that the keyring provided by the debian-keyring package
+can be slightly out of date. The latest version can be obtained with
+rsync, as documented in the README that comes with debian-keyring.
+If you sync the keyring to a non-standard location (see below),
+you can use the possibilities to specify extra keyrings, by either
+using the above mentioned configuration option or the \-\-keyring option.
+
+Below is an example for an alias:
+
+alias dscverify='dscverify \-\-keyring ~/.gnupg/pubring.gpg'
+.SH STANDARD KEYRING LOCATIONS
+By default dscverify searches for the debian-keyring in the following
+locations:
+
+- ~/.gnupg/trustedkeys.gpg
+
+- /srv/keyring.debian.org/keyrings/debian-keyring.gpg
+
+- /usr/share/keyrings/debian-keyring.gpg
+
+- /usr/share/keyrings/debian-maintainers.gpg
+
+- /usr/share/keyrings/debian-nonupload.gpg
+.SH "SEE ALSO"
+.BR gpg (1),
+.BR gpg2 (1),
+.BR devscripts.conf (5)
+
+.SH AUTHOR
+\fBdscverify\fR was written by Roderick Schertler <roderick@argon.org>
+and posted on the debian-devel@lists.debian.org mailing list,
+with several modifications by Julian Gilbey <jdg@debian.org>.
diff --git a/scripts/dscverify.bash_completion b/scripts/dscverify.bash_completion
new file mode 100644
index 0000000..789a556
--- /dev/null
+++ b/scripts/dscverify.bash_completion
@@ -0,0 +1,32 @@
+# /usr/share/bash-completion/completions/dscverify
+# Bash command completion for ‘dscverify(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+# Copyright © 2015, Nicholas Bamber <nicholas@periapt.co.uk>
+
+_dscverify()
+{
+ local cur prev words cword _options
+ _init_completion || return
+
+ if [[ "$cur" == -* ]]; then
+ _options='--keyring --no-default-keyrings --no-sig-check --verbose'
+ if [[ "$prev" == dscverify ]]; then
+ _options+=' --no-conf'
+ fi
+ COMPREPLY=( $( compgen -W "${_options}" -- "$cur" ) )
+ else
+ declare -a _compreply=( $( compgen -o filenames -G '*.@(dsc|changes)' ) )
+ COMPREPLY=( $( compgen -W "${_compreply[*]}" -- "$cur" ) )
+ fi
+
+ return 0
+} && complete -F _dscverify dscverify
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/dscverify.pl b/scripts/dscverify.pl
new file mode 100755
index 0000000..0916646
--- /dev/null
+++ b/scripts/dscverify.pl
@@ -0,0 +1,457 @@
+#!/usr/bin/perl
+
+# This program takes .changes or .dsc files as arguments and verifies
+# that they're properly signed by a Debian developer, and that the local
+# copies of the files mentioned in them match the MD5 sums given.
+
+# Copyright 1998 Roderick Schertler <roderick@argon.org>
+# Modifications copyright 1999,2000,2002 Julian Gilbey <jdg@debian.org>
+# Drastically simplified to match katie's signature checking Feb 2002
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use 5.004; # correct pipe close behavior
+use strict;
+use warnings;
+use Cwd;
+use Fcntl;
+use Digest::MD5;
+use Dpkg::IPC;
+use File::HomeDir;
+use File::Spec;
+use File::Temp;
+use File::Basename;
+use POSIX qw(:errno_h);
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use List::Util qw(first);
+
+my $progname = basename $0;
+my $modified_conf_msg;
+my $Exit = 0;
+my $start_dir = cwd;
+my $verify_sigs = 1;
+my $use_default_keyrings = 1;
+my $verbose = 0;
+my $havegpg = first { !system('sh', '-c', "command -v $_ >/dev/null 2>&1") }
+ qw(gpg2 gpg);
+
+sub usage {
+ print <<"EOF";
+Usage: $progname [options] changes-or-buildinfo-dsc-file ...
+ Options: --help Display this message
+ --version Display version and copyright information
+ --keyring <keyring>
+ Add <keyring> to the list of keyrings used
+ --no-default-keyrings
+ Do not check against the default keyrings
+ --nosigcheck, --no-sig-check, -u
+ Do not verify the GPG signature
+ --no-conf, --noconf
+ Do not read the devscripts config file
+ --verbose
+ Do not suppress GPG output.
+
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOF
+}
+
+my $version = <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1998 Roderick Schertler <roderick\@argon.org>
+Modifications are copyright 1999, 2000, 2002 Julian Gilbey <jdg\@debian.org>
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+
+sub xwarndie_mess {
+ my @mess = ("$progname: ", @_);
+ $mess[$#mess] =~ s/:$/: $!\n/; # XXX loses if it's really /:\n/
+ return @mess;
+}
+
+sub xwarn {
+ warn xwarndie_mess @_;
+ $Exit ||= 1;
+}
+
+sub xdie {
+ die xwarndie_mess @_;
+}
+
+sub get_rings {
+ my @rings = @_;
+ my @keyrings = qw(/usr/share/keyrings/debian-keyring.gpg
+ /usr/share/keyrings/debian-maintainers.gpg
+ /usr/share/keyrings/debian-nonupload.gpg);
+ $ENV{HOME} = File::HomeDir->my_home;
+ if (defined $ENV{HOME} && -r "$ENV{HOME}/.gnupg/trustedkeys.gpg") {
+ unshift(@keyrings, "$ENV{HOME}/.gnupg/trustedkeys.gpg");
+ }
+ unshift(@keyrings, '/srv/keyring.debian.org/keyrings/debian-keyring.gpg');
+ if (system('dpkg-vendor', '--derives-from', 'Ubuntu') == 0) {
+ unshift(
+ @keyrings, qw(/usr/share/keyrings/ubuntu-master-keyring.gpg
+ /usr/share/keyrings/ubuntu-archive-keyring.gpg)
+ );
+ }
+ for (@keyrings) {
+ push @rings, $_ if -r;
+ }
+ return @rings if @rings;
+ xdie "can't find any system keyrings\n";
+}
+
+sub check_signature($\@;\$) {
+ my ($file, $rings, $outref) = @_;
+
+ my $fh = eval { File::Temp->new() }
+ or xdie "unable to open status file for gpg: $@\n";
+
+ # Allow the status file descriptor to pass on to the child process
+ my $flags = fcntl($fh, F_GETFD, 0);
+ fcntl($fh, F_SETFD, $flags & ~FD_CLOEXEC);
+
+ my $fd = fileno $fh;
+ my @cmd;
+ push @cmd, $havegpg, "--status-fd", $fd,
+ qw(--batch --no-options --no-default-keyring --always-trust);
+ foreach (@$rings) { push @cmd, '--keyring'; push @cmd, $_; }
+ push @cmd, '--verify', '--output', '-';
+ my ($out, $err) = ('', '');
+ eval {
+ spawn(
+ exec => \@cmd,
+ from_file => $file,
+ to_string => \$out,
+ error_to_string => \$err,
+ wait_child => 1
+ );
+ };
+
+ if ($@) {
+ print $out if ($verbose);
+ return $err || $@;
+ }
+ print $err if ($verbose);
+
+ seek($fh, 0, SEEK_SET);
+ my $status;
+ $status .= $_ while <$fh>;
+ close $fh;
+
+ if ($status !~ m/^\[GNUPG:\] VALIDSIG/m) {
+ return $out;
+ }
+
+ if (defined $outref) {
+ $$outref = $out;
+ }
+
+ return '';
+}
+
+sub process_file {
+ my ($file, @rings) = @_;
+ my ($filedir, $filebase);
+ my $sigcheck;
+
+ print "$file:\n";
+
+ # Move to the directory in which the file appears to live
+ chdir $start_dir or xdie "can't chdir to original directory!\n";
+ if ($file =~ m-(.*)/([^/]+)-) {
+ $filedir = $1;
+ $filebase = $2;
+ unless (chdir $filedir) {
+ xwarn "can't chdir $filedir:";
+ return;
+ }
+ } else {
+ $filebase = $file;
+ }
+
+ my $out;
+ if ($verify_sigs) {
+ $sigcheck = check_signature $filebase, @rings, $out;
+ if ($sigcheck) {
+ xwarn "$file failed signature check:\n$sigcheck";
+ return;
+ } else {
+ print " Good signature found\n";
+ }
+ } else {
+ if (!open SIGNED, '<', $filebase) {
+ xwarn "can't open $file:";
+ return;
+ }
+ $out = do { local $/; <SIGNED> };
+ if (!close SIGNED) {
+ xwarn "problem reading $file:";
+ return;
+ }
+ }
+
+ if ($file =~ /\.(changes|buildinfo)$/ and $out =~ /^Format:\s*(.*)$/mi) {
+ my $format = $1;
+ unless ($format =~ /^(\d+)\.(\d+)$/) {
+ xwarn "$file has an unrecognised format: $format\n";
+ return;
+ }
+ my ($major, $minor) = split /\./, $format;
+ $major += 0;
+ $minor += 0;
+ if (
+ $file =~ /\.changes$/ and ($major != 1 or $minor > 8)
+ or $file =~ /\.buildinfo$/ and (($major != 0 or $minor > 2)
+ and ($major != 1 or $minor > 0))
+ ) {
+ xwarn "$file is an unsupported format: $format\n";
+ return;
+ }
+ }
+
+ my @spec = map { split /\n/ }
+ $out =~ /^(?:Checksums-Md5|Files):\s*\n((?:[ \t]+.*\n)+)/mgi;
+ unless (@spec) {
+ xwarn "no file spec lines in $file\n";
+ return;
+ }
+
+ my @checksums = map { split /\n/ } $out =~ /^Checksums-(\S+):\s*\n/mgi;
+ @checksums = grep { !/^(Md5|Sha(1|256))$/i } @checksums;
+ if (@checksums) {
+ xwarn "$file contains unsupported checksums:\n"
+ . join(", ", @checksums) . "\n";
+ return;
+ }
+
+ my %sha1s = map { reverse split /(\S+)\s*$/m }
+ $out =~ /^Checksums-Sha1:\s*\n((?:[ \t]+.*\n)+)/mgi;
+ my %sha256s = map { reverse split /(\S+)\s*$/m }
+ $out =~ /^Checksums-Sha256:\s*\n((?:[ \t]+.*\n)+)/mgi;
+ my $md5o = Digest::MD5->new or xdie "can't initialize MD5\n";
+ my $any;
+ for (@spec) {
+ unless (/^\s+([0-9a-f]{32})\s+(\d+)\s+(?:\S+\s+\S+\s+)?(\S+)\s*$/) {
+ xwarn "invalid file spec in $file `$_'\n";
+ next;
+ }
+ my ($md5, $size, $filename) = ($1, $2, $3);
+ my ($sha1, $sha1size, $sha256, $sha256size);
+ $filename !~ m,[/\x00],
+ or xdie "File name contains invalid characters: $file";
+
+ if (keys %sha1s) {
+ $sha1 = $sha1s{$filename};
+ unless (defined $sha1) {
+ xwarn "no sha1 for `$filename' in $file\n";
+ next;
+ }
+ unless ($sha1 =~ /^\s+([0-9a-f]{40})\s+(\d+)\s*$/) {
+ xwarn "invalid sha1 spec in $file `$sha1'\n";
+ next;
+ }
+ ($sha1, $sha1size) = ($1, $2);
+ } else {
+ $sha1size = $size;
+ }
+
+ if (keys %sha256s) {
+ $sha256 = $sha256s{$filename};
+ unless (defined $sha256) {
+ xwarn "no sha256 for `$filename' in $file\n";
+ next;
+ }
+ unless ($sha256 =~ /^\s+([0-9a-f]{64})\s+(\d+)\s*$/) {
+ xwarn "invalid sha256 spec in $file `$sha256'\n";
+ next;
+ }
+ ($sha256, $sha256size) = ($1, $2);
+ } else {
+ $sha256size = $size;
+ }
+
+ unless (open FILE, '<', $filename) {
+ if ($! == ENOENT) {
+ print STDERR " skipping $filename (not present)\n";
+ } else {
+ xwarn "can't read $filename:";
+ }
+ next;
+ }
+
+ $any = 1;
+ print " validating $filename\n";
+
+ # size
+ my $this_size = -s FILE;
+ unless (defined $this_size) {
+ xwarn "can't fstat $filename:";
+ next;
+ }
+ unless ($this_size == $size) {
+ xwarn
+"invalid file length for $filename (wanted $size got $this_size)\n";
+ next;
+ }
+ unless ($this_size == $sha1size) {
+ xwarn
+"invalid sha1 file length for $filename (wanted $sha1size got $this_size)\n";
+ next;
+ }
+ unless ($this_size == $sha256size) {
+ xwarn
+"invalid sha256 file length for $filename (wanted $sha256size got $this_size)\n";
+ next;
+ }
+
+ # MD5
+ $md5o->reset;
+ $md5o->addfile(*FILE);
+ my $this_md5 = $md5o->hexdigest;
+ unless ($this_md5 eq $md5) {
+ xwarn "MD5 mismatch for $filename (wanted $md5 got $this_md5)\n";
+ next;
+ }
+
+ my $this_sha1;
+ eval {
+ spawn(
+ exec => ['sha1sum', $filename],
+ to_string => \$this_sha1,
+ wait_child => 1
+ );
+ };
+ ($this_sha1) = split /\s/, $this_sha1, 2;
+ $this_sha1 ||= '';
+ unless (!keys %sha1s or $this_sha1 eq $sha1) {
+ xwarn
+ "SHA1 mismatch for $filename (wanted $sha1 got $this_sha1)\n";
+ next;
+ }
+
+ my $this_sha256;
+ eval {
+ spawn(
+ exec => ['sha256sum', $filename],
+ to_string => \$this_sha256,
+ wait_child => 1
+ );
+ };
+ ($this_sha256) = split /\s/, $this_sha256, 2;
+ $this_sha256 ||= '';
+ unless (!keys %sha256s or $this_sha256 eq $sha256) {
+ xwarn
+"SHA256 mismatch for $filename (wanted $sha256 got $this_sha256)\n";
+ next;
+ }
+
+ close FILE;
+
+ if ($filename =~ /\.(?:dsc|buildinfo)$/ && $verify_sigs) {
+ $sigcheck = check_signature $filename, @rings;
+ if ($sigcheck) {
+ xwarn "$filename failed signature check:\n$sigcheck";
+ next;
+ } else {
+ print " Good signature found\n";
+ }
+ }
+ }
+
+ $any
+ or xwarn "$file didn't specify any files present locally\n";
+}
+
+sub main {
+ @ARGV or xdie "no .changes, .buildinfo or .dsc files specified\n";
+
+ my @rings;
+
+ # Handle config file unless --no-conf or --noconf is specified
+ # The next stuff is boilerplate
+ if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift @ARGV;
+ } else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = ('DSCVERIFY_KEYRINGS' => '',);
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= "$var='$config_vars{$var}';\n";
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $config_vars{'DSCVERIFY_KEYRINGS'} =~ s/^\s*:\s*//;
+ $config_vars{'DSCVERIFY_KEYRINGS'} =~ s/\s*:\s*$//;
+ @rings = split /\s*:\s*/, $config_vars{'DSCVERIFY_KEYRINGS'};
+ }
+
+ GetOptions(
+ 'help' => sub { usage; exit 0; },
+ 'version' => sub { print $version; exit 0; },
+ 'sigcheck|sig-check!' => \$verify_sigs,
+ 'u' => sub { $verify_sigs = 0 },
+ 'noconf|no-conf' => sub {
+ die
+ "--$_[0] is only acceptable as the first command-line option!\n";
+ },
+ 'default-keyrings!' => \$use_default_keyrings,
+ 'keyring=s@' => sub {
+ my $ring = $_[1];
+ if (-r $ring) { push @rings, $ring; }
+ else { die "Keyring $ring unreadable\n" }
+ },
+ 'verbose' => \$verbose,
+ )
+ or do {
+ usage;
+ exit 1;
+ };
+
+ @ARGV or xdie "no .changes, .buildinfo or .dsc files specified\n";
+
+ @rings = get_rings @rings if $use_default_keyrings and $verify_sigs;
+
+ for my $file (@ARGV) {
+ process_file $file, @rings;
+ }
+
+ return 0;
+}
+
+$Exit = main || $Exit;
+$Exit = 1 if $Exit and not $Exit % 256;
+if ($Exit) { print STDERR "Validation FAILED!!\n"; }
+else { print "All files validated successfully.\n"; }
+exit $Exit;
diff --git a/scripts/edit-patch.sh b/scripts/edit-patch.sh
new file mode 100755
index 0000000..8adfb67
--- /dev/null
+++ b/scripts/edit-patch.sh
@@ -0,0 +1,313 @@
+#!/bin/sh
+#
+# Copyright (C) 2009 Canonical
+#
+# Authors:
+# Michael Vogt
+# Daniel Holbach
+# David Futcher
+#
+# 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; version 3.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+set -e
+
+PROGNAME=${0##*/}
+
+PATCHSYSTEM="unknown"
+PATCHNAME="no-patch-name"
+PREFIX="debian/patches"
+
+PATCH_DESC=$(cat<<EOF
+## Description: add some description\
+\n## Origin/Author: add some origin or author\
+\n## Bug: bug URL
+EOF
+)
+
+fatal_error() {
+ echo "$@" >&2
+ exit 1
+}
+
+# check if the given binary is installed and give an error if not
+# arg1: binary
+# arg2: error message
+require_installed() {
+ if ! which "$1" >/dev/null; then
+ fatal_error "$2"
+ fi
+}
+
+ensure_debian_dir() {
+ if [ ! -e debian/control ] || [ ! -e debian/rules ]; then
+ fatal_error "Can not find debian/rules or debian/control. Not in a debian dir?"
+ fi
+
+}
+
+detect_patchsystem() {
+ CDBS_PATCHSYS="^[^#]*simple-patchsys.mk"
+
+ if grep -q "$CDBS_PATCHSYS" debian/rules; then
+ PATCHSYSTEM="cdbs"
+ require_installed cdbs-edit-patch "no cdbs-edit-patch found, is 'cdbs' installed?"
+ elif [ -e debian/patches/00list ]; then
+ PATCHSYSTEM="dpatch"
+ require_installed dpatch-edit-patch "no dpatch-edit-patch found, is 'dpatch' installed?"
+ elif [ -e debian/patches/series -o \
+ "$(cat debian/source/format 2> /dev/null)" = "3.0 (quilt)" ]; then
+ PATCHSYSTEM="quilt"
+ require_installed quilt "no quilt found, is 'quilt' installed?"
+ else
+ PATCHSYSTEM="none"
+ PREFIX="debian/applied-patches"
+ fi
+}
+
+# remove full path if given
+normalize_patch_path() {
+ PATCHNAME=${PATCHNAME##*/}
+ echo "Normalizing patch path to $PATCHNAME"
+}
+
+# ensure (for new patches) that:
+# - dpatch ends with .dpatch
+# - cdbs/quilt with .patch
+normalize_patch_extension() {
+ # check if we have a patch already
+ if [ -e $PREFIX/$PATCHNAME ]; then
+ echo "Patch $PATCHNAME exists, not normalizing"
+ return
+ fi
+
+ # normalize name for new patches
+ PATCHNAME=${PATCHNAME%.*}
+ if [ "$PATCHSYSTEM" = "quilt" ]; then
+ PATCHNAME="${PATCHNAME}.patch"
+ elif [ "$PATCHSYSTEM" = "cdbs" ]; then
+ PATCHNAME="${PATCHNAME}.patch"
+ elif [ "$PATCHSYSTEM" = "dpatch" ]; then
+ PATCHNAME="${PATCHNAME}.dpatch"
+ elif [ "$PATCHSYSTEM" = "none" ]; then
+ PATCHNAME="${PATCHNAME}.patch"
+ fi
+
+ echo "Normalizing patch name to $PATCHNAME"
+}
+
+edit_patch_cdbs() {
+ cdbs-edit-patch $PATCHNAME
+ vcs_add debian/patches/$1
+}
+
+edit_patch_dpatch() {
+ dpatch-edit-patch $PATCHNAME
+ # add if needed
+ if ! grep -q $1 $PREFIX/00list; then
+ echo "$1" >> $PREFIX/00list
+ fi
+ vcs_add $PREFIX/00list $PREFIX/$1
+}
+
+edit_patch_quilt() {
+ export QUILT_PATCHES=debian/patches
+ if [ -e $QUILT_PATCHES ]; then
+ top_patch=$(quilt top)
+ echo "Top patch: $top_patch"
+ fi
+ if [ -e $PREFIX/$1 ]; then
+ # if it's an existing patch and we are at the end of the stack,
+ # go back at the beginning
+ if ! quilt unapplied; then
+ quilt pop -a
+ fi
+ quilt push $1
+ else
+ # if it's a new patch, make sure we are at the end of the stack
+ if quilt unapplied >/dev/null; then
+ quilt push -a
+ fi
+ quilt new $1
+ fi
+ # use a sub-shell
+ quilt shell
+ quilt refresh
+ if [ -n $top_patch ]; then
+ echo "Reverting quilt back to $top_patch"
+ quilt pop $top_patch
+ fi
+ vcs_add $PREFIX/$1 $PREFIX/series
+}
+
+edit_patch_none() {
+ # Dummy edit-patch function, just display a warning message
+ echo "No patchsystem could be found so the patch was applied inline and a copy \
+stored in debian/patches-applied. Please remember to mention this in your changelog."
+}
+
+add_patch_quilt() {
+ # $1 is the original patchfile, $2 the normalized name
+ # FIXME: use quilt import instead?
+ cp $1 $PREFIX/$2
+ if ! grep -q $2 $PREFIX/series; then
+ echo "$2" >> $PREFIX/series
+ fi
+ vcs_add $PREFIX/$2 $PREFIX/series
+}
+
+add_patch_cdbs() {
+ # $1 is the original patchfile, $2 the normalized name
+ cp $1 $PREFIX/$2
+ vcs_add $PREFIX/$2
+}
+
+add_patch_dpatch() {
+ # $1 is the original patchfile, $2 the normalized name
+ cp $1 $PREFIX
+ if ! grep -q $2 $PREFIX/00list; then
+ echo "$2" >> $PREFIX/00list
+ fi
+ vcs_add $PREFIX/$2 $PREFIX/00list
+}
+
+add_patch_none() {
+ # $1 is the original patchfile, $2 the normalized name
+ cp $1 $PREFIX/$2
+ vcs_add $PREFIX/$2
+}
+
+vcs_add() {
+ if [ -d .bzr ]; then
+ bzr add $@
+ elif [ -d .git ];then
+ git add $@
+ else
+ echo "Remember to add $@ to a VCS if you use one"
+ fi
+}
+
+vcs_commit() {
+ # check if debcommit is happy
+ if ! debcommit --noact 2>/dev/null; then
+ return
+ fi
+ # commit (if the user confirms)
+ debcommit --confirm
+}
+
+add_changelog() {
+ S="$PREFIX/$1: [DESCRIBE CHANGES HERE]"
+ if head -n1 debian/changelog|grep UNRELEASED; then
+ dch --append "$S"
+ else
+ dch --increment "$S"
+ fi
+ # let the user edit it
+ dch --edit
+}
+
+add_patch_tagging() {
+ # check if we have a description already
+ if grep "## Description:" $PREFIX/$1; then
+ return
+ fi
+ # if not, add one
+ RANGE=1,1
+ # make sure we keep the first line (for dpatch)
+ if head -n1 $PREFIX/$1|grep -q '^#'; then
+ RANGE=2,2
+ fi
+ sed -i ${RANGE}i"$PATCH_DESC" $PREFIX/$1
+}
+
+detect_patch_location() {
+ # Checks whether the specified patch exists in debian/patches or on the filesystem
+ FILENAME=${PATCHNAME##*/}
+
+ if [ -f "$PREFIX/$FILENAME" ]; then
+ PATCHTYPE="debian"
+ elif [ -f "$PATCHNAME" ]; then
+ PATCHTYPE="file"
+ PATCHORIG="$PATCHNAME"
+ else
+ if [ "$PATCHSYSTEM" = "none" ]; then
+ fatal_error "No patchsystem detected, cannot create new patch (no dpatch/quilt/cdbs?)"
+ else
+ PATCHTYPE="new"
+ fi
+ fi
+}
+
+handle_file_patch() {
+ if [ "$PATCHTYPE" = "file" ]; then
+ [ -f "$PATCHORIG" ] || fatal_error "No patch detected"
+
+ if [ "$PATCHSYSTEM" = "none" ]; then
+ # If we're supplied a file and there is no patchsys we apply it directly
+ # and store it in debian/applied patches
+ [ -d $PREFIX ] || mkdir $PREFIX
+
+ patch -p0 < "$PATCHORIG"
+ cp "$PATCHORIG" "$PREFIX/$PATCHNAME"
+ else
+ # Patch type is file but there is a patchsys present, so we add it
+ # correctly
+ cp "$PATCHORIG" "$PREFIX/$PATCHNAME"
+
+ if [ "$PATCHSYSTEM" = "quilt" ]; then
+ echo "$PATCHNAME" >> $PREFIX/series
+ elif [ "$PATCHSYSTEM" = "dpatch" ]; then
+ echo "$PATCHNAME" >> $PREFIX/00list
+
+ # Add the dpatch header to files that don't already have it
+ if ! grep -q "@DPATCH@" "$PREFIX/$PATCHNAME"; then
+ sed -i '1i#! /bin/sh /usr/share/dpatch/dpatch-run\n@DPATCH@' $PREFIX/$PATCHNAME
+ fi
+ fi
+
+ echo "Copying and applying new patch. You can now edit the patch or exit the subshell to save."
+ fi
+ fi
+}
+
+# TODO:
+# - edit-patch --remove implementieren
+# - dbs patch system
+
+main() {
+ # parse args
+ if [ $# -ne 1 ]; then
+ fatal_error "Need exactly one patch name"
+ fi
+ PATCHNAME="$1"
+ # do the work
+ ensure_debian_dir
+ detect_patchsystem
+ detect_patch_location
+ normalize_patch_path
+ normalize_patch_extension
+ handle_file_patch
+ if [ "${PROGNAME%.sh}" = edit-patch ]; then
+ edit_patch_$PATCHSYSTEM $PATCHNAME
+ elif [ "${PROGNAME%.sh}" = add-patch ]; then
+ add_patch_$PATCHSYSTEM $1 $PATCHNAME
+ else
+ fatal_error "Unknown script name: $0"
+ fi
+ add_patch_tagging $PATCHNAME
+ add_changelog $PATCHNAME
+ vcs_commit
+}
+
+main $@
diff --git a/scripts/getbuildlog.1 b/scripts/getbuildlog.1
new file mode 100644
index 0000000..e6cc228
--- /dev/null
+++ b/scripts/getbuildlog.1
@@ -0,0 +1,42 @@
+.TH GETBUILDLOG 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+getbuildlog \- download build logs from Debian auto\-builders
+.SH SYNOPSIS
+\fBgetbuildlog\fR \fIpackage\fR
+[\fIversion\-pattern\fR]
+[\fIarchitecture\-pattern\fR]
+.SH DESCRIPTION
+\fBgetbuildlog\fR downloads build logs of \fIpackage\fR from Debian
+auto\-builders. It downloads build logs of all versions and for all
+architectures if \fIversion\-pattern\fR and \fIarchitecture\-pattern\fR are
+not specified or empty, otherwise only build logs whose versions match
+\fIversion-pattern\fR and build logs whose architectures match
+\fIarchitecture-pattern\fR will be downloaded. The version and architecture
+patterns are interpreted as extended regular expressions as described in
+\fBgrep\fR(1).
+.PP
+If \fIversion-pattern\fR is "last" then only the logs for the most
+recent version of \fIpackage\fR found on buildd.debian.org will be
+downloaded.
+.PP
+If \fIversion-pattern\fR is "last-all" then the logs for the most recent
+version found on each build log index will be downloaded.
+.SH OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Show usage information and examples.
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+Show version and copyright information.
+.SH EXAMPLES
+.TP
+getbuildlog hello 2\\.2\-1 amd64
+Download amd64 build log for hello version 2.2\-1.
+.TP
+getbuildlog glibc "" mips.*
+Download mips(el) build logs of all glibc versions.
+.TP
+getbuildlog wesnoth .*bpo.*
+Download all build logs of backported wesnoth versions.
+.SH AUTHOR
+Written by Frank S. Thomas <fst@debian.org>.
diff --git a/scripts/getbuildlog.sh b/scripts/getbuildlog.sh
new file mode 100755
index 0000000..172aa13
--- /dev/null
+++ b/scripts/getbuildlog.sh
@@ -0,0 +1,151 @@
+#!/bin/sh
+#
+# getbuildlog: download package build logs from Debian auto-builders
+#
+# Copyright © 2008 Frank S. Thomas <fst@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+set -e
+
+PROGNAME=${0##*/}
+
+usage() {
+ cat <<EOT
+Usage: $PROGNAME <package> [<version-pattern>] [<architecture-pattern>]
+ Downloads build logs of <package> from Debian auto-builders.
+ If <version-pattern> or <architecture-pattern> are given, only build logs
+ whose versions and architectures, respectively, matches the given patterns
+ are downloaded.
+
+ If <version-pattern> is "last" then only the logs for the most recent
+ version of <package> found on buildd.debian.org will be downloaded.
+
+ If <version-pattern> is "last-all" then the logs for the most recent
+ version found on each build log index will be downloaded.
+Options:
+ -h, --help Show this help message.
+ -V, --version Show version and copyright information.
+Examples:
+ # Download amd64 build log for hello version 2.2-1:
+ $PROGNAME hello 2\.2-1 amd64
+
+ # Download mips(el) build logs of all glibc versions:
+ $PROGNAME glibc "" mips.*
+
+ # Download all build logs of backported wesnoth versions:
+ $PROGNAME wesnoth .*bpo.*
+EOT
+}
+
+version() {
+ cat <<EOT
+This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2008 by Frank S. Thomas, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOT
+}
+
+[ "$1" = "-h" ] || [ "$1" = "--help" ] && usage && exit 0
+[ "$1" = "-V" ] || [ "$1" = "--version" ] && version && exit 0
+
+[ $# -ge 1 ] && [ $# -le 3 ] || { usage && exit 1; }
+
+if ! which wget > /dev/null 2>&1; then
+ echo "$PROGNAME: this program requires the wget package to be installed";
+ exit 1
+fi
+
+PACKAGE=$1
+VERSION=${2:-[:~+.[:alnum:]-]+}
+ARCH=${3:-[[:alnum:]-]+}
+ESCAPED_PACKAGE=$(echo "$PACKAGE" | sed -e 's/\+/\\\+/g')
+
+GET_LAST_VERSION=no
+if [ "$VERSION" = "last" ]; then
+ GET_LAST_VERSION=yes
+ VERSION=[:~+.[:alnum:]-]+
+elif [ "$VERSION" = "last-all" ]; then
+ GET_LAST_VERSION=all
+ VERSION=[:~+.[:alnum:]-]+
+fi
+
+PATTERN="fetch\.(cgi|php)\?pkg=$ESCAPED_PACKAGE&arch=$ARCH&ver=$VERSION&\
+stamp=[[:digit:]]+"
+
+getbuildlog() {
+ BASE=$1
+ ALL_LOGS=$(mktemp --tmpdir getbuildlog.tmp.XXXXXXXXXX)
+
+ trap 'rm -f "$ALL_LOGS"' EXIT
+
+ wget -q -O $ALL_LOGS "$BASE/status/logs.php?pkg=$PACKAGE"
+
+ # Put each href in $ALL_LOGS on a separate line so that $PATTERN
+ # matches only one href. This is required because grep is greedy.
+ sed -i -e "s/href=\"/\nhref=\"/g" $ALL_LOGS
+ # Quick-and-dirty unescaping
+ sed -i -e "s/&amp;/\&/g" -e "s/%2B/\+/g" -e "s/%3A/:/g" -e "s/%7E/~/g" $ALL_LOGS
+
+ # If only the last version was requested, extract and sort
+ # the listed versions and determine the highest
+ if [ "$GET_LAST_VERSION" != "no" ]; then
+ LASTVERSION=$( \
+ for match in $(grep -E -o "$PATTERN" $ALL_LOGS); do
+ ver=${match##*ver=}
+ echo ${ver%%&*}
+ done | perl -e '
+ use Devscripts::Versort;
+ while (<>) { push @versions, [$_]; }
+ @versions = Devscripts::Versort::versort(@versions);
+ print $versions[0][0]; ' | sed -e "s/\+/\\\+/g"
+ )
+
+ NEWPATTERN="fetch\.(cgi|php)\?pkg=$ESCAPED_PACKAGE&\
+arch=$ARCH&ver=$LASTVERSION&stamp=[[:digit:]]+"
+ else
+ NEWPATTERN=$PATTERN
+ fi
+
+ for match in $(grep -E -o "$NEWPATTERN" $ALL_LOGS); do
+ ver=${match##*ver=}
+ ver=${ver%%&*}
+ arch=${match##*arch=}
+ arch=${arch%%&*}
+ match=$(echo $match | sed -e 's/\+/%2B/g')
+ # Mimic wget's behaviour, using a numerical suffix if needed,
+ # to support downloading several logs for a given tuple
+ # (unfortunately, -nc and -O means only the first file gets
+ # downloaded):
+ filename="${PACKAGE}_${ver}_${arch}.log"
+ if [ -f "$filename" ]; then
+ suffix=1
+ while [ -f "$filename.$suffix" ]; do suffix=$((suffix+1)); done
+ filename="$filename.$suffix"
+ fi
+ wget -O "$filename" "$BASE/status/$match&raw=1"
+ done
+
+ rm -f $ALL_LOGS
+
+ if [ "$GET_LAST_VERSION" = "yes" ]; then
+ PATTERN=$NEWPATTERN
+ GET_LAST_VERSION=no
+ fi
+}
+
+getbuildlog https://buildd.debian.org
diff --git a/scripts/git-deborig.pl b/scripts/git-deborig.pl
new file mode 100755
index 0000000..7ef342f
--- /dev/null
+++ b/scripts/git-deborig.pl
@@ -0,0 +1,284 @@
+#!/usr/bin/perl
+
+# git-deborig -- try to produce Debian orig.tar using git-archive(1)
+
+# Copyright (C) 2016-2019 Sean Whitton <spwhitton@spwhitton.name>
+#
+# 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/>.
+
+=head1 NAME
+
+git-deborig - try to produce Debian orig.tar using git-archive(1)
+
+=head1 SYNOPSIS
+
+B<git deborig> [B<--force>|B<-f>] [B<--just-print>|B<--just-print-tag-names>] [B<--version=>I<VERSION>] [I<COMMITTISH>]
+
+=head1 DESCRIPTION
+
+B<git-deborig> tries to produce the orig.tar you need for your upload
+by calling git-archive(1) on an existing git tag or branch head. It
+was written with the dgit-maint-merge(7) workflow in mind, but can be
+used with other workflows.
+
+B<git-deborig> will try several common tag names. If this fails, or
+if more than one of those common tags are present, you can specify the
+tag or branch head to archive on the command line (I<COMMITTISH> above).
+
+B<git-deborig> will override gitattributes(5) that would cause the
+contents of the tarball generated by git-archive(1) not to be
+identical with the commitish archived: the B<export-subst> and
+B<export-ignore> attributes.
+
+B<git-deborig> should be invoked from the root of the git repository,
+which should contain I<debian/changelog>.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-f>|B<--force>
+
+Overwrite any existing orig.tar in the parent directory.
+
+=item B<--just-print>
+
+Instead of actually invoking git-archive(1), output information about
+how it would be invoked. Ignores I<--force>.
+
+Note that running the git-archive(1) invocation outputted with this
+option may not produce the same output. This is because
+B<git-deborig> takes care to disables git attributes otherwise heeded
+by git-archive(1), as detailed above.
+
+=item B<--just-print-tag-names>
+
+Instead of actually invoking git-archive(1), or even checking which
+tags exist, print the tag names we would consider for the upstream
+version number in the first entry in the Debian changelog, or that
+supplied with B<--version>.
+
+=item B<--version=>I<VERSION>
+
+Instead of reading the new upstream version from the first entry in
+the Debian changelog, use I<VERSION>.
+
+=back
+
+=head1 SEE ALSO
+
+git-archive(1), dgit-maint-merge(7), dgit-maint-debrebase(7)
+
+=head1 AUTHOR
+
+B<git-deborig> was written by Sean Whitton <spwhitton@spwhitton.name>.
+
+=cut
+
+use strict;
+use warnings;
+
+use Getopt::Long;
+use Git::Wrapper;
+use Dpkg::Changelog::Parse;
+use Dpkg::IPC;
+use Dpkg::Version;
+use List::Compare;
+use String::ShellQuote;
+use Try::Tiny;
+
+my $git = Git::Wrapper->new(".");
+
+# Sanity check #1
+try {
+ $git->rev_parse({ git_dir => 1 });
+} catch {
+ die "pwd doesn't look like a git repository ..\n";
+};
+
+# Sanity check #2
+die "pwd doesn't look like a Debian source package ..\n"
+ unless (-e "debian/changelog");
+
+# Process command line args
+my $orig_args = join(" ", map { shell_quote($_) } ("git", "deborig", @ARGV));
+my $overwrite = '';
+my $user_version = '';
+my $user_ref = '';
+my $just_print = '';
+my $just_print_tag_names = '';
+GetOptions(
+ 'force|f' => \$overwrite,
+ 'just-print' => \$just_print,
+ 'just-print-tag-names' => \$just_print_tag_names,
+ 'version=s' => \$user_version
+) || usage();
+
+if (scalar @ARGV == 1) {
+ $user_ref = shift @ARGV;
+} elsif (scalar @ARGV >= 2
+ || ($just_print && $just_print_tag_names)) {
+ usage();
+}
+
+# Extract source package name from d/changelog and either extract
+# version too, or parse user-supplied version
+my $version;
+my $changelog = Dpkg::Changelog::Parse->changelog_parse({});
+if ($user_version) {
+ $version = Dpkg::Version->new($user_version);
+} else {
+ $version = $changelog->{Version};
+}
+
+# Sanity check #3
+die "version number $version is not valid ..\n" unless $version->is_valid();
+
+my $source = $changelog->{Source};
+my $upstream_version = $version->version();
+
+# Sanity check #4
+# Only complain if the user didn't supply a version, because the user
+# is not required to include a Debian revision when they pass
+# --version
+die "this looks like a native package .."
+ if (!$user_version && $version->is_native());
+
+# Convert the upstream version according to DEP-14 rules
+my $git_upstream_version = $upstream_version;
+$git_upstream_version =~ y/:~/%_/;
+$git_upstream_version =~ s/\.(?=\.|$|lock$)/.#/g;
+
+# This list could be expanded if new conventions come into use
+my @candidate_tags = (
+ "$git_upstream_version", "v$git_upstream_version",
+ "upstream/$git_upstream_version"
+);
+
+# Handle the --just-print-tag-names option
+if ($just_print_tag_names) {
+ for my $candidate_tag (@candidate_tags) {
+ print "$candidate_tag\n";
+ }
+ exit 0;
+}
+
+# Default to gzip
+my $compressor = "gzip -cn";
+my $compression = "gz";
+# Now check if we can use xz
+if (-e "debian/source/format") {
+ open(my $format_fh, '<', "debian/source/format")
+ or die "couldn't open debian/source/format for reading";
+ my $format = <$format_fh>;
+ chomp($format) if defined $format;
+ if ($format eq "3.0 (quilt)") {
+ $compressor = "xz -c";
+ $compression = "xz";
+ }
+ close $format_fh;
+}
+
+my $orig = "../${source}_$upstream_version.orig.tar.$compression";
+die "$orig already exists: not overwriting without --force\n"
+ if (-e $orig && !$overwrite && !$just_print);
+
+if ($user_ref) { # User told us the tag/branch to archive
+ # We leave it to git-archive(1) to determine whether or not this
+ # ref exists; this keeps us forward-compatible
+ archive_ref_or_just_print($user_ref);
+} else { # User didn't specify a tag/branch to archive
+ # Get available git tags
+ my @all_tags = $git->tag();
+
+ # See which candidate version tags are present in the repo
+ my $lc = List::Compare->new(\@all_tags, \@candidate_tags);
+ my @version_tags = $lc->get_intersection();
+
+ # If there is only one candidate version tag, we're good to go.
+ # Otherwise, let the user know they can tell us which one to use
+ if (scalar @version_tags > 1) {
+ print STDERR "tags ", join(", ", @version_tags),
+ " all exist in this repository\n";
+ print STDERR
+"tell me which one you want to make an orig.tar from: $orig_args TAG\n";
+ exit 1;
+ } elsif (scalar @version_tags < 1) {
+ print STDERR "couldn't find any of the following tags: ",
+ join(", ", @candidate_tags), "\n";
+ print STDERR
+"tell me a tag or branch head to make an orig.tar from: $orig_args COMMITTISH\n";
+ exit 1;
+ } else {
+ my $tag = shift @version_tags;
+ archive_ref_or_just_print($tag);
+ }
+}
+
+sub archive_ref_or_just_print {
+ my $ref = shift;
+
+ my $cmd = [
+ 'git', '-c', "tar.tar.${compression}.command=${compressor}",
+ 'archive', "--prefix=${source}-${upstream_version}/",
+ '-o', $orig, $ref
+ ];
+ if ($just_print) {
+ print "$ref\n";
+ print "$orig\n";
+ my @cmd_mapped = map { shell_quote($_) } @$cmd;
+ print "@cmd_mapped\n";
+ } else {
+ my ($info_dir) = $git->rev_parse(qw|--git-path info/|);
+ my ($info_attributes)
+ = $git->rev_parse(qw|--git-path info/attributes|);
+ my ($deborig_attributes)
+ = $git->rev_parse(qw|--git-path info/attributes-deborig|);
+
+ # sometimes the info/ dir may not exist
+ mkdir $info_dir unless (-e $info_dir);
+
+ # For compatibility with dgit, we have to override any
+ # export-subst and export-ignore git attributes that might be set
+ rename $info_attributes, $deborig_attributes
+ if (-e $info_attributes);
+ my $attributes_fh;
+ unless (open($attributes_fh, '>', $info_attributes)) {
+ rename $deborig_attributes, $info_attributes
+ if (-e $deborig_attributes);
+ die "could not open $info_attributes for writing";
+ }
+ print $attributes_fh "* -export-subst\n";
+ print $attributes_fh "* -export-ignore\n";
+ close $attributes_fh;
+
+ spawn(
+ exec => $cmd,
+ wait_child => 1,
+ nocheck => 1
+ );
+
+ # Restore situation before we messed around with git attributes
+ if (-e $deborig_attributes) {
+ rename $deborig_attributes, $info_attributes;
+ } else {
+ unlink $info_attributes;
+ }
+ }
+}
+
+sub usage {
+ die
+"usage: git deborig [--force|-f] [--just-print|--just-print-tag-names] [--version=VERSION] [COMMITTISH]\n";
+}
diff --git a/scripts/grep-excuses.1 b/scripts/grep-excuses.1
new file mode 100644
index 0000000..111e33d
--- /dev/null
+++ b/scripts/grep-excuses.1
@@ -0,0 +1,65 @@
+.TH GREP-EXCUSES 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+grep-excuses \- search the testing excuses files for a specific maintainer
+.SH SYNOPSIS
+\fBgrep-excuses\fR [\fIoptions\fR] [\fImaintainer\fR|\fIpackage\fR]
+.SH DESCRIPTION
+\fBgrep-excuses\fR downloads the autoremovals and update_excuses.html files
+and greps them
+for the specified maintainer or package name. The \fBwget\fR package is
+required for this script. If no name is given on the command line,
+first the environment variable \fBDEBFULLNAME\fR is used if it is
+defined, and failing that, the configuration variable described below
+is used.
+.SH OPTIONS
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+\fB\-\-wipnity\fR, \fB\-w\fR
+Get information from <https://qa.debian.org/excuses.php>.
+One or more package names must be given when using this option.
+.TP
+.B \-\-help
+Show a brief usage message.
+.TP
+.B \-\-version
+Show version and copyright information.
+.TP
+.B \-\-autopkgtests
+Investigate and show autopkgtest (ci.debian.net) failures
+in your packages
+but apparently caused by new versions of other packages
+trying to migrate.
+.RB ( \-\-no-autopkgtests
+can be used to override GREP_EXCUSES_AUTOPKGTESTS.)
+.TP
+.B \-\-no\-autoremovals
+Investigate and show only testing propagation excuses, not autoremovals.
+.TP
+\fB\-\-experimental\fR, \fB\-e\fR
+Print pseudo-excuses for manual migration from experimental to unstable.
+.TP
+.B \-\-debug
+Print debugging output to stderr (including url(s) fetched).
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variable is:
+.TP
+.B GREP_EXCUSES_MAINTAINER
+The default maintainer, email or package to grep for if none is
+specified on the command line.
+.TP
+.B GREP_EXCUSES_AUTOPKGTESTS
+Boolean: whether to show autopkgtest failures in other packages.
+See
+.BR \-\-autopkgtests .
+.SH "SEE ALSO"
+.BR devscripts.conf (5)
+.SH AUTHOR
+Joey Hess <joeyh@debian.org>;
+modifications by Julian Gilbey <jdg@debian.org>.
diff --git a/scripts/grep-excuses.pl b/scripts/grep-excuses.pl
new file mode 100755
index 0000000..79d7a95
--- /dev/null
+++ b/scripts/grep-excuses.pl
@@ -0,0 +1,420 @@
+#!/usr/bin/perl
+# vim: set ai shiftwidth=4 tabstop=4 expandtab:
+# Grep debian testing excuses file.
+#
+# Copyright 2002 Joey Hess <joeyh@debian.org>
+# Small mods Copyright 2002 Julian Gilbey <jdg@debian.org>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use 5.006;
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Basename;
+use File::HomeDir;
+
+sub require_friendly ($) {
+ my ($mod) = @_;
+ return if eval "require $mod;";
+ my $pkg = lc $mod;
+ $pkg =~ s/::/-/g;
+ $pkg = "lib$pkg-perl";
+ die <<END;
+$@
+grep-excuses: We need $mod. Try installing $pkg.
+END
+}
+
+# Needed for --wipnity option
+
+open DEBUG, ">/dev/null" or die $!;
+my $do_autoremovals = 1;
+my $do_autopkgtests;
+
+my $term_size_broken;
+
+sub have_term_size {
+ return ($term_size_broken ? 0 : 1) if defined $term_size_broken;
+ pop @INC if $INC[-1] eq '.';
+ # Load the Term::Size module safely
+ eval { require Term::Size; };
+ if ($@) {
+ if ($@ =~ /^Can\'t locate Term\/Size\.pm/) {
+ $term_size_broken
+ = "the libterm-size-perl package is not installed";
+ } else {
+ $term_size_broken = "couldn't load Term::Size: $@";
+ }
+ } else {
+ $term_size_broken = 0;
+ }
+
+ return ($term_size_broken ? 0 : 1);
+}
+
+my $progname = basename($0);
+my $modified_conf_msg;
+
+my $url = 'https://release.debian.org/britney/excuses.yaml';
+my $url_experimental
+ = 'https://release.debian.org/britney/pseudo-excuses-experimental.yaml';
+
+my $rmurl = 'https://udd.debian.org/cgi-bin/autoremovals.cgi';
+my $rmurl_yaml = 'https://udd.debian.org/cgi-bin/autoremovals.yaml.cgi';
+
+my $wipnityurl = 'https://qa.debian.org/excuses.php?package=';
+my $wipnityurl_experimental
+ = 'https://qa.debian.org/excuses.php?experimental=1&package=';
+
+# No longer use these - see bug#309802
+my $cachedir = File::HomeDir->my_home . "/.devscripts_cache/";
+my $cachefile = $cachedir . basename($url);
+unlink $cachefile if -f $cachefile;
+
+sub usage {
+ print <<"EOF";
+Usage: $progname [options] [<maintainer>|<package>]
+ Grep the Debian update_excuses file to find out about the packages
+ of <maintainer> or <package>. If neither are given, use the configuration
+ file setting or the environment variable DEBFULLNAME to determine the
+ maintainer name.
+Options:
+ --no-conf, --noconf Don\'t read devscripts config files;
+ must be the first option given
+ --wipnity, -w Check <https://qa.debian.org/excuses.php>. A package
+ name must be given when using this option.
+ --autopkgtests Investigate and show autopkgtest (ci.debian.net) failures
+ --no-autoremovals Do not investigate and report autoremovals
+ --experimental, -e Print pseudo-excuses for experimental
+ --help Show this help
+ --version Give version information
+ --debug Print debugging output to stderr
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOF
+}
+
+my $version = <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2002 by Joey Hess <joeyh\@debian.org>,
+and modifications are copyright 2002 by Julian Gilbey <jdg\@debian.org>
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+
+sub wipnity {
+ die "$progname: Couldn't run wipnity: $term_size_broken\n"
+ unless have_term_size();
+
+ my $columns = Term::Size::chars();
+
+ if (system("command -v w3m >/dev/null 2>&1") != 0) {
+ die
+ "$progname: wipnity mode requires the w3m package to be installed\n";
+ }
+
+ while (my $package = shift) {
+ my $dump = `w3m -dump -cols $columns "$wipnityurl$package"`;
+ $dump =~ s/.*(Excuse for .*)\s+Maintainer page.*/$1/ms;
+ $dump =~ s/.*(No excuse for .*)\s+Maintainer page.*/$1/ms;
+ print($dump);
+ }
+}
+
+# Now start by reading configuration files and then command line
+# The next stuff is boilerplate
+
+my $string;
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'GREP_EXCUSES_MAINTAINER' => '',
+ 'GREP_EXCUSES_AUTOPKGTESTS' => 0,
+ );
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= "$var='$config_vars{$var}';\n";
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $string = $config_vars{'GREP_EXCUSES_MAINTAINER'};
+ $do_autopkgtests = $config_vars{'GREP_EXCUSES_AUTOPKGTESTS'};
+}
+
+while (@ARGV and $ARGV[0] =~ /^-/) {
+ if ($ARGV[0] eq '--wipnity' or $ARGV[0] eq '-w') {
+ shift;
+ @ARGV = grep { $_ ne '' } @ARGV;
+ unless (@ARGV) {
+ die
+"$progname: no package specified!\nTry $progname --help for help.\n";
+ }
+ while (my ($i, $string) = each(@ARGV)) {
+ wipnity($string);
+ print "\n\n" unless $i == $#ARGV;
+ }
+ exit 0;
+ }
+ if ($ARGV[0] eq '--debug') {
+ open DEBUG, ">&STDERR" or die $!;
+ shift;
+ next;
+ }
+ if ($ARGV[0] eq '--experimental' or $ARGV[0] eq '-e') {
+ $do_autoremovals = 0;
+ $url = $url_experimental;
+ $wipnityurl = $wipnityurl_experimental;
+ shift;
+ next;
+ }
+ if ($ARGV[0] eq '--no-autoremovals') { $do_autoremovals = 0; shift; next; }
+ if ($ARGV[0] eq '--autopkgtests') { $do_autopkgtests = 1; shift; next; }
+ if ($ARGV[0] eq '--no-autopkgtests') { $do_autopkgtests = 0; shift; next; }
+ if ($ARGV[0] eq '--help') { usage(); exit 0; }
+ if ($ARGV[0] eq '--version') { print $version; exit 0; }
+ if ($ARGV[0] =~ /^--no-?conf$/) {
+ die
+"$progname: $ARGV[0] is only acceptable as the first command-line option!\n";
+ }
+ die
+"$progname: unrecognised option $ARGV[0]; try $progname --help for help\n";
+}
+
+if (!$string and exists $ENV{'DEBFULLNAME'}) {
+ $string = $ENV{'DEBFULLNAME'};
+}
+
+if (@ARGV) {
+ $string = shift;
+}
+if ($string eq '') {
+ die
+"$progname: no maintainer or package specified!\nTry $progname --help for help.\n";
+}
+if (@ARGV) {
+ die "$progname: too many arguments! Try $progname --help for help.\n";
+}
+
+if (system("command -v wget >/dev/null 2>&1") != 0) {
+ die "$progname: this program requires the wget package to be installed\n";
+}
+
+sub grep_autoremovals () {
+ print DEBUG "Fetching $rmurl\n";
+
+ unless (open REMOVALS, "wget -q -O - $rmurl |") {
+ warn "$progname: wget $rmurl failed: $!\n";
+ return;
+ }
+
+ my $wantmaint = 0;
+ my %reportpkgs;
+
+ while (<REMOVALS>) {
+ if (m%^https?:%) {
+ next;
+ }
+ if (m%^\S%) {
+ $wantmaint = m%^\Q$string\E\b%;
+ next;
+ }
+ if (m%^$%) {
+ $wantmaint = undef;
+ next;
+ }
+ if (defined $wantmaint && m%^\s+([0-9a-z][-.+0-9a-z]*):\s*(.*)%) {
+ next unless $wantmaint || $1 eq $string;
+ warn "$progname: package $1 repeated in $rmurl at line $.:\n$_"
+ if defined $reportpkgs{$1};
+ $reportpkgs{$1} = $2;
+ next;
+ }
+ warn "$progname: unprocessed line $. in $rmurl:\n$_";
+ }
+ $? = 0;
+ unless (close REMOVALS) {
+ my $rc = $? >> 8;
+ warn "$progname: fetch $rmurl failed ($rc $!)\n";
+ }
+
+ return unless %reportpkgs;
+
+ print DEBUG "Fetching $rmurl_yaml\n";
+
+ unless (open REMOVALS, "wget -q -O - $rmurl_yaml |") {
+ warn "$progname: wget $rmurl_yaml failed: $!\n";
+ return;
+ }
+
+ my $reporting = 0;
+ while (<REMOVALS>) {
+ if (m%^([0-9a-z][-.+0-9a-z]*):$%) {
+ my $pkg = $1;
+ my $human = $reportpkgs{$pkg};
+ delete $reportpkgs{$pkg};
+ $reporting = !!defined $human;
+ if ($reporting) {
+ print "$pkg (AUTOREMOVAL)\n $human\n" or die $!;
+ }
+ next;
+ }
+ if (m%^[ \t]%) {
+ if ($reporting) {
+ print " ", $_ or die $!;
+ }
+ next;
+ }
+ if (m%^$% || m%^\#% || m{^---$}) {
+ next;
+ }
+ warn "$progname: unprocessed line $. in $rmurl_yaml:\n$_";
+ }
+
+ $? = 0;
+ unless (close REMOVALS) {
+ my $rc = $? >> 8;
+ warn "$progname: fetch $rmurl_yaml failed ($rc $!)\n";
+ }
+
+ foreach my $pkg (keys %reportpkgs) {
+ print "$pkg (AUTOREMOVAL)\n $reportpkgs{$pkg}\n" or die $!;
+ }
+}
+
+grep_autoremovals() if $do_autoremovals;
+
+require_friendly qw(YAML::Syck);
+{
+ no warnings 'once';
+ $YAML::Syck::LoadBlessed = 0;
+}
+
+print DEBUG "Fetching $url\n";
+
+my $yaml = `wget -q -O - '$url'`;
+if ($? == -1) {
+ die "$progname: unable to run wget: $!\n";
+} elsif ($? >> 8) {
+ die "$progname: wget exited $?\n";
+}
+
+sub migration_headline ($) {
+ my ($source) = @_;
+ sprintf("%s (%s to %s)",
+ $source->{'item-name'},
+ $source->{'old-version'},
+ $source->{'new-version'});
+}
+
+sub print_migration_excuse_info ($;$) {
+ my ($source, $summary) = @_;
+ if (exists $source->{maintainer}) {
+ printf(" Maintainer: $source->{maintainer}\n");
+ }
+ if (exists $source->{dependencies}) {
+ for my $blocker (@{ $source->{dependencies}{'blocked-by'} }) {
+ printf(" Depends: %s %s (not considered)\n",
+ $source->{'item-name'}, $blocker);
+ }
+ for my $after (@{ $source->{dependencies}{'migrate-after'} }) {
+ printf(" Depends: %s %s\n", $source->{'item-name'}, $after);
+ }
+ }
+ for my $excuse (@{ $source->{excuses} }) {
+ next if $summary and $excuse =~ m/^autopkgtest /;
+ $excuse =~ s@</?[^>]+>@@g;
+ $excuse =~ s@&lt;@<@g;
+ $excuse =~ s@&gt;@>@g;
+ print " $excuse\n";
+ }
+}
+
+my $excuses = YAML::Syck::Load($yaml);
+for my $source (@{ $excuses->{sources} }) {
+ if (
+ $source->{'item-name'} eq $string
+ || (exists $source->{maintainer}
+ && $source->{maintainer} =~ m/\b\Q$string\E\b/)
+ ) {
+ print migration_headline($source), "\n";
+ print_migration_excuse_info($source);
+ }
+}
+
+if ($do_autopkgtests) {
+ flush STDOUT or die $!;
+ require_friendly qw(DBI);
+ require_friendly qw(DBD::Pg);
+ my $dbh = DBI->connect('DBI:Pg:dbname=udd;host=udd-mirror.debian.net',
+ 'udd-mirror', 'udd-mirror', { RaiseError => 1 });
+ # https://www.postgresql.org/docs/9.5/static/functions-matching.html
+ my $regexp = $string;
+ $regexp =~ s{[^0-9a-z]}{\\$&}ig;
+ $regexp = "\\y$regexp\\y";
+ my $pkgs = $dbh->selectall_arrayref(
+ 'select distinct source from sources where'
+ . ' maintainer_name ~ ? or'
+ . ' maintainer_email ~ ?',
+ {}, $regexp, $regexp
+ );
+ my %wantpkgs;
+ $wantpkgs{ $_->[0] }++ foreach @$pkgs;
+
+ for my $source (@{ $excuses->{sources} }) {
+ my $autopkgtests = $source->{'policy_info'}{'autopkgtest'};
+ foreach my $k (sort keys %$autopkgtests) {
+ $k =~ m{/} or next;
+ my ($testpkg, $testvsn) = ($`, $');
+ $wantpkgs{$testpkg} or next;
+ my $arches = $autopkgtests->{$k};
+ foreach my $arch (sort keys %$arches) {
+ my $info = $arches->{$arch};
+ next if grep { $_ eq $info->[0] } qw(PASS RUNNING OLD_PASS);
+ printf "\nautopkgtest regression\n";
+ printf " in %s (%s) on %s\n", $testpkg, $testvsn, $arch;
+ printf " due to %s\n", migration_headline($source);
+ print "test info\n";
+ print " $_\n" foreach @$info;
+ print "migration excuses for $source->{'item-name'}\n";
+ print_migration_excuse_info($source, 1);
+ }
+ }
+ }
+}
+
+exit 0;
diff --git a/scripts/hardening-check.pl b/scripts/hardening-check.pl
new file mode 100755
index 0000000..ad7f4e4
--- /dev/null
+++ b/scripts/hardening-check.pl
@@ -0,0 +1,684 @@
+#!/usr/bin/perl
+# Report the hardening characteristics of a set of binaries.
+# Copyright (C) 2009-2013 Kees Cook <kees@debian.org>
+# License: GPLv2 or newer
+use strict;
+use warnings;
+use Getopt::Long qw(:config no_ignore_case bundling);
+use Pod::Usage;
+use IPC::Open3;
+use Symbol qw(gensym);
+use Term::ANSIColor;
+use IO::Select;
+
+my $skip_pie = 0;
+my $skip_stackprotector = 0;
+my $skip_fortify = 0;
+my $skip_relro = 0;
+my $skip_bindnow = 0;
+my $skip_cfprotection = 0;
+my $report_functions = 0;
+my $find_libc_functions = 0;
+my $color = 0;
+my $lintian = 0;
+my $verbose = 0;
+my $debug = 0;
+my $quiet = 0;
+my $help = 0;
+my $man = 0;
+
+GetOptions(
+ "nopie|p+" => \$skip_pie,
+ "nostackprotector|s+" => \$skip_stackprotector,
+ "nofortify|f+" => \$skip_fortify,
+ "norelro|r+" => \$skip_relro,
+ "nobindnow|b+" => \$skip_bindnow,
+ "nocfprotection|x+" => \$skip_cfprotection,
+ "report-functions|R!" => \$report_functions,
+ "find-libc-functions|F!" => \$find_libc_functions,
+ "color|c!" => \$color,
+ "lintian|l!" => \$lintian,
+ "verbose|v!" => \$verbose,
+ "debug!" => \$debug,
+ "quiet|q!" => \$quiet,
+ "help|h|?" => \$help,
+ "man|H" => \$man,
+) or pod2usage(2);
+pod2usage(1) if $help;
+pod2usage(-exitstatus => 0, -verbose => 2, -noperldoc => 1) if $man;
+
+my $overall = 0;
+my $rc = 0;
+my $report = "";
+my @tags;
+my %libc = (
+ 'asprintf' => 1,
+ 'confstr' => 1,
+ 'dprintf' => 1,
+ 'fdelt' => 1,
+ 'fgets' => 1,
+ 'fgets_unlocked' => 1,
+ 'fgetws' => 1,
+ 'fgetws_unlocked' => 1,
+ 'fprintf' => 1,
+ 'fread' => 1,
+ 'fread_unlocked' => 1,
+ 'fwprintf' => 1,
+ 'getcwd' => 1,
+ 'getdomainname' => 1,
+ 'getgroups' => 1,
+ 'gethostname' => 1,
+ 'getlogin_r' => 1,
+ 'gets' => 1,
+ 'getwd' => 1,
+ 'longjmp' => 1,
+ 'mbsnrtowcs' => 1,
+ 'mbsrtowcs' => 1,
+ 'mbstowcs' => 1,
+ 'memcpy' => 1,
+ 'memmove' => 1,
+ 'mempcpy' => 1,
+ 'memset' => 1,
+ 'obstack_printf' => 1,
+ 'obstack_vprintf' => 1,
+ 'poll' => 1,
+ 'ppoll' => 1,
+ 'pread64' => 1,
+ 'pread' => 1,
+ 'printf' => 1,
+ 'ptsname_r' => 1,
+ 'read' => 1,
+ 'readlink' => 1,
+ 'readlinkat' => 1,
+ 'realpath' => 1,
+ 'recv' => 1,
+ 'recvfrom' => 1,
+ 'snprintf' => 1,
+ 'sprintf' => 1,
+ 'stpcpy' => 1,
+ 'stpncpy' => 1,
+ 'strcat' => 1,
+ 'strcpy' => 1,
+ 'strncat' => 1,
+ 'strncpy' => 1,
+ 'swprintf' => 1,
+ 'syslog' => 1,
+ 'ttyname_r' => 1,
+ 'vasprintf' => 1,
+ 'vdprintf' => 1,
+ 'vfprintf' => 1,
+ 'vfwprintf' => 1,
+ 'vprintf' => 1,
+ 'vsnprintf' => 1,
+ 'vsprintf' => 1,
+ 'vswprintf' => 1,
+ 'vsyslog' => 1,
+ 'vwprintf' => 1,
+ 'wcpcpy' => 1,
+ 'wcpncpy' => 1,
+ 'wcrtomb' => 1,
+ 'wcscat' => 1,
+ 'wcscpy' => 1,
+ 'wcsncat' => 1,
+ 'wcsncpy' => 1,
+ 'wcsnrtombs' => 1,
+ 'wcsrtombs' => 1,
+ 'wcstombs' => 1,
+ 'wctomb' => 1,
+ 'wmemcpy' => 1,
+ 'wmemmove' => 1,
+ 'wmempcpy' => 1,
+ 'wmemset' => 1,
+ 'wprintf' => 1,
+);
+
+# Report a good test.
+sub good {
+ my ($name, $msg_color, $msg) = @_;
+ $msg_color = colored($msg_color, 'green') if $color;
+ if (defined $msg) {
+ $msg_color .= $msg;
+ }
+ good_msg("$name: $msg_color");
+}
+
+sub good_msg($) {
+ my ($msg) = @_;
+ if ($quiet == 0) {
+ $report .= "\n$msg";
+ }
+}
+
+sub unknown {
+ my ($name, $msg) = @_;
+ $msg = colored($msg, 'yellow') if $color;
+ good_msg("$name: $msg");
+}
+
+# Report a failed test, possibly ignoring it.
+sub bad($$$$$) {
+ my ($name, $file, $long_name, $msg, $ignore) = @_;
+
+ $msg = colored($msg, 'red') if $color;
+
+ $msg = "$long_name: " . $msg;
+ if ($ignore) {
+ $msg .= " (ignored)";
+ } else {
+ $rc = 1;
+ if ($lintian) {
+ push(@tags, "$name:$file");
+ }
+ }
+ $report .= "\n$msg";
+}
+
+# Safely run list-based command line and return stdout.
+sub output(@) {
+ my (@cmd) = @_;
+ my ($pid, $stdout, $stderr);
+ if ($debug) {
+ print join(" ", @cmd), "\n";
+ }
+ $stdout = gensym;
+ $stderr = gensym;
+ $pid = open3(gensym, $stdout, $stderr, @cmd);
+
+ my $selector = IO::Select->new();
+ $selector->add($stdout);
+ $selector->add($stderr);
+
+ my $collect_out = "";
+ my $collect_err = "";
+
+ while (my @ready = $selector->can_read()) {
+ foreach my $fh (@ready) {
+ my $buf;
+ my $len = sysread($fh, $buf, 4096);
+ if ($len == 0) {
+ $selector->remove($fh);
+ next;
+ }
+
+ if ($fh == $stdout) {
+ $collect_out .= $buf;
+ } else {
+ $collect_err .= $buf;
+ }
+ }
+ }
+
+ waitpid($pid, 0);
+ my $rc = $?;
+ if ($rc != 0) {
+ print STDERR $collect_err;
+ return "";
+ }
+ return $collect_out;
+}
+
+# Find the libc used in this executable, if any.
+sub find_libc($) {
+ my ($file) = @_;
+ my $ldd = output("ldd", $file);
+ $ldd =~ /^\s*libc\.so\.\S+\s+\S+\s+(\S+)/m;
+ return $1 || "";
+}
+
+sub find_functions($$) {
+ my ($file, $undefined) = @_;
+ my (%funcs);
+
+ # Catch "NOTYPE" for object archives.
+ my $func_regex = " (I?FUNC|NOTYPE) ";
+
+ my $relocs = output("readelf", "-sW", $file);
+ for my $line (split("\n", $relocs)) {
+ next if ($line !~ /$func_regex/);
+ next if ($undefined && $line !~ /$func_regex.* UND /);
+
+ $line =~ s/ \([0-9]+\)$//;
+ $line =~ s/.* //;
+ $line =~ s/@.*//;
+ $funcs{$line} = 1;
+ }
+
+ return \%funcs;
+}
+
+$ENV{'LANG'} = "C";
+
+if ($find_libc_functions) {
+ pod2usage(1) if (!defined($ARGV[0]));
+ my $libc_path = find_libc($ARGV[0]);
+
+ my $funcs = find_functions($libc_path, 0);
+ for my $func (sort(keys(%{$funcs}))) {
+ if ($func =~ /^__(\S+)_chk$/) {
+ print " '$1' => 1,\n";
+ }
+ }
+ exit(0);
+}
+die "List of libc functions not defined!" if (scalar(keys %libc) < 1);
+
+my $name;
+foreach my $file (@ARGV) {
+ $rc = 0;
+ my $elf = 1;
+
+ $report = "$file:";
+ @tags = ();
+
+ # Get program headers.
+ my $PROG_REPORT = output("readelf", "-lW", $file);
+ if (length($PROG_REPORT) == 0) {
+ $overall = 1;
+ next;
+ }
+
+ # Get ELF headers.
+ my $DYN_REPORT = output("readelf", "-dW", $file);
+
+ # Get disassembly
+ my $DISASM
+ = output("objdump", "-d", "--no-show-raw-insn", "-M", "intel", $file);
+
+ # Get notes
+ my $NOTES = output("readelf", "-n", $file);
+
+ # Get list of all symbols needing external resolution.
+ my $functions = find_functions($file, 1);
+
+ # PIE
+ # First, verify this is an executable, not a library. This seems to be
+ # best seen by checking for the PHDR program header.
+ $name = " Position Independent Executable";
+ $PROG_REPORT =~ /^Elf file type is (\S+)/m;
+ my $elftype = $1 || "";
+ if ($elftype eq "DYN") {
+ if ($PROG_REPORT =~ /^ *\bPHDR\b/m) {
+
+ # Executable, DYN ELF type.
+ good($name, "yes");
+ } else {
+ # Shared library, DYN ELF type.
+ good($name, "no, regular shared library (ignored)");
+ }
+ } elsif ($elftype eq "EXEC") {
+
+ # Executable, EXEC ELF type.
+ bad("no-pie", $file, $name, "no, normal executable!", $skip_pie);
+ } else {
+ $elf = 0;
+
+ # Is this an ar file with objects?
+ open(AR, "<$file");
+ my $header = <AR>;
+ close(AR);
+ if ($header eq "!<arch>\n") {
+ good($name, "no, object archive (ignored)");
+ } else {
+ # ELF type is neither DYN nor EXEC.
+ bad("unknown-elf", $file, $name,
+ "not a known ELF type!? ($elftype)", 0);
+ }
+ }
+
+ # Stack-protected
+ $name = " Stack protected";
+ if (defined($functions->{'__stack_chk_fail'})
+ || (!$elf && defined($functions->{'__stack_chk_fail_local'}))) {
+ good($name, "yes");
+ } else {
+ if (%{$functions} eq 0) {
+ unknown($name, "unknown, no symbols found");
+ } else {
+ bad("no-stackprotector", $file, $name, "no, not found!",
+ $skip_stackprotector);
+ }
+ }
+
+ # Fortified Source
+ $name = " Fortify Source functions";
+ my @unprotected;
+ my @protected;
+ for my $name (keys(%libc)) {
+ if (defined($functions->{$name})) {
+ push(@unprotected, $name);
+ }
+ if (defined($functions->{"__${name}_chk"})) {
+ push(@protected, $name);
+ }
+ }
+ if ($#protected > -1) {
+ if ($#unprotected == -1) {
+
+ # Certain.
+ good($name, "yes");
+ } else {
+ # Vague, due to possible compile-time optimization,
+ # multiple linkages, etc. Assume "yes" for now.
+ good($name, "yes", " (some protected functions found)");
+ }
+ } else {
+ if ($#unprotected == -1) {
+ unknown($name, "unknown, no protectable libc functions used");
+ } else {
+ # Vague, since it's possible to have the compile-time
+ # optimizations do away with them, or be unverifiable
+ # at runtime. Assume "no" for now.
+ bad("no-fortify-functions", $file, $name,
+ "no, only unprotected functions found!",
+ $skip_fortify);
+ }
+ }
+ if ($verbose) {
+ for my $name (@unprotected) {
+ good_msg("\tunprotected: $name");
+ }
+ for my $name (@protected) {
+ good_msg("\tprotected: $name");
+ }
+ }
+
+ # Format
+ # Unfortunately, I haven't thought of a way to test for this after
+ # compilation. What it really needs is a lintian-like check that
+ # reviews the build logs and looks for the warnings, or that the
+ # argument is changed to use -Werror=format-security to stop the build.
+
+ # RELRO
+ $name = " Read-only relocations";
+ if ($PROG_REPORT =~ /^ *\bGNU_RELRO\b/m) {
+ good($name, "yes");
+ } else {
+ if ($elf) {
+ bad("no-relro", $file, $name, "no, not found!", $skip_relro);
+ } else {
+ good($name, "no", ", non-ELF (ignored)");
+ }
+ }
+
+ # BIND_NOW
+ # This marking keeps changing:
+ # 0x0000000000000018 (BIND_NOW)
+ # 0x000000006ffffffb (FLAGS) Flags: BIND_NOW
+ # 0x000000006ffffffb (FLAGS_1) Flags: NOW
+
+ $name = " Immediate binding";
+ if ( $DYN_REPORT =~ /^\s*\S+\s+\(BIND_NOW\)/m
+ || $DYN_REPORT =~ /^\s*\S+\s+\(FLAGS\).*\bBIND_NOW\b/m
+ || $DYN_REPORT =~ /^\s*\S+\s+\(FLAGS_1\).*\bNOW\b/m) {
+ good($name, "yes");
+ } else {
+ if ($elf) {
+ bad("no-bindnow", $file, $name, "no, not found!", $skip_bindnow);
+ } else {
+ good($name, "no", ", non-ELF (ignored)");
+ }
+ }
+
+ # For stack clash we need to look for a specific sequence of
+ # instructions in the objdump disassembly
+ $name = " Stack clash protection";
+ my $index = 0;
+ my $cmp_addr = 0;
+ my @patterns = (
+ qr/^\s+([0-9a-f]+):\s+cmp\s+(rsp.*|.*0x1000)/,
+ qr/^\s+[0-9a-f]+:\s+j[eb]\s+([x0-9a-f]+)/,
+ qr/^\s+[0-9a-f]+:\s+sub\s+(.*,0x1000)/,
+ qr/^\s+[0-9a-f]+:\s+or\s+(.*,0x0)/,
+ qr/^\s+([0-9a-f]+):\s+(jmp\s+([x0-9a-f]+)|cmp\s+rsp,.*)/,
+ qr/^\s+([0-9a-f]+):\s+jne\s+([x0-9a-f]+)/
+ );
+ my $found = 0;
+ foreach my $line (split /\n/, $DISASM) {
+
+ # look for each regex from patterns in succession - they all
+ # should be consecutive in the binary so we always fall back to
+ # index 0 if we fail to find the next one
+ if (my @matches = ($line =~ $patterns[$index])) {
+ if ($index == 0) {
+ $cmp_addr = hex($matches[0]);
+ } elsif ($index == 4) {
+
+ # this could be either the jmp or cmp - if is jump then
+ # this is the last instruction in the sequence otherwise
+ # cmp has a jne following for index 5
+ if ($matches[1] =~ /^jmp.*/) {
+ my $arg = hex($matches[2]);
+ if ($arg == $cmp_addr) {
+ good($name, "yes");
+ $found = 1;
+ last;
+ } else {
+ # since the expected instructions should be
+ # contiguous, always fall back to zero on failure
+ $index = 0;
+ next;
+ }
+ }
+
+ # nothing to do for the cmp case
+ } elsif ($index == 5) {
+ my $arg = hex($matches[1]);
+ if ($arg == $cmp_addr + 5) {
+ good($name, "yes");
+ $found = 1;
+ last;
+ } else {
+ # since the expected instructions should be
+ # contiguous, always fall back to zero on failure
+ $index = 0;
+ next;
+ }
+ }
+ ++$index;
+ } else {
+ $index = 0;
+ }
+ }
+ if (!$found) {
+ unknown($name,
+ "unknown, no -fstack-clash-protection instructions found");
+ }
+
+ # For cf-protection look for x86 feature: IBT, SHSTK
+ $name = " Control flow integrity";
+ if ($NOTES =~ /^\s+Properties: x86 feature: IBT, SHSTK/m) {
+ good($name, "yes");
+ } else {
+ bad("no-cfprotection", $file, $name, "no, not found!",
+ $skip_cfprotection);
+ }
+
+ if (!$lintian && (!$quiet || $rc != 0)) {
+ print $report, "\n";
+ }
+
+ if ($report_functions) {
+ for my $name (keys(%{$functions})) {
+ print $name, "\n";
+ }
+ }
+
+ if (!$lintian && $rc) {
+ $overall = $rc;
+ }
+
+ if ($lintian) {
+ for my $tag (@tags) {
+ print $tag, "\n";
+ }
+ }
+}
+
+exit($overall);
+
+__END__
+
+=head1 NAME
+
+hardening-check - check binaries for security hardening features
+
+=head1 SYNOPSIS
+
+hardening-check [options] [ELF ...]
+
+Examine a given set of ELF binaries and check for several security hardening
+features, failing if they are not all found.
+
+=head1 DESCRIPTION
+
+This utility checks a given list of ELF binaries for several security
+hardening features that can be compiled into an executable. These
+features are:
+
+=over 8
+
+=item B<Position Independent Executable>
+
+This indicates that the executable was built in such a way (PIE) that
+the "text" section of the program can be relocated in memory. To take
+full advantage of this feature, the executing kernel must support text
+Address Space Layout Randomization (ASLR).
+
+=item B<Stack Protected>
+
+This indicates that there is evidence that the ELF was compiled with the
+L<gcc(1)> option B<-fstack-protector> (e.g. uses B<__stack_chk_fail>). The
+program will be resistant to having its stack overflowed.
+
+When an executable was built without any character arrays being allocated
+on the stack, this check will lead to false alarms (since there is no
+use of B<__stack_chk_fail>), even though it was compiled with the correct
+options.
+
+=item B<Fortify Source functions>
+
+This indicates that the executable was compiled with
+B<-D_FORTIFY_SOURCE=2> and B<-O1> or higher. This causes certain unsafe
+glibc functions with their safer counterparts (e.g. B<strncpy> instead
+of B<strcpy>), or replaces calls that are verifiable at runtime with the
+runtime-check version (e.g. B<__memcpy_chk> insteade of B<memcpy>).
+
+When an executable was built such that the fortified versions of the glibc
+functions are not useful (e.g. use is verified as safe at compile time, or
+use cannot be verified at runtime), this check will lead to false alarms.
+In an effort to mitigate this, the check will pass if any fortified function
+is found, and will fail if only unfortified functions are found. Uncheckable
+conditions also pass (e.g. no functions that could be fortified are found, or
+not linked against glibc).
+
+=item B<Read-only relocations>
+
+This indicates that the executable was build with B<-Wl,-z,relro> to
+have ELF markings (RELRO) that ask the runtime linker to mark any
+regions of the relocation table as "read-only" if they were resolved
+before execution begins. This reduces the possible areas of memory in
+a program that can be used by an attacker that performs a successful
+memory corruption exploit.
+
+=item B<Immediate binding>
+
+This indicates that the executable was built with B<-Wl,-z,now> to have
+ELF markings (BIND_NOW) that ask the runtime linker to resolve all
+relocations before starting program execution. When combined with RELRO
+above, this further reduces the regions of memory available to memory
+corruption attacks.
+
+=back
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<--nopie>, B<-p>
+
+Do not require that the checked binaries be built as PIE.
+
+=item B<--nostackprotector>, B<-s>
+
+Do not require that the checked binaries be built with the stack protector.
+
+=item B<--nofortify>, B<-f>
+
+Do not require that the checked binaries be built with Fortify Source.
+
+=item B<--norelro>, B<-r>
+
+Do not require that the checked binaries be built with RELRO.
+
+=item B<--nobindnow>, B<-b>
+
+Do not require that the checked binaries be built with BIND_NOW.
+
+=item B<--nocfprotection>, B<-b>
+
+Do not require that the checked binaries be built with control flow protection.
+
+=item B<--quiet>, B<-q>
+
+Only report failures.
+
+=item B<--verbose>, B<-v>
+
+Report verbosely on failures.
+
+=item B<--report-functions>, B<-R>
+
+After the report, display all external functions needed by the ELF.
+
+=item B<--find-libc-functions>, B<-F>
+
+Instead of the regular report, locate the libc for the first ELF on the
+command line and report all the known "fortified" functions exported by
+libc.
+
+=item B<--color>, B<-c>
+
+Enable colorized status output.
+
+=item B<--lintian>, B<-l>
+
+Switch reporting to lintian-check-parsable output.
+
+=item B<--debug>
+
+Report some debugging during processing.
+
+=item B<--help>, B<-h>, B<-?>
+
+Print a brief help message and exit.
+
+=item B<--man>, B<-H>
+
+Print the manual page and exit.
+
+=back
+
+=head1 RETURN VALUE
+
+When all checked binaries have all checkable hardening features detected,
+this program will finish with an exit code of 0. If any check fails, the
+exit code with be 1. Individual checks can be disabled via command line
+options.
+
+=head1 AUTHOR
+
+Kees Cook <kees@debian.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2009-2013 Kees Cook <kees@debian.org>.
+
+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; version 2 or later.
+
+=head1 SEE ALSO
+
+L<gcc(1)>, L<hardening-wrapper(1)>
+
+=cut
diff --git a/scripts/list-unreleased.1 b/scripts/list-unreleased.1
new file mode 100644
index 0000000..824df4f
--- /dev/null
+++ b/scripts/list-unreleased.1
@@ -0,0 +1,23 @@
+.TH LIST-UNRELEASED 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+list-unreleased \- display UNRELEASED packages
+.SH SYNOPSIS
+\fBlist-unreleased\fR [\fIarg\fR ...] [\fIpath\fR ...]
+.SH DESCRIPTION
+Searches for packages whose changelogs indicate there are pending changes
+(UNRELEASED) and either lists them or displays the relevant changelog entry.
+.PP
+By default it searches for packages under the current directory. If a path
+is specified it will look for packages under that directory instead.
+.SH OPTIONS
+.TP
+.B -c
+Display pending changes.
+.TP
+.B -R
+Don't recurse into subdirectories looking for packages.
+.SH "SEE ALSO"
+.BR debchange (1)
+.SH AUTHOR
+\fBlist-unreleased\fR was written by Frans Pop <elendil@planet.nl>.
+This manual page was written by Joey Hess <joeyh@debian.org>.
diff --git a/scripts/list-unreleased.bash_completion b/scripts/list-unreleased.bash_completion
new file mode 100644
index 0000000..e560129
--- /dev/null
+++ b/scripts/list-unreleased.bash_completion
@@ -0,0 +1,13 @@
+# /usr/share/bash-completion/completions/list-unreleased
+# Bash command completion for ‘list-unreleased(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+complete -W '-c -R' -o filenames -d list-unreleased
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/list-unreleased.sh b/scripts/list-unreleased.sh
new file mode 100755
index 0000000..05ed06b
--- /dev/null
+++ b/scripts/list-unreleased.sh
@@ -0,0 +1,92 @@
+#!/bin/bash
+
+# Script searches for packages with pending changes (UNRELEASED) and
+# either lists them or displays the relevant changelog entry.
+
+# Usage: list-unreleased [-cR]
+# -c : display pending changes
+# -R : don't recurse
+
+# Copyright: Frans Pop <elendil@planet.nl>, 2007
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or (at your option)
+# any later version.
+
+PATHS=""
+DO_CL=""
+RECURSE=1
+
+while true; do
+ case "$1" in
+ "")
+ break ;;
+ -c)
+ DO_CL=1
+ ;;
+ -R)
+ RECURSE=
+ ;;
+ -*)
+ echo "unrecognized argument '$1'"
+ exit 1
+ ;;
+ *)
+ PATHS="${PATHS:+$PATHS }$1"
+ ;;
+ esac
+ shift
+done
+
+[ "$PATHS" ] || PATHS=.
+
+vcs_dirs='\(\.\(svn\|hg\|git\|bzr\)\|_darcs\|_MTN\|CVS\)'
+get_list() {
+ local path="$1"
+
+ for dir in $(
+ if [ "$RECURSE" ]; then
+ find "$path" -type d ! -regex "$vcs_dirs"
+ else
+ find "$path" -maxdepth 1 -type d ! -regex "$vcs_dirs"
+ fi
+ ); do
+ changelog="$dir/debian/changelog"
+ if [ -f "$changelog" ] ; then
+ if head -n1 "$changelog" | grep -q UNRELEASED; then
+ echo $dir
+ fi
+ fi
+ done | sort
+}
+
+print_cl() {
+ local package="$1"
+ changelog="$package/debian/changelog"
+
+ # Check if more than one UNRELEASED entry at top of changelog
+ Ucount=$(grep "^[^ ]" $changelog | \
+ head -n2 | grep -c UNRELEASED)
+ if [ $Ucount -eq 1 ]; then
+ sed -n "1,/^ --/p" $changelog
+ else
+ echo "ERROR: changelog has more than one UNRELEASED entry!"
+ # Second sed is to add back a blank line between entries
+ sed -n "/^[^ ].*UNRELEASED/,/^ --/p" $changelog | \
+ sed '2,$s/^\([^ ]\)/\n\1/'
+ fi
+}
+
+first=""
+for path in $PATHS; do
+ if [ -z "$DO_CL" ]; then
+ echo "$(get_list "$path" | sed "s:^\./::")"
+ else
+ for package in $(get_list "$path"); do
+ [ -z "$first" ] || echo -e "\n====================\n"
+ first=1
+
+ print_cl "$package"
+ done
+ fi
+done
diff --git a/scripts/ltnu.pod b/scripts/ltnu.pod
new file mode 100644
index 0000000..b7d78fe
--- /dev/null
+++ b/scripts/ltnu.pod
@@ -0,0 +1,108 @@
+=head1 NAME
+
+ltnu - lists packages of a maintainer ordered by last upload
+
+=head1 SYNOPSIS
+
+B<env> DEBEMAIL=I<maintainer> B<ltnu> [-m]
+
+B<ltnu> [-m] I<maintainer>
+
+B<ltnu> --help
+
+=head1 DESCRIPTION
+
+B<ltnu> (Long Time No Upload) queries the public mirror of the
+Ultimate Debian Database (udd-mirror.debian.net) for all uploads of
+packages by the given uploader or maintainer and displays them ordered
+by the last upload of that package to Debian Unstable, oldest uploads
+first.
+
+Its primary purpose is to check which of your own or your team's
+packages haven't been uploaded for a long time and likely need a
+packaging revamp. It's less suitable for MIA team purposes as it
+doesn't make a difference with regards to who actually uploaded a
+package.
+
+=head1 OPTIONS
+
+=over 4
+
+=item -m
+
+Only search in the Maintainer field and ignore the Uploaders field.
+
+=back
+
+=head1 PARAMETERS
+
+The maintainer/uploader to query can be given either by setting
+C<$DEBEMAIL> as environment variable or as single commandline parameter.
+
+If a commandline parameter does not contain an C<@>, C<@debian.org> is
+appended, e.g. C<ltnu abe> queries for C<abe@debian.org>.
+
+Exceptions are some shortcuts for common, long e-mail addresses. So
+far implemented shortcuts:
+
+=over 13
+
+=item pkg-gnustep
+
+pkg-gnustep-maintainers@lists.alioth.debian.org
+
+=item pkg-perl
+
+pkg-perl-maintainers@lists.alioth.debian.org
+
+=item pkg-zsh
+
+pkg-zsh-devel@lists.alioth.debian.org
+
+=item qa
+
+packages@qa.debian.org
+
+=back
+
+=head1 ENVIRONMENT
+
+The following environment variables are honoured:
+
+=over
+
+=item DEBEMAIL
+
+Used for querying if no parameter is given.
+
+=item PAGER
+
+Used by B<psql> as pager.
+
+=back
+
+=head1 EXAMPLE
+
+ $ ltnu pkg-zsh
+ source | ver | uploaded
+ -------------------------+--------------+------------------------
+ zgen | 0~20150919-3 | 2016-08-24 04:55:31+00
+ zplug | 2.4.1-1 | 2017-01-13 09:51:26+00
+ zsh-syntax-highlighting | 0.6.0-1 | 2017-08-30 09:06:26+00
+ zsh | 5.4.2-2 | 2017-11-02 20:56:55+00
+ (4 rows)
+
+=head1 DEPENDENCIES
+
+B<ltnu> uses the PostgreSQL client command B<psql> and hence needs
+Debian's B<postgresql-client> package to be installed.
+
+=head1 AUTHOR, COPYRIGHT, LICENSE
+
+Copyright 2017 Axel Beckert <abe@debian.org>. Licensed under the GNU
+General Public License, version 2 or later.
+
+=head1 SEE ALSO
+
+L<https://udd-mirror.debian.net/>, L<https://udd.debian.org/>,
+L<https://wiki.debian.org/UltimateDebianDatabase>
diff --git a/scripts/ltnu.sh b/scripts/ltnu.sh
new file mode 100755
index 0000000..c0fbaae
--- /dev/null
+++ b/scripts/ltnu.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+# Copyright 2017 Axel Beckert <abe@debian.org>.
+# Licensed under the GNU GPL, version 2 or later.
+
+set -e
+
+if [ "${1}" = '-h' -o "${1}" = '--help' ]; then
+ echo "${0} (Long Time No Upload) queries the public mirror of the
+Ultimate Debian Database (UDD) for all uploads of packages by the
+given uploader or maintainer and displays them ordered by the last
+upload of that package, oldest uploads first.
+
+The maintainer/uploader to query can be given either by setting
+\$DEBEMAIL as environment variable or as single commandline parameter.
+
+If a commandline parameter does not contain an \"@\", \"@debian.org\"
+is appended, e.g. \"${0} abe\" queries for \"abe@debian.org\".
+
+Exceptions are some shortcuts for common, long e-mail addresses. So
+far implemented shortcuts:
+
+* pkg-perl = pkg-perl-maintainers@lists.alioth.debian.org
+* pkg-zsh = pkg-zsh-devel@lists.alioth.debian.org
+* pkg-gnustep = pkg-gnustep-maintainers@lists.alioth.debian.org
+"
+ exit 0
+fi
+
+if [ ! -x /usr/bin/psql ]; then
+ echo "/usr/bin/psql not found or not executable" 1>&2
+ echo "${0} requires a PostgreSQL client (psql) to be installed." 1>&2
+ exit 2
+fi
+
+# Some option parsing
+QUERY_UPLOADER=1
+if [ "$1" = "-m" ]; then
+ QUERY_UPLOADER=0
+ shift
+fi
+
+MAINT="${DEBEMAIL}"
+if [ -n "${1}" ]; then
+ if echo "${1}" | grep -qF @; then
+ MAINT="${1}"
+ elif [ "${1}" = "pkg-gnustep" ]; then
+ MAINT="pkg-gnustep-maintainers@lists.alioth.debian.org"
+ elif [ "${1}" = "pkg-perl" ]; then
+ MAINT="pkg-perl-maintainers@lists.alioth.debian.org"
+ elif [ "${1}" = "pkg-zsh" ]; then
+ MAINT="pkg-zsh-devel@lists.alioth.debian.org"
+ elif [ "${1}" = "qa" ]; then
+ MAINT="packages@qa.debian.org"
+ else
+ MAINT="${1}@debian.org"
+ fi
+fi
+
+if [ -z "${MAINT}" ]; then
+ echo "${0} requires either the environment variable \$DEBEMAIL to be set or a single parameter." 1>&2
+ exit 1;
+fi
+
+if [ -z "${PAGER}" -o "${PAGER}" = "less" ]; then
+ export PAGER="less -S"
+fi
+
+UPLOADER=''
+if [ "$QUERY_UPLOADER" = 1 ]; then
+ UPLOADER=" or uploaders like '%<${MAINT}>%'"
+fi
+
+env PGPASSWORD=udd-mirror psql --host=udd-mirror.debian.net --user=udd-mirror udd --command="
+select source,
+ max(version) as ver,
+ max(date) as uploaded
+from upload_history
+where distribution='unstable' and
+ source in (select source
+ from sources
+ where ( maintainer_email='${MAINT}' $UPLOADER ) and
+ release='sid')
+group by source
+order by max(date) asc;
+"
diff --git a/scripts/manpage-alert.1 b/scripts/manpage-alert.1
new file mode 100644
index 0000000..833dcf6
--- /dev/null
+++ b/scripts/manpage-alert.1
@@ -0,0 +1,35 @@
+.TH MANPAGE-ALERT 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+manpage-alert \- check for binaries without corresponding manpages
+.SH SYNOPSIS
+\fBmanpage-alert\fR [\fIoptions\fR] [\fIpaths\fR]
+.SH DESCRIPTION
+\fBmanpage-alert\fR searches the given list of paths for binaries without
+corresponding manpages.
+.P
+If no \fIpaths\fR are specified on the command line, the path list
+\fI/bin /sbin /usr/bin /usr/sbin /usr/games\fR will be assumed.
+.SH OPTIONS
+.TP
+.BR \-h\fR, \fB\-\-help
+Show a summary of options.
+.TP
+.BR \-V\fR, \fB\-\-version
+Show version and copyright information.
+.TP
+.BR \-f\fR, \fB\-\-file
+Show filenames of missing manpages without any leading text.
+.TP
+.BR \-p\fR, \fB\-\-package
+Show filenames of missing manpages with their package name.
+.TP
+.BR \-n\fR, \fB\-\-no\-stat
+Do not show statistics at the end.
+.SH AUTHOR
+\fBmanpage-alert\fR was written by Branden Robinson and modified by
+Julian Gilbey <jdg@debian.org> and Adam D. Barratt
+<debian\-bts@adam\-barratt.org.uk> (who also wrote this manpage) for the
+devscripts package.
+.P
+This manpage and the associated program are licensed under the terms of
+the GPL, version 2 or later.
diff --git a/scripts/manpage-alert.sh b/scripts/manpage-alert.sh
new file mode 100755
index 0000000..626b377
--- /dev/null
+++ b/scripts/manpage-alert.sh
@@ -0,0 +1,147 @@
+#!/bin/sh -e
+#
+# Copyright 2005 Branden Robinson
+# Changes copyright 2007 by their respective authors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+usage() {
+ cat <<EOF
+Usage: manpage-alert [options] [paths]
+ Options:
+ -h, --help This usage screen.
+ -V, --version Display the version and copyright information.
+ -f, --file Show filenames of missing manpages
+ without any leading text.
+ -p, --package Show filenames of missing manpages
+ with their package name.
+ -n, --no-stat Do not show statistics at the end.
+
+ This script will locate executables in the given paths with manpage
+ outputs for which no manpage is available and its statistics.
+
+ If no paths are specified on the command line, "/bin /sbin /usr/bin
+ /usr/sbin /usr/games" will be used by default.
+EOF
+}
+
+version() {
+ cat <<EOF
+This is manpage-alert, from the Debian devscripts package, version ###VERSION###.
+This code is (C) 2005 by Branden Robinson, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+showpackage() {
+ F1="$1"
+ P1="$(LANG=C dpkg-query -S "$F1" 2> /dev/null || true )"
+ Q1=""; R1=""; Q2=""; R2=""
+ if [ -n "$P1" ]; then
+ Q1="$(echo "$P1" | grep -v "^diversion by" || true)"
+ R1="$(echo "$P1" | sed -ne 's/^diversion by \(.*\) to:.*$/\1/p'): $F1"
+ fi
+ # symlink may be created by postinst script for alternatives etc.,
+ if [ -z "$Q1" ] && [ -L "$F1" ]; then
+ F2=$(readlink -f "$F1")
+ P2="$(LANG=C dpkg-query -S "$F2" 2> /dev/null || true )"
+ if [ -n "$P2" ]; then
+ Q2="$(echo "$P2" | grep -v "^diversion by" || true)"
+ R2="$(echo "$P2" | sed -ne 's/^diversion by \(.*\) to:.*$/\1/p'): $F2"
+ fi
+ fi
+ if [ -n "$Q1" ]; then
+ echo "$Q1"
+ elif [ -n "$R1" ]; then
+ echo "$R1 (diversion)"
+ elif [ -n "$Q2" ]; then
+ echo "unknown_package: $F1 -> $Q2"
+ elif [ -n "$R2" ]; then
+ echo "unknown_package: $F1 -> $R2 (diversion)"
+ else
+ echo "unknown_package: $F1"
+ fi
+}
+
+SHOWPACKAGE=DEFAULT
+SHOWSTAT=TRUE
+
+while [ -n "$1" ]; do
+ case "$1" in
+ -h|--help) usage; exit 0;;
+ -V|--version) version; exit 0;;
+ -p|--package) SHOWPACKAGE=PACKAGE
+ shift
+ ;;
+ -f|--file) SHOWPACKAGE=FILE
+ shift
+ ;;
+ -n|--no-stat) SHOWSTAT=FALSE
+ shift
+ ;;
+ *) break
+ ;;
+ esac
+done
+
+if [ $# -lt 1 ]; then
+ # check if we're running on a usrmerge system
+ if [ -L /bin -a -L /sbin ]; then
+ set -- /usr/bin /usr/sbin /usr/games
+ else
+ set -- /bin /sbin /usr/bin /usr/sbin /usr/games
+ fi
+fi
+
+NUM_EXECUTABLES=0
+NUM_MANPAGES_FOUND=0
+NUM_MANPAGES_MISSING=0
+
+for DIR in "$@"; do
+ for F in "$DIR"/*; do
+ # Skip as it's a symlink to /usr/bin
+ if [ "$F" = "/usr/bin/X11" ]; then continue; fi
+ NUM_EXECUTABLES=$(( NUM_EXECUTABLES + 1 ))
+
+ if OUT=$(man -w -S 1:8:6 "${F##*/}" 2>&1 > /dev/null); then
+ NUM_MANPAGES_FOUND=$(( NUM_MANPAGES_FOUND + 1 ))
+ else
+ if [ $SHOWPACKAGE = "PACKAGE" ]; then
+ # echo "<packagename>: <filename>"
+ showpackage "$F"
+ elif [ $SHOWPACKAGE = "FILE" ]; then
+ # echo "<filename>"
+ echo "$F"
+ else
+ # echo "No manual entry for <filename>"
+ echo "$OUT" | perl -ne "next if /^.*'man 7 undocumented'.*$/;" \
+ -e "s,(\W)\Q${F##*/}\E(?:\b|$),\1$F,; s,//,/,; print;"
+ fi
+ NUM_MANPAGES_MISSING=$(( NUM_MANPAGES_MISSING + 1 ))
+ fi
+ done
+done
+
+if [ $SHOWSTAT = "TRUE" ]; then
+echo
+printf "Of %d commands, found manpages for %d (%d missing).\n" \
+ $NUM_EXECUTABLES \
+ $NUM_MANPAGES_FOUND \
+ $NUM_MANPAGES_MISSING
+fi
+
+# vim:set ai et sw=4 ts=4 tw=80:
diff --git a/scripts/mass-bug.pl b/scripts/mass-bug.pl
new file mode 100755
index 0000000..805d9ef
--- /dev/null
+++ b/scripts/mass-bug.pl
@@ -0,0 +1,570 @@
+#!/usr/bin/perl
+
+# mass-bug: mass-file a bug report against a list of packages
+# For options, see the usage message below.
+#
+# Copyright 2006 by Joey Hess <joeyh@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+=head1 NAME
+
+mass-bug - mass-file a bug report against a list of packages
+
+=head1 SYNOPSIS
+
+B<mass-bug> [I<options>] B<--subject=">I<bug subject>B<"> I<template package-list>
+
+=head1 DESCRIPTION
+
+mass-bug assists in filing a mass bug report in the Debian BTS on a set of
+packages. For each package in the package-list file (which should list one
+package per line together with an optional version number separated
+from the package name by an underscore), it fills out the template, adds
+BTS pseudo-headers, and either displays or sends the bug report.
+
+Warning: Some care has been taken to avoid unpleasant and common mistakes,
+but this is still a power tool that can generate massive amounts of bug
+report mails. Use it with care, and read the documentation in the
+Developer's Reference about mass filing of bug reports first.
+
+=head1 TEMPLATE
+
+The template file is the body of the message that will be sent for each bug
+report, excluding the BTS pseudo-headers. In the template, #PACKAGE# is
+replaced with the name of the package. If a version was specified for
+the package, #VERSION# will be replaced by that version.
+
+The components of the version number may be specified using #EPOCH#,
+#UPSTREAM_VERSION# and #REVISION#. #EPOCH# includes the trailing colon and
+#REVISION# the leading dash so that #EPOCH#UPSTREAM_VERSION##REVISION# is
+always the same as #VERSION#.
+
+Note that text in the template will be automatically word-wrapped to 70
+columns, up to the start of a signature (indicated by S<'-- '> at the
+start of a line on its own). This is another reason to avoid including
+BTS pseudo-headers in your template.
+
+=head1 OPTIONS
+
+B<mass-bug> examines the B<devscripts> configuration files as described
+below. Command line options override the configuration file settings,
+though.
+
+=over 4
+
+=item B<--severity=>(B<wishlist>|B<minor>|B<normal>|B<important>|B<serious>|B<grave>|B<critical>)
+
+Specify the severity with which bugs should be filed. Default
+is B<normal>.
+
+=item B<--display>
+
+Fill out the templates for each package and display them all for
+verification. This is the default behavior.
+
+=item B<--send>
+
+Actually send the bug reports.
+
+=item B<--subject=">I<bug subject>B<">
+
+Specify the subject of the bug report. The subject will be automatically
+prefixed with the name of the package that the bug is filed against.
+
+=item B<--tags>
+
+Set the BTS pseudo-header for tags.
+
+=item B<--user>
+
+Set the BTS pseudo-header for a usertags' user.
+
+=item B<--usertags>
+
+Set the BTS pseudo-header for usertags.
+
+=item B<--control=>I<COMMAND>
+
+Add a BTS control command. This option may be repeated to add multiple
+control commands. For example, if you are mass-bug-filing "please stop
+depending on this deprecated package", and bug 123456 represents removal
+of the deprecated package, you could use:
+
+ mass-bug --control='block 123456 by -1' ...
+
+=item B<--source>
+
+Specify that package names refer to source packages rather than binary
+packages.
+
+=item B<--sendmail=>I<SENDMAILCMD>
+
+Specify the B<sendmail> command. The command will be split on white
+space and will not be passed to a shell. Default is F</usr/sbin/sendmail>.
+
+=item B<--no-wrap>
+
+Do not wrap the template to lines of 70 characters.
+
+=item B<--no-conf>, B<--noconf>
+
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+
+=item B<--help>
+
+Provide a usage message.
+
+=item B<--version>
+
+Display version information.
+
+=back
+
+=head1 ENVIRONMENT
+
+B<DEBEMAIL> and B<EMAIL> can be set in the environment to control the email
+address that the bugs are sent from.
+
+=head1 CONFIGURATION VARIABLES
+
+The two configuration files F</etc/devscripts.conf> and
+F<~/.devscripts> are sourced by a shell in that order to set
+configuration variables. Command line options can be used to override
+configuration file settings. Environment variable settings are
+ignored for this purpose. The currently recognised variables are:
+
+=over 4
+
+=item B<BTS_SENDMAIL_COMMAND>
+
+If this is set, specifies a B<sendmail> command to use instead of
+F</usr/sbin/sendmail>. Same as the B<--sendmail> command line option.
+
+=back
+
+=cut
+
+use strict;
+use warnings;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use Text::Wrap;
+use File::Basename;
+use POSIX qw(locale_h strftime);
+
+setlocale(LC_TIME, "C"); # so that strftime is locale independent
+
+my $progname = basename($0);
+$Text::Wrap::columns = 70;
+my $submission_email = "maintonly\@bugs.debian.org";
+my $sendmailcmd = '/usr/sbin/sendmail';
+my $modified_conf_msg;
+my %versions;
+
+sub usageerror {
+ die
+"Usage: $progname [options] --subject=\"bug subject\" <template> <package-list>\n";
+}
+
+sub usage {
+ print <<"EOT";
+Usage:
+ $progname [options] --subject="bug subject" <template> <package-list>
+
+Valid options are:
+ --display Display the messages but don\'t send them
+ --send Actually send the mass bug reports to the BTS
+ --subject="bug subject"
+ Text for email subject line (will be prefixed
+ with "package: ")
+ --severity=(wishlist|minor|normal|important|serious|grave|critical)
+ Specify the severity of the bugs to be filed
+ (default "normal")
+
+ --tags=tags Set the BTS pseudo-header for tags.
+ --user=user Set the BTS pseudo-header for a usertags' user
+ --usertags=usertags Set the BTS pseudo-header for usertags
+ --control="COMMAND" Add an arbitrary BTS control command (repeatable)
+ --source Specify that package names refer to source packages
+
+ --sendmail=cmd Sendmail command to use (default /usr/sbin/sendmail)
+ --no-wrap Don't wrap the template to 70 chars.
+ --no-conf, --noconf Don\'t read devscripts config files;
+ must be the first option given
+ --help Display this message
+ --version Display version and copyright info
+
+ <template> File containing email template; #PACKAGE# will
+ be replaced by the package name and #VERSION#
+ with the corresponding version (or a blank
+ string if the version was not specified)
+ <package-list> File containing list of packages, one per line
+ in the format package(_version)
+
+ Ensure that you read the Developer\'s Reference on mass-filing bugs before
+ using this script!
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOT
+}
+
+sub version () {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2006 by Joey Hess, all rights reserved.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+}
+
+# Next, read read configuration files and then command line
+# The next stuff is boilerplate
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = ('BTS_SENDMAIL_COMMAND' => '/usr/sbin/sendmail',);
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ # Check validity
+ $config_vars{'BTS_SENDMAIL_COMMAND'} =~ /./
+ or $config_vars{'BTS_SENDMAIL_COMMAND'} = '/usr/sbin/sendmail';
+
+ if ($config_vars{'BTS_SENDMAIL_COMMAND'} ne '/usr/sbin/sendmail') {
+ my $cmd = (split ' ', $config_vars{'BTS_SENDMAIL_COMMAND'})[0];
+ unless ($cmd =~ /^~?[A-Za-z0-9_\-\+\.\/]*$/) {
+ warn
+"BTS_SENDMAIL_COMMAND contained funny characters: $cmd\nReverting to default value /usr/sbin/sendmail\n";
+ $config_vars{'BTS_SENDMAIL_COMMAND'} = '/usr/sbin/sendmail';
+ } elsif (system("command -v $cmd >/dev/null 2>&1") != 0) {
+ warn
+"BTS_SENDMAIL_COMMAND $cmd could not be executed.\nReverting to default value /usr/sbin/sendmail\n";
+ $config_vars{'BTS_SENDMAIL_COMMAND'} = '/usr/sbin/sendmail';
+ }
+ }
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ $sendmailcmd = $config_vars{'BTS_SENDMAIL_COMMAND'};
+}
+
+sub gen_subject {
+ my $subject = shift;
+ my $package = shift;
+
+ return "$package\: $subject";
+}
+
+sub gen_bug {
+ my $template_text = shift;
+ my $package = shift;
+ my $severity = shift;
+ my $tags = shift;
+ my $user = shift;
+ my $usertags = shift;
+ my $nowrap = shift;
+ my $type = shift;
+ my $control = shift;
+ my $version = "";
+ my $bugtext;
+
+ $version = $versions{$package} || "";
+
+ my ($epoch, $upstream, $revision)
+ = ($version =~ /^(\d+:)?(.+?)(-[^-]+)?$/);
+ $epoch ||= "";
+ $revision ||= "";
+
+ $template_text =~ s/#PACKAGE#/$package/g;
+ $template_text =~ s/#VERSION#/$version/g;
+ $template_text =~ s/#EPOCH#/$epoch/g;
+ $template_text =~ s/#UPSTREAM_VERSION#/$upstream/g;
+ $template_text =~ s/#REVISION#/$revision/g;
+
+ $version = "Version: $version\n" if $version;
+
+ unless ($nowrap) {
+ if ($template_text =~ /\A(.*?)(^-- $)(.*)/ms)
+ { # there's a sig involved
+ my ($presig, $sig) = ($1, $2 . $3);
+ $template_text = fill("", "", $presig) . "\n" . $sig;
+ } else {
+ $template_text = fill("", "", $template_text);
+ }
+ }
+ if (defined $control) {
+ $control = join '', map { "Control: $_\n" } @$control;
+ } else {
+ $control = '';
+ }
+ $bugtext = "$type: $package\n$version"
+ . "Severity: $severity\n$tags$user$usertags$control\n$template_text";
+ return $bugtext;
+}
+
+sub div {
+ print +("-" x 79) . "\n";
+}
+
+sub mailbts {
+ my ($subject, $body, $to, $from) = @_;
+
+ if (defined $from) {
+ my $date = strftime "%a, %d %b %Y %T %z", localtime;
+
+ my $pid = open(MAIL, "|-");
+ if (!defined $pid) {
+ die "$progname: Couldn't fork: $!\n";
+ }
+ $SIG{'PIPE'} = sub { die "$progname: pipe for $sendmailcmd broke\n"; };
+ if ($pid) {
+ # parent
+ print MAIL <<"EOM";
+From: $from
+To: $to
+Subject: $subject
+Date: $date
+X-Generator: mass-bug from devscripts ###VERSION###
+
+$body
+EOM
+ close MAIL or die "$progname: sendmail error: $!\n";
+ } else {
+ # child
+ exec(split(' ', $sendmailcmd), "-t")
+ or die "$progname: error running sendmail: $!\n";
+ }
+ } else { # No $from
+ unless (system("command -v mail >/dev/null 2>&1") == 0) {
+ die
+"$progname: You need to either specify an email address (say using DEBEMAIL)\n or have the mailx/mailutils package installed to send mail!\n";
+ }
+ my $pid = open(MAIL, "|-");
+ if (!defined $pid) {
+ die "$progname: Couldn't fork: $!\n";
+ }
+ $SIG{'PIPE'} = sub { die "$progname: pipe for mail broke\n"; };
+ if ($pid) {
+ # parent
+ print MAIL $body;
+ close MAIL or die "$progname: error running mail: $!\n";
+ } else {
+ # child
+ exec("mail", "-s", $subject, $to)
+ or die "$progname: error running mail: $!\n";
+ }
+ }
+}
+
+my $mode = "display";
+my $subject;
+my $severity = "normal";
+my $tags = "";
+my $user = "";
+my $usertags = "";
+my @control = ();
+my $type = "Package";
+my $opt_sendmail;
+my $nowrap = "";
+
+if (
+ !GetOptions(
+ "display" => sub { $mode = "display" },
+ "send" => sub { $mode = "send" },
+ "subject=s" => \$subject,
+ "severity=s" => \$severity,
+ "tags=s" => \$tags,
+ "user=s" => \$user,
+ "usertags=s" => \$usertags,
+ "control=s" => \@control,
+ "source" => sub { $type = "Source"; },
+ "sendmail=s" => \$opt_sendmail,
+ "help" => sub { usage(); exit 0; },
+ "version" => sub { version(); exit 0; },
+ "no-wrap" => sub { $nowrap = 1; },
+ 'noconf|no-conf' =>
+ sub { die '--noconf must come first on the command line' },
+ )
+) {
+ usageerror();
+}
+
+if (!defined $subject || !length $subject) {
+ print STDERR
+ "$progname: You must specify a subject for the bug reports.\n";
+ usageerror();
+}
+
+unless (
+ $severity =~ /^(wishlist|minor|normal|important|serious|grave|critical)$/)
+{
+ print STDERR
+"$progname: Severity must be one of wishlist, minor, normal, important, serious, grave or critical.\n";
+ usageerror();
+}
+
+if (@ARGV != 2) {
+ usageerror();
+}
+
+if ($tags) {
+ $tags = "Tags: $tags\n";
+}
+
+if ($user) {
+ $user = "User: $user\n";
+}
+
+if ($usertags) {
+ $usertags = "Usertags: $usertags\n";
+}
+
+if ($opt_sendmail) {
+ if ( $opt_sendmail ne '/usr/sbin/sendmail'
+ and $opt_sendmail ne $sendmailcmd) {
+ my $cmd = (split ' ', $opt_sendmail)[0];
+ unless ($cmd =~ /^~?[A-Za-z0-9_\-\+\.\/]*$/) {
+ warn
+"--sendmail command contained funny characters: $cmd\nReverting to default value $sendmailcmd\n";
+ undef $opt_sendmail;
+ } elsif (system("command -v $cmd >/dev/null 2>&1") != 0) {
+ warn
+"--sendmail command $cmd could not be executed.\nReverting to default value $sendmailcmd\n";
+ undef $opt_sendmail;
+ }
+ }
+}
+$sendmailcmd = $opt_sendmail if $opt_sendmail;
+
+my $template = shift;
+my $package_list = shift;
+
+my $template_text;
+open(T, "$template") || die "$progname: error reading $template: $!\n";
+{
+ local $/ = undef;
+ $template_text = <T>;
+}
+close T;
+if (!length $template_text) {
+ die "$progname: empty template\n";
+}
+
+my @packages;
+open(L, "$package_list") || die "$progname: error reading $package_list: $!\n";
+while (<L>) {
+ chomp;
+ if (!/^([-+\.a-z0-9]+)(?:_(.*))?$/) {
+ die "\"$_\" does not look like the name of a Debian package\n";
+ }
+ push @packages, $1;
+ $versions{$1} = $2 if $2;
+}
+close L;
+
+# Uses variables from above.
+sub showsample {
+ my $package = shift;
+
+ print "To: $submission_email\n";
+ print "Subject: " . gen_subject($subject, $package) . "\n";
+ print "\n";
+ print gen_bug(
+ $template_text, $package, $severity, $tags, $user,
+ $usertags, $nowrap, $type, \@control
+ ) . "\n";
+}
+
+if ($mode eq 'display') {
+ print "Displaying all " . scalar(@packages) . " bug reports..\n";
+ print "Run again with --send switch to send the bug reports.\n";
+ div();
+ foreach my $package (@packages) {
+ showsample($package);
+ div();
+ }
+} elsif ($mode eq 'send') {
+ my $from;
+ $from ||= $ENV{'DEBEMAIL'};
+ $from ||= $ENV{'EMAIL'};
+
+ print "Preparing to send "
+ . scalar(@packages)
+ . " bug reports like this one:\n";
+ div();
+ showsample($packages[0]);
+ div();
+ $| = 1;
+ print
+"Are you sure that you have read the Developer's Reference on mass-filing\nbug reports, have checked this case out on debian-devel, and really want to\nsend out these "
+ . scalar(@packages)
+ . " bug reports? [yes/no] ";
+ my $ans = <STDIN>;
+
+ unless ($ans =~ /^yes$/i) {
+ print "OK, aborting.\n";
+ exit 0;
+ }
+ print "OK, going ahead then...\n";
+ foreach my $package (@packages) {
+ print "Sending bug for $package ...\n";
+ mailbts(
+ gen_subject($subject, $package),
+ gen_bug(
+ $template_text, $package, $severity,
+ $tags, $user, $usertags,
+ $nowrap, $type, \@control,
+ ),
+ $submission_email,
+ $from
+ );
+ }
+ print "All bugs sent.\n";
+}
+
+=head1 COPYRIGHT
+
+This program is Copyright (C) 2006 by Joey Hess <joeyh@debian.org>.
+
+It is licensed under the terms of the GPL, either version 2 of the
+License, or (at your option) any later version.
+
+=head1 AUTHOR
+
+Joey Hess <joeyh@debian.org>
+
+=cut
diff --git a/scripts/mergechanges.1 b/scripts/mergechanges.1
new file mode 100644
index 0000000..f815862
--- /dev/null
+++ b/scripts/mergechanges.1
@@ -0,0 +1,33 @@
+.TH MERGECHANGES 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+mergechanges \- merge multiple changes files
+.SH SYNOPSIS
+\fBmergechanges\fR [\fB\-d\fR] [\fB\-f\fR] [\fB\-S\fR] [\fB\-i\fR] \fIfile1 file2\fR [\fIfile\fR...]
+.SH DESCRIPTION
+\fBmergechanges\fR merges two or more \fI.changes\fR files, merging
+the Architecture, Description and Files (and Checksums-*, if present)
+fields of the two. There are checks made to ensure that the changes
+files are from the same source package and version and use the same
+changes file Format. The first changes file is used as the basis and
+the information from the later ones is merged into it.
+.PP
+The output is normally written to \fIstdout\fR. If the \fB\-f\fR
+option is given, the output is written to
+\fIpackage\fR_\fIversion\fR_multi.changes instead, in the same
+directory as the first changes file listed.
+.PP
+If the \fB\-d\fR option is given and the output is generated successfully, the
+input files will be deleted.
+.PP
+If the \fB\-i\fR or \fB\-\-indep\fR option is given, source packages
+and architecture-independent (Architecture: all) packages are included
+in the output, but architecture-dependent packages are not.
+.PP
+If the \fB\-S\fR or \fB\-\-source\fR option is given, only source packages
+are included in the output.
+.SH AUTHOR
+Gergely Nagy <algernon@debian.org>,
+modifications by Julian Gilbey <jdg@debian.org>,
+Mark Hymers <mhy@debian.org>,
+Adam D. Barratt <adam@adam-barratt.org.uk>, and
+Simon McVittie <smcv@debian.org>.
diff --git a/scripts/mergechanges.sh b/scripts/mergechanges.sh
new file mode 100755
index 0000000..ffaf992
--- /dev/null
+++ b/scripts/mergechanges.sh
@@ -0,0 +1,402 @@
+#!/bin/bash
+##
+## mergechanges -- merge Architecture: and Files: fields of a set of .changes
+## Copyright 2002 Gergely Nagy <algernon@debian.org>
+## Changes copyright 2002,2003 by Julian Gilbey <jdg@debian.org>
+##
+## $MadHouse: home/bin/mergechanges,v 1.1 2002/01/25 12:37:27 algernon Exp $
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+set -e
+
+PROGNAME=${0##*/}
+
+synopsis() {
+ echo "Usage: $PROGNAME [-h|--help|--version] [-d] [-S|--source] [-i|--indep] [-f] <file1> <file2> [<file> ...]"
+}
+
+usage() {
+ synopsis
+ cat <<EOT
+ Merge the changes files <file1>, <file2>, .... Output on stdout
+ unless -f option given, in which case, output to
+ <package>_<version>_multi.changes in the same directory as <file1>.
+ If -i is given, only source and architecture-independent packages
+ are included in the output.
+ If -S is given, only the source package is included in the output.
+EOT
+}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright (C) 2002 Gergely Nagy <algernon@debian.org>
+Changes copyright 2002 by Julian Gilbey <jdg@debian.org>
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+# Commandline parsing
+FILE=0
+DELETE=0
+REMOVE_ARCHDEP=0
+REMOVE_INDEP=0
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ --version)
+ version
+ exit 0
+ ;;
+ -f)
+ FILE=1
+ shift
+ ;;
+ -d)
+ DELETE=1
+ shift
+ ;;
+ -i|--indep)
+ REMOVE_ARCHDEP=1
+ shift
+ ;;
+ -S|--source)
+ REMOVE_ARCHDEP=1
+ REMOVE_INDEP=1
+ shift
+ ;;
+ -*)
+ echo "Unrecognised option $1. Use $PROGNAME --help for help" >&2
+ exit 1
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+# Sanity check #0: Do we have enough parameters?
+if [ $# -lt 2 ]; then
+ echo "Not enough parameters." >&2
+ synopsis >&2
+ exit 1
+fi
+
+# Sanity check #1: Do the requested files exist?
+for f in "$@"; do
+ if ! test -r $f; then
+ echo "ERROR: Cannot read $f!" >&2
+ exit 1
+ fi
+done
+
+# Get a (possibly multi-line) field.
+get_field() {
+ perl -e '
+ use warnings;
+ use strict;
+ use autodie;
+
+ use Dpkg::Control;
+
+ my $field = shift;
+ foreach my $file (@ARGV) {
+ my $changes = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+ $changes->load($file);
+ next unless defined $changes->{$field};
+ print $changes->{$field};
+ print "\n";
+ }
+ ' "$@"
+}
+
+# Extract the Architecture: field from all .changes files,
+# and merge them, sorting out duplicates. Skip architectures
+# other than all and source if desired.
+ARCHS=$(get_field Architecture "$@" | tr ' ' '\n' | sort -u)
+if test ${REMOVE_ARCHDEP} = 1; then
+ ARCHS=$(echo "$ARCHS" | grep -E '^(all|source)$')
+fi
+if test ${REMOVE_INDEP} = 1; then
+ ARCHS=$(echo "$ARCHS" | grep -vxF all)
+fi
+ARCHS=$(echo "$ARCHS" | tr '\n' ' ' | sed 's/ $//')
+
+checksum_uniq() {
+ local line
+ local IFS=
+ if test ${REMOVE_ARCHDEP} = 1 -o ${REMOVE_INDEP} = 1; then
+ while read line; do
+ case "$line" in
+ ("")
+ # empty first line
+ echo "$line"
+ ;;
+ (*.dsc|*.diff.gz|*.tar.*|*_source.buildinfo)
+ # source
+ echo "$line"
+ ;;
+ (*_all.deb|*_all.udeb|*_all.buildinfo)
+ # architecture-indep
+ if test ${REMOVE_INDEP} = 0; then
+ echo "$line"
+ fi
+ ;;
+ (*.deb|*.udeb|*.buildinfo)
+ # architecture-specific
+ if test ${REMOVE_ARCHDEP} = 0; then
+ echo "$line"
+ fi
+ ;;
+ (*)
+ echo "Unrecognised file, is it architecture-dependent?" >&2
+ echo "$line" >&2
+ exit 1
+ ;;
+ esac
+ done | awk '{if(arr[$NF] != 1){arr[$NF] = 1; print;}}'
+ else
+ awk '{if(arr[$NF] != 1){arr[$NF] = 1; print;}}'
+ fi
+}
+
+# Extract & merge the Version: field from all files..
+# Don't catch Version: GnuPG lines, though!
+VERSION=$(get_field Version "$@" | sort -u)
+SVERSION=$(echo "$VERSION" | perl -pe 's/^\d+://')
+# Extract & merge the sources from all files
+SOURCE=$(get_field Source "$@" | sort -u)
+# Extract & merge the files from all files
+FILES=$(get_field Files "$@" | checksum_uniq)
+# Extract & merge the sha1 checksums from all files
+SHA1S=$(get_field Checksums-Sha1 "$@" | checksum_uniq)
+# Extract & merge the sha256 checksums from all files
+SHA256S=$(get_field Checksums-Sha256 "$@" | checksum_uniq)
+# Extract & merge the description from all files
+DESCRIPTIONS=$(get_field Description "$@" | sort -u)
+# Extract & merge the Formats from all files
+FORMATS=$(get_field Format "$@" | sort -u)
+# Extract & merge the Checksums-* field names from all files
+CHECKSUMS=$(grep -h "^Checksums-.*:" "$@" | sort -u)
+UNSUPCHECKSUMS="$(echo "${CHECKSUMS}" | grep -v "^Checksums-Sha\(1\|256\):" || true)"
+
+# Sanity check #2: Versions must match
+if test $(echo "${VERSION}" | wc -l) -ne 1; then
+ echo "ERROR: Version numbers do not match:" >&2
+ grep "^Version: [0-9]" "$@" >&2
+ exit 1
+fi
+
+# Sanity check #3: Sources must match
+if test $(echo "${SOURCE}" | wc -l) -ne 1; then
+ echo "Error: Source packages do not match:" >&2
+ grep "^Source: " "$@" >&2
+ exit 1
+fi
+
+# Sanity check #4: Description for same binary must match
+if test $(echo "${DESCRIPTIONS}" | sed -e 's/ \+- .*$//' | uniq -d | wc -l) -ne 0; then
+ echo "Error: Descriptions do not match:" >&2
+ echo "${DESCRIPTIONS}" >&2
+ exit 1
+fi
+
+# Sanity check #5: Formats must match
+if test $(echo "${FORMATS}" | wc -l) -ne 1; then
+ if test "${FORMATS}" = "$(printf "1.7\n1.8\n")"; then
+ FORMATS="1.7"
+ CHECKSUMS=""
+ UNSUPCHECKSUMS=""
+ SHA1S=""
+ SHA256S=""
+ else
+ echo "Error: Changes files have different Format fields:" >&2
+ grep "^Format: " "$@" >&2
+ exit 1
+ fi
+fi
+
+# Sanity check #6: The Format must be one we understand
+case "$FORMATS" in
+ 1.7|1.8) # Supported
+ ;;
+ *)
+ echo "Error: Changes files use unknown Format:" >&2
+ echo "${FORMATS}" >&2
+ exit 1
+ ;;
+esac
+
+# Sanity check #7: Unknown checksum fields
+if test -n "${UNSUPCHECKSUMS}"; then
+ echo "Error: Unsupported checksum fields:" >&2
+ echo "${UNSUPCHECKSUMS}" >&2
+ exit 1
+fi
+
+if test ${FILE} = 1; then
+ DIR=$(dirname "$1")
+ REDIR1="> '${DIR}/${SOURCE}_${SVERSION}_multi.changes'"
+ REDIR2=">$REDIR1"
+fi
+
+# Temporary output
+OUTPUT=$(mktemp --tmpdir mergechanges.tmp.XXXXXXXXXX)
+DESCFILE=$(mktemp --tmpdir mergechanges.tmp.XXXXXXXXXX)
+trap 'rm -f "${OUTPUT}" "${DESCFILE}"' EXIT
+
+# Copy one of the files to ${OUTPUT}, nuking any PGP signature
+if $(grep -q "BEGIN PGP SIGNED MESSAGE" "$1"); then
+ perl -ne 'next if 1../^$/; next if /^$/..1; print' "$1" > ${OUTPUT}
+else
+ cp "$1" ${OUTPUT}
+fi
+
+# Combine the Binary: and Description: fields. This is straightforward,
+# unless we want to exclude some binary packages, in which case we need
+# more thought.
+BINARY=$(get_field Binary "$@" | tr ' ' '\n' | sort -u)
+if test ${REMOVE_ARCHDEP} = 1 && test ${REMOVE_INDEP} = 1; then
+ BINARY=
+ DESCRIPTIONS=
+elif test ${REMOVE_ARCHDEP} = 1 || test ${REMOVE_INDEP} = 1; then
+ keep_binaries=$(
+ get_field Files "$@" | while read -r line; do
+ file="${line##* }"
+ case "$line" in
+ ("")
+ # empty first line
+ echo "$line"
+ ;;
+ (*.dsc|*.diff.gz|*.tar.*|*.buildinfo)
+ # source or buildinfo
+ ;;
+ (*_all.deb|*_all.udeb)
+ # architecture-indep
+ package="${file%%_*}"
+
+ if ! echo "$BINARY" | grep -q -x -F "$package"; then
+ echo "Warning: $package not found in Binary field" >&2
+ echo "$line" >&2
+ fi
+
+ if test ${REMOVE_INDEP} != 1; then
+ echo "$package"
+ fi
+ ;;
+ (*.deb|*.udeb)
+ # architecture-specific
+ package="${file%%_*}"
+
+ if ! echo "$BINARY" | grep -q -x -F "$package"; then
+ echo "Warning: $package not found in Binary field" >&2
+ echo "$line" >&2
+ fi
+
+ if test ${REMOVE_ARCHDEP} != 1; then
+ echo "$package"
+ fi
+ ;;
+ (*)
+ echo "Unrecognised file, is it architecture-dependent?" >&2
+ echo "$line" >&2
+ exit 1
+ ;;
+ esac
+ done \
+ | tr '\n' ' ')
+
+ BINARY=$(
+ echo "$BINARY" |
+ while read -r line; do
+ if echo " $keep_binaries" | grep -q -F " $line "; then
+ echo "$line";
+ fi
+ done
+ )
+ DESCRIPTIONS=$(
+ echo "$DESCRIPTIONS" |
+ while read -r line; do
+ package="${line%% *}"
+ if echo " $keep_binaries" | grep -q -F " $package "; then
+ echo "$line";
+ fi
+ done
+ )
+fi
+BINARY=$(echo "$BINARY" | tr '\n' ' ' | sed 's/ $//')
+
+if test -n "${DESCRIPTIONS}"; then
+ printf "Description:" > "${DESCFILE}"
+ echo "${DESCRIPTIONS}" | sed -e 's/^/ /' >> "${DESCFILE}"
+fi
+
+if [ -n "$BINARY" ]; then
+ BINARY="Binary: $BINARY\\n"
+fi
+
+# Modify the output to be the merged version:
+# * Replace the Architecture: and Binary: fields
+# * Nuke the value of Checksums-*: and Files:
+# * Insert the Description: field before the Changes: field
+#
+# We print Binary directly before Source instead of directly replacing
+# Binary, because with dpkg 1.19.3, if the first .changes file is
+# source-only, it won't have a Binary field at all.
+eval "awk -- '/^[^ ]/{ deleting=0 }
+ /^ /{
+ if (!deleting) {
+ print
+ }
+ next
+ }
+ /^Architecture: /{printf \"%s ${ARCHS}\\n\", \$1; deleting=1; next}
+ /^Source: /{printf \"${BINARY}\"; print; next}
+ /^Binary: /{deleting=1; next}
+ /^Changes:/{
+ field=\$0
+ while ((getline < \"${DESCFILE}\") > 0) {
+ print
+ }
+ printf \"%s\\n\", field
+ next
+ }
+ /^Format: /{ printf \"%s ${FORMATS}\\n\", \$1; deleting=1; next}
+ /^(Checksums-.*|Files|Description):/{ deleting=1; next }
+ { print }' \
+ ${OUTPUT} ${REDIR1}"
+
+# Voodoo magic to get the merged file and checksum lists into the output
+if test -n "${SHA1S}"; then
+ eval "printf 'Checksums-Sha1:' ${REDIR2}"
+ eval "echo '${SHA1S}' | sed -e 's/^/ /' ${REDIR2}"
+fi
+if test -n "${SHA256S}"; then
+ eval "printf 'Checksums-Sha256:' ${REDIR2}"
+ eval "echo '${SHA256S}' | sed -e 's/^/ /' ${REDIR2}"
+fi
+eval "printf 'Files:' ${REDIR2}"
+eval "echo '${FILES}' | sed -e 's/^/ /' ${REDIR2}"
+
+if test ${DELETE} = 1; then
+ rm "$@"
+fi
+
+exit 0
diff --git a/scripts/mk-build-deps.pl b/scripts/mk-build-deps.pl
new file mode 100755
index 0000000..8b35e7e
--- /dev/null
+++ b/scripts/mk-build-deps.pl
@@ -0,0 +1,615 @@
+#!/usr/bin/perl
+
+# mk-build-deps: make a dummy package to satisfy build-deps of a package
+# Copyright 2008 by Vincent Fourmond
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+# Changes:
+# * (Vincent Fourmond 4/4/2008): now take Build-Depends-Indep
+# into consideration
+
+=head1 NAME
+
+mk-build-deps - build a package satisfying a package's build-dependencies
+
+=head1 SYNOPSIS
+
+B<mk-build-deps> B<--help>|B<--version>
+
+B<mk-build-deps> [I<options>] I<control file> | I<package name> ...
+
+=head1 DESCRIPTION
+
+Given a I<package name> and/or I<control file>, B<mk-build-deps>
+will use B<equivs> to generate a binary package which may be installed to
+satisfy all the build dependencies of the given package.
+
+If B<--build-dep> and/or B<--build-indep> are given, then the resulting binary
+package(s) will depend solely on the Build-Depends/Build-Depends-Indep
+dependencies, respectively.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-i>, B<--install>
+
+Install the generated packages and its build-dependencies.
+
+=item B<-t>, B<--tool>
+
+When installing the generated package use the specified tool.
+(default: B<apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends>)
+
+=item B<-r>, B<--remove>
+
+Remove the package file after installing it. Ignored if used without
+the B<--install> switch.
+
+=item B<-a> I<foo>, B<--arch> I<foo>
+
+Set the architecture of the produced binary package to I<foo>. If this option
+is not given, fall back to the value given by B<--host-arch>. If neither this
+option nor B<--host-arch> are given but the Build-Depends contain architecture
+restrictions, use the value printed by `dpkg-architecture -qDEB_HOST_ARCH`.
+Otherwise, use I<all>.
+
+The package architecture must be equal to the host architecture except if the
+package architecture is I<all>.
+
+The package architecture cannot be I<all> if the build and host architecture
+differ.
+
+=item B<--host-arch> I<foo>
+
+Set the host architecture the binary package is built for. This defaults to
+the value printed by `dpkg-architecture -qDEB_HOST_ARCH`. Use this option to
+create a binary package that is able to satisfy crossbuild dependencies.
+
+If this option is used together with B<--arch>, then they must be equal except
+if the value of B<--arch> is I<all>.
+
+If B<--arch> is not given, then this option also sets the package architecture.
+
+=item B<--build-arch> I<foo>
+
+Set the build architecture the binary package is built for. This defaults to
+the value printed by `dpkg-architecture -qDEB_BUILD_ARCH`. Use this option to
+create a binary package that is able to satisfy crossbuild dependencies.
+
+=item B<-B>, B<--build-dep>
+
+Generate a package which only depends on the source package's Build-Depends
+dependencies.
+
+=item B<-A>, B<--build-indep>
+
+Generate a package which only depends on the source package's
+Build-Depends-Indep dependencies.
+
+=item B<-P>, B<--build-profiles> I<profile[,...]>
+
+Generate a package which only depends on build dependencies
+with the build profile(s), given as a comma-separated list.
+The default behavior is to use no specific profile.
+Setting this option will override the B<DEB_BUILD_PROFILES>
+environment variable.
+
+=item B<-h>, B<--help>
+
+Show a summary of options.
+
+=item B<-v>, B<--version>
+
+Show version and copyright information.
+
+=item B<-s>, B<--root-cmd>
+
+Use the specified tool to gain root privileges before installing.
+Ignored if used without the B<--install> switch.
+
+=back
+
+=head1 ENVIRONMENT
+
+=head2 External environment
+
+=over 4
+
+=item B<DEB_BUILD_PROFILES>
+
+If set, it will be used as the active build profile(s) for the
+build dependencies to be installed.
+It is a space separated list of profile names.
+Overridden by the B<-P> option.
+
+=back
+
+=head1 AUTHOR
+
+B<mk-build-deps> is copyright by Vincent Fourmond and was modified for the
+devscripts package by Adam D. Barratt <adam@adam-barratt.org.uk>.
+
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the GNU
+General Public License, version 2 or later.
+
+=cut
+
+use 5.01;
+use strict;
+use warnings;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use File::Basename;
+use Pod::Usage;
+use Dpkg::Control;
+use Dpkg::Version;
+use Dpkg::IPC;
+use Dpkg::Deps;
+use FileHandle;
+use Text::ParseWords;
+
+my $progname = basename($0);
+my $opt_install;
+my $opt_remove = 0;
+my ($opt_help, $opt_version, $opt_arch, $opt_dep, $opt_indep, $opt_hostarch,
+ $opt_buildarch, $opt_buildprofiles);
+my $control;
+my $install_tool;
+my $root_cmd;
+my @packages;
+
+my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+my %config_vars = (
+ 'MKBUILDDEPS_TOOL' =>
+'/usr/bin/apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends',
+ 'MKBUILDDEPS_REMOVE_AFTER_INSTALL' => 'no',
+ 'MKBUILDDEPS_ROOTCMD' => '',
+);
+my %config_default = %config_vars;
+
+my $shell_cmd;
+# Set defaults
+foreach my $var (keys %config_vars) {
+ $shell_cmd .= qq[$var="$config_vars{$var}";\n];
+}
+$shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+$shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+# Read back values
+foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+my $shell_out = `/bin/bash -c '$shell_cmd'`;
+@config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+# Check validity
+$config_vars{'MKBUILDDEPS_TOOL'} =~ /./
+ or $config_vars{'MKBUILDDEPS_TOOL'} = $config_default{'MKBUILDDEPS_TOOL'};
+$config_vars{'MKBUILDDEPS_REMOVE_AFTER_INSTALL'} =~ /^(yes|no)$/
+ or $config_vars{'MKBUILDDEPS_REMOVE_AFTER_INSTALL'}
+ = $config_default{'MKBUILDDEPS_REMOVE_AFTER_INSTALL'};
+$config_vars{'MKBUILDDEPS_ROOTCMD'} =~ /./
+ or $config_vars{'MKBUILDDEPS_ROOTCMD'}
+ = $config_default{'MKBUILDDEPS_ROOTCMD'};
+
+$install_tool = $config_vars{'MKBUILDDEPS_TOOL'};
+
+if ($config_vars{'MKBUILDDEPS_REMOVE_AFTER_INSTALL'} =~ /yes/) {
+ $opt_remove = 1;
+}
+
+sub usage {
+ my ($exitval) = @_;
+
+ my $verbose = $exitval ? 0 : 1;
+ pod2usage({ -exitval => 'NOEXIT', -verbose => $verbose });
+
+ if ($verbose) {
+ my $modified_conf_msg;
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+ print <<EOF;
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOF
+ }
+
+ exit $exitval;
+}
+
+GetOptions(
+ "help|h" => \$opt_help,
+ "version|v" => \$opt_version,
+ "install|i" => \$opt_install,
+ "remove|r" => \$opt_remove,
+ "tool|t=s" => \$install_tool,
+ "arch|a=s" => \$opt_arch,
+ "host-arch=s" => \$opt_hostarch,
+ "build-arch=s" => \$opt_buildarch,
+ "build-dep|B" => \$opt_dep,
+ "build-indep|A" => \$opt_indep,
+ "build-profiles|P=s" => \$opt_buildprofiles,
+ "root-cmd|s=s" => \$root_cmd,
+) or usage(1);
+
+usage(0) if ($opt_help);
+
+if ($opt_version) { version(); exit 0; }
+
+if (!@ARGV) {
+ if (-r 'debian/control') {
+ push(@ARGV, 'debian/control');
+ }
+}
+
+usage(1) unless @ARGV;
+
+system("command -v equivs-build >/dev/null 2>&1");
+if ($?) {
+ die "$progname: You must have equivs installed to use this program.\n";
+}
+
+while ($control = shift) {
+ my ($name, $fh, $descr, $pid);
+ if (-r $control and -f $control) {
+ open $fh, $control;
+ unless (defined $fh) {
+ warn "Unable to open $control: $!\n";
+ next;
+ }
+ $name = 'Source';
+ $descr = "control file `$control'";
+ } else {
+ $fh = FileHandle->new();
+ $pid = spawn(
+ exec => ['apt-cache', 'showsrc', $control],
+ from_file => '/dev/null',
+ to_pipe => $fh
+ );
+ unless (defined $pid) {
+ warn "Unable to run apt-cache: $!\n";
+ next;
+ }
+ $name = 'Package';
+ $descr = "`apt-cache showsrc $control'";
+ }
+
+ my (@pkgInfo, @versions);
+ until (eof $fh) {
+ my $ctrl = Dpkg::Control->new(allow_pgp => 1, type => CTRL_UNKNOWN);
+ # parse() dies if the file isn't syntactically valid and returns undef
+ # if there simply weren't any fields parsed
+ unless ($ctrl->parse($fh, $descr)) {
+ warn "$progname: Unable to find package name in $descr\n";
+ next;
+ }
+ unless (exists $ctrl->{$name}) {
+ next;
+ }
+ my $args = '';
+ my $arch = 'all';
+ my ($build_deps, $build_dep, $build_dep_arch, $build_indep);
+ my ($build_conflicts, $build_conflict, $conflict_arch,
+ $conflict_indep);
+
+ if (exists $ctrl->{'Build-Depends'}) {
+ $build_dep = $ctrl->{'Build-Depends'};
+ $build_dep =~ s/\n/ /g;
+ $build_deps = $build_dep;
+ }
+ if (exists $ctrl->{'Build-Depends-Arch'}) {
+ $build_dep_arch = $ctrl->{'Build-Depends-Arch'};
+ $build_dep_arch =~ s/\n/ /g;
+ $build_dep .= ', ' if $build_dep;
+ $build_dep .= $build_dep_arch;
+ $build_deps .= ', ' if $build_deps;
+ $build_deps .= $build_dep_arch;
+ }
+ if (exists $ctrl->{'Build-Depends-Indep'}) {
+ $build_indep = $ctrl->{'Build-Depends-Indep'};
+ $build_indep =~ s/\n/ /g;
+ $build_deps .= ', ' if $build_deps;
+ $build_deps .= $build_indep;
+ }
+ if (exists $ctrl->{'Build-Conflicts'}) {
+ $build_conflict = $ctrl->{'Build-Conflicts'};
+ $build_conflict =~ s/\n/ /g;
+ $build_conflicts = $build_conflict;
+ }
+ if (exists $ctrl->{'Build-Conflicts-Arch'}) {
+ $conflict_arch = $ctrl->{'Build-Conflicts-Arch'};
+ $conflict_arch =~ s/\n/ /g;
+ $build_conflict .= ', ' if $build_conflict;
+ $build_conflict .= $conflict_arch;
+ $build_conflicts .= ', ' if $build_conflicts;
+ $build_conflicts .= $conflict_arch;
+ }
+ if (exists $ctrl->{'Build-Conflicts-Indep'}) {
+ $conflict_indep = $ctrl->{'Build-Conflicts-Indep'};
+ $conflict_indep =~ s/\n/ /g;
+ $build_conflicts .= ', ' if $build_conflicts;
+ $build_conflicts .= $conflict_indep;
+ }
+
+ warn "$progname: Unable to find build-deps for $ctrl->{$name}\n"
+ unless $build_deps;
+
+ if (exists $ctrl->{Version}) {
+ push(@versions, $ctrl->{Version});
+ } elsif ($name eq 'Source') {
+ (my $changelog = $control) =~ s@control$@changelog@;
+ if (-f $changelog) {
+ require Dpkg::Changelog::Parse;
+ my $log = Dpkg::Changelog::Parse::changelog_parse(
+ file => $changelog);
+ if ($ctrl->{$name} eq $log->{$name}) {
+ $ctrl->{Version} = $log->{Version};
+ push(@versions, $log->{Version});
+ }
+ }
+ }
+
+ # Only build a package with both B-D and B-D-I in Depends if the
+ # B-D/B-D-I specific packages weren't requested
+ if (!($opt_dep || $opt_indep)) {
+ push(
+ @pkgInfo,
+ {
+ depends => $build_deps,
+ conflicts => $build_conflicts,
+ name => $ctrl->{$name},
+ type => 'build-deps',
+ version => $ctrl->{Version} });
+ next;
+ }
+ if ($opt_dep) {
+ push(
+ @pkgInfo,
+ {
+ depends => $build_dep,
+ conflicts => $build_conflict,
+ name => $ctrl->{$name},
+ type => 'build-deps-depends',
+ version => $ctrl->{Version} });
+ }
+ if ($opt_indep) {
+ push(
+ @pkgInfo,
+ {
+ depends => $build_indep,
+ conflicts => $conflict_indep,
+ name => $ctrl->{$name},
+ type => 'build-deps-indep',
+ version => $ctrl->{Version} });
+ }
+ }
+ wait_child($pid, nocheck => 1) if defined $pid;
+ # Only use the newest version. We'll only have this if processing showsrc
+ # output or a dsc file.
+ if (@versions) {
+ @versions = map { $_->[0] }
+ sort { $b->[1] <=> $a->[1] }
+ map { [$_, Dpkg::Version->new($_)] } @versions;
+ push(@packages,
+ map { build_equiv($_) }
+ grep { $versions[0] eq $_->{version} } @pkgInfo);
+ } elsif (@pkgInfo) {
+ push(@packages, build_equiv($pkgInfo[0]));
+ } else {
+ die "$progname: Unable to find package name in $descr\n";
+ }
+}
+
+if ($opt_install) {
+ my @root;
+ if ($root_cmd) {
+ push(@root, shellwords($root_cmd));
+ }
+
+ my (@pkg_names, @deb_files, @buildinfo_files, @changes_files, %uniq);
+ for my $package (@packages) {
+ if ($uniq{ $package->{deb_file} }++ == 0) {
+ push @pkg_names, $package->{package};
+ push @deb_files, $package->{deb_file};
+ push @buildinfo_files, $package->{buildinfo_file};
+ push @changes_files, $package->{changes_file};
+ }
+ }
+
+ system @root, 'dpkg', '--unpack', @deb_files;
+ die("$progname: dpkg --unpack failed\n") if (($? >> 8) != 0);
+ system @root, shellwords($install_tool), '-f', 'install';
+ my $err = $? >> 8;
+ if (!$err) {
+ # $install_tool succeeded. Did the packages get installed? It's
+ # possible that they didn't because $install_tool may have realized
+ # that installation was impossible, and it could have given up,
+ # successfully.
+ for (my $i = 0 ; $i < @pkg_names ; $i++) {
+ my $pkg = $pkg_names[$i];
+ my $status;
+ spawn(
+ exec =>
+ ['dpkg-query', '-W', '-f', '${db:Status-Status}', $pkg],
+ to_string => \$status,
+ error_to_file => '/dev/null',
+ nocheck => 1,
+ wait_child => 1
+ );
+ if ($status ne 'installed' || ($? >> 8)) {
+ # Restore system to previous state, since $install_tool wasn't
+ # able to resolve a proper way to get the build-dep packages
+ # installed
+ warn "$progname: Unable to install $pkg";
+ $err = 1;
+ } elsif ($opt_remove) {
+ unlink $deb_files[$i];
+ unlink $buildinfo_files[$i];
+ unlink $changes_files[$i];
+ }
+ }
+ if ($err) {
+ die "$progname: Unable to install all build-dep packages\n";
+ }
+ } else {
+ # Restore system to previous state, since $install_tool wasn't able to
+ # resolve a proper way to get the build-dep packages installed
+ system @root, 'dpkg', '--remove', @pkg_names;
+ die("$progname: Unable to install all build-dep packages\n");
+ }
+}
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+Copyright (C) 2008 Vincent Fourmond
+
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2, or (at your option) any
+later version.
+EOF
+}
+
+sub build_equiv {
+ my ($opts) = @_;
+ my $args = '';
+
+ my $packagearch = 'all';
+
+ if (defined $opt_arch) {
+ $packagearch = $opt_arch;
+ } elsif (defined $opt_hostarch) {
+ $packagearch = $opt_hostarch;
+ } elsif ($opts->{depends} =~ m/\[|\]/) {
+ chomp($packagearch = `dpkg-architecture -qDEB_HOST_ARCH`);
+ }
+ if ($packagearch ne "all") {
+ $args .= "--arch=$packagearch ";
+ }
+
+ chomp(my $buildarch = `dpkg-architecture -qDEB_BUILD_ARCH`);
+ if (defined $opt_buildarch) {
+ $buildarch = $opt_buildarch;
+ }
+
+ chomp(my $hostarch = `dpkg-architecture -qDEB_HOST_ARCH`);
+ if (defined $opt_hostarch) {
+ $hostarch = $opt_hostarch;
+ }
+
+ if ($packagearch eq "all") {
+ if ($buildarch ne $hostarch) {
+ die
+"build architecture \"$buildarch\" is unequal host architecture \"$hostarch\" in which case the package architecture must not be \"all\" (but \"$hostarch\" instead)\n";
+ }
+ } elsif ($packagearch ne $hostarch) {
+ die
+"The package architecture must be equal to the host architecture except if the package architecture is \"all\"\n";
+ }
+
+ my $build_profiles = [split /\s+/, ($ENV{'DEB_BUILD_PROFILES'} // "")];
+ if (defined $opt_buildprofiles) {
+ $build_profiles = [split /,/, $opt_buildprofiles];
+ }
+
+ my $positive = deps_parse(
+ $opts->{depends} // "",
+ reduce_arch => 1,
+ host_arch => $hostarch,
+ build_arch => $buildarch,
+ build_dep => 1,
+ reduce_profiles => 1,
+ build_profiles => $build_profiles
+ );
+ my $negative = deps_parse(
+ $opts->{conflicts} // "",
+ reduce_arch => 1,
+ host_arch => $hostarch,
+ build_arch => $buildarch,
+ build_dep => 1,
+ union => 1,
+ reduce_profiles => 1,
+ build_profiles => $build_profiles
+ );
+
+ # either remove :native for native builds or replace it by the build
+ # architecture
+ my $handle_native_archqual = sub {
+ my ($dep) = @_;
+ if ($dep->{archqual} && $dep->{archqual} eq "native") {
+ if ($hostarch eq $buildarch) {
+ $dep->{archqual} = undef;
+ } else {
+ $dep->{archqual} = $buildarch;
+ }
+ }
+ return 1;
+ };
+ deps_iterate($positive, $handle_native_archqual);
+ deps_iterate($negative, $handle_native_archqual);
+
+ my $pkgname;
+ my $buildess = "build-essential:$buildarch";
+ if ($buildarch eq $hostarch) {
+ $pkgname = "$opts->{name}-$opts->{type}";
+ } else {
+ $pkgname = "$opts->{name}-cross-$opts->{type}";
+ $buildess .= ", crossbuild-essential-$hostarch:$buildarch";
+ }
+
+ my $readme = '/usr/share/devscripts/templates/README.mk-build-deps';
+ open EQUIVS, "| equivs-build $args-"
+ or die "$progname: Failed to execute equivs-build: $!\n";
+ print EQUIVS "Section: devel\n"
+ . "Priority: optional\n"
+ . "Standards-Version: 3.7.3\n\n"
+ . "Package: $pkgname\n"
+ . "Architecture: $packagearch\n"
+ . "Depends: $buildess, $positive\n";
+
+ print EQUIVS "Conflicts: $negative\n" if $negative;
+
+ # Allow the file not to exist to ease testing
+ print EQUIVS "Readme: $readme\n" if -r $readme;
+
+ my $version = '1.0';
+ if (defined $opts->{version}) {
+ $version = $opts->{version};
+ }
+ print EQUIVS "Version: $version\n";
+
+ print EQUIVS "Description: build-dependencies for $opts->{name}\n"
+ . " Dependency package to build the '$opts->{name}' package\n";
+
+ close EQUIVS;
+
+ my $v = Dpkg::Version->new($version);
+ # The version in the .deb filename will not contain the epoch
+ $version = $v->as_string(omit_epoch => 1);
+ my $deb_file = "${pkgname}_${version}_${packagearch}.deb";
+ my $buildinfo_file = "${pkgname}_${version}_${hostarch}.buildinfo";
+ my $changes_file = "${pkgname}_${version}_${hostarch}.changes";
+ return {
+ package => $pkgname,
+ deb_file => $deb_file,
+ buildinfo_file => $buildinfo_file,
+ changes_file => $changes_file,
+ };
+}
diff --git a/scripts/mk-origtargz.bash_completion b/scripts/mk-origtargz.bash_completion
new file mode 100644
index 0000000..d198ba5
--- /dev/null
+++ b/scripts/mk-origtargz.bash_completion
@@ -0,0 +1,49 @@
+# /usr/share/bash-completion/completions/mk-origtargz
+# Bash command completion for ‘mk-origtargz(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+shopt -s progcomp
+
+_mk_origtargz_completion () {
+ COMPREPLY=()
+
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+ local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+ local opts="--help --verbose --version -v"
+ opts+=" --exclude-file --copyright-file"
+ opts+=" --package --directory -C"
+ opts+=" --copy --symlink --rename --repack --repack-suffix -S"
+ opts+=" --compression --copyright-file --unzipopt"
+
+ case "${prev}" in
+ --compression)
+ local formats=(gzip bzip2 lzma xz)
+ COMPREPLY=( $(compgen -W "${formats[*]}" -- "${cur}" ) )
+ ;;
+
+ --directory|-C)
+ COMPREPLY=( $(compgen -A directory -- "${cur}" ) )
+ ;;
+
+ --copyright-file)
+ COMPREPLY=( $(compgen -A file -- "${cur}" ) )
+ ;;
+ --unzipopt)
+ COMPREPLY=( $(compgen -W '-Z -a -b -D -j -n' -- "${cur}" ) )
+ ;;
+
+ *)
+ COMPREPLY=($(compgen -W "${opts}" -- "${cur}" ) )
+ ;;
+ esac
+}
+
+complete -F _mk_origtargz_completion mk-origtargz
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# End:
+# vim: fileencoding=utf-8 filetype=sh :
diff --git a/scripts/mk-origtargz.pl b/scripts/mk-origtargz.pl
new file mode 100755
index 0000000..2074742
--- /dev/null
+++ b/scripts/mk-origtargz.pl
@@ -0,0 +1,223 @@
+#!/usr/bin/perl
+# vim: set ai shiftwidth=4 tabstop=4 expandtab:
+#
+# mk-origtargz: Rename upstream tarball, optionally changing the compression
+# and removing unwanted files.
+# Copyright (C) 2014 Joachim Breitner <nomeata@debian.org>
+# Copyright (C) 2015 James McCoy <jamessan@debian.org>
+#
+# It contains code formerly found in uscan.
+# Copyright (C) 2002-2006, Julian Gilbey
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+=head1 NAME
+
+mk-origtargz - rename upstream tarball, optionally changing the compression and removing unwanted files
+
+=head1 SYNOPSIS
+
+=over
+
+=item B<mk-origtargz> [I<options>] F<foo-1.0.tar.gz>
+
+=item B<mk-origtargz> B<--help>
+
+=back
+
+=head1 DESCRIPTION
+
+B<mk-origtargz> renames the given file to match what is expected by
+B<dpkg-buildpackage>, based on the source package name and version in
+F<debian/changelog>. It can convert B<zip> to B<tar>, optionally change the
+compression scheme and remove files according to B<Files-Excluded> and
+B<Files-Excluded->I<component> in F<debian/copyright>. The resulting file is
+placed in F<debian/../..>. (In F<debian/copyright>, the B<Files-Excluded> and
+B<Files-Excluded->I<component> stanzas are a part of the first paragraph and
+there is a blank line before the following paragraphs which contain B<Files>
+and other stanzas. The B<Files-Included> stanza may be used to ignore
+parts of subdirectories specified by the B<Files-Excluded> stanza See
+B<uscan>(1) "COPYRIGHT FILE EXAMPLE".)
+
+The archive type for B<zip> is detected by "B<file --dereference --brief
+--mime-type>" command. So any B<zip> type archives such as B<jar> are treated
+in the same way. The B<xpi> archive is detected by its extension and is
+handled properly using the B<xpi-unpack> command.
+
+If the package name is given via the B<--package> option, no information is
+read from F<debian/>, and the result file is placed in the current directory.
+
+B<mk-origtargz> is commonly called via B<uscan>, which first obtains the
+upstream tarball.
+
+=head1 OPTIONS
+
+=head2 Metadata options
+
+The following options extend or replace information taken from F<debian/>.
+
+=over
+
+=item B<--package> I<package>
+
+Use I<package> as the name of the Debian source package, and do not require or
+use a F<debian/> directory. This option can only be used together with
+B<--version>.
+
+The default is to use the package name of the first entry in F<debian/changelog>.
+
+=item B<-v>, B<--version> I<version>
+
+Use I<version> as the version of the package. This needs to be the upstream
+version portion of a full Debian version, i.e. no Debian revision, no epoch.
+
+The default is to use the upstream portion of the version of the first entry in
+F<debian/changelog>.
+
+=item B<--exclude-file> I<glob>
+
+Remove files matching the given I<glob> from the tarball, as if it was listed in
+B<Files-Excluded>.
+
+=item B<--copyright-file> I<filename>
+
+Remove files matching the patterns found in I<filename>, which should have the
+format of a Debian F<copyright> file
+(B<Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/>
+to be precise). Errors parsing that file are silently ignored, exactly as is
+the case with F<debian/copyright>.
+
+Unmatched patterns will emit a warning so the user can verify whether it is
+correct. If there are multiple patterns which match a file, only the last one
+will count as being matched.
+
+Both the B<--exclude-file> and B<--copyright-file> options amend the list of
+patterns found in F<debian/copyright>. If you do not want to read that file,
+you will have to use B<--package>.
+
+=item B<--signature> I<signature-mode>
+
+Set I<signature-mode>:
+
+=over
+
+=item 0 for no signature
+
+=item 1 for normal detached signature
+
+=item 2 for signature on decompressed
+
+=item 3 for self signature
+
+=back
+
+=item B<--signature-file> I<signature-file>
+
+Use I<signature-file> as the signature file corresponding to the Debian source
+package to create a B<dpkg-source> (post-stretch) compatible signature file.
+(optional)
+
+=back
+
+=head2 Action options
+
+These options specify what exactly B<mk-origtargz> should do. The options
+B<--copy>, B<--rename> and B<--symlink> are mutually exclusive.
+
+=over
+
+=item B<--symlink>
+
+Make the resulting file a symlink to the given original file. (This is the
+default behaviour.)
+
+If the file has to be modified (because it is a B<zip>, B<xpi> or B<zst> file,
+because of B<--repack> or B<Files-Excluded>), this option behaves like
+B<--copy>.
+
+=item B<--copy>
+
+Make the resulting file a copy of the original file (unless it has to be
+modified, of course).
+
+=item B<--rename>
+
+Rename the original file.
+
+If the file has to be modified (because it is a B<zip>, B<xpi>, B<zst> file,
+because of B<--repack> or B<Files-Excluded>), this implies that the original
+file is deleted afterwards.
+
+=item B<--repack>
+
+If the given file is not compressed using the desired format (see
+B<--compression>), recompress it.
+
+=item B<-S>, B<--repack-suffix> I<suffix>
+
+If the file has to be modified, because of B<Files-Excluded>, append I<suffix>
+to the upstream version.
+
+=item B<--force-repack>
+
+Recompress even if file is compressed using the desired format and no files
+were deleted.
+
+=item B<-c>, B<--component> I<componentname>
+
+Use <componentname> as the component name for the secondary upstream tarball.
+Set I<componentname> as the component name. This is used only for the
+secondary upstream tarball of the Debian source package.
+Then I<packagename_version.orig-componentname.tar.gz> is created.
+
+=item B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> | B<default> ]
+
+The default method is B<xz>. When mk-origtargz is launched in a debian source
+repository which format is "1.0" or undefined, the method switches to B<gzip>.
+
+=item B<-C>, B<--directory> I<directory>
+
+Put the resulting file in the given directory.
+
+=item B<--unzipopt> I<options>
+
+Add the extra options to use with the B<unzip> command such as B<-a>, B<-aa>,
+and B<-b>.
+
+=back
+
+=cut
+
+#=head1 CONFIGURATION VARIABLES
+#
+#The two configuration files F</etc/devscripts.conf> and
+#F<~/.devscripts> are sourced by a shell in that order to set
+#configuration variables. Command line options can be used to override
+#configuration file settings. Environment variable settings are ignored
+#for this purpose. The currently recognised variables are:
+
+=head1 SEE ALSO
+
+B<uscan>(1), B<uupdate>(1)
+
+=head1 AUTHOR
+
+B<mk-origtargz> and this manpage have been written by Joachim Breitner
+<I<nomeata@debian.org>>.
+
+=cut
+
+use Devscripts::MkOrigtargz;
+
+exit Devscripts::MkOrigtargz->new->do;
diff --git a/scripts/namecheck.pl b/scripts/namecheck.pl
new file mode 100755
index 0000000..a171513
--- /dev/null
+++ b/scripts/namecheck.pl
@@ -0,0 +1,231 @@
+#!/usr/bin/perl
+
+=head1 NAME
+
+namecheck - Check project names are not already taken.
+
+=head1 ABOUT
+
+This is a simple tool to automate the testing of project names at the most
+common Open Source / Free Software hosting environments.
+
+Each new project requires a name, and those names are ideally unique. To come
+up with names is hard, and testing to ensure they're not already in use is
+time-consuming - unless you have a tool such as this one.
+
+=head1 CUSTOMIZATION
+
+The script, as is, contains a list of sites, and patterns, to test against.
+
+If those patterns aren't sufficient then you may create your own additions and
+add them to the script. If you wish to have your own version of the patterns
+you may save them into the file ~/.namecheckrc
+
+=head1 AUTHOR
+
+Steve
+--
+http://www.steve.org.uk/
+
+=head1 LICENSE
+
+Copyright (c) 2008 by Steve Kemp. All rights reserved.
+
+This module is free software; you can redistribute it and/or modify it under
+the same terms as Perl itself.
+
+=cut
+
+#
+# Good practise.
+#
+use strict;
+use warnings;
+
+#
+# A module for fetching webpages.
+#
+use LWP::UserAgent;
+
+#
+# A module for finding the user home dir.
+#
+use File::HomeDir;
+
+#
+# Get the name from the command line.
+#
+my $name = shift;
+if (!defined($name)) {
+ print <<EOF;
+Usage: $0 name
+EOF
+ exit;
+}
+
+#
+# Get the patterns we're going to use for testing.
+#
+my @lines = loadPatterns();
+
+#
+# Assuming we have patterns use them.
+#
+testSites(@lines);
+
+#
+# NOT REACHED.
+#
+exit;
+
+#
+# Load the list of sites, and patterns, to test.
+#
+# By default these will come from the end of the script
+# itself. A user may create the file ~/.namecheckrc with
+# their own patterns if they prefer.
+#
+
+sub loadPatterns {
+ my $file = File::HomeDir->my_home . "/.namecheckrc";
+ my @lines = ();
+
+ if (-e $file) {
+ open(FILE, "<", $file)
+ or die "Failed to open $file - $!";
+ while (<FILE>) {
+ push(@lines, $_);
+ }
+ close(FILE);
+ } else {
+ while (<DATA>) {
+ push(@lines, $_);
+ }
+ }
+
+ return (@lines);
+}
+
+#
+# Test the given name against the patterns we've loaded from our
+# own script, or the users configuration file.
+#
+
+sub testSites {
+ my (@patterns) = (@_);
+
+ #
+ # Create and setup an agent for the downloading.
+ #
+ my $ua = LWP::UserAgent->new();
+ $ua->agent('Mozilla/5.0');
+ $ua->timeout(10);
+ $ua->env_proxy();
+
+ my $headers = HTTP::Headers->new();
+ $headers->header('Accept' => '*/*');
+
+ foreach my $entry (@patterns) {
+
+ #
+ # Skip blank lines, and comments.
+ #
+ chomp($entry);
+ next if ((!$entry) || (!length($entry)));
+ next if ($entry =~ /^#/);
+
+ #
+ # Each line is an URL + a pattern, separated by a pipe.
+ #
+ my ($url, $pattern) = split(/\|/, $entry);
+
+ #
+ # Strip leading/trailing spaces.
+ #
+ $pattern =~ s/^\s+//;
+ $pattern =~ s/\s+$//;
+
+ #
+ # Interpolate the proposed project name in the string.
+ #
+ $url =~ s/\%s/$name/g if ($url =~ /\%s/);
+
+ #
+ # Find the hostname we're downloading; just to show the user
+ # something is happening.
+ #
+ my $urlname = $url;
+ if ($urlname =~ /:\/\/([^\/]+)\//) {
+ $urlname = $1;
+ }
+ print sprintf "Testing %20s", $urlname;
+
+ #
+ # Get the URL
+ #
+ my $request = HTTP::Request->new('GET', $url, $headers);
+ my $response = $ua->request($request);
+
+ #
+ # If success we look at the returned text.
+ #
+ if ($response->is_success()) {
+
+ #
+ # Get the page content - collapsing linefeeds.
+ #
+ my $c = $response->content();
+ $c =~ s/[\r\n]//g;
+
+ #
+ # Does the page have the pattern?
+ #
+ if ($c !~ /\Q$pattern\E/i) {
+ print " - In use\n";
+ print "Aborting - name '$name' is currently used.\n";
+ exit 0;
+ } else {
+ print " - Available\n";
+ }
+ } else {
+
+ #
+ # Otherwise we'll assume that 404 means that the
+ # project isn't taken.
+ #
+ my $c = $response->status_line();
+ if ($c =~ /404/) {
+ print " - Available\n";
+ } else {
+
+ #
+ # Other errors we can't handle.
+ #
+ print "ERROR fetching $url - $c\n";
+ }
+ }
+
+ }
+
+ #
+ # If we got here the name is free.
+ #
+ print "\n\nThe name '$name' doesn't appear to be in use.\n";
+ exit 1;
+}
+
+__DATA__
+
+#
+# The default patterns.
+#
+# If you want to customise them either do so here, or create the
+# file ~/.namecheckrc with your own contents in the same format.
+#
+http://%s.tuxfamily.org/ | Not Found
+http://freshmeat.net/projects/%s | We encounted an error
+http://launchpad.net/%s | no page with this address
+http://savannah.gnu.org/projects/%s | Invalid Group
+http://sourceforge.net/projects/%s | Invalid Project
+http://www.openhub.net/projects/%s | Something seems wrong with your URL
+http://projects.apache.org/projects/%s.html | Not Found
diff --git a/scripts/nmudiff.1 b/scripts/nmudiff.1
new file mode 100644
index 0000000..84f4bc8
--- /dev/null
+++ b/scripts/nmudiff.1
@@ -0,0 +1,129 @@
+.TH NMUDIFF 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+nmudiff \- email an NMU diff to the Debian BTS
+.SH SYNOPSIS
+\fBnmudiff\fR [\fIoptions\fR]
+.SH DESCRIPTION
+\fBnmudiff\fR is the tool to be used while preparing a Non-Maintainer Upload
+(NMU) to notify the maintainer about the work being done.
+.PP
+\fBnmudiff\fR should be run in the source tree of the package being
+NMUed, after the NMU is built. It assumes that the source packages
+(specifically, the \fI.dsc\fR and any corresponding \fItar\fR and \fIdiff\fR files) for
+both the previous version of the package and the newly built NMU
+version are in the parent directory. It then uses \fBdebdiff\fR to
+generate a diff between the previous version and the current NMU, and
+either runs mutt or an editor (using \fBsensible\-editor\fR) so that
+the mail message (including the diff) can be examined and modified;
+once you exit the editor the diff will be mailed to the Debian BTS.
+.PP
+The default behaviour is that if exactly one bug is closed by this NMU,
+then that bug will be mailed, otherwise a new bug will be submitted.
+This behaviour may be changed by command line options and
+configuration file options.
+.SH OPTIONS
+.TP
+.B \-\-new
+Instead of mailing the bug reports which are to be closed by this NMU,
+a new bug report is submitted directly to the BTS.
+.TP
+.B \-\-old
+Send the bug report to all of the bugs which are being closed by this
+NMU, rather than opening a new bug report. This option has no effect
+if no bugs are being closed by this NMU.
+.TP
+\fB\-\-mutt\fR
+Use \fBmutt\fR(1) (or \fBneomutt\fR(1)) for editing and sending the message to
+the BTS (default behaviour). This can be controlled using a configuration
+file option (see below).
+.TP
+\fB\-\-no\-mutt\fR
+Use \fBsensible\-editor\fR(1) to edit the message and then mail it
+directly using \fI/usr/bin/sendmail\fR. This can be controlled using
+a configuration file option (see below).
+.TP
+\fB\-\-sendmail\fR \fISENDMAILCMD\fR
+Specify the \fBsendmail\fR command. The command will be split on white
+space and will be interpreted by the shell. Default is
+\fI/usr/sbin/sendmail\fR. The \fB\-t\fR option will be automatically
+added if the command is \fI/usr/sbin/sendmail\fR or
+\fI/usr/sbin/exim*\fR. For other mailers, if they require a \fB\-t\fR
+option, this must be included in the \fISENDMAILCMD\fR, for example:
+\fB\-\-sendmail="/usr/sbin/mymailer \-t"\fR. This can also be set using the
+devscripts configuration files; see below.
+.TP
+\fB\-\-from\fR \fIEMAIL\fR
+If using the \fBsendmail\fR (\fB\-\-no\-mutt\fR) option, then the email to the
+BTS will be sent using the name and address in the environment
+variables \fBDEBEMAIL\fR and \fBDEBFULLNAME\fR. If these are not set, then the
+variables \fBEMAIL\fR and \fBNAME\fR will be used instead. These can be overridden
+using the \fB\-\-from\fR option. The program will not work in this case
+if an email address cannot be determined.
+.TP
+\fB\-\-delay\fR \fIDELAY\fR
+Indicate in the generated mail that the NMU has been uploaded to the
+DELAYED queue, with a delay of \fIDELAY\fR days. The default value is
+\fIXX\fR which adds a placeholder to the e-mail. A value of \fB0\fR indicates
+that the upload has not been sent to a delayed queue. This can also be set using the
+devscripts configuration files; see below.
+.TP
+\fB\-\-no\-delay\fR, \fB\-\-nodelay\fR
+Equivalent to \fB\-\-delay 0\fR.
+.TP
+\fB\-\-no\-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+\fB\-\-no\-pending\fR, \fB\-\-nopending\fR
+Do not add the \fIpending\fR tag.
+.TP
+\fB\-\-non\-dd\fR, \fB\-\-nondd\fR
+Mention in the email that you require sponsorship.
+.TP
+\fB\-\-template\fR \fITEMPLATEFILE\fR
+Use content of TEMPLATEFILE for message body instead of default template.
+If TEMPLATEFILE does not exist, default template is applied.
+.TP
+.B \-\-help
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B NMUDIFF_DELAY
+If this is set to a number, e-mails generated by \fBnmudiff\fR will by
+default mention an upload to the DELAYED queue, delayed for the
+specified number of days. The value \fB0\fR indicates that the DELAYED
+queue has not been used.
+.TP
+.B NMUDIFF_MUTT
+Can be \fIyes\fR (default) or \fIno\fR, and specifies whether to use
+\fBmutt\fR (or \fBneomutt\fR)to compose and send the message or not, as
+described above.
+.TP
+.B NMUDIFF_NEWREPORT
+This option controls whether a new bug report is made, or whether the
+diff is sent to the bugs closed by this NMU. Can be \fImaybe\fR
+(default), which sends to the existing bug reports if exactly one bug
+is being closed; \fIyes\fR, which always creates a new report, or \fIno\fR,
+which always sends to the reports of the bugs being closed (unless no
+bugs are being closed, in which case a new report is always made).
+.TP
+.B BTS_SENDMAIL_COMMAND
+If this is set, specifies a \fBsendmail\fR command to use instead of
+\fI/usr/sbin/sendmail\fR. Same as the \fB\-\-sendmail\fR command line option.
+.SH "SEE ALSO"
+.BR debdiff (1),
+.BR sensible-editor (1),
+.BR devscripts.conf (5)
+.SH AUTHOR
+\fBnmudiff\fR was written and is copyright 2006 by Steinar
+H. Gunderson and modified by Julian Gilbey <jdg@debian.org>. The
+software may be freely redistributed under the terms and conditions of
+the GNU General Public License, version 2.
diff --git a/scripts/nmudiff.sh b/scripts/nmudiff.sh
new file mode 100755
index 0000000..7b53777
--- /dev/null
+++ b/scripts/nmudiff.sh
@@ -0,0 +1,464 @@
+#!/bin/bash
+# Copyright 2006 by Steinar H. Gunderson
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of version 2 (only) of the GNU General Public License
+# as published by the Free Software Foundation.
+#
+# 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 <https://www.gnu.org/licenses/>.
+set -e
+
+PROGNAME=${0##*/}
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+
+usage() {
+ echo \
+"Usage: $PROGNAME
+ Generate a diff for an NMU and mail it to the BTS.
+ $PROGNAME options:
+ --new Submit a new bug report rather than sending messages
+ to the fixed bugs (default if more than one bug being
+ closed or no bugs being closed)
+ --old Send reports to the bugs which are being closed rather
+ than submit a new bug (default if only one bug being
+ closed)
+ --sendmail=SENDMAILCMD
+ Use SENDMAILCMD instead of \"/usr/sbin/sendmail -t\"
+ --mutt Use mutt to mail the message (default)
+ --no-mutt Mail the message directly, don't use mutt
+ --from=EMAIL Use EMAIL address for message to BTS; defaults to
+ value of DEBEMAIL or EMAIL
+ --delay=DELAY Indicate that the NMU has been uploaded to the
+ DELAYED queue, with a delay of DELAY days; defaults
+ to a placeholder value of "XX". If DELAY is 0 then
+ no reference is made to the DELAYED queue.
+ --no-delay Equivalent to \"--delay=0\"
+ --no-conf, --noconf
+ Don't read devscripts config files;
+ must be the first option given
+ --no-pending, --nopending
+ Don't add the 'pending' tag
+ --non-dd, --nondd
+ Mention in the email that you require sponsorship.
+ --template=TEMPLATEFILE
+ Use content of TEMPLATEFILE for message.
+ --help, -h Show this help information.
+ --version Show version and copyright information.
+
+$MODIFIED_CONF_MSG"
+}
+
+version() {
+ cat <<EOF
+This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2006 by Steinar H. Gunderson, with modifications
+copyright 2006 by Julian Gilbey <jdg@debian.org>.
+The software may be freely redistributed under the terms and conditions
+of the GNU General Public License, version 2.
+EOF
+}
+
+# Boilerplate: set config variables
+DEFAULT_NMUDIFF_DELAY="XX"
+DEFAULT_NMUDIFF_MUTT="yes"
+DEFAULT_NMUDIFF_NEWREPORT="maybe"
+DEFAULT_BTS_SENDMAIL_COMMAND="/usr/sbin/sendmail"
+DEFAULT_NMUDIFF_PENDING=" pending"
+DEFAULT_MUTT_PRG="mutt"
+VARS="NMUDIFF_DELAY NMUDIFF_MUTT NMUDIFF_NEWREPORT BTS_SENDMAIL_COMMAND NMUDIFF_PENDING MUTT_PRG"
+# Don't think it's worth including this stuff
+# DEFAULT_DEVSCRIPTS_CHECK_DIRNAME_LEVEL=1
+# DEFAULT_DEVSCRIPTS_CHECK_DIRNAME_REGEX='PACKAGE(-.+)?'
+# VARS="BTS_SENDMAIL_COMMAND DEVSCRIPTS_CHECK_DIRNAME_LEVEL DEVSCRIPTS_CHECK_DIRNAME_REGEX"
+
+if [ "$1" = "--no-conf" -o "$1" = "--noconf" ]; then
+ shift
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (no configuration files read)"
+
+ # set defaults
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+else
+ # Run in a subshell for protection against accidental errors
+ # in the config files
+ eval $(
+ set +e
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+
+ for file in /etc/devscripts.conf ~/.devscripts
+ do
+ [ -r $file ] && . $file
+ done
+
+ set | grep -E '^(NMUDIFF|BTS|DEVSCRIPTS)_')
+
+ # check sanity
+ case "$BTS_SENDMAIL_COMMAND" in
+ "") BTS_SENDMAIL_COMMAND=/usr/sbin/sendmail ;;
+ *) ;;
+ esac
+ if [ "$NMUDIFF_DELAY" = "XX" ]; then
+ # Fine
+ :
+ else
+ if ! [ "$NMUDIFF_DELAY" -ge 0 ] 2>/dev/null; then
+ NMUDIFF_DELAY=XX
+ fi
+ fi
+ case "$NMUDIFF_MUTT" in
+ yes|no) ;;
+ *) NMUDIFF_MUTT=yes ;;
+ esac
+ case "$NMUDIFF_NEWREPORT" in
+ yes|no|maybe) ;;
+ *) NMUDIFF_NEWREPORT=maybe ;;
+ esac
+# case "$DEVSCRIPTS_CHECK_DIRNAME_LEVEL" in
+# 0|1|2) ;;
+# *) DEVSCRIPTS_CHECK_DIRNAME_LEVEL=1 ;;
+# esac
+
+ # set config message
+ MODIFIED_CONF=''
+ for var in $VARS; do
+ eval "if [ \"\$$var\" != \"\$DEFAULT_$var\" ]; then
+ MODIFIED_CONF_MSG=\"\$MODIFIED_CONF_MSG
+ $var=\$$var\";
+ MODIFIED_CONF=yes;
+ fi"
+ done
+
+ if [ -z "$MODIFIED_CONF" ]; then
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (none)"
+ fi
+fi
+
+# # synonyms
+# CHECK_DIRNAME_LEVEL="$DEVSCRIPTS_CHECK_DIRNAME_LEVEL"
+# CHECK_DIRNAME_REGEX="$DEVSCRIPTS_CHECK_DIRNAME_REGEX"
+
+# Need -o option to getopt or else it doesn't work
+# Removed: --long check-dirname-level:,check-dirname-regex: \
+TEMP=$(getopt -s bash -o "h" \
+ --long sendmail:,from:,new,old,mutt,no-mutt,nomutt \
+ --long delay:,no-delay,nodelay \
+ --long no-conf,noconf \
+ --long no-pending,nopending \
+ --long non-dd,nondd \
+ --long template: \
+ --long help,version -n "$PROGNAME" -- "$@") || (usage >&2; exit 1)
+
+eval set -- $TEMP
+
+# Process Parameters
+while [ "$1" ]; do
+ case $1 in
+# --check-dirname-level)
+# shift
+# case "$1" in
+# 0|1|2) CHECK_DIRNAME_LEVEL=$1 ;;
+# *) echo "$PROGNAME: unrecognised --check-dirname-level value (allowed are 0,1,2)" >&2
+# exit 1 ;;
+# esac
+# ;;
+# --check-dirname-regex)
+# shift; CHECK_DIRNAME_REGEX="$1" ;;
+ --delay)
+ shift
+ if [ "$1" = "XX" ]; then
+ # Fine
+ NMUDIFF_DELAY="$1"
+ else
+ if ! [ "$1" -ge 0 ] 2>/dev/null; then
+ NMUDIFF_DELAY=XX
+ else
+ NMUDIFF_DELAY="$1"
+ fi
+ fi
+ ;;
+ --nodelay|--no-delay)
+ NMUDIFF_DELAY=0 ;;
+ --nopending|--no-pending)
+ NMUDIFF_PENDING="" ;;
+ --nondd|--non-dd)
+ NMUDIFF_NONDD=yes ;;
+ --mutt)
+ NMUDIFF_MUTT=yes ;;
+ --nomutt|--no-mutt)
+ NMUDIFF_MUTT=no ;;
+ --new)
+ NMUDIFF_NEWREPORT=yes ;;
+ --old)
+ NMUDIFF_NEWREPORT=no ;;
+ --sendmail)
+ shift
+ case "$1" in
+ "") echo "$PROGNAME: SENDMAIL command cannot be empty, using default" >&2
+ ;;
+ *) BTS_SENDMAIL_COMMAND="$1" ;;
+ esac
+ ;;
+ --from)
+ shift
+ FROM="$1"
+ ;;
+ --no-conf|--noconf)
+ echo "$PROGNAME: $1 is only acceptable as the first command-line option!" >&2
+ exit 1 ;;
+ --template)
+ shift
+ case "$1" in
+ "") echo "$PROGNAME: TEMPLATEFILE cannot be empty, using default" >&2
+ ;;
+ *) if [ -f "$1" ]; then
+ NMUDIFF_TEMPLATE="$1"
+ else
+ echo "$PROGNAME: TEMPLATEFILE must exist, using default" >&2
+ fi
+ ;;
+ esac
+ ;;
+ --help|-h) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+ --) shift; break ;;
+ *) echo "$PROGNAME: bug in option parser, sorry!" >&2 ; exit 1 ;;
+ esac
+ shift
+done
+
+# Still going?
+if [ $# -gt 0 ]; then
+ echo "$PROGNAME takes no non-option arguments;" >&2
+ echo "try $PROGNAME --help for usage information" >&2
+ exit 1
+fi
+
+if [ "$NMUDIFF_MUTT" = yes ]; then
+ if command -v mutt > /dev/null; then
+ MUTT_PRG=mutt
+ elif command -v neomutt > /dev/null; then
+ MUTT_PRG=neomutt
+ else
+ echo "$PROGNAME: can't find mutt, falling back to sendmail instead" >&2
+ NMUDIFF_MUTT=no
+ fi
+fi
+
+if [ "$NMUDIFF_MUTT" = no ]; then
+ if [ -z "$FROM" ]; then
+ : ${FROMNAME:="$DEBFULLNAME"}
+ : ${FROMNAME:="$NAME"}
+ fi
+ : ${FROM:="$DEBEMAIL"}
+ : ${FROM:="$EMAIL"}
+ if [ -z "$FROM" ]; then
+ echo "$PROGNAME: must set email address either with DEBEMAIL environment variable" >&2
+ echo "or EMAIL environment variable or using --from command line option." >&2
+ exit 1
+ fi
+ if [ -n "$FROMNAME" ]; then
+ # If $FROM looks like "Name <email@address>" then extract just the address
+ if [ "$FROM" = "$(echo "$FROM" | sed -ne '/^\(.*\) *<\(.*\)> *$/p')" ]; then
+ FROM="$(echo "$FROM" | sed -ne 's/^\(.*\) *<\(.*\)> *$/\2/p')"
+ fi
+ FROM="$FROMNAME <$FROM>"
+ fi
+fi
+
+if ! [ -f debian/changelog ]; then
+ echo "nmudiff: must be run from top of NMU build tree!" >&2
+ exit 1
+fi
+
+SOURCE=$(dpkg-parsechangelog -SSource)
+if [ -z "$SOURCE" ]; then
+ echo "nmudiff: could not determine source package name from changelog!" >&2
+ exit 1
+fi
+
+VERSION=$(dpkg-parsechangelog -SVersion)
+if [ -z "$VERSION" ]; then
+ echo "nmudiff: could not determine source package version from changelog!" >&2
+ exit 1
+fi
+
+CLOSES=$(dpkg-parsechangelog -SCloses)
+
+if [ -z "$CLOSES" ]; then
+ # no bug reports, so make a new report in any event
+ NMUDIFF_NEWREPORT=yes
+fi
+
+if [ "$NMUDIFF_NEWREPORT" = "maybe" ]; then
+ if $(expr match "$CLOSES" ".* " > /dev/null); then
+ # multiple bug reports, so make a new report
+ NMUDIFF_NEWREPORT=yes
+ else
+ NMUDIFF_NEWREPORT=no
+ fi
+fi
+
+OLDVERSION=$(dpkg-parsechangelog -o1 -c1 -SVersion)
+if [ -z "$OLDVERSION" ]; then
+ echo "nmudiff: could not determine previous package version from changelog!" >&2
+ exit 1
+fi
+
+VERSION_NO_EPOCH=$(echo "$VERSION" | sed "s/^[0-9]\+://")
+OLDVERSION_NO_EPOCH=$(echo "$OLDVERSION" | sed "s/^[0-9]\+://")
+
+if [ ! -r ../${SOURCE}_${OLDVERSION_NO_EPOCH}.dsc ]; then
+ echo "nmudiff: could not read ../${SOURCE}_${OLDVERSION_NO_EPOCH}.dsc" >&2
+ exit 1
+fi
+if [ ! -r ../${SOURCE}_${VERSION_NO_EPOCH}.dsc ]; then
+ echo "nmudiff: could not read ../${SOURCE}_${VERSION_NO_EPOCH}.dsc" >&2
+ exit 1
+fi
+
+ret=0
+debdiff ../${SOURCE}_${OLDVERSION_NO_EPOCH}.dsc \
+ ../${SOURCE}_${VERSION_NO_EPOCH}.dsc \
+ > ../${SOURCE}-${VERSION_NO_EPOCH}-nmu.diff || ret=$?
+if [ $ret -ne 0 ] && [ $ret -ne 1 ]; then
+ echo "nmudiff: debdiff failed, aborting." >&2
+ rm -f ../${SOURCE}-${VERSION_NO_EPOCH}-nmu.diff
+ exit 1
+fi
+
+TO_ADDRESSES_SENDMAIL=""
+TO_ADDRESSES_MUTT=""
+BCC_ADDRESS_SENDMAIL=""
+BCC_ADDRESS_MUTT=""
+TAGS=""
+if [ "$NMUDIFF_NEWREPORT" = "yes" ]; then
+ TO_ADDRESSES_SENDMAIL="submit@bugs.debian.org"
+ TO_ADDRESSES_MUTT="submit@bugs.debian.org"
+ TAGS="Package: $SOURCE
+Version: $OLDVERSION
+Severity: normal
+Tags: patch ${NMUDIFF_PENDING}"
+else
+ for b in $CLOSES; do
+ TO_ADDRESSES_SENDMAIL="$TO_ADDRESSES_SENDMAIL,
+ $b@bugs.debian.org"
+ TO_ADDRESSES_MUTT="$TO_ADDRESSES_MUTT $b@bugs.debian.org"
+ if [ "$(bts select bugs:$b tag:patch)" != "$b" ]; then
+ TAGS="$TAGS
+Control: tags $b + patch"
+ fi
+ if [ "$NMUDIFF_DELAY" != "0" ] && [ "$(bts select bugs:$b tag:pending)" != "$b" ] && [ $NMUDIFF_PENDING ]; then
+ TAGS="$TAGS
+Control: tags $b + pending"
+ fi
+ done
+ TO_ADDRESSES_SENDMAIL=$(echo "$TO_ADDRESSES_SENDMAIL" | tail -n +2)
+ if [ "$TAGS" != "" ]; then
+ TAGS=$(echo "$TAGS" | tail -n +2)
+ fi
+fi
+
+TMPNAM="$(mktemp -t "$(basename "$1").XXXXXXXXX")"
+
+if [ "$NMUDIFF_DELAY" = "XX" ] && [ "$NMUDIFF_TEMPLATE" = "" ] && [ "$NMUDIFF_NONDD" != "yes" ]; then
+ DELAY_HEADER="
+[Replace XX with correct value]"
+fi
+
+if [ "$NMUDIFF_TEMPLATE" != "" ]; then
+ BODY=$(cat "$NMUDIFF_TEMPLATE")
+elif [ "$NMUDIFF_NONDD" = "yes" ]; then
+ BODY="$(printf "%s\n\n%s\n%s\n\n%s\n\n%s" \
+"Dear maintainer," \
+"I've prepared an NMU for $SOURCE (versioned as $VERSION). The diff" \
+"is attached to this message." \
+"I require a sponsor to have it uploaded." \
+"Regards.")"
+elif [ "$NMUDIFF_DELAY" = "0" ]; then
+ BODY="$(printf "%s\n\n%s\n%s\n\n%s" \
+"Dear maintainer," \
+"I've prepared an NMU for $SOURCE (versioned as $VERSION). The diff" \
+"is attached to this message." \
+"Regards.")"
+else
+ BODY="$(printf "%s\n\n%s\n%s\n%s\n\n%s" \
+"Dear maintainer," \
+"I've prepared an NMU for $SOURCE (versioned as $VERSION) and" \
+"uploaded it to DELAYED/$NMUDIFF_DELAY. Please feel free to tell me if I" \
+"should delay it longer." \
+"Regards.")"
+fi
+
+if [ "$NMUDIFF_MUTT" = no ]; then
+ cat <<EOF > "$TMPNAM"
+From: $FROM
+To: $TO_ADDRESSES_SENDMAIL
+Cc:
+Bcc: $BCC_ADDRESS_SENDMAIL
+Subject: $SOURCE: diff for NMU version $VERSION
+Date: $(date -R)
+X-NMUDIFF-Version: ###VERSION###
+
+$TAGS
+$DELAY_HEADER
+
+$BODY
+
+EOF
+
+ cat ../${SOURCE}-${VERSION_NO_EPOCH}-nmu.diff >> "$TMPNAM"
+ sensible-editor "$TMPNAM"
+ if [ $? -ne 0 ]; then
+ echo "nmudiff: sensible-editor exited with error, aborting." >&2
+ rm -f ../${SOURCE}-${VERSION_NO_EPOCH}-nmu.diff "$TMPNAM"
+ exit 1
+ fi
+
+ while : ; do
+ echo -n "Do you want to go ahead and submit the bug report now? (y/n) "
+ read response
+ case "$response" in
+ y*) break;;
+ n*) echo "OK, then, aborting." >&2
+ rm -f ../${SOURCE}-${VERSION_NO_EPOCH}-nmu.diff "$TMPNAM"
+ exit 1
+ ;;
+ esac
+ done
+
+ case "$BTS_SENDMAIL_COMMAND" in
+ /usr/sbin/sendmail*|/usr/sbin/exim*)
+ BTS_SENDMAIL_COMMAND="$BTS_SENDMAIL_COMMAND -t" ;;
+ *) ;;
+ esac
+
+ $BTS_SENDMAIL_COMMAND < "$TMPNAM"
+
+else # NMUDIFF_MUTT=yes
+ cat <<EOF > "$TMPNAM"
+$TAGS
+$DELAY_HEADER
+
+$BODY
+
+EOF
+
+ $MUTT_PRG -s "$SOURCE: diff for NMU version $VERSION" -i "$TMPNAM" \
+ -e "my_hdr X-NMUDIFF-Version: ###VERSION###" \
+ -a ../${SOURCE}-${VERSION_NO_EPOCH}-nmu.diff $BCC_ADDRESS_MUTT \
+ -- $TO_ADDRESSES_MUTT
+
+fi
+
+rm -f ../${SOURCE}-${VERSION_NO_EPOCH}-nmu.diff "$TMPNAM"
diff --git a/scripts/origtargz.pl b/scripts/origtargz.pl
new file mode 100755
index 0000000..c3152bb
--- /dev/null
+++ b/scripts/origtargz.pl
@@ -0,0 +1,438 @@
+#!/usr/bin/perl
+#
+# origtargz: fetch the orig tarball of a Debian package from various sources,
+# and unpack it
+# Copyright (C) 2012-2019 Christoph Berg <myon@debian.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+=head1 NAME
+
+origtargz - fetch the orig tarball of a Debian package from various sources, and unpack it
+
+=head1 SYNOPSIS
+
+=over
+
+=item B<origtargz> [I<OPTIONS>] [B<--unpack>[=B<no>|B<once>|B<yes>]]
+
+=item B<origtargz> B<--help>
+
+=back
+
+=head1 DESCRIPTION
+
+B<origtargz> downloads the orig tarball of a Debian package, and also unpacks
+it into the current directory, if it just contains a F<debian> directory. The
+main use for B<origtargz> is with debian-dir-only repository checkouts, but it
+is useful as a general tarball download wrapper. The version number for the
+tarball to be downloaded is determined from F<debian/changelog>. It should be
+invoked from the top level directory of an unpacked Debian source package.
+
+Various download locations are tried:
+
+=over 4
+
+=item *
+
+First, an existing file is looked for.
+
+=item *
+
+Directories given with B<--path> are searched.
+
+=item *
+
+B<pristine-tar> is tried.
+
+=item *
+
+B<pristine-lfs> is tried.
+
+=item *
+
+B<apt-get source> is tried when B<apt-cache showsrc> reports a matching version.
+
+=item *
+
+Finally, B<uscan --download --download-current-version> is tried.
+
+=back
+
+When asked to unpack the orig tarball, B<origtargz> will remove all files and
+directories from the current directory, except the debian directory, and the
+VCS repository directories. I<Note that this will drop all non-committed changes>
+for the patch system in use (e.g. source format "3.0 (quilt)"), and will even
+remove all patches from the package when no patch system is in use (the
+original "1.0" source format). Some VCS control files outside F<debian/>
+preserved (F<.bzr-builddeb>, F<.bzr-ignore>, F<.gitignore>, F<.hgignore>), if
+stored in VCS.
+
+The default behavior is to unpack the orig tarball if the current directory
+is empty except for a F<debian> directory and the VCS files mentioned above.
+
+=head1 NOTES
+
+Despite B<origtargz> being called "targz", it will work with any compression
+scheme used for the tarball.
+
+A similar tool to unpack orig tarballs is B<uupdate>(1). B<uupdate> creates a
+new working directory, unpacks the tarball, and applies the Debian F<.diff.gz>
+changes. In contrast, B<origtargz> uses the current directory, keeping VCS
+metadata.
+
+For Debian package repositories that keep the full upstream source, other tools
+should be used to upgrade the repository from the new tarball. See
+B<gbp-import-orig>(1) and B<svn-upgrade>(1) for examples. B<origtargz> is still
+useful for downloading the current tarball.
+
+=head1 OPTIONS
+
+=over
+
+=item B<-p>, B<--path> I<directory>
+
+Add I<directory> to the list of locations to search for an existing tarball.
+When found, a hardlink is created if possible, otherwise a symlink.
+
+=item B<-u>, B<--unpack>[=B<no>|B<once>|B<yes>]
+
+Unpack the downloaded orig tarball to the current directory, replacing
+everything except the debian directory. Existing files are removed, except for
+F<debian/> and VCS files. Preserved are: F<.bzr>, F<.bzrignore>,
+F<.bzr-builddeb>, F<.git>, F<.gitignore>, F<.hg>, F<.hgignore>, F<_darcs> and
+F<.svn>.
+
+=over
+
+=item B<no>
+
+Do not unpack the orig tarball.
+
+=item B<once> (default when B<--unpack> is not used)
+
+If the current directory contains only a F<debian> directory (and possibly some
+dotfiles), unpack the orig tarball. This is the default behavior.
+
+=item B<yes> (default for B<--unpack> without argument)
+
+Always unpack the orig tarball.
+
+=back
+
+=item B<-d>, B<--download-only>
+
+Alias for B<--unpack=no>.
+
+=item B<-t>, B<--tar-only>
+
+When using B<apt-get source>, pass B<--tar-only> to it. The default is to
+download the full source package including F<.dsc> and F<.diff.gz> or
+F<.debian.tar.gz> components so B<debdiff> can be used to diff the last upload
+to the next one. With B<--tar-only>, only download the F<.orig.tar.*> file.
+
+=item B<--clean>
+
+Remove existing files as with B<--unpack>. Note that like B<--unpack>, this
+will remove upstream files even if they are stored in VCS.
+
+=back
+
+=cut
+
+#=head1 CONFIGURATION VARIABLES
+#
+#The two configuration files F</etc/devscripts.conf> and
+#F<~/.devscripts> are sourced by a shell in that order to set
+#configuration variables. Command line options can be used to override
+#configuration file settings. Environment variable settings are ignored
+#for this purpose. The currently recognised variables are:
+
+=head1 SEE ALSO
+
+B<debcheckout>(1), B<gbp-import-orig>(1), B<pristine-tar>(1), B<svn-upgrade>(1), B<uupdate>(1)
+
+=head1 AUTHOR
+
+B<origtargz> and this manpage have been written by Christoph Berg
+<I<myon@debian.org>>.
+
+=cut
+
+# option parsing
+
+use strict;
+use warnings;
+use File::Temp qw/tempdir/;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use Pod::Usage;
+
+my @dirs = ();
+my $tar_only = 0;
+my $unpack = 'once'; # default when --unpack is not used
+my $clean = 0;
+
+GetOptions(
+ "path|p=s" => \@dirs,
+ "download-only|d" => sub { $unpack = 'no' },
+ "help|h" => sub { pod2usage({ -exitval => 0, -verbose => 1 }); },
+ "tar-only|t" => \$tar_only,
+ "unpack|u:s" => \$unpack,
+ "clean" => \$clean,
+) or pod2usage({ -exitval => 3 });
+
+$unpack = 'yes'
+ if (defined $unpack and $unpack eq '')
+ ; # default for --unpack without argument
+pod2usage({ -exitval => 3 }) if (@ARGV > 0 or $unpack !~ /^(no|once|yes)$/);
+
+# get package name and version number
+
+my ($package, $version, $origversion, $fileversion);
+
+chdir ".." if (!-f "debian/changelog" and -f "../debian/changelog");
+open F, "debian/changelog" or die "debian/changelog: $!\n";
+my $line = <F>;
+close F;
+unless ($line =~ /^(\S+) \((\S+)\)/) {
+ die "could not parse debian/changelog:1: $line";
+}
+($package, $version) = ($1, $2);
+unless ($version =~ /-/) {
+ print
+"Package with native version number $version, skipping orig.tar.* download\n";
+ exit 0;
+}
+$origversion = $version;
+$origversion =~ s/(.*)-.*/$1/; # strip everything from the last dash
+$fileversion = $origversion;
+$fileversion =~ s/^\d+://; # strip epoch
+
+# functions
+
+sub download_origtar () {
+ # look for an existing file
+
+ if (my @f = glob "../${package}_$fileversion.orig*.tar.*") {
+ print "Using existing $f[0]\n";
+ return @f;
+ }
+
+ # try other directories
+
+ foreach my $dir (@dirs) {
+ $dir =~ s!/$!!;
+
+ if (my @f = glob "$dir/${package}_$fileversion.orig*.tar.*") {
+ my @res;
+ for my $f (@f) {
+ print "Using $f\n";
+ my $basename = $f;
+ $basename =~ s!.*/!!;
+ link $f, "../$basename"
+ or symlink $f, "../$basename"
+ or die "symlink: $!";
+ push @res, "../$basename";
+ }
+ return @res;
+ }
+ }
+
+ # try pristine-tar
+
+ my @files
+ = grep { /^\Q${package}_$fileversion.orig\E(?:-[\w\-]+)?\.tar\./ }
+ map { chomp; $_; } # remove newlines
+ `pristine-tar list 2>&1`;
+ if (@files) {
+ system "pristine-tar checkout ../$_" for @files;
+ }
+
+ if (my @f = glob "../${package}_$fileversion.orig*.tar.*") {
+ return @f;
+ }
+
+ # try pristine-lfs
+
+ @files = grep { /^\Q${package}_$fileversion.orig\E(?:-[\w\-]+)?\.tar\./ }
+ map { chomp; $_; } # remove newlines
+ `pristine-lfs list 2>&1`;
+ if (@files) {
+ system "pristine-lfs checkout -o .. $_" for @files;
+ }
+
+ if (my @f = glob "../${package}_$fileversion.orig*.tar.*") {
+ return @f;
+ }
+
+ # try apt-get source
+
+ open S, "apt-cache showsrc '$package' |";
+ my @showsrc;
+ {
+ local $/ = ""; # slurp paragraphs
+ @showsrc = <S>;
+ }
+ close S;
+
+ my $bestsrcversion;
+ foreach my $src (@showsrc) {
+ $src =~ /^Package: (.*)/m or next;
+ next if ($1 ne $package);
+ ; # should never trigger, but who knows
+ $src =~ /^Version: (.*)/m or next;
+ my $srcversion = $1;
+ my $srcorigversion = $srcversion;
+ $srcorigversion =~ s/(.*)-.*/$1/; # strip everything from the last dash
+
+ if ($srcorigversion eq $origversion)
+ { # loop through all matching versions
+ $bestsrcversion = $srcversion;
+ last if ($srcversion eq $version); # break if exact match
+ }
+ }
+
+ if ($bestsrcversion) {
+ print "Trying apt-get source $package=$bestsrcversion ...\n";
+ my $t = $tar_only ? '--tar-only' : '';
+ system
+"cd .. && apt-get source --only-source --download-only $t '$package=$bestsrcversion'";
+ }
+
+ if (my @f = glob "../${package}_$fileversion.orig*.tar.*") {
+ return @f;
+ }
+
+ # try uscan
+
+ if (-f "debian/watch") {
+ print "Trying uscan --download --download-current-version ...\n";
+ system "uscan --download --download-current-version --rename\n";
+ }
+
+ if (my @f = glob "../${package}_$fileversion.orig*.tar.*") {
+ return @f;
+ }
+
+ print
+ "Could not find any location for ${package}_$fileversion.orig.tar.*\n";
+ return;
+}
+
+sub clean_checkout () {
+ # delete all files except debian/, our VCS checkout, and some files
+ # often in VCS outside debian/ even in debian-dir-only repositories
+ opendir DIR, '.' or die "opendir: $!";
+ my @rm;
+ while (my $file = readdir DIR) {
+ next if ($file eq '.' or $file eq '..');
+ next if ($file eq 'debian');
+ next if ($file =~ /^(\.bzr|\.git|\.hg|\.svn|CVS|_darcs)$/);
+ if ($file eq '.gitignore' and -d '.git')
+ { # preserve .gitignore if it's from git
+ next if `git ls-files .gitignore` eq ".gitignore\n";
+ }
+ if ( ($file =~ /^\.bzr(ignore|-builddeb)$/ and -d '.bzr')
+ or ($file eq '.hgignore' and -d '.hg')) {
+ print
+"Notice: not deleting $file (likely to come from VCS checkout)\n";
+ next;
+ }
+ push @rm, $file;
+ }
+ close DIR;
+ system('rm', '-rf', '--', @rm);
+}
+
+sub unpack_tarball (@) {
+ my @origtar = @_;
+
+ for my $origtar (@origtar) {
+ if ($origtar =~ m/\.asc$/) {
+ next;
+ }
+
+ my $tmpdir = File::Temp->newdir(DIR => ".", CLEANUP => 1);
+ print "Unpacking $origtar\n";
+ my $cmp = ($origtar =~ /orig(?:-([\w\-]+))?\.tar/)[0] || '';
+ if ($cmp) {
+ mkdir $cmp;
+ $cmp = "/$cmp";
+ mkdir "$tmpdir$cmp";
+ }
+ #print STDERR Dumper(\@origtar,$cmp);use Data::Dumper;exit;
+
+ # unpack
+ system('tar', "--directory=$tmpdir$cmp", '-xf', "$origtar");
+ if ($? >> 8) {
+ print STDERR "unpacking $origtar failed\n";
+ return 0;
+ }
+
+ # figure out which subdirectory was created by unpacking
+ my $directory;
+ my @files = glob "$tmpdir$cmp/*";
+ if (@files == 1 and -d $files[0])
+ { # exactly one directory, move its contents over
+ $directory = $files[0];
+ } else
+ { # several files were created, move these to the target directory
+ $directory = $tmpdir . $cmp;
+ }
+
+ # move all files over, except the debian directory
+ opendir DIR, $directory or die "opendir $directory: $!";
+ foreach my $file (readdir DIR) {
+ if ($file eq 'debian') {
+ system('rm', '-rf', '--', "$directory/$file");
+ next;
+ } elsif ($file eq '.' or $file eq '..') {
+ next;
+ }
+ my $dest = './' . ($cmp ? "$cmp/" : '') . $file;
+ unless (rename "$directory/$file", $dest) {
+ print `ls -l $directory/$file`;
+ print STDERR "rename $directory/$file $dest: $!\n";
+ return 0;
+ }
+ }
+ closedir DIR;
+ rmdir $directory;
+ }
+
+ return 1;
+}
+
+# main
+
+if ($clean) {
+ clean_checkout;
+ exit 0;
+}
+
+my @origtar = download_origtar;
+exit 1 unless (@origtar);
+
+if ($unpack eq 'once') {
+ my @files = glob '*'; # ignores dotfiles
+ if (@files == 1)
+ { # this is debian/, we have already opened debian/changelog
+ unpack_tarball(@origtar) or exit 1;
+ }
+} elsif ($unpack eq 'yes') {
+ clean_checkout;
+ unpack_tarball(@origtar) or exit 1;
+}
+
+exit 0;
diff --git a/scripts/pkgnames.bash_completion b/scripts/pkgnames.bash_completion
new file mode 100644
index 0000000..eef8c41
--- /dev/null
+++ b/scripts/pkgnames.bash_completion
@@ -0,0 +1,24 @@
+# /usr/share/bash-completion/completions/pkgnames
+# Bash command completion for commands that expect a Debian package name.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+_pkg_names()
+{
+ local cur prev opts
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+
+ COMPREPLY=( $( apt-cache pkgnames $cur 2> /dev/null ) )
+
+ return 0
+}
+
+complete -F _pkg_names wnpp-alert wnpp-check mk-build-deps rmadison mass-bug debsnap dd-list build-rdeps who-uploads transition-check getbuildlog grep-excuses rc-alert whodepends dget pts-subscribe pts-unsubscribe
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/plotchangelog.1 b/scripts/plotchangelog.1
new file mode 100644
index 0000000..acbe66d
--- /dev/null
+++ b/scripts/plotchangelog.1
@@ -0,0 +1,127 @@
+.TH PLOTCHANGELOG 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+plotchangelog \- graph Debian changelogs
+.SH SYNOPSIS
+.B plotchangelog
+.I "\fR[\fPoptions\fR]\fP changelog \fR...\fP"
+.SH "DESCRIPTION"
+.BR plotchangelog
+is a tool to aid in visualizing a Debian \fIchangelog\fR. The changelogs are
+graphed with
+.BR gnuplot (1)
+, with the X axis of the graph denoting time of release and the Y axis
+denoting the Debian version number of the package. Each individual release
+of the package is represented by a point, and the points are color coded to
+indicate who released that version of the package. The upstream version
+number of the package can also be labeled on the graph.
+.PP
+Alternatively, the Y axis can be configured to display the size of the
+changelog entry for each new version. Or it can be configured to display
+approximately how many bugs were fixed for each new version.
+.PP
+Note that if the package is a Debian-specific package, the entire package
+version will be used for the Y axis. This does not always work perfectly.
+.PP
+.SH "READING THE GRAPH"
+The general outline of a package's
+graph is typically a series of peaks, starting at 1, going up to n, and then
+returning abruptly to 1. The higher the peaks, the more releases the
+maintainer made between new upstream versions of the package. If a package
+is Debian-only, it's graph will just grow upwards without ever falling
+(although a bug in this program may cause it to fall sometimes, if the
+version number goes from say, 0.9 to say, 0.10 - this is interpreted wrong...)
+.PP
+If the graph dips below 1, someone made a NMU of the package and upgraded it
+to a new upstream version, thus setting the Debian version to 0. NMU's in
+general appear as fractional points like 1.1, 2.1, etc. A NMU can also be
+easily detected by looking at the points that represent which maintainer
+uploaded the package -- a solitary point of a different type than the points
+before and after it is typically a NMU.
+.PP
+It's also easy to tell by looking at the points when a package changes
+maintainers.
+.SH OPTIONS
+.TP
+.B \-l\fR, \fP\-\-linecount
+Instead of using the Debian version number as the Y axis, use the number of
+lines in the changelog entry for each version. Cannot be used
+together with
+.BR \-\-bugcount .
+.TP
+.B \-b\fR, \fP\-\-bugcount
+Instead of using the Debian version number as the Y axis, use the number of
+bugs that were closed by each changelog entry. Note that this number is
+obtained by searching for "#dddd" in the changelog, and so it may be
+inaccurate. Cannot be used together with
+.BR \-\-linecount .
+.TP
+.B \-c\fR, \fP\-\-cumulative
+When used together with either
+.B \-\-bugcount
+or
+.BR \-\-linecount ,
+graphs the cumulative count rather than the count in each individual
+changelog entry.
+.TP
+.B \-v\fR, \fP\-\-no-version
+Do not show upstream version labels. Useful if the graph gets too crowded.
+.TP
+.B \-m, \-\-no-maint
+Do not differentiate between different maintainers of the package.
+.TP
+.B \-s file\fR, \fP\-\-save=\fIfile
+Save the graph to \fIfile\fR in PostScript format instead of immediately
+displaying it.
+.TP
+.B \-u\fR, \fP\-\-urgency
+Use larger points when displaying higher-urgency package uploads.
+.TP
+.B \-\-verbose
+Output the gnuplot script that is fed into gnuplot (for debugging purposes).
+.TP
+.B \-g\fIcommands\fR, \fB\-\-gnuplot=\fIcommands
+This allows you to insert
+.BR gnuplot (1)
+commands into the gnuplot script that is used to generate the graph. The
+commands are placed after all initialization but before the final \fBplot\fR
+command. This can be used to override the default look provided by this
+program in arbitrary ways. You can also use things like
+"set terminal png color"
+to change the output file type, which is useful in conjunction with
+the \-s option.
+.TP
+.B \-\-help
+Show a usage summary.
+.TP
+.B \-\-version
+Display version, author and copyright information.
+.TP
+.B \-\-noconf\fR, \fP\-\-no-conf
+Do not read any configuration files (see below).
+.TP
+.I changelog \fR...
+The \fIchangelog\fR files to graph. If multiple files are specified they will all
+be displayed on the same graph. The files may be compressed with gzip. Any
+text in them that is not in Debian changelog format will be ignored.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced by a shell in that order to set
+configuration variables. The \fB\-\-no\-conf\fR option can be used to
+prevent reading these files. Environment variable settings are
+ignored when these configuration files are read. The currently
+recognised variables are:
+.TP
+.B PLOTCHANGELOG_OPTIONS
+This is a space-separated list of options to always use, for example
+\fB\-l \-b\fP. Do not include \fB\-g\fP or \fB\-\-gnuplot\fP among this list as it
+may be ignored; see the next variable instead.
+.TP
+.B PLOTCHANGELOG_GNUPLOT
+These are
+.B gnuplot
+commands which will be prepended to any such commands given on the
+command line.
+.SH "SEE ALSO"
+.BR devscripts.conf (5)
+.SH AUTHOR
+Joey Hess <joey@kitenet.net>
diff --git a/scripts/plotchangelog.bash_completion b/scripts/plotchangelog.bash_completion
new file mode 100644
index 0000000..6b81bd6
--- /dev/null
+++ b/scripts/plotchangelog.bash_completion
@@ -0,0 +1,33 @@
+# /usr/share/bash-completion/completions/plotchangelog
+# Bash command completion for ‘plotchangelog(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+# Copyright © 2015, Nicholas Bamber <nicholas@periapt.co.uk>
+
+_plotchangelog()
+{
+ local cur prev words cword _options
+ _init_completion || return
+
+ _options='--linecount --bugcount --cumulative --no-version --no-maint --urgency --verbose'
+
+ if [[ $prev == plotchangelog ]]; then
+ _options+=' --no-conf'
+ fi
+
+ _options+=' '
+ _options+=$(find . -name changelog | sed -e's!\.\/!!' | paste -s -d' ')
+
+ COMPREPLY=( $( compgen -W "${_options}" -- "$cur" ) )
+
+ return 0
+} &&
+complete -F _plotchangelog plotchangelog
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/plotchangelog.pl b/scripts/plotchangelog.pl
new file mode 100755
index 0000000..3813ad6
--- /dev/null
+++ b/scripts/plotchangelog.pl
@@ -0,0 +1,429 @@
+#!/usr/bin/perl
+#
+# Plot the history of a debian package from the changelog, displaying
+# when each release of the package occurred, and who made each release.
+# To make the graph a little more interesting, the debian revision of the
+# package is used as the y axis.
+#
+# Pass this program the changelog(s) you wish to be plotted.
+#
+# Copyright 1999 by Joey Hess <joey@kitenet.net>
+# Modifications copyright 2003 by Julian Gilbey <jdg@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use 5.006;
+use strict;
+use FileHandle;
+use File::Basename;
+use File::Temp qw/ tempfile /;
+use Fcntl;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+
+BEGIN {
+ pop @INC if $INC[-1] eq '.';
+ eval { require Date::Parse; import Date::Parse(); };
+ if ($@) {
+ my $progname = basename($0);
+ if ($@ =~ /^Can\'t locate Date\/Parse\.pm/) {
+ die
+"$progname: you must have the libtimedate-perl package installed\nto use this script\n";
+ } else {
+ die
+"$progname: problem loading the Date::Parse module:\n $@\nHave you installed the libtimedate-perl package?\n";
+ }
+ }
+}
+
+my $progname = basename($0);
+my $modified_conf_msg;
+
+sub usage {
+ print <<"EOF";
+Usage: plotchangelog [options] changelog ...
+ -v --no-version Do not show package version information.
+ -m --no-maint Do not show package maintainer information.
+ -u --urgency Use larger points for higher urgency uploads.
+ -l --linecount Make the Y axis be number of lines in the
+ changelog.
+ -b --bugcount Make the Y axis be number of bugs closed
+ in the changelog.
+ -c --cumulative With -l or -b, graph the cumulative number
+ of lines or bugs closed.
+ -g "commands" Pass "commands" on to gnuplot, they will be
+ --gnuplot="commands" added to the gnuplot script that is used to
+ generate the graph.
+ -s file --save=file Save the graph to the specified file in
+ postscript format.
+ -d --dump Dump gnuplot script to stdout.
+ --verbose Outputs the gnuplot script.
+ --help Show this message.
+ --version Display version and copyright information.
+ --noconf --no-conf Don\'t read devscripts configuration files
+ Must be the first option.
+
+ At most one of -l and -b (or their long equivalents) may be used.
+
+Default settings modified by devscripts configuration files:
+$modified_conf_msg
+EOF
+}
+
+my $versioninfo = <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 1999 by Joey Hess <joey\@kitenet.net>.
+Modifications copyright 1999-2003 by Julian Gilbey <jdg\@debian.org>
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later.
+EOF
+
+my (
+ $no_version, $no_maintainer, $gnuplot_commands, $dump,
+ $save_filename, $verbose, $linecount, $bugcount,
+ $cumulative, $help, $showversion, $show_urgency,
+ $noconf
+) = "";
+
+# Handle config file unless --no-conf or --noconf is specified
+# The next stuff is boilerplate
+my $extra_gnuplot_commands = '';
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ $modified_conf_msg = " (no configuration files read)";
+ shift;
+} else {
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my %config_vars = (
+ 'PLOTCHANGELOG_OPTIONS' => '',
+ 'PLOTCHANGELOG_GNUPLOT' => '',
+ );
+ my %config_default = %config_vars;
+
+ my $shell_cmd;
+ # Set defaults
+ foreach my $var (keys %config_vars) {
+ $shell_cmd .= "$var='$config_vars{$var}';\n";
+ }
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ # Read back values
+ foreach my $var (keys %config_vars) { $shell_cmd .= "echo \$$var;\n" }
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars{ keys %config_vars } = split /\n/, $shell_out, -1;
+
+ foreach my $var (sort keys %config_vars) {
+ if ($config_vars{$var} ne $config_default{$var}) {
+ $modified_conf_msg .= " $var=$config_vars{$var}\n";
+ }
+ }
+ $modified_conf_msg ||= " (none)\n";
+ chomp $modified_conf_msg;
+
+ if ($config_vars{'PLOTCHANGELOG_OPTIONS'}) {
+ unshift @ARGV, split(' ', $config_vars{'PLOTCHANGELOG_OPTIONS'});
+ }
+ $extra_gnuplot_commands = $config_vars{'PLOTCHANGELOG_GNUPLOT'};
+}
+
+GetOptions(
+ "no-version|v", \$no_version,
+ "no-maint|m", \$no_maintainer,
+ "gnuplot|g=s", \$gnuplot_commands,
+ "save|s=s", \$save_filename,
+ "dump|d", \$dump,
+ "urgency|u", \$show_urgency,
+ "verbose", \$verbose,
+ "l|linecount", \$linecount,
+ "b|bugcount", \$bugcount,
+ "c|cumulative", \$cumulative,
+ "help", \$help,
+ "version", \$showversion,
+ "noconf" => \$noconf,
+ "no-conf" => \$noconf,
+ )
+ or die
+"Usage: $progname [options] changelog ...\nRun $progname --help for more details\n";
+
+if ($noconf) {
+ die
+"$progname: --no-conf is only acceptable as the first command-line option!\n";
+}
+
+if ($help) {
+ usage();
+ exit 0;
+}
+
+if ($showversion) {
+ print $versioninfo;
+ exit 0;
+}
+
+if ($bugcount && $linecount) {
+ die
+"$progname: can't use --bugcount and --linecount\nRun $progname --help for usage information.\n";
+}
+
+if ($cumulative && !$bugcount && !$linecount) {
+ warn
+"$progname: --cumulative without --bugcount or --linecount: ignoring\nRun $progname --help for usage information.\n";
+}
+
+if (!@ARGV) {
+ die
+"Usage: $progname [options] changelog ...\nRun $progname --help for more details\n";
+}
+
+my %data;
+my ($package, $version, $maintainer, $date, $urgency) = undef;
+my ($data_tmpfile, $script_tmpfile);
+my ($data_fh, $script_fh);
+
+if (!$dump) {
+ $data_fh = tempfile("plotdataXXXXXX", UNLINK => 1)
+ or die "cannot create temporary file: $!";
+ fcntl $data_fh, Fcntl::F_SETFD(), 0
+ or die "disabling close-on-exec for temporary file: $!";
+ $script_fh = tempfile("plotscriptXXXXXX", UNLINK => 1)
+ or die "cannot create temporary file: $!";
+ fcntl $script_fh, Fcntl::F_SETFD(), 0
+ or die "disabling close-on-exec for temporary file: $!";
+ $data_tmpfile = '/dev/fd/' . fileno($data_fh);
+ $script_tmpfile = '/dev/fd/' . fileno($script_fh);
+} else {
+ $data_tmpfile = '-';
+}
+my %pkgcount;
+my $c;
+
+# Changelog parsing.
+foreach (@ARGV) {
+ if (/\.gz$/) {
+ open F, "zcat $_|" || die "$_: $!";
+ } else {
+ open F, $_ || die "$_: $!";
+ }
+
+ while (<F>) {
+ chomp;
+ # Note that some really old changelogs use priority, not urgency.
+ if (/^(\w+.*?)\s+\((.*?)\)\s+.*?;\s+(?:urgency|priority)=(.*)/i) {
+ $package = lc($1);
+ $version = $2;
+ if ($show_urgency) {
+ $urgency = $3;
+ if ($urgency =~ /high/i) {
+ $urgency = 2;
+ } elsif ($urgency =~ /medium/i) {
+ $urgency = 1.5;
+ } else {
+ $urgency = 1;
+ }
+ } else {
+ $urgency = 1;
+ }
+ undef $maintainer;
+ undef $date;
+ $c = 0;
+ } elsif (/^ -- (.*?) (.*)/) {
+ $maintainer = $1;
+ $date = str2time($2);
+
+ # Strip email address.
+ $maintainer =~ s/<.*>//;
+ $maintainer =~ s/\(.*\)//;
+ $maintainer =~ s/\s+$//;
+ } elsif (/^(\w+.*?)\s+\((.*?)\)\s+/) {
+ print STDERR qq[Parse error on "$_"\n];
+ } elsif ($linecount && /^ /) {
+ $c++; # count changelog size.
+ } elsif ($bugcount && /^ /) {
+ # count bugs that were said to be closed.
+ my @bugs = m/#\d+/g;
+ $c += $#bugs + 1;
+ }
+
+ if ( defined $package
+ && defined $version
+ && defined $maintainer
+ && defined $date
+ && defined $urgency) {
+ $data{$package}{ $pkgcount{$package}++ } = [
+ $linecount || $bugcount ? $c : $version,
+ $maintainer, $date, $urgency
+ ];
+ undef $package;
+ undef $version;
+ undef $maintainer;
+ undef $date;
+ undef $urgency;
+ }
+ }
+
+ close F;
+}
+
+if ($cumulative) {
+ # have to massage the data; based on some code from later on
+ foreach $package (keys %data) {
+ my $total = 0;
+ # It's crucial the output is sorted by date.
+ foreach my $i (
+ sort { $data{$package}{$a}[2] <=> $data{$package}{$b}[2] }
+ keys %{ $data{$package} }
+ ) {
+ $total += $data{$package}{$i}[0];
+ $data{$package}{$i}[0] = $total;
+ }
+ }
+}
+
+my $header = q{
+set key below title "key" box
+set timefmt "%m/%d/%Y %H:%M"
+set xdata time
+set format x "%m/%y"
+set yrange [0 to *]
+};
+if ($linecount) {
+ if ($cumulative) {
+ $header .= "set ylabel 'Cumulative changelog length'\n";
+ } else {
+ $header .= "set ylabel 'Changelog length'\n";
+ }
+} elsif ($bugcount) {
+ if ($cumulative) { $header .= "set ylabel 'Cumulative bugs closed'\n"; }
+ else { $header .= "set ylabel 'Bugs closed'\n"; }
+} else {
+ $header .= "set ylabel 'Debian version'\n";
+}
+if ($save_filename) {
+ $header .= "set terminal postscript color solid\n";
+ $header .= "set output '$save_filename'\n";
+}
+my $script = "plot ";
+my $data = '';
+my $index = 0;
+my %maintdata;
+
+# Note that "lines" is used if we are also showing maintainer info,
+# otherwise we use "linespoints" to make sure points show up for each
+# release anyway.
+my $style = $no_maintainer ? "linespoints" : "lines";
+
+foreach $package (keys %data) {
+ my $oldmaintainer = "";
+ my $oldversion = "";
+ # It's crucial the output is sorted by date.
+ foreach my $i (
+ sort { $data{$package}{$a}[2] <=> $data{$package}{$b}[2] }
+ keys %{ $data{$package} }
+ ) {
+ my $v = $data{$package}{$i}[0];
+ $maintainer = $data{$package}{$i}[1];
+ $date = $data{$package}{$i}[2];
+ $urgency = $data{$package}{$i}[3];
+
+ $maintainer =~ s/"/\\"/g;
+
+ my $y;
+
+ # If it's got a debian revision, use that as the y coordinate.
+ if ($v =~ m/(.*)-(.*)/) {
+ $y = $2;
+ $version = $1;
+ } else {
+ $y = $v;
+ }
+
+ # Now make sure the version is a real number. This includes making
+ # sure it has no more than one decimal point in it, and getting rid of
+ # any nonnumeric stuff. Otherwise, the "set label" command below could
+ # fail. Luckily, perl's string -> num conversion is perfect for this job.
+ $y = $y + 0;
+
+ if (lc($maintainer) ne lc($oldmaintainer)) {
+ $oldmaintainer = $maintainer;
+ }
+
+ my ($sec, $min, $hour, $mday, $mon, $year) = localtime($date);
+ my $x = ($mon + 1) . "/$mday/" . (1900 + $year) . " $hour:$min";
+ $data .= "$x\t$y\n";
+ $maintdata{$oldmaintainer}{$urgency} .= "$x\t$y\n";
+
+ if ($oldversion ne $version && !$no_version) {
+ # Upstream version change. Label it.
+ $header .= "set label '$version' at '$x',$y left\n";
+ $oldversion = $version;
+ }
+ }
+ $data .= "\n\n"; # start new dataset
+ # Add to plot command.
+ $script
+ .= "'$data_tmpfile' index $index using 1:3 title '$package' with $style, ";
+ $index++;
+}
+
+# Add a title.
+my $title .= "set title '";
+$title
+ .= $#ARGV > 1
+ ? "Graphing Debian changelogs"
+ : "Graphing Debian changelog";
+$title .= "'\n";
+
+if (!$no_maintainer) {
+ foreach $maintainer (sort keys %maintdata) {
+ foreach $urgency (sort keys %{ $maintdata{$maintainer} }) {
+ $data .= $maintdata{$maintainer}{$urgency} . "\n\n";
+ $script
+ .= "'$data_tmpfile' index $index using 1:3 title \"$maintainer\" with points pointsize "
+ . (1.5 * $urgency) . ", ";
+ $index++;
+ }
+ }
+}
+
+$script =~ s/, $/\n/;
+$script = qq{
+$header
+$title
+$extra_gnuplot_commands
+$gnuplot_commands
+$script
+};
+$script .= "pause -1 'Press Return to continue.'\n"
+ unless $save_filename || $dump;
+
+if (!$dump) {
+ # Annoyingly, we have to use 2 temp files. I could just send everything to
+ # gnuplot on stdin, but then the pause -1 doesn't work.
+ open(DATA, ">$data_tmpfile") || die "$data_tmpfile: $!";
+ open(SCRIPT, ">$script_tmpfile") || die "$script_tmpfile: $!";
+} else {
+ open(DATA, ">&STDOUT");
+ open(SCRIPT, ">&STDOUT");
+}
+
+print SCRIPT $script;
+print $script if $verbose && !$dump;
+print DATA $data;
+close SCRIPT;
+close DATA;
+
+if (!$dump) {
+ unless (system("gnuplot", $script_tmpfile) == 0) {
+ die "gnuplot program failed (is the gnuplot package installed?): $!\n";
+ }
+}
diff --git a/scripts/pts-subscribe.1 b/scripts/pts-subscribe.1
new file mode 100644
index 0000000..bb1d459
--- /dev/null
+++ b/scripts/pts-subscribe.1
@@ -0,0 +1,59 @@
+.TH PTS-SUBSCRIBE 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+pts-subscribe \- time-limited subscription to the PTS
+.SH SYNOPSIS
+\fBpts-subscribe\fR [\fIoptions\fR] \fIpackage\fR
+.PP
+\fBpts-unsubscribe\fR [\fIoptions\fR] \fIpackage\fR
+.SH DESCRIPTION
+\fBpts-subscribe\fR sends a subscription request for \fIpackage\fR to
+the Package Tracking System at pts@qa.debian.org, and cancels the
+subscription 30 days later.
+.PP
+If called as \fBpts-unsubscribe\fR, send an unsubscription request
+for \fIpackage\fR to the Package Tracking System.
+.PP
+This utility is useful if a developer has made an NMU and wants to
+track the package for a limited period of time.
+.SH OPTIONS
+.TP
+\fB\-\-until \fItime\fR, \fB\-u\fR \fItime\fR
+When \fBat\fR(1) should cancel the subscription. \fItime\fR must be
+specified using \fBat\fR's syntax. Default is 'now + 30 days'. This
+option will probably require quoting!
+.TP
+.B \-\-forever
+Don't cancel the subscription automatically. This can also be
+specified as \fB\-\-until forever\fR.
+.TP
+.BR \-\-help ", " \-h
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH "ENVIRONMENT VARIABLES"
+.TP
+.BR DEBEMAIL ", " EMAIL
+If one of these is set (with preference give to \fBDEBEMAIL\fR), then this
+will be used for the subscription address. If neither is set, then
+the email will be sent without a specified subscription address, and
+the email's From: line will be used to determine the sender's
+address. This will be determined by \fBmail\fR(1).
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B PTS_UNTIL
+Setting this is equivalent to giving a \fB\-\-until\fR option.
+.SH "SEE ALSO"
+.BR at (1),
+information about the Package Tracking System in the Developer's
+Reference at
+https://www.debian.org/doc/developers-reference/resources.html#pkg-tracking-system
+.SH AUTHOR
+This program was written by Julian Gilbey <jdg@debian.org> based on a
+public domain prototype by Raphael Hertzog <hertzog@debian.org> and is
+copyright under the GPL, version 2 or later.
diff --git a/scripts/pts-subscribe.sh b/scripts/pts-subscribe.sh
new file mode 100755
index 0000000..b964f4d
--- /dev/null
+++ b/scripts/pts-subscribe.sh
@@ -0,0 +1,176 @@
+#!/bin/bash
+set -e
+
+# Subscribe to the PTS for a specified package for a limited length of time
+
+PROGNAME=${0##*/}
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+
+usage() {
+ echo \
+"Usage: $PROGNAME [options] package
+ Subscribe to the PTS (Package Tracking System) for the specified package
+ for a limited length of time (30 days by default).
+
+ If called as 'pts-unsubscribe', unsubscribe from the PTS for the specified
+ package.
+
+ Options:
+ -u, --until UNTIL
+ When to unsubscribe; this is given as the command-line
+ argument to at (default: 'now + 30 days')
+
+ --until 0, --until forever are synonyms for --forever
+
+ --forever Do not set an at job for unsubscribing
+
+ --no-conf, --noconf
+ Don't read devscripts config files;
+ must be the first option given
+
+ --help Display this help message and exit
+
+ --version Display version information
+
+$MODIFIED_CONF_MSG"
+}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2006 by Julian Gilbey, all rights reserved.
+Original public domain code by Raphael Hertzog.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+ACTION="subscribe"
+if [ "$PROGNAME" = "pts-unsubscribe" ]; then
+ ACTION="unsubscribe"
+fi
+
+# Boilerplate: set config variables
+DEFAULT_PTS_UNTIL='now + 30 days'
+VARS="PTS_UNTIL"
+
+if [ "$1" = "--no-conf" -o "$1" = "--noconf" ]; then
+ shift
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (no configuration files read)"
+
+ # set defaults
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+else
+ # Run in a subshell for protection against accidental errors
+ # in the config files
+ eval $(
+ set +e
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+
+ for file in /etc/devscripts.conf ~/.devscripts
+ do
+ [ -r $file ] && . $file
+ done
+
+ set | grep '^PTS_')
+
+ # check sanity - nothing to do here (at will complain if it's illegal)
+
+ # set config message
+ MODIFIED_CONF=''
+ for var in $VARS; do
+ eval "if [ \"\$$var\" != \"\$DEFAULT_$var\" ]; then
+ MODIFIED_CONF_MSG=\"\$MODIFIED_CONF_MSG
+ $var=\$$var\";
+ MODIFIED_CONF=yes;
+ fi"
+ done
+
+ if [ -z "$MODIFIED_CONF" ]; then
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (none)"
+ fi
+fi
+
+# Will bomb out if there are unrecognised options
+TEMP=$(getopt -s bash -o "u:" \
+ --long until:,forever \
+ --long no-conf,noconf \
+ --long help,version -n "$PROGNAME" -- "$@") || (usage >&2; exit 1)
+
+eval set -- $TEMP
+
+# Process Parameters
+while [ "$1" ]; do
+ case $1 in
+ --until|-u)
+ shift
+ PTS_UNTIL="$1"
+ ;;
+ --forever)
+ PTS_UNTIL="forever" ;;
+ --no-conf|--noconf)
+ echo "$PROGNAME: $1 is only acceptable as the first command-line option!" >&2
+ exit 1 ;;
+ --help) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+ --) shift; break ;;
+ *) echo "$PROGNAME: bug in option parser, sorry!" >&2 ; exit 1 ;;
+ esac
+ shift
+done
+
+# Still going?
+if [ $# -ne 1 ]; then
+ echo "$PROGNAME takes precisely one non-option argument: the package name;" >&2
+ echo "try $PROGNAME --help for usage information" >&2
+ exit 1
+fi
+
+# Check for a "mail" command
+if ! command -v mail > /dev/null; then
+ echo "$PROGNAME: Could not find the \"mail\" command; you must have the" >&2
+ echo "bsd-mailx or mailutils package installed to run this script." >&2
+ exit 1
+fi
+
+pkg=$1
+
+if [ -z "$DEBEMAIL" ]; then
+ if [ -z "$EMAIL" ]; then
+ echo "$PROGNAME warning: \$DEBEMAIL is not set; attempting to $ACTION anyway" >&2
+ else
+ echo "$PROGNAME warning: \$DEBEMAIL is not set; using \$EMAIL instead" >&2
+ DEBEMAIL=$EMAIL
+ fi
+fi
+DEBEMAIL=$(echo $DEBEMAIL | sed -s 's/^.*[ ]<\(.*\)>.*/\1/')
+
+if [ "$ACTION" = "unsubscribe" ]; then
+ echo "$ACTION $pkg $DEBEMAIL" | mail pts@qa.debian.org
+else
+ # Check for an "at" command
+ if [ "$PTS_UNTIL" != forever -a "$PTS_UNTIL" != 0 ]; then
+ if ! command -v at > /dev/null; then
+ echo "$PROGNAME: Could not find the \"at\" command; you must have the" >&2
+ echo "\"at\" package installed to run this script." >&2
+ exit 1
+ fi
+
+ cd /
+ TEMPFILE=$(mktemp --tmpdir pts-subscribe.tmp.XXXXXXXXXX) || { echo "$PROGNAME: Couldn't create tempfile!" >&2; exit 1; }
+ trap 'rm -f "$TEMPFILE"' EXIT
+ echo "echo 'unsubscribe $pkg $DEBEMAIL' | mail pts@qa.debian.org" | \
+ at $PTS_UNTIL 2>$TEMPFILE
+ grep '^job ' $TEMPFILE | sed -e 's/^/Unsubscription will be sent by "at" as /'
+ else
+ echo "No unsubscription request will be sent"
+ fi
+
+ echo "$ACTION $pkg $DEBEMAIL" | mail pts@qa.debian.org
+fi
diff --git a/scripts/pyproject.toml b/scripts/pyproject.toml
new file mode 100644
index 0000000..963b009
--- /dev/null
+++ b/scripts/pyproject.toml
@@ -0,0 +1,6 @@
+[tool.black]
+line-length = 88
+
+[tool.isort]
+line_length = 88
+profile = "black"
diff --git a/scripts/rc-alert.1 b/scripts/rc-alert.1
new file mode 100644
index 0000000..8250aaa
--- /dev/null
+++ b/scripts/rc-alert.1
@@ -0,0 +1,129 @@
+.TH RC-ALERT 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+rc-alert \- check for installed packages with release-critical bugs
+.SH SYNOPSIS
+\fBrc\-alert\fR [\fIinclusion options\fR] [\fB\-\-debtags\fR [\fItag\fR[\fB,\fItag\fR ...]]] [\fB\-\-popcon\fR] [\fIpackage\fR ...]
+.br
+\fBrc\-alert \-\-help\fR|\fB\-\-version\fR
+.SH DESCRIPTION
+\fBrc\-alert\fR downloads the list of release-critical bugs from the
+Debian BTS webpages, and then outputs a list of packages installed on
+the system, or given on the command-line, which are in that list.
+.P
+If the directory \fI$XDG_CACHE_HOME/devscripts/rc-alert\fP exists or the
+\fB\-\-cache\fP option is given, then the (sizable) downloaded list
+will be cached, and will only be downloaded again on a second
+invocation if it has changed.
+.SH OPTIONS
+.TP
+.BR \-\-cache
+Force the creation of the \fI$XDG_CACHE_HOME/devscripts/rc-alert\fP cache directory.
+.TP
+.BR \-\-help ", " \-h
+Show a summary of options.
+.TP
+.BR \-\-version ", " \-v
+Show version and copyright information.
+.P
+It is also possible to filter the list of bugs reported based on the
+tags and distributions associated with the package. The filtering options
+are:
+.TP
+.BR \-\-include\-tags ", " \-f
+A list of tags which the bug must have, in the format used for output.
+For example, to include bugs tagged security or help wanted, use "SH".
+.TP
+.BR \-\-include\-tag\-op ", " \-t
+If set to \fIand\fP, a bug must have all of the tags specified by
+\fB\-\-include\-tags\fP.
+.TP
+.BR \-\-exclude\-tags
+A list of tags which the bug must not have, in the same format as
+\fB\-\-include\-tags\fP.
+.TP
+.BR \-\-exclude\-tag\-op
+If set to \fIand\fP, a bug must have none of the tags specified by
+\fB\-\-exclude\-tags\fP. By default, the bug will be excluded if any tag
+matches.
+.TP
+.BR \-\-include\-dists ", " \-d
+A list of distributions which the bug must apply to, in the format used for
+output. For example, to include bugs affecting testing or unstable, use "TU".
+.TP
+.BR \-\-include\-dist\-op ", " \-o
+If set to \fIand\fP, a bug must apply to all of the specified distributions in
+order to be included.
+.TP
+.BR \-\-exclude\-dists
+A list of distributions to which the bug must not apply, in the same format as
+\fB\-\-include\-dists\fP.
+.TP
+.BR \-\-exclude\-dist\-op
+If set to \fIand\fP, a bug must apply to all of the specified distributions
+in order to be excluded. By default the bug will be excluded if it applies
+to any of the listed distributions.
+.P
+It is also possible to only list bugs which have specific debtags set. Note
+that you need to have debtags installed and also that it's not mandatory for
+maintainers to set proper debtags. The produced list will thus probably be
+incomplete.
+.TP
+.BR \-\-debtags
+Match packages based on the listed tags. Each package is matched only if it has
+all the listed tags; in the case of multiple tags within the same facet, a
+package is matched if it has any of the listed tags within the facet.
+.TP
+.BR \-\-debtags\-database
+Use a non-standard debtags database. The default is
+\fI/var/lib/debtags/packages-tags\fP.
+.P
+Popularity-contest collects data about installation and usage of Debian
+packages. You can additionally sort the bugs by the popcon rank of the related
+packages.
+.TP
+.BR \-\-popcon
+Sort bugs by the popcon rank of the package the bug belongs to.
+.TP
+.BR \-\-pc\-vote
+By default, packages are sorted according to the number of people who have the
+package installed. This option enables sorting by the number of people
+regularly using the package instead. This option has no effect in combination
+with \-\-pc\-local.
+.TP
+.BR \-\-pc\-local
+Instead of requesting remote data the information from the last popcon run is
+used (\fI/var/log/popularity-contest\fP).
+.SH EXAMPLES
+.TP
+.BR \-\-include\-dists " OS"
+The bug must apply to at least one of oldstable or stable
+.TP
+.BR \-\-include\-dists " TU" " \-\-include\-dist\-op" " and"
+The bug must apply to both testing and unstable
+.TP
+.BR \-\-include\-dists " O" " \-\-include\-tags" " S" " \-\-exclude\-tags" " +"
+The bug must apply to oldstable and be tagged security but not patch
+.TP
+.BR \-\-exclude\-dists " SOT" " \-\-include\-tags" " R"
+The bug must apply to only unstable or experimental (or both) and be tagged
+unreproducible
+.TP
+.BR \-\-debtags " implemented-in::perl,role::plugin,implemented-in::python"
+The bug must apply to packages matching the specified debtags, i.e. the match
+will only include packages that have the 'role::plugin' tag and that have
+either of the tags 'implemented-in::perl' or 'implemented-in::python'.
+.TP
+.BR \-\-popcon " "\-\-pc\-local
+Read \fI/var/log/popularity-contest\fP and sort bugs by your personal popcon ranking
+(which is basically the atime of your packages' binaries).
+.SH BUGS
+It is not possible to say "does not apply only to unstable"
+.SH SEE ALSO
+.BR debtags(1)
+.BR popbugs(1)
+.BR popularity-contest(8)
+.SH AUTHOR
+\fBrc-alert\fR was written by Anthony DeRobertis and modified by
+Julian Gilbey <jdg@debian.org> and Adam D. Barratt <adam@adam-barratt.org.uk>
+for the devscripts package. Debtags and popcon functionality was added by Jan
+Hauke Rahm <info@jhr-online.de>.
diff --git a/scripts/rc-alert.pl b/scripts/rc-alert.pl
new file mode 100755
index 0000000..7f3243d
--- /dev/null
+++ b/scripts/rc-alert.pl
@@ -0,0 +1,501 @@
+#!/usr/bin/perl
+
+# rc-alert - find RC bugs for programs on your system
+# Copyright (C) 2003 Anthony DeRobertis
+# Modifications Copyright 2003 Julian Gilbey <jdg@debian.org>
+# Modifications Copyright 2008 Adam D. Barratt <adam@adam-barratt.org.uk>
+# Modifications copyright 2009 by Jan Hauke Rahm <info@jhr-online.de>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+use Devscripts::Packages;
+use File::Basename;
+use File::Copy qw(move);
+use File::HomeDir;
+use File::Path qw(make_path);
+use File::Spec;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+
+sub remove_duplicate_values($);
+sub store_if_relevant(%);
+sub human_flags($);
+sub unhtmlsanit($);
+sub dt_parse_request($);
+
+$ENV{HOME} = File::HomeDir->my_home;
+my $cachedir
+ = $ENV{XDG_CACHE_HOME} || File::Spec->catdir($ENV{HOME}, '.cache');
+$cachedir = File::Spec->catdir($cachedir, 'devscripts', 'rc-alert');
+
+my $url = "http://bugs.debian.org/release-critical/other/all.html";
+my $cachefile = File::Spec->catfile($cachedir, basename($url));
+my $forcecache = 0;
+my $usecache = 0;
+
+my @flags = (
+ [qr/P/ => 'pending'],
+ [qr/\+/ => 'patch'],
+ [qr/H/ => 'help [wanted]'],
+ [qr/M/ => 'moreinfo [needed]'],
+ [qr/R/ => 'unreproducible'],
+ [qr/S/ => 'security'],
+ [qr/U/ => 'upstream'],
+);
+# A little hacky but allows us to sort the list by length
+my @dists = (
+ [qr/O/ => 'oldstable'],
+ [qr/S/ => 'stable'],
+ [qr/T/ => 'testing'],
+ [qr/U/ => 'unstable'],
+ [qr/E/ => 'experimental'],
+);
+
+my $includetags = "";
+my $excludetags = "";
+
+my $includedists = "";
+my $excludedists = "";
+
+my $tagincoperation = "or";
+my $tagexcoperation = "or";
+my $distincoperation = "or";
+my $distexcoperation = "or";
+
+my $popcon = 0;
+my $popcon_by_vote = 0;
+my $popcon_local = 0;
+
+my $debtags = '';
+my $debtags_db = '/var/lib/debtags/package-tags';
+
+my $progname = basename($0);
+
+my $usage = <<"EOF";
+Usage: $progname [--help|--version|--cache] [package ...]
+ List all installed packages (or listed packages) with
+ release-critical bugs, as determined from the Debian
+ release-critical bugs list.
+
+ Options:
+ --cache Create ~/.devscripts_cache directory if it does not exist
+
+ Matching options: (see the manpage for further information)
+ --include-tags Set of tags to include
+ --include-tag-op Must all tags match for inclusion?
+ --exclude-tags Set of tags to exclude
+ --exclude-tag-op Must all tags match for exclusion?
+ --include-dists Set of distributions to include
+ --include-dist-op Must all distributions be matched for inclusion?
+ --exclude-dists Set of distributions to exclude
+ --exclude-dist-op Must all distributions be matched for exclusion?
+
+ Debtags options: (only list packages with matching debtags)
+ --debtags Comma separated list of tags
+ (e.g. implemented-in::perl,role::plugin)
+ --debtags-database Database file (default: /var/lib/debtags/package-tags)
+
+ Popcon options:
+ --popcon Sort bugs by package's popcon rank
+ --pc-vote Sort by_vote instead of by_inst
+ (see popularity-contest(8))
+ --pc-local Use local popcon data from last popcon run
+ (/var/log/popularity-contest)
+EOF
+
+my $version = <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2003 by Anthony DeRobertis
+Modifications copyright 2003 by Julian Gilbey <jdg\@debian.org>
+Modifications copyright 2008 by Adam D. Barratt <adam\@adam-barratt.org.uk>
+Modifications copyright 2009 by Jan Hauke Rahm <info\@jhr-online.de>
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2, or (at your option) any later version.
+EOF
+
+##
+## handle command-line options
+##
+
+my ($opt_help, $opt_version);
+GetOptions(
+ "help|h" => \$opt_help,
+ "version|v" => \$opt_version,
+ "cache" => \$forcecache,
+ "include-tags|f=s" => \$includetags,
+ "exclude-tags=s" => \$excludetags,
+ "include-tag-op|t=s" => \$tagincoperation,
+ "exclude-tag-op=s" => \$tagexcoperation,
+ "include-dists|d=s" => \$includedists,
+ "exclude-dists=s" => \$excludedists,
+ "include-dist-op|o=s" => \$distincoperation,
+ "exclude-dist-op=s" => \$distexcoperation,
+ "debtags=s" => \$debtags,
+ "debtags-database=s" => \$debtags_db,
+ "popcon" => \$popcon,
+ "pc-vote" => \$popcon_by_vote,
+ "pc-local" => \$popcon_local,
+) or do { print $usage; exit 1; };
+
+if ($opt_help) { print $usage; exit 0; }
+if ($opt_version) { print $version; exit 0; }
+
+$tagincoperation =~ /^(or|and)$/ or $tagincoperation = 'or';
+$distincoperation =~ /^(or|and)$/ or $distincoperation = 'or';
+$tagexcoperation =~ /^(or|and)$/ or $tagexcoperation = 'or';
+$distexcoperation =~ /^(or|and)$/ or $distexcoperation = 'or';
+$includetags =~ s/[^P+HMRSUI]//gi;
+$excludetags =~ s/[^P+HMRSUI]//gi;
+$includedists =~ s/[^OSTUE]//gi;
+$excludedists =~ s/[^OSTUE]//gi;
+$includetags = remove_duplicate_values(uc($includetags));
+$excludetags = remove_duplicate_values(uc($excludetags));
+$includedists = remove_duplicate_values(uc($includedists));
+$excludedists = remove_duplicate_values(uc($excludedists));
+
+## First download the RC bugs page
+
+my $curl_or_wget;
+my $getcommand;
+if (system("command -v wget >/dev/null 2>&1") == 0) {
+ $curl_or_wget = "wget";
+ $getcommand = "wget -q -O -";
+} elsif (system("command -v curl >/dev/null 2>&1") == 0) {
+ $curl_or_wget = "curl";
+ $getcommand = "curl -qfsL";
+} else {
+ die
+"$progname: this program requires either the wget or curl package to be installed\n";
+}
+
+if (!-d $cachedir) {
+ if ($forcecache) {
+ make_path($cachedir);
+ }
+}
+
+my $usingcache = 0;
+if (-d $cachedir) {
+ chdir $cachedir or die "$progname: can't cd $cachedir: $!\n";
+
+ if ("$curl_or_wget" eq "wget") {
+ # Either use the cached version because the remote hasn't been
+ # updated (-N) or download a complete new copy (--no-continue)
+ if (system('wget', '-qN', '--no-continue', $url) != 0) {
+ die "$progname: wget failed!\n";
+ }
+ } elsif ("$curl_or_wget" eq "curl") {
+ if (system('curl', '-qfsLR', $url) != 0) {
+ die "$progname: curl failed!\n";
+ }
+ } else {
+ die "$progname: Unknown download program $curl_or_wget!\n";
+ }
+ open BUGS, $cachefile or die "$progname: could not read $cachefile: $!\n";
+ $usingcache = 1;
+} else {
+ open BUGS, "$getcommand $url |"
+ or die "$progname: could not run $curl_or_wget: $!\n";
+}
+
+## Get list of installed packages (not source packages)
+my $package_list;
+if (@ARGV) {
+ my %tmp = map { $_ => 1 } @ARGV;
+ $package_list = \%tmp;
+} else {
+ $package_list = InstalledPackages(1);
+}
+
+## Get popcon information
+my %popcon;
+if ($popcon) {
+ my $pc_by = $popcon_by_vote ? 'vote' : 'inst';
+
+ my $pc_regex;
+ if ($popcon_local) {
+ open POPCON, "/var/log/popularity-contest"
+ or die "$progname: Unable to access popcon data: $!";
+ $pc_regex = '(\d+)\s\d+\s(\S+)';
+ } else {
+ open POPCON,
+ "$getcommand http://popcon.debian.org/by_$pc_by.gz | gunzip -c |"
+ or die "$progname: Not able to receive remote popcon data!";
+ $pc_regex = '(\d+)\s+(\S+)\s+(\d+\s+){5}\(.*\)';
+ }
+
+ while (<POPCON>) {
+ next unless /$pc_regex/;
+ # rank $1 for package $2
+ if ($popcon_local) {
+ # negative for inverse sorting of atimes
+ $popcon{$2} = "-$1";
+ } else {
+ $popcon{$2} = $1;
+ }
+ }
+ close POPCON;
+}
+
+## Get debtags info
+my %dt_pkg;
+my @dt_requests;
+if ($debtags) {
+ ## read debtags database to %dt_pkg
+ open DEBTAGS, $debtags_db
+ or die "$progname: could not read debtags database: $!\n";
+ while (<DEBTAGS>) {
+ next unless /^(.+?)(?::?\s*|:\s+(.+?)\s*)$/;
+ $dt_pkg{$1} = $2;
+ }
+ close DEBTAGS;
+
+ ## and parse the request string
+ @dt_requests = dt_parse_request($debtags);
+}
+
+## Read the list of bugs
+
+my $found_bugs_start;
+my ($current_package, $comment);
+
+my $html;
+{
+ local $/;
+ $html = <BUGS>;
+}
+
+my ($ignore) = $html =~ m%<strong>I</strong>: ([^<]*)%;
+push(@flags, [qr/I/ => $ignore]);
+
+my @stanzas = $html =~ m%<div class="package">(.*?)</div>%gs;
+my %pkg_store;
+foreach my $stanza (@stanzas) {
+ if ($stanza
+ =~ m%<a name="([^\"]+)"><strong>Package:</strong></a> <a href="[^\"]+">%i
+ ) {
+ $current_package = $1;
+ $comment = '';
+ while ($stanza
+ =~ m%<a name="(\d+)"></a>\s*<a href="[^\"]+">\d+</a> (\[[^\]]+\])( \[[^\]]+\])? ([^<]+)%igc
+ ) {
+ my ($num, $tags, $dists, $name) = ($1, $2, $3, $4);
+ chomp $name;
+ store_if_relevant(
+ pkg => $current_package,
+ num => $num,
+ tags => $tags,
+ dists => $dists,
+ name => $name,
+ comment => $comment
+ );
+ }
+ }
+}
+for (sort { $a <=> $b } keys %pkg_store) {
+ print $pkg_store{$_};
+}
+
+if ($usingcache) {
+ close BUGS or die "$progname: could not close $cachefile: $!\n";
+} else {
+ close BUGS
+ or die $!
+ ? "$progname: could not close $curl_or_wget pipe: $!\n"
+ : "$progname: exit status from $curl_or_wget: $?\n";
+}
+
+exit 0;
+
+sub remove_duplicate_values($) {
+ my $in = shift || "";
+
+ $in = join("", sort { $a cmp $b } split //, $in);
+
+ $in =~ s/(.)\1/$1/g while $in =~ /(.)\1/;
+
+ return $in;
+}
+
+sub store_if_relevant(%) {
+ my %args = @_;
+
+ my $pkgname = $args{pkg};
+ $args{pkg} =~ s/^src://;
+
+ if ( exists($package_list->{ $args{pkg} })
+ || exists($package_list->{$pkgname})) {
+ # potentially relevant
+ my ($flags, $flagsapply) = human_flags($args{tags});
+ my $distsapply = 1;
+ my $dists;
+ ($dists, $distsapply) = human_dists($args{dists})
+ if defined $args{dists};
+
+ return unless $flagsapply and $distsapply;
+
+ foreach (@dt_requests) {
+ ## the array should be empty if nothing requested
+ return
+ unless ($dt_pkg{ $args{pkg} }
+ and $dt_pkg{ $args{pkg} } =~ /(\A|,\s*)$_(,|\z)/);
+ }
+
+ # yep, relevant
+ my $bug_string
+ = "Package: $pkgname\n"
+ . $comment
+ . # non-empty comments always contain the trailing \n
+ "Bug: $args{num}\n"
+ . "Bug-URL: https://bugs.debian.org/$args{num}\n"
+ . "Title: "
+ . unhtmlsanit($args{name}) . "\n"
+ . "Flags: "
+ . $flags . "\n"
+ . (defined $args{dists} ? "Dists: " . $dists . "\n" : "")
+ . (
+ defined $dt_pkg{ $args{pkg} }
+ ? "Debtags: " . $dt_pkg{ $args{pkg} } . "\n"
+ : ""
+ );
+
+ unless ($popcon_local) {
+ $bug_string .= (
+ defined $popcon{ $args{pkg} }
+ ? "Popcon rank: " . $popcon{ $args{pkg} } . "\n"
+ : ""
+ );
+ }
+ $bug_string .= "\n";
+
+ if ($popcon) {
+ return unless $bug_string;
+ my $index
+ = $popcon{ $args{pkg} } ? $popcon{ $args{pkg} } : 9999999;
+ $pkg_store{$index} .= $bug_string;
+ } else {
+ $pkg_store{1} .= $bug_string;
+ }
+ }
+}
+
+sub human_flags($) {
+ my $mrf = shift; # machine readable flags, for those of you wondering
+ my @hrf = (); # considering above, should be obvious
+ my $matchedflags = 0;
+ my $matchedexcludes = 0;
+ my $applies = 1;
+
+ foreach my $flagref (@flags) {
+ my ($flag, $desc) = @{$flagref};
+ if ($mrf =~ $flag) {
+ if ($excludetags =~ $flag) {
+ $matchedexcludes++;
+ } elsif ($includetags =~ $flag or !$includetags) {
+ $matchedflags++;
+ }
+ push @hrf, $desc;
+ }
+ }
+ if ( $excludetags
+ and $tagexcoperation eq 'and'
+ and (length $excludetags == $matchedexcludes)) {
+ $applies = 0;
+ } elsif ($matchedexcludes and $tagexcoperation eq 'or') {
+ $applies = 0;
+ } elsif ($includetags and !$matchedflags) {
+ $applies = 0;
+ } elsif ($includetags
+ and $tagincoperation eq 'and'
+ and (length $includetags != $matchedflags)) {
+ $applies = 0;
+ }
+
+ if (@hrf) {
+ return ("$mrf (" . join(", ", @hrf) . ')', $applies);
+ } else {
+ return ("$mrf (none)", $applies);
+ }
+}
+
+sub human_dists($) {
+ my $mrf = shift; # machine readable flags, for those of you wondering
+ my @hrf = (); # considering above, should be obvious
+ my $matcheddists = 0;
+ my $matchedexcludes = 0;
+ my $applies = 1;
+
+ foreach my $distref (@dists) {
+ my ($dist, $desc) = @{$distref};
+ if ($mrf =~ $dist) {
+ if ($excludedists =~ $dist) {
+ $matchedexcludes++;
+ } elsif ($includedists =~ $dist or !$includedists) {
+ $matcheddists++;
+ }
+ push @hrf, $desc;
+ }
+ }
+ if ( $excludedists
+ and $distexcoperation eq 'and'
+ and (length $excludedists == $matchedexcludes)) {
+ $applies = 0;
+ } elsif ($matchedexcludes and $distexcoperation eq 'or') {
+ $applies = 0;
+ } elsif ($includedists and !$matcheddists) {
+ $applies = 0;
+ } elsif ($includedists
+ and $distincoperation eq 'and'
+ and (length $includedists != $matcheddists)) {
+ $applies = 0;
+ }
+
+ if (@hrf) {
+ return ("$mrf (" . join(", ", @hrf) . ')', $applies);
+ } else {
+ return ('', $applies);
+ }
+}
+
+# Reverse of master.debian.org:/srv/bugs.debian.org/cgi-bin/common.pl
+sub unhtmlsanit ($) {
+ my %saniarray = ('lt', '<', 'gt', '>', 'amp', '&', 'quot', '"');
+ my $in = $_[0];
+ $in =~ s/&(lt|gt|amp|quot);/$saniarray{$1}/g;
+ return $in;
+}
+
+sub dt_parse_request($) {
+ my %dt_lookup;
+ foreach (split /,/, $_[0]) {
+ my ($d_key, $d_val) = split '::', $_;
+ die
+"$progname: A debtag must be of the form 'key::value'. See debtags(1) for details!"
+ unless ($d_key and $d_val);
+ if ($dt_lookup{$d_key}) {
+ $dt_lookup{$d_key} = "$dt_lookup{$d_key}|$d_val";
+ } else {
+ $dt_lookup{$d_key} = quotemeta($d_val);
+ }
+ }
+
+ my @out;
+ while (my ($dk, $dv) = each %dt_lookup) {
+ $dv = "($dv)" if ($dv =~ /\|/);
+ push @out, $dk . "::" . $dv;
+ }
+ return @out;
+}
diff --git a/scripts/reproducible-check b/scripts/reproducible-check
new file mode 100755
index 0000000..498507d
--- /dev/null
+++ b/scripts/reproducible-check
@@ -0,0 +1,266 @@
+#!/usr/bin/env python3
+#
+# Copyright © 2017, 2020 Chris Lamb <lamby@debian.org>
+#
+# 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/>.
+
+# pylint: disable=invalid-name
+# pylint: enable=invalid-name
+
+import argparse
+import bz2
+import collections
+import json
+import logging
+import os
+import re
+import subprocess
+import sys
+import time
+
+import apt
+import requests
+
+try:
+ from xdg.BaseDirectory import xdg_cache_home
+except ImportError:
+ print("This script requires the xdg python3 module.", file=sys.stderr)
+ print(
+ "Please install the python3-xdg Debian package in order to use this utility.",
+ file=sys.stderr,
+ )
+ sys.exit(1)
+
+
+class ReproducibleCheck:
+ HELP = """
+ Reports on the reproducible status of installed packages.
+ For more details please see <https://reproducible-builds.org>.
+ """
+
+ NAME = os.path.basename(__file__)
+ VERSION = 1
+
+ STATUS_URL = "https://tests.reproducible-builds.org/debian/reproducible.json.bz2"
+
+ CACHE = os.path.join(xdg_cache_home, NAME, os.path.basename(STATUS_URL))
+ CACHE_AGE_SECONDS = 86400
+
+ @classmethod
+ def parse(cls):
+ parser = argparse.ArgumentParser(description=cls.HELP)
+
+ parser.add_argument(
+ "-d",
+ "--debug",
+ help="show debugging messages",
+ default=False,
+ action="store_true",
+ )
+
+ parser.add_argument(
+ "-r",
+ "--raw",
+ help="print unreproducible binary packages only (for dd-list -i)",
+ default=False,
+ action="store_true",
+ )
+
+ parser.add_argument(
+ "--version",
+ help="print version and exit",
+ default=False,
+ action="store_true",
+ )
+
+ return cls(parser.parse_args())
+
+ def __init__(self, args):
+ self.args = args
+
+ logging.basicConfig(
+ format="%(asctime).19s %(levelname).1s: %(message)s",
+ level=logging.DEBUG if args.debug else logging.INFO,
+ )
+
+ self.log = logging.getLogger()
+
+ def main(self):
+ if self.args.version:
+ print(f"{self.NAME} version {self.VERSION}")
+ return 0
+
+ if self.get_distributor_id() != "Debian":
+ self.log.error("Refusing to return results for non-Debian distributions")
+ return 2
+
+ self.update_cache()
+
+ installed = self.get_installed_packages()
+ reproducible = self.get_reproducible_packages()
+
+ if self.args.raw:
+ self.output_raw(installed, reproducible)
+ else:
+ self.output_by_source(installed, reproducible)
+
+ self.log.info(
+ "These results are based on data from the Reproducible Builds "
+ "CI framework, showing only the theoretical (and "
+ "unofficial) reproducibility of these Debian packages."
+ )
+
+ return 0
+
+ def get_distributor_id(self):
+ try:
+ distribution_id = (
+ subprocess.check_output(("lsb_release", "-is")).decode("utf-8").strip()
+ )
+ except subprocess.CalledProcessError:
+ distribution_id = ""
+
+ self.log.debug("Detected distribution %s", distribution_id or "(unknown)")
+
+ return distribution_id
+
+ def update_cache(self):
+ self.log.debug("Checking cache file %s ...", self.CACHE)
+
+ try:
+ if os.path.getmtime(self.CACHE) >= time.time() - self.CACHE_AGE_SECONDS:
+ self.log.debug("Cache is up to date")
+ return
+ except OSError:
+ pass
+
+ new_cache = f"{self.CACHE}.new"
+ self.log.info("Updating cache to %s...", new_cache)
+
+ response = requests.get(self.STATUS_URL, timeout=60)
+
+ os.makedirs(os.path.dirname(self.CACHE), exist_ok=True)
+
+ with open(new_cache, "wb") as f:
+ for content in response.iter_content(chunk_size=2**16):
+ f.write(content)
+
+ os.rename(new_cache, self.CACHE)
+
+ def get_reproducible_packages(self):
+ """
+ Return (source, architecture, version) triplets for reproducible source
+ packages.
+ """
+
+ self.log.debug("Loading data from cache %s", self.CACHE)
+
+ data = set()
+ source_packages = set()
+
+ with bz2.open(self.CACHE) as f:
+ all_packages = json.loads(f.read().decode("utf-8"))
+
+ for pkg in all_packages:
+ if pkg["status"] != "reproducible":
+ continue
+
+ data.add((pkg["package"], pkg["architecture"], pkg["version"]))
+
+ source_packages.add(pkg["package"])
+
+ self.log.debug("Parsed data about %d source packages", len(source_packages))
+
+ return data
+
+ def get_installed_packages(self):
+ """
+ Return (binary_package, architecture, version) triplets, mapped to
+ their corresponding source package.
+ """
+
+ result = {}
+ for pkg in apt.Cache():
+ for pkg_ver in pkg.versions:
+ if not pkg_ver.is_installed:
+ continue
+
+ # We may have installed a binNMU version locally so we need to
+ # strip these off when looking up against the JSON of results.
+ version = re.sub(r"\+b\d+$", "", pkg_ver.version)
+
+ result[
+ (pkg.shortname, pkg_ver.architecture, version)
+ ] = pkg_ver.source_name
+
+ self.log.debug("Parsed %d installed binary packages", len(result))
+
+ return result
+
+ def iter_installed_unreproducible(self, installed, reproducible):
+ # "Architecture: all" binary packages should pretend to the system's
+ # default architecture for lookup purposes.
+ default_architecture = apt.apt_pkg.config.find("APT::Architecture")
+ self.log.debug("Using %s as our 'Architecture: all' lookup")
+
+ for (binary, architecture, version), source in sorted(installed.items()):
+ if architecture == "all":
+ architecture = default_architecture
+
+ lookup_key = (source, architecture, version)
+
+ if lookup_key not in reproducible:
+ yield binary, source, version
+
+ def output_by_source(self, installed, reproducible):
+ by_source = collections.defaultdict(set)
+
+ num_unreproducible = 0
+ for binary, source, version in self.iter_installed_unreproducible(
+ installed, reproducible
+ ):
+ by_source[(source, version)].add(binary)
+ num_unreproducible += 1
+
+ for (source, version), binaries in sorted(by_source.items()):
+ # Calculate some clarifying suffixes/prefixes
+ src = ""
+ pkgs = ""
+ if binaries != {source}:
+ src = "src:"
+ pkgs = f" ({', '.join(binaries)})"
+
+ print(
+ f"{src}{source} ({version}){pkgs} is not reproducible "
+ f"<https://tests.reproducible-builds.org/debian/{source}>"
+ )
+
+ num_installed = len(installed)
+ num_reproducible = len(installed) - num_unreproducible
+ percent = 100.0 * num_reproducible / num_installed
+ print(
+ f"{num_unreproducible}/{num_installed} ({percent:.2f}%) of "
+ f"installed binary packages are reproducible."
+ )
+
+ def output_raw(self, installed, reproducible):
+ for binary, _, _ in self.iter_installed_unreproducible(installed, reproducible):
+ print(binary)
+
+
+if __name__ == "__main__":
+ try:
+ sys.exit(ReproducibleCheck.parse().main())
+ except (KeyboardInterrupt, BrokenPipeError):
+ sys.exit(1)
diff --git a/scripts/rmadison.pl b/scripts/rmadison.pl
new file mode 100755
index 0000000..e60aead
--- /dev/null
+++ b/scripts/rmadison.pl
@@ -0,0 +1,414 @@
+#!/usr/bin/perl
+# vim: set ai shiftwidth=4 tabstop=4 expandtab:
+
+# Copyright (C) 2006-2013 Christoph Berg <myon@debian.org>
+# (C) 2010 Uli Martens <uli@youam.net>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+use strict;
+use warnings;
+use File::Basename;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+
+BEGIN {
+ pop @INC if $INC[-1] eq '.';
+ # Load the URI::Escape module safely
+ eval { require URI::Escape; };
+ if ($@) {
+ my $progname = basename $0;
+ if ($@ =~ /^Can\'t locate URI\/Escape\.pm/) {
+ die
+"$progname: you must have the liburi-perl package installed\nto use this script\n";
+ }
+ die
+"$progname: problem loading the URI::Escape module:\n $@\nHave you installed the liburi-perl package?\n";
+ }
+ import URI::Escape;
+}
+
+my $VERSION = '0.4';
+
+sub version($) {
+ my ($fd) = @_;
+ print $fd <<EOT;
+rmadison $VERSION (devscripts ###VERSION###)
+(C) 2006-2010 Christoph Berg <myon\@debian.org>
+(C) 2010 Uli Martens <uli\@youam.net>
+EOT
+}
+
+my %url_map = (
+ 'debian' => "https://api.ftp-master.debian.org/madison",
+ 'new' => "https://api.ftp-master.debian.org/madison?s=new",
+ 'qa' => "https://qa.debian.org/madison.php",
+ 'ubuntu' => "https://people.canonical.com/~ubuntu-archive/madison.cgi",
+ 'udd' => 'https://qa.debian.org/cgi-bin/madison.cgi',
+ 'archive' => 'https://qa.debian.org/cgi-bin/madison.cgi?table=archived',
+ 'ports' => 'https://qa.debian.org/cgi-bin/madison.cgi?table=ports',
+ 'janitor' => 'https://janitor.debian.net/api/madison',
+);
+my $default_url = 'debian';
+if (system('dpkg-vendor', '--is', 'ubuntu') == 0) {
+ $default_url = 'ubuntu';
+}
+
+sub usage($$) {
+ my ($fd, $exit) = @_;
+ my @urls = split /,/, $default_url;
+ my $url
+ = (@urls > 1)
+ ? join(', and ', join(', ', @urls[0 .. $#urls - 1]), $urls[-1])
+ : $urls[0];
+
+ print $fd <<EOT;
+Usage: rmadison [OPTION] PACKAGE[...]
+Display information about PACKAGE(s).
+
+ -a, --architecture=ARCH only show info for ARCH(s)
+ -b, --binary-type=TYPE only show info for binary TYPE
+ -c, --component=COMPONENT only show info for COMPONENT(s)
+ -g, --greaterorequal show buildd 'dep-wait pkg >= {highest version}' info
+ -G, --greaterthan show buildd 'dep-wait pkg >> {highest version}' info
+ -h, --help show this help and exit
+ -r, --regex treat PACKAGE as a regex [not supported everywhere]
+ -s, --suite=SUITE only show info for this suite
+ -S, --source-and-binary show info for the binary children of source pkgs
+ -t, --time show projectb snapshot date
+ -u, --url=URL use URL instead of $url
+
+ --noconf, --no-conf don\'t read devscripts configuration files
+
+ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g.
+ --architecture=amd64,i386
+
+Aliases for URLs:
+EOT
+ foreach my $alias (sort keys %url_map) {
+ print $fd "\t$alias\t$url_map{$alias}\n";
+ }
+ exit $exit;
+}
+
+my $params;
+my $default_arch;
+my $ssl_ca_file;
+my $ssl_ca_path;
+
+if (@ARGV and $ARGV[0] =~ /^--no-?conf$/) {
+ shift;
+} else {
+ # We don't have any predefined variables, but allow any of the form
+ # RMADISON_URL_MAP_SHORTCODE=URL
+ my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+ my @config_vars = ();
+
+ my $shell_cmd;
+ # Set defaults
+ $shell_cmd .= qq[unset `set | grep "^RMADISON_" | cut -d= -f1`;\n];
+ $shell_cmd .= 'for file in ' . join(" ", @config_files) . "; do\n";
+ $shell_cmd .= '[ -f $file ] && . $file; done;' . "\n";
+ $shell_cmd .= 'for var in `set | grep "^RMADISON_" | cut -d= -f1`; do ';
+ $shell_cmd .= 'eval echo $var=\$$var; done;' . "\n";
+ # Read back values
+ my $shell_out = `/bin/bash -c '$shell_cmd'`;
+ @config_vars = split /\n/, $shell_out, -1;
+
+ foreach my $confvar (@config_vars) {
+ if ($confvar =~ /^RMADISON_URL_MAP_([^=]*)=(.*)$/) {
+ $url_map{ lc($1) } = $2;
+ } elsif ($confvar =~ /^RMADISON_DEFAULT_URL=(.*)$/) {
+ $default_url = $1;
+ } elsif ($confvar =~ /^RMADISON_ARCHITECTURE=(.*)$/) {
+ $default_arch = $1;
+ } elsif ($confvar =~ /^RMADISON_SSL_CA_FILE=(.*)$/) {
+ $ssl_ca_file = $1;
+ } elsif ($confvar =~ /^RMADISON_SSL_CA_PATH=(.*)$/) {
+ $ssl_ca_path = $1;
+ }
+ }
+}
+
+unless (
+ GetOptions(
+ '-a=s' => \$params->{'architecture'},
+ '--architecture=s' => \$params->{'architecture'},
+ '-b=s' => \$params->{'binary-type'},
+ '--binary-type=s' => \$params->{'binary-type'},
+ '-c=s' => \$params->{'component'},
+ '--component=s' => \$params->{'component'},
+ '-g' => \$params->{'greaterorequal'},
+ '--greaterorequal' => \$params->{'greaterorequal'},
+ '-G' => \$params->{'greaterthan'},
+ '--greaterthan' => \$params->{'greaterthan'},
+ '-h' => \$params->{'help'},
+ '--help' => \$params->{'help'},
+ '--noconf' => \$params->{'noconf'},
+ '--no-conf' => \$params->{'noconf'},
+ '-r' => \$params->{'regex'},
+ '--regex' => \$params->{'regex'},
+ '-s=s' => \$params->{'suite'},
+ '--suite=s' => \$params->{'suite'},
+ '-S' => \$params->{'source-and-binary'},
+ '--source-and-binary' => \$params->{'source-and-binary'},
+ '-t' => \$params->{'time'},
+ '--time' => \$params->{'time'},
+ '-u=s' => \$params->{'url'},
+ '--url=s' => \$params->{'url'},
+ '--version' => \$params->{'version'},
+ )
+) {
+ usage(\*STDERR, 1);
+}
+
+if ($params->{help}) {
+ usage(\*STDOUT, 0);
+}
+if ($params->{version}) {
+ version(\*STDOUT);
+ exit 0;
+}
+if ($params->{'noconf'}) {
+ print '--noconf must come first on the command line.';
+ usage(\*STDOUT, 1);
+}
+
+unless (@ARGV) {
+ print STDERR "E: need at least one package name as an argument.\n";
+ exit 1;
+}
+if ($params->{greaterorequal} and $params->{greaterthan}) {
+ print STDERR
+ "E: -g/--greaterorequal and -G/--greaterthan are mutually exclusive.\n";
+ exit 1;
+}
+
+my @args;
+
+if ($params->{'architecture'}) {
+ push @args, "a=$params->{'architecture'}";
+} elsif ($default_arch) {
+ push @args, "a=$default_arch";
+}
+push @args, "b=$params->{'binary-type'}" if $params->{'binary-type'};
+push @args, "c=$params->{'component'}" if $params->{'component'};
+push @args, "g" if $params->{'greaterorequal'};
+push @args, "G" if $params->{'greaterthan'};
+push @args, "r" if $params->{'regex'};
+push @args, "s=$params->{'suite'}" if $params->{'suite'};
+push @args, "S" if $params->{'source-and-binary'};
+push @args, "t" if $params->{'time'};
+
+my $url = $params->{'url'} ? $params->{'url'} : $default_url;
+my @url = split /,/, $url;
+
+my $status = 0;
+
+# Strip arch qualifiers from the package name, to help those that are feeding
+# in output from other commands
+s/:.*// for (@ARGV);
+
+foreach my $url (@url) {
+ print "$url:\n" if @url > 1;
+ $url = $url_map{$url} if $url_map{$url};
+ my @cmd;
+ my @ssl_errors;
+ if (-x "/usr/bin/curl") {
+ @cmd = qw/curl -f -s -S -L/;
+ push @cmd, "--cacert", $ssl_ca_file if $ssl_ca_file;
+ push @cmd, "--capath", $ssl_ca_path if $ssl_ca_path;
+ push @ssl_errors, (60, 77);
+ } else {
+ @cmd = qw/wget -q -O -/;
+ push @cmd, "--ca-certificate=$ssl_ca_file" if $ssl_ca_file;
+ push @cmd, "--ca-directory=$ssl_ca_path" if $ssl_ca_path;
+ push @ssl_errors, 5;
+ }
+ system @cmd,
+ $url
+ . (($url =~ m/\?/) ? '&' : '?')
+ . "package="
+ . join("+", map { uri_escape($_) } @ARGV)
+ . "&text=on&"
+ . join("&", @args);
+ my $rc = $? >> 8;
+ if ($rc != 0) {
+ if (grep { $_ == $rc } @ssl_errors) {
+ die
+"Problem with SSL CACERT check:\n Have you installed the ca-certificates package?\n";
+ }
+ $status = 1;
+ }
+}
+
+exit $status;
+
+__END__
+
+=head1 NAME
+
+rmadison -- Remotely query the Debian archive database about packages
+
+=head1 SYNOPSIS
+
+=over
+
+=item B<rmadison> [I<OPTIONS>] I<PACKAGE> ...
+
+=back
+
+=head1 DESCRIPTION
+
+B<dak ls> queries the Debian archive database ("projectb") and
+displays which package version is registered per architecture/component/suite.
+The CGI at B<https://qa.debian.org/madison.php> provides that service without
+requiring SSH access to ftp-master.debian.org or the mirror on
+mirror.ftp-master.debian.org. This script, B<rmadison>, is a command line
+frontend to this CGI.
+
+=head1 OPTIONS
+
+=over
+
+=item B<-a>, B<--architecture=>I<ARCH>
+
+only show info for ARCH(s)
+
+=item B<-b>, B<--binary-type=>I<TYPE>
+
+only show info for binary TYPE
+
+=item B<-c>, B<--component=>I<COMPONENT>
+
+only show info for COMPONENT(s)
+
+=item B<-g>, B<--greaterorequal>
+
+show buildd 'dep-wait pkg >= {highest version}' info
+
+=item B<-G>, B<--greaterthan>
+
+show buildd 'dep-wait pkg >> {highest version}' info
+
+=item B<-h>, B<--help>
+
+show this help and exit
+
+=item B<-s>, B<--suite=>I<SUITE>
+
+only show info for this suite
+
+=item B<-r>, B<--regex>
+
+treat PACKAGE as a regex
+
+B<Note:> Since B<-r> can easily DoS the database ("-r ."), this option is not
+supported by the CGI on qa.debian.org and most other installations.
+
+=item B<-S>, B<--source-and-binary>
+
+show info for the binary children of source pkgs
+
+=item B<-t>, B<--time>
+
+show projectb snapshot and reload time (not supported by all archives)
+
+=item B<-u>, B<--url=>I<URL>[B<,>I<URL> ...]
+
+use I<URL> for the query. Supported shorthands are
+ B<debian> https://api.ftp-master.debian.org/madison
+ B<new> https://api.ftp-master.debian.org/madison?s=new
+ B<qa> https://qa.debian.org/madison.php
+ B<ubuntu> https://people.canonical.com/~ubuntu-archive/madison.cgi
+ B<udd> https://qa.debian.org/cgi-bin/madison.cgi
+ B<archive> https://qa.debian.org/cgi-bin/madison.cgi?table=archived
+ B<ports> https://qa.debian.org/cgi-bin/madison.cgi?table=ports
+
+See the B<RMADISON_URL_MAP_> variable below for a method to add
+new shorthands.
+
+=item B<--version>
+
+show version and exit
+
+=item B<--no-conf>, B<--noconf>
+
+don't read the devscripts configuration files
+
+=back
+
+ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g.
+--architecture=amd64,i386
+
+=head1 CONFIGURATION VARIABLES
+
+The two configuration files F</etc/devscripts.conf> and
+F<~/.devscripts> are sourced by a shell in that order to set
+configuration variables. Command line options can be used to override
+configuration file settings. Environment variable settings are
+ignored for this purpose. The currently recognised variables are:
+
+=over 4
+
+=item B<RMADISON_URL_MAP_>I<SHORTHAND>=I<URL>
+
+Add an entry to the set of shorthand URLs listed above. I<SHORTHAND> should
+be replaced with the shorthand form to be used to refer to I<URL>.
+
+Multiple shorthand entries may be specified by using multiple
+B<RMADISON_URL_MAP_*> variables.
+
+=item B<RMADISON_DEFAULT_URL>=I<URL>
+
+Set the default URL to use unless overridden by a command line option.
+For Debian this defaults to debian. For Ubuntu this defaults to ubuntu.
+
+=item B<RMADISON_ARCHITECTURE>=I<ARCH>
+
+Set the default architecture to use unless overridden by a command line option.
+To run an unrestricted query when B<RMADISON_ARCHITECTURE> is set, use
+B<--architecture='*'>.
+
+=item B<RMADISON_SSL_CA_FILE>=I<FILE>
+
+Use the specified CA file instead of the default CA bundle for curl/wget,
+passed as --cacert to curl, and as --ca-certificate to wget.
+
+=item B<RMADISON_SSL_CA_PATH>=I<PATH>
+
+Use the specified CA directory instead of the default CA bundle for curl/wget,
+passed as --capath to curl, and as --ca-directory to wget.
+
+=back
+
+=head1 NOTES
+
+B<dak ls> was formerly called B<madison>.
+
+The protocol used by rmadison is fairly simple, the CGI accepts query the
+parameters a, b, c, g, G, r, s, S, t, and package. The parameter text is passed to
+enable plain-text output.
+
+=head1 SEE ALSO
+
+B<dak>(1), B<madison-lite>(1)
+
+=head1 AUTHOR
+
+rmadison and https://qa.debian.org/madison.php were written by Christoph Berg
+<myon@debian.org>. dak was written by
+James Troup <james@nocrew.org>, Anthony Towns <ajt@debian.org>, and others.
+
+=cut
diff --git a/scripts/run_bisect.sh b/scripts/run_bisect.sh
new file mode 100755
index 0000000..6238936
--- /dev/null
+++ b/scripts/run_bisect.sh
@@ -0,0 +1,114 @@
+#!/bin/sh
+#
+# Copyright 2020 Johannes Schauer Marin Rodrigues <josch@debian.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# this script is part of debbisect and usually called by debbisect itself
+#
+# it accepts six or eight arguments:
+# 1. dependencies
+# 2. script name or shell snippet
+# 3. mirror URL
+# 4. architecture
+# 5. suite
+# 6. components
+# 7. (optional) second mirror URL
+# 8. (optional) package to upgrade
+#
+# It will create an ephemeral chroot using mmdebstrap using (3.) as mirror,
+# (4.) as architecture, (5.) as suite and (6.) as components, install the
+# dependencies given in (1.) and execute the script given in (2.).
+# Its output is the exit code of the script as well as a file ./pkglist
+# containing the output of "dpkg-query -W" inside the chroot.
+#
+# If not only six but eight arguments are given, then the second mirror URL
+# (7.) will be added to the apt sources and the single package (8.) will be
+# upgraded to its version from (7.).
+#
+# shellcheck disable=SC2016
+
+set -exu
+
+if [ $# -ne 6 ] && [ $# -ne 8 ]; then
+ echo "usage: $0 depends script mirror1 architecture suite components [mirror2 toupgrade]"
+ exit 1
+fi
+
+depends=$1
+script=$2
+mirror1=$3
+architecture=$4
+suite=$5
+components=$6
+
+# The following hacks are needed to go back as far as 2006-08-10:
+#
+# - Acquire::Check-Valid-Until "false" allows Release files with an expired
+# Valid-Until dates
+# - Apt::Key::gpgvcommand allows expired GPG keys
+# - Apt::Hashes::SHA1::Weak "yes" allows GPG keys with weak SHA1 signature
+# - /usr/share/keyrings lets apt use debian-archive-removed-keys.gpg
+# - /usr/share/mmdebstrap/hooks/jessie-or-older performs some setup that is
+# only required for Debian Jessie or older
+#
+if [ $# -eq 6 ]; then
+ mmdebstrap \
+ --verbose \
+ --aptopt='Acquire::Check-Valid-Until "false"' \
+ --aptopt='Apt::Key::gpgvcommand "/usr/libexec/mmdebstrap/gpgvnoexpkeysig"' \
+ --aptopt='Apt::Hashes::SHA1::Weak "yes"' \
+ --keyring=/usr/share/keyrings \
+ --hook-dir=/usr/share/mmdebstrap/hooks/maybe-jessie-or-older \
+ --hook-dir=/usr/share/mmdebstrap/hooks/maybe-merged-usr \
+ --skip=check/signed-by \
+ --variant=apt \
+ --components="$components" \
+ --include="$depends" \
+ --architecture="$architecture" \
+ --customize-hook='chroot "$1" sh -c "dpkg-query -W > /pkglist"' \
+ --customize-hook='download /pkglist ./debbisect.'"$DEBIAN_BISECT_TIMESTAMP"'.pkglist' \
+ --customize-hook='rm "$1"/pkglist' \
+ --customize-hook='chroot "$1" dpkg-query --list --no-pager' \
+ --customize-hook="$script" \
+ "$suite" \
+ - \
+ "$mirror1" \
+ >/dev/null
+elif [ $# -eq 8 ]; then
+ mirror2=$7
+ toupgrade=$8
+ mmdebstrap \
+ --verbose \
+ --aptopt='Acquire::Check-Valid-Until "false"' \
+ --aptopt='Apt::Key::gpgvcommand "/usr/libexec/mmdebstrap/gpgvnoexpkeysig"' \
+ --aptopt='Apt::Hashes::SHA1::Weak "yes"' \
+ --keyring=/usr/share/keyrings \
+ --hook-dir=/usr/share/mmdebstrap/hooks/maybe-jessie-or-older \
+ --hook-dir=/usr/share/mmdebstrap/hooks/maybe-merged-usr \
+ --skip=check/signed-by \
+ --variant=apt \
+ --components="$components" \
+ --include="$depends" \
+ --architecture="$architecture" \
+ --customize-hook='echo "deb '"$mirror2 $suite $(echo "$components" | tr ',' ' ')"'" > "$1"/etc/apt/sources.list' \
+ --customize-hook='chroot "$1" apt-get update' \
+ --customize-hook='chroot "$1" env DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get --yes install --no-install-recommends '"$toupgrade" \
+ --customize-hook='chroot "$1" sh -c "dpkg-query -W > /pkglist"' \
+ --customize-hook='download /pkglist ./debbisect.'"$DEBIAN_BISECT_TIMESTAMP.$toupgrade"'.pkglist' \
+ --customize-hook='rm "$1"/pkglist' \
+ --customize-hook='chroot "$1" dpkg-query --list --no-pager' \
+ --customize-hook="$script" \
+ "$suite" \
+ - \
+ "$mirror1" \
+ >/dev/null
+fi
diff --git a/scripts/run_bisect_qemu.sh b/scripts/run_bisect_qemu.sh
new file mode 100755
index 0000000..d0f8dcc
--- /dev/null
+++ b/scripts/run_bisect_qemu.sh
@@ -0,0 +1,365 @@
+#!/bin/sh
+#
+# Copyright 2020 Johannes Schauer Marin Rodrigues <josch@debian.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# this script is part of debbisect and usually called by debbisect itself
+#
+# it accepts eight or ten arguments:
+# 1. dependencies
+# 2. script name or shell snippet
+# 3. mirror URL
+# 4. architecture
+# 5. suite
+# 6. components
+# 7. memsize
+# 8. disksize
+# 9. (optional) second mirror URL
+# 10. (optional) package to upgrade
+#
+# It will create an ephemeral qemu virtual machine using mmdebstrap and
+# guestfish using (3.) as mirror, (4.) as architecture, (5.) as suite and
+# (6.) as components, install the dependencies given in (1.) and execute the
+# script given in (2.).
+# Its output is the exit code of the script as well as a file ./pkglist
+# containing the output of "dpkg-query -W" inside the chroot.
+#
+# If not only six but eight arguments are given, then the second mirror URL
+# (9.) will be added to the apt sources and the single package (10.) will be
+# upgraded to its version from (9.).
+#
+# shellcheck disable=SC2016
+
+set -exu
+
+if [ $# -ne 8 ] && [ $# -ne 10 ]; then
+ echo "usage: $0 depends script mirror1 architecture suite components memsize disksize [mirror2 toupgrade]"
+ exit 1
+fi
+
+depends=$1
+script=$2
+mirror1=$3
+architecture=$4
+suite=$5
+components=$6
+memsize=$7
+disksize=$8
+
+if [ $# -eq 10 ]; then
+ mirror2=$9
+ toupgrade=${10}
+fi
+
+case $architecture in
+ alpha) qemuarch=alpha;;
+ amd64) qemuarch=x86_64;;
+ arm) qemuarch=arm;;
+ arm64) qemuarch=aarch64;;
+ armel) qemuarch=arm;;
+ armhf) qemuarch=arm;;
+ hppa) qemuarch=hppa;;
+ i386) qemuarch=i386;;
+ m68k) qemuarch=m68k;;
+ mips) qemuarch=mips;;
+ mips64) qemuarch=mips64;;
+ mips64el) qemuarch=mips64el;;
+ mipsel) qemuarch=mipsel;;
+ powerpc) qemuarch=ppc;;
+ ppc64) qemuarch=ppc64;;
+ ppc64el) qemuarch=ppc64le;;
+ riscv64) qemuarch=riscv64;;
+ s390x) qemuarch=s390x;;
+ sh4) qemuarch=sh4;;
+ sparc) qemuarch=sparc;;
+ sparc64) qemuarch=sparc64;;
+ *) echo "no qemu support for $architecture"; exit 1;;
+esac
+case $architecture in
+ i386) linuxarch=686-pae;;
+ amd64) linuxarch=amd64;;
+ arm64) linuxarch=arm64;;
+ armhf) linuxarch=armmp;;
+ ia64) linuxarch=itanium;;
+ m68k) linuxarch=m68k;;
+ armel) linuxarch=marvell;;
+ hppa) linuxarch=parisc;;
+ powerpc) linuxarch=powerpc;;
+ ppc64) linuxarch=powerpc64;;
+ ppc64el) linuxarch=powerpc64le;;
+ riscv64) linuxarch=riscv64;;
+ s390x) linuxarch=s390x;;
+ sparc64) linuxarch=sparc64;;
+ *) echo "no kernel image for $architecture"; exit 1;;
+esac
+
+TMPDIR=$(mktemp --tmpdir --directory debbisect_qemu.XXXXXXXXXX)
+cleantmp() {
+ for f in customize.sh id_rsa id_rsa.pub qemu.log config; do
+ rm -f "$TMPDIR/$f"
+ done
+ rmdir "$TMPDIR"
+}
+
+trap cleantmp EXIT
+# the temporary directory must be world readable (for example in unshare mode)
+chmod a+xr "$TMPDIR"
+
+ssh-keygen -q -t rsa -f "$TMPDIR/id_rsa" -N ""
+
+cat << SCRIPT > "$TMPDIR/customize.sh"
+#!/bin/sh
+set -exu
+
+rootfs="\$1"
+
+# setup various files in /etc
+echo host > "\$rootfs/etc/hostname"
+echo "127.0.0.1 localhost host" > "\$rootfs/etc/hosts"
+echo "/dev/vda1 / auto errors=remount-ro 0 1" > "\$rootfs/etc/fstab"
+cat /etc/resolv.conf > "\$rootfs/etc/resolv.conf"
+
+# setup users
+chroot "\$rootfs" passwd --delete root
+chroot "\$rootfs" useradd --home-dir /home/user --create-home user
+chroot "\$rootfs" passwd --delete user
+
+# extlinux config to boot from /dev/vda1 with predictable network interface
+# naming and a serial console for logging
+cat << END > "\$rootfs/extlinux.conf"
+default linux
+timeout 0
+
+label linux
+kernel /vmlinuz
+append initrd=/initrd.img root=/dev/vda1 net.ifnames=0 console=ttyS0
+END
+
+# network interface config
+# we can use eth0 because we boot with net.ifnames=0 for predictable interface
+# names
+cat << END > "\$rootfs/etc/network/interfaces"
+auto lo
+iface lo inet loopback
+
+auto eth0
+iface eth0 inet dhcp
+END
+
+# copy in the public key
+mkdir "\$rootfs/root/.ssh"
+cp "$TMPDIR/id_rsa.pub" "\$rootfs/root/.ssh/authorized_keys"
+chroot "\$rootfs" chown 0:0 /root/.ssh/authorized_keys
+SCRIPT
+chmod +x "$TMPDIR/customize.sh"
+
+# The following hacks are needed to go back as far as 2006-08-10:
+#
+# - Acquire::Check-Valid-Until "false" allows Release files with an expired
+# Valid-Until dates
+# - Apt::Key::gpgvcommand allows expired GPG keys
+# - Apt::Hashes::SHA1::Weak "yes" allows GPG keys with weak SHA1 signature
+# - /usr/share/keyrings lets apt use debian-archive-removed-keys.gpg
+# - /usr/share/mmdebstrap/hooks/jessie-or-older performs some setup that is
+# only required for Debian Jessie or older
+#
+mmdebstrap --architecture="$architecture" --verbose --variant=apt --components="$components" \
+ --aptopt='Acquire::Check-Valid-Until "false"' \
+ --aptopt='Apt::Key::gpgvcommand "/usr/libexec/mmdebstrap/gpgvnoexpkeysig"' \
+ --aptopt='Apt::Hashes::SHA1::Weak "yes"' \
+ --keyring=/usr/share/keyrings \
+ --hook-dir=/usr/share/mmdebstrap/hooks/maybe-jessie-or-older \
+ --hook-dir=/usr/share/mmdebstrap/hooks/maybe-merged-usr \
+ --skip=check/signed-by \
+ --include='openssh-server,systemd-sysv,ifupdown,netbase,isc-dhcp-client,udev,policykit-1,linux-image-'"$linuxarch" \
+ --customize-hook="$TMPDIR/customize.sh" \
+ "$suite" debian-rootfs.tar "$mirror1"
+
+# use guestfish to prepare the host system
+#
+# - create a single 4G partition and unpack the rootfs tarball into it
+# - unpack the tarball of the container into /
+# - put a syslinux MBR into the first 440 bytes of the drive
+# - install extlinux and make partition bootable
+#
+# useful stuff to debug any errors:
+# LIBGUESTFS_BACKEND_SETTINGS=force_tcg
+# libguestfs-test-tool || true
+# export LIBGUESTFS_DEBUG=1 LIBGUESTFS_TRACE=1
+guestfish -N "debian-rootfs.img=disk:$disksize" -- \
+ part-disk /dev/sda mbr : \
+ mkfs ext4 /dev/sda1 : \
+ mount /dev/sda1 / : \
+ tar-in "debian-rootfs.tar" / : \
+ upload /usr/lib/SYSLINUX/mbr.bin /mbr.bin : \
+ copy-file-to-device /mbr.bin /dev/sda size:440 : \
+ rm /mbr.bin : \
+ extlinux / : \
+ sync : \
+ umount / : \
+ part-set-bootable /dev/sda 1 true : \
+ shutdown
+
+
+# start the host system
+# prefer using kvm but fall back to tcg if not available
+# avoid entropy starvation by feeding the crypt system with random bits from /dev/urandom
+# the default memory size of 128 MiB is not enough for Debian, so we go with 1G
+# use a virtio network card instead of emulating a real network device
+# we don't need any graphics
+# this also multiplexes the console and the monitor to stdio
+# creates a multiplexed stdio backend connected to the serial port and the qemu
+# monitor
+# redirect tcp connections on port 10022 localhost to the host system port 22
+# redirect all output to a file
+# run in the background
+timeout --kill-after=60s 60m \
+ qemu-system-"$qemuarch" \
+ -M accel=kvm:tcg \
+ -no-user-config \
+ -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0 \
+ -m "$memsize" \
+ -net nic,model=virtio \
+ -nographic \
+ -serial mon:stdio \
+ -net user,hostfwd=tcp:127.0.0.1:10022-:22 \
+ -drive file="debian-rootfs.img",format=raw,if=virtio \
+ > "$TMPDIR/qemu.log" </dev/null 2>&1 &
+
+# store the pid
+QEMUPID=$!
+
+# use a function here, so that we can properly quote the path to qemu.log
+showqemulog() {
+ cat --show-nonprinting "$TMPDIR/qemu.log"
+}
+
+# show the log and kill qemu in case the script exits first
+trap 'showqemulog; cleantmp; kill $QEMUPID' EXIT
+
+# the default ssh command does not store known hosts and even ignores host keys
+# it identifies itself with the rsa key generated above
+# pseudo terminal allocation is disabled or otherwise, programs executed via
+# ssh might wait for input on stdin of the ssh process
+
+cat << END > "$TMPDIR/config"
+Host qemu
+ Hostname 127.0.0.1
+ User root
+ Port 10022
+ UserKnownHostsFile /dev/null
+ StrictHostKeyChecking no
+ IdentityFile $TMPDIR/id_rsa
+ RequestTTY no
+END
+
+TIMESTAMP=$(sleepenh 0 || [ $? -eq 1 ])
+TIMEOUT=5
+NUM_TRIES=40
+i=0
+while true; do
+ rv=0
+ ssh -F "$TMPDIR/config" -o ConnectTimeout=$TIMEOUT qemu echo success || rv=1
+ [ $rv -eq 0 ] && break
+ # if the command before took less than $TIMEOUT seconds, wait the remaining time
+ TIMESTAMP=$(sleepenh "$TIMESTAMP" "$TIMEOUT" || [ $? -eq 1 ]);
+ i=$((i+1))
+ if [ $i -ge $NUM_TRIES ]; then
+ break
+ fi
+done
+
+if [ $i -eq $NUM_TRIES ]; then
+ echo "timeout reached: unable to connect to qemu via ssh"
+ exit 1
+fi
+
+# if any url in sources.list points to 127.0.0.1 then we have to replace them
+# by the host IP as seen by the qemu guest
+cat << SCRIPT | ssh -F "$TMPDIR/config" qemu sh
+set -eu
+if [ -e /etc/apt/sources.list ]; then
+ sed -i 's/http:\/\/127.0.0.1:/http:\/\/10.0.2.2:/' /etc/apt/sources.list
+fi
+find /etc/apt/sources.list.d -type f -name '*.list' -print0 \
+ | xargs --null --no-run-if-empty sed -i 's/http:\/\/127.0.0.1:/http:\/\/10.0.2.2:/'
+SCRIPT
+
+# we install dependencies now and not with mmdebstrap --include in case some
+# dependencies require a full system present
+if [ -n "$depends" ]; then
+ ssh -F "$TMPDIR/config" qemu apt-get update
+ # shellcheck disable=SC2046,SC2086
+ ssh -F "$TMPDIR/config" qemu env DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get --yes install --no-install-recommends $(echo $depends | tr ',' ' ')
+fi
+
+# in its ten-argument form, a single package has to be upgraded to its
+# version from the first bad timestamp
+if [ $# -eq 10 ]; then
+ # replace content of sources.list with first bad timestamp
+ mirror2=$(echo "$mirror2" | sed 's/http:\/\/127.0.0.1:/http:\/\/10.0.2.2:/')
+ echo "deb $mirror2 $suite $(echo "$components" | tr ',' ' ')" | ssh -F "$TMPDIR/config" qemu "cat > /etc/apt/sources.list"
+ ssh -F "$TMPDIR/config" qemu apt-get update
+ # upgrade a single package (and whatever else apt deems necessary)
+ before=$(ssh -F "$TMPDIR/config" qemu dpkg-query -W)
+ ssh -F "$TMPDIR/config" qemu env DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get --yes install --no-install-recommends "$toupgrade"
+ after=$(ssh -F "$TMPDIR/config" qemu dpkg-query -W)
+ # make sure that something was upgraded
+ if [ "$before" = "$after" ]; then
+ echo "nothing got upgraded -- this should never happen" >&2
+ exit 1
+ fi
+ ssh -F "$TMPDIR/config" qemu dpkg-query -W > "./debbisect.$DEBIAN_BISECT_TIMESTAMP.$toupgrade.pkglist"
+else
+ ssh -F "$TMPDIR/config" qemu dpkg-query -W > "./debbisect.$DEBIAN_BISECT_TIMESTAMP.pkglist"
+fi
+
+ssh -F "$TMPDIR/config" qemu dpkg-query --list -no-pager
+
+# explicitly export all necessary variables
+# because we use set -u this also makes sure that this script has these
+# variables set in the first place
+export DEBIAN_BISECT_EPOCH="$DEBIAN_BISECT_EPOCH"
+export DEBIAN_BISECT_TIMESTAMP="$DEBIAN_BISECT_TIMESTAMP"
+if [ -z ${DEBIAN_BISECT_MIRROR+x} ]; then
+ # DEBIAN_BISECT_MIRROR was unset (caching is disabled)
+ true
+else
+ # replace the localhost IP by the IP of the host as seen by qemu
+ DEBIAN_BISECT_MIRROR=$(echo "$DEBIAN_BISECT_MIRROR" | sed 's/http:\/\/127.0.0.1:/http:\/\/10.0.2.2:/')
+ export DEBIAN_BISECT_MIRROR="$DEBIAN_BISECT_MIRROR"
+fi
+
+
+# either execute $script as a script from $PATH or as a shell snippet
+ret=0
+if [ -x "$script" ] || echo "$script" | grep --invert-match --silent --perl-regexp '[^\w@\%+=:,.\/-]'; then
+ "$script" "$TMPDIR/config" || ret=$?
+else
+ sh -c "$script" exec "$TMPDIR/config" || ret=$?
+fi
+
+# since we installed systemd-sysv, systemctl is available
+ssh -F "$TMPDIR/config" qemu systemctl poweroff
+
+wait $QEMUPID
+
+trap - EXIT
+
+showqemulog
+cleantmp
+
+if [ "$ret" -eq 0 ]; then
+ exit 0
+else
+ exit 1
+fi
diff --git a/scripts/sadt b/scripts/sadt
new file mode 100755
index 0000000..b874330
--- /dev/null
+++ b/scripts/sadt
@@ -0,0 +1,647 @@
+#!/usr/bin/python3
+# encoding=UTF-8
+
+# Copyright © 2012, 2013, 2014 Jakub Wilk <jwilk@debian.org>
+
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+"""
+simple DEP-8 test runner
+"""
+
+import argparse
+import errno
+import os
+import queue as queuemod
+import re
+import shutil
+import stat
+import subprocess as ipc
+import sys
+import tempfile
+import threading
+import warnings
+
+from debian import deb822
+
+
+def parse_relations(field):
+ """
+ wrap debian.deb822.PkgRelation.parse_relations() to suppress the
+ UserWarning about the inability to parse something.
+ See https://bugs.debian.org/712513
+ """
+ warnings.simplefilter("ignore")
+ parsed = deb822.PkgRelation.parse_relations(field)
+ warnings.resetwarnings()
+ return parsed
+
+
+def chmod_x(path):
+ """
+ chmod a+X <path>
+ """
+ old_mode = stat.S_IMODE(os.stat(path).st_mode)
+ new_mode = old_mode | ((old_mode & 0o444) >> 2)
+ if old_mode != new_mode:
+ os.chmod(path, new_mode)
+ return old_mode
+
+
+def annotate_output(child):
+ queue = queuemod.Queue()
+
+ def reader(fd, tag):
+ buf = b""
+ while True:
+ assert b"\n" not in buf
+ chunk = os.read(fd, 1024)
+ if chunk == b"":
+ break
+ lines = (buf + chunk).split(b"\n")
+ buf = lines.pop()
+ for line in lines:
+ queue.put((tag, line + b"\n"))
+ if buf != b"":
+ queue.put((tag, buf))
+ queue.put(None)
+
+ queue = queuemod.Queue()
+ threads = []
+ for pipe, tag in [(child.stdout, "O"), (child.stderr, "E")]:
+ thread = threading.Thread(target=reader, args=(pipe.fileno(), tag))
+ thread.start()
+ threads += [thread]
+ nthreads = len(threads)
+ while nthreads > 0:
+ item = queue.get()
+ if item is None:
+ nthreads -= 1
+ continue
+ yield item
+ for thread in threads:
+ thread.join()
+
+
+class Skip(Exception):
+ pass
+
+
+class Flaky(Exception):
+ pass
+
+
+class Fail(Exception):
+ pass
+
+
+class Progress:
+ @staticmethod
+ def _write(text):
+ sys.stdout.write(text)
+ sys.stdout.flush()
+
+ def start(self, name):
+ pass
+
+ def output(self, line):
+ pass
+
+ def skip(self, name, reason):
+ raise NotImplementedError
+
+ def fail(self, name, reason):
+ raise NotImplementedError
+
+ def ok(self, name):
+ raise NotImplementedError
+
+ def close(self):
+ pass
+
+
+class DefaultProgress(Progress):
+ _hourglass = r"/-\|"
+
+ def __init__(self):
+ self._counter = 0
+ self._output = False
+ if sys.stdout.isatty():
+ self._back = "\b"
+ else:
+ self._back = ""
+
+ def _reset(self):
+ if self._output:
+ self._write(self._back)
+
+ def start(self, name):
+ self._output = False
+
+ def output(self, line):
+ if not self._back:
+ return
+ hourglass = self._hourglass
+ counter = self._counter + 1
+ self._reset()
+ self._write(hourglass[counter % len(hourglass)])
+ self._counter = counter
+ self._output = True
+
+ def skip(self, name, reason):
+ self._write("S")
+
+ def fail(self, name, reason):
+ self._reset()
+ self._write("F")
+
+ def ok(self, name):
+ self._reset()
+ self._write(".")
+
+ def close(self):
+ self._write("\n")
+
+
+class VerboseProgress(Progress):
+ def _separator(self):
+ self._write("-" * 70 + "\n")
+
+ def start(self, name):
+ self._separator()
+ self._write(f"{name}\n")
+ self._separator()
+
+ def output(self, line):
+ self._write(line)
+
+ def skip(self, name, reason):
+ self._write(f"{name}: SKIP ({reason})\n")
+
+ def fail(self, name, reason):
+ self._separator()
+ self._write(f"{name}: FAIL ({reason})\n")
+ self._write("\n")
+
+ def ok(self, name):
+ self._separator()
+ self._write(f"{name}: PASS\n")
+ self._write("\n")
+
+
+class TestCommand:
+ def __init__(self, group, command):
+ self.group = group
+ self.command = command
+
+ def __str__(self):
+ return self.command
+
+ @property
+ def name(self):
+ return str(self)
+
+ def get_command(self):
+ return ["sh", "-c", self.command]
+
+ def prepare(self, progress, rw_build_tree):
+ pass
+
+ def cleanup(self):
+ pass
+
+ def run(self, progress, options): # pylint: disable=too-many-locals
+ command = self.get_command()
+ tmpdir1 = tempfile.mkdtemp(prefix="sadt.")
+ tmpdir2 = tempfile.mkdtemp(prefix="sadt.")
+ environ = dict(os.environ)
+ environ["AUTOPKGTEST_TMP"] = tmpdir1
+ # only for compatibility with old DEP-8 spec.
+ environ["ADTTMP"] = tmpdir2
+ child = ipc.Popen( # pylint: disable=consider-using-with
+ command, stdout=ipc.PIPE, stderr=ipc.PIPE, env=environ
+ )
+ output = []
+ stderr = False
+ for tag, line in annotate_output(child):
+ if tag == "E":
+ stderr = True
+ this_line = f"{tag}: {line.decode(sys.stdout.encoding, 'replace')}"
+ progress.output(this_line)
+ output.append(this_line)
+ for fp in child.stdout, child.stderr:
+ fp.close()
+ returncode = child.wait()
+ shutil.rmtree(tmpdir1)
+ shutil.rmtree(tmpdir2)
+
+ if returncode == 77 and options.skippable:
+ reason = "exit status 77 and marked as skippable"
+ progress.skip(self, reason)
+ raise Skip(self, reason, "".join(output))
+
+ fail_reason = None
+
+ if returncode == 0:
+ if stderr and not options.allow_stderr:
+ returncode = -1
+ fail_reason = "stderr non-empty"
+ else:
+ fail_reason = f"exit code: {returncode}"
+
+ if returncode != 0:
+ if options.flaky:
+ progress.skip(self, fail_reason)
+ raise Flaky(self, fail_reason, "".join(output))
+
+ progress.fail(self, fail_reason)
+ raise Fail(self, fail_reason, "".join(output))
+
+ progress.ok(self)
+
+
+class Test(TestCommand):
+ def __init__(self, group, testname):
+ self.testname = testname
+ self.original_mode = None
+ self.cwd = None
+ super().__init__(group, testname)
+
+ @property
+ def path(self):
+ return os.path.join(self.group.tests_directory, self.testname)
+
+ def __str__(self):
+ return self.testname
+
+ def get_command(self):
+ return [self.path]
+
+ def prepare(self, progress, rw_build_tree):
+ if rw_build_tree:
+ self.cwd = os.getcwd()
+ os.chdir(rw_build_tree)
+ chmod_x(self.path)
+ else:
+ if not os.access(self.path, os.X_OK):
+ try:
+ self.original_mode = chmod_x(self.path)
+ except OSError as exc:
+ progress.skip(
+ self.testname,
+ f"{self.path} could not be made executable: {exc}",
+ )
+ raise Skip from exc
+
+ def cleanup(self):
+ if self.original_mode is not None:
+ os.chmod(self.path, self.original_mode)
+ if self.cwd is not None:
+ os.chdir(self.cwd)
+
+
+class TestOptions: # pylint: disable=too-few-public-methods
+ def __init__(self):
+ self.allow_stderr = False
+ self.flaky = False
+ self.rw_build_tree_needed = False
+ self.skippable = False
+
+
+class TestGroup:
+ def __init__(self):
+ self.tests = []
+ self.restrictions = frozenset()
+ self.features = frozenset()
+ self.depends = "@"
+ self.tests_directory = "debian/tests"
+ self._depends_checked = False
+ self._depends_cache = None
+
+ def __iter__(self):
+ return iter(self.tests)
+
+ def expand_depends(self, packages, build_depends):
+ if "@" not in self.depends:
+ return
+ or_clauses = []
+ parsed_depends = parse_relations(self.depends)
+ for or_clause in parsed_depends:
+ if len(or_clause) == 1 and or_clause[0]["name"] == "@builddeps@":
+ or_clauses += build_depends
+ or_clauses += parse_relations("make")
+ continue
+ stripped_or_clause = [r for r in or_clause if r["name"] != "@"]
+ if len(stripped_or_clause) < len(or_clause):
+ for package in packages:
+ or_clauses += [
+ stripped_or_clause
+ + [{"name": package, "version": None, "arch": None}]
+ ]
+ else:
+ or_clauses += [or_clause]
+ self.depends = deb822.PkgRelation.str(or_clauses)
+
+ def check_depends(self):
+ if self._depends_checked:
+ if isinstance(self._depends_cache, Exception):
+ raise self._depends_cache # fpos, pylint: disable=raising-bad-type
+ return
+ child = ipc.Popen( # pylint: disable=consider-using-with
+ ["dpkg-checkbuilddeps", "-d", self.depends], stderr=ipc.PIPE, env={}
+ )
+ error = child.stderr.read().decode("ASCII")
+ child.stderr.close()
+ if child.wait() != 0:
+ error = re.sub(
+ "^dpkg-checkbuilddeps: Unmet build dependencies",
+ "unmet dependencies",
+ error,
+ )
+ error = error.rstrip()
+ skip = Skip(error)
+ self._depends_cache = skip
+ raise skip
+ self._depends_checked = True
+
+ def check_restrictions(self, ignored_restrictions):
+ options = TestOptions()
+ restrictions = self.restrictions - frozenset(ignored_restrictions)
+
+ for restriction in restrictions:
+ if restriction == "rw-build-tree":
+ options.rw_build_tree_needed = True
+ elif restriction == "needs-root":
+ if os.getuid() != 0:
+ raise Skip("this test needs root privileges")
+ elif restriction == "breaks-testbed":
+ raise Skip("breaks-testbed restriction is not implemented; use adt-run")
+ elif restriction == "build-needed":
+ raise Skip("source tree not built")
+ elif restriction == "allow-stderr":
+ options.allow_stderr = True
+ elif restriction == "flaky":
+ options.flaky = True
+ elif restriction == "skippable":
+ options.skippable = True
+ else:
+ raise Skip(f"unknown restriction: {restriction}")
+ return options
+
+ def check(self, ignored_restrictions=()):
+ options = self.check_restrictions(ignored_restrictions)
+ self.check_depends()
+ return options
+
+ def run(
+ self,
+ test,
+ progress,
+ ignored_restrictions=(),
+ rw_build_tree=None,
+ built_source_tree=None,
+ ):
+ ignored_restrictions = set(ignored_restrictions)
+ if rw_build_tree:
+ ignored_restrictions.add("rw-build-tree")
+ if built_source_tree:
+ ignored_restrictions.add("build-needed")
+ ignored_restrictions.add("needs-recommends")
+ ignored_restrictions.add("superficial")
+ try:
+ options = self.check(ignored_restrictions)
+ except Skip as exc:
+ progress.skip(test, str(exc))
+ raise
+ test.prepare(progress, rw_build_tree)
+ try:
+ progress.start(test)
+ test.run(progress, options)
+ finally:
+ test.cleanup()
+
+ def add_tests(self, tests):
+ tests = [Test(self, t) for t in re.split(r"\s*,?\s+", tests)]
+ self.tests = frozenset(tests)
+
+ def add_test_command(self, test_command):
+ self.tests = frozenset([TestCommand(self, test_command)])
+
+ def add_restrictions(self, restrictions):
+ restrictions = re.split(r"\s*,?\s+", restrictions)
+ self.restrictions = frozenset(restrictions)
+
+ def add_features(self, features):
+ features = re.split(r"\s*,?\s+", features)
+ self.features = frozenset(features)
+
+ def add_depends(self, depends):
+ self.depends = depends
+
+ def add_tests_directory(self, path):
+ self.tests_directory = path
+
+
+def copy_build_tree():
+ rw_build_tree = tempfile.mkdtemp(prefix="sadt-rwbt.")
+ print(f"sadt: info: copying build tree to {rw_build_tree}", file=sys.stderr)
+ ipc.check_call(["cp", "-a", ".", rw_build_tree])
+ return rw_build_tree
+
+
+def parse_args() -> argparse.Namespace:
+ parser = argparse.ArgumentParser(description=__doc__.strip())
+ parser.add_argument("-v", "--verbose", action="store_true", help="verbose output")
+ parser.add_argument(
+ "-b",
+ "--built-source-tree",
+ action="store_true",
+ help="assume built source tree",
+ )
+ parser.add_argument(
+ "--run-autodep8", action="store_true", help="Run autodep8 (default)"
+ )
+ parser.add_argument(
+ "--no-run-autodep8", action="store_false", help="Don't run autodep8"
+ )
+ parser.set_defaults(run_autodep8=True)
+ parser.add_argument(
+ "--ignore-restrictions",
+ metavar="<restr>[,<restr>...]",
+ help="ignore specified restrictions",
+ default="",
+ )
+ parser.add_argument("tests", metavar="<test-name>", nargs="*", help="tests to run")
+ options = parser.parse_args()
+ options.tests = frozenset(options.tests)
+ options.ignore_restrictions = frozenset(options.ignore_restrictions.split(","))
+ return options
+
+
+def get_test_groups(
+ binary_packages, build_depends, run_autodep8: bool
+) -> list[TestGroup]:
+ test_groups = []
+ try:
+ ipc.check_call(["which", "autodep8"], stdout=ipc.DEVNULL)
+ autodep8_available = True
+ except ipc.CalledProcessError:
+ autodep8_available = False
+ try:
+ if run_autodep8 and autodep8_available:
+ file = tempfile.TemporaryFile("w+")
+ ipc.check_call(["autodep8"], stdout=file)
+ file.seek(0)
+ else:
+ file = open("debian/tests/control", encoding="UTF-8")
+ except IOError as exc:
+ if exc.errno == errno.ENOENT:
+ print("sadt: error: cannot find debian/tests/control", file=sys.stderr)
+ sys.exit(1)
+ raise
+ with file:
+ for para in deb822.Packages.iter_paragraphs(file):
+ group = TestGroup()
+ for key, value in para.items():
+ lkey = key.lower().replace("-", "_")
+ try:
+ method = getattr(group, "add_" + lkey)
+ except AttributeError:
+ print(
+ f"sadt: warning: unknown field {key},"
+ f" skipping the whole paragraph",
+ file=sys.stderr,
+ )
+ group = None
+ break
+ method(value)
+ if group is not None:
+ group.expand_depends(binary_packages, build_depends)
+ test_groups += [group]
+ return test_groups
+
+
+def test_summary(failures, flakes, n_skip: int, n_ok: int) -> str:
+ n_fail = len(failures)
+ n_flake = len(flakes)
+ n_test = n_fail + n_flake + n_skip + n_ok
+ if failures:
+ for name, exception in failures:
+ print("=" * 70)
+ print(f"FAIL: {name} ({exception.args[1]})")
+ if flakes:
+ for name, exception in flakes:
+ print("=" * 70)
+ print(f"FLAKY: {name} ({exception.args[1]})")
+ print()
+ fmt_message = [f"tests={n_test}"]
+ if n_skip > 0:
+ fmt_message += [f"skipped={n_skip}"]
+ if n_fail > 0:
+ fmt_message += [f"failures={n_fail}"]
+ if n_flake > 0:
+ fmt_message += [f"flaky={n_flake}"]
+ if fmt_message:
+ extra_message = f" ({', '.join(fmt_message)})"
+ else:
+ extra_message = ""
+ message = ("OK" if n_fail == 0 else "FAILED") + extra_message
+ return message
+
+
+def run_tests(test_groups: list[TestGroup], options: argparse.Namespace) -> None:
+ # TODO: refactor run_tests function
+ # pylint: disable=too-many-branches,too-many-nested-blocks
+ failures = []
+ flakes = []
+ n_skip = n_ok = 0
+ progress = VerboseProgress() if options.verbose else DefaultProgress()
+ rw_build_tree = None
+ try:
+ for group in test_groups:
+ for test in group:
+ if options.tests and test.name not in options.tests:
+ continue
+ try:
+ if rw_build_tree is None:
+ try:
+ group_options = group.check()
+ except Skip:
+ pass
+ else:
+ if group_options.rw_build_tree_needed:
+ rw_build_tree = copy_build_tree()
+ assert rw_build_tree is not None
+ group.run(
+ test,
+ progress=progress,
+ ignored_restrictions=options.ignore_restrictions,
+ rw_build_tree=rw_build_tree,
+ built_source_tree=options.built_source_tree,
+ )
+ except Skip:
+ n_skip += 1
+ except Fail as exc:
+ failures += [(test, exc)]
+ except Flaky as exc:
+ flakes += [(test, exc)]
+ else:
+ n_ok += 1
+ finally:
+ progress.close()
+ n_fail = len(failures)
+ print(test_summary(failures, flakes, n_skip, n_ok))
+ if rw_build_tree is not None:
+ shutil.rmtree(rw_build_tree)
+ sys.exit(n_fail > 0)
+
+
+def main() -> None:
+ options = parse_args()
+ binary_packages = set()
+ build_depends = []
+ try:
+ file = open("debian/control", encoding="UTF-8")
+ except IOError as exc:
+ if exc.errno == errno.ENOENT:
+ print("sadt: error: cannot find debian/control", file=sys.stderr)
+ sys.exit(1)
+ raise
+ with file:
+ for i, para in enumerate(deb822.Packages.iter_paragraphs(file)):
+ if i == 0:
+ # FIXME statement with no effect
+ # para['Source']
+ for field in (
+ "Build-Depends",
+ "Build-Depends-Indep",
+ "Build-Depends-Arch",
+ ):
+ try:
+ build_depends += parse_relations(para[field])
+ except KeyError:
+ continue
+ else:
+ if para.get("Package-Type") == "udeb":
+ # udebs can't be tested
+ continue
+ binary_packages.add(para["Package"])
+
+ test_groups = get_test_groups(binary_packages, build_depends, options.run_autodep8)
+ run_tests(test_groups, options)
+
+
+if __name__ == "__main__":
+ main()
+
+# vim:ts=4 sw=4 et
diff --git a/scripts/sadt.pod b/scripts/sadt.pod
new file mode 100644
index 0000000..3fd9d6d
--- /dev/null
+++ b/scripts/sadt.pod
@@ -0,0 +1,76 @@
+# Copyright © 2013 Jakub Wilk <jwilk@debian.org>
+
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+=encoding utf8
+
+=head1 NAME
+
+sadt - simple DEP-8 test runner
+
+=head1 SYNOPSIS
+
+B<sadt> [I<options>] [I<test-name>...]
+
+=head1 DESCRIPTION
+
+B<sadt> is a simple implementation of DEP-8 (“automatic as-installed package
+testing”) test runner.
+
+It is your responsibility to satisfy tests' dependencies. B<sadt> won't
+attempt to install any missing packages. If a test's dependencies cannot be
+satisfied by packages that are currently installed, the test will be skipped.
+
+B<sadt> won't build the package even if a test declares the B<build-needed>
+restriction. Instead, such a test will be skipped. However, you can build the
+package manually, and then tell B<sadt> to assume that the package is already
+built using the B<-b>/B<--built-source-tree>.
+
+B<sadt> doesn't implement any virtualisation arrangements, therefore it skips
+tests that declare the B<breaks-testbed> restriction.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-v>, B<--verbose>
+
+Make the output more verbose.
+
+=item B<-b>, B<--built-source-tree>
+
+Assume that the source tree is already built.
+This is equivalent to B<--ignore-restriction=build-needed>.
+
+=item B<--run-autodep8>, B<--no-run-autodep8>
+
+Control whether to run autodep8(1) to determine the tests to run.
+By default, autodep8 will be run.
+
+=item B<--ignore-restriction>=I<restriction>
+
+Don't skip tests that declare the I<restriction>.
+
+=item B<-h>, B<--help>
+
+Show a help message and exit.
+
+=back
+
+=head1 CONFORMING TO
+
+README.package-tests shipped by autopkgtest 2.7.2
+
+=head1 SEE ALSO
+
+B<adt-run>(1)
diff --git a/scripts/salsa.bash_completion b/scripts/salsa.bash_completion
new file mode 100644
index 0000000..2dbebcb
--- /dev/null
+++ b/scripts/salsa.bash_completion
@@ -0,0 +1,57 @@
+# /usr/share/bash-completion/completions/salsa
+# Bash command completion for ‘salsa(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+shopt -s progcomp
+
+_salsa_completion () {
+ COMPREPLY=()
+
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+ local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+ local opts="--help --skip --skip-file -C --chdir --debug"
+ opts+=" --all --conf-file --no-conf --desc --no-desc --desc-pattern"
+ opts+=" --disable-kgb --disable-tagpending --group --group-id"
+ opts+=" --enable-remove-source-branch --disable-remove-source-branch"
+ opts+=" --issues --mr --repo --forks --lfs --packages --jobs --pages"
+ opts+=" --container --analytics --requirements --wiki --snippets"
+ opts+=" --releases --auto-devops --request-acc --ci-config-path"
+ opts+=" --mr-allow-squash --no-mr-allow-squash --mr-desc --mr-title"
+ opts+=" --mr-dst-branch --mr-dst-project --mr-remove-source-branch"
+ opts+=" --schedule-desc --schedule-ref --schedule-cron --schedule-tz"
+ opts+=" --schedule-enable --schedule-disable --schedule-run --schedule-delete"
+ opts+=" --no-remove-source-branch --mr-src-branch --mr-src-project"
+ opts+=" --kgb --no-kgb --kgb-options --irc-channel --path --tagpending"
+ opts+=" --irker --no-irker --disable-irker --no-disable-irker"
+ opts+=" --no-tagpending --no-fail --rename-head --token --token-file"
+ opts+=" --user --user-id --verbose --archived --build-timeout --avatar-path"
+ opts+=" --request-access"
+ local commands=" add_user check_repo checkout co create_repo del_repo"
+ commands+=" del_user group list_groups list_repos ls join push"
+ commands+=" fork forks merge_request merge_requests mr mrs"
+ commands+=" protect_branch protected_branches purge_cache push_repo"
+ commands+=" search search_group search_project search_user"
+ commands+=" update_repo update_safe update_user whoami last_ci_status ci"
+ commands+=" pipes pipelines schedules pipe pipeline schedule"
+ case "${prev}" in
+ --api-url) ;&
+ --desc-pattern) ;&
+ --irc-channel) ;&
+ --path) ;&
+ --group-id) ;&
+ --user-id)
+ COMPREPLY=()
+ ;;
+ *)
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $( compgen -W "$opts" -- $cur ) )
+ else
+ COMPREPLY=( $( compgen -W "$commands" -- $cur ) )
+ fi
+ ;;
+ esac
+ return 0
+}
+
+complete -F _salsa_completion salsa
diff --git a/scripts/salsa.pl b/scripts/salsa.pl
new file mode 100755
index 0000000..915c338
--- /dev/null
+++ b/scripts/salsa.pl
@@ -0,0 +1,1062 @@
+#!/usr/bin/perl
+
+=head1 NAME
+
+salsa - tool to manipulate salsa repositories and group members
+
+=head1 SYNOPSIS
+
+ # salsa <command> <args>
+ salsa whoami
+ salsa search_project devscripts
+ salsa search_project qa/qa
+ salsa search_group js-team
+ salsa search_group perl-team/modules
+ salsa search_user yadd
+ salsa push_repo . --group js-team --kgb --irc devscripts --tagpending
+ salsa update_repo node-mongodb --group js-team --disable-kgb --desc \
+ --desc-pattern "Package %p"
+ salsa update_repo js-team/node-mongodb --kgb --irc debian-js
+ salsa update_safe --all --desc --desc-pattern "Debian package %p" \
+ --group js-team
+ salsa checkout node-mongodb --group js-team
+ salsa checkout js-team/node-mongodb
+ salsa add_user developer foobar --group-id 2665
+ salsa update_user maintainer foobar --group js-team
+ salsa del_user foobar --group js-team
+ salsa last_ci_status js-team/nodejs
+ salsa pipelines js-team/nodejs
+
+=head1 DESCRIPTION
+
+B<salsa> is designed to create and configure repositories on
+L<https://salsa.debian.org> and manage users of groups.
+
+A Salsa token is required, except for search* commands, and must be set in
+command line I<(see below)>, or in your configuration file I<(~/.devscripts)>:
+
+ SALSA_TOKEN=abcdefghi
+
+or
+
+ SALSA_TOKEN=`cat ~/.token`
+
+or
+
+ SALSA_TOKEN_FILE=~/.dpt.conf
+
+If you choose to link another file using SALSA_TOKEN_FILE, it must contain a
+line with one of (no differences):
+
+ <anything>SALSA_PRIVATE_TOKEN=xxxx
+ <anything>SALSA_TOKEN=xxxx
+
+This allows for example to use dpt(1) configuration file (~/.dpt.conf) which
+contains:
+
+ DPT_SALSA_PRIVATE_TOKEN=abcdefghi
+
+=head1 COMMANDS
+
+=head2 Managing users and groups
+
+=over
+
+=item B<join>
+
+Request access to a group.
+
+ salsa join js-team
+ salsa join --group js-team
+ salsa join --group-id 1234
+
+=item B<add_user>
+
+Add a user to a group.
+
+ salsa --group js-group add_user guest foouser
+ salsa --group-id 1234 add_user guest foouser
+ salsa --group-id 1234 add_user maintainer 1245
+
+First argument is the GitLab's access levels: guest, reporter, developer,
+maintainer, owner.
+
+=item B<del_user>
+
+Remove a user from a group
+
+ salsa --group js-team del_user foouser
+ salsa --group-id=1234 del_user foouser
+
+=item B<list_groups>
+
+List sub groups of current one if group is set, groups of current user
+else.
+
+=item B<group>
+
+Show group members.
+
+ salsa --group js-team group
+ salsa --group-id 1234 group
+
+=item B<search_group>
+
+Search for a group using given string. Shows group id and other
+information.
+
+ salsa search_group perl-team
+ salsa search_group perl-team/modules
+ salsa search_group 2666
+
+=item B<search_user>
+
+Search for a user using given string. Shows user id and other information.
+
+ salsa search_user yadd
+
+=item B<update_user>
+
+Update user role in a group.
+
+ salsa --group-id 1234 update_user guest foouser
+ salsa --group js-team update_user maintainer 1245
+
+First argument is the GitLab's access levels: guest, reporter, developer,
+maintainer, owner.
+
+=item B<whoami>
+
+Gives information on the token owner
+
+ salsa whoami
+
+=back
+
+=head2 Managing repositories
+
+One of C<--group>, C<--group-id>, C<--user> or C<--user-id> is required to
+manage repositories. If both are set, salsa warns and only
+C<--user>/C<--user-id> is used. If none is given, salsa uses current user id
+I<(token owner)>.
+
+=over
+
+=item B<check_repo>
+
+Verify that repo(s) are well configured. It works exactly like B<update_repo>
+except that it does not modify anything but just lists projects not well
+configured with found errors.
+
+ salsa --user yadd --tagpending --kgb --irc=devscripts check_repo test
+ salsa --group js-team check_repo --all
+ salsa --group js-team --rename-head check_repo test1 test2 test3
+
+=item B<checkout> or B<co>
+
+Clone repo in current dir. If directory already
+exists, update local repo.
+
+ salsa --user yadd co devscripts
+ salsa --group js-team co node-mongodb
+ salsa co js-team/node-mongodb
+
+You can clone more than one repository or all repositories of a group or a
+user:
+
+ salsa --user yadd co devscripts autodep8
+ salsa co yadd/devscripts js-team/npm
+ salsa --group js-team co --all # All js-team active repos
+ salsa co --all-archived # All your repos including archived
+
+=item B<create_repo>
+
+Create public empty project. If C<--group>/C<--group-id> is set, project is
+created in group directory, else in user directory.
+
+ salsa --user yadd create_repo test
+ salsa --group js-team --kgb --irc-channel=devscripts create_repo test
+
+=item B<del_repo>
+
+Delete a repository.
+
+=item B<fork>
+
+Forks a project in group/user repository and set "upstream" to original
+project. Example:
+
+ $ salsa fork js-team/node-mongodb --verbose
+ ...
+ salsa.pl info: node-mongodb ready in node-mongodb/
+ $ cd node-mongodb
+ $ git remote --verbose show
+ origin git@salsa.debian.org:me/node-mongodb (fetch)
+ origin git@salsa.debian.org:me/node-mongodb (push)
+ upstream git@salsa.debian.org:js-team/node-mongodb (fetch)
+ upstream git@salsa.debian.org:js-team/node-mongodb (push)
+
+For a group:
+
+ salsa fork --group js-team user/node-foo
+
+=item B<forks>
+
+List forks of project(s).
+
+ salsa forks qa/qa debian/devscripts
+
+Project can be set using full path or using B<--group>/B<--group-id> or
+B<--user>/B<--user-id>, else it is searched in current user namespace.
+
+=item B<push>
+
+Push relevant packaging refs to origin Git remote. To be run from packaging
+working directory.
+
+ salsa push
+
+It pushes the following refs to the configured remote for the debian-branch or,
+falling back, to the "origin" remote:
+
+=over
+
+=item "master" branch (or whatever is set to debian-branch in gbp.conf)
+
+=item "upstream" branch (or whatever is set to upstream-branch in gbp.conf)
+
+=item "pristine-tar" branch
+
+=item tags named "debian/*" (or whatever is set to debian-tag in gbp.conf)
+
+=item tags named "upstream/*" (or whatever is set to upstream-tag in gbp.conf)
+
+=item all tags, if the package's source format is "3.0 (native)"
+
+=back
+
+=item B<ls> or B<list_repos>
+
+Shows projects owned by user or group. If second
+argument exists, search only matching projects
+
+ salsa --group js-team list_repos
+ salsa --user yadd list_repos foo*
+
+=item B<last_ci_status> or B<ci>
+
+Displays last continuous integration result. Use B<--verbose> to see
+URL of pipeline when result isn't B<success>. Unless B<--no-fail> is set,
+B<salsa last_ci_status> will stop on first "failed" status.
+
+ salsa --group js-team last_ci_status --all --no-fail
+ salsa --user yadd last_ci_status foo
+ salsa last_ci_status js-team/nodejs
+
+This commands returns the number of "failed" status found. "success" entries
+are displayed using STDOUT while other are displayed I<(with details)> using
+STDERR. Then you can easily see only failures using:
+
+ salsa --group js-team last_ci_status --all --no-fail >/dev/null
+
+=item B<pipeline>, B<schedule>
+
+Control pipeline schedule
+
+=item B<pipelines>, B<schedules>
+
+Lists current pipeline schedule items.
+
+You can use B<--no-fail> and B<--all> options here.
+
+=item B<merge_request>, B<mr>
+
+Creates a merge request.
+
+Suppose you created a fork using B<salsa fork>, modify some things in a new
+branch using one commit and want to propose it to original project
+I<(branch "master")>. You just have to launch this in source directory:
+
+ salsa mr
+
+Other example:
+
+ salsa mr --mr-dst-project debian/foo --mr-dst-branch debian/master
+
+or simply
+
+ salsa mr debian/foo debian/master
+
+Note that unless destination project has been set using command line,
+B<salsa merge_request> will search it in the following order:
+
+=over 4
+
+=item using GitLab API: salsa will detect from where this project was forked
+
+=item using "upstream" origin
+
+=item else salsa will use source project as destination project
+
+=back
+
+To force salsa to use source project as destination project, you can use
+"same":
+
+ salsa mr --mr-dst-project same
+ # or
+ salsa mr same
+
+New merge request will be created using last commit title and description.
+
+See B<--mr-*> options for more.
+
+=item B<merge_requests>, B<mrs>
+
+List opened merge requests for project(s)
+
+ salsa mrs qa/qa debian/devscripts
+
+Project can be set using full path or using B<--group>/B<--group-id> or
+B<--user>/B<--user-id>, else it is searched in current user namespace.
+
+=item B<protect_branch>
+
+Protect/unprotect a branch.
+
+=over
+
+=item Set protection
+
+ # project branch merge push
+ salsa --group js-team protect_branch node-mongodb master m d
+
+"merge" and "push" can be one of:
+
+=over
+
+=item B<o>, B<owner>: owner only
+
+=item B<m>, B<maintainer>: B<o> + maintainers allowed
+
+=item B<d>, B<developer>: B<m> + developers allowed
+
+=item B<r>, B<reporter>: B<d> + reporters allowed
+
+=item B<g>, B<guest>: B<r> + guest allowed
+
+=back
+
+=item Unprotect
+
+ salsa --group js-team protect_branch node-mongodb master no
+
+=back
+
+=item B<protected_branches>
+
+List protected branches
+
+ salsa --group js-team protected_branches node-mongodb
+
+=item B<push_repo>
+
+Create a new project from a local Debian source directory configured with
+git.
+
+B<push_repo> executes the following steps:
+
+=over
+
+=item gets project name using debian/changelog file;
+
+=item launches B<git remote add upstream ...>;
+
+=item launches B<create_repo>;
+
+=item pushes local repo.
+
+=back
+
+Examples:
+
+ salsa --user yadd push_repo ./test
+ salsa --group js-team --kgb --irc-channel=devscripts push_repo .
+
+=item B<rename_branch>
+
+Rename branch given in B<--source-branch> with name given in B<--dest-branch>.
+You can use B<--no-fail>, B<--all> and B<--all-archived> options here.
+
+=item B<search>, B<search_project>, B<search_repo>
+
+Search for a project using given string. Shows name, owner id and other
+information.
+
+ salsa search devscripts
+ salsa search debian/devscripts
+ salsa search 18475
+
+=item B<update_repo>
+
+Configure repo(s) using parameters given to command line.
+A repo name has to be given unless B<--all> or B<--all-archived> is set. Prefer to use
+B<update_safe>.
+
+ salsa --user yadd --tagpending --kgb --irc=devscripts update_repo test
+ salsa --group js-team update_repo --all
+ salsa --group js-team --rename-head update_repo test1 test2 test3
+ salsa update_repo js-team/node-mongodb --kgb --irc debian-js
+
+By default when using B<--all>, salsa will fail on first error. If you want
+to continue, set B<--no-fail>. In this case, salsa will display a warning for
+each project that has fail but continue with next project. Then to see full
+errors, set B<--verbose>.
+
+=item B<update_safe>
+
+Launch B<check_repo> and ask before launching B<update_repo> (unless B<--yes>).
+
+ salsa --user yadd --tagpending --kgb --irc=devscripts update_safe test
+ salsa --group js-team update_safe --all
+ salsa --group js-team --rename-head update_safe test1 test2 test3
+ salsa update_safe js-team/node-mongodb --kgb --irc debian-js
+
+=back
+
+=head2 Other
+
+=over
+
+=item B<purge_cache>
+
+Empty local cache.
+
+=back
+
+=head1 OPTIONS
+
+=head2 General options
+
+=over
+
+=item B<-C>, B<--chdir>
+
+Change directory before launching command
+
+ salsa -C ~/debian co debian/libapache2-mod-fcgid
+
+=item B<--cache-file>
+
+File to store cached values. Default to B<~/.cache/salsa.json>. An empty value
+disables cache.
+
+C<.devscripts> value: B<SALSA_CACHE_FILE>
+
+=item B<--no-cache>
+
+Disable cache usage. Same as B<--cache-file ''>
+
+=item B<--conffile>, B<--conf-file>
+
+Add or replace default configuration files (C</etc/devscripts.conf> and
+C<~/.devscripts>). This can only be used as the first option given on the
+command-line.
+
+=over
+
+=item replace:
+
+ salsa --conf-file test.conf <command>...
+ salsa --conf-file test.conf --conf-file test2.conf <command>...
+
+=item add:
+
+ salsa --conf-file +test.conf <command>...
+ salsa --conf-file +test.conf --conf-file +test2.conf <command>...
+
+If one B<--conf-file> has no C<+>, default configuration files are ignored.
+
+=back
+
+=item B<--no-conf>, B<--noconf>
+
+Don't read any configuration files. This can only be used as the first option
+given on the command-line.
+
+=item B<--debug>
+
+Enable debugging output
+
+=item B<--group>
+
+Team to use. Use C<salsa search_group name> to find it.
+
+If you want to use a subgroup, you have to set its full path:
+
+ salsa --group perl-team/modules/packages check_repo lemonldap-ng
+
+C<.devscripts> value: B<SALSA_GROUP>
+
+Be careful when you use B<SALSA_GROUP> in your C<.devscripts> file. Every
+B<salsa> command will be executed in group space, for example if you want to
+propose a little change in a project using B<salsa fork> + B<salsa mr>, this
+"fork" will be done in group space unless you set a B<--user>/B<--user-id>.
+Prefer to use an alias in your C<.bashrc> file. Example:
+
+ alias jsteam_admin="salsa --group js-team"
+
+or
+
+ alias jsteam_admin="salsa --conf-file ~/.js.conf
+
+or to use both .devscripts and .js.conf:
+
+ alias jsteam_admin="salsa --conf-file +~/.js.conf
+
+then you can fix B<SALSA_GROUP> in C<~/.js.conf>
+
+To enable bash completion for your alias, add this in your .bashrc file:
+
+ _completion_loader salsa
+ complete -F _salsa_completion jsteam_admin
+
+=item B<--group-id>
+
+Group id to use. Use C<salsa search_group name> to find it.
+
+C<.devscripts> value: B<SALSA_GROUP_ID>
+
+Be careful when you use B<SALSA_GROUP_ID> in your C<.devscripts> file. Every
+B<salsa> command will be executed in group space, for example if you want to
+propose a little change in a project using B<salsa fork> + B<salsa mr>, this
+"fork" will be done in group space unless you set a B<--user>/B<--user-id>.
+Prefer to use an alias in your C<.bashrc> file. Example:
+
+ alias jsteam_admin="salsa --group-id 2666"
+
+or
+
+ alias jsteam_admin="salsa --conf-file ~/.js.conf
+
+then you can fix B<SALSA_GROUP_ID> in C<~/.js.conf>
+
+=item B<--help>: displays this manpage
+
+=item B<-i>, B<--info>
+
+Prompt before sensible changes.
+
+C<.devscripts> value: B<SALSA_INFO> (yes/no)
+
+=item B<--path>
+
+Repo path. Default to group or user path.
+
+C<.devscripts> value: B<SALSA_REPO_PATH>
+
+=item B<--token>
+
+Token value (see above).
+
+=item B<--token-file>
+
+File to find token (see above).
+
+=item B<--user>
+
+Username to use. If neither B<--group>, B<--group-id>, B<--user> or B<--user-id>
+is set, salsa uses current user id (corresponding to salsa private token).
+
+=item B<--user-id>
+
+User id to use. Use C<salsa search_user name> to find one. If neither
+B<--group>, B<--group-id>, B<--user> or B<--user-id> is set, salsa uses current
+user id (corresponding to salsa private token).
+
+C<.devscripts> value: B<SALSA_USER_ID>
+
+=item B<--verbose>
+
+Enable verbose output.
+
+=item B<--yes>
+
+Never ask for consent.
+
+C<.devscripts> value: B<SALSA_YES> (yes/no)
+
+=back
+
+=head2 List/search repo options
+
+=over
+
+=item B<--archived>, B<--no-archived>
+
+Instead of looking to active projects, list or search in archived projects.
+Note that you can't have both archived and unarchived projects in the same
+request. Default: no I<(ie --no-archived)>.
+
+C<.devscripts> value: B<SALSA_ARCHIVED> (yes/no)
+
+=back
+
+=head2 Update/create repo options
+
+=over
+
+=item B<--all>, B<--all-archived>
+
+When set, all projects of group/user are affected by command.
+B<--all> will filter all active projects, whereas B<--all-archived> will
+include active and archived projects.
+
+=over
+
+=item B<--skip>: ignore project with B<--all> or B<--all-achived>. Example:
+
+ salsa update_repo --tagpending --all --skip qa --skip devscripts
+
+C<.devscripts> value: B<SALSA_SKIP>. To set multiples values, use spaces.
+Example
+
+ SALSA_SKIP=qa devscripts
+
+=item B<--skip-file>: ignore projects in this file (1 project per line)
+
+ salsa update_repo --tagpending --all --skip-file ~/.skip
+
+C<.devscripts> value: B<SALSA_SKIP_FILE>
+
+=back
+
+=item B<--build-timeout>
+
+The maximum amount of time, in seconds, that a job can run.
+
+Default: 3600 (60 minutes)
+
+ salsa update_safe myrepo --build-timeout 3600
+
+C<.devscripts> value: B<SALSA_BUILD_TIMEOUT>
+
+=item B<--avatar-path>
+
+Path to an image for the project's avatar.
+If path value contains "%p", it is replaced by project name.
+
+C<.devscripts> value: B<SALSA_AVATAR_PATH>
+
+=item B<--ci-config-path>
+
+Configure configuration file path of GitLab CI. Default: empty. Example:
+
+ salsa update_safe --ci-config-path recipes/debian.yml@salsa-ci-team/pipeline debian/devscripts
+
+C<.devscripts> value: B<SALSA_CI_CONFIG_PATH>
+
+=item B<--desc>, B<--no-desc>
+
+Configure repo description using pattern given in B<desc-pattern>
+
+C<.devscripts> value: B<SALSA_DESC> (yes/no)
+
+=item B<--desc-pattern>
+
+Repo description pattern. Default to "Debian package %p". "%p" is replaced by
+repo name, while "%P" is replaced by repo name given in command (may contains
+full path).
+
+C<.devscripts> value: B<SALSA_DESC_PATTERN>
+
+=item B<--email>, B<--no-email>, B<--disable-email>
+
+Enable, ignore or disable email-on-push.
+
+C<.devscripts> value: B<SALSA_EMAIL> (yes/ignore/no, default: ignore)
+
+=item B<--email-recipient>
+
+Email-on-push recipient. Can be multi valued:
+
+ $ salsa update_safe myrepo \
+ --email-recipient foo@foobar.org \
+ --email-recipient bar@foobar.org
+
+If recipient value contains "%p", it is replaced by project name.
+
+C<.devscripts> value: B<SALSA_EMAIL_RECIPIENTS> (use spaces to separate
+multiples recipients)
+
+=item B<--issues>
+
+Set issues feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_ISSUES> (yes/private/no, default: yes)
+
+=item B<--repo>
+
+Set repository feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_REPO> (yes/private/no, default: yes)
+
+=item B<--mr>
+
+Set merge requests feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_MR> (yes/private/no, default: yes)
+
+=item B<--forks>, B<--forks-mr>
+
+Set forking a repository feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_FORKS> (yes/private/no, default: yes)
+
+=item B<--lfs>
+
+Set Large File Storage (LFS) feature.
+
+C<.devscripts> values: B<SALSA_ENABLE_LFS> (yes/no, default: yes)
+
+=item B<--packages>
+
+Set packages feature.
+
+C<.devscripts> values: B<SALSA_ENABLE_PACKAGING> (yes/no, default: yes)
+
+=item B<--jobs>
+
+Set jobs feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_JOBS> (yes/private/no, default: yes)
+
+=item B<--container>
+
+Set container feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_CONTAINER> (yes/private/no, default: yes)
+
+=item B<--analytics>
+
+Set analytics feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_ANALYTICS> (yes/private/no, default: yes)
+
+=item B<--requirements>
+
+Set requirements feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_REQUIREMENTS> (yes/private/no, default: yes)
+
+=item B<--wiki>
+
+Set wiki feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_WIKI> (yes/private/no, default: yes)
+
+=item B<--snippets>
+
+Set snippets feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_SNIPPETS> (yes/private/no, default: yes)
+
+=item B<--pages>
+
+Set pages feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_PAGES> (yes/private/no, default: yes)
+
+=item B<--releases>
+
+Set releases feature with permissions.
+
+C<.devscripts> values: B<SALSA_ENABLE_RELEASES> (yes/private/no, default: yes)
+
+=item B<--auto-devops>
+
+Set auto devops feature.
+
+C<.devscripts> values: B<SALSA_ENABLE_AUTO_DEVOPS> (yes/no, default: yes)
+
+=item B<--request-acc>
+
+Set request access feature.
+
+C<.devscripts> values: B<SALSA_ENABLE_REQUEST_ACC> (yes/no, default: yes)
+
+=item B<--enable-remove-source-branch>, B<--disable-remove-source-branch>
+
+Enable or disable deleting source branch option by default for all new merge
+requests.
+
+C<.devscripts> values: B<SALSA_REMOVE_SOURCE_BRANCH> (yes/no, default: yes)
+
+=item B<--irc-channel>
+
+IRC channel for KGB or Irker. Can be used more than one time only with
+B<--irker>.
+
+B<Important>: channel must not include the first "#". If salsa finds a channel
+starting with "#", it will consider that the channel starts with 2 "#"!
+
+C<.devscript> value: B<SALSA_IRC_CHANNEL>.
+
+Multiple values must be space separated.
+
+Since configuration files are read using B<sh>, be careful when using "#": you
+must enclose the channel with quotes, else B<sh> will consider it as a comment
+and will ignore this value.
+
+=item B<--irker>, B<--no-irker>, B<--disable-irker>
+
+Enable, ignore or disable Irker service
+
+C<.devscripts> values: B<SALSA_IRKER> (yes/ignore/no, default: ignore)
+
+=item B<--irker-host>
+
+Irker host. Default: ruprecht.snow-crash.org
+
+C<.devscripts> value: B<SALSA_IRKER_HOST>
+
+=item B<--irker-port>
+
+Irker port. Default: empty (default value)
+
+C<.devscripts> value: B<SALSA_IRKER_PORT>
+
+=item B<--kgb>, B<--no-kgb>, B<--disable-kgb>
+
+Enable, ignore or disable KGB webhook.
+
+C<.devscripts> value: B<SALSA_KGB> (yes/ignore/no, default: ignore)
+
+=item B<--kgb-options>
+
+List of KGB enabled options (comma separated). Default: issues_events,
+merge_requests_events, note_events, pipeline_events, push_events,
+tag_push_events, wiki_page_events, enable_ssl_verification
+
+ $ salsa update_safe debian/devscripts --kgb --irc-channel devscripts \
+ --kgb-options 'merge_requests_events,issues_events,enable_ssl_verification'
+
+List of available options: confidential_comments_events,
+confidential_issues_events, confidential_note_events, enable_ssl_verification,
+issues_events, job_events, merge_requests_events, note_events, pipeline_events,
+tag_push_events, wiki_page_events
+
+C<.devscripts> value: B<SALSA_KGB_OPTIONS>
+
+=item B<--no-fail>
+
+Don't stop on error when using B<update_repo> with B<--all> or B<--all-archived>.
+
+C<.devscripts> value: B<SALSA_NO_FAIL> (yes/no)
+
+=item B<--request-access>
+
+Allow users to request member access.
+
+C<.devscripts> value: B<SALSA_REQUEST_ACCESS> (yes/no)
+
+=item B<--rename-head>, B<--no-rename-head>
+
+Rename HEAD branch given by B<--source-branch> into B<--dest-branch> and change
+"default branch" of project. Works only with B<update_repo>.
+
+C<.devscripts> value: B<SALSA_RENAME_HEAD> (yes/no)
+
+=over
+
+=item B<--source-branch>: default "master"
+
+C<.devscripts> value: B<SALSA_SOURCE_BRANCH>
+
+=item B<--dest-branch>: default "debian/master"
+
+C<.devscripts> value: B<SALSA_DEST_BRANCH>
+
+=back
+
+=item B<--tagpending>, B<--no-tagpending>, B<--disable-tagpending>
+
+Enable, ignore or disable "tagpending" webhook.
+
+C<.devscripts> value: B<SALSA_TAGPENDING> (yes/ignore/no, default: ignore)
+
+=back
+
+=head2 Pipeline schedules
+
+=over
+
+=item B<--schedule-desc>
+
+Description of the pipeline schedule.
+
+=item B<--schedule-ref>
+
+Branch or tag name that is triggered.
+
+=item B<--schedule-cron>
+
+Cron schedule, for example: 0 1 * * *.
+
+=item B<--schedule-tz>
+
+Time zone to run cron schedule. Default: UTC
+
+=item B<--schedule-enable>, B<--schedule-disable>
+
+Enable/disable the pipeline schedule to run. Default: disabled
+
+=item B<--schedule-run>
+
+Trigger B<--schedule-desc> scheduled pipeline to run immediately. Default:
+
+=item B<--schedule-delete>
+
+Delete B<--schedule-desc> pipeline schedule
+
+=back
+
+=head2 Merge requests options
+
+=over
+
+=item B<--mr-title>
+
+Title for merge request. Default: last commit title.
+
+=item B<--mr-desc>
+
+Description of new MR. Default:
+
+=over
+
+=item empty if B<--mr-title> is set
+
+=item last commit description if any
+
+=back
+
+=item B<--mr-dst-branch> (or second command line argument)
+
+Destination branch. Default to "master".
+
+=item B<--mr-dst-project> (or first command line argument)
+
+Destination project. Default: project from which the current project was
+forked; or, if not found, "upstream" value found using
+B<git remote --verbose show>; or using source project.
+
+If B<--mr-dst-project> is set to B<same>, salsa will use source project as
+destination.
+
+=item B<--mr-src-branch>
+
+Source branch. Default: current branch.
+
+=item B<--mr-src-project>
+
+Source project. Default: current project found using
+B<git remote --verbose show>.
+
+=item B<--mr-allow-squash>, B<--no-mr-allow-squash>
+
+Allow upstream project to squash your commits, this is the default.
+
+C<.devscripts> value: B<SALSA_MR_ALLOW_SQUASH> (yes/no)
+
+=item B<--mr-remove-source-branch>, B<--no-mr-remove-source-branch>
+
+Remove source branch if merge request is accepted. Default: no.
+
+C<.devscripts> value: B<SALSA_MR_REMOVE_SOURCE_BRANCH> (yes/no)
+
+=back
+
+=head2 Options to manage other Gitlab instances
+
+=over
+
+=item B<--api-url>
+
+GitLab API. Default: L<https://salsa.debian.org/api/v4>.
+
+C<.devscripts> value: B<SALSA_API_URL>
+
+=item B<--git-server-url>
+
+Default to "git@salsa.debian.org:"
+
+C<.devscripts> value: B<SALSA_GIT_SERVER_URL>
+
+=item B<--irker-server-url>
+
+Default to "ircs://irc.oftc.net:6697/"
+
+C<.devscripts> value: B<SALSA_IRKER_SERVER_URL>
+
+=item B<--kgb-server-url>
+
+Default to L<http://kgb.debian.net:9418/webhook/?channel=>
+
+C<.devscripts> value: B<SALSA_KGB_SERVER_URL>
+
+=item B<--tagpending-server-url>
+
+Default to L<https://webhook.salsa.debian.org/tagpending/>
+
+C<.devscripts> value: B<SALSA_TAGPENDING_SERVER_URL>
+
+=back
+
+=head3 Configuration file example
+
+Example to use salsa with L<https://gitlab.ow2.org> (group "lemonldap-ng"):
+
+ SALSA_TOKEN=`cat ~/.ow2-gitlab-token`
+ SALSA_API_URL=https://gitlab.ow2.org/api/v4
+ SALSA_GIT_SERVER_URL=git@gitlab.ow2.org:
+ SALSA_GROUP_ID=34
+
+Then to use it, add something like this in your C<.bashrc> file:
+
+ alias llng_admin='salsa --conffile ~/.salsa-ow2.conf'
+
+=head1 SEE ALSO
+
+B<dpt-salsa>
+
+=head1 AUTHOR
+
+Xavier Guimard E<lt>yadd@debian.orgE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2018, Xavier Guimard E<lt>yadd@debian.orgE<gt>
+
+It contains code formerly found in L<dpt-salsa> I<(pkg-perl-tools)>
+copyright 2018, gregor herrmann E<lt>gregoa@debian.orgE<gt>.
+
+This library 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 L<http://www.gnu.org/licenses/>.
+
+=cut
+
+use Devscripts::Salsa;
+
+exit Devscripts::Salsa->new->run;
+
diff --git a/scripts/setup.py b/scripts/setup.py
new file mode 100755
index 0000000..67caad5
--- /dev/null
+++ b/scripts/setup.py
@@ -0,0 +1,52 @@
+#!/usr/bin/python3
+
+import pathlib
+import re
+
+from setuptools import setup
+
+from devscripts.test import SCRIPTS
+
+
+def get_debian_version() -> str:
+ """Determine the Debian package version from debian/changelog."""
+ changelog = pathlib.Path(__file__).parent.parent / "debian" / "changelog"
+ with changelog.open(encoding="utf8") as f:
+ head = f.readline()
+ match = re.match(r".*\((.*)\).*", head)
+ assert match, f"Failed to extract version from '{head}'."
+ return match.group(1)
+
+
+def make_pep440_compliant(version: str) -> str:
+ """Convert the version into a PEP440 compliant version."""
+ public_version_re = re.compile(
+ r"^([0-9][0-9.]*(?:(?:a|b|rc|.post|.dev)[0-9]+)*)\+?"
+ )
+ _, public, local = public_version_re.split(version, maxsplit=1)
+ if not local:
+ return version
+ sanitized_local = re.sub("[+~]+", ".", local).strip(".")
+ pep440_version = f"{public}+{sanitized_local}"
+ assert re.match(
+ "^[a-zA-Z0-9.]+$", sanitized_local
+ ), f"'{pep440_version}' not PEP440 compliant"
+ return pep440_version
+
+
+def write_version(version: str) -> None:
+ """Write version into devscripts/__init__.py."""
+ init_py = pathlib.Path(__file__).parent / "devscripts" / "__init__.py"
+ init_py.write_text(f'__version__ = "{version}"\n', encoding="utf-8")
+
+
+if __name__ == "__main__":
+ VERSION = make_pep440_compliant(get_debian_version())
+ write_version(VERSION)
+ setup(
+ name="devscripts",
+ version=VERSION,
+ scripts=SCRIPTS,
+ packages=["devscripts"],
+ test_suite="devscripts.test",
+ )
diff --git a/scripts/suspicious-source b/scripts/suspicious-source
new file mode 100755
index 0000000..24cdf1c
--- /dev/null
+++ b/scripts/suspicious-source
@@ -0,0 +1,177 @@
+#!/usr/bin/python3
+
+# Copyright (c) 2010-2018, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+# pylint: disable=invalid-name
+# pylint: enable=invalid-name
+
+import argparse
+import os
+import sys
+
+from devscripts.logger import Logger
+
+try:
+ import magic
+except ImportError:
+ Logger.error("Please install 'python3-magic' in order to use this utility.")
+ sys.exit(1)
+
+DEFAULT_WHITELISTED_MIMETYPES = [
+ "application/pgp-keys",
+ "application/vnd.font-fontforge-sfd", # font source: fontforge
+ "application/x-elc",
+ "application/x-empty",
+ "application/x-font-otf", # font object and source
+ "application/x-font-ttf", # font object and source
+ "application/x-font-woff", # font object and source
+ "application/x-symlink",
+ "application/xml",
+ "audio/x-wav",
+ "font/otf", # font object and source
+ "font/ttf", # font object and source
+ "image/gif",
+ "image/jpeg",
+ "image/png",
+ "image/svg+xml",
+ "image/tiff",
+ "image/vnd.adobe.photoshop",
+ "image/x-icns",
+ "image/x-ico",
+ "image/x-icon",
+ "image/x-ms-bmp",
+ "image/x-portable-pixmap",
+ "image/x-xpmi",
+ "inode/symlink",
+ "inode/x-empty",
+ "message/rfc822",
+ "text/html",
+ "text/plain",
+ "text/rtf",
+ "text/troff",
+ "text/x-asm",
+ "text/x-c",
+ "text/x-c++",
+ "text/x-diff",
+ "text/x-fortran",
+ "text/x-java",
+ "text/x-lisp",
+ "text/x-m4",
+ "text/x-makefile",
+ "text/x-msdos-batch",
+ "text/x-pascal",
+ "text/x-perl",
+ "text/x-php",
+ "text/x-po",
+ "text/x-ruby",
+ "text/x-script.python",
+ "text/x-shellscript",
+ "text/x-tex",
+ "text/x-texinfo",
+ "text/xml",
+]
+
+DEFAULT_WHITELISTED_EXTENSIONS = [
+ ".el", # elisp source files
+ ".fea", # font source format: Adobe Font Development Kit for OpenType
+ ".fog", # font source format: Fontographer
+ ".g2n", # font source format: fontforge
+ ".gdh", # font source format: Graphite (headers)
+ ".gdl", # font source format: Graphite
+ ".glyph", # font source format: cross-toolkit UFO
+ ".gmo", # GNU Machine Object File (for translations with gettext)
+ ".icns", # Apple Icon Image format
+ ".java", # Java source files
+ ".plate", # font source format: Spiro
+ ".rsa",
+ ".sfd", # font source format: fontforge
+ ".sfdir", # font source format: fontforge
+ ".ttx", # font source format: fonttools
+ ".ufo", # font source format: cross-toolkit UFO
+ ".vfb", # font source format: FontLab
+ ".vtp", # font source format: OpenType (VOLT)
+ ".xgf", # font source format: Xgridfit
+]
+
+
+def suspicious_source(
+ whitelisted_mimetypes, whitelisted_extensions, directory, verbose=False
+):
+ magic_cookie = magic.open(magic.MAGIC_MIME_TYPE)
+ magic_cookie.load()
+
+ for root, dirs, files in os.walk(directory):
+ for _file in files:
+ mimetype = magic_cookie.file(os.path.join(root, _file))
+ if mimetype not in whitelisted_mimetypes:
+ if not [x for x in whitelisted_extensions if _file.lower().endswith(x)]:
+ output = os.path.join(root, _file)
+ if verbose:
+ output += " (" + mimetype + ")"
+ print(output)
+ for vcs_dir in (".bzr", "CVS", ".git", ".svn", ".hg", "_darcs"):
+ if vcs_dir in dirs:
+ dirs.remove(vcs_dir)
+
+
+def main():
+ script_name = os.path.basename(sys.argv[0])
+ epilog = f"See {script_name}(1) for more info."
+ parser = argparse.ArgumentParser(epilog=epilog)
+
+ parser.add_argument(
+ "-v",
+ "--verbose",
+ help="print more information",
+ dest="verbose",
+ action="store_true",
+ default=False,
+ )
+ parser.add_argument(
+ "-d",
+ "--directory",
+ help="check the files in the specified directory",
+ dest="directory",
+ default=".",
+ )
+ parser.add_argument(
+ "-m",
+ "--mimetype",
+ metavar="MIMETYPE",
+ help="Add MIMETYPE to list of whitelisted mimetypes.",
+ dest="whitelisted_mimetypes",
+ action="append",
+ default=DEFAULT_WHITELISTED_MIMETYPES,
+ )
+ parser.add_argument(
+ "-e",
+ "--extension",
+ metavar="EXTENSION",
+ help="Add EXTENSION to list of whitelisted extensions.",
+ dest="whitelisted_extensions",
+ action="append",
+ default=DEFAULT_WHITELISTED_EXTENSIONS,
+ )
+
+ args = parser.parse_args()
+
+ whitelisted_extensions = [x.lower() for x in args.whitelisted_extensions]
+ suspicious_source(
+ args.whitelisted_mimetypes, whitelisted_extensions, args.directory, args.verbose
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/svnpath.pl b/scripts/svnpath.pl
new file mode 100755
index 0000000..f2fc8f9
--- /dev/null
+++ b/scripts/svnpath.pl
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+
+=head1 NAME
+
+svnpath - output svn url with support for tags and branches
+
+=head1 SYNOPSIS
+
+B<svnpath>
+
+B<svnpath tags>
+
+B<svnpath branches>
+
+B<svnpath trunk>
+
+=head1 DESCRIPTION
+
+B<svnpath> is intended to be run in a Subversion working copy.
+
+In its simplest usage, B<svnpath> with no parameters outputs the svn url for
+the repository associated with the working copy.
+
+If a parameter is given, B<svnpath> attempts to instead output the url that
+would be used for the tags, branches, or trunk. This will only work if it's
+run in the top-level directory that is subject to tagging or branching.
+
+For example, if you want to tag what's checked into Subversion as version
+1.0, you could use a command like this:
+
+ svn cp $(svnpath) $(svnpath tags)/1.0
+
+That's much easier than using svn info to look up the repository url and
+manually modifying it to derive the url to use for the tag, and typing in
+something like this:
+
+ svn cp svn+ssh://my.server.example/svn/project/trunk svn+ssh://my.server.example/svn/project/tags/1.0
+
+svnpath uses a simple heuristic to convert between the trunk, tags, and
+branches paths. It replaces the first occurrence of B<trunk>, B<tags>, or
+B<branches> with the name of what you're looking for. This will work ok for
+most typical Subversion repository layouts.
+
+If you have an atypical layout and it does not work, you can add a
+F<~/.svnpath> file. This file is perl code, which can modify the path in $url.
+For example, the author uses this file:
+
+ #!/usr/bin/perl
+ # svnpath personal override file
+
+ # For d-i I sometimes work from a full d-i tree branch. Remove that from
+ # the path to get regular tags or branches directories.
+ $url=~s!d-i/(rc|beta)[0-9]+/!!;
+ $url=~s!d-i/sarge/!!;
+ 1
+
+=cut
+
+use File::HomeDir;
+
+$ENV{LANG} = "C";
+
+my $wanted = shift;
+my $path = shift;
+
+if (length $path) {
+ chdir $path || die "$path: unreadable\n";
+}
+
+our $url = `svn info . 2>/dev/null|grep -i ^URL: | cut -d ' ' -f 2`;
+if (!length $url) {
+ # Try svk instead.
+ $url = `svk info .| grep -i '^Depot Path:' | cut -d ' ' -f 3`;
+}
+
+if (!length $url) {
+ die "cannot get url";
+}
+
+if (length $wanted) {
+ # Now jut substitute into it.
+ $url =~ s!/(?:trunk|branches|tags)($|/)!/$wanted$1!;
+
+ my $svnpath = File::HomeDir->my_home . "/.svnpath";
+ if (-e $svnpath) {
+ require $svnpath;
+ }
+}
+
+print $url;
+
+=head1 LICENSE
+
+GPL version 2 or later
+
+=head1 AUTHOR
+
+Joey Hess <joey@kitenet.net>
+
+=cut
diff --git a/scripts/tagpending.pl b/scripts/tagpending.pl
new file mode 100755
index 0000000..910e580
--- /dev/null
+++ b/scripts/tagpending.pl
@@ -0,0 +1,437 @@
+#!/usr/bin/perl
+#
+# tagpending: Parse a Debian changelog for a list of bugs closed
+# and tag any that are not already pending as such.
+#
+# The original shell version of tagpending was written by Joshua Kwan
+# and is Copyright 2004 Joshua Kwan <joshk@triplehelix.org>
+# with changes copyright 2004-07 by their respective authors.
+#
+# This version is
+# Copyright 2008 Adam D. Barratt
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use strict;
+use warnings;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use File::Basename;
+use Dpkg::Changelog::Parse qw(changelog_parse);
+use Devscripts::Debbugs;
+
+sub bugs_info;
+
+my $progname = basename($0);
+
+my ($opt_help, $opt_version, $opt_verbose, $opt_noact, $opt_silent);
+my ($opt_online, $opt_confirm, %opt_to, $opt_wnpp, $opt_comments);
+my $opt_interactive;
+
+# Default options
+$opt_silent = 0;
+$opt_verbose = 0;
+$opt_online = 1;
+$opt_noact = 0;
+$opt_confirm = 0;
+$opt_wnpp = 0;
+%opt_to = ();
+$opt_comments = 1;
+$opt_interactive = 0;
+
+GetOptions(
+ "help|h" => \$opt_help,
+ "version" => \$opt_version,
+ "verbose|v!" => \$opt_verbose,
+ "noact|n" => \$opt_noact,
+ "comments!" => \$opt_comments,
+ "silent|s" => \$opt_silent,
+ "force|f" => sub { $opt_online = 0; },
+ "confirm|c" => \$opt_confirm,
+ "to|t=s" => sub { $opt_to{'-v'} = $_[1] },
+ "wnpp|w" => \$opt_wnpp,
+ "interactive|i" => \$opt_interactive,
+ )
+ or die "Usage: $progname [options]\nRun $progname --help for more details\n";
+
+if ($opt_help) {
+ help();
+ exit 0;
+} elsif ($opt_version) {
+ version();
+ exit 0;
+}
+
+if ($opt_verbose and $opt_silent) {
+ die "$progname error: --silent and --verbose contradict each other\n";
+}
+
+=head1 NAME
+
+tagpending - tags bugs that are to be closed in the latest changelog as pending
+
+=head1 SYNOPSIS
+
+B<tagpending> [I<options>]
+
+=head1 DESCRIPTION
+
+B<tagpending> parses debian/changelog to determine
+which bugs would be closed if the package were uploaded. Each bug is
+then marked as pending, using B<bts>(1) if it is not already so.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-n>, B<--noact>
+
+Check whether any bugs require tagging, but do not actually do so.
+
+=item B<-s>, B<--silent>
+
+Do not output any messages.
+
+=item B<-v>, B<--verbose>
+
+List each bug checked and tagged in turn.
+
+=item B<-f>, B<--force>
+
+Do not query the BTS, but (re)tag all bugs closed in the changelog.
+
+=item B<--comments>
+
+Include the changelog header line and the entries relating to the tagged
+bugs as comments in the generated mail. This is the default.
+
+Note that when used in combination with B<--to>, the header line output
+will always be that of the most recent version.
+
+=item B<--no-comments>
+
+Do not include changelog entries in the generated mail.
+
+=item B<-c>, B<--confirm>
+
+Tag bugs as both confirmed and pending.
+
+=item B<-t>, B<--to> I<version>
+
+Parse changelogs for all versions strictly greater than I<version>.
+
+Equivalent to B<dpkg-parsechangelog>'s B<-v> option.
+
+=item B<-i>, B<--interactive>
+
+Display the message which would be sent to the BTS and, except when
+B<--noact> was used, prompt for confirmation before sending it.
+
+=item B<-w>, B<--wnpp>
+
+For each bug that does not appear to belong to the current package,
+check whether it is filed against wnpp. If so, tag it. This allows e.g.
+ITAs and ITPs closed in an upload to be tagged.
+
+=back
+
+=head1 SEE ALSO
+
+B<bts>(1) and B<dpkg-parsechangelog>(1)
+
+=cut
+
+if (!-f 'debian/changelog') {
+ die "$progname error: debian/changelog does not exist!\n";
+}
+
+my $changelog = changelog_parse(%opt_to);
+my $source = $changelog->{Source};
+my @closes;
+if ($changelog->{Closes}) {
+ @closes = split ' ', $changelog->{Closes};
+}
+my @lines = split /\n/, $changelog->{Changes};
+my $header = $lines[1];
+my $changes = join "\n", grep /^ {3}[^[]/, @lines;
+
+# Add a fake entry to the end of the recorded changes
+# This makes the parsing of the changes simpler
+$changes .= " *";
+
+my $pending;
+my $open;
+my %bugs = map { $_ => 1 } @closes;
+
+if (%bugs) {
+ if ($opt_online) {
+ if (!Devscripts::Debbugs::have_soap()) {
+ die
+"$progname: The libsoap-lite-perl package is required for online operation; aborting.\n";
+ }
+
+ eval {
+ $pending = Devscripts::Debbugs::select(
+ "src:$source", "status:open",
+ "status:forwarded", "tag:pending"
+ );
+ $open = Devscripts::Debbugs::select("src:$source", "status:open",
+ "status:forwarded");
+ };
+
+ if ($@) {
+ die "$@\nUse --force to tag all bugs anyway.\n";
+ }
+ }
+
+ if ($pending) {
+ %bugs = (%bugs, map { $_ => 1 } @{$pending});
+ }
+}
+
+my $bug;
+my $message;
+my @to_tag = ();
+my @wnpp_to_tag = ();
+
+foreach $bug (keys %bugs) {
+ print "Checking bug #$bug: " if $opt_verbose;
+
+ if (grep /^$bug$/, @{$pending}) {
+ print "already marked pending\n" if $opt_verbose;
+ } else {
+ if (grep /^$bug$/, @{$open} or not $opt_online) {
+ print "needs tag\n" if $opt_verbose;
+ push(@to_tag, $bug);
+ } else {
+ if ($opt_wnpp) {
+ my $status = Devscripts::Debbugs::status($bug);
+ if ($status->{$bug}->{package} eq 'wnpp') {
+ if ($status->{$bug}->{tags} !~ /pending/) {
+ print "wnpp needs tag\n" if $opt_verbose;
+ push(@wnpp_to_tag, $bug);
+ } else {
+ print "wnpp already marked pending\n" if $opt_verbose;
+ }
+ } else {
+ $message
+ = "is closed or does not belong to this package (check bug # or force)\n";
+
+ print "Warning: #$bug " if not $opt_verbose;
+ print "$message";
+ }
+ } else {
+ $message
+ = "is closed or does not belong to this package (check bug # or force)\n";
+
+ print "Warning: #$bug " if not $opt_verbose;
+ print "$message";
+ }
+ }
+ }
+}
+
+if (!@to_tag and !@wnpp_to_tag) {
+ print "$progname info: Nothing to do, exiting.\n"
+ if $opt_verbose or !$opt_silent;
+ exit 0;
+}
+
+my @sourcepkgs = ();
+my @thiscloses = ();
+my $thischange = '';
+my $comments = '';
+
+if (@to_tag or @wnpp_to_tag) {
+ if ($opt_comments) {
+ foreach my $change (split /\n/, $changes) {
+ if ($change =~ /^ {3}\*(.*)/) {
+ # Adapted from dpkg-parsechangelog / Changelog.pm
+ while (
+ $thischange
+ && ($thischange
+ =~ /closes:\s*(?:bug)?\#?\s?\d+(?:,\s*(?:bug)?\#?\s?\d+)*/sig
+ )
+ ) {
+ push(@thiscloses, $& =~ /\#?\s?(\d+)/g);
+ }
+
+ foreach my $bug (@thiscloses) {
+ if ($bug and grep /^$bug$/,
+ @to_tag or grep /^$bug$/, @wnpp_to_tag) {
+ $comments .= $thischange;
+ last;
+ }
+ }
+
+ @thiscloses = ();
+ $thischange = $change;
+ } else {
+ $thischange .= $change . "\n";
+ }
+ }
+
+ $comments = $header . "\n \n" . $comments . "\n \n"
+ if $comments;
+ }
+}
+
+my @bts_args = ("bts", "--toolname", $progname);
+
+if ($opt_noact and not $opt_interactive) {
+ bugs_info;
+ bugs_info "wnpp" if $opt_wnpp;
+} else {
+ if (!$opt_silent) {
+ bugs_info;
+ bugs_info "wnpp" if $opt_wnpp;
+ }
+
+ if ($opt_interactive) {
+ if ($opt_noact) {
+ push(@bts_args, "-n");
+ print "\nWould send this BTS mail:\n\n";
+ } else {
+ push(@bts_args, "-i");
+ }
+ }
+
+ if (@to_tag) {
+ push(@bts_args, "limit", "source:$source");
+
+ if ($comments) {
+ $comments =~ s/\n\n/\n/sg;
+ $comments =~ s/\n\n/\n/m;
+ $comments =~ s/^ /#/mg;
+ push(@bts_args, $comments);
+ # We don't want to add comments twice if there are
+ # both package and wnpp bugs
+ $comments = '';
+ }
+
+ foreach my $bug (@to_tag) {
+ push(@bts_args, ".", "tag", $bug, "+", "pending");
+ push(@bts_args, "confirmed") if $opt_confirm;
+ }
+ }
+ if (@wnpp_to_tag) {
+ push(@bts_args, ".") if scalar @bts_args > 1;
+ push(@bts_args, "package", "wnpp");
+
+ if ($comments) {
+ $comments =~ s/\n\n/\n/sg;
+ $comments =~ s/^ /#/mg;
+ push(@bts_args, $comments);
+ }
+
+ foreach my $wnpp_bug (@wnpp_to_tag) {
+ push(@bts_args, ".", "tag", $wnpp_bug, "+", "pending");
+ }
+ }
+
+ system @bts_args;
+}
+
+sub bugs_info {
+ my $type = shift || '';
+ my @bugs;
+
+ if ($type eq "wnpp") {
+ if (@wnpp_to_tag) {
+ @bugs = @wnpp_to_tag;
+ } else {
+ return;
+ }
+ } else {
+ @bugs = @to_tag;
+ }
+
+ print "$progname info: ";
+
+ if ($opt_noact) {
+ print "would tag";
+ } else {
+ print "tagging";
+ }
+
+ print " these";
+ print " wnpp" if $type eq "wnpp";
+ print " bugs pending";
+ print " and confirmed" if $opt_confirm and $type ne "wnpp";
+ print ":";
+
+ foreach my $bug (@bugs) {
+ print " $bug";
+ }
+
+ print "\n";
+}
+
+sub help {
+ print <<"EOF";
+Usage: $progname [options]
+
+Valid options are:
+ --help, -h Display this message
+ --version Display version and copyright info
+ -n, --noact Only simulate what would happen during this run;
+ do not tag any bugs.
+ -s, --silent Silent mode
+ -v, --verbose Verbose mode: List bugs checked/tagged.
+ NOTE: Verbose and silent mode can't be used together.
+ -f, --force Do not query the BTS; (re-)tag all bug reports.
+ --comments Add the changelog header line and entries relating
+ to the bugs to be tagged to the generated mail.
+ (Default)
+ --no-comments Do not add changelog entries to the mail
+ -c, --confirm Tag bugs as confirmed as well as pending
+ -t, --to <version> Use changelog information from all versions strictly
+ later than <version> (mimics dpkg-parsechangelog's
+ -v option.)
+ -i, --interactive Display the message which would be sent to the BTS
+ and, except if --noact was used, prompt for
+ confirmation before sending it.
+ -w, --wnpp For each potentially not owned bug, check whether
+ it is filed against wnpp and, if so, tag it. This
+ allows e.g. ITA or ITPs to be tagged.
+
+EOF
+}
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+Copyright 2008 by Adam D. Barratt <adam\@adam-barratt.org.uk>; based
+on the shell script by Joshua Kwan <joshk\@triplehelix.org>.
+
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2, or (at your option) any
+later version.
+EOF
+}
+
+=head1 COPYRIGHT
+
+This program is Copyright 2008 by Adam D. Barratt
+<adam@adam-barratt.org.uk>.
+
+The shell script tagpending, on which this program is based, is
+Copyright 2004 by Joshua Kwan <joshk@triplehelix.org> with changes
+copyright 2004-7 by their respective authors.
+
+This program is licensed under the terms of the GPL, either version 2 of
+the License, or (at your option) any later version.
+
+=cut
diff --git a/scripts/transition-check.pl b/scripts/transition-check.pl
new file mode 100755
index 0000000..25a85d3
--- /dev/null
+++ b/scripts/transition-check.pl
@@ -0,0 +1,241 @@
+#!/usr/bin/perl
+
+# transition-check: Check whether a given source package is involved
+# in a current transition for which uploads have been blocked by the
+# Debian release team
+#
+# Copyright 2008 Adam D. Barratt
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+=head1 NAME
+
+transition-check - check a package list for involvement in transitions
+
+=head1 SYNOPSIS
+
+B<transition-check> B<--help>|B<--version>
+
+B<transition-check> [B<-f>|B<--filename=>I<FILENAME>] [I<source package list>]
+
+=head1 DESCRIPTION
+
+B<transition-check> checks whether any of the listed source packages
+are involved in a transition for which uploads to unstable are currently
+blocked.
+
+If neither a filename nor a list of packages is supplied, B<transition-check>
+will use the source package name from I<debian/control>.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-f>, B<--filename=>I<filename>
+
+Read a source package name from I<filename>, which should be a Debian
+package control file or I<.changes> file, and add that package to the list
+of packages to check.
+
+=back
+
+=head1 EXIT STATUS
+
+The exit status indicates whether any of the packages examined were found to
+be involved in a transition.
+
+=over 4
+
+=item 0Z<>
+
+Either B<--help> or B<--version> was used, or none of the packages examined
+was involved in a transition.
+
+=item 1Z<>
+
+At least one package examined is involved in a current transition.
+
+=back
+
+=head1 LICENSE
+
+This code is copyright by Adam D. Barratt <I<adam@adam-barratt.org.uk>>,
+all rights reserved.
+
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the GNU
+General Public License, version 2 or later.
+
+=head1 AUTHOR
+
+Adam D. Barratt <I<adam@adam-barratt.org.uk>>
+
+=cut
+
+use warnings;
+use strict;
+use Getopt::Long qw(:config bundling permute no_getopt_compat);
+use File::Basename;
+
+my $progname = basename($0);
+
+my ($opt_help, $opt_version, @opt_filename);
+
+GetOptions(
+ "help|h" => \$opt_help,
+ "version|v" => \$opt_version,
+ "filename|f=s" => sub { push(@opt_filename, $_[1]); },
+ )
+ or die
+"Usage: $progname [options] source_package_list\nRun $progname --help for more details\n";
+
+if ($opt_help) { help(); exit 0; }
+if ($opt_version) { version(); exit 0; }
+
+my ($lwp_broken, $yaml_broken);
+my $ua;
+
+sub have_lwp() {
+ return ($lwp_broken ? 0 : 1) if defined $lwp_broken;
+ eval {
+ require LWP;
+ require LWP::UserAgent;
+ };
+
+ if ($@) {
+ if ($@ =~ m%^Can\'t locate LWP%) {
+ $lwp_broken = "the libwww-perl package is not installed";
+ } else {
+ $lwp_broken = "couldn't load LWP::UserAgent: $@";
+ }
+ } else {
+ $lwp_broken = '';
+ }
+ return $lwp_broken ? 0 : 1;
+}
+
+sub have_yaml() {
+ return ($yaml_broken ? 0 : 1) if defined $yaml_broken;
+ eval { require YAML::Syck; };
+
+ if ($@) {
+ if ($@ =~ m%^Can\'t locate YAML%) {
+ $yaml_broken = "the libyaml-syck-perl package is not installed";
+ } else {
+ $yaml_broken = "couldn't load YAML::Syck: $@";
+ }
+ } else {
+ $yaml_broken = '';
+ }
+ return $yaml_broken ? 0 : 1;
+}
+
+sub init_agent {
+ $ua = new LWP::UserAgent; # we create a global UserAgent object
+ $ua->agent("LWP::UserAgent/Devscripts");
+ $ua->env_proxy;
+}
+
+if (@opt_filename or !@ARGV) {
+ @opt_filename = ("debian/control") unless @opt_filename;
+
+ foreach my $filename (@opt_filename) {
+ my $message;
+
+ if (!@ARGV) {
+ $message = "No package list supplied and unable";
+ } else {
+ $message = "Unable";
+ }
+
+ $message .= " to open $filename";
+ open FILE, $filename or die "$progname: $message: $!\n";
+ while (<FILE>) {
+ if (/^(?:Source): (.*)/) {
+ push(@ARGV, $1);
+ last;
+ }
+ }
+
+ close FILE;
+ }
+}
+
+die "$progname: Unable to retrieve transition information: $lwp_broken\n"
+ unless have_lwp;
+
+init_agent() unless $ua;
+my $request = HTTP::Request->new('GET',
+ 'https://ftp-master.debian.org/transitions.yaml');
+my $response = $ua->request($request);
+if (!$response->is_success) {
+ die "$progname: Failed to retrieve transitions list: $!\n";
+}
+
+die "$progname: Unable to parse transition information: $yaml_broken\n"
+ unless have_yaml();
+
+my $yaml = YAML::Syck::Load($response->content);
+my $packagelist = join("|", map { qq/\Q$_\E/ } @ARGV);
+my $found = 0;
+
+foreach my $transition (keys(%{$yaml})) {
+ my $data = $yaml->{$transition};
+
+ my @affected = grep /^($packagelist)$/, @{ $data->{packages} };
+
+ if (@affected) {
+ print "\n\n" if $found;
+ $found = 1;
+ print
+"The following packages are involved in the $transition transition:\n";
+ print map { qq( - $_\n) } @affected;
+
+ print "\nDetails of this transition:\n"
+ . " - Reason: $data->{reason}\n"
+ . " - Release team contact: $data->{rm}\n";
+ }
+}
+
+if (!$found) {
+ print "$progname: No packages examined are currently blocked\n";
+}
+
+exit $found;
+
+sub help {
+ print <<"EOF";
+Usage: $progname [options] source_package_list
+Valid options are:
+ --help, -h Display this message
+ --version, -v Display version and copyright info
+ --filename, -f Read source package information from the specified
+ filename (which should be a Debian package control
+ file or changes file)
+EOF
+}
+
+sub version {
+ print <<"EOF";
+This is $progname, from the Debian devscripts package, version ###VERSION###
+Copyright (C) 2008 by Adam D. Barratt <adam\@adam-barratt.org.uk>,
+
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2, or (at your option) any
+later version.
+EOF
+}
+
diff --git a/scripts/uscan.bash_completion b/scripts/uscan.bash_completion
new file mode 100644
index 0000000..46aa43f
--- /dev/null
+++ b/scripts/uscan.bash_completion
@@ -0,0 +1,59 @@
+# /usr/share/bash-completion/completions/uscan
+# Bash command completion for ‘uscan(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+shopt -s progcomp
+
+_uscan_completion () {
+ COMPREPLY=()
+
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+ local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+ local opts="--help --verbose -v"
+ opts+=" --download --safe --report --report-status"
+ opts+=" --signature --no-signature --skip-signature"
+ opts+=" --no-download --force-download -dd --overwrite-download -ddd"
+ opts+=" --upstream-version --download-version --download-debversion"
+ opts+=" --download-current-version --bare"
+ opts+=" --check-dirname-level --check-dirname-regex"
+ opts+=" --no-pasv --pasv --timeout --user-agent --useragent"
+ opts+=" --no-verbose --verbose --debug -vv --extra-debug -vvv"
+ opts+=" --no-dehs --dehs --no-conf --noconf --watchfile --destdir"
+ opts+=" --package --no-exclusion"
+ opts+=" --symlink --rename --repack --compression --copyright-file"
+
+ case "${prev}" in
+ --compression)
+ local formats=(gzip bzip2 lzma xz)
+ COMPREPLY=( $(compgen -W "${formats[*]}" -- ${cur}) )
+ ;;
+
+ --check-dirname-level)
+ local levels=(0 1 2)
+ COMPREPLY=( $(compgen -W "${levels[*]}" -- ${cur}) )
+ ;;
+
+ --watchfile)
+ COMPREPLY=( $(compgen -A file -- ${cur}) )
+ ;;
+
+ --copyright-file)
+ COMPREPLY=( $(compgen -A file -- ${cur}) )
+ ;;
+
+ *)
+ COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
+ compopt -o dirnames
+ ;;
+ esac
+}
+
+complete -F _uscan_completion uscan
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# End:
+# vim: fileencoding=utf-8 filetype=sh :
diff --git a/scripts/uscan.pl b/scripts/uscan.pl
new file mode 100755
index 0000000..e78f5d6
--- /dev/null
+++ b/scripts/uscan.pl
@@ -0,0 +1,2203 @@
+#!/usr/bin/perl
+# -*- tab-width: 8; indent-tabs-mode: t; cperl-indent-level: 4 -*-
+# vim: set ai shiftwidth=4 tabstop=4 expandtab:
+
+# uscan: This program looks for watch files and checks upstream ftp sites
+# for later versions of the software.
+#
+# Originally written by Christoph Lameter <clameter@debian.org> (I believe)
+# Modified by Julian Gilbey <jdg@debian.org>
+# HTTP support added by Piotr Roszatycki <dexter@debian.org>
+# Rewritten in Perl, Copyright 2002-2006, Julian Gilbey
+# Rewritten in Object Oriented Perl, copyright 2018, Xavier Guimard
+# <yadd@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+#######################################################################
+# {{{ code 0: POD for manpage
+#######################################################################
+
+=pod
+
+=head1 NAME
+
+uscan - scan/watch upstream sources for new releases of software
+
+=head1 SYNOPSIS
+
+B<uscan> [I<options>] [I<path>]
+
+=head1 DESCRIPTION
+
+For basic usage, B<uscan> is executed without any arguments from the root
+of the Debianized source tree where you see the F<debian/> directory, or
+a directory containing multiple source trees.
+
+Unless --watchfile is given, B<uscan> looks recursively for valid source
+trees starting from the current directory (see the below section
+L<Directory name checking> for details).
+
+For each valid source tree found, typically the following happens:
+
+=over
+
+=item * B<uscan> reads the first entry in F<debian/changelog> to determine the
+source package name I<< <spkg> >> and the last upstream version.
+
+=item * B<uscan> process the watch lines F<debian/watch> from the top to the
+bottom in a single pass.
+
+=over
+
+=item * B<uscan> downloads a web page from the specified I<URL> in
+F<debian/watch>.
+
+=item * B<uscan> extracts hrefs pointing to the upstream tarball(s) from the
+web page using the specified I<matching-pattern> in F<debian/watch>.
+
+=item * B<uscan> downloads the upstream tarball with the highest version newer
+than the last upstream version.
+
+=item * B<uscan> saves the downloaded tarball to the parent B<../> directory:
+I<< ../<upkg>-<uversion>.tar.gz >>
+
+=item * B<uscan> invokes B<mk-origtargz> to create the source tarball: I<<
+../<spkg>_<oversion>.orig.tar.gz >>
+
+=over
+
+=item * For a multiple upstream tarball (MUT) package, the secondary upstream
+tarball will instead be named I<< ../<spkg>_<oversion>.orig-<component>.tar.gz >>.
+
+=back
+
+=item * Repeat until all lines in F<debian/watch> are processed.
+
+=back
+
+=item * B<uscan> invokes B<uupdate> to create the Debianized source tree: I<<
+../<spkg>-<oversion>/* >>
+
+=back
+
+Please note the following.
+
+=over
+
+=item * For simplicity, the compression method used in examples is B<gzip> with
+B<.gz> suffix. Other methods such as B<xz>, B<bzip2>, and B<lzma> with
+corresponding B<xz>, B<bz2> and B<lzma> suffixes may also be used.
+
+=item * The new B<version=4> enables handling of multiple upstream tarball
+(MUT) packages but this is a rare case for Debian packaging. For a single
+upstream tarball package, there is only one watch line and no I<<
+../<spkg>_<oversion>.orig-<component>.tar.gz >> .
+
+=item * B<uscan> with the B<--verbose> option produces a human readable report
+of B<uscan>'s execution.
+
+=item * B<uscan> with the B<--debug> option produces a human readable report of
+B<uscan>'s execution including internal variable states.
+
+=item * B<uscan> with the B<--extra-debug> option produces a human readable
+report of B<uscan>'s execution including internal variable states and remote
+content during "search" step.
+
+=item * B<uscan> with the B<--dehs> option produces an upstream package status
+report in XML format for other programs such as the Debian External Health
+System.
+
+=item * The primary objective of B<uscan> is to help identify if the latest
+version upstream tarball is used or not; and to download the latest upstream
+tarball. The ordering of versions is decided by B<dpkg --compare-versions>.
+
+=item * B<uscan> with the B<--safe> option limits the functionality of B<uscan>
+to its primary objective. Both the repacking of downloaded files and
+updating of the source tree are skipped to avoid running unsafe scripts.
+This also changes the default to B<--no-download> and B<--skip-signature>.
+
+=back
+
+=head1 FORMAT OF THE WATCH FILE
+
+The current version 4 format of F<debian/watch> can be summarized as follows:
+
+=over
+
+=item * Leading spaces and tabs are dropped.
+
+=item * Empty lines are dropped.
+
+=item * A line started by B<#> (hash) is a comment line and dropped.
+
+=item * A single B<\> (back slash) at the end of a line is dropped and the
+next line is concatenated after removing leading spaces and tabs. The
+concatenated line is parsed as a single line. (The existence or non-existence
+of the space before the tailing single B<\> is significant.)
+
+=item * The first non-comment line is:
+
+=over
+
+=item B<version=4>
+
+=back
+
+This is a required line and the recommended version number.
+
+If you use "B<version=3>" instead here, some features may not work as
+documented here. See L<HISTORY AND UPGRADING>.
+
+=item * The following non-comment lines (watch lines) specify the rules for the
+selection of the candidate upstream tarball URLs and are in one of the
+following three formats:
+
+=over
+
+=item * B<opts="> I<...> B<"> B<http://>I<URL> I<matching-pattern> [I<version> [I<script>]]
+
+=item * B<http://>I<URL> I<matching-pattern> [I<version> [I<script>]]
+
+=item * B<opts="> I<...> B<">
+
+=back
+
+Here,
+
+=over
+
+=item * B<opts="> I<...> B<"> specifies the behavior of B<uscan>. See L<WATCH
+FILE OPTIONS>.
+
+=item * B<http://>I<URL> specifies the web page where upstream publishes
+the link to the latest source archive.
+
+=over
+
+=item * B<https://>I<URL> may also be used, as may
+
+=item * B<ftp://>I<URL>
+
+=item * Some parts of I<URL> may be in the regex match pattern surrounded
+between B<(> and B<)> such as B</foo/bar-([\.\d]+)/>. (If multiple
+directories match, the highest version is picked.) Otherwise, the I<URL>
+is taken as verbatim.
+
+=back
+
+=item * I<matching-pattern> specifies the full string matching pattern for
+hrefs in the web page. See L<WATCH FILE EXAMPLES>.
+
+=over
+
+=item * All matching parts in B<(> and B<)> are concatenated with B<.> (period)
+to form the upstream version.
+
+=item * If the hrefs do not contain directories, you can combine this with the
+previous entry. I.e., B<http://>I<URL>B</>I<matching-pattern> .
+
+=back
+
+=item * I<version> restricts the upstream tarball which may be downloaded.
+The newest available version is chosen in each case.
+
+=over
+
+=item * B<debian> I<(default)> requires the downloading upstream tarball to be
+newer than the version obtained from F<debian/changelog>.
+
+=item * I<version-number> such as B<12.5> requires the upstream
+tarball to be newer than the I<version-number>.
+
+=item * B<same> requires the downloaded version of the secondary tarballs to be
+exactly the same as the one for the first upstream tarball downloaded. (Useful
+only for MUT)
+
+=item * B<previous> restricts the version of the signature
+file. (Used with pgpmode=previous)
+
+=item * B<ignore> does not restrict the version of the secondary
+tarballs. (Maybe useful for MUT)
+
+=item * B<group> requires the downloading upstream tarball to be newer than
+the version obtained from F<debian/changelog>. Package version is the
+concatenation of all "group" upstream version.
+
+=item * B<checksum> requires the downloading upstream tarball to be newer than
+the version obtained from F<debian/changelog>. Package version is the
+concatenation of the version of the main tarball, followed by a checksum of all
+the tarballs using the "checksum" version system.
+At least the main upstream source has to be declared as "group".
+
+=back
+
+=item * I<script> is executed at the end of B<uscan> execution with appropriate
+arguments provided by B<uscan> I<(default: no action)>.
+
+=over
+
+=item * The typical Debian package is a non-native package made from one
+upstream tarball. Only a single line of the watch line in one of the first two
+formats is usually used with its I<version> set to B<debian> and I<script>
+set to B<uupdate>.
+
+=item * A native package should not specify I<script>.
+
+=item * A multiple upstream tarball (MUT) package should specify B<uupdate>
+as I<script> in the last watch line and should skip specifying I<script> in the
+rest of the watch lines.
+
+=back
+
+=item * The last format of the watch line is useful to set the persistent
+parameters: B<user-agent>, B<compression>. If this format is used, this must
+be followed by the I<URL> defining watch line(s).
+
+=item * [ and ] in the above format are there to mark the optional parts and
+should not be typed.
+
+=back
+
+=back
+
+There are a few special strings which are substituted by B<uscan> to make it easy
+to write the watch file.
+
+=over
+
+=item B<@PACKAGE@>
+
+This is substituted with the source package name found in the first line of the
+F<debian/changelog> file.
+
+=item B<@ANY_VERSION@>
+
+This is substituted by the legal upstream version regex (capturing).
+
+ [-_]?v?(\d[\-+\.:\~\da-zA-Z]*)
+
+=item B<@ARCHIVE_EXT@>
+
+This is substituted by the typical archive file extension regex (non-capturing).
+
+ (?i)(?:\.(?:tar\.xz|tar\.bz2|tar\.gz|tar\.zstd?|zip|tgz|tbz|txz))
+
+=item B<@SIGNATURE_EXT@>
+
+This is substituted by the typical signature file extension regex (non-capturing).
+
+ (?i)(?:\.(?:tar\.xz|tar\.bz2|tar\.gz|tar\.zstd?|zip|tgz|tbz|txz))'(?:\.(?:asc|pgp|gpg|sig|sign))'
+
+=item B<@DEB_EXT@>
+
+This is substituted by the typical Debian extension regexp (capturing).
+
+ [\+~](debian|dfsg|ds|deb)(\.)?(\d+)?$
+
+=back
+
+Some file extensions are not included in the above intentionally to avoid false
+positives. You can still set such file extension patterns manually.
+
+=head1 WATCH FILE OPTIONS
+
+B<uscan> reads the watch options specified in B<opts="> I<...> B<"> to
+customize its behavior. Multiple options I<option1>, I<option2>, I<option3>,
+... can be set as B<opts=">I<option1>B<,> I<option2>B<,> I<option3>B<,> I< ...
+>B<"> . The double quotes are necessary if options contain any spaces.
+
+Unless otherwise noted as persistent, most options are valid only within their
+containing watch line.
+
+The available watch options are:
+
+=over
+
+=item B<component=>I<component>
+
+Set the name of the secondary source tarball as I<<
+<spkg>_<oversion>.orig-<component>.tar.gz >> for a MUT package.
+
+=item B<ctype=>I<component-type>
+
+Set the type of component I<(only "nodejs" and "perl" are available for now)>.
+This will help uscan to find current version if component version is ignored.
+
+When using B<ctype=nodejs>, uscan tries to find a version in C<package.json>,
+when using B<ctype=perl>, uscan tries to find a version in C<META.json>.
+If a version is found, it is used as current version for this component,
+regardless version found in Debian version string. This permits a better
+change detection when using I<ignore> or I<checksum> as Debian version.
+
+=item B<compression=>I<method>
+
+Set the compression I<method> when the tarball is repacked (persistent).
+
+Available I<method> values are what mk-origtargz supports, so B<xz>, B<gzip>
+(alias B<gz>), B<bzip2> (alias B<bz2>), B<lzma>, B<default>. The default method
+is currently B<xz>.
+When uscan is launched in a debian source repository which format is "1.0" or
+undefined, the method switches to B<gzip>.
+
+Please note the repacking of the upstream tarballs by B<mk-origtargz> happens
+only if one of the following conditions is satisfied:
+
+=over
+
+=item * B<USCAN_REPACK> is set in the devscript configuration. See L<DEVSCRIPT
+CONFIGURATION VARIABLES>.
+
+=item * B<--repack> is set on the commandline. See <COMMANDLINE OPTIONS>.
+
+=item * B<repack> is set in the watch line as B<opts="repack,>I<...>B<">.
+
+=item * The upstream archive is of B<zip> type including B<jar>, B<xpi>, ...
+
+=item * The upstream archive is of B<zstd> (Zstandard) type.
+
+=item * B<Files-Excluded> or B<Files-Excluded->I<component> stanzas are set in
+F<debian/copyright> to make B<mk-origtargz> invoked from B<uscan> remove
+files from the upstream tarball and repack it. See L<COPYRIGHT FILE
+EXAMPLES> and mk-origtargz(1).
+
+=back
+
+=item B<repack>
+
+Force repacking of the upstream tarball using the compression I<method>.
+
+=item B<repacksuffix=>I<suffix>
+
+Add I<suffix> to the Debian package upstream version only when the
+source tarball is repackaged. This rule should be used only for a single
+upstream tarball package.
+
+=item B<mode=>I<mode>
+
+Set the archive download I<mode>.
+
+=over
+
+=item B<LWP>
+
+This mode is the default one which downloads the specified tarball from the
+archive URL on the web. Automatically internal B<mode> value is updated to
+either B<http> or B<ftp> by URL.
+
+=item B<git>
+
+This mode accesses the upstream git archive directly with the B<git> command
+and packs the source tree with the specified tag via I<matching-pattern> into
+I<spkg-version>B<.tar.xz>.
+
+If the upstream publishes the released tarball via its web interface, please
+use it instead of using this mode. This mode is the last resort method.
+
+For git mode, I<matching-pattern> specifies the full string matching pattern for
+tags instead of hrefs. If I<matching-pattern> is set to
+B<refs/tags/>I<tag-matching-pattern>, B<uscan> downloads source from the
+B<refs/tags/>I<matched-tag> of the git repository. The upstream version is
+extracted from concatenating the matched parts in B<(> ... B<)> with B<.> . See
+L<WATCH FILE EXAMPLES>.
+
+If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads source from the
+B<HEAD> of the git repository and the pertinent I<version> is automatically
+generated with the date and hash of the B<HEAD> of the git repository.
+
+If I<matching-pattern> is set to B<refs/heads/>I<branch>, B<uscan> downloads source
+from the named I<branch> of the git repository.
+
+The local repository is temporarily created as a bare git repository directory
+under the destination directory where the downloaded archive is generated. This
+is normally erased after the B<uscan> execution. This local repository is kept
+if B<--debug> option is used.
+
+If the current directory is a git repository and the searched repository is
+listed among the registered "remotes", then uscan will use it instead of cloning
+separately. The only local change is that uscan will run a "fetch" command to
+refresh the repository.
+
+=item B<svn>
+
+This mode accesses the upstream Subversion archive directly with the B<svn>
+command and packs the source tree.
+
+For svn mode, I<matching-pattern> specifies the full string matching pattern for
+directories under Subversion repository directory, specified via URL. The
+upstream version is extracted from concatenating the matched parts in B<(> ...
+B<)> with B<.> .
+
+If I<matching-pattern> is set to B<HEAD>, B<uscan> downloads the latest source
+tree of the URL. The upstream version is then constructed by appending the last
+revision of the URL to B<0.0~svn>.
+
+As commit signing is not possible with Subversion, the default B<pgpmode> is set
+to B<none> when B<mode=svn>. Settings of B<pgpmode> other than B<default> and
+B<none> are reported as errors.
+
+=back
+
+=item B<pretty=>I<rule>
+
+Set the upstream version string to an arbitrary format as an optional B<opts>
+argument when the I<matching-pattern> is B<HEAD> or B<heads/>I<branch> for
+B<git> mode. For the exact syntax, see the B<git-log> manpage under B<tformat>.
+The default is B<pretty=0.0~git%cd.%h>. No B<uversionmangle> rules is
+applicable for this case.
+
+When B<pretty=describe> is used, the upstream version string is the output of
+the "B<git describe --tags | sed s/-/./g>" command instead. For example, if the
+commit is the B<5>-th after the last tag B<v2.17.12> and its short hash is
+B<ged992511>, then the string is B<v2.17.12.5.ged992511> . For this case, it is
+good idea to add B<uversionmangle=s/^/0.0~/> or B<uversionmangle=s/^v//> to make
+the upstream version string compatible with Debian. B<uversionmangle=s/^v//>
+may work as well. Please note that in order for B<pretty=describe> to function
+well, upstream need to avoid tagging with random alphabetic tags.
+
+The B<pretty=describe> forces to set B<gitmode=full> to make a full local clone
+of the repository automatically.
+
+=item B<date=>I<rule>
+
+Set the date string used by the B<pretty> option to an arbitrary format as an
+optional B<opts> argument when the I<matching-pattern> is B<HEAD> or
+B<heads/>I<branch> for B<git> mode. For the exact syntax, see the
+B<strftime> manpage. The default is B<date=%Y%m%d>.
+
+=item B<gitexport=>I<mode>
+
+Set the git archive export operation I<mode>. The default is
+B<gitexport=default>. Set this to B<gitexport=all> to include all files in the
+.orig.tar archive, ignoring any I<export-ignore> git attributes defined by the
+upstream.
+
+This option is valid only in git mode.
+
+=item B<gitmode=>I<mode>
+
+Set the git clone operation I<mode>. The default is B<gitmode=shallow>. For
+some dumb git server, you may need to manually set B<gitmode=full> to force full
+clone operation.
+
+If the current directory is a git repository and the searched repository is
+listed among the registered "remotes", then uscan will use it instead of cloning
+separately.
+
+=item B<pgpmode=>I<mode>
+
+Set the PGP/GPG signature verification I<mode>.
+
+=over
+
+=item B<auto>
+
+B<uscan> checks possible URLs for the signature file and autogenerates a
+B<pgpsigurlmangle> rule to use it.
+
+=item B<default>
+
+Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature
+file URL string from the upstream tarball URL. (default)
+
+If the specified B<pgpsigurlmangle> is missing, B<uscan> checks possible URLs
+for the signature file and suggests adding a B<pgpsigurlmangle> rule.
+
+=item B<mangle>
+
+Use B<pgpsigurlmangle=>I<rules> to generate the candidate upstream signature
+file URL string from the upstream tarball URL.
+
+=item B<next>
+
+Verify this downloaded tarball file with the signature file specified in the
+next watch line. The next watch line must be B<pgpmode=previous>. Otherwise,
+no verification occurs.
+
+=item B<previous>
+
+Verify the downloaded tarball file specified in the previous watch line with
+this signature file. The previous watch line must be B<pgpmode=next>.
+
+=item B<self>
+
+Verify the downloaded file I<foo.ext> with its self signature and extract its
+content tarball file as I<foo>.
+
+=item B<gittag>
+
+Verify tag signature if B<mode=git>.
+
+=item B<none>
+
+No signature available. (No warning.)
+
+=back
+
+=item B<searchmode=>I<mode>
+
+Set the parsing search mode.
+
+=over
+
+=item B<html> I<(default)>: search pattern in "href" parameter of E<lt>aE<gt>
+HTML tags
+
+=item B<plain>: search pattern in the full page
+
+This is useful if page content is not HTML but JSON. Example with
+npmjs.com:
+
+ version=4
+ opts="searchmode=plain" \
+ https://registry.npmjs.org/aes-js \
+ https://registry.npmjs.org/aes-js/-/aes-js-(\d[\d\.]*)@ARCHIVE_EXT@
+
+=back
+
+=item B<decompress>
+
+Decompress compressed archive before the pgp/gpg signature verification.
+
+=item B<bare>
+
+Disable all site specific special case code such as URL redirector uses and
+page content alterations. (persistent)
+
+=item B<user-agent=>I<user-agent-string>
+
+Set the user-agent string used to contact the HTTP(S) server as
+I<user-agent-string>. (persistent)
+
+B<user-agent> option should be specified by itself in the watch line without
+I<URL>, to allow using semicolons and commas in it.
+
+=item B<pasv>, B<passive>
+
+Use PASV mode for the FTP connection.
+
+If PASV mode is required due to the client side network environment, set
+B<uscan> to use PASV mode via L<COMMANDLINE OPTIONS> or L<DEVSCRIPT
+CONFIGURATION VARIABLES> instead.
+
+=item B<active>, B<nopasv>
+
+Don't use PASV mode for the FTP connection.
+
+=item B<unzipopt=>I<options>
+
+Add the extra options to use with the B<unzip> command, such as B<-a>, B<-aa>,
+and B<-b>, when executed by B<mk-origtargz>.
+
+=item B<dversionmangle=>I<rules>
+
+Normalize the last upstream version string found in F<debian/changelog> to
+compare it to the available upstream tarball version. Removal of the Debian
+specific suffix such as B<s/@DEB_EXT@//> is usually done here.
+
+You can also use B<dversionmangle=auto>, this is exactly the same than
+B<dversionmangle=s/@DEB_EXT@//>
+
+=item B<dirversionmangle=>I<rules>
+
+Normalize the directory path string matching the regex in a set of parentheses
+of B<http://>I<URL> as the sortable version index string. This is used as the
+directory path sorting index only.
+
+Substitution such as B<s/PRE/~pre/; s/RC/~rc/> may help.
+
+=item B<pagemangle=>I<rules>
+
+Normalize the downloaded web page string. (Don't use this unless this is
+absolutely needed. Generally, B<g> flag is required for these I<rules>.)
+
+This is handy if you wish to access Amazon AWS or Subversion repositories in
+which <a href="..."> is not used.
+
+=item B<uversionmangle=>I<rules>
+
+Normalize the candidate upstream version strings extracted from hrefs in the
+source of the web page. This is used as the version sorting index when
+selecting the latest upstream version.
+
+Substitution such as B<s/PRE/~pre/; s/RC/~rc/> may help.
+
+=item B<versionmangle=>I<rules>
+
+Syntactic shorthand for B<uversionmangle=>I<rules>B<, dversionmangle=>I<rules>
+
+=item B<hrefdecode=percent-encoding>
+
+Convert the selected upstream tarball href string from the percent-encoded
+hexadecimal string to the decoded normal URL string for obfuscated web sites.
+Only B<percent-encoding> is available and it is decoded with
+B<s/%([A-Fa-f\d]{2})/chr hex $1/eg>.
+
+=item B<downloadurlmangle=>I<rules>
+
+Convert the selected upstream tarball href string into the accessible URL for
+obfuscated web sites. This is run after B<hrefdecode>.
+
+=item B<filenamemangle=>I<rules>
+
+Generate the upstream tarball filename from the selected href string if
+I<matching-pattern> can extract the latest upstream version I<< <uversion> >>
+from the selected href string. Otherwise, generate the upstream tarball
+filename from its full URL string and set the missing I<< <uversion> >> from
+the generated upstream tarball filename.
+
+Without this option, the default upstream tarball filename is generated by
+taking the last component of the URL and removing everything after any '?' or
+'#'.
+
+=item B<pgpsigurlmangle=>I<rules>
+
+Generate the candidate upstream signature file URL string from the upstream
+tarball URL.
+
+=item B<oversionmangle=>I<rules>
+
+Generate the version string I<< <oversion> >> of the source tarball I<<
+<spkg>_<oversion>.orig.tar.gz >> from I<< <uversion> >>. This should be used
+to add a suffix such as B<+dfsg> to a MUT package.
+
+=back
+
+Here, the mangling rules apply the I<rules> to the pertinent string. Multiple
+rules can be specified in a mangling rule string by making a concatenated
+string of each mangling I<rule> separated by B<;> (semicolon).
+
+Each mangling I<rule> cannot contain B<;> (semicolon), B<,> (comma), or B<">
+(double quote).
+
+Each mangling I<rule> behaves as if a Perl command "I<$string> B<=~> I<rule>"
+is executed. There are some notable details.
+
+=over
+
+=item * I<rule> may only use the B<s>, B<tr>, and B<y> operations.
+
+=over
+
+=item B<s/>I<regex>B</>I<replacement>B</>I<options>
+
+Regex pattern match and replace the target string. Only the B<g>, B<i> and
+B<x> flags are available. Use the B<$1> syntax for back references (No
+B<\1> syntax). Code execution is not allowed (i.e. no B<(?{})> or B<(??{})>
+constructs).
+
+=item B<y/>I<source>B</>I<dest>B</> or B<tr/>I<source>B</>I<dest>B</>
+
+Transliterate the characters in the target string.
+
+=back
+
+=back
+
+=head1 EXAMPLE OF EXECUTION
+
+B<uscan> reads the first entry in F<debian/changelog> to determine the source
+package name and the last upstream version.
+
+For example, if the first entry of F<debian/changelog> is:
+
+=over
+
+=item * I<< bar >> (B<3:2.03+dfsg-4>) unstable; urgency=low
+
+=back
+
+then, the source package name is I<< bar >> and the last Debian package version
+is B<3:2.03+dfsg-4>.
+
+The last upstream version is normalized to B<2.03+dfsg> by removing the epoch
+and the Debian revision.
+
+If the B<dversionmangle> rule exists, the last upstream version is further
+normalized by applying this rule to it. For example, if the last upstream
+version is B<2.03+dfsg> indicating the source tarball is repackaged, the
+suffix B<+dfsg> is removed by the string substitution B<s/\+dfsg\d*$//> to
+make the (dversionmangled) last upstream version B<2.03> and it is compared to
+the candidate upstream tarball versions such as B<2.03>, B<2.04>, ... found in
+the remote site. Thus, set this rule as:
+
+=over
+
+=item * B<opts="dversionmangle=s/\+dfsg\d*$//">
+
+=back
+
+B<uscan> downloads a web page from B<http://>I<URL> specified in
+F<debian/watch>.
+
+=over
+
+=item * If the directory name part of I<URL> has no parentheses, B<(> and B<)>,
+it is taken as verbatim.
+
+=item * If the directory name part of I<URL> has parentheses, B<(> and B<)>,
+then B<uscan> recursively searches all possible directories to find a page for
+the newest version. If the B<dirversionmangle> rule exists, the generated
+sorting index is used to find the newest version. If a specific version is
+specified for the download, the matching version string has priority over the
+newest version.
+
+=back
+
+For example, this B<http://>I<URL> may be specified as:
+
+=over
+
+=item * B<http://www.example.org/@ANY_VERSION@/>
+
+=back
+
+Please note the trailing B</> in the above to make B<@ANY_VERSION@> as the
+directory.
+
+If the B<pagemangle> rule exists, the whole downloaded web page as a string is
+normalized by applying this rule to it. This is very powerful tool and needs
+to be used with caution. If other mangling rules can be used to address your
+objective, do not use this rule.
+
+The downloaded web page is scanned for hrefs defined in the B<< <a href=" >>
+I<...> B<< "> >> tag to locate the candidate upstream tarball hrefs. These
+candidate upstream tarball hrefs are matched by the Perl regex pattern
+I<matching-pattern> such as B<< DL-(?:[\d\.]+?)/foo-(.+)\.tar\.gz >> to narrow
+down the candidates. This pattern match needs to be anchored at the beginning
+and the end. For example, candidate hrefs may be:
+
+=over
+
+=item * B<< DL-2.02/foo-2.02.tar.gz >>
+
+=item * B<< DL-2.03/foo-2.03.tar.gz >>
+
+=item * B<< DL-2.04/foo-2.04.tar.gz >>
+
+=back
+
+Here the matching string of B<(.+)> in I<matching-pattern> is considered as the
+candidate upstream version. If there are multiple matching strings of
+capturing patterns in I<matching-pattern>, they are all concatenated with B<.>
+(period) to form the candidate upstream version. Make sure to use the
+non-capturing regex such as B<(?:[\d\.]+?)> instead for the variable text
+matching part unrelated to the version.
+
+Then, the candidate upstream versions are:
+
+=over
+
+=item * B<2.02>
+
+=item * B<2.03>
+
+=item * B<2.04>
+
+=back
+
+The downloaded tarball filename is basically set to the same as the filename in
+the remote URL of the selected href.
+
+If the B<uversionmangle> rule exists, the candidate upstream versions are
+normalized by applying this rule to them. (This rule may be useful if the
+upstream version scheme doesn't sort correctly to identify the newest version.)
+
+The upstream tarball href corresponding to the newest (uversionmangled)
+candidate upstream version newer than the (dversionmangled) last upstream
+version is selected.
+
+If multiple upstream tarball hrefs corresponding to a single version with
+different extensions exist, the highest compression one is chosen. (Priority:
+B<< tar.xz > tar.lzma > tar.bz2 > tar.gz >>.)
+
+If the selected upstream tarball href is the relative URL, it is converted to
+the absolute URL using the base URL of the web page. If the B<< <base href="
+>> I< ... > B<< "> >> tag exists in the web page, the selected upstream tarball
+href is converted to the absolute URL using the specified base URL in the base
+tag, instead.
+
+If the B<downloadurlmangle> rule exists, the selected upstream tarball href is
+normalized by applying this rule to it. (This is useful for some sites with the
+obfuscated download URL.)
+
+If the B<filenamemangle> rule exists, the downloaded tarball filename is
+generated by applying this rule to the selected href if I<matching-pattern> can
+extract the latest upstream version I<< <uversion> >> from the selected href
+string. Otherwise, generate the upstream tarball filename from its full URL
+string and set the missing I<< <uversion> >> from the generated upstream
+tarball filename.
+
+Without the B<filenamemangle> rule, the default upstream tarball filename is
+generated by taking the last component of the URL and removing everything after
+any '?' or '#'.
+
+B<uscan> downloads the selected upstream tarball to the parent B<../>
+directory. For example, the downloaded file may be:
+
+=over
+
+=item * F<../foo-2.04.tar.gz>
+
+=back
+
+Let's call this downloaded version B<2.04> in the above example generically as
+I<< <uversion> >> in the following.
+
+If the B<pgpsigurlmangle> rule exists, the upstream signature file URL is
+generated by applying this rule to the (downloadurlmangled) selected upstream
+tarball href and the signature file is tried to be downloaded from it.
+
+If the B<pgpsigurlmangle> rule doesn't exist, B<uscan> warns user if the
+matching upstream signature file is available from the same URL with their
+filename being suffixed by the 5 common suffix B<asc>, B<gpg>, B<pgp>, B<sig>
+and B<sign>. (You can avoid this warning by setting B<pgpmode=none>.)
+
+If the signature file is downloaded, the downloaded upstream tarball is checked
+for its authenticity against the downloaded signature file using the armored keyring
+F<debian/upstream/signing-key.asc> (see L<KEYRING FILE EXAMPLES>). If its
+signature is not valid, or not made by one of the listed keys, B<uscan> will
+report an error.
+
+If the B<oversionmangle> rule exists, the source tarball version I<oversion> is
+generated from the downloaded upstream version I<uversion> by applying this
+rule. This rule is useful to add suffix such as B<+dfsg> to the version of all
+the source packages of the MUT package for which the repacksuffix mechanism
+doesn't work.
+
+B<uscan> invokes B<mk-origtargz> to create the source tarball properly named
+for the source package with B<.orig.> (or B<< .orig-<component>. >> for the
+secondary tarballs) in its filename.
+
+=over
+
+=item case A: packaging of the upstream tarball as is
+
+B<mk-origtargz> creates a symlink I<< ../bar_<oversion>.orig.tar.gz >>
+linked to the downloaded local upstream tarball. Here, I<< bar >> is the source
+package name found in F<debian/changelog>. The generated symlink may be:
+
+=over
+
+=item * F<../bar_2.04.orig.tar.gz> -> F<foo-2.04.tar.gz> (as is)
+
+=back
+
+Usually, there is no need to set up B<opts="dversionmangle=> I<...> B<"> for
+this case.
+
+=item case B: packaging of the upstream tarball after removing non-DFSG files
+
+B<mk-origtargz> checks the filename glob of the B<Files-Excluded> stanza in the
+first section of F<debian/copyright>, removes matching files to create a
+repacked upstream tarball. Normally, the repacked upstream tarball is renamed
+with I<suffix> to I<< ../bar_<oversion><suffix>.orig.tar.gz >> using
+the B<repacksuffix> option for the single upstream package. Here I<< <oversion> >>
+is updated to be I<< <oversion><suffix> >>.
+
+The removal of files is required if files are not DFSG-compliant. For such
+case, B<+dfsg> is used as I<suffix>.
+
+So the combined options are set as
+B<opts="dversionmangle=s/\+dfsg\d*$// ,repacksuffix=+dfsg">, instead.
+
+For example, the repacked upstream tarball may be:
+
+=over
+
+=item * F<../bar_2.04+dfsg.orig.tar.gz> (repackaged)
+
+=back
+
+=back
+
+B<uscan> normally invokes "B<uupdate> B<--find --upstream-version> I<oversion>
+" for the version=4 watch file.
+
+Please note that B<--find> option is used here since B<mk-origtargz> has been
+invoked to make B<*.orig.tar.gz> file already. B<uscan> picks I<< bar >> from
+F<debian/changelog>.
+
+It creates the new upstream source tree under the I<< ../bar-<oversion> >>
+directory and Debianize it leveraging the last package contents.
+
+=head1 WATCH FILE EXAMPLES
+
+When writing the watch file, you should rely on the latest upstream source
+announcement web page. You should not try to second guess the upstream archive
+structure if possible. Here are the typical F<debian/watch> files.
+
+Please note that executing B<uscan> with B<-v> or B<-vv> reveals what exactly
+happens internally.
+
+The existence and non-existence of a space the before tailing B<\> (back slash)
+are significant.
+
+Some undocumented shorter configuration strings are used in the below EXAMPLES
+to help you with typing. These are intentional ones. B<uscan> is written to
+accept such common sense abbreviations but don't push the limit.
+
+=head2 HTTP site (basic)
+
+Here is an example for the basic single upstream tarball.
+
+ version=4
+ http://example.com/~user/release/@PACKAGE@.html \
+ files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@
+
+Or without using the substitution strings (not recommended):
+ http://example.com/~user/release/foo.html \
+ files/foo-([\d\.]+)\.tar\.gz
+
+ version=4
+
+For the upstream source package B<foo-2.0.tar.gz>, this watch file downloads
+and creates the Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>.
+
+=head2 HTTP site (pgpsigurlmangle)
+
+Here is an example for the basic single upstream tarball with the matching
+signature file in the same file path.
+
+ version=4
+ opts="pgpsigurlmangle=s%$%.asc%" http://example.com/release/@PACKAGE@.html \
+ files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@
+
+For the upstream source package B<foo-2.0.tar.gz> and the upstream signature
+file B<foo-2.0.tar.gz.asc>, this watch file downloads these files, verifies the
+authenticity using the keyring F<debian/upstream/signing-key.asc> and creates the
+Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>.
+
+Here is another example for the basic single upstream tarball with the matching
+signature file on decompressed tarball in the same file path.
+
+ version=4
+ opts="pgpsigurlmangle=s%@ARCHIVE_EXT@$%.asc%,decompress" \
+ http://example.com/release/@PACKAGE@.html \
+ files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@
+
+For the upstream source package B<foo-2.0.tar.gz> and the upstream signature
+file B<foo-2.0.tar.asc>, this watch file downloads these files, verifies the
+authenticity using the keyring F<debian/upstream/signing-key.asc> and creates the
+Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>.
+
+=head2 HTTP site (pgpmode=next/previous)
+
+Here is an example for the basic single upstream tarball with the matching
+signature file in the unrelated file path.
+
+ version=4
+ opts="pgpmode=next" http://example.com/release/@PACKAGE@.html \
+ files/(?:\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+ opts="pgpmode=previous" http://example.com/release/@PACKAGE@.html \
+ files/(?:\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ previous
+
+B<(?:\d+)> part can be any random value. The tarball file can have B<53>,
+while the signature file can have B<33>.
+
+B<([\d\.]+)> part for the signature file has a strict requirement to match that
+for the upstream tarball specified in the previous line by having B<previous>
+as I<version> in the watch line.
+
+=head2 HTTP site (flexible)
+
+Here is an example for the maximum flexibility of upstream tarball and
+signature file extensions.
+
+ version=4
+ opts="pgpmode=next" http://example.com/DL/ \
+ files/(?:\d+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+ opts="pgpmode=previous" http://example.com/DL/ \
+ files/(?:\d+)/@PACKAGE@@ANY_VERSION@@SIGNATURE_EXT@ \
+ previous
+
+=head2 HTTP site (basic MUT)
+
+Here is an example for the basic multiple upstream tarballs.
+
+ version=4
+ opts="pgpsigurlmangle=s%$%.sig%" \
+ http://example.com/release/foo.html \
+ files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian
+ opts="pgpsigurlmangle=s%$%.sig%, component=bar" \
+ http://example.com/release/foo.html \
+ files/foobar-@ANY_VERSION@@ARCHIVE_EXT@ same
+ opts="pgpsigurlmangle=s%$%.sig%, component=baz" \
+ http://example.com/release/foo.html \
+ files/foobaz-@ANY_VERSION@@ARCHIVE_EXT@ same
+
+For the main upstream source package B<foo-2.0.tar.gz> and the secondary
+upstream source packages B<foobar-2.0.tar.gz> and B<foobaz-2.0.tar.gz> which
+install under F<bar/> and F<baz/>, this watch file downloads and creates the
+Debian B<orig.tar> file B<foo_2.0.orig.tar.gz>, B<foo_2.0.orig-bar.tar.gz> and
+B<foo_2.0.orig-baz.tar.gz>. Also, these upstream tarballs are verified by
+their signature files.
+
+=head2 HTTP site (recursive directory scanning)
+
+Here is an example with the recursive directory scanning for the upstream tarball
+and its signature files released in a directory named
+after their version.
+
+ version=4
+ opts="pgpsigurlmangle=s%$%.sig%, dirversionmangle=s/-PRE/~pre/;s/-RC/~rc/" \
+ http://tmrc.mit.edu/mirror/twisted/Twisted/@ANY_VERSION@/ \
+ Twisted-@ANY_VERSION@@ARCHIVE_EXT@
+
+Here, the web site should be accessible at the following URL:
+
+ http://tmrc.mit.edu/mirror/twisted/Twisted/
+
+Here, B<dirversionmangle> option is used to normalize the sorting order of the
+directory names.
+
+=head2 HTTP site (alternative shorthand)
+
+For the bare HTTP site where you can directly see archive filenames, the normal
+watch file:
+
+ version=4
+ opts="pgpsigurlmangle=s%$%.sig%" \
+ http://www.cpan.org/modules/by-module/Text/ \
+ Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@
+
+can be rewritten in an alternative shorthand form only with a single string
+covering URL and filename:
+
+ version=4
+ opts="pgpsigurlmangle=s%$%.sig%" \
+ http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@
+
+In version=4, initial white spaces are dropped. Thus, this alternative
+shorthand form can also be written as:
+
+ version=4
+ opts="pgpsigurlmangle=s%$%.sig%" \
+ http://www.cpan.org/modules/by-module/Text/\
+ Text-CSV_XS-@ANY_VERSION@@ARCHIVE_EXT@
+
+Please note the subtle difference of a space before the tailing B<\>
+between the first and the last examples.
+
+=head2 HTTP site (funny version)
+
+For a site which has funny version numbers, the parenthesized groups will be
+joined with B<.> (period) to make a sanitized version number.
+
+ version=4
+ http://www.site.com/pub/foobar/foobar_v(\d+)_(\d+)@ARCHIVE_EXT@
+
+=head2 HTTP site (DFSG)
+
+The upstream part of the Debian version number can be mangled to indicate the
+source package was repackaged to clean up non-DFSG files:
+
+ version=4
+ opts="dversionmangle=s/\+dfsg\d*$//,repacksuffix=+dfsg" \
+ http://some.site.org/some/path/foobar-@ANY_VERSION@@ARCHIVE_EXT@
+
+See L<COPYRIGHT FILE EXAMPLES>.
+
+=head2 HTTP site (filenamemangle)
+
+The upstream tarball filename is found by taking the last component of the URL
+and removing everything after any '?' or '#'.
+
+If this does not fit to you, use B<filenamemangle>. For example, F<< <A
+href="http://foo.bar.org/dl/?path=&dl=foo-0.1.1.tar.gz"> >> could be handled
+as:
+
+ version=4
+ opts=filenamemangle=s/.*=(.*)/$1/ \
+ http://foo.bar.org/dl/\?path=&dl=foo-@ANY_VERSION@@ARCHIVE_EXT@
+
+F<< <A href="http://foo.bar.org/dl/?path=&dl_version=0.1.1"> >>
+could be handled as:
+
+ version=4
+ opts=filenamemangle=s/.*=(.*)/foo-$1\.tar\.gz/ \
+ http://foo.bar.org/dl/\?path=&dl_version=@ANY_VERSION@
+
+If the href string has no version using <I>matching-pattern>, the version can
+be obtained from the full URL using B<filenamemangle>.
+
+ version=4
+ opts=filenamemangle=s&.*/dl/(.*)/foo\.tar\.gz&foo-$1\.tar\.gz& \
+ http://foo.bar.org/dl/@ANY_VERSION@/ foo.tar.gz
+
+=head2 HTTP site (downloadurlmangle)
+
+The option B<downloadurlmangle> can be used to mangle the URL of the file
+to download. This can only be used with B<http://> URLs. This may be
+necessary if the link given on the web page needs to be transformed in
+some way into one which will work automatically, for example:
+
+ version=4
+ opts=downloadurlmangle=s/prdownload/download/ \
+ http://developer.berlios.de/project/showfiles.php?group_id=2051 \
+ http://prdownload.berlios.de/softdevice/vdr-softdevice-@ANY_VERSION@@ARCHIVE_EXT@
+
+=head2 HTTP site (oversionmangle, MUT)
+
+The option B<oversionmangle> can be used to mangle the version of the source
+tarball (B<.orig.tar.gz> and B<.orig-bar.tar.gz>). For example, B<+dfsg> can
+be added to the upstream version as:
+
+ version=4
+ opts=oversionmangle=s/(.*)/$1+dfsg/ \
+ http://example.com/~user/release/foo.html \
+ files/foo-@ANY_VERSION@@ARCHIVE_EXT@ debian
+ opts="component=bar" \
+ http://example.com/~user/release/foo.html \
+ files/bar-@ANY_VERSION@@ARCHIVE_EXT@ same
+
+See L<COPYRIGHT FILE EXAMPLES>.
+
+=head2 HTTP site (pagemangle)
+
+The option B<pagemangle> can be used to mangle the downloaded web page before
+applying other rules. The non-standard web page without proper B<< <a href="
+>> << ... >> B<< "> >> entries can be converted. For example, if F<foo.html>
+uses B<< <a bogus=" >> I<< ... >> B<< "> >>, this can be converted to the
+standard page format with:
+
+ version=4
+ opts=pagemangle="s/<a\s+bogus=/<a href=/g" \
+ http://example.com/release/foo.html \
+ files/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@
+
+Please note the use of B<g> here to replace all occurrences.
+
+If F<foo.html> uses B<< <Key> >> I<< ... >> B<< </Key> >>, this can be
+converted to the standard page format with:
+
+ version=4
+ opts="pagemangle=s%<Key>([^<]*)</Key>%<Key><a href="$1">$1</a></Key>%g" \
+ http://example.com/release/foo.html \
+ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@
+
+=head2 FTP site (basic):
+
+ version=4
+ ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-@ANY_VERSION@@ARCHIVE_EXT@
+
+=head2 FTP site (regex special characters):
+
+ version=4
+ ftp://ftp.worldforge.org/pub/worldforge/libs/\
+ Atlas-C++/transitional/Atlas-C\+\+-@ANY_VERSION@@ARCHIVE_EXT@
+
+Please note that this URL is connected to be I< ... >B<libs/Atlas-C++/>I< ... >
+. For B<++>, the first one in the directory path is verbatim while the one in
+the filename is escaped by B<\>.
+
+=head2 FTP site (funny version)
+
+This is another way of handling site with funny version numbers,
+this time using mangling. (Note that multiple groups will be
+concatenated before mangling is performed, and that mangling will
+only be performed on the basename version number, not any path
+version numbers.)
+
+ version=4
+ opts="uversionmangle=s/^/0.0./" \
+ ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/\
+ development/Wine-@ANY_VERSION@@ARCHIVE_EXT@
+
+=head2 sf.net
+
+For SourceForge based projects, qa.debian.org runs a redirector which allows a
+simpler form of URL. The format below will automatically be rewritten to use
+the redirector with the watch file:
+
+ version=4
+ https://sf.net/<project>/ <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@
+
+For B<audacity>, set the watch file as:
+
+ version=4
+ https://sf.net/audacity/ audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@
+
+Please note, you can still use normal functionalities of B<uscan> to set up a
+watch file for this site without using the redirector.
+
+ version=4
+ opts="uversionmangle=s/-pre/~pre/, \
+ filenamemangle=s%(?:.*)audacity-minsrc-(.+)\.tar\.xz/download%\
+ audacity-$1.tar.xz%" \
+ http://sourceforge.net/projects/audacity/files/audacity/@ANY_VERSION@/ \
+ (?:.*)audacity-minsrc-@ANY_VERSION@@ARCHIVE_EXT@/download
+
+Here, B<%> is used as the separator instead of the standard B</>.
+
+=head2 github.com
+
+For GitHub based projects, you can use the tags or releases page. The archive
+URL uses only the version as the filename. You can rename the downloaded
+upstream tarball from into the standard F<< <project>-<version>.tar.gz >> using
+B<filenamemangle>:
+
+ version=4
+ opts="filenamemangle=s%(?:.*?)?v?@ANY_VERSION@(@ARCHIVE_EXT@)%@PACKAGE@-$1$2%" \
+ https://github.com/<user>/<project>/tags \
+ (?:.*?/)?v?@ANY_VERSION@@ARCHIVE_EXT@
+
+=head2 PyPI
+
+For PyPI based projects, pypi.debian.net runs a redirector which allows a
+simpler form of URL. The format below will automatically be rewritten to use
+the redirector with the watch file:
+
+ version=4
+ https://pypi.python.org/packages/source/<initial>/<project>/ \
+ <tar-name>-@ANY_VERSION@@ARCHIVE_EXT@
+
+For B<cfn-sphere>, set the watch file as:
+
+ version=4
+ https://pypi.python.org/packages/source/c/cfn-sphere/ \
+ cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@
+
+Please note, you can still use normal functionalities of B<uscan> to set up a
+watch file for this site without using the redirector.
+
+ version=4
+ opts="pgpmode=none" \
+ https://pypi.python.org/pypi/cfn-sphere/ \
+ https://pypi.python.org/packages/.*/.*/.*/\
+ cfn-sphere-@ANY_VERSION@@ARCHIVE_EXT@#.*
+
+=head2 code.google.com
+
+Sites which used to be hosted on the Google Code service should have migrated
+to elsewhere (github?). Please look for the newer upstream site if available.
+
+=head2 npmjs.org (node modules)
+
+npmjs.org modules are published in JSON files. Here is a way to read them:
+
+ version=4
+ opts="searchmode=plain" \
+ https://registry.npmjs.org/aes-js \
+ https://registry.npmjs.org/aes-js/-/aes-js-@ANY_VERSION@@ARCHIVE_EXT@
+
+=head2 grouped package
+
+Some node modules are split into multiple little upstream package. Here is
+a way to group them:
+
+ version=4
+ opts="searchmode=plain,pgpmode=none" \
+ https://registry.npmjs.org/mongodb \
+ https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group
+ opts="searchmode=plain,pgpmode=none,component=bson" \
+ https://registry.npmjs.org/bson \
+ https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ group
+ opts="searchmode=plain,pgpmode=none,component=mongodb-core" \
+ https://registry.npmjs.org/mongodb-core \
+ https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ group
+ opts="searchmode=plain,pgpmode=none,component=requireoptional" \
+ https://registry.npmjs.org/require_optional \
+ https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ group
+
+Package version is then the concatenation of upstream versions separated by
+"+~".
+
+To avoid having a too long version, the "checksum" method can be used.
+In this case, the main source has to be declared as "group":
+
+ version=4
+ opts="searchmode=plain,pgpmode=none" \
+ https://registry.npmjs.org/mongodb \
+ https://registry.npmjs.org/mongodb/-/mongodb-@ANY_VERSION@@ARCHIVE_EXT@ group
+ opts="searchmode=plain,pgpmode=none,component=bson" \
+ https://registry.npmjs.org/bson \
+ https://registry.npmjs.org/bson/-/bson-@ANY_VERSION@@ARCHIVE_EXT@ checksum
+ opts="searchmode=plain,pgpmode=none,component=mongodb-core" \
+ https://registry.npmjs.org/mongodb-core \
+ https://registry.npmjs.org/mongodb-core/-/mongodb-core-@ANY_VERSION@@ARCHIVE_EXT@ checksum
+ opts="searchmode=plain,pgpmode=none,component=requireoptional" \
+ https://registry.npmjs.org/require_optional \
+ https://registry.npmjs.org/require_optional/-/require_optional-@ANY_VERSION@@ARCHIVE_EXT@ checksum
+
+The "checksum" is made up of the separate sum of each number composing the
+component versions. Following is an example with 3 components whose versions
+are "1.2.4", "2.0.1" and "10.0", with the main tarball having version "2.0.6":
+
+ Main: 2.0.6
+ Comp1: 1 . 2 . 4
+ Comp2: 2 . 0 . 1
+ Comp3: 10 . 0
+ ================================
+ Result : 1+2+10 . 2+0+0 . 4+1
+ Checksum: 13 . 2 . 5
+ ================================
+ Final Version: 2.0.6+~cs13.2.5
+
+uscan will also display the original version string before being encoded into
+the checksum, which can for example be used in a debian/changelog entry to
+easily follow the changes:
+
+ 2.0.6+~1.2.4+~2.0.1+~10.0
+
+B<Note>: This feature currently accepts only versions composed of digits and
+full stops (`.`).
+
+=head2 direct access to the git repository (tags)
+
+If the upstream only publishes its code via the git repository and its code has
+no web interface to obtain the release tarball, you can use B<uscan> with the
+tags of the git repository to track and package the new upstream release.
+
+ version=4
+ opts="mode=git, gitmode=full, pgpmode=none" \
+ http://git.ao2.it/tweeper.git \
+ refs/tags/v@ANY_VERSION@
+
+Please note "B<git ls-remote>" is used to obtain references for tags.
+
+If a tag B<v20.5> is the newest tag, the above example downloads
+I<spkg>B<-20.5.tar.xz> after making a full clone of the git repository which is
+needed for dumb git server.
+
+If tags are signed, set B<pgpmode=gittag> to verify them.
+
+=head2 direct access to the git repository (HEAD)
+
+If the upstream only publishes its code via the git repository and its code has
+no web interface nor the tags to obtain the released tarball, you can use
+B<uscan> with the HEAD of the git repository to track and package the new
+upstream release with an automatically generated version string.
+
+ version=4
+ opts="mode=git, pgpmode=none" \
+ https://github.com/Debian/dh-make-golang \
+ HEAD
+
+Please note that a local shallow copy of the git repository is made with "B<git
+clone --bare --depth=1> ..." normally in the target directory. B<uscan>
+generates the new upstream version with "B<git log --date=format:%Y%m%d
+--pretty=0.0~git%cd.%h>" on this local copy of repository as its default
+behavior.
+
+The generation of the upstream version string may the adjusted to your taste by
+adding B<pretty> and B<date> options to the B<opts> arguments.
+
+=head2 direct access to the Subversion repository (tags)
+
+If the upstream only publishes its code via the Subversion repository and its
+code has no web interface to obtain the release tarball, you can use B<uscan>
+with the tags of the Subversion repository to track and package the new upstream
+release.
+
+ version=4
+ opts="mode=svn, pgpmode=none" \
+ svn://svn.code.sf.net/p/jmol/code/tags/ \
+ @ANY_VERSION@\/
+
+=head2 direct access to the Subversion repository (HEAD)
+
+If the upstream only publishes its code via the Subversion repository and its
+code has no web interface to obtain the release tarball, you can use B<uscan>
+to get the most recent source of a subtree in the repository with an
+automatically generated version string.
+
+ version=4
+ opts="mode=svn, pgpmode=none" \
+ svn://svn.code.sf.net/p/jmol/code/trunk/ \
+ HEAD
+
+By default, B<uscan> generates the new upstream version by appending the
+revision number to "0.0~svn". This can later be changed using B<uversionmangle>.
+
+=head1 COPYRIGHT FILE EXAMPLES
+
+Here is an example for the F<debian/copyright> file which initiates automatic
+repackaging of the upstream tarball into I<< <spkg>_<oversion>.orig.tar.gz >>
+(In F<debian/copyright>, the B<Files-Excluded> and
+B<Files-Excluded->I<component> stanzas are a part of the first paragraph and
+there is a blank line before the following paragraphs which contain B<Files>
+and other stanzas.):
+
+ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+ Files-Excluded: exclude-this
+ exclude-dir
+ */exclude-dir
+ .*
+ */js/jquery.js
+
+ Files: *
+ Copyright: ...
+ ...
+
+Here is another example for the F<debian/copyright> file which initiates
+automatic repackaging of the multiple upstream tarballs into
+I<< <spkg>_<oversion>.orig.tar.gz >> and
+I<< <spkg>_<oversion>.orig-bar.tar.gz >>:
+
+ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+ Files-Excluded: exclude-this
+ exclude-dir
+ */exclude-dir
+ .*
+ */js/jquery.js
+ Files-Excluded-bar: exclude-this
+ exclude-dir
+ */exclude-dir
+ .*
+ */js/jquery.js
+
+ Files: *
+ Copyright: ...
+ ...
+
+See mk-origtargz(1).
+
+=head1 KEYRING FILE EXAMPLES
+
+Let's assume that the upstream "B<< uscan test key (no secret)
+<none@debian.org> >>" signs its package with a secret OpenPGP key and publishes
+the corresponding public OpenPGP key. This public OpenPGP key can be
+identified in 3 ways using the hexadecimal form.
+
+=over
+
+=item * The fingerprint as the 20 byte data calculated from the public OpenPGP
+key. E. g., 'B<CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF>'
+
+=item * The long keyid as the last 8 byte data of the fingerprint. E. g.,
+'B<C77E2D6872543FAF>'
+
+=item * The short keyid is the last 4 byte data of the fingerprint. E. g.,
+'B<72543FAF>'
+
+=back
+
+Considering the existence of the collision attack on the short keyid, the use
+of the long keyid is recommended for receiving keys from the public key
+servers. You must verify the downloaded OpenPGP key using its full fingerprint
+value which you know is the trusted one.
+
+The armored keyring file F<debian/upstream/signing-key.asc> can be created by
+using the B<gpg> (or B<gpg2>) command as follows.
+
+ $ gpg --recv-keys "C77E2D6872543FAF"
+ ...
+ $ gpg --finger "C77E2D6872543FAF"
+ pub 4096R/72543FAF 2015-09-02
+ Key fingerprint = CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF
+ uid uscan test key (no secret) <none@debian.org>
+ sub 4096R/52C6ED39 2015-09-02
+ $ cd path/to/<upkg>-<uversion>
+ $ mkdir -p debian/upstream
+ $ gpg --export --export-options export-minimal --armor \
+ 'CF21 8F0E 7EAB F584 B7E2 0402 C77E 2D68 7254 3FAF' \
+ >debian/upstream/signing-key.asc
+
+The binary keyring files, F<debian/upstream/signing-key.pgp> and
+F<debian/upstream-signing-key.pgp>, are still supported but deprecated.
+
+If a group of developers sign the package, you need to list fingerprints of all
+of them in the argument for B<gpg --export ...> to make the keyring to contain
+all OpenPGP keys of them.
+
+Sometimes you may wonder who made a signature file. You can get the public
+keyid used to create the detached signature file F<foo-2.0.tar.gz.asc> by
+running B<gpg> as:
+
+ $ gpg -vv foo-2.0.tar.gz.asc
+ gpg: armor: BEGIN PGP SIGNATURE
+ gpg: armor header: Version: GnuPG v1
+ :signature packet: algo 1, keyid C77E2D6872543FAF
+ version 4, created 1445177469, md5len 0, sigclass 0x00
+ digest algo 2, begin of digest 7a c7
+ hashed subpkt 2 len 4 (sig created 2015-10-18)
+ subpkt 16 len 8 (issuer key ID C77E2D6872543FAF)
+ data: [4091 bits]
+ gpg: assuming signed data in `foo-2.0.tar.gz'
+ gpg: Signature made Sun 18 Oct 2015 11:11:09 PM JST using RSA key ID 72543FAF
+ ...
+
+=head1 COMMANDLINE OPTIONS
+
+For the basic usage, B<uscan> does not require to set these options.
+
+=over
+
+=item B<--conffile>, B<--conf-file>
+
+Add or replace default configuration files (C</etc/devscripts.conf> and
+C<~/.devscripts>). This can only be used as the first option given on the
+command-line.
+
+=over
+
+=item replace:
+
+ uscan --conf-file test.conf --verbose
+
+=item add:
+
+ uscan --conf-file +test.conf --verbose
+
+If one B<--conf-file> has no C<+>, default configuration files are ignored.
+
+=back
+
+=item B<--no-conf>, B<--noconf>
+
+Don't read any configuration files. This can only be used as the first option
+given on the command-line.
+
+=item B<--no-verbose>
+
+Don't report verbose information. (default)
+
+=item B<--verbose>, B<-v>
+
+Report verbose information.
+
+=item B<--debug>, B<-vv>
+
+Report verbose information and some internal state values.
+
+=item B<--extra-debug>, B<-vvv>
+
+Report verbose information including the downloaded
+web pages as processed to STDERR for debugging.
+
+=item B<--dehs>
+
+Send DEHS style output (XML-type) to STDOUT, while
+send all other uscan output to STDERR.
+
+=item B<--no-dehs>
+
+Use only traditional uscan output format. (default)
+
+=item B<--download>, B<-d>
+
+Download the new upstream release. (default)
+
+=item B<--force-download>, B<-dd>
+
+Download the new upstream release even if up-to-date. (may not overwrite the local file)
+
+=item B<--overwrite-download>, B<-ddd>
+
+Download the new upstream release even if up-to-date. (may overwrite the local file)
+
+=item B<--no-download>, B<--nodownload>
+
+Don't download and report information.
+
+Previously downloaded tarballs may be used.
+
+Change default to B<--skip-signature>.
+
+=item B<--signature>
+
+Download signature. (default)
+
+=item B<--no-signature>
+
+Don't download signature but verify if already downloaded.
+
+=item B<--skip-signature>
+
+Don't bother download signature nor verifying signature.
+
+=item B<--safe>, B<--report>
+
+Avoid running unsafe scripts by skipping both the repacking of the downloaded
+package and the updating of the new source tree.
+
+Change default to B<--no-download> and B<--skip-signature>.
+
+When the objective of running B<uscan> is to gather the upstream package status
+under the security conscious environment, please make sure to use this option.
+
+=item B<--report-status>
+
+This is equivalent of setting "B<--verbose --safe>".
+
+=item B<--download-version> I<version>
+
+Specify the I<version> which the upstream release must match in order to be
+considered, rather than using the release with the highest version.
+(a best effort feature)
+
+=item B<--download-debversion> I<version>
+
+Specify the Debian package version to download the corresponding upstream
+release version. The B<dversionmangle> and B<uversionmangle> rules are considered.
+(a best effort feature)
+
+=item B<--download-current-version>
+
+Download the currently packaged version.
+(a best effort feature)
+
+=item B<--check-dirname-level> I<N>
+
+See the below section L<Directory name checking> for an explanation of this option.
+
+=item B<--check-dirname-regex> I<regex>
+
+See the below section L<Directory name checking> for an explanation of this option.
+
+=item B<--destdir> I<path>
+Normally, B<uscan> changes its internal current directory to the package's
+source directory where the F<debian/> is located. Then the destination
+directory for the downloaded tarball and other files is set to the parent
+directory F<../> from this internal current directory.
+
+This default destination directory can be overridden by setting B<--destdir>
+option to a particular I<path>. If this I<path> is a relative path, the
+destination directory is determined in relative to the internal current
+directory of B<uscan> execution. If this I<path> is a absolute path, the
+destination directory is set to I<path> irrespective of the internal current
+directory of B<uscan> execution.
+
+The above is true not only for the simple B<uscan> run in the single source tree
+but also for the advanced scanning B<uscan> run with subdirectories holding
+multiple source trees.
+
+One exception is when B<--watchfile> and B<--package> are used together. For
+this case, the internal current directory of B<uscan> execution and the default
+destination directory are set to the current directory F<.> where B<uscan> is
+started. The default destination directory can be overridden by setting
+B<--destdir> option as well.
+
+=item B<--package> I<package>
+
+Specify the name of the package to check for rather than examining
+F<debian/changelog>; this requires the B<--upstream-version> (unless a version
+is specified in the F<watch> file) and B<--watchfile> options as well.
+Furthermore, no directory scanning will be done and nothing will be downloaded.
+This option automatically sets B<--no-download> and B<--skip-signature>; and
+probably most useful in conjunction with the DEHS system (and B<--dehs>).
+
+=item B<--upstream-version> I<upstream-version>
+
+Specify the current upstream version rather than examine F<debian/watch> or
+F<debian/changelog> to determine it. This is ignored if a directory scan is being
+performed and more than one F<debian/watch> file is found.
+
+=item B<--watchfile> I<watchfile>
+
+Specify the I<watchfile> rather than perform a directory scan to determine it.
+If this option is used without B<--package>, then B<uscan> must be called from
+within the Debian package source tree (so that F<debian/changelog> can be found
+simply by stepping up through the tree).
+
+One exception is when B<--watchfile> and B<--package> are used together.
+B<uscan> can be called from anywhare and the internal current directory of
+B<uscan> execution and the default destination directory are set to the current
+directory F<.> where B<uscan> is started.
+
+See more in the B<--destdir> explanation.
+
+=item B<--bare>
+
+Disable all site specific special case codes to perform URL redirections and
+page content alterations.
+
+=item B<--http-header>
+
+Add specified header in HTTP requests for matching url. This option can be used
+more than one time, values must be in the form "baseUrl@Name=value. Example:
+
+ uscan --http-header https://example.org@My-Token=qwertyuiop
+
+Security:
+
+=over
+
+=item The given I<baseUrl> must exactly match the base url before '/'.
+Examples:
+
+ | --http-header value | Good for | Never used |
+ +------------------------------------+-----------------------------+------------+
+ | https://example.org.com@Hdr=Value | https://example.org.com/... | |
+ | https://example.org.com/@Hdr=Value | | X |
+ | https://e.com:1879@Hdr=Value | https://e.com:1879/... | |
+ | https://e.com:1879/dir@Hdr=Value | https://e.com:1879/dir/... | |
+ | https://e.com:1879/dir/@Hdr=Value | | X |
+
+=item It is strongly recommended to not use this feature to pass a secret
+token over unciphered connection I<(http://)>
+
+=item You can use C<USCAN_HTTP_HEADER> variable (in C<~/.devscripts>) to hide
+secret token from scripts
+
+=back
+
+=item B<--no-exclusion>
+
+Don't automatically exclude files mentioned in F<debian/copyright> field B<Files-Excluded>.
+
+=item B<--pasv>
+
+Force PASV mode for FTP connections.
+
+=item B<--no-pasv>
+
+Don't use PASV mode for FTP connections.
+
+=item B<--no-symlink>
+
+Don't rename nor repack upstream tarball.
+
+=item B<--timeout> I<N>
+
+Set timeout to I<N> seconds (default 20 seconds).
+
+=item B<--user-agent>, B<--useragent>
+
+Override the default user agent header.
+
+=item B<--help>
+
+Give brief usage information.
+
+=item B<--version>
+
+Display version information.
+
+=back
+
+B<uscan> also accepts following options and passes them to B<mk-origtargz>:
+
+=over
+
+=item B<--symlink>
+
+Make B<orig.tar.gz> (with the appropriate extension) symlink to the downloaded
+files. (This is the default behavior.)
+
+=item B<--copy>
+
+Instead of symlinking as described above, copy the downloaded files.
+
+=item B<--rename>
+
+Instead of symlinking as described above, rename the downloaded files.
+
+=item B<--repack>
+
+After having downloaded an lzma tar, xz tar, bzip tar, gz tar, zip, jar, xpi,
+zstd archive, repack it to the specified compression (see B<--compression>).
+
+The unzip package must be installed in order to repack zip and jar archives,
+the mozilla-devscripts package must be installed to repack xpi archives,
+the xz-utils package must be installed to repack lzma or xz tar archives, and
+zstd must be installed to repack zstd archives.
+
+=item B<--compression> [ B<gzip> | B<bzip2> | B<lzma> | B<xz> ]
+
+In the case where the upstream sources are repacked (either because B<--repack>
+option is given or F<debian/copyright> contains the field B<Files-Excluded>),
+it is possible to control the compression method via the parameter. The
+default is B<gzip> for normal tarballs, and B<xz> for tarballs generated
+directly from the git repository.
+
+=item B<--copyright-file> I<copyright-file>
+
+Exclude files mentioned in B<Files-Excluded> in the given I<copyright-file>.
+This is useful when running B<uscan> not within a source package directory.
+
+=back
+
+=head1 DEVSCRIPT CONFIGURATION VARIABLES
+
+For the basic usage, B<uscan> does not require to set these configuration
+variables.
+
+The two configuration files F</etc/devscripts.conf> and F<~/.devscripts> are
+sourced by a shell in that order to set configuration variables. These
+may be overridden by command line options. Environment variable settings are
+ignored for this purpose. If the first command line option given is
+B<--noconf>, then these files will not be read. The currently recognized
+variables are:
+
+=over
+
+=item B<USCAN_DOWNLOAD>
+
+Download or report only:
+
+=over
+
+=item B<no>: equivalent to B<--no-download>, newer upstream files will
+not be downloaded.
+
+=item B<yes>: equivalent to B<--download>, newer upstream files will
+be downloaded. This is the default behavior.
+
+See also B<--force-download> and B<--overwrite-download>.
+
+=back
+
+=item B<USCAN_SAFE>
+
+If this is set to B<yes>, then B<uscan> avoids running unsafe scripts by
+skipping both the repacking of the downloaded package and the updating of the
+new source tree; this is equivalent to the B<--safe> options; this also sets
+the default to B<--no-download> and B<--skip-signature>.
+
+=item B<USCAN_PASV>
+
+If this is set to yes or no, this will force FTP connections to use PASV mode
+or not to, respectively. If this is set to default, then B<Net::FTP(3)> makes
+the choice (primarily based on the B<FTP_PASSIVE> environment variable).
+
+=item B<USCAN_TIMEOUT>
+
+If set to a number I<N>, then set the timeout to I<N> seconds. This is
+equivalent to the B<--timeout> option.
+
+=item B<USCAN_SYMLINK>
+
+If this is set to no, then a I<pkg>_I<version>B<.orig.tar.{gz|bz2|lzma|xz}>
+symlink will not be made (equivalent to the B<--no-symlink> option). If it is
+set to B<yes> or B<symlink>, then the symlinks will be made. If it is set to
+B<rename>, then the files are renamed (equivalent to the B<--rename> option).
+
+=item B<USCAN_DEHS_OUTPUT>
+
+If this is set to B<yes>, then DEHS-style output will be used. This is
+equivalent to the B<--dehs> option.
+
+=item B<USCAN_VERBOSE>
+
+If this is set to B<yes>, then verbose output will be given. This is
+equivalent to the B<--verbose> option.
+
+=item B<USCAN_USER_AGENT>
+
+If set, the specified user agent string will be used in place of the default.
+This is equivalent to the B<--user-agent> option.
+
+=item B<USCAN_DESTDIR>
+
+If set, the downloaded files will be placed in this directory. This is
+equivalent to the B<--destdir> option.
+
+=item B<USCAN_REPACK>
+
+If this is set to yes, then after having downloaded a bzip tar, lzma tar, xz
+tar, zip or zstd archive, uscan will repack it to the specified compression
+(see B<--compression>). This is equivalent to the B<--repack> option.
+
+=item B<USCAN_EXCLUSION>
+
+If this is set to no, files mentioned in the field B<Files-Excluded> of
+F<debian/copyright> will be ignored and no exclusion of files will be tried.
+This is equivalent to the B<--no-exclusion> option.
+
+=item B<USCAN_HTTP_HEADER>
+
+If set, the specified http header will be used if URL match. This is equivalent
+to B<--http-header> option.
+
+=back
+
+=head1 EXIT STATUS
+
+The exit status gives some indication of whether a newer version was found or
+not; one is advised to read the output to determine exactly what happened and
+whether there were any warnings to be noted.
+
+=over
+
+=item B<0>
+
+Either B<--help> or B<--version> was used, or for some F<watch> file which was
+examined, a newer upstream version was located.
+
+=item B<1>
+
+No newer upstream versions were located for any of the F<watch> files examined.
+
+=back
+
+=head1 ADVANCED FEATURES
+
+B<uscan> has many other enhanced features which are skipped in the above
+section for the simplicity. Let's check their highlights.
+
+B<uscan> can be executed with I<path> as its argument to change the starting
+directory of search from the current directory to I<path> .
+
+If you are not sure what exactly is happening behind the scene, please enable
+the B<--verbose> option. If this is not enough, enable the B<--debug> option
+too see all the internal activities.
+
+See L<COMMANDLINE OPTIONS> and L<DEVSCRIPT CONFIGURATION VARIABLES> for other
+variations.
+
+=head2 Custom script
+
+The optional I<script> parameter in F<debian/watch> means to execute I<script>
+with options after processing this line if specified.
+
+See L<HISTORY AND UPGRADING> for how B<uscan> invokes the custom I<script>.
+
+For compatibility with other tools such as B<git-buildpackage>, it may not be
+wise to create custom scripts with random behavior. In general, B<uupdate> is
+the best choice for the non-native package and custom scripts, if created,
+should behave as if B<uupdate>. For possible use case, see
+L<http://bugs.debian.org/748474> as an example.
+
+=head2 URL diversion
+
+Some popular web sites changed their web page structure causing maintenance
+problems to the watch file. There are some redirection services created to
+ease maintenance of the watch file. Currently, B<uscan> makes automatic
+diversion of URL requests to the following URLs to cope with this situation.
+
+=over
+
+=item * L<http://sf.net>
+
+=item * L<http://pypi.python.org>
+
+=back
+
+=head2 Directory name checking
+
+Similarly to several other scripts in the B<devscripts> package, B<uscan>
+explores the requested directory trees looking for F<debian/changelog> and
+F<debian/watch> files. As a safeguard against stray files causing potential
+problems, and in order to promote efficiency, it will examine the name of the
+parent directory once it finds the F<debian/changelog> file, and check that the
+directory name corresponds to the package name. It will only attempt to
+download newer versions of the package and then perform any requested action if
+the directory name matches the package name. Precisely how it does this is
+controlled by two configuration file variables
+B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> and B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>, and
+their corresponding command-line options B<--check-dirname-level> and
+B<--check-dirname-regex>.
+
+B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL> can take the following values:
+
+=over
+
+=item B<0>
+
+Never check the directory name.
+
+=item B<1>
+
+Only check the directory name if we have had to change directory in
+our search for F<debian/changelog>, that is, the directory containing
+F<debian/changelog> is not the directory from which B<uscan> was invoked.
+This is the default behavior.
+
+=item B<2>
+
+Always check the directory name.
+
+=back
+
+The directory name is checked by testing whether the current directory name (as
+determined by pwd(1)) matches the regex given by the configuration file
+option B<DEVSCRIPTS_CHECK_DIRNAME_REGEX> or by the command line option
+B<--check-dirname-regex> I<regex>. Here regex is a Perl regex (see
+perlre(3perl)), which will be anchored at the beginning and the end. If regex
+contains a B</>, then it must match the full directory path. If not, then
+it must match the full directory name. If regex contains the string I<package>,
+this will be replaced by the source package name, as determined from the
+F<debian/changelog>. The default value for the regex is: I<package>B<(-.+)?>, thus matching
+directory names such as I<package> and I<package>-I<version>.
+
+=head1 HISTORY AND UPGRADING
+
+This section briefly describes the backwards-incompatible F<watch> file features
+which have been added in each F<watch> file version, and the first version of the
+B<devscripts> package which understood them.
+
+=over
+
+=item Pre-version 2
+
+The F<watch> file syntax was significantly different in those days. Don't use it.
+If you are upgrading from a pre-version 2 F<watch> file, you are advised to read
+this manpage and to start from scratch.
+
+=item Version 2
+
+B<devscripts> version 2.6.90: The first incarnation of the current style of
+F<watch> files. This version is also deprecated and will be rejected after
+the Debian 11 release.
+
+=item Version 3
+
+B<devscripts> version 2.8.12: Introduced the following: correct handling of
+regex special characters in the path part, directory/path pattern matching,
+version number in several parts, version number mangling. Later versions
+have also introduced URL mangling.
+
+If you are upgrading from version 2, the key incompatibility is if you have
+multiple groups in the pattern part; whereas only the first one would be used
+in version 2, they will all be used in version 3. To avoid this behavior,
+change the non-version-number groups to be B<(?:> I< ...> B<)> instead of a
+plain B<(> I< ... > B<)> group.
+
+=over
+
+=item * B<uscan> invokes the custom I<script> as "I<script> B<--upstream-version>
+I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>".
+
+=item * B<uscan> invokes the standard B<uupdate> as "B<uupdate> B<--no-symlink
+--upstream-version> I<version> B<../>I<spkg>B<_>I<version>B<.orig.tar.gz>".
+
+=back
+
+=item Version 4
+
+B<devscripts> version 2.15.10: The first incarnation of F<watch> files
+supporting multiple upstream tarballs.
+
+The syntax of the watch file is relaxed to allow more spaces for readability.
+
+If you have a custom script in place of B<uupdate>, you may also encounter
+problems updating from Version 3.
+
+=over
+
+=item * B<uscan> invokes the custom I<script> as "I<script> B<--upstream-version>
+I<version>".
+
+=item * B<uscan> invokes the standard B<uupdate> as "B<uupdate> B<--find>
+B<--upstream-version> I<version>".
+
+=back
+
+Restriction for B<--dehs> is lifted by redirecting other output to STDERR when
+it is activated.
+
+=back
+
+=head1 SEE ALSO
+
+dpkg(1), mk-origtargz(1), perlre(1), uupdate(1), devscripts.conf(5)
+
+=head1 AUTHOR
+
+The original version of uscan was written by Christoph Lameter
+<clameter@debian.org>. Significant improvements, changes and bugfixes were
+made by Julian Gilbey <jdg@debian.org>. HTTP support was added by Piotr
+Roszatycki <dexter@debian.org>. The program was rewritten in Perl by Julian
+Gilbey. Xavier Guimard converted it in object-oriented Perl using L<Moo>.
+
+=cut
+
+#######################################################################
+# }}} code 0: POD for manpage
+#######################################################################
+#######################################################################
+# {{{ code 1: initializer, command parser, and loop over watchfiles
+#######################################################################
+
+# This code block is the start up of uscan.
+# Actual processing is performed by process_watchfile in the next block
+#
+# This has 3 different modes to process watchfiles
+#
+# * If $opt_watchfile and $opt_package are defined, test specified watchfile
+# without changelog (sanity check for $opt_uversion may be good idea)
+# * If $opt_watchfile is defined but $opt_package isn't defined, test specified
+# watchfile assuming you are in source tree and debian/changelogis used to
+# set variables
+# * If $opt_watchfile isn't defined, scan subdirectories of directories
+# specified as ARGS (if none specified, "." is scanned).
+# * Normal packaging has no ARGS and uses "."
+# * Archive status scanning tool uses many ARGS pointing to the expanded
+# source tree to be checked.
+# Comments below focus on Normal packaging case and sometimes ignores first 2
+# watch file testing setup.
+
+use 5.010; # defined-or (//)
+use strict;
+use warnings;
+use Cwd qw/cwd/;
+use Devscripts::Uscan::Config;
+use Devscripts::Uscan::FindFiles;
+use Devscripts::Uscan::Output;
+use Devscripts::Uscan::WatchFile;
+
+our $uscan_version = "###VERSION###";
+
+BEGIN {
+ pop @INC if $INC[-1] eq '.';
+}
+
+my $config = Devscripts::Uscan::Config->new->parse;
+
+uscan_verbose "$progname (version $uscan_version) See $progname(1) for help";
+if ($dehs) {
+ uscan_verbose "The --dehs option enabled.\n"
+ . " STDOUT = XML output for use by other programs\n"
+ . " STDERR = plain text output for human\n"
+ . " Use the redirection of STDOUT to a file to get the clean XML data";
+}
+
+# Did we find any new upstream versions on our wanderings?
+my $res = 0;
+
+my @wf = find_watch_files($config);
+foreach (@wf) {
+ my $tmp = process_watchfile(@$_);
+ $res ||= $tmp;
+
+ # Are there any warnings to give if we're using dehs?
+ dehs_output if ($dehs);
+}
+
+uscan_verbose "Scan finished";
+
+# Are there any warnings to give if we're using dehs?
+$dehs_end_output = 1;
+dehs_output if ($dehs);
+
+exit($res ? $res : $found ? 0 : 1);
+
+#######################################################################
+# {{{ code 2: process watchfile by looping over watchline
+#######################################################################
+
+sub process_watchfile {
+ my ($pkg_dir, $package, $version, $watchfile) = @_;
+ my $opwd = cwd();
+ chdir $pkg_dir;
+
+ my $wf = Devscripts::Uscan::WatchFile->new({
+ config => $config,
+ package => $package,
+ pkg_dir => $pkg_dir,
+ pkg_version => $version,
+ watchfile => $watchfile,
+ });
+ return $wf->status if ($wf->status);
+
+ my $res = $wf->process_lines;
+ chdir $opwd;
+ return $res;
+}
+#######################################################################
+# }}} code 2: process watchfile by looping over watchline
+#######################################################################
+
diff --git a/scripts/uupdate.1 b/scripts/uupdate.1
new file mode 100644
index 0000000..cf63a0d
--- /dev/null
+++ b/scripts/uupdate.1
@@ -0,0 +1,199 @@
+.TH UUPDATE 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+uupdate \- upgrade a source code package from an upstream revision
+.SH SYNOPSIS
+\fBuupdate\fR [\fIoptions\fR] \fInew_upstream_archive\fR [\fIversion\fR]
+.br
+\fBuupdate\fR [\fIoptions\fR] \fB\-\-find\fR|\fB\-f\fR
+.br
+\fBuupdate\fR [\fIoptions\fR] \fB\-\-patch\fR|\fB\-p\fR \fIpatch_file\fR
+.SH DESCRIPTION
+\fBuupdate\fR modifies an existing Debian source code archive to
+reflect an upstream update supplied as a patch or from a wholly new
+source code archive. The utility needs to be invoked from the top
+directory of the old source code directory, and if a relative name is
+given for the new archive or patch file, it will be looked for first
+relative to the execution directory and then relative to the parent of
+the source tree. (For example, if the changelog file is
+\fI/usr/local/src/foo/foo-1.1/debian/changelog\fR, then the archive or
+patch file will be looked for relative to \fI/usr/local/src/foo\fR.)
+Note that the patch file or archive cannot be within the source tree
+itself. The full details of what the code does are given below.
+.PP
+Currently supported source code file types are \fI.tar.gz\fR,
+\fI.tar.bz2\fR, \fI.tar.Z\fR, \fI.tgz\fR, \fI.tar\fR, \fI.tar.lzma\fR,
+\fI.tar.xz\fR, \fI.7z\fR and \fI.zip\fR
+archives. Also supported are already unpacked source code archives;
+simply give the path of the source code directory. Supported patch
+file types are \fBgzip\fR-compressed, \fBbzip2\fR-compressed,
+\fBlzma\fR-compressed, \fBxz\fR-compressed and
+uncompressed patch files. The file types are identified by the file
+names, so they must use the standard suffixes.
+.PP
+Usually \fBuupdate\fR will be able to deduce the version number from
+the source archive name (as long as it only contains digits and
+periods). If that fails, you need to specify the version number
+explicitly (without the Debian release number which will always be
+initially \*(lq1\*(rq, or \*(lq0ubuntu1\*(rq on Ubuntu-detected systems). This can be
+done with an initial \fB\-\-upstream-version\fR or \fB\-v\fR option, or
+in the case of an archive, with a version number after the filename.
+(The reason for the latter is so that \fBuupdate\fR can be called
+directly from \fBuscan\fR.)
+.PP
+Since \fBuupdate\fR uses \fBdebuild\fR to clean the current archive
+before trying to apply a patch file, it accepts a \fB\-\-rootcmd\fR or
+\fB\-r\fR option allowing the user to specify a gain-root command to be
+used. The default is to use \fBfakeroot\fR.
+.PP
+If an archive is being built, the pristine upstream source should be
+used to create the \fI.orig.tar.gz\fR file wherever possible. This
+means that MD5 sums or other similar methods can be used to easily
+compare the upstream source to Debian's copy of the upstream version.
+This is the default behaviour, and can be switched off using the
+\fB\-\-no\-pristine\fR option below.
+.SH OPTIONS
+This is a summary of what was explained above.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+\fB\-\-upstream\-version \fIversion\fR, \fB\-v \fIversion\fR
+Specify the version number of the upstream package explicitly.
+.TP
+\fB\-\-force\-bad\-version, \fB\-b
+Force a version number to be less than the current one (e.g., when backporting).
+.TP
+\fB\-\-rootcmd \fIgain-root-command\fR, \fB\-r \fIgain-root-command\fR
+Specify the command to be used to become root to build the package and
+is passed onto \fBdebuild\fR(1) if it is specified.
+.TP
+\fB\-\-pristine\fR, \fB\-u\fR
+Treat the source as pristine upstream source and symlink to it from
+\fI<package>_<version>.orig.tar.gz\fR whenever possible. This option
+has no meaning for patches. This is the default behaviour.
+.TP
+\fB\-\-no\-pristine\fR
+Do not attempt to make a \fI<package>_<version>.orig.tar.gz\fR symlink.
+.TP
+\fB\-\-symlink\fR, \fB\-s\fR
+Simply create a symlink when moving a new upstream \fI.tar.gz\fR
+archive to the new \fI<package>_<version>.orig.tar.gz\fR location.
+This is the default behaviour.
+.TP
+\fB\-\-no\-symlink\fR
+Copy the upstream \fI.tar.gz\fR to the new location instead of making
+a symlink, if \fI<package>_<version>.orig.tar.gz\fR is missing.
+Otherwise, do nothing.
+.TP
+.B \-\-find, \fB\-f\fR
+Find all upstream tarballs in \fI../\fR which match
+\fI<pkg>_<version>.orig.tar.{gz|bz2|lzma|xz}\fR or
+\fI<pkg>_<version>.orig\-<component>.tar.{gz|bz2|lzma|xz}\fR ;
+\fB\-\-upstream\-version\fR required; pristine source required;
+not valid for \fB\-\-patch\fR;
+This option uses \fBdpkg\-source\fR as the backend to enable support for the
+multiple upstream tarballs and to resolve minor bugs reported previously. The
+use of this option is highly recommended.
+.TP
+.B \-\-verbose
+Give verbose output.
+.TP
+.BR \-\-help ", " \-h
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B UUPDATE_PRISTINE
+If this is set to \fIno\fR, then it is the same as the
+\fB\-\-no\-pristine\fR command line parameter being used.
+.TP
+.B UUPDATE_SYMLINK_ORIG
+If this is set to \fIno\fR, then it is the same as the
+\fB\-\-no\-symlink\fR command line parameter being used.
+.TP
+.B UUPDATE_ROOTCMD
+This is equivalent to the \fB\-\-rootcmd\fR option.
+.SH "ACTIONS TAKEN ON AN ARCHIVE"
+.TP
+.B Figure out new version number
+Unless an explicit version number is provided, the archive name is
+analyzed for a sequence of digits separated by dots. If something
+like that is found, it is taken to be the new upstream version
+number. If not, processing is aborted.
+.TP
+.B Create the .orig.tar.gz archive
+If the \fB\-\-pristine\fR or \fB\-u\fR option is specified and the
+upstream archive is a \fI.tar.gz\fR or \fI.tgz\fR archive, then this
+will be copied directly to \fI<package>_<version>.orig.tar.gz\fR.
+.TP
+.B Unpacking
+The archive is unpacked and placed in a directory with the correct
+name according to Debian policy: package-upstream_version.orig.
+Processing is aborted if this directory already exists.
+.TP
+.B Patching
+The \fI.diffs.gz\fR from the current version are applied to the
+unpackaged archive. A non-zero exit status and warning message will
+occur if the patches did not apply cleanly or if no patch file was
+found. Also, the list of rejected patches will be shown. The
+file \fIdebian/rules\fR is made executable and all of the \fI.orig\fR
+files created by \fBpatch\fR are deleted.
+.TP
+.B Changelog update
+A changelog entry with the new version number is generated with the
+text \*(lqNew upstream release.\*(rq.
+
+When used on Ubuntu systems, \fBdpkg-vendor\fR detection is used to set
+the Debian revision to \*(lq0ubuntu1\*(rq. You may change
+\fIdebian/changelog\fR manually afterwards.
+.SH "ACTIONS TAKEN ON A PATCH FILE"
+.TP
+.B Figure out new version number
+Unless an explicit version number is provided, the patch file name is
+analyzed for a sequence of digits separated by dots. If something
+like that is found, it is taken to be the new upstream version
+number. If not, processing is aborted.
+.TP
+.B Clean the current source tree
+The command \fBdebuild clean\fR is executed within the current Debian
+source archive to clean it. If a \fB\-r\fR option is given to
+\fBuupdate\fR, it is passed on to \fBdebuild\fR.
+.TP
+.B Patching
+The current source archive (\fI.orig.tar.gz\fR) is unpacked and the
+patch applied to the original sources. If this is successful, then
+the \fI.orig\fR directory is renamed to reflect the new version number
+and the current Debian source directory is copied to a directory with
+the new version number, otherwise processing is aborted. The patch is
+then applied to the new copy of the Debian source directory. The file
+\fIdebian/rules\fR is made executable and all of the \fI.orig\fR files
+created by \fBpatch\fR are deleted. If there was a problem with the
+patching, a warning is issued and the program will eventually exit
+with non-zero exit status.
+.TP
+.B Changelog update
+A changelog entry with the new version number is generated with the
+text \*(lqNew upstream release.\*(rq.
+
+When used on Ubuntu systems, \fBdpkg-vendor\fR detection is used to set
+the Debian revision to \*(lq0ubuntu1\*(rq. You may change
+\fIdebian/changelog\fR manually afterwards.
+.SH "SEE ALSO"
+.BR debuild (1),
+.BR fakeroot (1),
+.BR patch (1),
+.BR devscripts.conf (5)
+
+.B The Debian Policy Manual
+.SH AUTHOR
+The original version of \fBuupdate\fR was written by Christoph Lameter
+<clameter@debian.org>. Several changes and improvements have been
+made by Julian Gilbey <jdg@debian.org>.
diff --git a/scripts/uupdate.bash_completion b/scripts/uupdate.bash_completion
new file mode 100644
index 0000000..7ef6dd9
--- /dev/null
+++ b/scripts/uupdate.bash_completion
@@ -0,0 +1,47 @@
+# /usr/share/bash-completion/completions/uupdate
+# Bash command completion for ‘uupdate(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+_uupdate()
+{
+ local cur prev options
+
+ COMPREPLY=()
+ cur=${COMP_WORDS[COMP_CWORD]}
+ prev=${COMP_WORDS[COMP_CWORD-1]}
+ options='--upstream-version -v --rootcmd -r --pristine -u --no-pristine\
+ --symlink -s --no-symlink --no-conf --noconf --help -h --version\
+ --force-bad-version -b'
+
+ case $prev in
+ --pristine | -u)
+ COMPREPLY=( $(
+ compgen -G "${cur}*[!debian].tar.gz"
+ compgen -G "${cur}*[!debian].tar.bz2"
+ compgen -G "${cur}*[!debian].tar.xz"
+ compgen -G "${cur}*.tgz"
+ compgen -G "${cur}*.zip"
+ compgen -G "${cur}*.lzma" ) )
+ ;;
+ --help | -h | --version)
+ ;;
+ -*)
+ COMPREPLY=( $( compgen -W "$options" | grep "^$cur" ) )
+ ;;
+ *)
+ _filedir
+ ;;
+ esac
+
+ return 0
+
+}
+complete -F _uupdate -o filenames uupdate
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/uupdate.sh b/scripts/uupdate.sh
new file mode 100755
index 0000000..ca6811f
--- /dev/null
+++ b/scripts/uupdate.sh
@@ -0,0 +1,1142 @@
+#!/bin/bash
+#
+# Upgrade an existing package
+# Christoph Lameter, December 24, 1996
+# Many modifications by Julian Gilbey <jdg@debian.org> January 1999 onwards
+
+# Copyright 1999-2003, Julian Gilbey
+# Copyright 2015 Osamu Aoki <osamu@debian.org> (OPMODE=3)
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+
+# Command line syntax is one of:
+# For a new archive:
+# uupdate [-v <Version>] [-r <gain-root-command>] [-u] <new upstream archive>
+# or
+# uupdate [-r <gain-root-command>] [-u] <new upstream archive> <Version>
+# or
+# uupdate -v <Version> [-r <gain-root-command>] [-n <name>] [-u] -f
+# For a patch file:
+# uupdate [-v <Version>] [-r <gain-root-command>] -p <patch>.gz
+#
+# In the first case, the new version number may be specified explicitly,
+# either with the -v option before the archive name, or with a version
+# number after the archive file name. If both are given, the latter
+# takes precedence.
+#
+# The -u option requests that the new .orig.tar.{gz|bz2} archive be the
+# pristine source, although this only makes sense when the original
+# archive itself is a tar.gz or tgz archive.
+#
+# Has to be called from within the source archive
+
+set -e
+
+PROGNAME=${0##*/}
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+
+usage() {
+ echo \
+"Usage for a new archive:
+ $PROGNAME [options] <new upstream archive> [<version>]
+or
+ $PROGNAME [options] -f|--find
+For a patch file:
+ $PROGNAME [options] --patch|-p <patch>[.gz|.bz2|.lzma|.xz]
+Options are:
+ --no-conf, --noconf
+ Don't read devscripts config files;
+ must be the first option given
+ --upstream-version <version>, -v <version>
+ specify version number of upstream package
+ --force-bad-version, -b
+ Force a version number to be less than the current one
+ (e.g., when backporting).
+ --rootcmd <gain-root-command>, -r <gain-root-command>
+ which command to be used to become root
+ for package-building
+ --pristine, -u Source is pristine upstream source and should be
+ copied to <pkg>_<version>.orig.tar.{gz|bz2|lzma|xz};
+ not valid for --patch
+ --no-symlink Copy new upstream archive to new location as
+ <pkg>_<version>.orig.tar.{gz|bz2|lzma|xz} instead of
+ making a symlink;
+ if it already exists, leave it there as is.
+ --find, -f Find all upstream tarballs in ../ which match
+ <pkg>_<version>.orig.tar.{gz|bz2|lzma|xz} or
+ <pkg>_<version>.orig-<component>.tar.{gz|bz2|lzma|xz} ;
+ --upstream-version required; pristine source required;
+ not valid for --patch
+ --verbose Give verbose output
+
+$PROGNAME [--help|--version]
+ show this message or give version information.
+
+$MODIFIED_CONF_MSG"
+}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+Copyright 1999-2003, Julian Gilbey <jdg@debian.org>, all rights reserved.
+Original code by Christoph Lameter.
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+mustsetvar() {
+ if [ "x$2" = x ]
+ then
+ echo >&2 "$PROGNAME: unable to determine $3"
+ exit 1
+ else
+ # echo "$PROGNAME: $3 is $2"
+ eval "$1=\"\$2\""
+ fi
+}
+
+findzzz() {
+ LISTNAME=$(ls -1 $@ 2>/dev/null |sed -e 's,\.[^\.]*$,,' | sort | uniq )
+ for f in $LISTNAME ; do
+ if [ -r "$f.xz" ]; then
+ echo "$f.xz"
+ elif [ -r "$f.bz2" ]; then
+ echo "$f.bz2"
+ elif [ -r "$f.gz" ]; then
+ echo "$f.gz"
+ elif [ -r "$f.lzma" ]; then
+ echo "$f.lzma"
+ fi
+ done
+}
+
+# Match Pattern to extract a new version number from a given filename.
+# I already had to fiddle with this a couple of times so I better put it up
+# at front. It is now written as a Perl regexp to make it nicer. It only
+# matches things like: file.3.4 and file2-3.2; it will die on names such
+# as file3-2.7a, though.
+MPATTERN='^(?:[a-zA-Z][a-zA-Z0-9]*(?:-|_|\.))+(\d+\.(?:\d+\.)*\d+)$'
+
+STATUS=0
+BADVERSION=""
+
+# Boilerplate: set config variables
+DEFAULT_UUPDATE_ROOTCMD=
+DEFAULT_UUPDATE_PRISTINE=yes
+DEFAULT_UUPDATE_SYMLINK_ORIG=yes
+VARS="UUPDATE_ROOTCMD UUPDATE_PRISTINE UUPDATE_SYMLINK_ORIG"
+
+SUFFIX="1"
+if command -v dpkg-vendor >/dev/null; then
+ VENDER="$(dpkg-vendor --query Vendor 2>/dev/null|tr 'A-Z' 'a-z')"
+ case "$VENDER" in
+ debian) SUFFIX="1" ;;
+ *) SUFFIX="0${VENDER}1" ;;
+ esac
+fi
+
+if [ "$1" = "--no-conf" -o "$1" = "--noconf" ]; then
+ shift
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (no configuration files read)"
+
+ # set defaults
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+else
+ # Run in a subshell for protection against accidental errors
+ # in the config files
+ eval $(
+ set +e
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+
+ for file in /etc/devscripts.conf ~/.devscripts
+ do
+ [ -r $file ] && . $file
+ done
+
+ set | grep -E '^(UUPDATE|DEVSCRIPTS)_')
+
+ # check sanity
+ case "$UUPDATE_PRISTINE" in
+ yes|no) ;;
+ *) UUPDATE_PRISTINE=yes ;;
+ esac
+
+ case "$UUPDATE_SYMLINK_ORIG" in
+ yes|no) ;;
+ *) UUPDATE_SYMLINK_ORIG=yes ;;
+ esac
+
+ # set config message
+ MODIFIED_CONF=''
+ for var in $VARS; do
+ eval "if [ \"\$$var\" != \"\$DEFAULT_$var\" ]; then
+ MODIFIED_CONF_MSG=\"\$MODIFIED_CONF_MSG
+ $var=\$$var\";
+ MODIFIED_CONF=yes;
+ fi"
+ done
+
+ if [ -z "$MODIFIED_CONF" ]; then
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (none)"
+ fi
+fi
+
+
+TEMP=$(getopt -s bash -o v:p:r:fubs \
+ --long upstream-version:,patch:,rootcmd: \
+ --long force-bad-version \
+ --long pristine,no-pristine,nopristine \
+ --long symlink,no-symlink,nosymlink \
+ --long no-conf,noconf \
+ --long find \
+ --long verbose \
+ --long help,version -n "$PROGNAME" -- "$@") || (usage >&2; exit 1)
+
+eval set -- $TEMP
+
+OPMODE=2
+# Process Parameters
+while [ "$1" ]; do
+ case $1 in
+ --force-bad-version|-b)
+ BADVERSION="-b" ;;
+ --upstream-version|-v)
+ shift; NEW_VERSION="$1" ;;
+ --patch|-p)
+ shift; PATCH="$1" ; OPMODE=1 ;;
+ --find|-f)
+ OPMODE=3 ;;
+ --rootcmd|-r)
+ shift; UUPDATE_ROOTCMD="$1" ;;
+ --pristine|-u)
+ UUPDATE_PRISTINE=yes ;;
+ --no-pristine|--nopristine)
+ UUPDATE_PRISTINE=no ;;
+ --symlink|-s)
+ UUPDATE_SYMLINK_ORIG=yes ;;
+ --no-symlink|--nosymlink)
+ UUPDATE_SYMLINK_ORIG=no ;;
+ --no-conf|--noconf)
+ echo "$PROGNAME: $1 is only acceptable as the first command-line option!" >&2
+ exit 1 ;;
+ --verbose)
+ UUPDATE_VERBOSE=yes ;;
+ --help) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+ --) shift; break ;;
+ *) echo "$PROGNAME: bug in option parser, sorry!" >&2 ; exit 1 ;;
+ esac
+ shift
+done
+
+if [ "$OPMODE" = 1 ]; then
+ # --patch mode
+ if [ $# -ne 0 ]; then
+ echo "$PROGNAME: additional archive name/version number is not allowed with --patch" >&2
+ echo "$PROGNAME: Run $PROGNAME --help for usage information" >&2
+ exit 1
+ fi
+elif [ "$OPMODE" = 2 ]; then
+ # old "uupdate" used in the version=3 watch file
+ case $# in
+ 0) echo "$PROGNAME: no archive given" >&2 ; exit 1 ;;
+ 1) ARCHIVE="$1" ;;
+ 2) ARCHIVE="$1"; NEW_VERSION="$2" ;;
+ *) echo "$PROGNAME: too many non-option arguments" >&2
+ echo "$PROGNAME: Run $PROGNAME --help for usage information" >&2
+ exit 1 ;;
+ esac
+else
+ # new "uupdate -f ..." used in the version=4 watch file
+ if [ $# -ne 0 ]; then
+ echo "$PROGNAME: additional archive name/version number is not allowed with --component" >&2
+ echo "$PROGNAME: Run $PROGNAME --help for usage information" >&2
+ exit 1
+ fi
+fi
+
+# Get Parameters from current source archive
+
+if [ ! -f debian/changelog ]; then
+ echo "$PROGNAME: cannot find debian/changelog." >&2
+ echo "$PROGNAME: Are you in the top directory of the source tree?" >&2
+ exit 1
+fi
+
+# Figure out package info we need
+mustsetvar PACKAGE "`dpkg-parsechangelog -SSource`" "source package"
+mustsetvar VERSION "`dpkg-parsechangelog -SVersion`" "source version"
+
+# Get epoch and upstream version
+eval $(echo "$VERSION" | perl -ne '/^(?:(\d+):)?(.*)/; print "SVERSION=$2\nEPOCH=$1\n";')
+
+if [ -n "$UUPDATE_VERBOSE" ]; then
+ if [ "$OPMODE" = 1 ]; then
+ echo "$PROGNAME: PATCH = \"$PATCH\" is the name of the patch file" >&2
+ fi
+ if [ "$OPMODE" = 2 ]; then
+ echo "$PROGNAME: ARCHIVE = \"$ARCHIVE\" is the name of the next tarball" >&2
+ echo "$PROGNAME: NEW_VERSION = \"$NEW_VERSION\" is the next pristine tarball version" >&2
+ fi
+ echo "$PROGNAME: PACKAGE = \"$PACKAGE\" is in the top of debian/changelog" >&2
+ echo "$PROGNAME: VERSION = \"$VERSION\" is in the top of debian/changelog" >&2
+ echo "$PROGNAME: EPOCH = \"$EPOCH\" is epoch part of \$VERSION" >&2
+ echo "$PROGNAME: SVERSION = \"$SVERSION\" is w/o-epoch part of \$VERSION" >&2
+fi
+
+UVERSION=$(expr "$SVERSION" : '\(.*\)-[0-9a-zA-Z.+~]*$')
+if [ -z "$UVERSION" ]; then
+ echo "$PROGNAME: a native Debian package cannot take upstream updates" >&2
+ exit 1
+fi
+
+if [ -n "$UUPDATE_VERBOSE" ]; then
+ echo "$PROGNAME: UVERSION = \"$UVERSION\" the upstream portion w/o-epoch of \$VERSION" >&2
+fi
+
+# Save pwd before we goes walkabout
+OPWD=$(pwd)
+
+if [ "$OPMODE" = 1 ]; then
+ # --patch mode
+ # do the patching
+ X="${PATCH##*/}"
+ case "$PATCH" in
+ /*)
+ if [ ! -r "$PATCH" ]; then
+ echo "$PROGNAME: cannot read patch file $PATCH! Aborting." >&2
+ exit 1
+ fi
+ case "$PATCH" in
+ *.gz) CATPATCH="zcat $PATCH"; X=${X%.gz};;
+ *.bz2) CATPATCH="bzcat $PATCH"; X=${X%.bz2};;
+ *.lzma) CATPATCH="xz -F lzma -dc $PATCH"; X=${X%.lzma};;
+ *.xz) CATPATCH="xzcat $PATCH"; X=${X%.xz};;
+ *) CATPATCH="cat $PATCH";;
+ esac
+ ;;
+ *)
+ if [ ! -r "$OPWD/$PATCH" -a ! -r "../$PATCH" ]; then
+ echo "$PROGNAME: cannot read patch file $PATCH! Aborting." >&2
+ exit 1
+ fi
+ case "$PATCH" in
+ *.gz)
+ if [ -r "$OPWD/$PATCH" ]; then
+ CATPATCH="zcat $OPWD/$PATCH"
+ else
+ CATPATCH="zcat ../$PATCH"
+ fi
+ X=${X%.gz}
+ ;;
+ *.bz2)
+ if [ -r "$OPWD/$PATCH" ]; then
+ CATPATCH="bzcat $OPWD/$PATCH"
+ else
+ CATPATCH="bzcat ../$PATCH"
+ fi
+ X=${X%.bz2}
+ ;;
+ *.lzma)
+ if [ -r "$OPWD/$PATCH" ]; then
+ CATPATCH="xz -F lzma -dc $OPWD/$PATCH"
+ else
+ CATPATCH="xz -F lzma -dc ../$PATCH"
+ fi
+ X=${X%.lzma}
+ ;;
+ *.xz)
+ if [ -r "$OPWD/$PATCH" ]; then
+ CATPATCH="xzcat $OPWD/$PATCH"
+ else
+ CATPATCH="xzcat ../$PATCH"
+ fi
+ X=${X%.xz}
+ ;;
+ *)
+ if [ -r "$OPWD/$PATCH" ]; then
+ CATPATCH="cat $OPWD/$PATCH"
+ else
+ CATPATCH="cat ../$PATCH"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ if [ "$NEW_VERSION" = "" ]; then
+ # Figure out the new version; we may have to remove a trailing ".diff"
+ NEW_VERSION=$(echo "$X" |
+ perl -ne 's/\.diff$//; /'"$MPATTERN"'/ && print $1')
+ if [ -z "$NEW_VERSION" ]; then
+ echo "$PROGNAME: new version number not recognized from given filename" >&2
+ echo "$PROGNAME: Please run $PROGNAME with the -v option" >&2
+ exit 1
+ fi
+
+ if [ -n "$EPOCH" ]; then
+ echo "$PROGNAME: New Release will be $EPOCH:$NEW_VERSION-$SUFFIX."
+ else
+ echo "$PROGNAME: New Release will be $NEW_VERSION-$SUFFIX."
+ fi
+ fi
+
+ # Strip epoch number
+ SNEW_VERSION=$(echo "$NEW_VERSION" | perl -pe 's/^\d+://')
+ if [ $SNEW_VERSION = $NEW_VERSION -a -n "$EPOCH" ]; then
+ NEW_VERSION="$EPOCH:$NEW_VERSION"
+ fi
+
+ # Sanity check
+ if [ -z "$BADVERSION" ] && dpkg --compare-versions "$NEW_VERSION-$SUFFIX" le "$VERSION"; then
+ echo "$PROGNAME: new version $NEW_VERSION-$SUFFIX <= current version $VERSION; aborting!" >&2
+ exit 1
+ fi
+
+ if [ -e "../$PACKAGE-$SNEW_VERSION" ]; then
+ echo "$PROGNAME: $PACKAGE-$SNEW_VERSION already exists in the parent directory!" >&2
+ echo "$PROGNAME: Aborting...." >&2
+ exit 1
+ fi
+ if [ -e "../$PACKAGE-$SNEW_VERSION.orig" ]; then
+ echo "$PROGNAME: $PACKAGE-$SNEW_VERSION.orig already exists in the parent directory!" >&2
+ echo "$PROGNAME: Aborting...." >&2
+ exit 1
+ fi
+
+ # Is the old version a .tar.gz or .tar.bz2 file?
+ if [ -r "../${PACKAGE}_$UVERSION.orig.tar.gz" ]; then
+ OLDARCHIVE="${PACKAGE}_$UVERSION.orig.tar.gz"
+ OLDARCHIVETYPE=gz
+ elif [ -r "../${PACKAGE}_$UVERSION.orig.tar.bz2" ]; then
+ OLDARCHIVE="${PACKAGE}_$UVERSION.orig.tar.bz2"
+ OLDARCHIVETYPE=bz2
+ elif [ -r "../${PACKAGE}_$UVERSION.orig.tar.lzma" ]; then
+ OLDARCHIVE="${PACKAGE}_$UVERSION.orig.tar.lzma"
+ OLDARCHIVETYPE=lzma
+ elif [ -r "../${PACKAGE}_$UVERSION.orig.tar.xz" ]; then
+ OLDARCHIVE="${PACKAGE}_$UVERSION.orig.tar.xz"
+ OLDARCHIVETYPE=xz
+ else
+ echo "$PROGNAME: can't find/read ${PACKAGE}_$UVERSION.orig.tar.{gz|bz2|lzma|xz}" >&2
+ echo "$PROGNAME: in the parent directory!" >&2
+ echo "$PROGNAME: Aborting...." >&2
+ exit 1
+ fi
+
+ # Clean package
+ if [ -n "$UUPDATE_ROOTCMD" ]; then
+ debuild -r"$UUPDATE_ROOTCMD" clean || {
+ echo "$PROGNAME: couldn't run debuild -r$UUPDATE_ROOTCMD clean successfully." >&2
+ echo "$PROGNAME: Aborting...." >&2
+ exit 1
+ }
+ else debuild clean || {
+ echo "$PROGNAME: couldn't run debuild -r$UUPDATE_ROOTCMD clean successfully." >&2
+ echo "$PROGNAME: Aborting...." >&2
+ exit 1
+ }
+ fi
+
+ cd $(pwd)/..
+ rm -rf $PACKAGE-$UVERSION.orig
+
+ # Unpacking .orig.tar.gz is not quite trivial any longer ;-)
+ TEMP_DIR=$(mktemp -d uupdate.XXXXXXXX) || {
+ echo "$PROGNAME: can't create temporary directory;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ }
+ cd $(pwd)/$TEMP_DIR
+ if [ "$OLDARCHIVETYPE" = gz ]; then
+ tar zxf ../$OLDARCHIVE || {
+ echo "$PROGNAME: can't untar $OLDARCHIVE;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ }
+ elif [ "$OLDARCHIVETYPE" = bz2 ]; then
+ tar --bzip2 -xf ../$OLDARCHIVE || {
+ echo "$PROGNAME: can't untar $OLDARCHIVE;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ }
+ elif [ "$OLDARCHIVETYPE" = lzma ]; then
+ tar --lzma -xf ../$OLDARCHIVE || {
+ echo "$PROGNAME: can't untar $OLDARCHIVE;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ }
+ elif [ "$OLDARCHIVETYPE" = xz ]; then
+ tar --xz -xf ../$OLDARCHIVE || {
+ echo "$PROGNAME: can't untar $OLDARCHIVE;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ }
+ else
+ echo "$PROGNAME: internal error: unknown OLDARCHIVETYPE: $OLDARCHIVETYPE" >&2
+ exit 1
+ fi
+
+ if [ $(ls | wc -l) -eq 1 ] && [ -d "$(ls)" ]; then
+ mv "$(ls)" ../${PACKAGE}-$UVERSION.orig
+ else
+ mkdir ../$PACKAGE-$UVERSION.orig
+ mv * ../$PACKAGE-$UVERSION.orig
+ fi
+ cd $(pwd)/..
+ rm -rf $TEMP_DIR
+
+ cd $(pwd)/$PACKAGE-$UVERSION.orig
+ if ! $CATPATCH > /dev/null; then
+ echo "$PROGNAME: can't run $CATPATCH;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ fi
+ if $CATPATCH | patch -sp1; then
+ cd $(pwd)/..
+ mv $PACKAGE-$UVERSION.orig $PACKAGE-$SNEW_VERSION.orig
+ echo "-- Originals could be successfully patched"
+ cp -a $PACKAGE-$UVERSION $PACKAGE-$SNEW_VERSION
+ cd $(pwd)/$PACKAGE-$SNEW_VERSION
+ if $CATPATCH | patch -sp1; then
+ echo "Success. The supplied diffs worked fine on the Debian sources."
+ else
+ echo "$PROGNAME: the diffs supplied did not apply cleanly!" >&2
+ X=$(find . -name "*.rej" -printf "../$PACKAGE-$SNEW_VERSION/%P\n")
+ if [ -n "$X" ]; then
+ echo "Rejected diffs are in $X" >&2
+ fi
+ STATUS=1
+ fi
+ chmod a+x debian/rules
+ if [ -z "$BADVERSION" ]; then
+ debchange -v "$NEW_VERSION-$SUFFIX" "New upstream release."
+ else
+ debchange $BADVERSION -v "$NEW_VERSION-$SUFFIX" " "
+ fi
+ echo "$PROGNAME: Remember: Your current directory is the OLD sourcearchive!"
+ echo "$PROGNAME: Do a \"cd ../$PACKAGE-$SNEW_VERSION\" to see the new package"
+ exit
+ else
+ echo "$PROGNAME: patch failed to apply to original sources $UVERSION" >&2
+ cd $(pwd)/..
+ rm -rf $PACKAGE-$UVERSION.orig
+ exit 1
+ fi
+elif [ "$OPMODE" = 2 ]; then
+# This is an original sourcearchive
+ # old "uupdate" used in the version=3 watch file
+ if [ "$ARCHIVE" = "" ]; then
+ echo "$PROGNAME: upstream source archive not specified" >&2
+ exit 1
+ fi
+ case "$ARCHIVE" in
+ /*)
+ if [ ! -r "$ARCHIVE" ]; then
+ echo "$PROGNAME: cannot read archive file $ARCHIVE! Aborting." >&2
+ exit 1
+ fi
+ ARCHIVE_PATH="$ARCHIVE"
+ ;;
+ *)
+ if [ "$ARCHIVE" = "../${ARCHIVE#../}" -a -r "$ARCHIVE" ]; then
+ ARCHIVE_PATH="$ARCHIVE"
+ elif [ -r "../$ARCHIVE" ]; then
+ ARCHIVE_PATH="../$ARCHIVE"
+ elif [ -r "$OPWD/$ARCHIVE" ]; then
+ ARCHIVE_PATH="$OPWD/$ARCHIVE"
+ else
+ echo "$PROGNAME: cannot read archive file $ARCHIVE! Aborting." >&2
+ exit 1
+ fi
+
+ ;;
+ esac
+
+ # Figure out the type of archive
+ X="${ARCHIVE%%/}"
+ X="${X##*/}"
+ if [ ! -d "$ARCHIVE_PATH" ]; then
+ case "$X" in
+ *.orig.tar.gz) X="${X%.orig.tar.gz}"; UNPACK="tar zxf";
+ TYPE=gz ;;
+ *.orig.tar.bz2) X="${X%.orig.tar.bz2}"; UNPACK="tar --bzip -xf";
+ TYPE=bz2 ;;
+ *.orig.tar.lzma) X="${X%.orig.tar.lzma}"; UNPACK="tar --lzma -xf";
+ TYPE=lzma ;;
+ *.orig.tar.xz) X="${X%.orig.tar.xz}"; UNPACK="tar --xz -xf";
+ TYPE=xz ;;
+ *.tar.gz) X="${X%.tar.gz}"; UNPACK="tar zxf"; TYPE=gz ;;
+ *.tar.bz2) X="${X%.tar.bz2}"; UNPACK="tar --bzip -xf"; TYPE=bz2 ;;
+ *.tar.lzma) X="${X%.tar.lzma}"; UNPACK="tar --lzma -xf"; TYPE=lzma ;;
+ *.tar.xz) X="${X%.tar.xz}"; UNPACK="tar --xz -xf"; TYPE=xz ;;
+ *.tar.Z) X="${X%.tar.Z}"; UNPACK="tar zxf"; TYPE="" ;;
+ *.tgz) X="${X%.tgz}"; UNPACK="tar zxf"; TYPE=gz ;;
+ *.tar) X="${X%.tar}"; UNPACK="tar xf"; TYPE="" ;;
+ *.zip) X="${X%.zip}"; UNPACK="unzip"; TYPE="" ;;
+ *.7z) X="${X%.7z}"; UNPACK="7z x"; TYPE="" ;;
+ *)
+ echo "$PROGNAME: sorry: Unknown archive type" >&2
+ exit 1
+ esac
+ fi
+
+ if [ "$NEW_VERSION" = "" ]; then
+ # Figure out the new version
+ NEW_VERSION=$(echo "$X" | perl -ne "/$MPATTERN/"' && print $1')
+ if [ -z "$NEW_VERSION" ]; then
+ echo "$PROGNAME: new version number not recognized from given filename" >&2
+ echo "$PROGNAME: Please run $PROGNAME with the -v option" >&2
+ exit 1
+ fi
+ fi
+ if [ -n "$EPOCH" ]; then
+ echo "$PROGNAME: New Release will be $EPOCH:$NEW_VERSION-$SUFFIX."
+ else
+ echo "$PROGNAME: New Release will be $NEW_VERSION-$SUFFIX."
+ fi
+
+ # Strip epoch number
+ SNEW_VERSION=$(echo "$NEW_VERSION" | perl -pe 's/^\d+://')
+ if [ $SNEW_VERSION = $NEW_VERSION -a -n "$EPOCH" ]; then
+ NEW_VERSION="$EPOCH:$NEW_VERSION"
+ fi
+
+ # Sanity check
+ if [ -z "$BADVERSION" ] && dpkg --compare-versions "$NEW_VERSION-$SUFFIX" le "$VERSION"; then
+ echo "$PROGNAME: new version $NEW_VERSION-$SUFFIX <= current version $VERSION; aborting!" >&2
+ exit 1
+ fi
+
+ if [ -e "../$PACKAGE-$SNEW_VERSION.orig" ]; then
+ echo "$PROGNAME: original source tree already exists as $PACKAGE-$SNEW_VERSION.orig!" >&2
+ echo "$PROGNAME: Aborting...." >&2
+ exit 1
+ fi
+ if [ -e "../$PACKAGE-$SNEW_VERSION" ]; then
+ echo "$PROGNAME: source tree for new version already exists as $PACKAGE-$SNEW_VERSION!" >&2
+ echo "$PROGNAME: Aborting...." >&2
+ exit 1
+ fi
+
+ # Sanity checks
+ if [ -e "../${PACKAGE}_$SNEW_VERSION.orig.tar.gz" ] && \
+ [ "$(md5sum "${ARCHIVE_PATH}" | cut -d" " -f1)" != \
+ "$(md5sum "../${PACKAGE}_$SNEW_VERSION.orig.tar.gz" | cut -d" " -f1)" ]
+ then
+ echo "$PROGNAME: a different ${PACKAGE}_$SNEW_VERSION.orig.tar.gz" >&2
+ echo "$PROGNAME: already exists in the parent dir;" >&2
+ echo "$PROGNAME: please check on the situation before trying $PROGNAME again." >&2
+ exit 1
+ elif [ -e "../${PACKAGE}_$SNEW_VERSION.orig.tar.bz2" ] && \
+ [ "$(md5sum "${ARCHIVE_PATH}" | cut -d" " -f1)" != \
+ "$(md5sum "../${PACKAGE}_$SNEW_VERSION.orig.tar.bz2" | cut -d" " -f1)" ]
+ then
+ echo "$PROGNAME: a different ${PACKAGE}_$SNEW_VERSION.orig.tar.bz2" >&2
+ echo "$PROGNAME: already exists in the parent dir;" >&2
+ echo "$PROGNAME: please check on the situation before trying $PROGNAME again." >&2
+ exit 1
+ elif [ -e "../${PACKAGE}_$SNEW_VERSION.orig.tar.lzma" ] && \
+ [ "$(md5sum "${ARCHIVE_PATH}" | cut -d" " -f1)" != \
+ "$(md5sum "../${PACKAGE}_$SNEW_VERSION.orig.tar.lzma" | cut -d" " -f1)" ]
+ then
+ echo "$PROGNAME: a different ${PACKAGE}_$SNEW_VERSION.orig.tar.lzma" >&2
+ echo "$PROGNAME: already exists in the parent dir;" >&2
+ echo "$PROGNAME: please check on the situation before trying $PROGNAME again." >&2
+ exit 1
+ elif [ -e "../${PACKAGE}_$SNEW_VERSION.orig.tar.xz" ] && \
+ [ "$(md5sum "${ARCHIVE_PATH}" | cut -d" " -f1)" != \
+ "$(md5sum "../${PACKAGE}_$SNEW_VERSION.orig.tar.xz" | cut -d" " -f1)" ]
+ then
+ echo "$PROGNAME: a different ${PACKAGE}_$SNEW_VERSION.orig.tar.xz" >&2
+ echo "$PROGNAME: already exists in the parent dir;" >&2
+ echo "$PROGNAME: please check on the situation before trying $PROGNAME again." >&2
+ exit 1
+ fi
+
+ if [ $UUPDATE_PRISTINE = yes -a -n "$TYPE" -a \
+ ! -e "../${PACKAGE}_$SNEW_VERSION.orig.tar.gz" -a \
+ ! -e "../${PACKAGE}_$SNEW_VERSION.orig.tar.bz2" -a \
+ ! -e "../${PACKAGE}_$SNEW_VERSION.orig.tar.lzma" -a \
+ ! -e "../${PACKAGE}_$SNEW_VERSION.orig.tar.xz" ]; then
+ if [ "$UUPDATE_SYMLINK_ORIG" = yes ]; then
+ echo "Symlinking to pristine source from ${PACKAGE}_$SNEW_VERSION.orig.tar.$TYPE..."
+ case $ARCHIVE_PATH in
+ /*) LINKARCHIVE="$ARCHIVE" ;;
+ ../*) LINKARCHIVE="${ARCHIVE#../}" ;;
+ esac
+ else
+ echo "$PROGNAME: Copying pristine source to ${PACKAGE}_$SNEW_VERSION.orig.tar.$TYPE..."
+ fi
+
+ case "$TYPE" in
+ gz)
+ if [ "$UUPDATE_SYMLINK_ORIG" = yes ]; then
+ ln -s "$LINKARCHIVE" "../${PACKAGE}_$SNEW_VERSION.orig.tar.gz"
+ else
+ cp "$ARCHIVE_PATH" "../${PACKAGE}_$SNEW_VERSION.orig.tar.gz"
+ fi
+ ;;
+ bz2)
+ if [ "$UUPDATE_SYMLINK_ORIG" = yes ]; then
+ ln -s "$LINKARCHIVE" "../${PACKAGE}_$SNEW_VERSION.orig.tar.bz2"
+ else
+ cp "$ARCHIVE_PATH" "../${PACKAGE}_$SNEW_VERSION.orig.tar.bz2"
+ fi
+ ;;
+ lzma)
+ if [ "$UUPDATE_SYMLINK_ORIG" = yes ]; then
+ ln -s "$LINKARCHIVE" "../${PACKAGE}_$SNEW_VERSION.orig.tar.lzma"
+ else
+ cp "$ARCHIVE_PATH" "../${PACKAGE}_$SNEW_VERSION.orig.tar.lzma"
+ fi
+ ;;
+ xz)
+ if [ "$UUPDATE_SYMLINK_ORIG" = yes ]; then
+ ln -s "$LINKARCHIVE" "../${PACKAGE}_$SNEW_VERSION.orig.tar.xz"
+ else
+ cp "$ARCHIVE_PATH" "../${PACKAGE}_$SNEW_VERSION.orig.tar.xz"
+ fi
+ ;;
+ *)
+ echo "$PROGNAME: can't preserve pristine sources from non .tar.{gz|bz2|lzma|xz} upstream archive!" >&2
+ echo "$PROGNAME: Continuing anyway..." >&2
+ ;;
+ esac
+ fi
+
+ cd $(pwd)/..
+ TEMP_DIR=$(mktemp -d uupdate.XXXXXXXX) || {
+ echo "$PROGNAME: can't create temporary directory;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ }
+ cd $(pwd)/$TEMP_DIR
+ if [ ! -d "$ARCHIVE_PATH" ]; then
+ echo "$PROGNAME: Untarring the new sourcecode archive $ARCHIVE"
+ $UNPACK "$ARCHIVE_PATH" || {
+ echo "$PROGNAME: can't unpack: $UNPACK $ARCHIVE_PATH failed;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ }
+ else
+ tar -C "$ARCHIVE_PATH/../" -c $X | tar x || {
+ echo "$PROGNAME: tar -C \"$ARCHIVE_PATH/../\" -c $X | tar x failed;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ }
+ fi
+
+ cd $(pwd)/..
+ if [ $(ls $TEMP_DIR | wc -l) -eq 1 ]; then
+ # The files are stored in the archive under a top directory, we presume
+ mv $TEMP_DIR/* $PACKAGE-$SNEW_VERSION
+ else
+ # Otherwise, we put them into a new directory
+ mkdir $PACKAGE-$SNEW_VERSION
+ mv $TEMP_DIR/* $PACKAGE-$SNEW_VERSION
+ if ls $TEMP_DIR/.[!.]* > /dev/null 2>&1; then
+ mv $TEMP_DIR/.[!.]* $PACKAGE-$SNEW_VERSION
+ fi
+ fi
+ rm -rf $TEMP_DIR
+ cp -a $PACKAGE-$SNEW_VERSION $PACKAGE-$SNEW_VERSION.orig
+ cd $(pwd)/$PACKAGE-$SNEW_VERSION
+
+ if [ -r "../${PACKAGE}_$SVERSION.diff.gz" ]; then
+ DIFF="../${PACKAGE}_$SVERSION.diff.gz"
+ DIFFTYPE=diff
+ DIFFCAT=zcat
+ elif [ -r "../${PACKAGE}_$SVERSION.diff.bz2" ]; then
+ DIFF="../${PACKAGE}_$SVERSION.diff.bz2"
+ DIFFTYPE=diff
+ DIFFCAT=bzcat
+ elif [ -r "../${PACKAGE}_$SVERSION.diff.lzma" ]; then
+ DIFF="../${PACKAGE}_$SVERSION.diff.lzma"
+ DIFFTYPE=diff
+ DIFFCAT="xz -F lzma -dc"
+ elif [ -r "../${PACKAGE}_$SVERSION.diff.xz" ]; then
+ DIFF="../${PACKAGE}_$SVERSION.diff.xz"
+ DIFFTYPE=diff
+ DIFFCAT=xzcat
+ elif [ -r "../${PACKAGE}_$SVERSION.debian.tar.gz" ]; then
+ DIFF="../${PACKAGE}_$SVERSION.debian.tar.gz"
+ DIFFTYPE=tar
+ DIFFUNPACK="tar zxf"
+ elif [ -r "../${PACKAGE}_$SVERSION.debian.tar.bz2" ]; then
+ DIFF="../${PACKAGE}_$SVERSION.debian.tar.bz2"
+ DIFFTYPE=tar
+ DIFFUNPACK="tar --bzip2 -xf"
+ elif [ -r "../${PACKAGE}_$SVERSION.debian.tar.lzma" ]; then
+ DIFF="../${PACKAGE}_$SVERSION.debian.tar.lzma"
+ DIFFTYPE=tar
+ DIFFUNPACK="tar --lzma -xf"
+ elif [ -r "../${PACKAGE}_$SVERSION.debian.tar.xz" ]; then
+ DIFF="../${PACKAGE}_$SVERSION.debian.tar.xz"
+ DIFFTYPE=tar
+ DIFFUNPACK="tar --xz -xf"
+ else
+ # non-native package and missing diff.gz/debian.tar.xz.
+ cd $OPWD
+ if [ ! -d debian ]; then
+ echo "$PROGNAME: None of *.diff.gz, *.debian.tar.xz, or debian/* found. failed;" >&2
+ echo "$PROGNAME: aborting..." >&2
+ exit 1
+ fi
+ if [ -d debian/source -a -r debian/source/format ]; then
+ if [ "$(cat debian/source/format)" = "3.0 (quilt)" ]; then
+ # This is convenience for VCS users.
+ echo "$PROGNAME: debian/source/format is \"3.0 (quilt)\"." >&2
+ echo "$PROGNAME: Auto-generating ${PACKAGE}_$SVERSION.debian.tar.xz" >&2
+ tar --xz -cf ../${PACKAGE}_$SVERSION.debian.tar.xz debian
+ DIFF="../${PACKAGE}_$SVERSION.debian.tar.xz"
+ DIFFTYPE=tar
+ DIFFUNPACK="tar --xz -xf"
+ else
+ echo "$PROGNAME: debian/source/format isn't \"3.0 (quilt)\"." >&2
+ echo "$PROGNAME: Skip auto-generating ${PACKAGE}_$SVERSION.debian.tar.xz" >&2
+ fi
+ else
+ echo "$PROGNAME: debian/source/format is missing." >&2
+ echo "$PROGNAME: Skip auto-generating ${PACKAGE}_$SVERSION.debian.tar.xz" >&2
+ fi
+ # return back to upstream source
+ cd $(pwd)/../$PACKAGE-$SNEW_VERSION
+ fi
+
+ if [ "$DIFFTYPE" = diff ]; then
+ # Check that any files added in diff do not now exist in
+ # upstream version
+ FILES=$($DIFFCAT $DIFF |
+ perl -nwe 'BEGIN { $status=""; }
+ chomp;
+ if (/^--- /) { $status = "-$."; }
+ if (/^\+\+\+ (.*)/ and $status eq ("-" . ($.-1))) {
+ $file = $1;
+ $file =~ s%^[^/]+/%%;
+ $status = "+$.";
+ }
+ if (/^@@ -([^ ]+) /) {
+ if ($1 eq "0,0" and $status eq ("+" . ($.-1))) {
+ print "$file\n";
+ }
+ }')
+
+ # Note that debian/changelog is usually in FILES, so FILES is
+ # usually non-null; however, if the upstream ships its own debian/
+ # directory, this may not be true, so must check for empty $FILES.
+ # Check anyway, even though it's not strictly necessary in bash.
+ if [ -n "$FILES" ]; then
+ for file in $FILES; do
+ if [ -e "$file" ]; then
+ echo "$PROGNAME warning: file $file was added in old diff, but is now in the upstream source." >&2
+ echo "$PROGNAME: Please check that the diff is applied correctly." >&2
+ echo "$PROGNAME: (This program will use the pristine upstream version and save the old .diff.gz" >&2
+ echo "$PROGNAME: version as $file.debdiff .)" >&2
+
+ if [ -e "$file.upstream" -o -e "$file.debdiff" ]; then
+ FILEEXISTERR=1
+ fi
+ fi
+ done
+
+ if [ -n "$FILEEXISTERR" ]; then
+ echo "$PROGNAME: please apply the diff by hand and take care with this." >&2
+ exit 1
+ fi
+
+ # Shift any files that are in the upstream tarball that are also in
+ # the old diff out of the way so the diff is more likely to apply
+ # cleanly, and remember the fact that we moved it
+ for file in $FILES; do
+ if [ -e "$file" ]; then
+ mv $file $file.upstream
+ MOVEDFILES=("${MOVEDFILES[@]}" "$file")
+ fi
+ done
+ fi
+
+ # Remove all existing symlinks before applying the patch. We'll
+ # restore them afterwards, but this avoids patch following symlinks,
+ # which may point outside of the source tree
+ declare -a LINKS
+ while IFS= read -d '' -r link; do
+ LINKS+=("$link")
+ done < <(find -type l -printf '%l\0%p\0' -delete)
+
+ if $DIFFCAT $DIFF | patch -sNp1 ; then
+ echo "$PROGNAME: Success! The diffs from version $VERSION worked fine."
+ else
+ echo "$PROGNAME: the diffs from version $VERSION did not apply cleanly!" >&2
+ X=$(find . -name "*.rej")
+ if [ -n "$X" ]; then
+ echo "$PROGNAME: Rejected diffs are in $X" >&2
+ fi
+ STATUS=1
+ fi
+
+ # Reinstate symlinks, warning for any which fail
+ for (( i=0; $i < ${#LINKS[@]}; i=$(($i+2)) )); do
+ target="${LINKS[$i]}"
+ link="${LINKS[$(($i+1))]}"
+ if ! ln -s -T "$target" "$link"; then
+ echo "$PROGNAME: warning: Unable to restore the '$link' -> '$target' symlink." >&2
+ STATUS=1
+ fi
+ done
+
+ for file in "${MOVEDFILES[@]}"; do
+ if [ -e "$file.upstream" ]; then
+ mv $file $file.debdiff
+ mv $file.upstream $file
+ fi
+ done
+
+ elif [ "$DIFFTYPE" = tar ]; then
+ if [ -d debian ]; then
+ echo "$PROGNAME warning: using a debian.tar.{gz|bz2|lzma|xz} file in old Debian source," >&2
+ echo "$PROGNAME: but upstream also contains a debian/ directory!" >&2
+ if [ -e "debian.upstream" ]; then
+ echo "$PROGNAME: Please apply the diff by hand and take care with this." >&2
+ exit 1
+ fi
+ echo "$PROGNAME: This program will move the upstream directory out of the way" >&2
+ echo "$PROGNAME: to debian.upstream/ and use the Debian version" >&2
+ mv debian debian.upstream
+ fi
+ if [ -n "$UUPDATE_VERBOSE" ]; then
+ echo "$PROGNAME: Use ${DIFF} to create the new debian/ directory." >&2
+ fi
+ if $DIFFUNPACK $DIFF; then
+ echo "$PROGNAME: Unpacking the debian/ directory from version $VERSION worked fine."
+ else
+ echo "$PROGNAME: failed to unpack the debian/ directory from version $VERSION!" >&2
+ exit 1
+ fi
+ else
+ echo "$PROGNAME: could not find {diff|debian.tar}.{gz|bz2|lzma|xz} from version $VERSION to apply!" >&2
+ exit 1
+ fi
+ if [ -f debian/rules ]; then
+ chmod a+x debian/rules
+ fi
+ if [ -n "$UUPDATE_VERBOSE" ]; then
+ echo "$PROGNAME: New upstream release=$NEW_VERSION-$SUFFIX" >&2
+ fi
+ [ -e ../${PACKAGE}_${NEW_VERSION}.uscan.log ] && \
+ cp -f ../${PACKAGE}_${NEW_VERSION}.uscan.log debian/uscan.log
+ if [ -z "$BADVERSION" ]; then
+ debchange -v "$NEW_VERSION-$SUFFIX" "New upstream release."
+ else
+ debchange $BADVERSION -v "$NEW_VERSION-$SUFFIX" " "
+ fi
+ echo "$PROGNAME: Remember: Your current directory is the OLD sourcearchive!"
+ echo "$PROGNAME: Do a \"cd ../$PACKAGE-$SNEW_VERSION\" to see the new package"
+
+else
+ # OPMODE=3: new "uupdate -f ..." used in the version=4 watch file
+
+ # Sanity checks
+ if [ ! -d debian ]; then
+ echo "$PROGNAME: cannot find debian/ directory." >&2
+ echo "$PROGNAME: Are you in the debianized source tree?" >&2
+ echo "$PROGNAME: You may wish to run debmake or dh_make first." >&2
+ exit 1
+ fi
+
+ if [ ! -x debian/rules ]; then
+ echo "$PROGNAME: cannot find debian/rules." >&2
+ echo "Are you in the top directory of the old source tree?" >&2
+ exit 1
+ fi
+
+ if [ ! -f debian/changelog ]; then
+ echo "$PROGNAME: cannot find debian/changelog." >&2
+ echo "$PROGNAME: Are you in the top directory of the old source tree?" >&2
+ exit 1
+ fi
+
+ # Get Parameters from the old source tree
+
+ if [ -e debian/source -a -e debian/source/format ]; then
+ FORMAT=$(cat debian/source/format)
+ else
+ FORMAT='1.0'
+ fi
+
+ PACKAGE="`dpkg-parsechangelog -SSource`"
+ if [ -z "$PACKAGE" ]; then
+ echo "$PROGNAME: cannot find the source package name in debian/changelog." >&2
+ exit 1
+ fi
+
+ # Variable names follow the convention of old uupdate
+ VERSION="`dpkg-parsechangelog -SVersion`"
+ if [ -z "$VERSION" ]; then
+ echo "$PROGNAME: cannot find the source version name in debian/changelog." >&2
+ exit 1
+ fi
+
+ EPOCH="${VERSION%:*}"
+ if [ "$EPOCH" = "$VERSION" ]; then
+ EPOCH=""
+ else
+ EPOCH="$EPOCH:"
+ fi
+ SVERSION="${VERSION#*:}"
+ UVERSION="${SVERSION%-*}"
+ if [ "$UVERSION" = "$SVERSION" ]; then
+ echo "$PROGNAME: a native Debian package cannot take upstream updates" >&2
+ exit 1
+ fi
+
+ if [ -n "$UUPDATE_VERBOSE" ]; then
+ echo "$PROGNAME: Old: <epoch:><version>-<revision> = $VERSION"
+ echo "$PROGNAME: Old: <epoch:> = $EPOCH"
+ echo "$PROGNAME: Old: <version>-<revision> = $SVERSION"
+ echo "$PROGNAME: Old: <version> = $UVERSION"
+ echo "$PROGNAME: New: <version> = $NEW_VERSION"
+ fi
+
+ if [ "$(readlink -f ../${PACKAGE}-$NEW_VERSION)" = "$OPWD" ]; then
+ echo "$PROGNAME: You can not execute this from ../${PACKAGE}-${NEW_VERSION}/." >&2
+ exit 1
+ fi
+
+ if [ -e "../${PACKAGE}-$NEW_VERSION" ];then
+ echo "$PROGNAME: ../${PACKAGE}-$NEW_VERSION directory exists." >&2
+ echo "$PROGNAME: remove ../${PACKAGE}-$NEW_VERSION directory." >&2
+ rm -rf ../${PACKAGE}-$NEW_VERSION
+ fi
+
+ # Move to the archive directory
+ cd $(pwd)/..
+ ARCHIVE=$(findzzz ${PACKAGE}_$NEW_VERSION.orig.tar.*z*)
+ if [ "$FORMAT" = "1.0" ]; then
+ DEBIANFILE=$(findzzz ${PACKAGE}_$VERSION.debian.diff.*z*)
+ else
+ DEBIANFILE=$(findzzz ${PACKAGE}_$VERSION.debian.tar.*z*)
+ fi
+ # non-native package and missing diff.gz/debian.tar.xz.
+ cd $OPWD
+ if [ -z "$DEBIANFILE" ]; then
+ if [ -d debian/source -a -r debian/source/format ]; then
+ if [ "$(cat debian/source/format)" = "3.0 (quilt)" ]; then
+ # This is convenience for VCS users.
+ echo "$PROGNAME: debian/source/format is \"3.0 (quilt)\"." >&2
+ echo "$PROGNAME: Auto-generating ${PACKAGE}_$SVERSION.debian.tar.xz" >&2
+ DEBIANFILE="${PACKAGE}_$SVERSION.debian.tar.xz"
+ tar --xz -cf ../$DEBIANFILE debian
+ else
+ echo "$PROGNAME: debian/source/format isn't \"3.0 (quilt)\"." >&2
+ echo "$PROGNAME: Skip auto-generating ${PACKAGE}_$SVERSION.debian.tar.xz" >&2
+ exit 1
+ fi
+ else
+ echo "$PROGNAME: debian/source/format is missing." >&2
+ echo "$PROGNAME: Skip auto-generating ${PACKAGE}_$SVERSION.debian.tar.xz" >&2
+ exit 1
+ fi
+ fi
+ # Move to the archive directory
+ cd $(pwd)/..
+ if [ "$FORMAT" = "1.0" ]; then
+ COMP=${DEBIANFILE##*.}
+ NEW_DEBIANFILE="${PACKAGE}_${NEW_VERSION}-$SUFFIX.diff.$COMP"
+ else
+ COMP=${DEBIANFILE##*.}
+ NEW_DEBIANFILE="${PACKAGE}_${NEW_VERSION}-$SUFFIX.debian.tar.$COMP"
+ fi
+ if [ -e ${NEW_DEBIANFILE} ]; then
+ if [ "$DEBIANFILE" = "${NEW_DEBIANFILE}" ]; then
+ echo "$PROGNAME: -> Use existing ${NEW_DEBIANFILE}" >&2
+ else
+ echo "$PROGNAME: -> Overwrite to ${NEW_DEBIANFILE}" >&2
+ cp -f $DEBIANFILE ${NEW_DEBIANFILE}
+ fi
+ else
+ echo "$PROGNAME: -> Copy to ${NEW_DEBIANFILE}" >&2
+ cp $DEBIANFILE ${NEW_DEBIANFILE}
+ fi
+
+ # fake DSC
+ FAKEDSC="${PACKAGE}_${NEW_VERSION}-$SUFFIX.dsc"
+ echo "Format: ${FORMAT}" > "$FAKEDSC"
+ echo "Source: ${PACKAGE}" >> "$FAKEDSC"
+ echo "Version: $EPOCH${NEW_VERSION}-$SUFFIX" >> "$FAKEDSC"
+ echo "Files:" >> "$FAKEDSC"
+ if [ -n "$ARCHIVE" ]; then
+ echo " 01234567890123456789012345678901 1 ${ARCHIVE}" >> "$FAKEDSC"
+ DPKGOPT=""
+ elif [ "$FORMAT" = "1.0" ]; then
+ echo "$PROGNAME: dpkg format \"1.0\" requires the main upstream tarball." >&2
+ exit 1
+ else
+ ARCHIVE="${PACKAGE}_${NEW_VERSION}.orig.tar.gz"
+ mkdir -p ${PACKAGE}-${NEW_VERSION}
+ tar -czf ${ARCHIVE} ${PACKAGE}-${NEW_VERSION}
+ rm -rf ${PACKAGE}-${NEW_VERSION}
+ echo " 01234567890123456789012345678901 1 ${ARCHIVE}" >> "$FAKEDSC"
+ fi
+ for f in $(findzzz ${PACKAGE}_${NEW_VERSION}.orig-*.tar.*z*) ; do
+ echo " 01234567890123456789012345678901 1 $f" >> "$FAKEDSC"
+ done
+ echo " 01234567890123456789012345678901 1 ${NEW_DEBIANFILE}" >> "$FAKEDSC"
+
+ # unpack source tree
+ if ! dpkg-source --skip-patches --no-copy --no-check -x "$FAKEDSC"; then
+ echo "$PROGNAME: Error with \"dpkg-source --no-copy --no-check -x $FAKEDSC\"" >&2
+ echo "$PROGNAME: Remember: Your current directory is changed back to the old source tree!"
+ echo "$PROGNAME: Do a \"cd ..\" to see $FAKEDSC."
+ exit 1
+ fi
+ # remove bogus DSC and debian.tar files (generate them with dpkg-source -b)
+ if [ -z "$UUPDATE_VERBOSE" ]; then
+ rm -f $FAKEDSC ${NEW_DEBIANFILE}
+ fi
+
+ # Move to the new source directory
+ if [ ! -d ${PACKAGE}-${NEW_VERSION} ]; then
+ echo "$PROGNAME warning: ${PACKAGE}-${NEW_VERSION} directory missing." >&2
+ ls -l >&2
+ exit 1
+ fi
+ cd $(pwd)/${PACKAGE}-${NEW_VERSION}
+ [ ! -d debian ] && echo "$PROGNAME: debian directory missing." >&2 && exit 1
+ # Need to set permission for format=1.0
+ [ -e debian/rules ] && chmod a+x debian/rules
+ [ -e ../${PACKAGE}_${NEW_VERSION}.uscan.log ] && \
+ cp -f ../${PACKAGE}_${NEW_VERSION}.uscan.log debian/uscan.log
+ if [ -z "$BADVERSION" ]; then
+ debchange -v "$EPOCH$NEW_VERSION-$SUFFIX" "New upstream release."
+ else
+ debchange $BADVERSION -v "$EPOCH$NEW_VERSION-$SUFFIX" " "
+ fi
+ echo "$PROGNAME: Remember: Your current directory is changed back to the old source tree!"
+ echo "$PROGNAME: Do a \"cd ../$PACKAGE-$NEW_VERSION\" to see the new source tree and
+ edit it to be nice Debianized source."
+fi
+
+if [ $STATUS -ne 0 ]; then
+ echo "$PROGNAME: (Did you see the warnings above?)" >&2
+fi
+
+exit $STATUS
diff --git a/scripts/what-patch.bash_completion b/scripts/what-patch.bash_completion
new file mode 100644
index 0000000..6de9674
--- /dev/null
+++ b/scripts/what-patch.bash_completion
@@ -0,0 +1,13 @@
+# /usr/share/bash-completion/completions/what-patch
+# Bash command completion for ‘what-patch(1)’.
+# Documentation: ‘bash(1)’, section “Programmable Completion”.
+
+complete -W '-v' -o filenames -d what-patch
+
+
+# Local variables:
+# coding: utf-8
+# mode: shell-script
+# indent-tabs-mode: nil
+# End:
+# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 :
diff --git a/scripts/what-patch.sh b/scripts/what-patch.sh
new file mode 100755
index 0000000..697f05a
--- /dev/null
+++ b/scripts/what-patch.sh
@@ -0,0 +1,121 @@
+#!/bin/bash
+#
+# Copyright 2006-2008 (C) Kees Cook <kees@ubuntu.com>
+# Modified by Siegfried-A. Gevatter <rainct@ubuntu.com>
+# Modified by Daniel Hahler <ubuntu@thequod.de>
+#
+# ##################################################################
+#
+# 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.
+#
+# See file /usr/share/common-licenses/GPL for more details.
+#
+# ##################################################################
+#
+# By default only the name of the patch system is printed. Verbose mode can be
+# enabled with -v.
+
+if [ "$1" = "-h" ] || [ "$1" = "--help" ]
+then
+ cat <<EOM
+Usage: $0 [-v]
+
+Run this inside the source directory of a Debian package and it will detect
+the patch system that it uses.
+
+ -v: Enable verbose mode:
+ - Print a list of all those files outside the debian/ directory that have
+ been modified (if any).
+ - Report additional details about patch systems, if available.
+EOM
+ exit 0
+fi
+
+while [ ! -r debian/rules ];
+do
+ if [ "$PWD" = "/" ]; then
+ echo "Can't find debian/rules."
+ exit 1
+ fi
+ cd ..
+done
+
+VERBOSE=0
+if [ "$1" = "-v" ]
+then
+ VERBOSE=1
+fi
+
+if [ "$VERBOSE" -gt 0 ]; then
+ files=$(lsdiff -z ../$(dpkg-parsechangelog -SSource)_$(dpkg-parsechangelog -SVersion).diff.gz 2>/dev/null | grep -v 'debian/')
+ if [ -n "$files" ]
+ then
+ echo "Following files were modified outside of the debian/ directory:"
+ echo "$files"
+ echo "--------------------"
+ echo
+ echo -n "Patch System: "
+ fi
+fi
+
+if grep -qF quilt debian/source/format 2>/dev/null; then
+ echo "quilt"
+ exit 0
+fi
+
+# Do not change the output of existing checks by default, as there are build
+# tools that rely on the existing output. If changes in reporting is needed,
+# please check the "VERBOSE" flag (see below for examples). Feel free
+# to add new patchsystem detection and reporting.
+for filename in $(echo "debian/rules"; grep ^include debian/rules | grep -vF '$(' | awk '{print $2}')
+do
+ grep -F patchsys.mk "$filename" | grep -q -v "^#" && {
+ if [ "$VERBOSE" -eq 0 ]; then
+ echo "cdbs"; exit 0;
+ else
+ echo "cdbs (patchsys.mk: see 'cdbs-edit-patch')"; exit 0;
+ fi
+ }
+ grep -F quilt "$filename" | grep -q -v "^#" && { echo "quilt"; exit 0; }
+ grep -F dbs-build.mk "$filename" | grep -q -v "^#" && {
+ if [ "$VERBOSE" -eq 0 ]; then
+ echo "dbs"; exit 0;
+ else
+ echo "dbs (see 'dbs-edit-patch')"; exit 0;
+ fi
+ }
+ grep -F dpatch "$filename" | grep -q -v "^#" && {
+ if [ "$VERBOSE" -eq 0 ]; then
+ echo "dpatch"; exit 0;
+ else
+ echo "dpatch (see 'patch-edit-patch')"; exit 0;
+ fi
+ }
+ grep -F '*.diff' "$filename" | grep -q -v "^#" && {
+ if [ "$VERBOSE" -eq 0 ]; then
+ echo "diff splash"; exit 0;
+ else
+ echo "diff splash (check debian/rules)"; exit 0;
+ fi
+ }
+done
+[ -d debian/patches ] || {
+ if [ "$VERBOSE" -eq 0 ]; then
+ echo "patchless?"; exit 0;
+ else
+ echo "patchless? (did not find debian/patches/)"; exit 0;
+ fi
+}
+if [ "$VERBOSE" -eq 0 ]; then
+ echo "unknown patch system"
+else
+ echo "unknown patch system (see debian/patches/ and debian/rules)"
+fi
diff --git a/scripts/who-permits-upload.pl b/scripts/who-permits-upload.pl
new file mode 100755
index 0000000..6f82eed
--- /dev/null
+++ b/scripts/who-permits-upload.pl
@@ -0,0 +1,353 @@
+#!/usr/bin/perl
+
+# who-permits-upload - Retrieve permissions granted to Debian Maintainers (DM)
+# Copyright (C) 2012 Arno Töll <arno@debian.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+use strict;
+use Dpkg::Control;
+use LWP::UserAgent;
+use Encode::Locale;
+use Encode;
+use Getopt::Long;
+use constant {
+ TYPE_PACKAGE => "package",
+ TYPE_UID => "uid",
+ TYPE_SPONSOR => "sponsor"
+};
+use constant { SPONSOR_FINGERPRINT => 0, SPONSOR_NAME => 1 };
+use List::Util qw(first);
+
+our $DM_URL = "https://ftp-master.debian.org/dm.txt";
+our $KEYRING
+ = "/usr/share/keyrings/debian-keyring.gpg:/usr/share/keyrings/debian-maintainers.gpg";
+our $TYPE = "package";
+our $GPG = first { !system('sh', '-c', "command -v $_ >/dev/null 2>&1") }
+ qw(gpg2 gpg);
+our ($HELP, @ARGUMENTS, @DM_DATA, %GPG_CACHE);
+
+binmode STDIN, ':encoding(console_in)';
+binmode STDOUT, ':encoding(console_out)';
+binmode STDERR, ':encoding(console_out)';
+
+=encoding utf8
+
+=head1 NAME
+
+who-permits-upload - look-up Debian Maintainer access control lists
+
+=head1 SYNOPSIS
+
+B<who-permits-upload> [B<-h>] [B<-s> I<keyring>] [B<-d> I<dm_url>] [B<-s> I<search_type>] I<query> [I<query> ...]
+
+=head1 DESCRIPTION
+
+B<who-permits-upload> looks up the given Debian Maintainer (DM) upload permissions
+from ftp-master.debian.org and parses them in a human readable way. The tool can
+search by DM name, sponsor (the person who granted the permission) and by package.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--dmfile=>I<dm_url>, B<-d> I<dm_url>
+
+Retrieve the DM permission file from the supplied URL. When this option is not
+present, the default value I<https://ftp-master.debian.org/dm.txt> is used.
+
+=item B<--help>, B<-h>
+
+Display a usage summary and exit.
+
+=item B<--keyring=>I<keyring>, B<-s> I<keyring>
+
+Use the supplied GnuPG keyrings to look-up GPG fingerprints from the DM permission
+file. When not present, the default Debian Developer and Maintainer keyrings are used
+(I</usr/share/keyrings/debian-keyring.gpg> and
+I</usr/share/keyrings/debian-maintainers.gpg>, installed by the I<debian-keyring>
+package).
+
+Separate keyrings with a colon ":".
+
+=item B<--search=>I<search_type>, B<-s> I<search_type>
+
+Modify the look-up behavior. This influences the
+interpretation of the I<query> argument. Supported search types are:
+
+=over 4
+
+=item B<package>
+
+Search for a source package name. This is also the default when B<--search> is omitted.
+Since package names are unique, this will return given ACLs - if any - for a
+single package.
+
+=item B<uid>
+
+Search for a Debian Maintainer. This should be (a fraction of) a name. It will
+return all ACLs assigned to matching maintainers.
+
+=item B<sponsor>
+
+Search for a sponsor (i.e. a Debian Developer) who granted DM permissions. This
+will return all ACLs given by the supplied developer.
+
+Note that this is an expensive operation which may take some time.
+
+=back
+
+=item I<query>
+
+A case sensitive argument to be looked up in the ACL permission file. The exact
+interpretation of this argument is dependent by the B<--search> argument.
+
+This argument can be repeated.
+
+=back
+
+=head1 EXIT VALUE
+
+=over 4
+
+=item 0Z<>
+
+Success
+
+=item 1Z<>
+
+An error occurred
+
+=item 2Z<>
+
+The command line was not understood
+
+=back
+
+=head1 EXAMPLES
+
+=over 4
+
+=item who-permits-upload --search=sponsor arno@debian.org
+
+Search for all DM upload permissions given by the UID "arno@debian.org". Note,
+that only primary UIDs will match.
+
+=item who-permits-upload -s=sponsor "Arno Töll"
+
+Same as above, but use a full name instead.
+
+=item who-permits-upload apache2
+
+Look up who gave upload permissions for the apache2 source package.
+
+=item who-permits-upload --search=uid "Paul Tagliamonte"
+
+Look up all DM upload permissions given to "Paul Tagliamonte".
+
+=back
+
+=head1 AUTHOR
+
+B<who-permits-upload> was written by Arno Töll <arno@debian.org> and is licensed
+under the terms of the General Public License (GPL) version 2 or later.
+
+=head1 SEE ALSO
+
+B<gpg>(1), B<gpg2>(1), B<who-uploads>(1)
+
+S<I<https://lists.debian.org/debian-devel-announce/2012/09/msg00008.html>>
+
+=cut
+
+GetOptions(
+ "help|h" => \$HELP,
+ "keyring|k=s" => \$KEYRING,
+ "dmfile|d=s" => \$DM_URL,
+ "search|s=s" => \$TYPE,
+);
+# pop positionals
+@ARGUMENTS = @ARGV;
+
+$TYPE = lc($TYPE);
+if ($TYPE eq 'package') {
+ $TYPE = TYPE_PACKAGE;
+} elsif ($TYPE eq 'uid') {
+ $TYPE = TYPE_UID;
+} elsif ($TYPE eq 'sponsor') {
+ $TYPE = TYPE_SPONSOR;
+} else {
+ usage();
+}
+
+if ($HELP) {
+ usage();
+}
+
+if (not @ARGUMENTS) {
+ usage();
+}
+
+sub usage {
+ print STDERR (
+"Usage: $0 [-h][-s KEYRING][-d DM_URL][-s SEARCH_TYPE] QUERY [QUERY ...]\n"
+ );
+ print STDERR "Retrieve permissions granted to Debian Maintainers (DM)\n";
+ print STDERR "\n";
+ print STDERR "-h, --help\n";
+ print STDERR "\t\t\tDisplay this usage summary and exit\n";
+ print STDERR "-k, --keyring=KEYRING\n";
+ print STDERR
+ "\t\t\tUse the supplied keyring file(s) instead of the default\n";
+ print STDERR "\t\t\tkeyring. Separate arguments by a colon (\":\")\n";
+ print STDERR "-d, --dmfile=DM_URL\n";
+ print STDERR "\t\t\tRetrieve DM permissions from the supplied URL.\n";
+ print STDERR "\t\t\tDefault is https://ftp-master.debian.org/dm.txt\n";
+ print STDERR "-s, --search=SEARCH_TYPE\n";
+ print STDERR "\t\t\tSupplied QUERY arguments are interpreted as:\n";
+ print STDERR
+ "\t\t\tpackage name when SEARCH_TYPE is \"package\" (default)\n";
+ print STDERR "\t\t\tDM user name id when SEARCH_TYPE is \"uid\"\n";
+ print STDERR "\t\t\tsponsor user id when SEARCH_TYPE is \"sponsor\"\n";
+ exit 2;
+}
+
+sub leave {
+ my $reason = shift;
+ chomp $reason;
+ print STDERR "$reason\n";
+ exit 1;
+}
+
+sub lookup_fingerprint {
+ my $fingerprint = shift;
+
+ if (exists $GPG_CACHE{$fingerprint}) {
+ return $GPG_CACHE{$fingerprint};
+ }
+
+ my @gpg_arguments;
+ foreach my $keyring (split(":", "$KEYRING")) {
+ if (!-f $keyring) {
+ leave("Keyring $keyring is not accessible");
+ }
+ push(@gpg_arguments, ("--keyring", $keyring));
+ }
+ push(
+ @gpg_arguments,
+ (
+ "--no-options", "--no-auto-check-trustdb",
+ "--no-default-keyring", "--list-key",
+ "--with-colons", encode(locale => $fingerprint)));
+ open(CMD, '-|', $GPG, @gpg_arguments) || leave "$GPG: $!\n";
+ binmode CMD, ':utf8';
+ my $uid;
+ while (my $l = <CMD>) {
+ if ($l =~ /^uid/) {
+ my $id = (split(":", $l))[9];
+ if (!defined($uid)) {
+ $uid = $id;
+ }
+ if ($id =~ /debian\.org/) {
+ $uid = $id;
+ # Consume the rest of the output to avoid a potential SIGPIPE when closing CMD
+ my @junk = <CMD>;
+ last;
+ }
+ }
+ }
+ close(CMD)
+ || leave("gpg returned an error looking for $fingerprint: " . ($? >> 8));
+
+ $GPG_CACHE{$fingerprint} = $uid;
+
+ return $uid;
+}
+
+sub parse_data {
+ my $raw_data = shift;
+ my $parser
+ = Dpkg::Control->new(type => CTRL_UNKNOWN, allow_duplicate => 1);
+ open(my $fh, '+<:utf8', \$raw_data)
+ || leave('unable to read dm data: ' . $!);
+ my @dm_data = ();
+
+ while ($parser->parse($fh)) {
+ foreach my $package (split(/,/, $parser->{Allow})) {
+ if ($package =~ m/([a-z0-9\+\-\.]+)\s+\((\w+)\)/s) {
+ my @package_row = (
+ $1, $parser->{Fingerprint},
+ $parser->{Uid}, $2, SPONSOR_FINGERPRINT
+ );
+ push(@dm_data, \@package_row);
+ }
+ }
+ }
+ return @dm_data;
+}
+
+sub find_matching_row {
+ my $pattern = shift;
+ my $type = shift;
+ my @return_rows;
+ foreach my $package (@DM_DATA) {
+ # $package is an array ref in the format
+ # (package, dm_fingerprint, dm_uid, sponsor_fingerprint callback)
+ push(@return_rows, $package)
+ if ($type eq TYPE_PACKAGE && $pattern eq $package->[0]);
+ push(@return_rows, $package)
+ if ($type eq TYPE_UID && $package->[2] =~ m/$pattern/);
+ if ($type eq TYPE_SPONSOR) {
+ # the sponsor function is a key id so far, mark we looked it up
+ # already
+ $package->[3] = lookup_fingerprint($package->[3]);
+ $package->[4] = SPONSOR_NAME;
+ if ($package->[3] =~ m/$pattern/) {
+ push(@return_rows, $package);
+ }
+ }
+ }
+ return @return_rows;
+}
+
+my $http = LWP::UserAgent->new;
+$http->timeout(10);
+$http->env_proxy;
+
+my $response = $http->get($DM_URL);
+if ($response->is_success) {
+ @DM_DATA = parse_data($response->content);
+} else {
+ leave "Could not retrieve DM file: $DM_URL Server returned: "
+ . $response->status_line;
+}
+
+foreach my $argument (@ARGUMENTS) {
+ $argument = decode(locale => $argument);
+ my @rows = find_matching_row($argument, $TYPE);
+ if (not @rows) {
+ leave("No $TYPE matches $argument");
+ }
+ foreach my $row (@rows) {
+ # $package is an array ref in the format
+ # (package, dm_fingerprint, dm_uid, sponsor_fingerprint, sponsor_type_flag)
+ my $sponsor = $row->[3];
+ if ($row->[4] != SPONSOR_NAME) {
+ $row->[3] = lookup_fingerprint($row->[3]);
+ }
+ printf("Package: %s DM: %s Sponsor: %s\n",
+ $row->[0], $row->[2], $row->[3]);
+ }
+}
diff --git a/scripts/who-uploads.1 b/scripts/who-uploads.1
new file mode 100644
index 0000000..431dc43
--- /dev/null
+++ b/scripts/who-uploads.1
@@ -0,0 +1,76 @@
+.TH WHO-UPLOADS 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+who-uploads \- identify the uploaders of Debian source packages
+.SH SYNOPSIS
+\fBwho\-uploads\fR [\fIoptions\fR] \fIsource_package\fR ...
+.SH DESCRIPTION
+\fBwho\-uploads\fR uses the Package Tracking System (PTS) to identify
+the uploaders of the three most recent versions of the given source
+packages. Note that the uploaders are identified using their
+\fBgpg\fR(1) or \fBgpg2\fR(1) keys; installing a recent version of the
+\fIdebian-keyring\fR package should provide most of the required keys.
+.PP
+Note that because the PTS uses source packages, you must give the
+source package names, not the binary package names.
+.SH OPTIONS
+.TP
+\fB\-M\fR, \fB\-\-max\-uploads=\fIN\fR
+Specify the maximum number of uploads to display for each package; the
+default is 3. Note that you may not see this many uploads if there
+are not this many recorded in the PTS.
+.TP
+\fB\-\-keyring \fIkeyring\fR
+Add \fIkeyring\fR to the list of keyrings to be searched for the
+uploader's GPG key.
+.TP
+\fB\-\-no\-default\-keyrings\fR
+By default, \fBwho\-uploads\fR uses the three Debian keyrings
+\fI/usr/share/keyrings/debian-keyring.gpg\fR,
+\fI/usr/share/keyrings/debian-nonupload.gpg\fR, and
+\fI/usr/share/keyrings/debian-maintainers.gpg\fR (although this
+default can be changed in the configuration file, see below).
+Specifying this option means that the default keyrings will not be
+examined. The \fB\-\-keyring\fR option overrides this one.
+.TP
+\fB\-\-date\fR
+Show the date of the upload alongside the uploader's details
+.TP
+.BR \-\-nodate ", " \-\-no\-date
+Do not show the date of the upload alongside the uploader's details.
+This is the default behaviour.
+.TP
+\fB\-\-no-conf\fR, \fB\-\-noconf\fR
+Do not read any configuration files. This can only be used as the
+first option given on the command-line.
+.TP
+.BR \-\-help ", " \-h
+Display a help message and exit successfully.
+.TP
+.B \-\-version
+Display version and copyright information and exit successfully.
+.SH "CONFIGURATION VARIABLES"
+The two configuration files \fI/etc/devscripts.conf\fR and
+\fI~/.devscripts\fR are sourced in that order to set configuration
+variables. Command line options can be used to override configuration
+file settings. Environment variable settings are ignored for this
+purpose. The currently recognised variables are:
+.TP
+.B WHOUPLOADS_DATE
+Show the date of the upload alongside the uploader's details. By
+default, this is "no".
+.TP
+.B WHOUPLOADS_MAXUPLOADS
+The maximum number of uploads to display for each package. By
+default, this is 3.
+.TP
+.B WHOUPLOADS_KEYRINGS
+This is a colon-separated list of the default keyrings to be used. By
+default, it is the three Debian keyrings
+\fI/usr/share/keyrings/debian-keyring.gpg\fR,
+\fI/usr/share/keyrings/debian-nonupload.gpg\fR,
+and
+\fI/usr/share/keyrings/debian-maintainers.gpg\fR.
+.SH AUTHOR
+The original version of \fBwho-uploads\fR was written by Adeodato Sim\['o]
+<dato@net.com.org.es>. The current version is by Julian Gilbey
+<jdg@debian.org>.
diff --git a/scripts/who-uploads.sh b/scripts/who-uploads.sh
new file mode 100755
index 0000000..17edd16
--- /dev/null
+++ b/scripts/who-uploads.sh
@@ -0,0 +1,278 @@
+#!/bin/bash
+
+# who-uploads sourcepkg [ sourcepkg ... ]
+# Tells you who made the latest uploads of a source package.
+# NB: I'm encoded in UTF-8!!
+
+# Written and copyright 2006 by Julian Gilbey <jdg@debian.org>
+# Based on an original script
+# copyright 2006 Adeodato Simó <dato@net.com.org.es>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+set -e
+
+PROGNAME=${0##*/}
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+
+usage() {
+ echo \
+"Usage: $PROGNAME [options] package ...
+ Display the most recent three uploaders of each package.
+ Packages should be source packages, not binary packages.
+
+ Options:
+ -M, --max-uploads=N
+ Display at most the N most recent uploads (default: 3)
+ --keyring KEYRING Add KEYRING as a GPG keyring for Debian Developers'
+ keys in addition to /usr/share/keyrings/debian-keyring.*,
+ /usr/share/keyrings/debian-maintainers.gpg and
+ /usr/share/keyrings/debian-nonupload.gpg;
+ this option may be given multiple times
+ --no-default-keyrings
+ Do not use the default keyrings
+ --no-conf, --noconf
+ Don't read devscripts config files;
+ must be the first option given
+ --date Display the date of the upload
+ --no-date, --nodate
+ Don't display the date of the upload (default)
+ --help Show this message
+ --version Show version and copyright information
+
+$MODIFIED_CONF_MSG"
+}
+
+version() {
+ echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2006 by Julian Gilbey <jdg@debian.org>,
+all rights reserved.
+Based on original code copyright 2006 Adeodato Simó <dato@net.com.org.es>
+This program comes with ABSOLUTELY NO WARRANTY.
+You are free to redistribute this code under the terms of the
+GNU General Public License, version 2 or later."
+}
+
+
+# Boilerplate: set config variables
+DEFAULT_WHOUPLOADS_KEYRINGS=/usr/share/keyrings/debian-keyring.gpg:/usr/share/keyrings/debian-maintainers.gpg:/usr/share/keyrings/debian-nonupload.gpg
+DEFAULT_WHOUPLOADS_MAXUPLOADS=3
+DEFAULT_WHOUPLOADS_DATE=no
+VARS="WHOUPLOADS_KEYRINGS WHOUPLOADS_MAXUPLOADS WHOUPLOADS_DATE"
+
+GPG=gpg
+if ! command -v $GPG > /dev/null; then
+ echo "$GPG missing"
+ GPG=gpg2
+ if ! command -v $GPG > /dev/null; then
+ echo "$GPG missing"
+ exit 1
+ fi
+fi
+
+if [ "$1" = "--no-conf" -o "$1" = "--noconf" ]; then
+ shift
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (no configuration files read)"
+
+ # set defaults
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+else
+ # Run in a subshell for protection against accidental errors
+ # in the config files
+ eval $(
+ set +e
+ for var in $VARS; do
+ eval "$var=\$DEFAULT_$var"
+ done
+
+ for file in /etc/devscripts.conf ~/.devscripts
+ do
+ [ -r $file ] && . $file
+ done
+
+ set | grep "^WHOUPLOADS_")
+
+ # check sanity
+ if [ "$WHOUPLOADS_MAXUPLOADS" != \
+ "$(echo \"$WHOUPLOADS_MAXUPLOADS\" | tr -cd 0-9)" ]; then
+ WHOUPLOADS_MAXUPLOADS=3
+ fi
+
+ WHOUPLOADS_DATE="$(echo "$WHOUPLOADS_DATE" | tr A-Z a-z)"
+ if [ "$WHOUPLOADS_DATE" != "yes" ] && [ "$WHOUPLOADS_DATE" != "no" ]; then
+ WHOUPLOADS_DATE=no
+ fi
+
+ # don't check WHOUPLOADS_KEYRINGS here
+
+ # set config message
+ MODIFIED_CONF=''
+ for var in $VARS; do
+ eval "if [ \"\$$var\" != \"\$DEFAULT_$var\" ]; then
+ MODIFIED_CONF_MSG=\"\$MODIFIED_CONF_MSG
+ $var=\$$var\";
+ MODIFIED_CONF=yes;
+ fi"
+ done
+
+ if [ -z "$MODIFIED_CONF" ]; then
+ MODIFIED_CONF_MSG="$MODIFIED_CONF_MSG
+ (none)"
+ fi
+fi
+
+MAXUPLOADS=$WHOUPLOADS_MAXUPLOADS
+WANT_DATE=$WHOUPLOADS_DATE
+
+declare -a GPG_DEFAULT_KEYRINGS
+declare -a GPG_KEYRINGS
+
+# Command-line options
+TEMP=$(getopt -s bash -o 'h' \
+ --long max-uploads:,keyring:,no-default-keyrings \
+ --long no-conf,noconf \
+ --long date,nodate,no-date \
+ --long help,version \
+ --options M: \
+ -n "$PROGNAME" -- "$@") || (usage >&2; exit 1)
+
+eval set -- $TEMP
+
+# Process Parameters
+while [ "$1" ]; do
+ case $1 in
+ --max-uploads|-M)
+ shift
+ if [ "$1" = "$(echo \"$1\" | tr -cd 0-9)" ]; then
+ MAXUPLOADS=$1
+ fi
+ ;;
+ --keyring)
+ shift
+ if [ -f "$1" ]; then
+ GPG_KEYRINGS=("${GPG_KEYRINGS[@]}" "--keyring" "$1")
+ else
+ echo "Could not find keyring $1, skipping" >&2
+ fi
+ ;;
+ --no-default-keyrings)
+ WHOUPLOADS_KEYRINGS=
+ ;;
+ --no-conf|--noconf)
+ echo "$PROGNAME: $1 is only acceptable as the first command-line option!" >&2
+ exit 1 ;;
+ --date) WANT_DATE=yes ;;
+ --no-date|--nodate) WANT_DATE=no ;;
+ --help|-h) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+ --) shift; break ;;
+ *) echo "$PROGNAME: bug in option parser, sorry!" >&2 ; exit 1 ;;
+ esac
+ shift
+done
+
+OIFS="$IFS"
+IFS=:
+
+for keyring in $WHOUPLOADS_KEYRINGS; do
+ if [ -f "$keyring" ]; then
+ GPG_DEFAULT_KEYRINGS=("${GPG_DEFAULT_KEYRINGS[@]}" "--keyring" "$keyring")
+ elif [ -n "$keyring" ]; then
+ echo "Could not find keyring $keyring, skipping it" >&2
+ fi
+done
+
+IFS="${OIFS:- }"
+
+GNUPGHOME=$(mktemp -d)
+exit_with_error() {
+ [ ! -d "$GNUPGHOME" ] || rm -r "$GNUPGHOME"
+ exit 1
+}
+trap exit_with_error HUP INT QUIT PIPE ALRM TERM
+export GNUPGHOME
+
+# Some useful abbreviations for gpg options
+GPG_OPTIONS="--no-options --no-auto-check-trustdb --no-default-keyring"
+GPG_NO_KEYRING="$GPG_OPTIONS --keyring /dev/null"
+
+if [ $# -eq 0 ]; then
+ usage;
+ exit 1
+fi
+
+# Now actually get the reports :)
+
+for package; do
+ echo "Uploads for $package:"
+
+ prefix=$(echo $package | sed -re 's/^((lib)?.).*$/\1/')
+ pkgurl="https://packages.qa.debian.org/${prefix}/${package}.html"
+ baseurl="https://packages.qa.debian.org/${prefix}/"
+
+ # only grab the actual "Accepted" news announcements; hopefully this
+ # won't pick up many false positives
+ WGETOPTS="-q -O - --timeout=30 "
+ count=0
+ for news in $(wget $WGETOPTS $pkgurl |
+ sed -ne 's%^.*<a href="\('$package'/news/[0-9A-Z]*\.html\)">Accepted .*%\1%p'); do
+ HTML_TEXT=$(wget $WGETOPTS "$baseurl$news")
+ GPG_TEXT=$(echo "$HTML_TEXT" |
+ sed -ne 's/^<pre>//; /-----BEGIN PGP SIGNED MESSAGE-----/,/-----END PGP SIGNATURE-----/p')
+
+ test -n "$GPG_TEXT" || continue
+
+ VERSION=$(echo "$GPG_TEXT" | awk '/^Version/ { print $2; exit }')
+ DISTRO=$(echo "$GPG_TEXT" | awk '/^Distribution/ { print $2; exit }')
+ if [ "$WANT_DATE" = "yes" ]; then
+ DATE=$(echo "$HTML_TEXT" | sed -ne 's%<li><em>Date</em>: \(.*\)</li>%\1%p')
+ fi
+
+ GPG_ID=$(echo "$GPG_TEXT" | LC_ALL=C $GPG $GPG_NO_KEYRING --keyid-format long --verify 2>&1 |
+ sed -rne 's/.*using [^ ]* key ([0-9A-Z]+).*/\1/p')
+
+ # First try to get the uid@debian.org email
+ UPLOADER=$($GPG $GPG_OPTIONS \
+ "${GPG_DEFAULT_KEYRINGS[@]}" "${GPG_KEYRINGS[@]}" \
+ --list-key --with-colons --fixed-list-mode $GPG_ID 2>/dev/null |
+ awk -F: '/@debian\.org/ { a = $10; exit} END { print a }' )
+
+ # If $UPLOADER is still null (no @debian.org email found), pull the next email uid
+ if [ -z "$UPLOADER" ]; then
+ UPLOADER=$($GPG $GPG_OPTIONS \
+ "${GPG_DEFAULT_KEYRINGS[@]}" "${GPG_KEYRINGS[@]}" \
+ --list-key --with-colons --fixed-list-mode $GPG_ID 2>/dev/null |
+ awk -F: '/^uid/ { a = $10; exit} END { print a }' )
+
+ fi
+
+ # If $UPLOADER is still null (no email found on the key) print the <unrecognized public key> message
+ if [ -z "$UPLOADER" ]; then UPLOADER="<unrecognised public key ($GPG_ID)>"; fi
+
+ output="$VERSION to $DISTRO: $UPLOADER"
+ [ "$WANT_DATE" = "yes" ] && output="$output on $DATE"
+ echo $output | iconv -c -f UTF-8
+
+ count=$(($count + 1))
+ [ $count -eq $MAXUPLOADS ] && break
+ done
+ test $# -eq 1 || echo
+done
+
+[ ! -d "$GNUPGHOME" ] || rm -r "$GNUPGHOME"
+exit 0
diff --git a/scripts/whodepends.1 b/scripts/whodepends.1
new file mode 100644
index 0000000..71ed791
--- /dev/null
+++ b/scripts/whodepends.1
@@ -0,0 +1,20 @@
+.TH WHODEPENDS 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+whodepends \- check which maintainers' packages depend on a package
+.SH SYNOPSIS
+\fBwhodepends\fP [\fIpackage\fR] [\fIoptions\fR]
+.SH DESCRIPTION
+\fBwhodepends\fR gives the names, e-mail addresses and the packages they
+maintain of all maintainers who have packages depending on the given
+package.
+.SH OPTIONS
+.TP
+.B \-\-help\fP, \fB\-h
+Show a brief usage message.
+.TP
+.B \-\-version\fP, \fB\-v
+Show version and copyright information.
+.SH BUGS
+\fBwhodepends\fR is not very efficient.
+.SH AUTHOR
+\fBwhodepends\fR has been written by Moshe Zadka <moshez@debian.org>.
diff --git a/scripts/whodepends.sh b/scripts/whodepends.sh
new file mode 100755
index 0000000..e0b6441
--- /dev/null
+++ b/scripts/whodepends.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+# whodepends - show maintainers a package depends upon
+# by Moshe Zadka <moshez@debian.org> and
+# modified by Joshua Kwan <joshk@triplehelix.org>
+# This script is in the public domain.
+
+set -e
+
+PROGNAME=${0##*/}
+
+usage() {
+ cat <<EOF
+Usage: $PROGNAME [package] [package] ... [options]
+ Check which maintainers a particular package depends on.
+ $PROGNAME options:
+ --source, -s Show source packages instead of binary ones.
+ --help, -h Show this help screen.
+ --version Show version and copyright information.
+EOF
+}
+
+version() {
+ cat <<EOF
+This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is by Moshe Zadka <moshez@debian.org>, and is in the public domain.
+EOF
+}
+
+if [ -z "$1" ]; then
+ usage
+ exit 1
+fi
+
+while [ -n "$1" ]; do
+ case "$1" in
+ -s | --source) source=true ;;
+ -h | --help) usage; exit 0 ;;
+ --version) version; exit 0 ;;
+ *)
+ echo "Dependent maintainers for $1:"
+ for package in $(apt-cache showpkg $1 | sed -n '/Reverse Depends:/,/Dependencies/p' | grep '^ '|sed 's/,.*//'); do
+ if [ $source ]; then
+ apt-cache showsrc $package |
+ awk '/^Maintainer:/ {maint=$0} /^Package:/ {pkg=$0} END {print maint, pkg}' |
+ sed 's/Maintainer: //;s/Package: //'
+ else
+ apt-cache show $package |
+ awk '/^Maintainer:/ {maint=$0} END {print maint, "'$package'"}' |
+ sed 's/Maintainer: //'
+ fi
+ done | sort -u | awk -F'>' '{ pack[$1]=pack[$1] $2 } END {for (val in pack) print val ">", "(" pack[val] ")"}' | sed 's/( /(/'
+ echo
+ ;;
+ esac
+ shift
+done
diff --git a/scripts/wnpp-alert.1 b/scripts/wnpp-alert.1
new file mode 100644
index 0000000..ce2a40f
--- /dev/null
+++ b/scripts/wnpp-alert.1
@@ -0,0 +1,34 @@
+.TH WNPP-ALERT 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+wnpp-alert \- check for installed packages up for adoption or orphaned
+.SH SYNOPSIS
+\fBwnpp-alert \fR[\fB\-\-diff\fR] [\fIpackage\fR ...]
+.br
+\fBwnpp-alert \-\-help\fR|\fB\-\-version\fR
+.SH DESCRIPTION
+\fBwnpp-alert\fR downloads the lists of packages which have been
+orphaned (O), are up for adoption (RFA), or the maintainer has asked
+for help (RFH) from the WNPP webpages, and then outputs a list of
+packages installed on the system, or matching the listed packages,
+which are in those lists.
+.PP
+Note that WNPP, and therefore \fBwnpp-alert\fR's output, is source
+package based.
+.SH OPTIONS
+.TP
+.BR \-\-diff ", " \-d
+If the \fI$XDG_CACHE_HOME/devscripts\fP directory exists, compare the output of
+\fBwnpp-alert\fR to the previous output (cached in the file
+\fIwnpp-diff\fR) and output the differences.
+.TP
+.BR \-\-help ", " \-h
+Show a summary of options.
+.TP
+.BR \-\-version ", " \-v
+Show version and copyright information.
+.SH SEE ALSO
+https://www.debian.org/devel/wnpp
+.SH AUTHOR
+\fBwnpp-alert\fR was written by Arthur Korn <arthur@korn.ch> and
+modified by Julian Gilbey <jdg@debian.org> for the devscripts
+package. It is in the public domain.
diff --git a/scripts/wnpp-alert.sh b/scripts/wnpp-alert.sh
new file mode 100755
index 0000000..78c7e6f
--- /dev/null
+++ b/scripts/wnpp-alert.sh
@@ -0,0 +1,142 @@
+#!/bin/bash
+
+# wnpp-alert -- check for installed packages which have been orphaned
+# or put up for adoption
+
+# This script is in the PUBLIC DOMAIN.
+# Authors:
+# Arthur Korn <arthur@korn.ch>
+
+# Arthur wrote:
+# Get a list of packages with bugnumbers. I tried with LDAP, but this
+# is _much_ faster.
+# And I (Julian) tried it with Perl's LWP, but this is _much_ faster
+# (startup time is huge). And even Perl with wget is slower by 50%....
+
+set -e
+
+PROGNAME=${0##*/}
+# TODO: Remove use of OLDCACHEDDIR post-Stretch
+OLDCACHEDIR=~/.devscripts_cache
+OLDCACHEDDIFF="${OLDCACHEDIR}/wnpp-diff"
+CACHEDIR=${XDG_CACHE_HOME:-~/.cache}
+CACHEDIR=${CACHEDIR%/}/devscripts
+CACHEDDIFF="${CACHEDIR}/wnpp-diff"
+CURLORWGET=""
+GETCOMMAND=""
+
+usage() { echo \
+"Usage: $PROGNAME [--help|-h|--version|-v|--diff|-d] [package ...]
+ List all installed (or listed) packages with Request for
+ Adoption (RFA), Request for Help (RHF), or Orphaned (O)
+ bugs against them, as determined from the WNPP website.
+ https://www.debian.org/devel/wnpp"
+}
+
+version() { echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This script is in the PUBLIC DOMAIN.
+Authors: Arthur Korn <arthur@korn.ch>
+Modifications: Julian Gilbey <jdg@debian.org>"
+}
+
+wnppdiff() {
+ if [ -f "$OLDCACHEDDIFF" ]; then
+ mv "$OLDCACHEDDIFF" "$CACHEDDIFF"
+ fi
+ if [ ! -f "$CACHEDDIFF" ]; then
+ # First use
+ comm -12 $WNPP_PACKAGES $INSTALLED | sed -e 's/\([+.]\)/\\\1/g' | \
+ xargs -I{} grep -E '^[A-Z]+ [0-9]+ {} ' $WNPP | \
+ tee "$CACHEDDIFF"
+ else
+ comm -12 $WNPP_PACKAGES $INSTALLED | sed -e 's/\([+.]\)/\\\1/g' | \
+ xargs -I{} grep -E '^[A-Z]+ [0-9]+ {} ' $WNPP > "$WNPP_DIFF" || true
+ sort -o "$CACHEDDIFF" "$CACHEDDIFF"
+ sort -o "$WNPP_DIFF" "$WNPP_DIFF"
+ comm -3 "$CACHEDDIFF" "$WNPP_DIFF" | \
+ sed -e 's/\t/\+/g' -e 's/^\([^+]\)/-\1/g'
+ mv "$WNPP_DIFF" "$CACHEDDIFF"
+ fi
+}
+
+if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then usage; exit 0; fi
+if [ "$1" = "--version" ] || [ "$1" = "-v" ]; then version; exit 0; fi
+
+if command -v wget > /dev/null; then
+ CURLORWGET="wget"
+ GETCOMMAND="wget -q -O"
+elif command -v curl > /dev/null; then
+ CURLORWGET="curl"
+ GETCOMMAND="curl -qfsL -o"
+else
+ echo "$PROGNAME: need either the wget or curl package installed to run this" >&2
+ exit 1
+fi
+
+
+# Let's abandon this directory from now on, these files are so small
+# (see bug#309802)
+if [ -d "$CACHEDIR" ]; then
+ rm -f "$CACHEDIR"/orphaned "$CACHEDIR"/rfa_bypackage
+fi
+
+WNPPTMPDIR=$(mktemp --directory --tmpdir wnppalert.XXXXXX)
+trap 'rm -rf "$WNPPTMPDIR"' EXIT
+cd "$WNPPTMPDIR"
+
+INSTALLED=installed
+WNPP=wnpp
+WNPP_PACKAGES=wnpp_packages
+
+if [ "$1" = "--diff" ] || [ "$1" = "-d" ]; then
+ shift
+ WNPP_DIFF=wnpp_diff
+fi
+
+# Here's a really sly sed script. Rather than first grepping for
+# matching lines and then processing them, this attempts to sed
+# every line; those which succeed execute the 'p' command, those
+# which don't skip over it to the label 'd'
+WNPPTMP=orphaned
+$GETCOMMAND $WNPPTMP https://www.debian.org/devel/wnpp/orphaned || \
+ { echo "$PROGNAME: $CURLORWGET https://www.debian.org/devel/wnpp/orphaned failed" >&2; exit 1; }
+sed -ne 's/.*<li><a href="https\?:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/O \1 \2 -- \3/; T d; p; : d' $WNPPTMP > $WNPP
+
+WNPPTMP=rfa_bypackage
+$GETCOMMAND $WNPPTMP https://www.debian.org/devel/wnpp/rfa_bypackage || \
+ { echo "$PROGNAME: $CURLORWGET https://www.debian.org/devel/wnpp/rfa_bypackage" >&2; exit 1; }
+sed -ne 's/.*<li><a href="https\?:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/RFA \1 \2 -- \3/; T d; p; : d' $WNPPTMP >> $WNPP
+
+WNPPTMP=help_requested
+$GETCOMMAND $WNPPTMP https://www.debian.org/devel/wnpp/help_requested || \
+ { echo "$PROGNAME: $CURLORWGET https://www.debian.org/devel/wnpp/help_requested" >&2; exit 1; }
+sed -ne 's/.*<li><a href="https\?:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/RFH \1 \2 -- \3/; T d; p; : d' $WNPPTMP >> $WNPP
+
+cut -f3 -d' ' $WNPP | sort > $WNPP_PACKAGES
+
+# A list of installed files.
+
+if [ $# -gt 0 ]; then
+ printf '%s\n' "$@" | sort -u > $INSTALLED
+else
+ dpkg-query -W -f '${Package} ${Status}\n${Source} ${Status}\n' | \
+ awk '/^[^ ].*install ok installed/{print $1}' | \
+ sort -u \
+ > $INSTALLED
+fi
+
+if [ -n "$WNPP_DIFF" ]; then
+ # This may fail when run from a cronjob (c.f., #309802), so just ignore it
+ # and carry on.
+ mkdir -p "$CACHEDIR" >/dev/null 2>&1 || true
+ if [ -d "$CACHEDIR" ] || [ -d "$OLDCACHEDIR" ]; then
+ wnppdiff
+ exit 0
+ else
+ echo "$PROGNAME: Unable to create diff; displaying full output"
+ fi
+fi
+
+comm -12 $WNPP_PACKAGES $INSTALLED | sed -e 's/\([+.]\)/\\\1/g' | \
+xargs -I{} grep -E '^[A-Z]+ [0-9]+ {} ' $WNPP || true
diff --git a/scripts/wnpp-check.1 b/scripts/wnpp-check.1
new file mode 100644
index 0000000..3292099
--- /dev/null
+++ b/scripts/wnpp-check.1
@@ -0,0 +1,42 @@
+.TH WNPP-CHECK 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+wnpp-check \- check if a package is being packaged or if this has been requested
+.SH SYNOPSIS
+\fBwnpp-check\fR [\fB\-\-exact\fR] \fIpackage\fR ...
+.br
+\fBwnpp-check \-\-help\fR|\fB\-\-version\fR
+.SH DESCRIPTION
+\fBwnpp-check\fR downloads the lists of packages which are listed as being
+packaged (ITPed) or for which a package has been requested (RFPed) from the
+WNPP website and lists any packages supplied on the command line which appear
+in those lists.
+.PP
+Note that WNPP, and therefore \fBwnpp-check\fR's output, is source
+package based.
+.SH OPTIONS
+.TP
+.BR \-\-exact ", " \-e
+Require an exact package name match, rather than the default substring match.
+.TP
+.BR \-\-help ", " \-h
+Show a summary of options.
+.TP
+.BR \-\-version ", " \-v
+Show version and copyright information.
+.SH SEE ALSO
+https://www.debian.org/devel/wnpp
+.SH EXIT STATUS
+.TP
+0
+None of the packages supplied has an open ITP or RFP
+.TP
+1
+Either an error occurred or at least one package supplied has an open ITP or
+RFP
+.SH AUTHOR
+\fBwnpp-check\fR was written by David Paleino <d.paleino@gmail.com>; this man
+page was written by Adam D. Barratt <adam@adam-barratt.org.uk> for the
+devscripts package.
+\fBwnpp-check\fR was originally based on \fBwnpp-alert\fR, which was written
+by Arthur Korn <arthur@korn.ch> and modified by Julian Gilbey <jdg@debian.org>
+for the devscripts package. Both scripts are in the public domain.
diff --git a/scripts/wnpp-check.sh b/scripts/wnpp-check.sh
new file mode 100755
index 0000000..6409be5
--- /dev/null
+++ b/scripts/wnpp-check.sh
@@ -0,0 +1,104 @@
+#!/bin/bash
+
+# wnpp-check -- check for software being packaged or requested
+
+# This script is in the PUBLIC DOMAIN.
+# Authors:
+# David Paleino <d.paleino@gmail.com>
+#
+# Adapted from wnpp-alert, by Arthur Korn <arthur@korn.ch>
+
+set -e
+
+CURLORWGET=""
+GETCOMMAND=""
+EXACT=0
+PROGNAME=${0##*/}
+
+usage() { echo \
+"Usage: $PROGNAME <package name> [...]
+ -e,--exact Require an exact package name match,
+ rather than the default substring match.
+
+ -h,--help Show this help message
+ -v,--version Show a version message
+
+ Check whether a package is listed as being packaged (ITPed) or has an
+ outstanding request for packaging (RFP) on the WNPP website
+ https://www.debian.org/devel/wnpp/"
+}
+
+version() { echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This script is in the PUBLIC DOMAIN.
+Authors: David Paleino <d.paleino@gmail.com>
+Adapted from wnpp-alert, by Arthur Korn <arthur@korn.ch>,
+with modifications by Julian Gilbey <jdg@debian.org>"
+}
+
+TEMP=$(getopt -n "$PROGNAME" -o 'hve' \
+ -l 'help,version,exact' \
+ -- "$@") || (rc=$?; usage >&2; exit $rc)
+
+eval set -- "$TEMP"
+
+while true
+do
+ case "$1" in
+ -h|--help) usage; exit 0 ;;
+ -v|--version) version; exit 0 ;;
+ -e|--exact) EXACT=1 ;;
+ --) shift; break ;;
+ esac
+ shift
+done
+
+if [ -z "$1" ]; then
+ usage
+ exit 1
+fi
+
+PACKAGES="$@"
+
+if command -v wget > /dev/null; then
+ CURLORWGET="wget"
+ GETCOMMAND="wget -q -O"
+elif command -v curl >/dev/null; then
+ CURLORWGET="curl"
+ GETCOMMAND="curl -qfsL -o"
+else
+ echo "$PROGNAME: need either the wget or curl package installed to run this" >&2
+ exit 1
+fi
+
+WNPP=$(mktemp --tmpdir wnppcheck-wnpp.XXXXXX)
+WNPPTMP=$(mktemp --tmpdir wnppcheck-wnpp.XXXXXX)
+WNPP_PACKAGES=$(mktemp --tmpdir wnppcheck-wnpp_packages.XXXXXX)
+trap 'rm -f "$WNPP" "$WNPPTMP" "$WNPP_PACKAGES"' EXIT
+
+# Here's a really sly sed script. Rather than first grepping for
+# matching lines and then processing them, this attempts to sed
+# every line; those which succeed execute the 'p' command, those
+# which don't skip over it to the label 'd'
+
+$GETCOMMAND $WNPPTMP https://www.debian.org/devel/wnpp/being_packaged || \
+ { echo "$PROGNAME: $CURLORWGET https://www.debian.org/devel/wnpp/being_packaged failed." >&2; exit 1; }
+sed -ne 's/.*<li><a href="https\?:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/ITP \1 \2 -- \3/; T d; p; : d' $WNPPTMP > $WNPP
+
+$GETCOMMAND $WNPPTMP https://www.debian.org/devel/wnpp/requested || \
+ { echo "$PROGNAME: $CURLORWGET https://www.debian.org/devel/wnpp/requested failed." >&2; exit 1; }
+sed -ne 's/.*<li><a href="https\?:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/RFP \1 \2 -- \3/; T d; p; : d' $WNPPTMP >> $WNPP
+
+awk -F' ' '{print "("$1" - #"$2") https://bugs.debian.org/"$2" "$3}' $WNPP | sort -k 5 > $WNPP_PACKAGES
+
+FOUND=0
+for pkg in $PACKAGES
+do
+ if [ $EXACT != 1 ]; then
+ grep $pkg $WNPP_PACKAGES && FOUND=1
+ else
+ grep " $pkg$" $WNPP_PACKAGES && FOUND=1
+ fi
+done
+
+exit $FOUND
diff --git a/scripts/wrap-and-sort b/scripts/wrap-and-sort
new file mode 100755
index 0000000..2e2a53f
--- /dev/null
+++ b/scripts/wrap-and-sort
@@ -0,0 +1,496 @@
+#!/usr/bin/python3
+#
+# Copyright (C) 2010-2018, Benjamin Drung <bdrung@debian.org>
+# 2010, Stefano Rivera <stefanor@ubuntu.com>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+# pylint: disable=invalid-name
+# pylint: enable=invalid-name
+
+import argparse
+import glob
+import operator
+import os
+import re
+import sys
+
+from devscripts.control import (
+ HAS_FULL_RTS_FORMATTING,
+ HAS_RTS_PARSER,
+ Control,
+ wrap_and_sort_formatter,
+)
+
+try:
+ from debian._deb822_repro import LIST_COMMA_SEPARATED_INTERPRETATION
+except ImportError:
+ LIST_COMMA_SEPARATED_INTERPRETATION = object()
+
+
+CONTROL_LIST_FIELDS = (
+ "Breaks",
+ "Build-Conflicts",
+ "Build-Conflicts-Arch",
+ "Build-Conflicts-Indep",
+ "Build-Depends",
+ "Build-Depends-Arch",
+ "Build-Depends-Indep",
+ "Built-Using",
+ "Conflicts",
+ "Depends",
+ "Enhances",
+ "Pre-Depends",
+ "Provides",
+ "Recommends",
+ "Replaces",
+ "Suggests",
+ "Xb-Npp-MimeType",
+)
+
+SUPPORTED_FILES = (
+ "clean",
+ "control",
+ "control*.in",
+ "copyright",
+ "copyright.in",
+ "dirs",
+ "*.dirs",
+ "docs",
+ "*.docs",
+ "examples",
+ "*.examples",
+ "info",
+ "*.info",
+ "install",
+ "*.install",
+ "links",
+ "*.links",
+ "mainscript",
+ "*.maintscript",
+ "manpages",
+ "*.manpages",
+ "tests/control",
+)
+
+
+def erase_and_write(file_ob, data):
+ """When a file is opened via r+ mode, replaces its content with data"""
+ file_ob.seek(0)
+ file_ob.write(data)
+ file_ob.truncate()
+
+
+class WrapAndSortControl(Control):
+ def __init__(self, filename, args):
+ # The Control module supports the RTS parser with python-debian 0.1.43.
+ # However, the `wrap_and_sort_formatter` requires 0.1.44. The command line
+ # option check handles the compatibility check for now.
+ super().__init__(filename, use_rts_parser=args.rts_parser)
+ self.args = args
+ self._formatter = None
+ if args.rts_parser and HAS_FULL_RTS_FORMATTING:
+ max_line_length = args.max_line_length
+ self._formatter = wrap_and_sort_formatter(
+ 1 if args.short_indent else "FIELD_NAME_LENGTH",
+ trailing_separator=args.trailing_comma,
+ immediate_empty_line=args.short_indent,
+ max_line_length_one_liner=0 if args.wrap_always else max_line_length,
+ )
+
+ def wrap_and_sort(self):
+ for paragraph in self.paragraphs:
+ for field in CONTROL_LIST_FIELDS:
+ if field in paragraph:
+ self._wrap_field(paragraph, field, True)
+ if "Uploaders" in paragraph:
+ self._wrap_field(paragraph, "Uploaders", False)
+ if "Architecture" in paragraph:
+ archs = set(paragraph["Architecture"].split())
+ # Sort, with wildcard entries (such as linux-any) first:
+ archs = sorted(archs, key=lambda x: ("any" not in x, x))
+ paragraph["Architecture"] = " ".join(archs)
+
+ if self.args.sort_binary_packages:
+ if self.filename.endswith("tests/control"):
+ return
+ first = self.paragraphs[: 1 + int(self.args.keep_first)]
+ sortable = self.paragraphs[1 + int(self.args.keep_first) :]
+ sort_key = operator.itemgetter("Package")
+ self.paragraphs = first + sorted(sortable, key=sort_key)
+
+ def _wrap_field(self, control, entry, sort):
+ if self.is_roundtrip_safe:
+ self._wrap_field_rts(control, entry, sort)
+ else:
+ self._wrap_field_deb822(control, entry, sort)
+
+ def _wrap_field_rts(self, control, entry, sort):
+ view = control.as_interpreted_dict_view(LIST_COMMA_SEPARATED_INTERPRETATION)
+ with view[entry] as field_content:
+ seen = set()
+ for package_ref in field_content.iter_value_references():
+ value = package_ref.value
+ new_value = " | ".join(x.strip() for x in value.split("|"))
+ if not sort or new_value not in seen:
+ package_ref.value = new_value
+ seen.add(new_value)
+ else:
+ package_ref.remove()
+ if sort:
+ field_content.sort(key=_sort_packages_key)
+ if self._formatter:
+ field_content.value_formatter(self._formatter)
+ field_content.reformat_when_finished()
+
+ def _wrap_field_deb822(self, control, entry, sort):
+ # An empty element is not explicitly disallowed by Policy but known to
+ # break QA tools, so remove any
+ packages = [x.strip() for x in control[entry].split(",") if x.strip()]
+
+ # Sanitize alternative packages. E.g. "a|b |c" -> "a | b | c"
+ packages = [" | ".join(x.strip() for x in p.split("|")) for p in packages]
+
+ if sort:
+ # Remove duplicate entries
+ packages = set(packages)
+ packages = sort_list(packages)
+
+ length = len(entry) + sum(2 + len(package) for package in packages)
+ if self.args.wrap_always or length > self.args.max_line_length:
+ indentation = " "
+ if not self.args.short_indent:
+ indentation *= len(entry) + len(": ")
+ packages_with_indention = [indentation + x for x in packages]
+ packages_with_indention = ",\n".join(packages_with_indention)
+ if self.args.trailing_comma:
+ packages_with_indention += ","
+ if self.args.short_indent:
+ control[entry] = "\n" + packages_with_indention
+ else:
+ control[entry] = packages_with_indention.strip()
+ else:
+ new_value = ", ".join(packages)
+ if self.args.trailing_comma:
+ new_value += ","
+ control[entry] = new_value
+
+ def check_changed(self):
+ """Checks if the content has changed in the control file"""
+ content = self.dump()
+ with open(self.filename, "r", encoding="utf8") as control_file:
+ if content != control_file.read():
+ return True
+ return False
+
+
+class InstallContent:
+ __slots__ = ("content", "comments")
+
+ def __init__(self, content, comments=None):
+ self.content = content
+ self.comments = comments
+
+ def __str__(self):
+ comments = "\n".join(self.comments) + "\n" if self.comments else ""
+ return comments + self.content
+
+ def __eq__(self, other):
+ return self.content == other.content
+
+ def __lt__(self, other):
+ return self.content < other.content
+
+
+class Install:
+ def __init__(self, filename, args):
+ self.content = None
+ self.filename = None
+ self.args = args
+ self.leading_comments = None
+ self.trailing_comments = None
+ self.open(filename)
+
+ def open(self, filename):
+ assert os.path.isfile(filename), f"{filename} does not exist."
+ self.filename = filename
+ comments = []
+ content = []
+ with open(filename, encoding="utf8") as f:
+ # When reading a debhelper file, we want to preserve blocks of comments.
+ #
+ # For the purpose of wrap-and-sort, we generally associate comments with
+ # a line of (non-whitespace) content. Though as special cases, we also
+ # preserve a file starting with a comment (with an empty line before the
+ # first content to distinguish it from a comment to that comment line) as
+ # well as trailing comments (i.e. comments before EOF).
+ for line in f:
+ line = line.strip()
+ if not line:
+ if comments and not content:
+ self.leading_comments = InstallContent("", comments=comments)
+ comments = []
+ continue
+ if line[0] == "#":
+ comments.append(line)
+ continue
+ if comments:
+ content.append(InstallContent(line, comments=comments))
+ comments = []
+ else:
+ content.append(InstallContent(line, comments=None))
+ self.trailing_comments = comments
+ self.content = content
+
+ def save(self):
+ to_write = self._serialize_content()
+
+ with open(self.filename, "r+", encoding="utf8") as install_file:
+ content = install_file.read()
+ if to_write != content:
+ if not self.args.dry_run:
+ erase_and_write(install_file, to_write)
+ return True
+ return False
+
+ def _serialize_content(self):
+ elements = []
+ if self.leading_comments:
+ elements.append(str(self.leading_comments))
+ elements.extend(str(x) for x in self.content)
+ if self.trailing_comments:
+ # Add a space between the last content and the trailing comments
+ # for readability
+ elements.append("\n" + "\n".join(self.trailing_comments))
+ return "\n".join(elements) + "\n"
+
+ def sort(self):
+ self.content = sorted(self.content)
+
+
+def remove_trailing_whitespaces(filename, args):
+ assert os.path.isfile(filename), f"{filename} does not exist."
+ with open(filename, "br+") as file_object:
+ content = file_object.read()
+ if not content:
+ return True
+ new_content = content.strip() + b"\n"
+ new_content = b"\n".join([line.rstrip() for line in new_content.split(b"\n")])
+ if new_content != content:
+ if not args.dry_run:
+ erase_and_write(file_object, new_content)
+ return True
+ return False
+
+
+def sort_list(unsorted_list):
+ return sorted(unsorted_list, key=_sort_packages_key)
+
+
+def _sort_packages_key(package):
+ # Sort dependencies starting with a "real" package name before ones starting
+ # with a substvar
+ return 0 if re.match("[a-z0-9]", package) else 1, package
+
+
+def wrap_and_sort(args):
+ modified_files = []
+ control_files = [f for f in args.files if re.search("/control[^/]*$", f)]
+ for control_file in control_files:
+ if args.verbose:
+ print(control_file)
+ control = WrapAndSortControl(control_file, args)
+ if args.cleanup:
+ control.strip_trailing_whitespace_on_save = True
+ control.wrap_and_sort()
+ if control.check_changed():
+ if not args.dry_run:
+ control.save()
+ modified_files.append(control_file)
+
+ copyright_files = [f for f in args.files if re.search("/copyright[^/]*$", f)]
+ for copyright_file in copyright_files:
+ if args.verbose:
+ print(copyright_file)
+ if remove_trailing_whitespaces(copyright_file, args):
+ modified_files.append(copyright_file)
+
+ pattern = "(dirs|docs|examples|info|install|links|maintscript|manpages)$"
+ install_files = [f for f in args.files if re.search(pattern, f)]
+ for install_file in sorted(install_files):
+ if args.verbose:
+ print(install_file)
+ install = Install(install_file, args)
+ install.sort()
+ if install.save():
+ modified_files.append(install_file)
+
+ return modified_files
+
+
+def get_files(debian_directory):
+ """Returns a list of files that should be wrapped and sorted."""
+ files = []
+ for supported_files in SUPPORTED_FILES:
+ file_pattern = os.path.join(debian_directory, supported_files)
+ files.extend(
+ file_name
+ for file_name in glob.glob(file_pattern)
+ if not os.access(file_name, os.X_OK)
+ )
+ return files
+
+
+def main():
+ script_name = os.path.basename(sys.argv[0])
+ epilog = f"See {script_name}(1) for more info."
+ parser = argparse.ArgumentParser(epilog=epilog)
+
+ # Remember to keep doc/wrap-and-sort.1 updated!
+ parser.add_argument(
+ "-a",
+ "--wrap-always",
+ action="store_true",
+ default=False,
+ help="wrap lists even if they do not exceed the line length limit",
+ )
+ parser.add_argument(
+ "-s",
+ "--short-indent",
+ dest="short_indent",
+ help="only indent wrapped lines by one space"
+ " (default is in-line with the field name)",
+ action="store_true",
+ default=False,
+ )
+ parser.add_argument(
+ "-b",
+ "--sort-binary-packages",
+ help="Sort binary package paragraphs by name",
+ dest="sort_binary_packages",
+ action="store_true",
+ default=False,
+ )
+ parser.add_argument(
+ "-k",
+ "--keep-first",
+ help="When sorting binary package paragraphs, leave the first one at the top."
+ " Unqualified debhelper configuration files are applied to the first package.",
+ dest="keep_first",
+ action="store_true",
+ default=False,
+ )
+ parser.add_argument(
+ "-n",
+ "--no-cleanup",
+ help="do not remove trailing whitespaces",
+ dest="cleanup",
+ action="store_false",
+ default=True,
+ )
+ parser.add_argument(
+ "-t",
+ "--trailing-comma",
+ help="add trailing comma",
+ dest="trailing_comma",
+ action="store_true",
+ default=False,
+ )
+ parser.add_argument(
+ "-d",
+ "--debian-directory",
+ dest="debian_directory",
+ help="location of the 'debian' directory (default: ./debian)",
+ metavar="PATH",
+ default="debian",
+ )
+ parser.add_argument(
+ "-f",
+ "--file",
+ metavar="FILE",
+ dest="files",
+ action="append",
+ default=[],
+ help="Wrap and sort only the specified file.",
+ )
+ parser.add_argument(
+ "-v",
+ "--verbose",
+ help="print all files that are touched",
+ dest="verbose",
+ action="store_true",
+ default=False,
+ )
+ parser.add_argument(
+ "--max-line-length",
+ type=int,
+ default=79,
+ help="set maximum allowed line length before wrapping (default: %(default)i)",
+ )
+ parser.add_argument(
+ "-N",
+ "--dry-run",
+ dest="dry_run",
+ action="store_true",
+ default=False,
+ help="do not modify any file, instead only print the files"
+ " that would be modified",
+ )
+ parser.add_argument(
+ "--experimental-rts-parser",
+ dest="rts_parser",
+ action="store_true",
+ default=False,
+ help="Use the round-safe parser, which can preserve most comments. The option"
+ " is here to opt-in to using while the feature matures. Some options are not"
+ " available with this feature. Note this option will eventually be removed."
+ " Please do not include it in scripts / functionality that requires backwards"
+ " compatibility",
+ )
+
+ args = parser.parse_args()
+ use_rts_parser = HAS_RTS_PARSER
+ if use_rts_parser and not HAS_FULL_RTS_FORMATTING:
+ # Cases where we might have some but not full support.
+ if args.short_indent or not args.wrap_always or not args.trailing_comma:
+ use_rts_parser = False
+ setattr(args, "rts_parser", use_rts_parser)
+
+ if not os.path.isdir(args.debian_directory):
+ parser.error(
+ f'Debian directory not found, expecting "{args.debian_directory}".'
+ )
+
+ not_found = [f for f in args.files if not os.path.isfile(f)]
+ if not_found:
+ parser.error(f"Specified files not found: {', '.join(not_found)}")
+
+ if not args.files:
+ args.files = get_files(args.debian_directory)
+
+ modified_files = wrap_and_sort(args)
+
+ # Only report at the end, to avoid potential clash with --verbose
+ if modified_files and (args.verbose or args.dry_run):
+ if args.dry_run:
+ header = "--- Dry run, these files would be modified ---"
+ else:
+ header = "--- Modified files ---"
+ print(header)
+ print("\n".join(modified_files))
+ elif args.verbose:
+ print("--- No file needs modification ---")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/templates/README.mk-build-deps b/templates/README.mk-build-deps
new file mode 100644
index 0000000..bc7dae2
--- /dev/null
+++ b/templates/README.mk-build-deps
@@ -0,0 +1,15 @@
+@packagename@ for Debian
+
+
+This package has the sole purpose of installing packages required for
+building the Debian package indicated by its name; it does so by
+depending on these packages:
+
+@depends@
+
+It was generated by the mk-build-deps program from the information in
+the Build-Depends field(s) of the source package.
+
+@packagename@ can be safely removed after the package it was created for
+is built. If that breaks anything, a dependency is missing in the
+package's Depends field.
diff --git a/test/Makefile b/test/Makefile
new file mode 100644
index 0000000..74c40b3
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,49 @@
+
+OUR_TESTS= \
+ perl \
+ annotate-output \
+ checkbashisms \
+ dd-list \
+ debchange \
+ debdiff \
+ debrepro \
+ debsign \
+ mergechanges \
+ mk-origtargz \
+ package_lifecycle \
+ sadt \
+ uscan \
+ uscan_ftp \
+ uscan_git \
+ uscan_svn \
+ uscan_mangle \
+ uscan_group \
+ perltidy \
+ wrap-and-sort \
+
+# Tests that must run as root, and alter the state of the system by
+# adding/removing packages
+DESTRUCTIVE_TESTS = \
+ debi \
+
+# unset some variables that might affect tests
+undefine DEB_CHECK_COMMAND
+
+test: $(foreach i,$(OUR_TESTS),test_$(i).test)
+
+destructive-test: $(foreach i,$(DESTRUCTIVE_TESTS),test_$(i).test)
+
+%.test: %
+ ./$<
+
+test-installed: $(foreach i,$(OUR_TESTS),test_$(i).test_installed)
+
+destructive-test-installed: $(foreach i,$(DESTRUCTIVE_TESTS),test_$(i).test_installed)
+
+%.test_installed: %
+ ./$< --installed
+
+online-test:
+ ./test_uscan_online
+
+.PHONY: test test-installed online-test destructive-test
diff --git a/test/bashisms/531327.sh b/test/bashisms/531327.sh
new file mode 100644
index 0000000..8dcc058
--- /dev/null
+++ b/test/bashisms/531327.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+foo() {}
+
+foo \
+source something
diff --git a/test/bashisms/535368.mk b/test/bashisms/535368.mk
new file mode 100644
index 0000000..adba007
--- /dev/null
+++ b/test/bashisms/535368.mk
@@ -0,0 +1,6 @@
+#!/usr/bin/make -f
+
+foo:
+ if [ "$$(< $(DEBIAN)/foo md5sum)" != "$$(cat $(DEBIAN)/foo.md5)" ] ; then \
+ echo moo; \
+ fi
diff --git a/test/bashisms/808271.sh b/test/bashisms/808271.sh
new file mode 100644
index 0000000..0789d7e
--- /dev/null
+++ b/test/bashisms/808271.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if type which; then
+ echo "use which"
+fi
+
+if ! type which; then
+ echo "well, idk"
+fi
diff --git a/test/bashisms/808271.sh.out b/test/bashisms/808271.sh.out
new file mode 100644
index 0000000..6cb8156
--- /dev/null
+++ b/test/bashisms/808271.sh.out
@@ -0,0 +1,4 @@
+possible bashism in bashisms/808271.sh line 3 (type):
+if type which; then
+possible bashism in bashisms/808271.sh line 7 (type):
+if ! type which; then
diff --git a/test/bashisms/arith.sh b/test/bashisms/arith.sh
new file mode 100644
index 0000000..2cbe860
--- /dev/null
+++ b/test/bashisms/arith.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+metric=0
+echo $((metric=metric+1))
+
+m=0
+n=2
+echo $((n-m++)) # BASHISM
+echo $((++m)) # BASHISM
+echo $(( m-- )) # BASHISM
+echo $((--m)) # BASHISM
+
+foo_bar=0
+echo $((foo_bar++)) # BASHISM
+echo $((foo_bar=foo_bar*2))
+echo $((foo_bar*3/6))
+
+echo $((2*n++)) # BASHISM
+
+echo $(($n*n++)) # BASHISM
+
+echo $((3**2)) # BASHISM
diff --git a/test/bashisms/arith.sh.out b/test/bashisms/arith.sh.out
new file mode 100644
index 0000000..dae4b40
--- /dev/null
+++ b/test/bashisms/arith.sh.out
@@ -0,0 +1,16 @@
+possible bashism in bashisms/arith.sh line 7 ('$((n++))' should be '$n; $((n=n+1))'):
+echo $((n-m++)) # BASHISM
+possible bashism in bashisms/arith.sh line 8 ('$((++n))' should be '$((n=n+1))'):
+echo $((++m)) # BASHISM
+possible bashism in bashisms/arith.sh line 9 ('$((n--))' should be '$n; $((n=n-1))'):
+echo $(( m-- )) # BASHISM
+possible bashism in bashisms/arith.sh line 10 ('$((--n))' should be '$((n=n-1))'):
+echo $((--m)) # BASHISM
+possible bashism in bashisms/arith.sh line 13 ('$((n++))' should be '$n; $((n=n+1))'):
+echo $((foo_bar++)) # BASHISM
+possible bashism in bashisms/arith.sh line 17 ('$((n++))' should be '$n; $((n=n+1))'):
+echo $((2*n++)) # BASHISM
+possible bashism in bashisms/arith.sh line 19 ('$((n++))' should be '$n; $((n=n+1))'):
+echo $(($n*n++)) # BASHISM
+possible bashism in bashisms/arith.sh line 21 (exponentiation is not POSIX):
+echo $((3**2)) # BASHISM
diff --git a/test/bashisms/array-expansion.sh b/test/bashisms/array-expansion.sh
new file mode 100644
index 0000000..ca2b57a
--- /dev/null
+++ b/test/bashisms/array-expansion.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+# This is a TO DO, but irrelevant to this test case:
+foo=(foo bar moo BASH ISM)
+
+n=1
+
+echo BASHISM ${foo[1]%r}
+echo BASHISM ${foo[$n]%r}
+echo BASHISM ${foo[*]%o}
+echo BASHISM ${foo[@]%o}
+
+echo BASHISM ${foo[1]%%r}
+echo BASHISM ${foo[$n]%%r}
+echo BASHISM ${foo[*]%%o}
+echo BASHISM ${foo[@]%%o}
+
+echo BASHISM ${foo[1]#*a}
+echo BASHISM ${foo[$n]#*a}
+echo BASHISM ${foo[*]#*o}
+echo BASHISM ${foo[@]#*o}
+
+echo BASHISM ${foo[1]##*a}
+echo BASHISM ${foo[$n]##*a}
+echo BASHISM ${foo[*]##*o}
+echo BASHISM ${foo[@]##*o}
+
+echo BASHISM ${#foo[1]}
+echo BASHISM ${#foo[$n]}
+echo BASHISM ${#foo[*]}
+echo BASHISM ${#foo[@]}
+
+# Technically, there are two bashisms here, but I'm happy if it at
+# least matches one. The regexes become more complex without real gain
+# otherwise. (hence the "BASH ISMS", with the extra space)
+
+echo BASHISM BASH ISMS ${foo[1]^*a}
+echo BASHISM BASH ISMS ${foo[$n]^*a}
+echo BASHISM BASH ISMS ${foo[*]^*o}
+echo BASHISM BASH ISMS ${foo[@]^*o}
+
+echo BASHISM BASH ISMS ${foo[1]^^*a}
+echo BASHISM BASH ISMS ${foo[$n]^^*a}
+echo BASHISM BASH ISMS ${foo[*]^^*o}
+echo BASHISM BASH ISMS ${foo[@]^^*o}
+
+echo BASHISM BASH ISMS ${foo[1],*a}
+echo BASHISM BASH ISMS ${foo[$n],*a}
+echo BASHISM BASH ISMS ${foo[*],*a}
+echo BASHISM BASH ISMS ${foo[@],*a}
+
+echo BASHISM BASH ISMS ${foo[1],,*a}
+echo BASHISM BASH ISMS ${foo[$n],,*a}
+echo BASHISM BASH ISMS ${foo[*],,*a}
+echo BASHISM BASH ISMS ${foo[@],,*a}
+
+echo BASHISM BASH ISMS ${foo[1]/a/R}
+echo BASHISM BASH ISMS ${foo[$n]/a/R}
+echo BASHISM BASH ISMS ${foo[*]/a/R}
+echo BASHISM BASH ISMS ${foo[@]/a/R}
diff --git a/test/bashisms/array-expansion.sh.out b/test/bashisms/array-expansion.sh.out
new file mode 100644
index 0000000..d14bea0
--- /dev/null
+++ b/test/bashisms/array-expansion.sh.out
@@ -0,0 +1,80 @@
+possible bashism in bashisms/array-expansion.sh line 8 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[1]%r}
+possible bashism in bashisms/array-expansion.sh line 9 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[$n]%r}
+possible bashism in bashisms/array-expansion.sh line 10 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[*]%o}
+possible bashism in bashisms/array-expansion.sh line 11 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[@]%o}
+possible bashism in bashisms/array-expansion.sh line 13 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[1]%%r}
+possible bashism in bashisms/array-expansion.sh line 14 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[$n]%%r}
+possible bashism in bashisms/array-expansion.sh line 15 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[*]%%o}
+possible bashism in bashisms/array-expansion.sh line 16 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[@]%%o}
+possible bashism in bashisms/array-expansion.sh line 18 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[1]#*a}
+possible bashism in bashisms/array-expansion.sh line 19 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[$n]#*a}
+possible bashism in bashisms/array-expansion.sh line 20 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[*]#*o}
+possible bashism in bashisms/array-expansion.sh line 21 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[@]#*o}
+possible bashism in bashisms/array-expansion.sh line 23 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[1]##*a}
+possible bashism in bashisms/array-expansion.sh line 24 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[$n]##*a}
+possible bashism in bashisms/array-expansion.sh line 25 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[*]##*o}
+possible bashism in bashisms/array-expansion.sh line 26 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${foo[@]##*o}
+possible bashism in bashisms/array-expansion.sh line 28 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${#foo[1]}
+possible bashism in bashisms/array-expansion.sh line 29 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${#foo[$n]}
+possible bashism in bashisms/array-expansion.sh line 30 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${#foo[*]}
+possible bashism in bashisms/array-expansion.sh line 31 (bash arrays, ${name[0|*|@]}):
+echo BASHISM ${#foo[@]}
+possible bashism in bashisms/array-expansion.sh line 37 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[1]^*a}
+possible bashism in bashisms/array-expansion.sh line 38 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[$n]^*a}
+possible bashism in bashisms/array-expansion.sh line 39 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[*]^*o}
+possible bashism in bashisms/array-expansion.sh line 40 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[@]^*o}
+possible bashism in bashisms/array-expansion.sh line 42 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[1]^^*a}
+possible bashism in bashisms/array-expansion.sh line 43 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[$n]^^*a}
+possible bashism in bashisms/array-expansion.sh line 44 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[*]^^*o}
+possible bashism in bashisms/array-expansion.sh line 45 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[@]^^*o}
+possible bashism in bashisms/array-expansion.sh line 47 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[1],*a}
+possible bashism in bashisms/array-expansion.sh line 48 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[$n],*a}
+possible bashism in bashisms/array-expansion.sh line 49 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[*],*a}
+possible bashism in bashisms/array-expansion.sh line 50 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[@],*a}
+possible bashism in bashisms/array-expansion.sh line 52 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[1],,*a}
+possible bashism in bashisms/array-expansion.sh line 53 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[$n],,*a}
+possible bashism in bashisms/array-expansion.sh line 54 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[*],,*a}
+possible bashism in bashisms/array-expansion.sh line 55 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[@],,*a}
+possible bashism in bashisms/array-expansion.sh line 57 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[1]/a/R}
+possible bashism in bashisms/array-expansion.sh line 58 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[$n]/a/R}
+possible bashism in bashisms/array-expansion.sh line 59 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[*]/a/R}
+possible bashism in bashisms/array-expansion.sh line 60 (bash arrays, ${name[0|*|@]}):
+echo BASHISM BASH ISMS ${foo[@]/a/R}
diff --git a/test/bashisms/ash-setvar.sh b/test/bashisms/ash-setvar.sh
new file mode 100644
index 0000000..c0ae403
--- /dev/null
+++ b/test/bashisms/ash-setvar.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+setvar foo bar # BASHISM
+[ bar = "$foo" ]
diff --git a/test/bashisms/ash-setvar.sh.out b/test/bashisms/ash-setvar.sh.out
new file mode 100644
index 0000000..121a65c
--- /dev/null
+++ b/test/bashisms/ash-setvar.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/ash-setvar.sh line 3 (setvar 'foo' 'bar' should be eval 'foo="'"$bar"'"'):
+setvar foo bar # BASHISM
diff --git a/test/bashisms/basic-bash-override.mk b/test/bashisms/basic-bash-override.mk
new file mode 100644
index 0000000..7904a5e
--- /dev/null
+++ b/test/bashisms/basic-bash-override.mk
@@ -0,0 +1,6 @@
+#!/usr/bin/make -f
+
+ override SHELL := bash
+
+test:
+ @echo -e foo
diff --git a/test/bashisms/basic-bash.mk b/test/bashisms/basic-bash.mk
new file mode 100644
index 0000000..7a16131
--- /dev/null
+++ b/test/bashisms/basic-bash.mk
@@ -0,0 +1,6 @@
+#!/usr/bin/make -f
+
+SHELL := bash
+
+test:
+ echo -e foo
diff --git a/test/bashisms/basic.mk b/test/bashisms/basic.mk
new file mode 100644
index 0000000..31d59a2
--- /dev/null
+++ b/test/bashisms/basic.mk
@@ -0,0 +1,21 @@
+#!/usr/bin/make -f
+
+# bug:
+overrideSHELL := bash
+
+test:
+ -echo -e "foo BASHISM"
+ @echo -e "bar BASHISM"
+ @-echo -e "bar BASHISM" && false
+ -@echo -e "bar BASHISM" && false
+ true
+
+dirs:
+source diff:
+source diff.gz::
+source file-stamp:
+caller %.so:
+ :
+
+foo: $(shell echo dir/BASHISM/{foo,bar})
+ :
diff --git a/test/bashisms/basic.mk.out b/test/bashisms/basic.mk.out
new file mode 100644
index 0000000..1fae795
--- /dev/null
+++ b/test/bashisms/basic.mk.out
@@ -0,0 +1,10 @@
+possible bashism in bashisms/basic.mk line 7 (echo -e):
+ -echo -e "foo BASHISM"
+possible bashism in bashisms/basic.mk line 8 (echo -e):
+ @echo -e "bar BASHISM"
+possible bashism in bashisms/basic.mk line 9 (echo -e):
+ @-echo -e "bar BASHISM" && false
+possible bashism in bashisms/basic.mk line 10 (echo -e):
+ -@echo -e "bar BASHISM" && false
+possible bashism in bashisms/basic.mk line 20 (brace expansion):
+foo: $(shell echo dir/BASHISM/{foo,bar})
diff --git a/test/bashisms/brace-expansion.sh b/test/bashisms/brace-expansion.sh
new file mode 100644
index 0000000..c34ea21
--- /dev/null
+++ b/test/bashisms/brace-expansion.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+echo BASHISM{1..10}
+echo BASHISM{1..10..2}
+echo BASHISM{a..z}
+echo BASHISM{Z..a}
+echo BASHISM{a..z..2}
+echo {a.._}
+echo {a..9}
diff --git a/test/bashisms/brace-expansion.sh.out b/test/bashisms/brace-expansion.sh.out
new file mode 100644
index 0000000..843dc32
--- /dev/null
+++ b/test/bashisms/brace-expansion.sh.out
@@ -0,0 +1,10 @@
+possible bashism in bashisms/brace-expansion.sh line 3 (brace expansion, {a..b[..c]}should be $(seq a [c] b)):
+echo BASHISM{1..10}
+possible bashism in bashisms/brace-expansion.sh line 4 (brace expansion, {a..b[..c]}should be $(seq a [c] b)):
+echo BASHISM{1..10..2}
+possible bashism in bashisms/brace-expansion.sh line 5 (brace expansion):
+echo BASHISM{a..z}
+possible bashism in bashisms/brace-expansion.sh line 6 (brace expansion):
+echo BASHISM{Z..a}
+possible bashism in bashisms/brace-expansion.sh line 7 (brace expansion):
+echo BASHISM{a..z..2}
diff --git a/test/bashisms/case-modification.sh b/test/bashisms/case-modification.sh
new file mode 100644
index 0000000..d163e6a
--- /dev/null
+++ b/test/bashisms/case-modification.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+foo=foo
+bar=BAR
+
+echo BASHISM: ${foo^f}
+echo BASHISM: ${foo^^o}
+echo BASHISM: ${bar,B}
+echo BASHISM: ${bar,,R}
+
+echo BASHISM: ${foo^}
+echo BASHISM: ${foo^^}
+echo BASHISM: ${bar,}
+echo BASHISM: ${bar,,}
+
+echo BASHISM: ${@^}
+echo BASHISM: ${*^^}
+echo BASHISM: ${@,}
+echo BASHISM: ${*,,}
diff --git a/test/bashisms/case-modification.sh.out b/test/bashisms/case-modification.sh.out
new file mode 100644
index 0000000..d60157f
--- /dev/null
+++ b/test/bashisms/case-modification.sh.out
@@ -0,0 +1,24 @@
+possible bashism in bashisms/case-modification.sh line 6 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${foo^f}
+possible bashism in bashisms/case-modification.sh line 7 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${foo^^o}
+possible bashism in bashisms/case-modification.sh line 8 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${bar,B}
+possible bashism in bashisms/case-modification.sh line 9 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${bar,,R}
+possible bashism in bashisms/case-modification.sh line 11 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${foo^}
+possible bashism in bashisms/case-modification.sh line 12 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${foo^^}
+possible bashism in bashisms/case-modification.sh line 13 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${bar,}
+possible bashism in bashisms/case-modification.sh line 14 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${bar,,}
+possible bashism in bashisms/case-modification.sh line 16 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${@^}
+possible bashism in bashisms/case-modification.sh line 17 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${*^^}
+possible bashism in bashisms/case-modification.sh line 18 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${@,}
+possible bashism in bashisms/case-modification.sh line 19 (${parm,[,][pat]} or ${parm^[^][pat]}):
+echo BASHISM: ${*,,}
diff --git a/test/bashisms/command.sh b/test/bashisms/command.sh
new file mode 100644
index 0000000..bdfb8c6
--- /dev/null
+++ b/test/bashisms/command.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+command test
+command -p test
+command -v test
+command -V test
+command -p test
+command -p -v test
+command -pv test
+command -p -v -a test # BASHISM
+command -p -a -v test # BASHISM
+command -pa test # BASHISM
+command -ap test # BASHISM
+command -p -a test # BASHISM
+command -pV -a test # BASHISM
+command -p test
diff --git a/test/bashisms/command.sh.out b/test/bashisms/command.sh.out
new file mode 100644
index 0000000..1e1e111
--- /dev/null
+++ b/test/bashisms/command.sh.out
@@ -0,0 +1,12 @@
+possible bashism in bashisms/command.sh line 10 ('command' with option other than -p, -v or -V):
+command -p -v -a test # BASHISM
+possible bashism in bashisms/command.sh line 11 ('command' with option other than -p, -v or -V):
+command -p -a -v test # BASHISM
+possible bashism in bashisms/command.sh line 12 ('command' with option other than -p, -v or -V):
+command -pa test # BASHISM
+possible bashism in bashisms/command.sh line 13 ('command' with option other than -p, -v or -V):
+command -ap test # BASHISM
+possible bashism in bashisms/command.sh line 14 ('command' with option other than -p, -v or -V):
+command -p -a test # BASHISM
+possible bashism in bashisms/command.sh line 15 ('command' with option other than -p, -v or -V):
+command -pV -a test # BASHISM
diff --git a/test/bashisms/comments-in-quoted-strings1.sh b/test/bashisms/comments-in-quoted-strings1.sh
new file mode 100644
index 0000000..36d4bd8
--- /dev/null
+++ b/test/bashisms/comments-in-quoted-strings1.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+echo 's#/##g
+s# #/#'
+
+echo '
+' # foo() {} "
diff --git a/test/bashisms/comments-in-quoted-strings2.sh b/test/bashisms/comments-in-quoted-strings2.sh
new file mode 100644
index 0000000..6c9ef0e
--- /dev/null
+++ b/test/bashisms/comments-in-quoted-strings2.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+echo "
+\" # " # foo() {} '
diff --git a/test/bashisms/comments-parsing-fns.sh b/test/bashisms/comments-parsing-fns.sh
new file mode 100644
index 0000000..933caee
--- /dev/null
+++ b/test/bashisms/comments-parsing-fns.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo $# ; echo -e BASHISM
diff --git a/test/bashisms/comments-parsing-fns.sh.out b/test/bashisms/comments-parsing-fns.sh.out
new file mode 100644
index 0000000..e0a8f6b
--- /dev/null
+++ b/test/bashisms/comments-parsing-fns.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/comments-parsing-fns.sh line 3 (echo -e):
+echo $# ; echo -e BASHISM
diff --git a/test/bashisms/coproc.sh b/test/bashisms/coproc.sh
new file mode 100644
index 0000000..6d6edcc
--- /dev/null
+++ b/test/bashisms/coproc.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+coproc true # BASHISM
diff --git a/test/bashisms/coproc.sh.out b/test/bashisms/coproc.sh.out
new file mode 100644
index 0000000..63b4caa
--- /dev/null
+++ b/test/bashisms/coproc.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/coproc.sh line 3 (coproc):
+coproc true # BASHISM
diff --git a/test/bashisms/dynamic-length.sh b/test/bashisms/dynamic-length.sh
new file mode 100644
index 0000000..fa76729
--- /dev/null
+++ b/test/bashisms/dynamic-length.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+len=1
+f=foo
+
+echo "${f:1}" # BASHISM
+echo "${f:$len}" # BASHISM
+echo "${f:$len$len}" # BASHISM
+echo "${f:${len}}" # BASHISM
diff --git a/test/bashisms/dynamic-length.sh.out b/test/bashisms/dynamic-length.sh.out
new file mode 100644
index 0000000..ffd0b13
--- /dev/null
+++ b/test/bashisms/dynamic-length.sh.out
@@ -0,0 +1,8 @@
+possible bashism in bashisms/dynamic-length.sh line 6 (${foo:3[:1]}):
+echo "${f:1}" # BASHISM
+possible bashism in bashisms/dynamic-length.sh line 7 (${foo:3[:1]}):
+echo "${f:$len}" # BASHISM
+possible bashism in bashisms/dynamic-length.sh line 8 (${foo:3[:1]}):
+echo "${f:$len$len}" # BASHISM
+possible bashism in bashisms/dynamic-length.sh line 9 (${foo:3[:1]}):
+echo "${f:${len}}" # BASHISM
diff --git a/test/bashisms/exit-code.sh b/test/bashisms/exit-code.sh
new file mode 100644
index 0000000..48b9fcd
--- /dev/null
+++ b/test/bashisms/exit-code.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# http://bugs.debian.org/687450
+exit -- 2 # BASHISM
+exit 255
+exit 256 # BASHISM
+exit -1 # BASHISM
diff --git a/test/bashisms/exit-code.sh.out b/test/bashisms/exit-code.sh.out
new file mode 100644
index 0000000..a1b0870
--- /dev/null
+++ b/test/bashisms/exit-code.sh.out
@@ -0,0 +1,6 @@
+possible bashism in bashisms/exit-code.sh line 4 ('exit --' should be 'exit' (idem for return)):
+exit -- 2 # BASHISM
+possible bashism in bashisms/exit-code.sh line 6 (exit|return status code greater than 255):
+exit 256 # BASHISM
+possible bashism in bashisms/exit-code.sh line 7 (exit|return with negative status code):
+exit -1 # BASHISM
diff --git a/test/bashisms/fail2ban.sh b/test/bashisms/fail2ban.sh
new file mode 100644
index 0000000..1ab61f8
--- /dev/null
+++ b/test/bashisms/fail2ban.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+eval $_INITSCRIPT force-reload ${HIDEOUTPUT:+\>/dev/null 2\>&1}
diff --git a/test/bashisms/fps.sh b/test/bashisms/fps.sh
new file mode 100644
index 0000000..b1a619e
--- /dev/null
+++ b/test/bashisms/fps.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+echo -e "BASHISM" \
+ "something else \n"
+
+#exec ${loclibdir}/tkcon.tcl \
+# -eval "source ${loclibdir}/console.tcl" \
+# -slave "package require Tk; set argc $#; set argv [list $*]; \
+# source ${loclibdir}/xcircuit.tcl"
diff --git a/test/bashisms/fps.sh.out b/test/bashisms/fps.sh.out
new file mode 100644
index 0000000..8f4b457
--- /dev/null
+++ b/test/bashisms/fps.sh.out
@@ -0,0 +1,3 @@
+possible bashism in bashisms/fps.sh line 4 (echo -e):
+echo -e "BASHISM" \
+ "something else \n"
diff --git a/test/bashisms/functions.sh b/test/bashisms/functions.sh
new file mode 100644
index 0000000..18adf3d
--- /dev/null
+++ b/test/bashisms/functions.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+foo() {
+ :
+}
+
+_all_good () {
+ :
+}
+
+_all_good101_ ( ) {
+ :
+}
+
+function BASHISM() {
+ :
+}
+
+function BASHISM {
+ :
+}
+
+function BASHISM {
+ echo foo
+} &>/dev/null # BASHISM
+
+,() { # BASHISM
+ :
+}
+
+function foo:bar:BASHISM { # BASHISMS
+ :
+}
+
+function foo-bar-BASHISM() { # BASHISMS
+ :
+}
+
+foo-bar-BASHISM ( ) {
+ :
+}
+
+_ () {
+ :
+}
+
+function _ { #BASHISM
+ :
+}
+
+=() { #BASHISM
+ :
+}
+
+function BASHISM=() { #BASHISMS
+ :
+}
+
+function BASHISM= { #BASHISMS
+ :
+}
+
+# This doesn't work:
+#foo=() {
+# :
+#}
diff --git a/test/bashisms/functions.sh.out b/test/bashisms/functions.sh.out
new file mode 100644
index 0000000..61a4c4d
--- /dev/null
+++ b/test/bashisms/functions.sh.out
@@ -0,0 +1,32 @@
+possible bashism in bashisms/functions.sh line 15 ('function' is useless):
+function BASHISM() {
+possible bashism in bashisms/functions.sh line 19 ('function' is useless):
+function BASHISM {
+possible bashism in bashisms/functions.sh line 23 ('function' is useless):
+function BASHISM {
+possible bashism in bashisms/functions.sh line 25 (should be >word 2>&1):
+} &>/dev/null # BASHISM
+possible bashism in bashisms/functions.sh line 27 (function names should only contain [a-z0-9_]):
+,() { # BASHISM
+possible bashism in bashisms/functions.sh line 31 (function names should only contain [a-z0-9_]):
+function foo:bar:BASHISM { # BASHISMS
+possible bashism in bashisms/functions.sh line 31 ('function' is useless):
+function foo:bar:BASHISM { # BASHISMS
+possible bashism in bashisms/functions.sh line 35 (function names should only contain [a-z0-9_]):
+function foo-bar-BASHISM() { # BASHISMS
+possible bashism in bashisms/functions.sh line 35 ('function' is useless):
+function foo-bar-BASHISM() { # BASHISMS
+possible bashism in bashisms/functions.sh line 39 (function names should only contain [a-z0-9_]):
+foo-bar-BASHISM ( ) {
+possible bashism in bashisms/functions.sh line 47 ('function' is useless):
+function _ { #BASHISM
+possible bashism in bashisms/functions.sh line 51 (function names should only contain [a-z0-9_]):
+=() { #BASHISM
+possible bashism in bashisms/functions.sh line 55 (function names should only contain [a-z0-9_]):
+function BASHISM=() { #BASHISMS
+possible bashism in bashisms/functions.sh line 55 ('function' is useless):
+function BASHISM=() { #BASHISMS
+possible bashism in bashisms/functions.sh line 59 (function names should only contain [a-z0-9_]):
+function BASHISM= { #BASHISMS
+possible bashism in bashisms/functions.sh line 59 ('function' is useless):
+function BASHISM= { #BASHISMS
diff --git a/test/bashisms/gettext.sh b/test/bashisms/gettext.sh
new file mode 100644
index 0000000..ebaec32
--- /dev/null
+++ b/test/bashisms/gettext.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+echo $"hello world -- BASHISM"
+
+echo "foo ' bar moo'$"
diff --git a/test/bashisms/gettext.sh.out b/test/bashisms/gettext.sh.out
new file mode 100644
index 0000000..a76578e
--- /dev/null
+++ b/test/bashisms/gettext.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/gettext.sh line 3 ($"foo" should be eval_gettext "foo"):
+echo $"hello world -- BASHISM"
diff --git a/test/bashisms/glob-ignore.sh b/test/bashisms/glob-ignore.sh
new file mode 100644
index 0000000..0c9cd9a
--- /dev/null
+++ b/test/bashisms/glob-ignore.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+GLOBIGNORE="run-tests.sh:BASHISM"
+echo *.sh | grep -q run-tests.sh || echo meh
diff --git a/test/bashisms/glob-ignore.sh.out b/test/bashisms/glob-ignore.sh.out
new file mode 100644
index 0000000..4688c7c
--- /dev/null
+++ b/test/bashisms/glob-ignore.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/glob-ignore.sh line 3 (GLOBIGNORE=):
+GLOBIGNORE="run-tests.sh:BASHISM"
diff --git a/test/bashisms/hash.sh b/test/bashisms/hash.sh
new file mode 100644
index 0000000..74fc7f4
--- /dev/null
+++ b/test/bashisms/hash.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+: BASHISM; hash
+hash which # BASHISM
+hash -r # BASHISM
diff --git a/test/bashisms/hash.sh.out b/test/bashisms/hash.sh.out
new file mode 100644
index 0000000..c9136bb
--- /dev/null
+++ b/test/bashisms/hash.sh.out
@@ -0,0 +1,6 @@
+possible bashism in bashisms/hash.sh line 3 (hash):
+: BASHISM; hash
+possible bashism in bashisms/hash.sh line 4 (hash):
+hash which # BASHISM
+possible bashism in bashisms/hash.sh line 5 (hash):
+hash -r # BASHISM
diff --git a/test/bashisms/heredoc-with-dash.sh b/test/bashisms/heredoc-with-dash.sh
new file mode 100644
index 0000000..9200886
--- /dev/null
+++ b/test/bashisms/heredoc-with-dash.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+cat << -EOF1- 1>&2
+CLEAN
+-EOF1-
+
+cat << -EOF2 1>&2
+CLEAN
+-EOF2
+
+cat <<-EOF3 1>&2
+CLEAN
+ EOF3
+
+cat <<- EOF4 1>&2
+CLEAN
+ EOF4
+
+foo=bar
+
+cat << '-EOF1-' 1>&2
+CLEAN $foo
+-EOF1-
+
+cat << '-EOF2' 1>&2
+CLEAN $foo
+-EOF2
+
+cat <<-'EOF3' 1>&2
+CLEAN $foo
+ EOF3
+
+cat <<- 'EOF4' 1>&2
+CLEAN $foo
+ EOF4
diff --git a/test/bashisms/heredoc-with-others.sh b/test/bashisms/heredoc-with-others.sh
new file mode 100644
index 0000000..9f0c04f
--- /dev/null
+++ b/test/bashisms/heredoc-with-others.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+cat << =EOF1
+function CLEAN() {}
+=EOF1
+
+cat << :EOF2
+function CLEAN() {}
+:EOF2
+
+cat << ,EOF3
+function CLEAN() {}
+,EOF3
+
+cat << ?EOF4
+function CLEAN() {}
+?EOF4
+
+cat << E$OF5
+function CLEAN() {}
+E$OF5
+
+cat << $EOF6
+function CLEAN() {}
+$EOF6
+
+cat << EOF_7
+function CLEAN() {}
+EOF_7
+
+cat << EOF;:
+function CLEAN() {}
+EOF
+
+cat << EOF{}9
+function CLEAN() {}
+EOF{}9
+
+cat << EOF\ 10
+function CLEAN() {}
+EOF 10
+
+cat << EOF\;11
+function CLEAN() {}
+EOF;11
+
+cat << EOF\12
+function CLEAN() {}
+EOF12
+
+cat << EOF\\13
+function CLEAN() {}
+EOF\13
+
+cat << EOF\\1\\4
+function CLEAN() {}
+EOF\1\4
+
+cat << \<EOF15\>
+function CLEAN() {}
+<EOF15>
+
+cat << "E\OF16"
+function CLEAN() {}
+E\OF16
+
+cat << 'E\OF17'
+function CLEAN() {}
+E\OF17
+
+cat << EOF18|:
+function CLEAN() {}
+EOF18
+
+cat << EOF19>/dev/null
+echo -e CLEAN() {}
+EOF19
diff --git a/test/bashisms/heredocs.sh b/test/bashisms/heredocs.sh
new file mode 100644
index 0000000..39dd076
--- /dev/null
+++ b/test/bashisms/heredocs.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+cat <<- FOO
+ foo
+ bar
+ moo
+FOO
+
+echo -e moo # BASHISM
+
+foo() {
+ cat <<- FOO
+ foo
+ bar
+ moo
+ FOO
+ echo -e BASHISM
+}
+
+bar() {
+ cat <<- FOO
+ foo
+ bar
+ moo
+ FOO
+ echo -e nothing wrong here
+FOO
+ echo -e BASHISM
+}
+
+
+moo() {
+ cat << FOO
+ foo
+ bar
+ moo
+ FOO
+ echo -e nothing wrong here
+ FOO
+ echo -e still nothing wrong here
+FOO
+ echo -e BASHISM
+}
+
+baz() {
+ cat << EOF1
+EOF1
+ echo -e still inside the here doc
+EOF1 ; echo -e still inside...
+EOF1
+ echo -e BASHISM
+}
diff --git a/test/bashisms/heredocs.sh.out b/test/bashisms/heredocs.sh.out
new file mode 100644
index 0000000..15e3910
--- /dev/null
+++ b/test/bashisms/heredocs.sh.out
@@ -0,0 +1,10 @@
+possible bashism in bashisms/heredocs.sh line 9 (echo -e):
+echo -e moo # BASHISM
+possible bashism in bashisms/heredocs.sh line 17 (echo -e):
+ echo -e BASHISM
+possible bashism in bashisms/heredocs.sh line 28 (echo -e):
+ echo -e BASHISM
+possible bashism in bashisms/heredocs.sh line 42 (echo -e):
+ echo -e BASHISM
+possible bashism in bashisms/heredocs.sh line 51 (echo -e):
+ echo -e BASHISM
diff --git a/test/bashisms/jobs.sh b/test/bashisms/jobs.sh
new file mode 100644
index 0000000..9e2df54
--- /dev/null
+++ b/test/bashisms/jobs.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# POSIX+UP:
+jobs # BASHISM
+jobs -l # BASHISM
+jobs -p # BASHISM
+
+# Non-POSIX at all:
+
+sleep 10 &
+j=$(jobs -p) # possible BASHISM (context changes because of subshell)
+jobs -r # BASHISM
+jobs -s # BASHISM
+jobs -n # BASHISM
+jobs -x # BASHISM \ No newline at end of file
diff --git a/test/bashisms/jobs.sh.out b/test/bashisms/jobs.sh.out
new file mode 100644
index 0000000..de8f8b3
--- /dev/null
+++ b/test/bashisms/jobs.sh.out
@@ -0,0 +1,16 @@
+possible bashism in bashisms/jobs.sh line 4 (jobs):
+jobs # BASHISM
+possible bashism in bashisms/jobs.sh line 5 (jobs):
+jobs -l # BASHISM
+possible bashism in bashisms/jobs.sh line 6 (jobs):
+jobs -p # BASHISM
+possible bashism in bashisms/jobs.sh line 11 (jobs):
+j=$(jobs -p) # possible BASHISM (context changes because of subshell)
+possible bashism in bashisms/jobs.sh line 12 (jobs):
+jobs -r # BASHISM
+possible bashism in bashisms/jobs.sh line 13 (jobs):
+jobs -s # BASHISM
+possible bashism in bashisms/jobs.sh line 14 (jobs):
+jobs -n # BASHISM
+possible bashism in bashisms/jobs.sh line 15 (jobs):
+jobs -x # BASHISM
diff --git a/test/bashisms/line-continuation.sh b/test/bashisms/line-continuation.sh
new file mode 100644
index 0000000..e83b6d4
--- /dev/null
+++ b/test/bashisms/line-continuation.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+echo foo; \
+shopt something # BASHISM
+
+echo foo; echo \
+shopt something
+
+cat <<EOF \
+&>/dev/null #BASHISM
+bar
+moo
+EOF
+
+cat <<EOF
+foo\
+bar\
+moo
+EOF
diff --git a/test/bashisms/line-continuation.sh.out b/test/bashisms/line-continuation.sh.out
new file mode 100644
index 0000000..a243228
--- /dev/null
+++ b/test/bashisms/line-continuation.sh.out
@@ -0,0 +1,6 @@
+possible bashism in bashisms/line-continuation.sh line 4 (shopt):
+echo foo; \
+shopt something # BASHISM
+possible bashism in bashisms/line-continuation.sh line 10 (should be >word 2>&1):
+cat <<EOF \
+&>/dev/null #BASHISM
diff --git a/test/bashisms/negations.sh b/test/bashisms/negations.sh
new file mode 100644
index 0000000..8901357
--- /dev/null
+++ b/test/bashisms/negations.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+case "moo" in
+ [^f]oo) # BASHISM
+ echo hey
+ ;;
+ [!f]oo)
+ echo hey
+ ;;
+esac
+
diff --git a/test/bashisms/negations.sh.out b/test/bashisms/negations.sh.out
new file mode 100644
index 0000000..2a481c1
--- /dev/null
+++ b/test/bashisms/negations.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/negations.sh line 4 ([^] should be [!]):
+ [^f]oo) # BASHISM
diff --git a/test/bashisms/other-vars.sh b/test/bashisms/other-vars.sh
new file mode 100644
index 0000000..46dbedc
--- /dev/null
+++ b/test/bashisms/other-vars.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+test() {
+ echo $FUNCNAME BASHISM
+}
+
+test
+
+echo $DIRSTACK BASHISM
+echo $SECONDS BASHISM
+echo $TMOUT BASHISM
+echo $TIMEFORMAT BASHISM
+TMOUT=2 # BASHISM
+read REPLY
+TIMEFORMAT='' # BASHISM
diff --git a/test/bashisms/other-vars.sh.out b/test/bashisms/other-vars.sh.out
new file mode 100644
index 0000000..1f0e2b2
--- /dev/null
+++ b/test/bashisms/other-vars.sh.out
@@ -0,0 +1,14 @@
+possible bashism in bashisms/other-vars.sh line 4 ($FUNCNAME):
+ echo $FUNCNAME BASHISM
+possible bashism in bashisms/other-vars.sh line 9 ($DIRSTACK):
+echo $DIRSTACK BASHISM
+possible bashism in bashisms/other-vars.sh line 10 ($SECONDS):
+echo $SECONDS BASHISM
+possible bashism in bashisms/other-vars.sh line 11 ($TMOUT):
+echo $TMOUT BASHISM
+possible bashism in bashisms/other-vars.sh line 12 ($TIMEFORMAT):
+echo $TIMEFORMAT BASHISM
+possible bashism in bashisms/other-vars.sh line 13 (TMOUT=):
+TMOUT=2 # BASHISM
+possible bashism in bashisms/other-vars.sh line 15 (TIMEFORMAT=):
+TIMEFORMAT='' # BASHISM
diff --git a/test/bashisms/printf.sh b/test/bashisms/printf.sh
new file mode 100644
index 0000000..1ba20b8
--- /dev/null
+++ b/test/bashisms/printf.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+printf -v some_var "this is a BASHISM"
+
+printf "the use of %q is bad\n" "BASHISMS" >/dev/null
+
+printf "%q leading the string is bad\n" "BASHISMS" >/dev/null
diff --git a/test/bashisms/printf.sh.out b/test/bashisms/printf.sh.out
new file mode 100644
index 0000000..05472da
--- /dev/null
+++ b/test/bashisms/printf.sh.out
@@ -0,0 +1,6 @@
+possible bashism in bashisms/printf.sh line 3 ('printf -v var ...' should be var='$(printf ...)'):
+printf -v some_var "this is a BASHISM"
+possible bashism in bashisms/printf.sh line 5 (printf %q):
+printf "the use of %q is bad\n" "BASHISMS" >/dev/null
+possible bashism in bashisms/printf.sh line 7 (printf %q):
+printf "%q leading the string is bad\n" "BASHISMS" >/dev/null
diff --git a/test/bashisms/quoted-strings.sh b/test/bashisms/quoted-strings.sh
new file mode 100644
index 0000000..bf88104
--- /dev/null
+++ b/test/bashisms/quoted-strings.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+foo="
+echo -e nothing wrong here
+#crap"
+
+echo -e BASHISM
+
+foo="\
+#crap"
+
+echo -e BASHISM
+
+case foo in
+ *\'*)
+ echo -e BASHISM
+ ;;
+esac
+#'
+echo -e BASHISM
+
+case foo in
+ *\\"*")
+ echo -e BASHISM
+ ;;
+ *\\\"*)
+ echo -e BASHISM
+ ;;
+ *\"*)
+ echo -e BASHISM
+ ;;
+esac
+#"
+echo -e BASHISM
+
+foo='\'
+echo -e BASHISM
diff --git a/test/bashisms/quoted-strings.sh.out b/test/bashisms/quoted-strings.sh.out
new file mode 100644
index 0000000..a1fd9d7
--- /dev/null
+++ b/test/bashisms/quoted-strings.sh.out
@@ -0,0 +1,18 @@
+possible bashism in bashisms/quoted-strings.sh line 7 (echo -e):
+echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 12 (echo -e):
+echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 16 (echo -e):
+ echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 20 (echo -e):
+echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 24 (echo -e):
+ echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 27 (echo -e):
+ echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 30 (echo -e):
+ echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 34 (echo -e):
+echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 37 (echo -e):
+echo -e BASHISM
diff --git a/test/bashisms/return.sh b/test/bashisms/return.sh
new file mode 100644
index 0000000..c6735e0
--- /dev/null
+++ b/test/bashisms/return.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+foo() {
+ return -- 1 # BASHISM
+}
+
+bar () {
+ return 256 # BASHISM
+}
+
+moo () {
+ return -1 # BASHISM
+}
diff --git a/test/bashisms/return.sh.out b/test/bashisms/return.sh.out
new file mode 100644
index 0000000..ad1aae0
--- /dev/null
+++ b/test/bashisms/return.sh.out
@@ -0,0 +1,6 @@
+possible bashism in bashisms/return.sh line 4 ('exit --' should be 'exit' (idem for return)):
+ return -- 1 # BASHISM
+possible bashism in bashisms/return.sh line 8 (exit|return status code greater than 255):
+ return 256 # BASHISM
+possible bashism in bashisms/return.sh line 12 (exit|return with negative status code):
+ return -1 # BASHISM
diff --git a/test/bashisms/shell-vars.mk b/test/bashisms/shell-vars.mk
new file mode 100644
index 0000000..54b71cb
--- /dev/null
+++ b/test/bashisms/shell-vars.mk
@@ -0,0 +1,5 @@
+#!/usr/bin/make -f
+
+foo:
+ read foo bar | echo $$foo and $$bar
+ echo my pid: $$$$
diff --git a/test/bashisms/source b/test/bashisms/source
new file mode 100644
index 0000000..412f8bd
--- /dev/null
+++ b/test/bashisms/source
@@ -0,0 +1,2 @@
+#!/bin/sh
+source foo.sh # BASHISM
diff --git a/test/bashisms/source.out b/test/bashisms/source.out
new file mode 100644
index 0000000..d17fa5f
--- /dev/null
+++ b/test/bashisms/source.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/source line 2 (should be '.', not 'source'):
+source foo.sh # BASHISM
diff --git a/test/bashisms/special-case.sh b/test/bashisms/special-case.sh
new file mode 100644
index 0000000..5dd43e0
--- /dev/null
+++ b/test/bashisms/special-case.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+case "foo" in
+ foo)
+ echo once
+ ;& # BASHISM
+ moo)
+ echo twice
+ ;;& # BASHISM
+ foo)
+ echo foo again
+ ;;
+esac
diff --git a/test/bashisms/special-case.sh.out b/test/bashisms/special-case.sh.out
new file mode 100644
index 0000000..2b0a5e3
--- /dev/null
+++ b/test/bashisms/special-case.sh.out
@@ -0,0 +1,4 @@
+possible bashism in bashisms/special-case.sh line 6 (;;& and ;& special case operators):
+ ;& # BASHISM
+possible bashism in bashisms/special-case.sh line 9 (;;& and ;& special case operators):
+ ;;& # BASHISM
diff --git a/test/bashisms/special-expansions.sh b/test/bashisms/special-expansions.sh
new file mode 100644
index 0000000..93a4f7f
--- /dev/null
+++ b/test/bashisms/special-expansions.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+set -- foo bar moo
+
+echo BASHISM: ${#@}
+echo BASHISM: ${#*}
+
+echo BASHISM: ${@%f*}
+echo BASHISM: ${*%f*}
+echo BASHISM: ${@%%f*}
+echo BASHISM: ${*%%f*}
+
+echo BASHISM: ${@#*o}
+echo BASHISM: ${*#*o}
+echo BASHISM: ${@##*o}
+echo BASHISM: ${*##*o}
+
+echo BASHISM: ${@/?/u}
+echo BASHISM: ${*/?/u}
+echo BASHISM: ${@/?/}
+echo BASHISM: ${*/?/}
+
+echo BASHISM: ${@:2}
+echo BASHISM: ${*:2}
+echo BASHISM: ${@:1:1}
+echo BASHISM: ${*:1:1}
diff --git a/test/bashisms/special-expansions.sh.out b/test/bashisms/special-expansions.sh.out
new file mode 100644
index 0000000..66e60fd
--- /dev/null
+++ b/test/bashisms/special-expansions.sh.out
@@ -0,0 +1,36 @@
+possible bashism in bashisms/special-expansions.sh line 5 (${#@} or ${#*}):
+echo BASHISM: ${#@}
+possible bashism in bashisms/special-expansions.sh line 6 (${#@} or ${#*}):
+echo BASHISM: ${#*}
+possible bashism in bashisms/special-expansions.sh line 8 (${[@|*]#[#]pat} or ${[@|*]%[%]pat}):
+echo BASHISM: ${@%f*}
+possible bashism in bashisms/special-expansions.sh line 9 (${[@|*]#[#]pat} or ${[@|*]%[%]pat}):
+echo BASHISM: ${*%f*}
+possible bashism in bashisms/special-expansions.sh line 10 (${[@|*]#[#]pat} or ${[@|*]%[%]pat}):
+echo BASHISM: ${@%%f*}
+possible bashism in bashisms/special-expansions.sh line 11 (${[@|*]#[#]pat} or ${[@|*]%[%]pat}):
+echo BASHISM: ${*%%f*}
+possible bashism in bashisms/special-expansions.sh line 13 (${[@|*]#[#]pat} or ${[@|*]%[%]pat}):
+echo BASHISM: ${@#*o}
+possible bashism in bashisms/special-expansions.sh line 14 (${[@|*]#[#]pat} or ${[@|*]%[%]pat}):
+echo BASHISM: ${*#*o}
+possible bashism in bashisms/special-expansions.sh line 15 (${[@|*]#[#]pat} or ${[@|*]%[%]pat}):
+echo BASHISM: ${@##*o}
+possible bashism in bashisms/special-expansions.sh line 16 (${[@|*]#[#]pat} or ${[@|*]%[%]pat}):
+echo BASHISM: ${*##*o}
+possible bashism in bashisms/special-expansions.sh line 18 (${parm/?/pat[/str]}):
+echo BASHISM: ${@/?/u}
+possible bashism in bashisms/special-expansions.sh line 19 (${parm/?/pat[/str]}):
+echo BASHISM: ${*/?/u}
+possible bashism in bashisms/special-expansions.sh line 20 (${parm/?/pat[/str]}):
+echo BASHISM: ${@/?/}
+possible bashism in bashisms/special-expansions.sh line 21 (${parm/?/pat[/str]}):
+echo BASHISM: ${*/?/}
+possible bashism in bashisms/special-expansions.sh line 23 (${foo:3[:1]}):
+echo BASHISM: ${@:2}
+possible bashism in bashisms/special-expansions.sh line 24 (${foo:3[:1]}):
+echo BASHISM: ${*:2}
+possible bashism in bashisms/special-expansions.sh line 25 (${foo:3[:1]}):
+echo BASHISM: ${@:1:1}
+possible bashism in bashisms/special-expansions.sh line 26 (${foo:3[:1]}):
+echo BASHISM: ${*:1:1}
diff --git a/test/bashisms/subshell-no-arith.sh b/test/bashisms/subshell-no-arith.sh
new file mode 100644
index 0000000..f3a5a29
--- /dev/null
+++ b/test/bashisms/subshell-no-arith.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo $((echo foo); echo bar)
diff --git a/test/bashisms/tilde-expansion.sh b/test/bashisms/tilde-expansion.sh
new file mode 100644
index 0000000..e58069a
--- /dev/null
+++ b/test/bashisms/tilde-expansion.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+echo tilde alone: ~/
+echo tilde with name: ~root/
+
+cd ; cd - >/dev/null
+
+echo BASHISM: tilde plus: ~+
+echo BASHISM: tilde minus: ~-
+
+pushd ~ >/dev/null 2>&1 # BASHISM
+for i in $(seq 1 9); do
+ pushd / >/dev/null 2>&1 # BASHISM
+done
+
+echo BASHISM: tilde plus n: ~+1
+echo BASHISM: tilde implicit plus n: ~1
+echo BASHISM: tilde minus n: ~-1
+
+echo BASHISM: tilde plus 10: ~+10
+echo BASHISM: tilde implicit plus 10: ~10
+echo BASHISM: tilde minus 10: ~-10
+
+echo BASHISM=~-/bin
+echo BASHISM=/:~+/bin/
+BASHISM=~-/bin ; echo $BASHISM
+BASHISM=/:~+/bin/ ; echo $BASHISM
+
+echo nothing wrong here: ~+foo/
+echo nothing wrong here: ~-moo/
+echo nothing wrong here: ~+1foo/
+echo nothing wrong here: ~1foo/
+echo nothing wrong here: ~-1moo/
+
+# Again, but without the slash
+echo nothing wrong here: ~+foo
+echo nothing wrong here: ~-moo
+echo nothing wrong here: ~+1foo
+echo nothing wrong here: ~1foo
+echo nothing wrong here: ~-1moo
+
diff --git a/test/bashisms/tilde-expansion.sh.out b/test/bashisms/tilde-expansion.sh.out
new file mode 100644
index 0000000..6ae792e
--- /dev/null
+++ b/test/bashisms/tilde-expansion.sh.out
@@ -0,0 +1,28 @@
+possible bashism in bashisms/tilde-expansion.sh line 8 (non-standard tilde expansion):
+echo BASHISM: tilde plus: ~+
+possible bashism in bashisms/tilde-expansion.sh line 9 (non-standard tilde expansion):
+echo BASHISM: tilde minus: ~-
+possible bashism in bashisms/tilde-expansion.sh line 11 ((push|pop)d):
+pushd ~ >/dev/null 2>&1 # BASHISM
+possible bashism in bashisms/tilde-expansion.sh line 13 ((push|pop)d):
+ pushd / >/dev/null 2>&1 # BASHISM
+possible bashism in bashisms/tilde-expansion.sh line 16 (non-standard tilde expansion):
+echo BASHISM: tilde plus n: ~+1
+possible bashism in bashisms/tilde-expansion.sh line 17 (non-standard tilde expansion):
+echo BASHISM: tilde implicit plus n: ~1
+possible bashism in bashisms/tilde-expansion.sh line 18 (non-standard tilde expansion):
+echo BASHISM: tilde minus n: ~-1
+possible bashism in bashisms/tilde-expansion.sh line 20 (non-standard tilde expansion):
+echo BASHISM: tilde plus 10: ~+10
+possible bashism in bashisms/tilde-expansion.sh line 21 (non-standard tilde expansion):
+echo BASHISM: tilde implicit plus 10: ~10
+possible bashism in bashisms/tilde-expansion.sh line 22 (non-standard tilde expansion):
+echo BASHISM: tilde minus 10: ~-10
+possible bashism in bashisms/tilde-expansion.sh line 24 (non-standard tilde expansion):
+echo BASHISM=~-/bin
+possible bashism in bashisms/tilde-expansion.sh line 25 (non-standard tilde expansion):
+echo BASHISM=/:~+/bin/
+possible bashism in bashisms/tilde-expansion.sh line 26 (non-standard tilde expansion):
+BASHISM=~-/bin ; echo $BASHISM
+possible bashism in bashisms/tilde-expansion.sh line 27 (non-standard tilde expansion):
+BASHISM=/:~+/bin/ ; echo $BASHISM
diff --git a/test/bashisms/traps.sh b/test/bashisms/traps.sh
new file mode 100644
index 0000000..b357ce7
--- /dev/null
+++ b/test/bashisms/traps.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+trap foo ERR # BASHISM
+trap foo RETURN # BASHISM
+trap foo DEBUG # BASHISM
+
+trap "echo BASHISM" ERR
+trap "echo BASHISM" RETURN
+trap "echo BASHISM" DEBUG
+
+foo() {
+ echo ": dummy function"
+}
+
+trap $(foo BASHISM) ERR
+trap "$(foo BASHISM)" RETURN
+trap "echo $foo BASHISM" DEBUG
diff --git a/test/bashisms/traps.sh.out b/test/bashisms/traps.sh.out
new file mode 100644
index 0000000..300ad70
--- /dev/null
+++ b/test/bashisms/traps.sh.out
@@ -0,0 +1,18 @@
+possible bashism in bashisms/traps.sh line 3 (trap with ERR|DEBUG|RETURN):
+trap foo ERR # BASHISM
+possible bashism in bashisms/traps.sh line 4 (trap with ERR|DEBUG|RETURN):
+trap foo RETURN # BASHISM
+possible bashism in bashisms/traps.sh line 5 (trap with ERR|DEBUG|RETURN):
+trap foo DEBUG # BASHISM
+possible bashism in bashisms/traps.sh line 7 (trap with ERR|DEBUG|RETURN):
+trap "echo BASHISM" ERR
+possible bashism in bashisms/traps.sh line 8 (trap with ERR|DEBUG|RETURN):
+trap "echo BASHISM" RETURN
+possible bashism in bashisms/traps.sh line 9 (trap with ERR|DEBUG|RETURN):
+trap "echo BASHISM" DEBUG
+possible bashism in bashisms/traps.sh line 15 (trap with ERR|DEBUG|RETURN):
+trap $(foo BASHISM) ERR
+possible bashism in bashisms/traps.sh line 16 (trap with ERR|DEBUG|RETURN):
+trap "$(foo BASHISM)" RETURN
+possible bashism in bashisms/traps.sh line 17 (trap with ERR|DEBUG|RETURN):
+trap "echo $foo BASHISM" DEBUG
diff --git a/test/bashisms/underscore-var.sh b/test/bashisms/underscore-var.sh
new file mode 100644
index 0000000..a4f2ea4
--- /dev/null
+++ b/test/bashisms/underscore-var.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo BASHISM $_
diff --git a/test/bashisms/underscore-var.sh.out b/test/bashisms/underscore-var.sh.out
new file mode 100644
index 0000000..dbfe699
--- /dev/null
+++ b/test/bashisms/underscore-var.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/underscore-var.sh line 3 ($_):
+echo BASHISM $_
diff --git a/test/bashisms/unknown-fns.sh b/test/bashisms/unknown-fns.sh
new file mode 100644
index 0000000..64d1b46
--- /dev/null
+++ b/test/bashisms/unknown-fns.sh
@@ -0,0 +1,297 @@
+#!/bin/sh
+
+################################################################################
+# #
+# Copyright (c) 2009 FUJITSU LIMITED #
+# #
+# This program is free software; you can redistribute it and#or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+# This program is distributed in the hope that it will be useful, but #
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License #
+# for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program; if not, write to the Free Software #
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
+# #
+# Author: Miao Xie <miaox@cn.fujitsu.com> #
+# #
+################################################################################
+
+cd $LTPROOT/testcases/bin
+
+. ./cpuset_funcs.sh
+
+export TCID="cpuset01"
+export TST_TOTAL=97
+export TST_COUNT=1
+
+nr_cpus=$NR_CPUS
+nr_mems=$N_NODES
+
+cpus_all="$(seq -s, 0 $((nr_cpus-1)))"
+mems_all="$(seq -s, 0 $((nr_mems-1)))"
+
+exit_status=0
+
+cfile_name=
+
+# base_op_write_and_test <write_file_name> <write_string> <expect_string>
+base_op_write_and_test()
+{
+ local write_file="$1"
+ local write_string="$2"
+ local expect_string="$3"
+ local write_result=
+ local ret=0
+
+ mkdir -p "$(dirname $write_file)" || {
+ tst_brkm TFAIL "Failed to mkdir -p $(basename $write_file)"
+ return 1
+ }
+ [ "$write_string" = NULL ] && write_string=" "
+
+ /bin/echo "$write_string" > "$write_file" 2> $CPUSET_TMP/stderr
+ ret=$?
+ write_result="$(cat "$write_file")"
+
+ case "$expect_string" in
+ EMPTY)
+ test -z "$write_result" -a $ret = 0
+ ret=$?
+ ;;
+ WRITE_ERROR)
+ ret=$((!$ret))
+ ;;
+ *)
+ test "$expect_string" = "$write_result" -a $ret = 0
+ ret=$?
+ ;;
+ esac
+
+ if [ $ret -eq 0 ]; then
+ tst_resm TPASS "$cfile_name: Get the expected string"
+ else
+ tst_resm TFAIL "$cfile_name: Test result - $write_result Expected string - \"$expect_string\""
+ fi
+ return $ret
+}
+
+base_op_test()
+{
+ setup
+ if [ $? -ne 0 ]; then
+ exit_status=1
+ else
+ base_op_write_and_test "$@"
+ if [ $? -ne 0 ]; then
+ exit_status=1
+ fi
+
+ cleanup
+ if [ $? -ne 0 ]; then
+ exit_status=1
+ fi
+ fi
+ : $((TST_COUNT++)) #BASHISM
+}
+
+test_cpus()
+{
+ cfile_name="cpus"
+ while read cpus result
+ do
+ base_op_test "$CPUSET/1/cpus" "$cpus" "$result"
+ done <<- EOF
+ NULL EMPTY
+ 0 0
+ $nr_cpus WRITE_ERROR
+ $cpus_all 0-$((nr_cpus-1))
+ ${cpus_all}$nr_cpus WRITE_ERROR
+ 0,0 0
+ 0-0 0
+ 0-$((nr_cpus-1)) 0-$((nr_cpus-1))
+ -1 WRITE_ERROR
+ 0-$nr_cpus WRITE_ERROR
+ 0- WRITE_ERROR
+ 0--$((nr_cpus-1)) WRITE_ERROR
+ 0,1-$((nr_cpus-2)),$((nr_cpus-1)) 0-$((nr_cpus-1))
+ 0,1-$((nr_cpus-2)), 0-$((nr_cpus-2))
+ 0AAA WRITE_ERROR
+ AAA WRITE_ERROR
+ EOF
+ # while read cpus result
+}
+
+test_mems()
+{
+ cfile_name="mems"
+ while read mems result
+ do
+ base_op_test "$CPUSET/1/mems" "$mems" "$result"
+ done <<- EOF
+ NULL EMPTY
+ 0 0
+ $nr_mems WRITE_ERROR
+ $mems_all 0-$((nr_mems-1))
+ ${mems_all}$nr_mems WRITE_ERROR
+ 0,0 0
+ 0-0 0
+ 0-$((nr_mems-1)) 0-$((nr_mems-1))
+ -1 WRITE_ERROR
+ 0-$nr_mems WRITE_ERROR
+ 0- WRITE_ERROR
+ 0--$((nr_mems-1)) WRITE_ERROR
+ 0,1-$((nr_mems-2)),$((nr_mems-1)) 0-$((nr_mems-1))
+ 0,1-$((nr_mems-2)), 0-$((nr_mems-2))
+ 0AAA WRITE_ERROR
+ AAA WRITE_ERROR
+ EOF
+ # while read mems result
+}
+
+test_flags()
+{
+ for filename in cpu_exclusive mem_exclusive mem_hardwall \
+ memory_migrate memory_spread_page memory_spread_slab \
+ sched_load_balance memory_pressure_enabled
+ do
+ cfile_name="$filename"
+ while read flags result
+ do
+ base_op_test "$CPUSET/$filename" "$flags" "$result"
+ done <<- EOF
+ NULL 0
+ 0 0
+ 1 1
+ -1 WRITE_ERROR
+ A WRITE_ERROR
+ 2 1
+ EOF
+ # while read flags, result
+ done # for filename in flagfiles
+}
+
+test_domain()
+{
+ cfile_name="sched_relax_domain_level"
+ while read domain_level result
+ do
+ base_op_test "$CPUSET/sched_relax_domain_level" "$domain_level" "$result"
+ done <<- EOF
+ NULL 0
+ 0 0
+ 1 1
+ 2 2
+ 3 3
+ 4 4
+ 5 5
+ 6 WRITE_ERROR
+ -1 -1
+ -2 WRITE_ERROR
+ A WRITE_ERROR
+ EOF
+ # while read domain_level result
+}
+
+# attach_task_test <cpus> <mems> <expect>
+attach_task_test()
+{
+ local cpus=$1
+ local mems=$2
+ local expect=$3
+
+ local pid=
+ local ret=
+
+ setup
+ if [ $? -ne 0 ]; then
+ exit_status=1
+ cleanup
+ ((TST_COUNT++)) #BASHISM
+ return
+ fi
+
+ # create sub cpuset
+ mkdir "$CPUSET/sub_cpuset" > /dev/null
+ if [ $? -ne 0 ]; then
+ exit_status=1
+ cleanup
+ ((TST_COUNT++)) # BASHISM
+ return
+ fi
+
+ if [ "$cpus" != "NULL" ]; then
+ echo $cpus > "$CPUSET/sub_cpuset/cpus"
+ fi
+ if [ "$mems" != "NULL" ]; then
+ echo $mems > "$CPUSET/sub_cpuset/mems"
+ fi
+
+ cat /dev/zero > /dev/null &
+ pid=$!
+
+ # attach task into the cpuset group
+ echo $pid > "$CPUSET/sub_cpuset/tasks" 2> /dev/null
+ if [ $? -eq $expect ]; then
+ tst_resm TPASS "Attaching Task Test successed!!"
+ else
+ tst_resm TFAIL "Attaching Task Test failed!! cpus - \"$cpus\", mems - \"$mems\", Expect - \"$expect\", Fact - \"$ret\". (0 - Attach Success, 1 - Attach Fail)"
+ exit_status=1
+ fi
+
+ /bin/kill $pid &> /dev/null # BASHISM
+ cleanup
+ if [ $? -ne 0 ]; then
+ exit_status=1
+ fi
+ ((TST_COUNT++)) # BASHISM
+}
+
+
+test_attach_task()
+{
+ cfile_name="tasks"
+ while read cpus mems expect
+ do
+ attach_task_test "$cpus" "$mems" "$expect"
+ done <<- EOF
+ 0 NULL 1
+ 0 0 0
+ NULL 0 1
+ EOF
+ # while read cpus mems expect
+}
+
+test_readonly_cfiles()
+{
+ for filename in cpus mems memory_pressure
+ do
+ cfile_name="$filename(READONLY)"
+ base_op_test "$CPUSET/$filename" "0" "WRITE_ERROR"
+ done # for filename in readonly cfiles
+}
+
+# Case 1-3
+test_readonly_cfiles
+
+# Case 4-19
+test_cpus
+
+# Case 20-35
+test_mems
+
+# Case 36-83
+test_flags
+
+# Case 84-94
+test_domain
+
+# Case 95-97
+test_attach_task
+
+exit $exit_status
diff --git a/test/bashisms/unknown-fns.sh.out b/test/bashisms/unknown-fns.sh.out
new file mode 100644
index 0000000..82f0896
--- /dev/null
+++ b/test/bashisms/unknown-fns.sh.out
@@ -0,0 +1,10 @@
+possible bashism in bashisms/unknown-fns.sh line 100 ('$((n++))' should be '$n; $((n=n+1))'):
+ : $((TST_COUNT++)) #BASHISM
+possible bashism in bashisms/unknown-fns.sh line 215 ('((' should be '$(('):
+ ((TST_COUNT++)) #BASHISM
+possible bashism in bashisms/unknown-fns.sh line 224 ('((' should be '$(('):
+ ((TST_COUNT++)) # BASHISM
+possible bashism in bashisms/unknown-fns.sh line 247 (should be >word 2>&1):
+ /bin/kill $pid &> /dev/null # BASHISM
+possible bashism in bashisms/unknown-fns.sh line 252 ('((' should be '$(('):
+ ((TST_COUNT++)) # BASHISM
diff --git a/test/bashisms/unterminated-string.sh b/test/bashisms/unterminated-string.sh
new file mode 100644
index 0000000..bde111e
--- /dev/null
+++ b/test/bashisms/unterminated-string.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+CLEAN="'("'"c"'")'"
+echo "foo
+bar"
diff --git a/test/bashisms/unterminated-string2.sh b/test/bashisms/unterminated-string2.sh
new file mode 100644
index 0000000..35d41d2
--- /dev/null
+++ b/test/bashisms/unterminated-string2.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+CLEAN="("'"c"'")"
+echo "foo
+bar"
diff --git a/test/dd-list/sources b/test/dd-list/sources
new file mode 100644
index 0000000..e314539
--- /dev/null
+++ b/test/dd-list/sources
@@ -0,0 +1,185 @@
+Package: vim
+Binary: vim-common, vim-gui-common, vim-runtime, vim-doc, vim-tiny, vim, vim-dbg, vim-gtk, vim-nox, vim-athena, vim-lesstif, vim-gnome
+Version: 2:7.3.429-2
+Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+Uploaders: James McCoy <jamessan@debian.org>
+Build-Depends: libacl1-dev, libgpmg1-dev [linux-any], debhelper (>= 7.2.3~), libtinfo-dev | libncurses5-dev, libselinux1-dev [linux-any], dpkg-dev (>= 1.15.1), libgtk2.0-dev, libxaw7-dev, libxt-dev, libxpm-dev, libgnomeui-dev [!m68k], libperl-dev, tcl-dev, python-dev, ruby1.8, ruby1.8-dev, lua5.1, liblua5.1-dev
+Build-Depends-Indep: docbook-xml, docbook-utils
+Architecture: any all
+Standards-Version: 3.9.2.0
+Format: 3.0 (quilt)
+Files:
+ c02fea331371614ac4ca4360e6fff789 1998 vim_7.3.429-2.dsc
+ 5e1b68e1d716e3e8a07775e7987b08c2 11009709 vim_7.3.429.orig.tar.gz
+ 6f58c13344d6cfbd3f62a2beb6c4147a 190039 vim_7.3.429-2.debian.tar.gz
+Vcs-Browser: http://hg.debian.org/hg/pkg-vim/vim
+Vcs-Hg: http://hg.debian.org/hg/pkg-vim/vim
+Checksums-Sha1:
+ a0dbb9cae1d926e6133c1293e8897570fa640eea 1998 vim_7.3.429-2.dsc
+ 984a42ad7f7e17c2e7543d1587e1f95500862587 11009709 vim_7.3.429.orig.tar.gz
+ bfe717bd260687098b230dcfa988d006662298a7 190039 vim_7.3.429-2.debian.tar.gz
+Checksums-Sha256:
+ dd4999aebb61e5c552b0495a155c25bc880da0bfd00a57db861890870dc1a693 1998 vim_7.3.429-2.dsc
+ 998bf2823a494d092b7c674d8499e2f94022fcac2ee7512a44a4d8b9409db077 11009709 vim_7.3.429.orig.tar.gz
+ ac3f78bfc56b8420de2d415c2288829abc5779305efd4a95079d4b5d2c960ae8 190039 vim_7.3.429-2.debian.tar.gz
+Homepage: http://www.vim.org/
+Directory: pool/main/v/vim
+Priority: source
+Section: editors
+
+Package: bzip2
+Binary: libbz2-1.0, libbz2-dev, bzip2, bzip2-doc
+Version: 1.0.6-7
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Uploaders: Santiago Ruano Rincón <santiago@debian.org>, Jorge Ernesto Guevara Cuenca <jguevara@debiancolombia.org>
+Build-Depends: gcc-multilib [amd64 i386 kfreebsd-amd64 powerpc ppc64 s390 sparc] | gcc-4.1 (<< 4.1.2) [amd64 i386 kfreebsd-amd64 powerpc ppc64 s390 sparc], dpkg-dev (>= 1.16.0), debhelper (>= 9), dh-exec
+Build-Depends-Indep: texinfo
+Architecture: any all
+Standards-Version: 3.9.5
+Format: 3.0 (quilt)
+Files:
+ d4850752a3386592ae416b3fd6fc2c3a 2261 bzip2_1.0.6-7.dsc
+ 2a1df12bd405cc86790291797673753c 708737 bzip2_1.0.6.orig.tar.bz2
+ 3bc252d3eb0a16a4f5950fac8deb7bb1 59542 bzip2_1.0.6-7.debian.tar.bz2
+Vcs-Browser: http://git.debian.org/?p=collab-maint/bzip2.git
+Vcs-Git: git://git.debian.org/collab-maint/bzip2.git
+Checksums-Sha1:
+ f970fefd8f7cb4a02ec74d3ecc21c31068201b5c 2261 bzip2_1.0.6-7.dsc
+ 3725a0554fa6bb654ef2728fef36bc06aed4e388 708737 bzip2_1.0.6.orig.tar.bz2
+ e5169afbee8f9ee603c253e03421364819a14c12 59542 bzip2_1.0.6-7.debian.tar.bz2
+Checksums-Sha256:
+ 098b7e38d1d634fc361847602bf85753dadeca121b9531f6dba2614b16e0637c 2261 bzip2_1.0.6-7.dsc
+ d70a9ccd8bdf47e302d96c69fecd54925f45d9c7b966bb4ef5f56b770960afa7 708737 bzip2_1.0.6.orig.tar.bz2
+ 17e030ccb2908d15553c1510869e09d8ef41b5f8e72c7c65d1d5503396a5bd3a 59542 bzip2_1.0.6-7.debian.tar.bz2
+Homepage: http://www.bzip.org/
+Package-List:
+ bzip2 deb utils standard arch=any
+ bzip2-doc deb doc optional arch=all
+ libbz2-1.0 deb libs important arch=any
+ libbz2-dev deb libdevel optional arch=any
+Extra-Source-Only: yes
+Directory: pool/main/b/bzip2
+Priority: source
+Section: utils
+
+Package: bzip2
+Binary: libbz2-1.0, libbz2-dev, bzip2, bzip2-doc
+Version: 1.0.6-8
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Uploaders: Santiago Ruano Rincón <santiago@debian.org>
+Build-Depends: dpkg-dev (>= 1.16.0), debhelper (>= 9), dh-exec
+Build-Depends-Indep: texinfo
+Architecture: any all
+Standards-Version: 3.9.6
+Format: 3.0 (quilt)
+Files:
+ 7709d3c0a7715bf4f61cc74adc10ee5a 2042 bzip2_1.0.6-8.dsc
+ 2a1df12bd405cc86790291797673753c 708737 bzip2_1.0.6.orig.tar.bz2
+ 72b1174a04f96b62c1f50391c8f41488 59494 bzip2_1.0.6-8.debian.tar.bz2
+Vcs-Browser: http://git.debian.org/?p=collab-maint/bzip2.git
+Vcs-Git: git://git.debian.org/collab-maint/bzip2.git
+Checksums-Sha1:
+ 8bb35859d49d012e1464db621e740e1702a5ad14 2042 bzip2_1.0.6-8.dsc
+ 3725a0554fa6bb654ef2728fef36bc06aed4e388 708737 bzip2_1.0.6.orig.tar.bz2
+ 78c527bdc6eb5727b79d401ebf3ddf2b175af91f 59494 bzip2_1.0.6-8.debian.tar.bz2
+Checksums-Sha256:
+ 46df0e8112487065532829f2340ffd6ca64d46b6ab01b0000694751d3e67fb11 2042 bzip2_1.0.6-8.dsc
+ d70a9ccd8bdf47e302d96c69fecd54925f45d9c7b966bb4ef5f56b770960afa7 708737 bzip2_1.0.6.orig.tar.bz2
+ 60fe87fd3942c385e5921786255a27daf9a962ebc7301a60dfd8d1e1a5c8ce78 59494 bzip2_1.0.6-8.debian.tar.bz2
+Homepage: http://www.bzip.org/
+Package-List:
+ bzip2 deb utils standard arch=any
+ bzip2-doc deb doc optional arch=all
+ libbz2-1.0 deb libs important arch=any
+ libbz2-dev deb libdevel optional arch=any
+Directory: pool/main/b/bzip2
+Priority: source
+Section: utils
+
+Package: subversion
+Binary: subversion, subversion-dbg, libsvn1, libsvn-dev, libsvn-doc, libapache2-mod-svn, libapache2-svn, python-subversion, subversion-tools, libsvn-java, libsvn-perl, ruby-svn, libsvn-ruby1.8
+Version: 1.8.13-1
+Maintainer: Peter Samuelson <peter@p12n.org>
+Uploaders: Troy Heber <troyh@debian.org>, James McCoy <jamessan@debian.org>
+Build-Depends: debhelper (>= 8), libserf-dev (>= 1.2), zlib1g-dev, libapr1-dev, libaprutil1-dev, libdb5.3-dev, libsasl2-dev, apache2-dev, dh-apache2, libsqlite3-dev (>= 3.7.12), libgnome-keyring-dev, libdbus-1-dev, kdelibs5-dev, quilt, doxygen, autotools-dev, autoconf, libtool-bin, swig, python-all-dev, perl, libperl-dev, ruby, ruby-dev, default-jdk, junit
+Build-Conflicts: libsvn-dev (<< 1.8~), ruby-test-unit
+Architecture: any all
+Standards-Version: 3.9.5
+Format: 1.0
+Files:
+ 4b08c636bc2c67f22cce2f27f04e4bba 3105 subversion_1.8.13-1.dsc
+ 8065b3698d799507fb72dd7926ed32b6 9326793 subversion_1.8.13.orig.tar.gz
+ 4e2ea3b225f551ec470796203bd14803 270351 subversion_1.8.13-1.diff.gz
+Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-subversion/src/1.8.x/
+Vcs-Svn: svn://anonscm.debian.org/pkg-subversion/src/1.8.x/
+Checksums-Sha1:
+ 80a8c73f36c57d476989d949f31cf1504631e5fb 3105 subversion_1.8.13-1.dsc
+ 437cf662b7ed27d2254aa7ca334fdd74b49262ef 9326793 subversion_1.8.13.orig.tar.gz
+ be7fdefbc914b305c38698897f2d061b93942b79 270351 subversion_1.8.13-1.diff.gz
+Checksums-Sha256:
+ 26fb93f8adf42cf1bc3afae7890a4bbfff32d860dcb805eb20d8013bffe3e063 3105 subversion_1.8.13-1.dsc
+ 17e8900a877ac9f0d5ef437c20df437fec4eb2c5cb9882609d2277e2312da52c 9326793 subversion_1.8.13.orig.tar.gz
+ 7cf687a60566f4f41ea70f6e028253880ea0d2b52d6dead5ba99c9e298a8245d 270351 subversion_1.8.13-1.diff.gz
+Homepage: http://subversion.apache.org/
+Package-List:
+ libapache2-mod-svn deb httpd optional arch=any
+ libapache2-svn deb oldlibs extra arch=all
+ libsvn-dev deb libdevel extra arch=any
+ libsvn-doc deb doc extra arch=all
+ libsvn-java deb java optional arch=any
+ libsvn-perl deb perl optional arch=any
+ libsvn-ruby1.8 deb oldlibs extra arch=all
+ libsvn1 deb libs optional arch=any
+ python-subversion deb python optional arch=any
+ ruby-svn deb ruby optional arch=any
+ subversion deb vcs optional arch=any
+ subversion-dbg deb debug extra arch=any
+ subversion-tools deb vcs extra arch=any
+Testsuite: autopkgtest
+Directory: pool/main/s/subversion
+Priority: source
+Section: vcs
+
+Package: subversion
+Binary: subversion, subversion-dbg, libsvn1, libsvn-dev, libsvn-doc, libapache2-mod-svn, libapache2-svn, python-subversion, subversion-tools, libsvn-java, libsvn-perl, ruby-svn, libsvn-ruby1.8
+Version: 1.9.2-1
+Maintainer: Peter Samuelson <peter@p12n.org>
+Uploaders: James McCoy <jamessan@debian.org>
+Build-Depends: apache2-dev (>= 2.4.16), autoconf, autotools-dev, bash-completion, debhelper (>= 8), default-jdk (>= 2:1.6) [!hurd-i386 !kfreebsd-amd64 !kfreebsd-i386 !hppa !m68k !sparc !sparc64], dh-apache2, dh-python, doxygen, junit [!hurd-i386 !kfreebsd-amd64 !kfreebsd-i386 !hppa !m68k !sparc !sparc64], kdelibs5-dev, libapr1-dev, libaprutil1-dev, libdb5.3-dev, libdbus-1-dev, libgnome-keyring-dev, libperl-dev, libsasl2-dev, libserf-dev (>= 1.3.4), libsqlite3-dev (>= 3.7.12), libtool, perl, python-all-dev (>= 2.7), quilt, ruby, ruby-dev, swig, zlib1g-dev
+Build-Conflicts: libsvn-dev (<< 1.9~)
+Architecture: any all
+Standards-Version: 3.9.5
+Format: 1.0
+Files:
+ ead24ca2537b45470a38ff0c568f371b 3259 subversion_1.9.2-1.dsc
+ c3f4a2d2f21c565617e97f7640c3c81d 10625378 subversion_1.9.2.orig.tar.gz
+ 939a431c1f383a8b93a38c05982c32d8 2418695 subversion_1.9.2-1.diff.gz
+Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-subversion/src/1.9.x/
+Vcs-Svn: svn://anonscm.debian.org/pkg-subversion/src/1.9.x/
+Checksums-Sha1:
+ 48a7fc952190b738f307e85fb87737f173d49dd4 3259 subversion_1.9.2-1.dsc
+ 4c57828c07d21b4777a058f0d3dc973652d18ce9 10625378 subversion_1.9.2.orig.tar.gz
+ aa869fff7dc7116fd4dafc344cd21ca52bbe00c5 2418695 subversion_1.9.2-1.diff.gz
+Checksums-Sha256:
+ 0020561afd37b3cf20661c7e5da23fde210a1cc70ddfd679604216bb0cb368e4 3259 subversion_1.9.2-1.dsc
+ 6fe6ef49114e9ca2942063e339ce886078612c4e6cc58f268a2ff4db4cf0cf19 10625378 subversion_1.9.2.orig.tar.gz
+ 8deef11131ab873821696e83a1bc2fd175773f52fb8619257073896fdb200187 2418695 subversion_1.9.2-1.diff.gz
+Homepage: http://subversion.apache.org/
+Package-List:
+ libapache2-mod-svn deb httpd optional arch=any
+ libapache2-svn deb oldlibs extra arch=all
+ libsvn-dev deb libdevel extra arch=any
+ libsvn-doc deb doc extra arch=all
+ libsvn-java deb java optional arch=any
+ libsvn-perl deb perl optional arch=any
+ libsvn-ruby1.8 deb oldlibs extra arch=all
+ libsvn1 deb libs optional arch=any
+ python-subversion deb python optional arch=any
+ ruby-svn deb ruby optional arch=any
+ subversion deb vcs optional arch=any
+ subversion-dbg deb debug extra arch=any
+ subversion-tools deb vcs extra arch=any
+Testsuite: autopkgtest
+Directory: pool/main/s/subversion
+Priority: source
+Section: vcs
diff --git a/test/debdiff/devscripts_2.13.0_any.deb b/test/debdiff/devscripts_2.13.0_any.deb
new file mode 100644
index 0000000..3ba462c
--- /dev/null
+++ b/test/debdiff/devscripts_2.13.0_any.deb
Binary files differ
diff --git a/test/debdiff/devscripts_2.13.1_any.deb b/test/debdiff/devscripts_2.13.1_any.deb
new file mode 100644
index 0000000..5a58db1
--- /dev/null
+++ b/test/debdiff/devscripts_2.13.1_any.deb
Binary files differ
diff --git a/test/debrepro/reproducible/debian/changelog b/test/debrepro/reproducible/debian/changelog
new file mode 100644
index 0000000..10e5d6b
--- /dev/null
+++ b/test/debrepro/reproducible/debian/changelog
@@ -0,0 +1,5 @@
+reproducible (0.1.0~FIXME-1) UNRELEASED; urgency=medium
+
+ * Initial release (Closes: #nnnn)
+
+ -- Antonio Terceiro <terceiro@debian.org> Thu, 19 Apr 2018 17:33:39 -0300
diff --git a/test/debrepro/reproducible/debian/compat b/test/debrepro/reproducible/debian/compat
new file mode 100644
index 0000000..b4de394
--- /dev/null
+++ b/test/debrepro/reproducible/debian/compat
@@ -0,0 +1 @@
+11
diff --git a/test/debrepro/reproducible/debian/control b/test/debrepro/reproducible/debian/control
new file mode 100644
index 0000000..af1b782
--- /dev/null
+++ b/test/debrepro/reproducible/debian/control
@@ -0,0 +1,15 @@
+Source: reproducible
+Section: FIXME
+Priority: optional
+Maintainer: Antonio Terceiro <terceiro@debian.org>
+Build-Depends: debhelper (>= 11~),
+Standards-Version: 4.1.3
+Rules-Requires-Root: no
+Homepage: FIXME
+
+Package: reproducible
+Architecture: all
+Depends: ${misc:Depends},
+ ${shlibs:Depends}
+Description: FIXME
+ <insert long description, indented with spaces>
diff --git a/test/debrepro/reproducible/debian/rules b/test/debrepro/reproducible/debian/rules
new file mode 100755
index 0000000..2d33f6a
--- /dev/null
+++ b/test/debrepro/reproducible/debian/rules
@@ -0,0 +1,4 @@
+#!/usr/bin/make -f
+
+%:
+ dh $@
diff --git a/test/debrepro/reproducible/debian/source/format b/test/debrepro/reproducible/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/test/debrepro/reproducible/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/test/debrepro/unreproducible/debian/changelog b/test/debrepro/unreproducible/debian/changelog
new file mode 100644
index 0000000..30bc083
--- /dev/null
+++ b/test/debrepro/unreproducible/debian/changelog
@@ -0,0 +1,5 @@
+unreproducible (0.1.0~FIXME-1) UNRELEASED; urgency=medium
+
+ * Initial release (Closes: #nnnn)
+
+ -- Antonio Terceiro <terceiro@debian.org> Thu, 19 Apr 2018 17:33:39 -0300
diff --git a/test/debrepro/unreproducible/debian/compat b/test/debrepro/unreproducible/debian/compat
new file mode 100644
index 0000000..b4de394
--- /dev/null
+++ b/test/debrepro/unreproducible/debian/compat
@@ -0,0 +1 @@
+11
diff --git a/test/debrepro/unreproducible/debian/control b/test/debrepro/unreproducible/debian/control
new file mode 100644
index 0000000..2fa0c08
--- /dev/null
+++ b/test/debrepro/unreproducible/debian/control
@@ -0,0 +1,15 @@
+Source: unreproducible
+Section: FIXME
+Priority: optional
+Maintainer: Antonio Terceiro <terceiro@debian.org>
+Build-Depends: debhelper (>= 11~),
+Standards-Version: 4.1.3
+Rules-Requires-Root: no
+Homepage: FIXME
+
+Package: reproducible
+Architecture: all
+Depends: ${misc:Depends},
+ ${shlibs:Depends}
+Description: FIXME
+ <insert long description, indented with spaces>
diff --git a/test/debrepro/unreproducible/debian/rules b/test/debrepro/unreproducible/debian/rules
new file mode 100755
index 0000000..d9b84e0
--- /dev/null
+++ b/test/debrepro/unreproducible/debian/rules
@@ -0,0 +1,9 @@
+#!/usr/bin/make -f
+
+%:
+ dh $@
+
+override_dh_auto_install:
+ dh_auto_install
+ date > foo
+ dh_install foo /usr/share/
diff --git a/test/debrepro/unreproducible/debian/source/format b/test/debrepro/unreproducible/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/test/debrepro/unreproducible/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/test/debsign/private_key.asc b/test/debsign/private_key.asc
new file mode 100644
index 0000000..01ca198
--- /dev/null
+++ b/test/debsign/private_key.asc
@@ -0,0 +1,106 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1
+
+lQcYBFXnCocBEACkNFn2IKAMyk3zR8QMVmZuZOESBivnbVUHfXiVCVKBTzLGrIUQ
+WlMjw02CXJyekjHyB3Eqik4X7TEv5EqKME2oXj0WrMZLQQvu+8Mmx67kaYUoYIoH
+U0I/a0yyEkshfki5tsr9qPkgC6R5OSAuGVaL9SC1q+p3uMbHQGnLsBzY8I8S7Ac2
+gsPPQTtX1EK2ZQ1xPUD6NgmTQHlsyJLFhe5XUYxEJm/vn+dh+YAfloElQjdh/V03
+G/d5jte33TxbyNwjCzhlX4Fa+yh2RqsR5s4tHRsfIDte0MIE2vva8ctxeHMSSjRV
+mSufkwSe/3ScY2fHcGI9UzgR1bcdJon0yLfbdZrnBruFVKj8xEEmkrL/kXCRu/2c
+5d1vHwRtHSF7+sY+XubuOGDxkZYr8Kghv50YG8E8fPAhrPhult6fylKDDvFrc5Ai
+RBmfJTXWjcGNgMkFjkXtWzqdgg91Rgr1MRqL9Jxn/30K+EWFPAHjggLrtGjTjtML
+4K0hc0OcqMEzK5ERCuQaYaBcQnDseoBeKCMQMYSZQZij97r+GCPGOLsuPSYKHk2x
+KnUm12WYkkbi4R6Ab+La3PjWqhAtcS9AVzoF7h2n6pSM3V2ldrHcke9qKLdhDrsp
+BXTwZ9RsEBILoEpnjJ/zO75sdH2LLh3XlFfTzUU6yeUiPO2aKXHSbv2/MwARAQAB
+AA/9Gsu1koX9wu3l4o683gvgvfXAX3dFBYhrQ8RPP82RpSsOF4BiW9TMPx3JMZN4
+tiJtUW2yze+xPBOnidqF6h8PzStJFMDaaxVmTngkfy4+yroIJ2/5llBukyLTaou0
+WaGIr1BhDRvclkTQG5LIPuhA81NBJI8KvWwYeWjNhZZrtAstjeJDxbrOcVfXyJwJ
+dvJD9fgPo8UwXX3mqBXjEvtUIEkHzBHpr6o3JrSBxVCDgAJaP1IKkB+u4YCp5ds4
+f6c7eoyDhidxAy5739vltrokvb/uLm94Fh+YSb/ihvbGQvIWSnnJfd53ppwQjlG+
+7yEETSDN0ewZTkUYk1fiqLYd1R4Eenp1h6Yf5mbLJ3+7aqV3ni5Daz8+oVfhv4Pb
+mrYDCYHsY3xoKXxw7OgwHhLS9enojpYmJ22gbNzkweNC0xa6aHcKgiUWu/o84mNe
+5Jle12LFkf+rk7byA7eLgg6ROFk064zpnR+2qj1FiYxtuvzNch4MKUnVw1hdeFoU
+4BLp+9sO/MhPsMmGCfP/eAde1//EwC7qqJIp7AlZxw18fLm9k7zDTpvGhFWWvwXV
+ueHN9Kqmi7CcXajFINnKSOoSZMNEHzoCOmZyp+LvG0ljjZuVShlj5zfV4S1X10TP
+hNYIWHqtpGALC+Eq+s2PrCH+13AJHOgiL9UKnHjHc0imZCEIAMWaQJOxiNdtq1EF
+5wgTe1xdijpSTnnIXHS+jEQvl0DshAzd49C+JR3O6lUtY0yeilXv7IYLiLUWqmv3
+1X8tygUlRiEDA9+cxmPLhoWRIK1Cn1Mh+V1QV6+c9AYkvp6PPueiqOArnhBrYqJ3
+yPsuZbxiVA1IcJ+tZsZI4dXdA3j1icnIM6kwVUveRT0bQUDkgHR7doPLRWykSoH9
+NTSdGNXoVlnJaEpsBydNoAO/XoffysHP3b9+/SvdSo0G7B7V5lwP4bryX1AvglIK
+w0bZs5KrtB/qkcp7egWQ2wLW4850/A+GH4o+e/FnLeAmGbyW5ptifmk7xZF9F+LC
+yF9epnUIANS7WSRNLuzSVUeIZg8iH9+cwZjNUyVXy6/pdp+tJfS52uJIfP826I5W
+uCZCMrahyaByy+0TszVrfS+unWs77vivuk362aeWIXglnSrZ9vw7SElyrAXjbOxC
+DmCyHpXpo61S/4RuxYFXnWo2ixR92lOdU/wDZLF2ZbpE2p+CP2fPfEg42mK7Mg2M
+eVwAIRyy+ZsXPmu1osrch4cTHq2KMdnkjod737OEejMhuP9mK9suBa3u9o+C5DCL
+MQxMAqpxv14CWjHE3G+qE28rVp/Zo5WwYwO8X4r2T3b0BEkaXr4Eb6lBCu6RwCdj
+MACjqmXWVwYltJeURCUDgrzOuwi4KgcH/2Sa2LHjBG8ub9nBBYw3+AEzrP0sjrDJ
+acZZmCn9IaJCbmHPXtOZMCndGxp0NqavE6TpWi616/y9mXqHMYsYFSJeBzKDJBVy
+5uDP/Z9xCPZlzvlEr3SQq0MiLoyDvGWSdSB/qcCNPzOdIgRoXn/o4XvtVfzv2qw6
+HF+25hPrDhjWYNyNFB0cagCoD7Iwv/zBk7JLYJoKd2xNCEbGQ4u/fXfSLXublzFc
+Fgud8lLdq3KirT/NElvyLnbm3UEjeNfcMGGSaJiR7p7mgLXNr+SzAD/zX/NNgbS4
+Jx+zceIK0p/ndPvjdvju24x4Hi1UH+4qOcTUNUAdutDkWBqmKp3ipgOD77QsdXNj
+YW4gdGVzdCBrZXkgKG5vIHNlY3JldCkgPG5vbmVAZGViaWFuLm9yZz6JAjgEEwEC
+ACIFAlXnCocCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEMd+LWhyVD+v
+zLkP/ikDCjvi8/Fh2ePj22+t9H4P+ShMPkOzcbC++zhqNrxiwwmyr0s7vd1nAKJN
+IoGxS+WhDOxUGyfhd5Pr2fkJjyuDZ/Mwi5xwKNc2XRQmlRT6pKvtV3XZTvRbYKGs
+p/nmkjE9ip+R6k0KFy8XbS8iFb4OM8hUcNvQPZBMkg2XurDIILfNABqbCIuK1HJR
+ST53FLdwswuXGUVBUkwG2PjGLxzM7V/GIF7ON2GXtC6sty5Kk+q804YFCLjPsUR7
+9Goq8/scAhgBvnytfPeoOGrHOCVIPfBD7CJODbTBhyENQGyrBXuiHGRBIxHkrfG/
+DDsSH4GCimdDMVtpyGRWsWe94oMe0VOJJq5uganTDPqioll/PbyrTrKZwbtRgtZr
+eUG6mEOv+tQ26xL7++V3G0C5HIF6MUrisvMsJutEtWGQ93iAUR2RDasSn3LfFmqT
+uvPPM8Ogz3rUNp1dd5YpKzyZEBqNM5FlEO15gCK1LjM3F9KQhhQrMTeS85Ytn7F+
+/FXhEXg77JDbKaByRvQ4nfesWV72ZAO2ukfBWZ01yWma8vaw+XJlwYFoWtk2JV2e
+ZpZR5q1e7NUc1rdHo4/6cTc072bpOAatZ1STvfPnolvBPuUyhE8XC6qBBBK3ETbV
+XoXHNJ6KFHrBMGT7oS9aMVzHyWhZA5fGFgqbocI8Gx7lkJr/nQcYBFXnCocBEADI
+hu6xdCWopsyv9wrmpAareEC50o+cztqQh1oJn/ldJ+ECVb9YRcD2x/H1L3DQwGEl
+zKZ6D6up5bzOjyZpaMJn6aT/ONFPfQL6myA3Q/yZST3eirhQ4xfDAMJJKAxtqVW3
+1KYbxl877I0mR9WOxKenWeS4JI+zwWuuDZnDIAxU9vgYs1WHoekg1R1ydLk7r7DA
+qIGNfwY/V8HtZx4M7Frvtk6MNfBsGB54q7mxTCkUAD3LWxI7nDsx47GhwiRf5d5r
+P/lWOZEbgwQaM3n5JqUSNuGU/3arTRbzGhOjgvIq95tR4CQsL0cv9ajJ8o9o5kts
+zuR7URyHBB3SloCOVqAHdmH9Y28jzM2NRgcVgsCVgWB3AqTGbmiZ0gIkIWzeDrBZ
+tqb04GWo8sp6IhjsVtcPB/MwENsi5WoJ6rEDyS0sSH5HDsIbeElKbS3ZAB7vunVZ
+kYxCsD4N90Jey0qCamWtrhCdxoswKPf4sV5X5IEdVPSlV0T/JKzp39pqOdMA+BIx
+W8lKaDyOWBGB7m54wfiiJpeItB7ligM47ylk/L5YYDd4w8PiYYt+VPG7id/jkTVi
+p1V5U33KIIgL/Vc7LfEXoZ6HLUNQFq6VxPP7iNeiBuJMd2izElLuWDXkIlnoOEE+
+on8crCJlRtH3gWfcZSR6qaCgwHwk8w9ockpMsnJeRQARAQABAA/5Ab4WbelV+HC2
+n6LUb+ul+TB604KOZ+zuPkpG0IWY26Pgky4ekwxMIHjdU+WdI9tAHN155t6i/b92
+1A6vZUQZSGDh46vhOcEa2QWnEoPfOo/F31yyPFW026dyiMM11HAfxBCvftdK9ZDZ
+Kyd9phd0Y4Jm9+itbQD1yBXrK6RoJwbcYg6Q5DRWe8gOUPPNtkSREyODuLCNY9iF
+4WO/gZo+Mg4SAaroU3AkN6U6YF2Kj9dusgkxD96MLyNM5Fx1B3ZOZ/0u0/59EdGi
+I/4lhbI9xfo/HJXZuKRbWjJ0UDvvkcsECQKbHd0tT6/hTxvx/hXeOuxTVPT/+/Zf
+sfhH1rTPAC2pGPM0ZybxopGh3kAElcsQvS33NPHrSOIwZEmwARt65+YdFQrZgeYO
+s4kidFNawM+xjOXXQjSMsx2BznfepbSKUyK+HU8Bq/cpgAAALQcgwDUqp0Gm4qng
+DeuRc1fnQUXBadL69cwcLFUDUkxuPZxm06zpDLjeKi92dBWAU2WUb/pvde35aWPj
+HOvsN2B/FysTurgdIMRnLKGFKmxPFH3p5K4S5YoabKm9H8syq2u3yXZFc1z2UV76
+7BHMYX5moC82wq5WcaOnDzzhx54k+/qDFrwrLMjB+V8I/M8YwjYd+SYvvvXrJgbY
+YZif5YhsIc/0LnrsyFylrsWIN1MpTNMIANt5fBsGc/xYY/A5n+4BDFajPn74foLP
+UV4E5zNgGm10YtEJ07o3pBvw1Nqoj3jwdHFlXwjVVo90Uzuw6SvekANKQEEtdpGm
+c959mNk0mHzJjZ1FvC2/tttX7QvXKuF8jLWgkfC0Kby6Aa0DxAzwQQ1abo60UJi2
+OxPM1FI0IsjtRoKu4ryUvCgbMNY9bKhJokYz5BZqqs2lPu9B2EGXrqbC/rq6dgbh
+Y8Xwbu2wypi6G7JHSa8kpwcEacdherJYh17J2xkRHLf857icDNYJPB0GMfg+3evk
+qm3KAu6amB4q+QHf18Z0k6yWmagecdSxTY6LAjog+2Q8YO8N6eqpp08IAOnmNS26
+kDEzE6NfYWdrySfNhJ2SP8W8bx+UvFUVLCZJDgnO9K12R5A7JiO07pijxqorjlOy
+KtIRu/wgtH6wHzhg5i7J443dgz8jtCCLB8O6B8bvzZ75XbwSGAOcSapbAJm7FGyG
+b82TZjBWZE3++TWmUPk8kARCoJR5rGamVKyiTnkooB0638NnAb0aNkJhKLUOjRY+
+SOG0Czf19bRoKEQuwmwe8vwOrQcfLXLYSZGsax4AMM4SacO/2LpddYL1k0FIPs1X
+S9NBIAbw/j2pQfQrG4E6CVMKo6ihcTwIchiny7yKE2BZHAAWwd0cZM1JCnRQ/DOG
+3H9Lwt1enQxHfCsIANYc3aLnUeNls3ZpfmZBlW8fMkRvWz1Tf8vWc2rcHDBx4OeI
+Rn/trD8dN6eON3feKcYx3th+MIGTXzi8rPzOUVPai2iX4yuf2zGh3I3ItyxtgEXn
+gms0KqeQwwQ/jeEUkhuFkq9sT4UwTqBwgMYsWSLMg76/es/zLBpI4LxBaK+BV9ek
+KgD8RQl2IHI8F2XmJQSQex/nbdYVGHXDv1qJ+sMcdHvQ5VAZ1lPSqroM30YFSmzc
+zQq0qaK6mGKCm0RDE24DNa+T5KhdSCeDyIpewiB6ORScNO+WdNxqlfQTBTf5kzEQ
+eGI/TufRQ35CCvvHsFjZilJQa+qSdzzg5vQ+rlF26YkCHwQYAQIACQUCVecKhwIb
+DAAKCRDHfi1oclQ/r536EACBepjhwPL3qYfZNkJlSz34VYDngbzf4KLsYQIypEyU
+6GcBMX5kjKKFrh30+e6atQ40LxRW5QgzEQsuDSBrp/x/qRv6i87oqHC5dG7pEYuv
+E/Fpb3fSQPpbTY5SpKvqWTVYOpXy++QrtpWqOGsGbKUep1/QZzBQnh4HHNHSbKdv
+o73RSCg82A2YxuKiN226pqhI2MaC2+4MZgF6VkF2gmSr/Q84RdlyCcNN2l9uwQ0b
+hiYkB04m/uB1agIiz6OO4VXklUVrbXrvEJmr8At+he4bDL4+W3khKKhR8JzIcR15
+fj7ja+gBRx/hIanusYbjmA20JWdKNEL5IHJwIBsvfuA0kq+eqXDcgL/MndOFkpoG
+LslyJAhdhGMS57UZKq70SkyhMhFNtPv+JQ7qXwrXK7GzfFmymaQVvZ3Csf3YkTsb
+zGcO44Lin/0b4kRA4kVA6m2sVdW2unKVeQqXRAT9k4CRQe57YmwynTboD3/gClRJ
+8QWLCPTqUI9wqKrfb/RXDgzQ5UBKBY97FD+xL2jSSzJpq4ycVvrYVU9aJmFawlLV
+gfdfTLGy50iWTYVjjrYUfryPhW/BSc8/DlbiihPHUpZOPBeJ418upVVhLuyQPfev
+9N/hp5UpLqojA4Ti2ygzdnZQTFnYV5hS/m/OsYs5I3ZVBo1+NnEk2JVdV3hgeLAl
+2g==
+=nZ3G
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/test/debsign/public_key.asc b/test/debsign/public_key.asc
new file mode 100644
index 0000000..214a603
--- /dev/null
+++ b/test/debsign/public_key.asc
@@ -0,0 +1,52 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+mQINBFXnCocBEACkNFn2IKAMyk3zR8QMVmZuZOESBivnbVUHfXiVCVKBTzLGrIUQ
+WlMjw02CXJyekjHyB3Eqik4X7TEv5EqKME2oXj0WrMZLQQvu+8Mmx67kaYUoYIoH
+U0I/a0yyEkshfki5tsr9qPkgC6R5OSAuGVaL9SC1q+p3uMbHQGnLsBzY8I8S7Ac2
+gsPPQTtX1EK2ZQ1xPUD6NgmTQHlsyJLFhe5XUYxEJm/vn+dh+YAfloElQjdh/V03
+G/d5jte33TxbyNwjCzhlX4Fa+yh2RqsR5s4tHRsfIDte0MIE2vva8ctxeHMSSjRV
+mSufkwSe/3ScY2fHcGI9UzgR1bcdJon0yLfbdZrnBruFVKj8xEEmkrL/kXCRu/2c
+5d1vHwRtHSF7+sY+XubuOGDxkZYr8Kghv50YG8E8fPAhrPhult6fylKDDvFrc5Ai
+RBmfJTXWjcGNgMkFjkXtWzqdgg91Rgr1MRqL9Jxn/30K+EWFPAHjggLrtGjTjtML
+4K0hc0OcqMEzK5ERCuQaYaBcQnDseoBeKCMQMYSZQZij97r+GCPGOLsuPSYKHk2x
+KnUm12WYkkbi4R6Ab+La3PjWqhAtcS9AVzoF7h2n6pSM3V2ldrHcke9qKLdhDrsp
+BXTwZ9RsEBILoEpnjJ/zO75sdH2LLh3XlFfTzUU6yeUiPO2aKXHSbv2/MwARAQAB
+tCx1c2NhbiB0ZXN0IGtleSAobm8gc2VjcmV0KSA8bm9uZUBkZWJpYW4ub3JnPokC
+OAQTAQIAIgUCVecKhwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQx34t
+aHJUP6/MuQ/+KQMKO+Lz8WHZ4+Pbb630fg/5KEw+Q7NxsL77OGo2vGLDCbKvSzu9
+3WcAok0igbFL5aEM7FQbJ+F3k+vZ+QmPK4Nn8zCLnHAo1zZdFCaVFPqkq+1XddlO
+9Ftgoayn+eaSMT2Kn5HqTQoXLxdtLyIVvg4zyFRw29A9kEySDZe6sMggt80AGpsI
+i4rUclFJPncUt3CzC5cZRUFSTAbY+MYvHMztX8YgXs43YZe0Lqy3LkqT6rzThgUI
+uM+xRHv0airz+xwCGAG+fK1896g4asc4JUg98EPsIk4NtMGHIQ1AbKsFe6IcZEEj
+EeSt8b8MOxIfgYKKZ0MxW2nIZFaxZ73igx7RU4kmrm6BqdMM+qKiWX89vKtOspnB
+u1GC1mt5QbqYQ6/61DbrEvv75XcbQLkcgXoxSuKy8ywm60S1YZD3eIBRHZENqxKf
+ct8WapO6888zw6DPetQ2nV13likrPJkQGo0zkWUQ7XmAIrUuMzcX0pCGFCsxN5Lz
+li2fsX78VeEReDvskNspoHJG9Did96xZXvZkA7a6R8FZnTXJaZry9rD5cmXBgWha
+2TYlXZ5mllHmrV7s1RzWt0ejj/pxNzTvZuk4Bq1nVJO98+eiW8E+5TKETxcLqoEE
+ErcRNtVehcc0nooUesEwZPuhL1oxXMfJaFkDl8YWCpuhwjwbHuWQmv+5Ag0EVecK
+hwEQAMiG7rF0JaimzK/3CuakBqt4QLnSj5zO2pCHWgmf+V0n4QJVv1hFwPbH8fUv
+cNDAYSXMpnoPq6nlvM6PJmlowmfppP840U99AvqbIDdD/JlJPd6KuFDjF8MAwkko
+DG2pVbfUphvGXzvsjSZH1Y7Ep6dZ5Lgkj7PBa64NmcMgDFT2+BizVYeh6SDVHXJ0
+uTuvsMCogY1/Bj9Xwe1nHgzsWu+2Tow18GwYHnirubFMKRQAPctbEjucOzHjsaHC
+JF/l3ms/+VY5kRuDBBozefkmpRI24ZT/dqtNFvMaE6OC8ir3m1HgJCwvRy/1qMny
+j2jmS2zO5HtRHIcEHdKWgI5WoAd2Yf1jbyPMzY1GBxWCwJWBYHcCpMZuaJnSAiQh
+bN4OsFm2pvTgZajyynoiGOxW1w8H8zAQ2yLlagnqsQPJLSxIfkcOwht4SUptLdkA
+Hu+6dVmRjEKwPg33Ql7LSoJqZa2uEJ3GizAo9/ixXlfkgR1U9KVXRP8krOnf2mo5
+0wD4EjFbyUpoPI5YEYHubnjB+KIml4i0HuWKAzjvKWT8vlhgN3jDw+Jhi35U8buJ
+3+ORNWKnVXlTfcogiAv9Vzst8RehnoctQ1AWrpXE8/uI16IG4kx3aLMSUu5YNeQi
+Weg4QT6ifxysImVG0feBZ9xlJHqpoKDAfCTzD2hySkyycl5FABEBAAGJAh8EGAEC
+AAkFAlXnCocCGwwACgkQx34taHJUP6+d+hAAgXqY4cDy96mH2TZCZUs9+FWA54G8
+3+Ci7GECMqRMlOhnATF+ZIyiha4d9PnumrUONC8UVuUIMxELLg0ga6f8f6kb+ovO
+6KhwuXRu6RGLrxPxaW930kD6W02OUqSr6lk1WDqV8vvkK7aVqjhrBmylHqdf0Gcw
+UJ4eBxzR0mynb6O90UgoPNgNmMbiojdtuqaoSNjGgtvuDGYBelZBdoJkq/0POEXZ
+cgnDTdpfbsENG4YmJAdOJv7gdWoCIs+jjuFV5JVFa2167xCZq/ALfoXuGwy+Plt5
+ISioUfCcyHEdeX4+42voAUcf4SGp7rGG45gNtCVnSjRC+SBycCAbL37gNJKvnqlw
+3IC/zJ3ThZKaBi7JciQIXYRjEue1GSqu9EpMoTIRTbT7/iUO6l8K1yuxs3xZspmk
+Fb2dwrH92JE7G8xnDuOC4p/9G+JEQOJFQOptrFXVtrpylXkKl0QE/ZOAkUHue2Js
+Mp026A9/4ApUSfEFiwj06lCPcKiq32/0Vw4M0OVASgWPexQ/sS9o0ksyaauMnFb6
+2FVPWiZhWsJS1YH3X0yxsudIlk2FY462FH68j4VvwUnPPw5W4ooTx1KWTjwXieNf
+LqVVYS7skD33r/Tf4aeVKS6qIwOE4tsoM3Z2UExZ2FeYUv5vzrGLOSN2VQaNfjZx
+JNiVXVd4YHiwJdo=
+=GzOB
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/test/debsign/sphinx_1.7.2-1.dsc b/test/debsign/sphinx_1.7.2-1.dsc
new file mode 100644
index 0000000..9498c58
--- /dev/null
+++ b/test/debsign/sphinx_1.7.2-1.dsc
@@ -0,0 +1,30 @@
+Format: 3.0 (quilt)
+Source: sphinx
+Binary: python-sphinx, python3-sphinx, sphinx-common, sphinx-doc, libjs-sphinxdoc
+Architecture: all
+Version: 1.7.2-1
+Maintainer: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
+Uploaders: Dmitry Shachnev <mitya57@debian.org>, Chris Lamb <lamby@debian.org>
+Homepage: http://sphinx-doc.org/
+Standards-Version: 4.1.4
+Vcs-Browser: https://salsa.debian.org/python-team/modules/sphinx
+Vcs-Git: https://salsa.debian.org/python-team/modules/sphinx.git
+Testsuite: autopkgtest
+Testsuite-Triggers: dvipng, gir1.2-webkit2-4.0, graphviz, imagemagick-6.q16, librsvg2-bin, python-enum34, python-html5lib, python-mock, python-pygments, python-pytest, python-sphinxcontrib.websupport, python-sqlalchemy, python-whoosh, python-xapian, python3-gi, python3-html5lib, python3-mock, python3-pygments, python3-pytest, python3-sphinxcontrib.websupport, python3-sqlalchemy, python3-whoosh, python3-xapian, texinfo, texlive-fonts-recommended, texlive-latex-extra, texlive-luatex, texlive-xetex, xauth, xvfb
+Build-Depends: debhelper (>= 11)
+Build-Depends-Indep: dh-python, dh-strip-nondeterminism, dpkg-dev (>= 1.17.14), python-all (>= 2.6.6-4~), python3-all (>= 3.3.3-1~), python3-lib2to3, python-six (>= 1.5), python3-six (>= 1.5), python-setuptools (>= 0.6c5-1~), python3-setuptools, python-docutils (>= 0.11), python3-docutils (>= 0.11), python-pygments (>= 2.1.1), python3-pygments (>= 2.1.1), python-jinja2 (>= 2.3), python3-jinja2 (>= 2.3), python-pytest, python3-pytest, python-mock, python3-mock, python-babel (>= 1.3), python3-babel (>= 1.3), python-alabaster (>= 0.7), python3-alabaster (>= 0.7), python-imagesize, python3-imagesize, python-requests (>= 2.4.0), python3-requests (>= 2.4.0), python-html5lib, python3-html5lib, python-enum34, python-typing, python-packaging, python3-packaging, python3-sphinxcontrib.websupport <!nodoc>, libjs-jquery (>= 1.4), libjs-underscore, texlive-latex-recommended, texlive-latex-extra, texlive-fonts-recommended, texinfo, texlive-luatex, texlive-xetex, dvipng, graphviz, imagemagick-6.q16, librsvg2-bin, perl
+Package-List:
+ libjs-sphinxdoc deb javascript optional arch=all
+ python-sphinx deb python optional arch=all
+ python3-sphinx deb python optional arch=all
+ sphinx-common deb python optional arch=all
+ sphinx-doc deb doc optional arch=all profile=!nodoc
+Checksums-Sha1:
+ 1d1fa6954ae216cd44ea52dfc67063f26939c8f5 4719536 sphinx_1.7.2.orig.tar.gz
+ facfa686a3a0bc98c269e16e66427f96e00889ad 34268 sphinx_1.7.2-1.debian.tar.xz
+Checksums-Sha256:
+ 5a1c9a0fec678c24b9a2f5afba240c04668edb7f45c67ce2ed008996b3f21ae2 4719536 sphinx_1.7.2.orig.tar.gz
+ a6a825914b19cfdbc22df858b0cecc497765dad2058deae20a88a6a2f9d57d24 34268 sphinx_1.7.2-1.debian.tar.xz
+Files:
+ 21a08e994e6a289ed14eecefde2b4f2f 4719536 sphinx_1.7.2.orig.tar.gz
+ e147e2afa47e7e58d1288ad8818c3de0 34268 sphinx_1.7.2-1.debian.tar.xz
diff --git a/test/debsign/sphinx_1.7.2-1_amd64.buildinfo b/test/debsign/sphinx_1.7.2-1_amd64.buildinfo
new file mode 100644
index 0000000..478187d
--- /dev/null
+++ b/test/debsign/sphinx_1.7.2-1_amd64.buildinfo
@@ -0,0 +1,472 @@
+Format: 1.0
+Source: sphinx
+Binary: python-sphinx python3-sphinx sphinx-common sphinx-doc libjs-sphinxdoc
+Architecture: all source
+Version: 1.7.2-1
+Checksums-Md5:
+ e6d086f0f2453055bab4ba6677f6af3f 2871 sphinx_1.7.2-1.dsc
+ 4a4df0c2ce6f087414a5dc5802885fd2 88720 libjs-sphinxdoc_1.7.2-1_all.deb
+ 15b065a197e938715bf501b33066adf2 443380 python-sphinx_1.7.2-1_all.deb
+ 942189b1dd93faa36faa3552a9d40042 441676 python3-sphinx_1.7.2-1_all.deb
+ f6a5889bd4e807800239721d365a5f62 432892 sphinx-common_1.7.2-1_all.deb
+ 86497c90b6cda029576933778357004e 1198352 sphinx-doc_1.7.2-1_all.deb
+Checksums-Sha1:
+ 8c7ad722576ad1a475691020ca2320b1040dc203 2871 sphinx_1.7.2-1.dsc
+ 36a42125afd83731e05596d7037314399622e400 88720 libjs-sphinxdoc_1.7.2-1_all.deb
+ 8c2ecdf4e4ffd1f4880b486e53c99207c4d69dbc 443380 python-sphinx_1.7.2-1_all.deb
+ e518d97dceb77d827734d48ac02313fc0ed4b08c 441676 python3-sphinx_1.7.2-1_all.deb
+ 01e65d2e2c45121e06aff6f46427d6a31251e67c 432892 sphinx-common_1.7.2-1_all.deb
+ 8bec16b4db2ddf6776f7cfdcf04cd07fe32269ed 1198352 sphinx-doc_1.7.2-1_all.deb
+Checksums-Sha256:
+ 52d1d62f68aa9bab1504a0491faf6f4de7658ccc3c65e40871b894ad1ce504ed 2871 sphinx_1.7.2-1.dsc
+ c6267177819e0a27b8f9296b1d5106e253e84cf0722fbdf8d2bff489befb81d8 88720 libjs-sphinxdoc_1.7.2-1_all.deb
+ c55dc8f59798a835e6f78adfd95d73f9cf3382e440cdf96b2edbdb1990280f23 443380 python-sphinx_1.7.2-1_all.deb
+ 3f2b279b572d2fc36d9cc84c9fcded242ed930d42350e1d980c4aed45ee4ae2a 441676 python3-sphinx_1.7.2-1_all.deb
+ ece661af9ca87723169f48e68a45af0b5157da4b724a185b99ef42ed22e5f378 432892 sphinx-common_1.7.2-1_all.deb
+ 67722aa0934b9ebce8a870a34542104017491766c2515665c07128ad46b4e6b7 1198352 sphinx-doc_1.7.2-1_all.deb
+Build-Origin: Debian
+Build-Architecture: amd64
+Build-Date: Sat, 14 Apr 2018 10:19:26 +0100
+Installed-Build-Depends:
+ adduser (= 3.117),
+ adwaita-icon-theme (= 3.28.0-1),
+ autoconf (= 2.69-11),
+ automake (= 1:1.15.1-3.1),
+ autopoint (= 0.19.8.1-6),
+ autotools-dev (= 20180224.1),
+ base-files (= 10.1),
+ base-passwd (= 3.5.44),
+ bash (= 4.4.18-2),
+ binutils (= 2.30-15),
+ binutils-common (= 2.30-15),
+ binutils-x86-64-linux-gnu (= 2.30-15),
+ bsdmainutils (= 11.1.2),
+ bsdutils (= 1:2.31.1-0.5),
+ build-essential (= 12.4),
+ bzip2 (= 1.0.6-8.1),
+ ca-certificates (= 20180409),
+ cgmanager (= 0.41-2),
+ coreutils (= 8.28-1),
+ cpp (= 4:7.3.0-3),
+ cpp-7 (= 7.3.0-16),
+ dash (= 0.5.8-2.10),
+ dbus (= 1.12.6-2),
+ dbus-user-session (= 1.12.6-2),
+ dconf-gsettings-backend (= 0.28.0-2),
+ dconf-service (= 0.28.0-2),
+ debconf (= 1.5.66),
+ debhelper (= 11.2.1),
+ debianutils (= 4.8.4),
+ dh-autoreconf (= 17),
+ dh-python (= 3.20180326),
+ dh-strip-nondeterminism (= 0.040-1),
+ diffutils (= 1:3.6-1),
+ dmsetup (= 2:1.02.145-4.1),
+ docutils-common (= 0.14+dfsg-3),
+ dpkg (= 1.19.0.5),
+ dpkg-dev (= 1.19.0.5),
+ dvipng (= 1.15-1),
+ e2fsprogs (= 1.44.1-2),
+ fdisk (= 2.31.1-0.5),
+ file (= 1:5.32-2),
+ findutils (= 4.6.0+git+20171230-2),
+ fontconfig (= 2.13.0-4),
+ fontconfig-config (= 2.13.0-4),
+ fonts-dejavu-core (= 2.37-1),
+ fonts-lmodern (= 2.004.5-3),
+ g++ (= 4:7.3.0-3),
+ g++-7 (= 7.3.0-16),
+ gcc (= 4:7.3.0-3),
+ gcc-7 (= 7.3.0-16),
+ gcc-7-base (= 7.3.0-16),
+ gcc-8-base (= 8-20180402-1),
+ gettext (= 0.19.8.1-6),
+ gettext-base (= 0.19.8.1-6),
+ ghostscript (= 9.22~dfsg-2),
+ glib-networking (= 2.56.0-1),
+ glib-networking-common (= 2.56.0-1),
+ glib-networking-services (= 2.56.0-1),
+ graphviz (= 2.40.1-3),
+ grep (= 3.1-2),
+ groff-base (= 1.22.3-10),
+ gsettings-desktop-schemas (= 3.28.0-1),
+ gtk-update-icon-cache (= 3.22.29-3),
+ gzip (= 1.6-5+b1),
+ hicolor-icon-theme (= 0.17-2),
+ hostname (= 3.20),
+ imagemagick-6-common (= 8:6.9.9.39+dfsg-1),
+ imagemagick-6.q16 (= 8:6.9.9.39+dfsg-1),
+ init-system-helpers (= 1.51),
+ intltool-debian (= 0.35.0+20060710.4),
+ libacl1 (= 2.2.52-3+b1),
+ libann0 (= 1.1.2+doc-7),
+ libapparmor1 (= 2.12-4),
+ libarchive-zip-perl (= 1.60-1),
+ libargon2-0 (= 0~20161029-1.1),
+ libasan4 (= 7.3.0-16),
+ libatk-bridge2.0-0 (= 2.26.2-1),
+ libatk1.0-0 (= 2.28.1-1),
+ libatk1.0-data (= 2.28.1-1),
+ libatomic1 (= 8-20180402-1),
+ libatspi2.0-0 (= 2.28.0-1),
+ libattr1 (= 1:2.4.47-2+b2),
+ libaudit-common (= 1:2.8.2-1),
+ libaudit1 (= 1:2.8.2-1),
+ libavahi-client3 (= 0.7-3.1),
+ libavahi-common-data (= 0.7-3.1),
+ libavahi-common3 (= 0.7-3.1),
+ libbinutils (= 2.30-15),
+ libblkid1 (= 2.31.1-0.5),
+ libbsd0 (= 0.8.7-1),
+ libbz2-1.0 (= 1.0.6-8.1),
+ libc-bin (= 2.27-3),
+ libc-dev-bin (= 2.27-3),
+ libc6 (= 2.27-3),
+ libc6-dev (= 2.27-3),
+ libcairo-gobject2 (= 1.15.10-2),
+ libcairo2 (= 1.15.10-2),
+ libcap-ng0 (= 0.7.7-3.1+b1),
+ libcap2 (= 1:2.25-1.2),
+ libcc1-0 (= 8-20180402-1),
+ libcdt5 (= 2.40.1-3),
+ libcgmanager0 (= 0.41-2),
+ libcgraph6 (= 2.40.1-3),
+ libcilkrts5 (= 7.3.0-16),
+ libcolord2 (= 1.3.3-2),
+ libcom-err2 (= 1.44.1-2),
+ libcomerr2 (= 1.44.1-2),
+ libcroco3 (= 0.6.12-2),
+ libcryptsetup12 (= 2:2.0.2-1),
+ libcups2 (= 2.2.7-3),
+ libcupsimage2 (= 2.2.7-3),
+ libdatrie1 (= 0.2.10-7),
+ libdb5.3 (= 5.3.28-13.1+b1),
+ libdbus-1-3 (= 1.12.6-2),
+ libdconf1 (= 0.28.0-2),
+ libdebconfclient0 (= 0.243),
+ libdevmapper1.02.1 (= 2:1.02.145-4.1),
+ libdpkg-perl (= 1.19.0.5),
+ libdrm-common (= 2.4.91-2),
+ libdrm2 (= 2.4.91-2),
+ libegl-mesa0 (= 17.3.8-1),
+ libegl1 (= 1.0.0+git20180308-1),
+ libepoxy0 (= 1.4.3-1),
+ libexpat1 (= 2.2.5-3),
+ libext2fs2 (= 1.44.1-2),
+ libfdisk1 (= 2.31.1-0.5),
+ libffi6 (= 3.2.1-8),
+ libfftw3-double3 (= 3.3.7-1),
+ libfile-stripnondeterminism-perl (= 0.040-1),
+ libfontconfig1 (= 2.13.0-4),
+ libfreetype6 (= 2.8.1-2),
+ libfribidi0 (= 0.19.7-2),
+ libgbm1 (= 17.3.8-1),
+ libgcc-7-dev (= 7.3.0-16),
+ libgcc1 (= 1:8-20180402-1),
+ libgcrypt20 (= 1.8.2-2),
+ libgd3 (= 2.2.5-4),
+ libgdbm-compat4 (= 1.14.1-6),
+ libgdbm5 (= 1.14.1-6),
+ libgdk-pixbuf2.0-0 (= 2.36.11-2),
+ libgdk-pixbuf2.0-common (= 2.36.11-2),
+ libglapi-mesa (= 17.3.8-1),
+ libglib2.0-0 (= 2.56.1-2),
+ libglvnd0 (= 1.0.0+git20180308-1),
+ libgmp10 (= 2:6.1.2+dfsg-3),
+ libgnutls30 (= 3.5.18-1),
+ libgomp1 (= 8-20180402-1),
+ libgpg-error0 (= 1.29-2),
+ libgraphite2-3 (= 1.3.11-2),
+ libgs9 (= 9.22~dfsg-2),
+ libgs9-common (= 9.22~dfsg-2),
+ libgssapi-krb5-2 (= 1.16-2),
+ libgtk-3-0 (= 3.22.29-3),
+ libgtk-3-common (= 3.22.29-3),
+ libgts-0.7-5 (= 0.7.6+darcs121130-4),
+ libgvc6 (= 2.40.1-3),
+ libgvpr2 (= 2.40.1-3),
+ libharfbuzz-icu0 (= 1.7.6-1),
+ libharfbuzz0b (= 1.7.6-1),
+ libhogweed4 (= 3.4-1),
+ libice6 (= 2:1.0.9-2),
+ libicu57 (= 57.1-9),
+ libidn11 (= 1.33-2.2),
+ libidn2-0 (= 2.0.4-1.1),
+ libijs-0.35 (= 0.35-13),
+ libip4tc0 (= 1.6.2-1),
+ libisl19 (= 0.19-1),
+ libitm1 (= 8-20180402-1),
+ libjbig0 (= 2.1-3.1+b2),
+ libjbig2dec0 (= 0.13-6),
+ libjpeg62-turbo (= 1:1.5.2-2+b1),
+ libjs-jquery (= 3.2.1-1),
+ libjs-sphinxdoc (= 1.6.7-2),
+ libjs-underscore (= 1.8.3~dfsg-1),
+ libjson-c3 (= 0.12.1-1.3),
+ libjson-glib-1.0-0 (= 1.4.2-3),
+ libjson-glib-1.0-common (= 1.4.2-3),
+ libk5crypto3 (= 1.16-2),
+ libkeyutils1 (= 1.5.9-9.2),
+ libkmod2 (= 25-1),
+ libkpathsea6 (= 2017.20170613.44572-8+b2),
+ libkrb5-3 (= 1.16-2),
+ libkrb5support0 (= 1.16-2),
+ liblab-gamut1 (= 2.40.1-3),
+ liblcms2-2 (= 2.9-1),
+ liblqr-1-0 (= 0.4.2-2.1),
+ liblsan0 (= 8-20180402-1),
+ libltdl7 (= 2.4.6-2),
+ liblz4-1 (= 1.8.1.2-1),
+ liblzma5 (= 5.2.2-1.3),
+ libmagic-mgc (= 1:5.32-2),
+ libmagic1 (= 1:5.32-2),
+ libmagickcore-6.q16-5 (= 8:6.9.9.39+dfsg-1),
+ libmagickwand-6.q16-5 (= 8:6.9.9.39+dfsg-1),
+ libmount1 (= 2.31.1-0.5),
+ libmpc3 (= 1.1.0-1),
+ libmpdec2 (= 2.4.2-1),
+ libmpfr6 (= 4.0.1-1),
+ libmpx2 (= 8-20180402-1),
+ libncurses5 (= 6.1-1),
+ libncursesw5 (= 6.1-1),
+ libnettle6 (= 3.4-1),
+ libnih-dbus1 (= 1.0.3-10+b1),
+ libnih1 (= 1.0.3-10+b1),
+ libnspr4 (= 2:4.19-1),
+ libnss3 (= 2:3.36.1-1),
+ libopenjp2-7 (= 2.3.0-1),
+ libp11-kit0 (= 0.23.10-2),
+ libpam-modules (= 1.1.8-3.7),
+ libpam-modules-bin (= 1.1.8-3.7),
+ libpam-runtime (= 1.1.8-3.7),
+ libpam-systemd (= 238-4),
+ libpam0g (= 1.1.8-3.7),
+ libpango-1.0-0 (= 1.42.1-1),
+ libpangocairo-1.0-0 (= 1.42.1-1),
+ libpangoft2-1.0-0 (= 1.42.1-1),
+ libpaper-utils (= 1.1.24+nmu5),
+ libpaper1 (= 1.1.24+nmu5),
+ libpathplan4 (= 2.40.1-3),
+ libpcre3 (= 2:8.39-9),
+ libperl5.26 (= 5.26.1-5),
+ libpipeline1 (= 1.5.0-1),
+ libpixman-1-0 (= 0.34.0-2),
+ libpng16-16 (= 1.6.34-1),
+ libpoppler73 (= 0.62.0-2),
+ libpotrace0 (= 1.14-2),
+ libprocps6 (= 2:3.3.14-1),
+ libproxy1v5 (= 0.4.15-1),
+ libptexenc1 (= 2017.20170613.44572-8+b2),
+ libpython-stdlib (= 2.7.14-4),
+ libpython2.7-minimal (= 2.7.14-8),
+ libpython2.7-stdlib (= 2.7.14-8),
+ libpython3-stdlib (= 3.6.5-3),
+ libpython3.6-minimal (= 3.6.5-3),
+ libpython3.6-stdlib (= 3.6.5-3),
+ libquadmath0 (= 8-20180402-1),
+ libreadline7 (= 7.0-3),
+ librest-0.7-0 (= 0.8.0-2),
+ librsvg2-2 (= 2.40.20-2),
+ librsvg2-bin (= 2.40.20-2),
+ librsvg2-common (= 2.40.20-2),
+ libseccomp2 (= 2.3.1-2.1),
+ libselinux1 (= 2.7-2+b2),
+ libsemanage-common (= 2.7-2),
+ libsemanage1 (= 2.7-2+b2),
+ libsepol1 (= 2.7-1),
+ libsigsegv2 (= 2.12-2),
+ libsm6 (= 2:1.2.2-1+b3),
+ libsmartcols1 (= 2.31.1-0.5),
+ libsoup-gnome2.4-1 (= 2.62.1-1),
+ libsoup2.4-1 (= 2.62.1-1),
+ libsqlite3-0 (= 3.23.1-1),
+ libss2 (= 1.44.1-2),
+ libssl1.1 (= 1.1.0h-2),
+ libstdc++-7-dev (= 7.3.0-16),
+ libstdc++6 (= 8-20180402-1),
+ libsynctex1 (= 2017.20170613.44572-8+b2),
+ libsystemd0 (= 238-4),
+ libtasn1-6 (= 4.13-2),
+ libtexlua52 (= 2017.20170613.44572-8+b2),
+ libtexluajit2 (= 2017.20170613.44572-8+b2),
+ libtext-unidecode-perl (= 1.30-1),
+ libthai-data (= 0.1.27-2),
+ libthai0 (= 0.1.27-2),
+ libtiff5 (= 4.0.9-4),
+ libtimedate-perl (= 2.3000-2),
+ libtinfo5 (= 6.1-1),
+ libtool (= 2.4.6-2),
+ libtsan0 (= 8-20180402-1),
+ libubsan0 (= 7.3.0-16),
+ libudev1 (= 238-4),
+ libunistring2 (= 0.9.8-1),
+ libuuid1 (= 2.31.1-0.5),
+ libwayland-client0 (= 1.14.0-2),
+ libwayland-cursor0 (= 1.14.0-2),
+ libwayland-egl1-mesa (= 17.3.8-1),
+ libwayland-server0 (= 1.14.0-2),
+ libwebp6 (= 0.6.1-2),
+ libx11-6 (= 2:1.6.5-1),
+ libx11-data (= 2:1.6.5-1),
+ libx11-xcb1 (= 2:1.6.5-1),
+ libxau6 (= 1:1.0.8-1+b2),
+ libxaw7 (= 2:1.0.13-1+b2),
+ libxcb-dri2-0 (= 1.13-1),
+ libxcb-dri3-0 (= 1.13-1),
+ libxcb-present0 (= 1.13-1),
+ libxcb-render0 (= 1.13-1),
+ libxcb-shm0 (= 1.13-1),
+ libxcb-sync1 (= 1.13-1),
+ libxcb-xfixes0 (= 1.13-1),
+ libxcb1 (= 1.13-1),
+ libxcomposite1 (= 1:0.4.4-2),
+ libxcursor1 (= 1:1.1.15-1),
+ libxdamage1 (= 1:1.1.4-3),
+ libxdmcp6 (= 1:1.1.2-3),
+ libxdot4 (= 2.40.1-3),
+ libxext6 (= 2:1.3.3-1+b2),
+ libxfixes3 (= 1:5.0.3-1),
+ libxi6 (= 2:1.7.9-1),
+ libxinerama1 (= 2:1.1.3-1+b3),
+ libxkbcommon0 (= 0.8.0-1),
+ libxml-libxml-perl (= 2.0128+dfsg-5),
+ libxml-namespacesupport-perl (= 1.12-1),
+ libxml-sax-base-perl (= 1.09-1),
+ libxml-sax-perl (= 1.00+dfsg-1),
+ libxml2 (= 2.9.4+dfsg1-6.1),
+ libxmu6 (= 2:1.1.2-2),
+ libxpm4 (= 1:3.5.12-1),
+ libxrandr2 (= 2:1.5.1-1),
+ libxrender1 (= 1:0.9.10-1),
+ libxshmfence1 (= 1.3-1),
+ libxt6 (= 1:1.1.5-1),
+ libzzip-0-13 (= 0.13.62-3.1),
+ linux-libc-dev (= 4.15.11-1),
+ login (= 1:4.5-1),
+ lsb-base (= 9.20170808),
+ m4 (= 1.4.18-1),
+ make (= 4.2.1-1),
+ man-db (= 2.8.3-2),
+ mawk (= 1.3.3-17+b3),
+ mime-support (= 3.60),
+ mount (= 2.31.1-0.5),
+ ncurses-base (= 6.1-1),
+ ncurses-bin (= 6.1-1),
+ openssl (= 1.1.0h-2),
+ passwd (= 1:4.5-1),
+ patch (= 2.7.6-2),
+ perl (= 5.26.1-5),
+ perl-base (= 5.26.1-5),
+ perl-modules-5.26 (= 5.26.1-5),
+ po-debconf (= 1.0.20),
+ poppler-data (= 0.4.8-2),
+ preview-latex-style (= 11.91-1),
+ procps (= 2:3.3.14-1),
+ python (= 2.7.14-4),
+ python-alabaster (= 0.7.8-1),
+ python-all (= 2.7.14-4),
+ python-attr (= 17.4.0-2),
+ python-babel (= 2.4.0+dfsg.1-2),
+ python-babel-localedata (= 2.4.0+dfsg.1-2),
+ python-certifi (= 2018.1.18-3),
+ python-chardet (= 3.0.4-1),
+ python-docutils (= 0.14+dfsg-3),
+ python-enum34 (= 1.1.6-2),
+ python-funcsigs (= 1.0.2-4),
+ python-html5lib (= 0.999999999-1),
+ python-idna (= 2.6-1),
+ python-imagesize (= 0.7.1-1),
+ python-jinja2 (= 2.10-1),
+ python-markupsafe (= 1.0-1+b1),
+ python-minimal (= 2.7.14-4),
+ python-mock (= 2.0.0-3),
+ python-packaging (= 17.1-1),
+ python-pbr (= 3.1.1-4),
+ python-pkg-resources (= 39.0.1-2),
+ python-pluggy (= 0.6.0-1),
+ python-py (= 1.5.3-1),
+ python-pygments (= 2.2.0+dfsg-1),
+ python-pyparsing (= 2.2.0+dfsg1-2),
+ python-pytest (= 3.3.2-2),
+ python-requests (= 2.18.4-2),
+ python-roman (= 2.0.0-3),
+ python-setuptools (= 39.0.1-2),
+ python-six (= 1.11.0-2),
+ python-typing (= 3.6.4-1),
+ python-tz (= 2018.4-1),
+ python-urllib3 (= 1.22-1),
+ python-webencodings (= 0.5-2),
+ python2.7 (= 2.7.14-8),
+ python2.7-minimal (= 2.7.14-8),
+ python3 (= 3.6.5-3),
+ python3-alabaster (= 0.7.8-1),
+ python3-all (= 3.6.5-3),
+ python3-attr (= 17.4.0-2),
+ python3-babel (= 2.4.0+dfsg.1-2),
+ python3-certifi (= 2018.1.18-3),
+ python3-chardet (= 3.0.4-1),
+ python3-distutils (= 3.6.5-3),
+ python3-docutils (= 0.14+dfsg-3),
+ python3-html5lib (= 0.999999999-1),
+ python3-idna (= 2.6-1),
+ python3-imagesize (= 0.7.1-1),
+ python3-jinja2 (= 2.10-1),
+ python3-lib2to3 (= 3.6.5-3),
+ python3-markupsafe (= 1.0-1+b1),
+ python3-minimal (= 3.6.5-3),
+ python3-mock (= 2.0.0-3),
+ python3-packaging (= 17.1-1),
+ python3-pbr (= 3.1.1-4),
+ python3-pkg-resources (= 39.0.1-2),
+ python3-pluggy (= 0.6.0-1),
+ python3-py (= 1.5.3-1),
+ python3-pygments (= 2.2.0+dfsg-1),
+ python3-pyparsing (= 2.2.0+dfsg1-2),
+ python3-pytest (= 3.3.2-2),
+ python3-requests (= 2.18.4-2),
+ python3-roman (= 2.0.0-3),
+ python3-setuptools (= 39.0.1-2),
+ python3-six (= 1.11.0-2),
+ python3-sphinx (= 1.6.7-2),
+ python3-sphinxcontrib.websupport (= 1.0.1-2),
+ python3-tz (= 2018.4-1),
+ python3-urllib3 (= 1.22-1),
+ python3-webencodings (= 0.5-2),
+ python3.6 (= 3.6.5-3),
+ python3.6-minimal (= 3.6.5-3),
+ readline-common (= 7.0-3),
+ sed (= 4.4-2),
+ sensible-utils (= 0.0.12),
+ sgml-base (= 1.29),
+ shared-mime-info (= 1.9-2),
+ sphinx-common (= 1.6.7-2),
+ systemd (= 238-4),
+ systemd-shim (= 10-3),
+ sysvinit-utils (= 2.88dsf-59.10),
+ t1utils (= 1.41-2),
+ tar (= 1.29b-2),
+ tex-common (= 6.09),
+ texinfo (= 6.5.0.dfsg.1-2),
+ texlive-base (= 2017.20180305-1),
+ texlive-binaries (= 2017.20170613.44572-8+b2),
+ texlive-fonts-recommended (= 2017.20180305-1),
+ texlive-latex-base (= 2017.20180305-1),
+ texlive-latex-extra (= 2017.20180305-2),
+ texlive-latex-recommended (= 2017.20180305-1),
+ texlive-luatex (= 2017.20180305-1),
+ texlive-pictures (= 2017.20180305-1),
+ texlive-xetex (= 2017.20180305-1),
+ tipa (= 2:1.3-20),
+ tzdata (= 2018d-1),
+ ucf (= 3.0038),
+ util-linux (= 2.31.1-0.5),
+ x11-common (= 1:7.7+19),
+ xdg-utils (= 1.1.2-2),
+ xkb-data (= 2.23.1-1),
+ xml-core (= 0.18),
+ xz-utils (= 5.2.2-1.3),
+ zlib1g (= 1:1.2.8.dfsg-5)
+Environment:
+ DEB_BUILD_OPTIONS="parallel=9"
+ DEB_BUILD_PROFILES=""
+ SOURCE_DATE_EPOCH="1523656345"
diff --git a/test/debsign/sphinx_1.7.2-1_amd64.changes b/test/debsign/sphinx_1.7.2-1_amd64.changes
new file mode 100644
index 0000000..e3dcdc4
--- /dev/null
+++ b/test/debsign/sphinx_1.7.2-1_amd64.changes
@@ -0,0 +1,54 @@
+Format: 1.8
+Date: Fri, 13 Apr 2018 22:52:25 +0100
+Source: sphinx
+Binary: python-sphinx python3-sphinx sphinx-common sphinx-doc libjs-sphinxdoc
+Architecture: source all
+Version: 1.7.2-1
+Distribution: UNRELEASED
+Urgency: medium
+Maintainer: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
+Changed-By: Chris Lamb <lamby@debian.org>
+Description:
+ libjs-sphinxdoc - JavaScript support for Sphinx documentation
+ python-sphinx - documentation generator for Python projects (implemented in Pytho
+ python3-sphinx - documentation generator for Python projects (implemented in Pytho
+ sphinx-common - documentation generator for Python projects - common data
+ sphinx-doc - documentation generator for Python projects - documentation
+Changes:
+ sphinx (1.7.2-1) UNRELEASED; urgency=medium
+ .
+ [ Chris Lamb ]
+ * New upstream release.
+ .
+ [ Dmitry Shachnev ]
+ * Merge 1.6.7-2 upload from unstable.
+Checksums-Sha1:
+ 8c7ad722576ad1a475691020ca2320b1040dc203 2871 sphinx_1.7.2-1.dsc
+ 1d1fa6954ae216cd44ea52dfc67063f26939c8f5 4719536 sphinx_1.7.2.orig.tar.gz
+ facfa686a3a0bc98c269e16e66427f96e00889ad 34268 sphinx_1.7.2-1.debian.tar.xz
+ 36a42125afd83731e05596d7037314399622e400 88720 libjs-sphinxdoc_1.7.2-1_all.deb
+ 8c2ecdf4e4ffd1f4880b486e53c99207c4d69dbc 443380 python-sphinx_1.7.2-1_all.deb
+ e518d97dceb77d827734d48ac02313fc0ed4b08c 441676 python3-sphinx_1.7.2-1_all.deb
+ 01e65d2e2c45121e06aff6f46427d6a31251e67c 432892 sphinx-common_1.7.2-1_all.deb
+ 8bec16b4db2ddf6776f7cfdcf04cd07fe32269ed 1198352 sphinx-doc_1.7.2-1_all.deb
+ 9dd0efdf2ff555e9c8122012ad44bc6c5db53596 14355 sphinx_1.7.2-1_amd64.buildinfo
+Checksums-Sha256:
+ 52d1d62f68aa9bab1504a0491faf6f4de7658ccc3c65e40871b894ad1ce504ed 2871 sphinx_1.7.2-1.dsc
+ 5a1c9a0fec678c24b9a2f5afba240c04668edb7f45c67ce2ed008996b3f21ae2 4719536 sphinx_1.7.2.orig.tar.gz
+ a6a825914b19cfdbc22df858b0cecc497765dad2058deae20a88a6a2f9d57d24 34268 sphinx_1.7.2-1.debian.tar.xz
+ c6267177819e0a27b8f9296b1d5106e253e84cf0722fbdf8d2bff489befb81d8 88720 libjs-sphinxdoc_1.7.2-1_all.deb
+ c55dc8f59798a835e6f78adfd95d73f9cf3382e440cdf96b2edbdb1990280f23 443380 python-sphinx_1.7.2-1_all.deb
+ 3f2b279b572d2fc36d9cc84c9fcded242ed930d42350e1d980c4aed45ee4ae2a 441676 python3-sphinx_1.7.2-1_all.deb
+ ece661af9ca87723169f48e68a45af0b5157da4b724a185b99ef42ed22e5f378 432892 sphinx-common_1.7.2-1_all.deb
+ 67722aa0934b9ebce8a870a34542104017491766c2515665c07128ad46b4e6b7 1198352 sphinx-doc_1.7.2-1_all.deb
+ 2b70197cc0cc88a48776fd266c501546819055f4c5c85d845bcb0f621b4789fe 14355 sphinx_1.7.2-1_amd64.buildinfo
+Files:
+ e6d086f0f2453055bab4ba6677f6af3f 2871 python optional sphinx_1.7.2-1.dsc
+ 21a08e994e6a289ed14eecefde2b4f2f 4719536 python optional sphinx_1.7.2.orig.tar.gz
+ e147e2afa47e7e58d1288ad8818c3de0 34268 python optional sphinx_1.7.2-1.debian.tar.xz
+ 4a4df0c2ce6f087414a5dc5802885fd2 88720 javascript optional libjs-sphinxdoc_1.7.2-1_all.deb
+ 15b065a197e938715bf501b33066adf2 443380 python optional python-sphinx_1.7.2-1_all.deb
+ 942189b1dd93faa36faa3552a9d40042 441676 python optional python3-sphinx_1.7.2-1_all.deb
+ f6a5889bd4e807800239721d365a5f62 432892 python optional sphinx-common_1.7.2-1_all.deb
+ 86497c90b6cda029576933778357004e 1198352 doc optional sphinx-doc_1.7.2-1_all.deb
+ a7a033cc426d486daf5bea22dab538cb 14355 python optional sphinx_1.7.2-1_amd64.buildinfo
diff --git a/test/lib_test_uscan b/test/lib_test_uscan
new file mode 100644
index 0000000..f0a1067
--- /dev/null
+++ b/test/lib_test_uscan
@@ -0,0 +1,130 @@
+#!/bin/bash
+
+# Copyright (C) 2018, Xavier <yadd@debian.org>
+#
+# 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.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+echo '======================================================================='
+echo "*** uscan $TESTTYPE test ***"
+echo '======================================================================='
+
+test_dir=$(readlink -f "${0%/*}")
+
+# Operation mode
+if test "${1:-}" = --installed; then
+ shift
+else
+ top_srcdir=$(readlink -f "${0%/*}/..")
+ make -C "$top_srcdir/scripts" uscan mk-origtargz uupdate debchange
+ PATH="$top_srcdir/scripts:$PATH"
+ export PATH
+ PERL5LIB="$top_srcdir/lib"
+ export PERL5LIB
+fi
+
+GPGHOME=$(mktemp -d -t gpg.XXXXX)
+
+GPG=gpg
+if ! command -v $GPG >/dev/null 2>&1; then
+ echo "$GPG missing"
+ GPG=gpg2
+ if ! command -v $GPG >/dev/null 2>&1; then
+ echo "$GPG missing"
+ exit 1
+ fi
+fi
+
+PRIVATE_KEY=$test_dir/uscan/PRIVATE_KEY.asc
+PUBLIC_KEY=$test_dir/uscan/PUBLIC_KEY.asc
+PRIVATE_KEYRING=$GPGHOME/secring.gpg
+PUBLIC_KEYRING=$GPGHOME/pubring.gpg
+
+# magic function that pipes stdout and stderr into a pipe, and prints it only
+# on command failure.
+# This uses a pipe, so it has limited capacity. Do not use it with stuff
+# outputting too much data.
+chronic_sh (){
+ local pipe pipe_q
+ pipe=$(mktemp -p "$SHUNIT_TMPDIR" devscripts_chronic_sh.XXXXXXXXXX)
+ printf -v pipe_q '%q' "$pipe"
+ trap 'rm -fv '"$pipe_q" RETURN
+ # one can't open a reading fd and a writing fd without blocking, because
+ # they want to already have something on the other side of the pipe.
+ # the temporary fd 5 will be that something.
+ exec 5<>"$pipe" # hack
+ exec 3>"$pipe" # writing fd
+ exec 4<"$pipe" # reading fd
+ exec 5>&- # end hack
+ rm "$pipe"
+
+ local ret=0
+ "$@" >&3 2>&3 || ret=$?
+ if [ "$ret" -ne 0 ] ; then
+ exec 3>&-
+ cat <&4-
+ return $ret
+ fi
+}
+
+oneTimeSetUp () {
+ chronic_sh $GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --output "$PRIVATE_KEYRING" --dearmor "$PRIVATE_KEY"
+
+ chronic_sh $GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --output "$PUBLIC_KEYRING" --dearmor "$PUBLIC_KEY"
+
+ echo "Using test gpg key:"
+ $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --secret-keyring "$PRIVATE_KEYRING" --default-key \
+ CF218F0E7EABF584B7E20402C77E2D6872543FAF \
+ --list-keys --verbose
+
+ export GNUPGHOME=$GPGHOME
+}
+
+oneTimeTearDown () {
+ gpgconf --homedir "$GPGHOME" --verbose --kill gpg-agent
+ rm -rf "$GPGHOME"
+}
+
+spawnHttpServer () {
+ unset http_proxy
+ local pid
+ [ -n "$TEMP_PKG_DIR" ] || fail "unexpected testsuite error"
+ (
+ mkdir -p "$TEMP_PKG_DIR"/repo
+ cd "$TEMP_PKG_DIR"/repo || exit 1
+ python3 "$test_dir/uscan/httpserver.py" 2>log &
+ pid=$!
+ echo "$pid" > pid
+ while ! [ -s port ]; do
+ sleep 2s
+ if ! kill -0 "$pid" 2> /dev/null ; then
+ echo "The HTTP server returned an error:"
+ cat log
+ exit 1
+ fi
+ done
+ )
+}
+
+killHttpServer () {
+ if [ -n "${TEMP_PKG_DIR:-}" ] && [ -f "$TEMP_PKG_DIR/repo/pid" ]; then
+ local pid
+ pid=$(< "$TEMP_PKG_DIR/repo/pid")
+ kill -9 "$pid"
+ rm -rf "$TEMP_PKG_DIR"
+ unset TEMP_PKG_DIR
+ fi
+}
diff --git a/test/mass-bug/one-package b/test/mass-bug/one-package
new file mode 100644
index 0000000..d160fd7
--- /dev/null
+++ b/test/mass-bug/one-package
@@ -0,0 +1 @@
+test-package_1.2-3
diff --git a/test/mass-bug/packages b/test/mass-bug/packages
new file mode 100644
index 0000000..476d758
--- /dev/null
+++ b/test/mass-bug/packages
@@ -0,0 +1,4 @@
+native-package_1.0
+upstream-package_1.2-3
+epoch-native-package_1:2.3
+epoch-package_1:2.3-4.5
diff --git a/test/mass-bug/template b/test/mass-bug/template
new file mode 100644
index 0000000..5955bf2
--- /dev/null
+++ b/test/mass-bug/template
@@ -0,0 +1,20 @@
+#PACKAGE# has a bug. Please fix.
+
+This long line gets word-wrapped because text/plain; format=flowed never really took off.
+
+These short lines
+also get
+wrapped.
+
+#PACKAGE# version=#VERSION#
+
+#PACKAGE# epoch=#EPOCH#
+
+#PACKAGE# upstream=#UPSTREAM_VERSION#
+
+#PACKAGE# revision=#REVISION#
+
+#PACKAGE# reassembled=#EPOCH##UPSTREAM_VERSION##REVISION#
+
+--
+This signature does not get word-wrapped because it is a signature, even though it is longer than a line ought to be.
diff --git a/test/mergechanges/different-description.changes b/test/mergechanges/different-description.changes
new file mode 100644
index 0000000..92e8261
--- /dev/null
+++ b/test/mergechanges/different-description.changes
@@ -0,0 +1,41 @@
+Format: 1.8
+Date: Sat, 26 Jan 2019 18:31:50 +0000
+Source: xdg-desktop-portal
+Binary: xdg-desktop-portal-dev
+Architecture: all
+Version: 1.2.0-1
+Distribution: unstable
+Urgency: medium
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Changed-By: Simon McVittie <smcv@debian.org>
+Description:
+ xdg-desktop-portal-dev - this Description is different
+Changes:
+ xdg-desktop-portal (1.2.0-1) unstable; urgency=medium
+ .
+ [ Simon McVittie ]
+ * New upstream stable release
+ * d/watch: Only watch for stable releases
+ * d/p/Revert-Stop-building-the-icon-validator.patch,
+ d/p/validate-icon-Add-a-define-for-bwrap.patch,
+ d/p/Replace-the-icon-validator-with-the-one-from-Flatpak-git-.patch:
+ Build a copy of the icon validator from Flatpak git master.
+ We don't want to rely on a version of Flatpak that isn't
+ stable yet.
+ - d/p/notification-Handle-non-existing-directories.patch,
+ d/p/notification-bind-mount-etc-ld.so.cache-to-the-sandbox.patch:
+ Remove, no longer necessary
+ * d/upstream/metadata: Add DEP-12 metadata
+ * Release to unstable
+ .
+ [ Jeremy Bicha ]
+ * Don't enable remote desktop support on Ubuntu. See LP bug 1802533
+Checksums-Sha1:
+ 3c23c6796524c189e84e0196eb044f52f8fe917d 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 62d26daeb56e96ff6639ff2ef0af18340ae7a605 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Checksums-Sha256:
+ f98a6c57e6b932d7c6bf8e38949f57206f4c6ded0156b0afaaebfc89d7d5b443 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 3552acdfb12d65e325bd161bad6446185851defe83ecfa1562294cbf48615e59 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Files:
+ 16c46d8c8dc3f185d9aaaf4c43bcb97d 38992 admin optional xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 5996887565ed2ec3a64280fbf1a29e13 9179 admin optional xdg-desktop-portal_1.2.0-1_all.buildinfo
diff --git a/test/mergechanges/different-source.changes b/test/mergechanges/different-source.changes
new file mode 100644
index 0000000..f82e7cc
--- /dev/null
+++ b/test/mergechanges/different-source.changes
@@ -0,0 +1,41 @@
+Format: 1.8
+Date: Sat, 26 Jan 2019 18:31:50 +0000
+Source: this-source-is-different
+Binary: xdg-desktop-portal-dev
+Architecture: all
+Version: 1.2.0-1
+Distribution: unstable
+Urgency: medium
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Changed-By: Simon McVittie <smcv@debian.org>
+Description:
+ xdg-desktop-portal-dev - desktop integration portal - development files
+Changes:
+ xdg-desktop-portal (1.2.0-1) unstable; urgency=medium
+ .
+ [ Simon McVittie ]
+ * New upstream stable release
+ * d/watch: Only watch for stable releases
+ * d/p/Revert-Stop-building-the-icon-validator.patch,
+ d/p/validate-icon-Add-a-define-for-bwrap.patch,
+ d/p/Replace-the-icon-validator-with-the-one-from-Flatpak-git-.patch:
+ Build a copy of the icon validator from Flatpak git master.
+ We don't want to rely on a version of Flatpak that isn't
+ stable yet.
+ - d/p/notification-Handle-non-existing-directories.patch,
+ d/p/notification-bind-mount-etc-ld.so.cache-to-the-sandbox.patch:
+ Remove, no longer necessary
+ * d/upstream/metadata: Add DEP-12 metadata
+ * Release to unstable
+ .
+ [ Jeremy Bicha ]
+ * Don't enable remote desktop support on Ubuntu. See LP bug 1802533
+Checksums-Sha1:
+ 3c23c6796524c189e84e0196eb044f52f8fe917d 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 62d26daeb56e96ff6639ff2ef0af18340ae7a605 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Checksums-Sha256:
+ f98a6c57e6b932d7c6bf8e38949f57206f4c6ded0156b0afaaebfc89d7d5b443 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 3552acdfb12d65e325bd161bad6446185851defe83ecfa1562294cbf48615e59 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Files:
+ 16c46d8c8dc3f185d9aaaf4c43bcb97d 38992 admin optional xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 5996887565ed2ec3a64280fbf1a29e13 9179 admin optional xdg-desktop-portal_1.2.0-1_all.buildinfo
diff --git a/test/mergechanges/different-version.changes b/test/mergechanges/different-version.changes
new file mode 100644
index 0000000..c0a6aab
--- /dev/null
+++ b/test/mergechanges/different-version.changes
@@ -0,0 +1,41 @@
+Format: 1.8
+Date: Sat, 26 Jan 2019 18:31:50 +0000
+Source: xdg-desktop-portal
+Binary: xdg-desktop-portal-dev
+Architecture: all
+Version: 1.2.0-1~different
+Distribution: unstable
+Urgency: medium
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Changed-By: Simon McVittie <smcv@debian.org>
+Description:
+ xdg-desktop-portal-dev - desktop integration portal - development files
+Changes:
+ xdg-desktop-portal (1.2.0-1) unstable; urgency=medium
+ .
+ [ Simon McVittie ]
+ * New upstream stable release
+ * d/watch: Only watch for stable releases
+ * d/p/Revert-Stop-building-the-icon-validator.patch,
+ d/p/validate-icon-Add-a-define-for-bwrap.patch,
+ d/p/Replace-the-icon-validator-with-the-one-from-Flatpak-git-.patch:
+ Build a copy of the icon validator from Flatpak git master.
+ We don't want to rely on a version of Flatpak that isn't
+ stable yet.
+ - d/p/notification-Handle-non-existing-directories.patch,
+ d/p/notification-bind-mount-etc-ld.so.cache-to-the-sandbox.patch:
+ Remove, no longer necessary
+ * d/upstream/metadata: Add DEP-12 metadata
+ * Release to unstable
+ .
+ [ Jeremy Bicha ]
+ * Don't enable remote desktop support on Ubuntu. See LP bug 1802533
+Checksums-Sha1:
+ 3c23c6796524c189e84e0196eb044f52f8fe917d 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 62d26daeb56e96ff6639ff2ef0af18340ae7a605 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Checksums-Sha256:
+ f98a6c57e6b932d7c6bf8e38949f57206f4c6ded0156b0afaaebfc89d7d5b443 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 3552acdfb12d65e325bd161bad6446185851defe83ecfa1562294cbf48615e59 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Files:
+ 16c46d8c8dc3f185d9aaaf4c43bcb97d 38992 admin optional xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 5996887565ed2ec3a64280fbf1a29e13 9179 admin optional xdg-desktop-portal_1.2.0-1_all.buildinfo
diff --git a/test/mergechanges/format-1.7.changes b/test/mergechanges/format-1.7.changes
new file mode 100644
index 0000000..81d563c
--- /dev/null
+++ b/test/mergechanges/format-1.7.changes
@@ -0,0 +1,41 @@
+Format: 1.7
+Date: Sat, 26 Jan 2019 18:31:50 +0000
+Source: xdg-desktop-portal
+Binary: xdg-desktop-portal-dev
+Architecture: all
+Version: 1.2.0-1
+Distribution: unstable
+Urgency: medium
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Changed-By: Simon McVittie <smcv@debian.org>
+Description:
+ xdg-desktop-portal-dev - desktop integration portal - development files
+Changes:
+ xdg-desktop-portal (1.2.0-1) unstable; urgency=medium
+ .
+ [ Simon McVittie ]
+ * New upstream stable release
+ * d/watch: Only watch for stable releases
+ * d/p/Revert-Stop-building-the-icon-validator.patch,
+ d/p/validate-icon-Add-a-define-for-bwrap.patch,
+ d/p/Replace-the-icon-validator-with-the-one-from-Flatpak-git-.patch:
+ Build a copy of the icon validator from Flatpak git master.
+ We don't want to rely on a version of Flatpak that isn't
+ stable yet.
+ - d/p/notification-Handle-non-existing-directories.patch,
+ d/p/notification-bind-mount-etc-ld.so.cache-to-the-sandbox.patch:
+ Remove, no longer necessary
+ * d/upstream/metadata: Add DEP-12 metadata
+ * Release to unstable
+ .
+ [ Jeremy Bicha ]
+ * Don't enable remote desktop support on Ubuntu. See LP bug 1802533
+Checksums-Sha1:
+ 3c23c6796524c189e84e0196eb044f52f8fe917d 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 62d26daeb56e96ff6639ff2ef0af18340ae7a605 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Checksums-Sha256:
+ f98a6c57e6b932d7c6bf8e38949f57206f4c6ded0156b0afaaebfc89d7d5b443 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 3552acdfb12d65e325bd161bad6446185851defe83ecfa1562294cbf48615e59 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Files:
+ 16c46d8c8dc3f185d9aaaf4c43bcb97d 38992 admin optional xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 5996887565ed2ec3a64280fbf1a29e13 9179 admin optional xdg-desktop-portal_1.2.0-1_all.buildinfo
diff --git a/test/mergechanges/linux_4.9.161-1_amd64.changes b/test/mergechanges/linux_4.9.161-1_amd64.changes
new file mode 100644
index 0000000..1ff9a65
--- /dev/null
+++ b/test/mergechanges/linux_4.9.161-1_amd64.changes
@@ -0,0 +1,2016 @@
+Format: 1.8
+Date: Wed, 27 Feb 2019 22:21:01 +0100
+Source: linux
+Binary: linux-source-4.9 linux-support-4.9.0-9 linux-doc-4.9 linux-manual-4.9 linux-kbuild-4.9 linux-cpupower libcpupower1 libcpupower-dev linux-perf-4.9 libusbip-dev usbip hyperv-daemons linux-headers-4.9.0-9-common linux-headers-4.9.0-9-common-rt linux-libc-dev linux-headers-4.9.0-9-all linux-headers-4.9.0-9-all-alpha kernel-image-4.9.0-9-alpha-generic-di nic-modules-4.9.0-9-alpha-generic-di nic-wireless-modules-4.9.0-9-alpha-generic-di nic-shared-modules-4.9.0-9-alpha-generic-di serial-modules-4.9.0-9-alpha-generic-di usb-serial-modules-4.9.0-9-alpha-generic-di ppp-modules-4.9.0-9-alpha-generic-di pata-modules-4.9.0-9-alpha-generic-di cdrom-core-modules-4.9.0-9-alpha-generic-di scsi-core-modules-4.9.0-9-alpha-generic-di scsi-modules-4.9.0-9-alpha-generic-di loop-modules-4.9.0-9-alpha-generic-di btrfs-modules-4.9.0-9-alpha-generic-di ext4-modules-4.9.0-9-alpha-generic-di isofs-modules-4.9.0-9-alpha-generic-di jfs-modules-4.9.0-9-alpha-generic-di
+ xfs-modules-4.9.0-9-alpha-generic-di fat-modules-4.9.0-9-alpha-generic-di md-modules-4.9.0-9-alpha-generic-di multipath-modules-4.9.0-9-alpha-generic-di usb-modules-4.9.0-9-alpha-generic-di usb-storage-modules-4.9.0-9-alpha-generic-di fb-modules-4.9.0-9-alpha-generic-di input-modules-4.9.0-9-alpha-generic-di event-modules-4.9.0-9-alpha-generic-di mouse-modules-4.9.0-9-alpha-generic-di nic-pcmcia-modules-4.9.0-9-alpha-generic-di pcmcia-modules-4.9.0-9-alpha-generic-di nic-usb-modules-4.9.0-9-alpha-generic-di sata-modules-4.9.0-9-alpha-generic-di crc-modules-4.9.0-9-alpha-generic-di crypto-modules-4.9.0-9-alpha-generic-di crypto-dm-modules-4.9.0-9-alpha-generic-di ata-modules-4.9.0-9-alpha-generic-di nbd-modules-4.9.0-9-alpha-generic-di squashfs-modules-4.9.0-9-alpha-generic-di virtio-modules-4.9.0-9-alpha-generic-di zlib-modules-4.9.0-9-alpha-generic-di fuse-modules-4.9.0-9-alpha-generic-di srm-modules-4.9.0-9-alpha-generic-di linux-image-4.9.0-9-alpha-generic
+ linux-headers-4.9.0-9-alpha-generic linux-image-4.9.0-9-alpha-generic-dbg linux-image-4.9.0-9-alpha-smp linux-headers-4.9.0-9-alpha-smp linux-image-4.9.0-9-alpha-smp-dbg linux-headers-4.9.0-9-all-amd64 kernel-image-4.9.0-9-amd64-di nic-modules-4.9.0-9-amd64-di nic-wireless-modules-4.9.0-9-amd64-di nic-shared-modules-4.9.0-9-amd64-di serial-modules-4.9.0-9-amd64-di usb-serial-modules-4.9.0-9-amd64-di ppp-modules-4.9.0-9-amd64-di pata-modules-4.9.0-9-amd64-di cdrom-core-modules-4.9.0-9-amd64-di firewire-core-modules-4.9.0-9-amd64-di scsi-core-modules-4.9.0-9-amd64-di scsi-modules-4.9.0-9-amd64-di loop-modules-4.9.0-9-amd64-di btrfs-modules-4.9.0-9-amd64-di ext4-modules-4.9.0-9-amd64-di isofs-modules-4.9.0-9-amd64-di jfs-modules-4.9.0-9-amd64-di ntfs-modules-4.9.0-9-amd64-di xfs-modules-4.9.0-9-amd64-di fat-modules-4.9.0-9-amd64-di md-modules-4.9.0-9-amd64-di multipath-modules-4.9.0-9-amd64-di usb-modules-4.9.0-9-amd64-di usb-storage-modules-4.9.0-9-amd64-di
+ pcmcia-storage-modules-4.9.0-9-amd64-di fb-modules-4.9.0-9-amd64-di input-modules-4.9.0-9-amd64-di event-modules-4.9.0-9-amd64-di mouse-modules-4.9.0-9-amd64-di nic-pcmcia-modules-4.9.0-9-amd64-di pcmcia-modules-4.9.0-9-amd64-di nic-usb-modules-4.9.0-9-amd64-di sata-modules-4.9.0-9-amd64-di acpi-modules-4.9.0-9-amd64-di i2c-modules-4.9.0-9-amd64-di crc-modules-4.9.0-9-amd64-di crypto-modules-4.9.0-9-amd64-di crypto-dm-modules-4.9.0-9-amd64-di efi-modules-4.9.0-9-amd64-di ata-modules-4.9.0-9-amd64-di mmc-core-modules-4.9.0-9-amd64-di mmc-modules-4.9.0-9-amd64-di nbd-modules-4.9.0-9-amd64-di squashfs-modules-4.9.0-9-amd64-di speakup-modules-4.9.0-9-amd64-di virtio-modules-4.9.0-9-amd64-di uinput-modules-4.9.0-9-amd64-di sound-modules-4.9.0-9-amd64-di hyperv-modules-4.9.0-9-amd64-di udf-modules-4.9.0-9-amd64-di fuse-modules-4.9.0-9-amd64-di linux-image-4.9.0-9-amd64 linux-headers-4.9.0-9-amd64 linux-image-4.9.0-9-amd64-dbg linux-image-4.9.0-9-rt-amd64
+ linux-headers-4.9.0-9-rt-amd64 linux-image-4.9.0-9-rt-amd64-dbg linux-headers-4.9.0-9-all-arm64 kernel-image-4.9.0-9-arm64-di nic-modules-4.9.0-9-arm64-di nic-wireless-modules-4.9.0-9-arm64-di nic-shared-modules-4.9.0-9-arm64-di ppp-modules-4.9.0-9-arm64-di cdrom-core-modules-4.9.0-9-arm64-di scsi-core-modules-4.9.0-9-arm64-di scsi-modules-4.9.0-9-arm64-di loop-modules-4.9.0-9-arm64-di btrfs-modules-4.9.0-9-arm64-di ext4-modules-4.9.0-9-arm64-di isofs-modules-4.9.0-9-arm64-di jfs-modules-4.9.0-9-arm64-di xfs-modules-4.9.0-9-arm64-di fat-modules-4.9.0-9-arm64-di md-modules-4.9.0-9-arm64-di multipath-modules-4.9.0-9-arm64-di usb-modules-4.9.0-9-arm64-di usb-storage-modules-4.9.0-9-arm64-di fb-modules-4.9.0-9-arm64-di input-modules-4.9.0-9-arm64-di event-modules-4.9.0-9-arm64-di nic-usb-modules-4.9.0-9-arm64-di sata-modules-4.9.0-9-arm64-di i2c-modules-4.9.0-9-arm64-di crc-modules-4.9.0-9-arm64-di crypto-modules-4.9.0-9-arm64-di crypto-dm-modules-4.9.0-9-arm64-di
+ efi-modules-4.9.0-9-arm64-di ata-modules-4.9.0-9-arm64-di mmc-modules-4.9.0-9-arm64-di nbd-modules-4.9.0-9-arm64-di squashfs-modules-4.9.0-9-arm64-di virtio-modules-4.9.0-9-arm64-di uinput-modules-4.9.0-9-arm64-di leds-modules-4.9.0-9-arm64-di udf-modules-4.9.0-9-arm64-di fuse-modules-4.9.0-9-arm64-di linux-image-4.9.0-9-arm64 linux-headers-4.9.0-9-arm64 linux-image-4.9.0-9-arm64-dbg linux-headers-4.9.0-9-all-armel kernel-image-4.9.0-9-marvell-di nic-modules-4.9.0-9-marvell-di nic-shared-modules-4.9.0-9-marvell-di usb-serial-modules-4.9.0-9-marvell-di ppp-modules-4.9.0-9-marvell-di cdrom-core-modules-4.9.0-9-marvell-di scsi-core-modules-4.9.0-9-marvell-di loop-modules-4.9.0-9-marvell-di ipv6-modules-4.9.0-9-marvell-di btrfs-modules-4.9.0-9-marvell-di ext4-modules-4.9.0-9-marvell-di isofs-modules-4.9.0-9-marvell-di jffs2-modules-4.9.0-9-marvell-di jfs-modules-4.9.0-9-marvell-di fat-modules-4.9.0-9-marvell-di minix-modules-4.9.0-9-marvell-di
+ md-modules-4.9.0-9-marvell-di multipath-modules-4.9.0-9-marvell-di usb-modules-4.9.0-9-marvell-di usb-storage-modules-4.9.0-9-marvell-di fb-modules-4.9.0-9-marvell-di input-modules-4.9.0-9-marvell-di event-modules-4.9.0-9-marvell-di mouse-modules-4.9.0-9-marvell-di nic-usb-modules-4.9.0-9-marvell-di sata-modules-4.9.0-9-marvell-di crc-modules-4.9.0-9-marvell-di crypto-modules-4.9.0-9-marvell-di crypto-dm-modules-4.9.0-9-marvell-di mmc-modules-4.9.0-9-marvell-di nbd-modules-4.9.0-9-marvell-di squashfs-modules-4.9.0-9-marvell-di uinput-modules-4.9.0-9-marvell-di zlib-modules-4.9.0-9-marvell-di leds-modules-4.9.0-9-marvell-di udf-modules-4.9.0-9-marvell-di fuse-modules-4.9.0-9-marvell-di mtd-modules-4.9.0-9-marvell-di linux-image-4.9.0-9-marvell linux-headers-4.9.0-9-marvell linux-image-4.9.0-9-marvell-dbg linux-headers-4.9.0-9-all-armhf kernel-image-4.9.0-9-armmp-di nic-modules-4.9.0-9-armmp-di nic-wireless-modules-4.9.0-9-armmp-di nic-shared-modules-4.9.0-9-armmp-di
+ ppp-modules-4.9.0-9-armmp-di pata-modules-4.9.0-9-armmp-di scsi-core-modules-4.9.0-9-armmp-di scsi-modules-4.9.0-9-armmp-di loop-modules-4.9.0-9-armmp-di btrfs-modules-4.9.0-9-armmp-di ext4-modules-4.9.0-9-armmp-di isofs-modules-4.9.0-9-armmp-di jfs-modules-4.9.0-9-armmp-di fat-modules-4.9.0-9-armmp-di md-modules-4.9.0-9-armmp-di multipath-modules-4.9.0-9-armmp-di usb-modules-4.9.0-9-armmp-di usb-storage-modules-4.9.0-9-armmp-di fb-modules-4.9.0-9-armmp-di input-modules-4.9.0-9-armmp-di event-modules-4.9.0-9-armmp-di nic-usb-modules-4.9.0-9-armmp-di sata-modules-4.9.0-9-armmp-di i2c-modules-4.9.0-9-armmp-di crc-modules-4.9.0-9-armmp-di crypto-modules-4.9.0-9-armmp-di crypto-dm-modules-4.9.0-9-armmp-di efi-modules-4.9.0-9-armmp-di ata-modules-4.9.0-9-armmp-di mmc-modules-4.9.0-9-armmp-di nbd-modules-4.9.0-9-armmp-di squashfs-modules-4.9.0-9-armmp-di virtio-modules-4.9.0-9-armmp-di uinput-modules-4.9.0-9-armmp-di zlib-modules-4.9.0-9-armmp-di
+ leds-modules-4.9.0-9-armmp-di udf-modules-4.9.0-9-armmp-di fuse-modules-4.9.0-9-armmp-di mtd-modules-4.9.0-9-armmp-di linux-image-4.9.0-9-armmp linux-headers-4.9.0-9-armmp linux-image-4.9.0-9-armmp-dbg linux-image-4.9.0-9-armmp-lpae linux-headers-4.9.0-9-armmp-lpae linux-image-4.9.0-9-armmp-lpae-dbg linux-headers-4.9.0-9-all-hppa kernel-image-4.9.0-9-parisc-di nic-modules-4.9.0-9-parisc-di nic-shared-modules-4.9.0-9-parisc-di serial-modules-4.9.0-9-parisc-di usb-serial-modules-4.9.0-9-parisc-di ppp-modules-4.9.0-9-parisc-di pata-modules-4.9.0-9-parisc-di cdrom-core-modules-4.9.0-9-parisc-di scsi-core-modules-4.9.0-9-parisc-di scsi-modules-4.9.0-9-parisc-di loop-modules-4.9.0-9-parisc-di btrfs-modules-4.9.0-9-parisc-di ext4-modules-4.9.0-9-parisc-di isofs-modules-4.9.0-9-parisc-di jfs-modules-4.9.0-9-parisc-di xfs-modules-4.9.0-9-parisc-di fat-modules-4.9.0-9-parisc-di md-modules-4.9.0-9-parisc-di multipath-modules-4.9.0-9-parisc-di usb-modules-4.9.0-9-parisc-di
+ usb-storage-modules-4.9.0-9-parisc-di input-modules-4.9.0-9-parisc-di event-modules-4.9.0-9-parisc-di mouse-modules-4.9.0-9-parisc-di nic-usb-modules-4.9.0-9-parisc-di sata-modules-4.9.0-9-parisc-di crc-modules-4.9.0-9-parisc-di crypto-modules-4.9.0-9-parisc-di crypto-dm-modules-4.9.0-9-parisc-di ata-modules-4.9.0-9-parisc-di nbd-modules-4.9.0-9-parisc-di squashfs-modules-4.9.0-9-parisc-di virtio-modules-4.9.0-9-parisc-di zlib-modules-4.9.0-9-parisc-di fuse-modules-4.9.0-9-parisc-di kernel-image-4.9.0-9-parisc64-smp-di nic-modules-4.9.0-9-parisc64-smp-di nic-shared-modules-4.9.0-9-parisc64-smp-di serial-modules-4.9.0-9-parisc64-smp-di usb-serial-modules-4.9.0-9-parisc64-smp-di ppp-modules-4.9.0-9-parisc64-smp-di pata-modules-4.9.0-9-parisc64-smp-di cdrom-core-modules-4.9.0-9-parisc64-smp-di scsi-core-modules-4.9.0-9-parisc64-smp-di scsi-modules-4.9.0-9-parisc64-smp-di loop-modules-4.9.0-9-parisc64-smp-di btrfs-modules-4.9.0-9-parisc64-smp-di
+ ext4-modules-4.9.0-9-parisc64-smp-di isofs-modules-4.9.0-9-parisc64-smp-di jfs-modules-4.9.0-9-parisc64-smp-di xfs-modules-4.9.0-9-parisc64-smp-di fat-modules-4.9.0-9-parisc64-smp-di md-modules-4.9.0-9-parisc64-smp-di multipath-modules-4.9.0-9-parisc64-smp-di usb-modules-4.9.0-9-parisc64-smp-di usb-storage-modules-4.9.0-9-parisc64-smp-di fb-modules-4.9.0-9-parisc64-smp-di input-modules-4.9.0-9-parisc64-smp-di event-modules-4.9.0-9-parisc64-smp-di mouse-modules-4.9.0-9-parisc64-smp-di nic-usb-modules-4.9.0-9-parisc64-smp-di sata-modules-4.9.0-9-parisc64-smp-di crc-modules-4.9.0-9-parisc64-smp-di crypto-modules-4.9.0-9-parisc64-smp-di crypto-dm-modules-4.9.0-9-parisc64-smp-di ata-modules-4.9.0-9-parisc64-smp-di nbd-modules-4.9.0-9-parisc64-smp-di squashfs-modules-4.9.0-9-parisc64-smp-di virtio-modules-4.9.0-9-parisc64-smp-di zlib-modules-4.9.0-9-parisc64-smp-di fuse-modules-4.9.0-9-parisc64-smp-di linux-image-4.9.0-9-parisc linux-headers-4.9.0-9-parisc
+ linux-image-4.9.0-9-parisc-dbg linux-image-4.9.0-9-parisc64-smp linux-headers-4.9.0-9-parisc64-smp linux-image-4.9.0-9-parisc64-smp-dbg linux-headers-4.9.0-9-all-i386 kernel-image-4.9.0-9-686-di nic-modules-4.9.0-9-686-di nic-wireless-modules-4.9.0-9-686-di nic-shared-modules-4.9.0-9-686-di serial-modules-4.9.0-9-686-di usb-serial-modules-4.9.0-9-686-di ppp-modules-4.9.0-9-686-di pata-modules-4.9.0-9-686-di cdrom-core-modules-4.9.0-9-686-di firewire-core-modules-4.9.0-9-686-di scsi-core-modules-4.9.0-9-686-di scsi-modules-4.9.0-9-686-di loop-modules-4.9.0-9-686-di btrfs-modules-4.9.0-9-686-di ext4-modules-4.9.0-9-686-di isofs-modules-4.9.0-9-686-di jfs-modules-4.9.0-9-686-di ntfs-modules-4.9.0-9-686-di xfs-modules-4.9.0-9-686-di fat-modules-4.9.0-9-686-di md-modules-4.9.0-9-686-di multipath-modules-4.9.0-9-686-di usb-modules-4.9.0-9-686-di usb-storage-modules-4.9.0-9-686-di pcmcia-storage-modules-4.9.0-9-686-di fb-modules-4.9.0-9-686-di input-modules-4.9.0-9-686-di
+ event-modules-4.9.0-9-686-di mouse-modules-4.9.0-9-686-di nic-pcmcia-modules-4.9.0-9-686-di pcmcia-modules-4.9.0-9-686-di nic-usb-modules-4.9.0-9-686-di sata-modules-4.9.0-9-686-di acpi-modules-4.9.0-9-686-di i2c-modules-4.9.0-9-686-di crc-modules-4.9.0-9-686-di crypto-modules-4.9.0-9-686-di crypto-dm-modules-4.9.0-9-686-di efi-modules-4.9.0-9-686-di ata-modules-4.9.0-9-686-di mmc-core-modules-4.9.0-9-686-di mmc-modules-4.9.0-9-686-di nbd-modules-4.9.0-9-686-di squashfs-modules-4.9.0-9-686-di speakup-modules-4.9.0-9-686-di virtio-modules-4.9.0-9-686-di uinput-modules-4.9.0-9-686-di sound-modules-4.9.0-9-686-di hyperv-modules-4.9.0-9-686-di udf-modules-4.9.0-9-686-di fuse-modules-4.9.0-9-686-di kernel-image-4.9.0-9-686-pae-di nic-modules-4.9.0-9-686-pae-di nic-wireless-modules-4.9.0-9-686-pae-di nic-shared-modules-4.9.0-9-686-pae-di serial-modules-4.9.0-9-686-pae-di usb-serial-modules-4.9.0-9-686-pae-di ppp-modules-4.9.0-9-686-pae-di pata-modules-4.9.0-9-686-pae-di
+ cdrom-core-modules-4.9.0-9-686-pae-di firewire-core-modules-4.9.0-9-686-pae-di scsi-core-modules-4.9.0-9-686-pae-di scsi-modules-4.9.0-9-686-pae-di loop-modules-4.9.0-9-686-pae-di btrfs-modules-4.9.0-9-686-pae-di ext4-modules-4.9.0-9-686-pae-di isofs-modules-4.9.0-9-686-pae-di jfs-modules-4.9.0-9-686-pae-di ntfs-modules-4.9.0-9-686-pae-di xfs-modules-4.9.0-9-686-pae-di fat-modules-4.9.0-9-686-pae-di md-modules-4.9.0-9-686-pae-di multipath-modules-4.9.0-9-686-pae-di usb-modules-4.9.0-9-686-pae-di usb-storage-modules-4.9.0-9-686-pae-di pcmcia-storage-modules-4.9.0-9-686-pae-di fb-modules-4.9.0-9-686-pae-di input-modules-4.9.0-9-686-pae-di event-modules-4.9.0-9-686-pae-di mouse-modules-4.9.0-9-686-pae-di nic-pcmcia-modules-4.9.0-9-686-pae-di pcmcia-modules-4.9.0-9-686-pae-di nic-usb-modules-4.9.0-9-686-pae-di sata-modules-4.9.0-9-686-pae-di acpi-modules-4.9.0-9-686-pae-di i2c-modules-4.9.0-9-686-pae-di crc-modules-4.9.0-9-686-pae-di crypto-modules-4.9.0-9-686-pae-di
+ crypto-dm-modules-4.9.0-9-686-pae-di efi-modules-4.9.0-9-686-pae-di ata-modules-4.9.0-9-686-pae-di mmc-core-modules-4.9.0-9-686-pae-di mmc-modules-4.9.0-9-686-pae-di nbd-modules-4.9.0-9-686-pae-di squashfs-modules-4.9.0-9-686-pae-di speakup-modules-4.9.0-9-686-pae-di virtio-modules-4.9.0-9-686-pae-di uinput-modules-4.9.0-9-686-pae-di sound-modules-4.9.0-9-686-pae-di hyperv-modules-4.9.0-9-686-pae-di udf-modules-4.9.0-9-686-pae-di fuse-modules-4.9.0-9-686-pae-di linux-image-4.9.0-9-686 linux-headers-4.9.0-9-686 linux-image-4.9.0-9-686-dbg linux-image-4.9.0-9-686-pae linux-headers-4.9.0-9-686-pae linux-image-4.9.0-9-686-pae-dbg linux-image-4.9.0-9-rt-686-pae linux-headers-4.9.0-9-rt-686-pae linux-image-4.9.0-9-rt-686-pae-dbg linux-headers-4.9.0-9-all-m68k kernel-image-4.9.0-9-m68k-di nic-shared-modules-4.9.0-9-m68k-di ppp-modules-4.9.0-9-m68k-di cdrom-core-modules-4.9.0-9-m68k-di scsi-modules-4.9.0-9-m68k-di loop-modules-4.9.0-9-m68k-di btrfs-modules-4.9.0-9-m68k-di
+ ext4-modules-4.9.0-9-m68k-di isofs-modules-4.9.0-9-m68k-di fat-modules-4.9.0-9-m68k-di md-modules-4.9.0-9-m68k-di crc-modules-4.9.0-9-m68k-di crypto-modules-4.9.0-9-m68k-di nbd-modules-4.9.0-9-m68k-di squashfs-modules-4.9.0-9-m68k-di zlib-modules-4.9.0-9-m68k-di udf-modules-4.9.0-9-m68k-di fuse-modules-4.9.0-9-m68k-di linux-image-4.9.0-9-m68k linux-headers-4.9.0-9-m68k linux-image-4.9.0-9-m68k-dbg linux-headers-4.9.0-9-all-mips kernel-image-4.9.0-9-4kc-malta-di nic-modules-4.9.0-9-4kc-malta-di nic-wireless-modules-4.9.0-9-4kc-malta-di nic-shared-modules-4.9.0-9-4kc-malta-di usb-serial-modules-4.9.0-9-4kc-malta-di ppp-modules-4.9.0-9-4kc-malta-di pata-modules-4.9.0-9-4kc-malta-di cdrom-core-modules-4.9.0-9-4kc-malta-di scsi-core-modules-4.9.0-9-4kc-malta-di scsi-modules-4.9.0-9-4kc-malta-di loop-modules-4.9.0-9-4kc-malta-di btrfs-modules-4.9.0-9-4kc-malta-di ext4-modules-4.9.0-9-4kc-malta-di isofs-modules-4.9.0-9-4kc-malta-di jfs-modules-4.9.0-9-4kc-malta-di
+ ntfs-modules-4.9.0-9-4kc-malta-di xfs-modules-4.9.0-9-4kc-malta-di fat-modules-4.9.0-9-4kc-malta-di hfs-modules-4.9.0-9-4kc-malta-di affs-modules-4.9.0-9-4kc-malta-di minix-modules-4.9.0-9-4kc-malta-di md-modules-4.9.0-9-4kc-malta-di multipath-modules-4.9.0-9-4kc-malta-di usb-modules-4.9.0-9-4kc-malta-di usb-storage-modules-4.9.0-9-4kc-malta-di input-modules-4.9.0-9-4kc-malta-di event-modules-4.9.0-9-4kc-malta-di mouse-modules-4.9.0-9-4kc-malta-di nic-usb-modules-4.9.0-9-4kc-malta-di sata-modules-4.9.0-9-4kc-malta-di i2c-modules-4.9.0-9-4kc-malta-di crc-modules-4.9.0-9-4kc-malta-di crypto-modules-4.9.0-9-4kc-malta-di crypto-dm-modules-4.9.0-9-4kc-malta-di ata-modules-4.9.0-9-4kc-malta-di mmc-core-modules-4.9.0-9-4kc-malta-di mmc-modules-4.9.0-9-4kc-malta-di nbd-modules-4.9.0-9-4kc-malta-di squashfs-modules-4.9.0-9-4kc-malta-di virtio-modules-4.9.0-9-4kc-malta-di sound-modules-4.9.0-9-4kc-malta-di zlib-modules-4.9.0-9-4kc-malta-di udf-modules-4.9.0-9-4kc-malta-di
+ fuse-modules-4.9.0-9-4kc-malta-di kernel-image-4.9.0-9-octeon-di nic-modules-4.9.0-9-octeon-di nic-wireless-modules-4.9.0-9-octeon-di nic-shared-modules-4.9.0-9-octeon-di usb-serial-modules-4.9.0-9-octeon-di ppp-modules-4.9.0-9-octeon-di pata-modules-4.9.0-9-octeon-di cdrom-core-modules-4.9.0-9-octeon-di scsi-core-modules-4.9.0-9-octeon-di scsi-modules-4.9.0-9-octeon-di loop-modules-4.9.0-9-octeon-di btrfs-modules-4.9.0-9-octeon-di ext4-modules-4.9.0-9-octeon-di isofs-modules-4.9.0-9-octeon-di jfs-modules-4.9.0-9-octeon-di ntfs-modules-4.9.0-9-octeon-di xfs-modules-4.9.0-9-octeon-di fat-modules-4.9.0-9-octeon-di hfs-modules-4.9.0-9-octeon-di affs-modules-4.9.0-9-octeon-di minix-modules-4.9.0-9-octeon-di md-modules-4.9.0-9-octeon-di multipath-modules-4.9.0-9-octeon-di usb-modules-4.9.0-9-octeon-di usb-storage-modules-4.9.0-9-octeon-di input-modules-4.9.0-9-octeon-di event-modules-4.9.0-9-octeon-di nic-usb-modules-4.9.0-9-octeon-di sata-modules-4.9.0-9-octeon-di
+ crc-modules-4.9.0-9-octeon-di crypto-modules-4.9.0-9-octeon-di crypto-dm-modules-4.9.0-9-octeon-di nbd-modules-4.9.0-9-octeon-di squashfs-modules-4.9.0-9-octeon-di rtc-modules-4.9.0-9-octeon-di virtio-modules-4.9.0-9-octeon-di sound-modules-4.9.0-9-octeon-di zlib-modules-4.9.0-9-octeon-di udf-modules-4.9.0-9-octeon-di fuse-modules-4.9.0-9-octeon-di linux-image-4.9.0-9-4kc-malta linux-headers-4.9.0-9-4kc-malta linux-image-4.9.0-9-4kc-malta-dbg linux-image-4.9.0-9-5kc-malta linux-headers-4.9.0-9-5kc-malta linux-image-4.9.0-9-5kc-malta-dbg linux-image-4.9.0-9-octeon linux-headers-4.9.0-9-octeon linux-image-4.9.0-9-octeon-dbg linux-headers-4.9.0-9-all-mipsel kernel-image-4.9.0-9-loongson-3-di nic-modules-4.9.0-9-loongson-3-di nic-wireless-modules-4.9.0-9-loongson-3-di nic-shared-modules-4.9.0-9-loongson-3-di usb-serial-modules-4.9.0-9-loongson-3-di ppp-modules-4.9.0-9-loongson-3-di pata-modules-4.9.0-9-loongson-3-di cdrom-core-modules-4.9.0-9-loongson-3-di
+ firewire-core-modules-4.9.0-9-loongson-3-di scsi-core-modules-4.9.0-9-loongson-3-di scsi-modules-4.9.0-9-loongson-3-di loop-modules-4.9.0-9-loongson-3-di btrfs-modules-4.9.0-9-loongson-3-di ext4-modules-4.9.0-9-loongson-3-di isofs-modules-4.9.0-9-loongson-3-di jfs-modules-4.9.0-9-loongson-3-di ntfs-modules-4.9.0-9-loongson-3-di xfs-modules-4.9.0-9-loongson-3-di fat-modules-4.9.0-9-loongson-3-di hfs-modules-4.9.0-9-loongson-3-di affs-modules-4.9.0-9-loongson-3-di minix-modules-4.9.0-9-loongson-3-di nfs-modules-4.9.0-9-loongson-3-di md-modules-4.9.0-9-loongson-3-di multipath-modules-4.9.0-9-loongson-3-di usb-modules-4.9.0-9-loongson-3-di usb-storage-modules-4.9.0-9-loongson-3-di fb-modules-4.9.0-9-loongson-3-di input-modules-4.9.0-9-loongson-3-di event-modules-4.9.0-9-loongson-3-di nic-usb-modules-4.9.0-9-loongson-3-di sata-modules-4.9.0-9-loongson-3-di crc-modules-4.9.0-9-loongson-3-di crypto-modules-4.9.0-9-loongson-3-di crypto-dm-modules-4.9.0-9-loongson-3-di
+ ata-modules-4.9.0-9-loongson-3-di nbd-modules-4.9.0-9-loongson-3-di squashfs-modules-4.9.0-9-loongson-3-di speakup-modules-4.9.0-9-loongson-3-di virtio-modules-4.9.0-9-loongson-3-di sound-modules-4.9.0-9-loongson-3-di zlib-modules-4.9.0-9-loongson-3-di udf-modules-4.9.0-9-loongson-3-di fuse-modules-4.9.0-9-loongson-3-di linux-image-4.9.0-9-loongson-3 linux-headers-4.9.0-9-loongson-3 linux-image-4.9.0-9-loongson-3-dbg linux-headers-4.9.0-9-all-mips64 kernel-image-4.9.0-9-5kc-malta-di nic-modules-4.9.0-9-5kc-malta-di nic-wireless-modules-4.9.0-9-5kc-malta-di nic-shared-modules-4.9.0-9-5kc-malta-di usb-serial-modules-4.9.0-9-5kc-malta-di ppp-modules-4.9.0-9-5kc-malta-di pata-modules-4.9.0-9-5kc-malta-di cdrom-core-modules-4.9.0-9-5kc-malta-di scsi-core-modules-4.9.0-9-5kc-malta-di scsi-modules-4.9.0-9-5kc-malta-di loop-modules-4.9.0-9-5kc-malta-di btrfs-modules-4.9.0-9-5kc-malta-di ext4-modules-4.9.0-9-5kc-malta-di isofs-modules-4.9.0-9-5kc-malta-di
+ jfs-modules-4.9.0-9-5kc-malta-di ntfs-modules-4.9.0-9-5kc-malta-di xfs-modules-4.9.0-9-5kc-malta-di fat-modules-4.9.0-9-5kc-malta-di hfs-modules-4.9.0-9-5kc-malta-di affs-modules-4.9.0-9-5kc-malta-di minix-modules-4.9.0-9-5kc-malta-di md-modules-4.9.0-9-5kc-malta-di multipath-modules-4.9.0-9-5kc-malta-di usb-modules-4.9.0-9-5kc-malta-di usb-storage-modules-4.9.0-9-5kc-malta-di input-modules-4.9.0-9-5kc-malta-di event-modules-4.9.0-9-5kc-malta-di mouse-modules-4.9.0-9-5kc-malta-di nic-usb-modules-4.9.0-9-5kc-malta-di sata-modules-4.9.0-9-5kc-malta-di i2c-modules-4.9.0-9-5kc-malta-di crc-modules-4.9.0-9-5kc-malta-di crypto-modules-4.9.0-9-5kc-malta-di crypto-dm-modules-4.9.0-9-5kc-malta-di ata-modules-4.9.0-9-5kc-malta-di mmc-core-modules-4.9.0-9-5kc-malta-di mmc-modules-4.9.0-9-5kc-malta-di nbd-modules-4.9.0-9-5kc-malta-di squashfs-modules-4.9.0-9-5kc-malta-di virtio-modules-4.9.0-9-5kc-malta-di sound-modules-4.9.0-9-5kc-malta-di zlib-modules-4.9.0-9-5kc-malta-di
+ udf-modules-4.9.0-9-5kc-malta-di fuse-modules-4.9.0-9-5kc-malta-di linux-headers-4.9.0-9-all-mips64el linux-headers-4.9.0-9-all-powerpc kernel-image-4.9.0-9-powerpc-di nic-modules-4.9.0-9-powerpc-di nic-shared-modules-4.9.0-9-powerpc-di serial-modules-4.9.0-9-powerpc-di usb-serial-modules-4.9.0-9-powerpc-di ppp-modules-4.9.0-9-powerpc-di pata-modules-4.9.0-9-powerpc-di cdrom-core-modules-4.9.0-9-powerpc-di firewire-core-modules-4.9.0-9-powerpc-di scsi-core-modules-4.9.0-9-powerpc-di scsi-modules-4.9.0-9-powerpc-di loop-modules-4.9.0-9-powerpc-di btrfs-modules-4.9.0-9-powerpc-di ext4-modules-4.9.0-9-powerpc-di isofs-modules-4.9.0-9-powerpc-di jfs-modules-4.9.0-9-powerpc-di xfs-modules-4.9.0-9-powerpc-di fat-modules-4.9.0-9-powerpc-di hfs-modules-4.9.0-9-powerpc-di affs-modules-4.9.0-9-powerpc-di md-modules-4.9.0-9-powerpc-di multipath-modules-4.9.0-9-powerpc-di usb-modules-4.9.0-9-powerpc-di usb-storage-modules-4.9.0-9-powerpc-di
+ pcmcia-storage-modules-4.9.0-9-powerpc-di fb-modules-4.9.0-9-powerpc-di input-modules-4.9.0-9-powerpc-di event-modules-4.9.0-9-powerpc-di mouse-modules-4.9.0-9-powerpc-di nic-pcmcia-modules-4.9.0-9-powerpc-di pcmcia-modules-4.9.0-9-powerpc-di sata-modules-4.9.0-9-powerpc-di crc-modules-4.9.0-9-powerpc-di crypto-modules-4.9.0-9-powerpc-di crypto-dm-modules-4.9.0-9-powerpc-di ata-modules-4.9.0-9-powerpc-di nbd-modules-4.9.0-9-powerpc-di squashfs-modules-4.9.0-9-powerpc-di virtio-modules-4.9.0-9-powerpc-di uinput-modules-4.9.0-9-powerpc-di zlib-modules-4.9.0-9-powerpc-di udf-modules-4.9.0-9-powerpc-di fuse-modules-4.9.0-9-powerpc-di kernel-image-4.9.0-9-powerpc64-di nic-modules-4.9.0-9-powerpc64-di nic-shared-modules-4.9.0-9-powerpc64-di serial-modules-4.9.0-9-powerpc64-di usb-serial-modules-4.9.0-9-powerpc64-di ppp-modules-4.9.0-9-powerpc64-di pata-modules-4.9.0-9-powerpc64-di cdrom-core-modules-4.9.0-9-powerpc64-di firewire-core-modules-4.9.0-9-powerpc64-di
+ scsi-core-modules-4.9.0-9-powerpc64-di scsi-modules-4.9.0-9-powerpc64-di loop-modules-4.9.0-9-powerpc64-di btrfs-modules-4.9.0-9-powerpc64-di ext4-modules-4.9.0-9-powerpc64-di isofs-modules-4.9.0-9-powerpc64-di jfs-modules-4.9.0-9-powerpc64-di xfs-modules-4.9.0-9-powerpc64-di fat-modules-4.9.0-9-powerpc64-di hfs-modules-4.9.0-9-powerpc64-di affs-modules-4.9.0-9-powerpc64-di md-modules-4.9.0-9-powerpc64-di multipath-modules-4.9.0-9-powerpc64-di usb-modules-4.9.0-9-powerpc64-di usb-storage-modules-4.9.0-9-powerpc64-di pcmcia-storage-modules-4.9.0-9-powerpc64-di input-modules-4.9.0-9-powerpc64-di event-modules-4.9.0-9-powerpc64-di mouse-modules-4.9.0-9-powerpc64-di nic-pcmcia-modules-4.9.0-9-powerpc64-di pcmcia-modules-4.9.0-9-powerpc64-di sata-modules-4.9.0-9-powerpc64-di crc-modules-4.9.0-9-powerpc64-di crypto-modules-4.9.0-9-powerpc64-di crypto-dm-modules-4.9.0-9-powerpc64-di ata-modules-4.9.0-9-powerpc64-di nbd-modules-4.9.0-9-powerpc64-di
+ squashfs-modules-4.9.0-9-powerpc64-di virtio-modules-4.9.0-9-powerpc64-di uinput-modules-4.9.0-9-powerpc64-di udf-modules-4.9.0-9-powerpc64-di fuse-modules-4.9.0-9-powerpc64-di hypervisor-modules-4.9.0-9-powerpc64-di fancontrol-modules-4.9.0-9-powerpc64-di linux-image-4.9.0-9-powerpc linux-headers-4.9.0-9-powerpc linux-image-4.9.0-9-powerpc-dbg linux-image-4.9.0-9-powerpc-smp linux-headers-4.9.0-9-powerpc-smp linux-image-4.9.0-9-powerpc-smp-dbg linux-image-4.9.0-9-powerpc64 linux-headers-4.9.0-9-powerpc64 linux-image-4.9.0-9-powerpc64-dbg linux-headers-4.9.0-9-all-powerpcspe linux-image-4.9.0-9-powerpcspe linux-headers-4.9.0-9-powerpcspe linux-image-4.9.0-9-powerpcspe-dbg linux-headers-4.9.0-9-all-ppc64 linux-headers-4.9.0-9-all-ppc64el kernel-image-4.9.0-9-powerpc64le-di nic-modules-4.9.0-9-powerpc64le-di nic-shared-modules-4.9.0-9-powerpc64le-di serial-modules-4.9.0-9-powerpc64le-di usb-serial-modules-4.9.0-9-powerpc64le-di ppp-modules-4.9.0-9-powerpc64le-di
+ cdrom-core-modules-4.9.0-9-powerpc64le-di firewire-core-modules-4.9.0-9-powerpc64le-di scsi-core-modules-4.9.0-9-powerpc64le-di scsi-modules-4.9.0-9-powerpc64le-di loop-modules-4.9.0-9-powerpc64le-di btrfs-modules-4.9.0-9-powerpc64le-di ext4-modules-4.9.0-9-powerpc64le-di isofs-modules-4.9.0-9-powerpc64le-di jfs-modules-4.9.0-9-powerpc64le-di xfs-modules-4.9.0-9-powerpc64le-di fat-modules-4.9.0-9-powerpc64le-di md-modules-4.9.0-9-powerpc64le-di multipath-modules-4.9.0-9-powerpc64le-di usb-modules-4.9.0-9-powerpc64le-di usb-storage-modules-4.9.0-9-powerpc64le-di input-modules-4.9.0-9-powerpc64le-di event-modules-4.9.0-9-powerpc64le-di mouse-modules-4.9.0-9-powerpc64le-di sata-modules-4.9.0-9-powerpc64le-di crc-modules-4.9.0-9-powerpc64le-di crypto-modules-4.9.0-9-powerpc64le-di crypto-dm-modules-4.9.0-9-powerpc64le-di ata-modules-4.9.0-9-powerpc64le-di nbd-modules-4.9.0-9-powerpc64le-di squashfs-modules-4.9.0-9-powerpc64le-di virtio-modules-4.9.0-9-powerpc64le-di
+ uinput-modules-4.9.0-9-powerpc64le-di udf-modules-4.9.0-9-powerpc64le-di fuse-modules-4.9.0-9-powerpc64le-di hypervisor-modules-4.9.0-9-powerpc64le-di fancontrol-modules-4.9.0-9-powerpc64le-di linux-image-4.9.0-9-powerpc64le linux-headers-4.9.0-9-powerpc64le linux-image-4.9.0-9-powerpc64le-dbg linux-headers-4.9.0-9-all-s390x kernel-image-4.9.0-9-s390x-di nic-modules-4.9.0-9-s390x-di scsi-core-modules-4.9.0-9-s390x-di scsi-modules-4.9.0-9-s390x-di loop-modules-4.9.0-9-s390x-di btrfs-modules-4.9.0-9-s390x-di ext4-modules-4.9.0-9-s390x-di isofs-modules-4.9.0-9-s390x-di xfs-modules-4.9.0-9-s390x-di fat-modules-4.9.0-9-s390x-di md-modules-4.9.0-9-s390x-di multipath-modules-4.9.0-9-s390x-di crc-modules-4.9.0-9-s390x-di crypto-modules-4.9.0-9-s390x-di crypto-dm-modules-4.9.0-9-s390x-di nbd-modules-4.9.0-9-s390x-di virtio-modules-4.9.0-9-s390x-di zlib-modules-4.9.0-9-s390x-di udf-modules-4.9.0-9-s390x-di fuse-modules-4.9.0-9-s390x-di dasd-modules-4.9.0-9-s390x-di
+ dasd-extra-modules-4.9.0-9-s390x-di linux-image-4.9.0-9-s390x linux-headers-4.9.0-9-s390x linux-image-4.9.0-9-s390x-dbg linux-headers-4.9.0-9-all-sh4 kernel-image-4.9.0-9-sh7751r-di nic-modules-4.9.0-9-sh7751r-di usb-serial-modules-4.9.0-9-sh7751r-di ppp-modules-4.9.0-9-sh7751r-di pata-modules-4.9.0-9-sh7751r-di cdrom-core-modules-4.9.0-9-sh7751r-di firewire-core-modules-4.9.0-9-sh7751r-di loop-modules-4.9.0-9-sh7751r-di btrfs-modules-4.9.0-9-sh7751r-di ext4-modules-4.9.0-9-sh7751r-di isofs-modules-4.9.0-9-sh7751r-di jfs-modules-4.9.0-9-sh7751r-di xfs-modules-4.9.0-9-sh7751r-di fat-modules-4.9.0-9-sh7751r-di minix-modules-4.9.0-9-sh7751r-di md-modules-4.9.0-9-sh7751r-di multipath-modules-4.9.0-9-sh7751r-di usb-storage-modules-4.9.0-9-sh7751r-di nic-usb-modules-4.9.0-9-sh7751r-di sata-modules-4.9.0-9-sh7751r-di i2c-modules-4.9.0-9-sh7751r-di crc-modules-4.9.0-9-sh7751r-di crypto-modules-4.9.0-9-sh7751r-di crypto-dm-modules-4.9.0-9-sh7751r-di
+ nbd-modules-4.9.0-9-sh7751r-di squashfs-modules-4.9.0-9-sh7751r-di speakup-modules-4.9.0-9-sh7751r-di virtio-modules-4.9.0-9-sh7751r-di sound-modules-4.9.0-9-sh7751r-di zlib-modules-4.9.0-9-sh7751r-di udf-modules-4.9.0-9-sh7751r-di fuse-modules-4.9.0-9-sh7751r-di kernel-image-4.9.0-9-sh7785lcr-di nic-modules-4.9.0-9-sh7785lcr-di usb-serial-modules-4.9.0-9-sh7785lcr-di ppp-modules-4.9.0-9-sh7785lcr-di pata-modules-4.9.0-9-sh7785lcr-di cdrom-core-modules-4.9.0-9-sh7785lcr-di firewire-core-modules-4.9.0-9-sh7785lcr-di loop-modules-4.9.0-9-sh7785lcr-di btrfs-modules-4.9.0-9-sh7785lcr-di ext4-modules-4.9.0-9-sh7785lcr-di isofs-modules-4.9.0-9-sh7785lcr-di jfs-modules-4.9.0-9-sh7785lcr-di xfs-modules-4.9.0-9-sh7785lcr-di fat-modules-4.9.0-9-sh7785lcr-di minix-modules-4.9.0-9-sh7785lcr-di md-modules-4.9.0-9-sh7785lcr-di multipath-modules-4.9.0-9-sh7785lcr-di nic-usb-modules-4.9.0-9-sh7785lcr-di sata-modules-4.9.0-9-sh7785lcr-di crc-modules-4.9.0-9-sh7785lcr-di
+ crypto-modules-4.9.0-9-sh7785lcr-di crypto-dm-modules-4.9.0-9-sh7785lcr-di nbd-modules-4.9.0-9-sh7785lcr-di squashfs-modules-4.9.0-9-sh7785lcr-di speakup-modules-4.9.0-9-sh7785lcr-di sound-modules-4.9.0-9-sh7785lcr-di zlib-modules-4.9.0-9-sh7785lcr-di udf-modules-4.9.0-9-sh7785lcr-di fuse-modules-4.9.0-9-sh7785lcr-di linux-image-4.9.0-9-sh7751r linux-headers-4.9.0-9-sh7751r linux-image-4.9.0-9-sh7751r-dbg linux-image-4.9.0-9-sh7785lcr linux-headers-4.9.0-9-sh7785lcr linux-image-4.9.0-9-sh7785lcr-dbg linux-headers-4.9.0-9-all-sparc64 kernel-image-4.9.0-9-sparc64-di nic-modules-4.9.0-9-sparc64-di ppp-modules-4.9.0-9-sparc64-di pata-modules-4.9.0-9-sparc64-di cdrom-core-modules-4.9.0-9-sparc64-di scsi-core-modules-4.9.0-9-sparc64-di scsi-modules-4.9.0-9-sparc64-di btrfs-modules-4.9.0-9-sparc64-di ext4-modules-4.9.0-9-sparc64-di isofs-modules-4.9.0-9-sparc64-di jfs-modules-4.9.0-9-sparc64-di ufs-modules-4.9.0-9-sparc64-di xfs-modules-4.9.0-9-sparc64-di
+ fat-modules-4.9.0-9-sparc64-di md-modules-4.9.0-9-sparc64-di multipath-modules-4.9.0-9-sparc64-di usb-modules-4.9.0-9-sparc64-di usb-storage-modules-4.9.0-9-sparc64-di input-modules-4.9.0-9-sparc64-di sata-modules-4.9.0-9-sparc64-di crc-modules-4.9.0-9-sparc64-di crypto-modules-4.9.0-9-sparc64-di crypto-dm-modules-4.9.0-9-sparc64-di ata-modules-4.9.0-9-sparc64-di nbd-modules-4.9.0-9-sparc64-di squashfs-modules-4.9.0-9-sparc64-di virtio-modules-4.9.0-9-sparc64-di zlib-modules-4.9.0-9-sparc64-di udf-modules-4.9.0-9-sparc64-di fuse-modules-4.9.0-9-sparc64-di linux-image-4.9.0-9-sparc64 linux-headers-4.9.0-9-sparc64 linux-image-4.9.0-9-sparc64-dbg linux-image-4.9.0-9-sparc64-smp linux-headers-4.9.0-9-sparc64-smp linux-image-4.9.0-9-sparc64-smp-dbg linux-compiler-gcc-6-arm linux-compiler-gcc-6-s390
+ linux-compiler-gcc-6-x86
+Architecture: source amd64 all
+Version: 4.9.161-1
+Distribution: stretch
+Urgency: medium
+Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
+Changed-By: Salvatore Bonaccorso <carnil@debian.org>
+Description:
+ acpi-modules-4.9.0-9-686-di - ACPI support modules (udeb)
+ acpi-modules-4.9.0-9-686-pae-di - ACPI support modules (udeb)
+ acpi-modules-4.9.0-9-amd64-di - ACPI support modules (udeb)
+ affs-modules-4.9.0-9-4kc-malta-di - Amiga filesystem support (udeb)
+ affs-modules-4.9.0-9-5kc-malta-di - Amiga filesystem support (udeb)
+ affs-modules-4.9.0-9-loongson-3-di - Amiga filesystem support (udeb)
+ affs-modules-4.9.0-9-octeon-di - Amiga filesystem support (udeb)
+ affs-modules-4.9.0-9-powerpc-di - Amiga filesystem support (udeb)
+ affs-modules-4.9.0-9-powerpc64-di - Amiga filesystem support (udeb)
+ ata-modules-4.9.0-9-4kc-malta-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-5kc-malta-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-686-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-686-pae-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-alpha-generic-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-amd64-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-arm64-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-armmp-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-loongson-3-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-parisc-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-parisc64-smp-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-powerpc-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-powerpc64-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-powerpc64le-di - ATA disk modules (udeb)
+ ata-modules-4.9.0-9-sparc64-di - ATA disk modules (udeb)
+ btrfs-modules-4.9.0-9-4kc-malta-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-5kc-malta-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-686-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-686-pae-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-alpha-generic-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-amd64-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-arm64-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-armmp-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-loongson-3-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-m68k-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-marvell-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-octeon-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-parisc-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-parisc64-smp-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-powerpc-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-powerpc64-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-powerpc64le-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-s390x-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-sh7751r-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-sh7785lcr-di - BTRFS filesystem support (udeb)
+ btrfs-modules-4.9.0-9-sparc64-di - BTRFS filesystem support (udeb)
+ cdrom-core-modules-4.9.0-9-4kc-malta-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-5kc-malta-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-686-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-686-pae-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-alpha-generic-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-amd64-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-arm64-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-loongson-3-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-m68k-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-marvell-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-octeon-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-parisc-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-parisc64-smp-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-powerpc-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-powerpc64-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-powerpc64le-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-sh7751r-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-sh7785lcr-di - CDROM support (udeb)
+ cdrom-core-modules-4.9.0-9-sparc64-di - CDROM support (udeb)
+ crc-modules-4.9.0-9-4kc-malta-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-5kc-malta-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-686-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-686-pae-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-alpha-generic-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-amd64-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-arm64-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-armmp-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-loongson-3-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-m68k-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-marvell-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-octeon-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-parisc-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-parisc64-smp-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-powerpc-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-powerpc64-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-powerpc64le-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-s390x-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-sh7751r-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-sh7785lcr-di - CRC modules (udeb)
+ crc-modules-4.9.0-9-sparc64-di - CRC modules (udeb)
+ crypto-dm-modules-4.9.0-9-4kc-malta-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-5kc-malta-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-686-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-686-pae-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-alpha-generic-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-amd64-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-arm64-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-armmp-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-loongson-3-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-marvell-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-octeon-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-parisc-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-parisc64-smp-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-powerpc-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-powerpc64-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-powerpc64le-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-s390x-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-sh7751r-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-sh7785lcr-di - devicemapper crypto module (udeb)
+ crypto-dm-modules-4.9.0-9-sparc64-di - devicemapper crypto module (udeb)
+ crypto-modules-4.9.0-9-4kc-malta-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-5kc-malta-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-686-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-686-pae-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-alpha-generic-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-amd64-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-arm64-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-armmp-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-loongson-3-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-m68k-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-marvell-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-octeon-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-parisc-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-parisc64-smp-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-powerpc-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-powerpc64-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-powerpc64le-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-s390x-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-sh7751r-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-sh7785lcr-di - crypto modules (udeb)
+ crypto-modules-4.9.0-9-sparc64-di - crypto modules (udeb)
+ dasd-extra-modules-4.9.0-9-s390x-di - optional dasd DIAG support (udeb)
+ dasd-modules-4.9.0-9-s390x-di - dasd modules (udeb)
+ efi-modules-4.9.0-9-686-di - EFI modules (udeb)
+ efi-modules-4.9.0-9-686-pae-di - EFI modules (udeb)
+ efi-modules-4.9.0-9-amd64-di - EFI modules (udeb)
+ efi-modules-4.9.0-9-arm64-di - EFI modules (udeb)
+ efi-modules-4.9.0-9-armmp-di - EFI modules (udeb)
+ event-modules-4.9.0-9-4kc-malta-di - Event support (udeb)
+ event-modules-4.9.0-9-5kc-malta-di - Event support (udeb)
+ event-modules-4.9.0-9-686-di - Event support (udeb)
+ event-modules-4.9.0-9-686-pae-di - Event support (udeb)
+ event-modules-4.9.0-9-alpha-generic-di - Event support (udeb)
+ event-modules-4.9.0-9-amd64-di - Event support (udeb)
+ event-modules-4.9.0-9-arm64-di - Event support (udeb)
+ event-modules-4.9.0-9-armmp-di - Event support (udeb)
+ event-modules-4.9.0-9-loongson-3-di - Event support (udeb)
+ event-modules-4.9.0-9-marvell-di - Event support (udeb)
+ event-modules-4.9.0-9-octeon-di - Event support (udeb)
+ event-modules-4.9.0-9-parisc-di - Event support (udeb)
+ event-modules-4.9.0-9-parisc64-smp-di - Event support (udeb)
+ event-modules-4.9.0-9-powerpc-di - Event support (udeb)
+ event-modules-4.9.0-9-powerpc64-di - Event support (udeb)
+ event-modules-4.9.0-9-powerpc64le-di - Event support (udeb)
+ ext4-modules-4.9.0-9-4kc-malta-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-5kc-malta-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-686-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-686-pae-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-alpha-generic-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-amd64-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-arm64-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-armmp-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-loongson-3-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-m68k-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-marvell-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-octeon-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-parisc-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-parisc64-smp-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-powerpc-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-powerpc64-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-powerpc64le-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-s390x-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-sh7751r-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-sh7785lcr-di - ext2/ext3/ext4 filesystem support (udeb)
+ ext4-modules-4.9.0-9-sparc64-di - ext2/ext3/ext4 filesystem support (udeb)
+ fancontrol-modules-4.9.0-9-powerpc64-di - Apple powermac fancontrol modules (udeb)
+ fancontrol-modules-4.9.0-9-powerpc64le-di - Apple powermac fancontrol modules (udeb)
+ fat-modules-4.9.0-9-4kc-malta-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-5kc-malta-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-686-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-686-pae-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-alpha-generic-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-amd64-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-arm64-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-armmp-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-loongson-3-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-m68k-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-marvell-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-octeon-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-parisc-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-parisc64-smp-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-powerpc-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-powerpc64-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-powerpc64le-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-s390x-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-sh7751r-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-sh7785lcr-di - FAT filesystem support (udeb)
+ fat-modules-4.9.0-9-sparc64-di - FAT filesystem support (udeb)
+ fb-modules-4.9.0-9-686-di - Frame buffer support (udeb)
+ fb-modules-4.9.0-9-686-pae-di - Frame buffer support (udeb)
+ fb-modules-4.9.0-9-alpha-generic-di - Frame buffer support (udeb)
+ fb-modules-4.9.0-9-amd64-di - Frame buffer support (udeb)
+ fb-modules-4.9.0-9-arm64-di - Frame buffer support (udeb)
+ fb-modules-4.9.0-9-armmp-di - Frame buffer support (udeb)
+ fb-modules-4.9.0-9-loongson-3-di - Frame buffer support (udeb)
+ fb-modules-4.9.0-9-marvell-di - Frame buffer support (udeb)
+ fb-modules-4.9.0-9-parisc64-smp-di - Frame buffer support (udeb)
+ fb-modules-4.9.0-9-powerpc-di - Frame buffer support (udeb)
+ firewire-core-modules-4.9.0-9-686-di - Core FireWire drivers (udeb)
+ firewire-core-modules-4.9.0-9-686-pae-di - Core FireWire drivers (udeb)
+ firewire-core-modules-4.9.0-9-amd64-di - Core FireWire drivers (udeb)
+ firewire-core-modules-4.9.0-9-loongson-3-di - Core FireWire drivers (udeb)
+ firewire-core-modules-4.9.0-9-powerpc-di - Core FireWire drivers (udeb)
+ firewire-core-modules-4.9.0-9-powerpc64-di - Core FireWire drivers (udeb)
+ firewire-core-modules-4.9.0-9-powerpc64le-di - Core FireWire drivers (udeb)
+ firewire-core-modules-4.9.0-9-sh7751r-di - Core FireWire drivers (udeb)
+ firewire-core-modules-4.9.0-9-sh7785lcr-di - Core FireWire drivers (udeb)
+ fuse-modules-4.9.0-9-4kc-malta-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-5kc-malta-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-686-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-686-pae-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-alpha-generic-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-amd64-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-arm64-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-armmp-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-loongson-3-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-m68k-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-marvell-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-octeon-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-parisc-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-parisc64-smp-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-powerpc-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-powerpc64-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-powerpc64le-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-s390x-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-sh7751r-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-sh7785lcr-di - FUSE modules (udeb)
+ fuse-modules-4.9.0-9-sparc64-di - FUSE modules (udeb)
+ hfs-modules-4.9.0-9-4kc-malta-di - HFS filesystem support (udeb)
+ hfs-modules-4.9.0-9-5kc-malta-di - HFS filesystem support (udeb)
+ hfs-modules-4.9.0-9-loongson-3-di - HFS filesystem support (udeb)
+ hfs-modules-4.9.0-9-octeon-di - HFS filesystem support (udeb)
+ hfs-modules-4.9.0-9-powerpc-di - HFS filesystem support (udeb)
+ hfs-modules-4.9.0-9-powerpc64-di - HFS filesystem support (udeb)
+ hyperv-daemons - Support daemons for Linux running on Hyper-V
+ hyperv-modules-4.9.0-9-686-di - Hyper-V modules (udeb)
+ hyperv-modules-4.9.0-9-686-pae-di - Hyper-V modules (udeb)
+ hyperv-modules-4.9.0-9-amd64-di - Hyper-V modules (udeb)
+ hypervisor-modules-4.9.0-9-powerpc64-di - IBM 64bit hypervisor console modules (udeb)
+ hypervisor-modules-4.9.0-9-powerpc64le-di - IBM 64bit hypervisor console modules (udeb)
+ i2c-modules-4.9.0-9-4kc-malta-di - i2c support modules (udeb)
+ i2c-modules-4.9.0-9-5kc-malta-di - i2c support modules (udeb)
+ i2c-modules-4.9.0-9-686-di - i2c support modules (udeb)
+ i2c-modules-4.9.0-9-686-pae-di - i2c support modules (udeb)
+ i2c-modules-4.9.0-9-amd64-di - i2c support modules (udeb)
+ i2c-modules-4.9.0-9-arm64-di - i2c support modules (udeb)
+ i2c-modules-4.9.0-9-armmp-di - i2c support modules (udeb)
+ i2c-modules-4.9.0-9-sh7751r-di - i2c support modules (udeb)
+ input-modules-4.9.0-9-4kc-malta-di - Input devices support (udeb)
+ input-modules-4.9.0-9-5kc-malta-di - Input devices support (udeb)
+ input-modules-4.9.0-9-686-di - Input devices support (udeb)
+ input-modules-4.9.0-9-686-pae-di - Input devices support (udeb)
+ input-modules-4.9.0-9-alpha-generic-di - Input devices support (udeb)
+ input-modules-4.9.0-9-amd64-di - Input devices support (udeb)
+ input-modules-4.9.0-9-arm64-di - Input devices support (udeb)
+ input-modules-4.9.0-9-armmp-di - Input devices support (udeb)
+ input-modules-4.9.0-9-loongson-3-di - Input devices support (udeb)
+ input-modules-4.9.0-9-marvell-di - Input devices support (udeb)
+ input-modules-4.9.0-9-octeon-di - Input devices support (udeb)
+ input-modules-4.9.0-9-parisc-di - Input devices support (udeb)
+ input-modules-4.9.0-9-parisc64-smp-di - Input devices support (udeb)
+ input-modules-4.9.0-9-powerpc-di - Input devices support (udeb)
+ input-modules-4.9.0-9-powerpc64-di - Input devices support (udeb)
+ input-modules-4.9.0-9-powerpc64le-di - Input devices support (udeb)
+ input-modules-4.9.0-9-sparc64-di - Input devices support (udeb)
+ ipv6-modules-4.9.0-9-marvell-di - IPv6 driver (udeb)
+ isofs-modules-4.9.0-9-4kc-malta-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-5kc-malta-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-686-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-686-pae-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-alpha-generic-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-amd64-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-arm64-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-armmp-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-loongson-3-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-m68k-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-marvell-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-octeon-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-parisc-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-parisc64-smp-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-powerpc-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-powerpc64-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-powerpc64le-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-s390x-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-sh7751r-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-sh7785lcr-di - ISOFS filesystem support (udeb)
+ isofs-modules-4.9.0-9-sparc64-di - ISOFS filesystem support (udeb)
+ jffs2-modules-4.9.0-9-marvell-di - JFFS2 filesystem support (udeb)
+ jfs-modules-4.9.0-9-4kc-malta-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-5kc-malta-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-686-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-686-pae-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-alpha-generic-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-amd64-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-arm64-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-armmp-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-loongson-3-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-marvell-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-octeon-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-parisc-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-parisc64-smp-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-powerpc-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-powerpc64-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-powerpc64le-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-sh7751r-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-sh7785lcr-di - JFS filesystem support (udeb)
+ jfs-modules-4.9.0-9-sparc64-di - JFS filesystem support (udeb)
+ kernel-image-4.9.0-9-4kc-malta-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-5kc-malta-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-686-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-686-pae-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-alpha-generic-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-amd64-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-arm64-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-armmp-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-loongson-3-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-m68k-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-marvell-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-octeon-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-parisc-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-parisc64-smp-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-powerpc-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-powerpc64-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-powerpc64le-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-s390x-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-sh7751r-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-sh7785lcr-di - Linux kernel image and core modules for the Debian installer (udeb)
+ kernel-image-4.9.0-9-sparc64-di - Linux kernel image and core modules for the Debian installer (udeb)
+ leds-modules-4.9.0-9-arm64-di - LED modules (udeb)
+ leds-modules-4.9.0-9-armmp-di - LED modules (udeb)
+ leds-modules-4.9.0-9-marvell-di - LED modules (udeb)
+ libcpupower-dev - CPU frequency and voltage scaling tools for Linux (development fi
+ libcpupower1 - CPU frequency and voltage scaling tools for Linux (libraries)
+ libusbip-dev - USB device sharing system over IP network (development files)
+ linux-compiler-gcc-6-arm - Compiler for Linux on ARM (meta-package)
+ linux-compiler-gcc-6-s390 - Compiler for Linux on IBM zSeries (meta-package)
+ linux-compiler-gcc-6-x86 - Compiler for Linux on x86 (meta-package)
+ linux-cpupower - CPU power management tools for Linux
+ linux-doc-4.9 - Linux kernel specific documentation for version 4.9
+ linux-headers-4.9.0-9-4kc-malta - Header files for Linux 4.9.0-9-4kc-malta
+ linux-headers-4.9.0-9-5kc-malta - Header files for Linux 4.9.0-9-5kc-malta
+ linux-headers-4.9.0-9-686 - Header files for Linux 4.9.0-9-686
+ linux-headers-4.9.0-9-686-pae - Header files for Linux 4.9.0-9-686-pae
+ linux-headers-4.9.0-9-all - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-alpha - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-amd64 - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-arm64 - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-armel - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-armhf - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-hppa - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-i386 - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-m68k - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-mips - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-mips64 - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-mips64el - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-mipsel - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-powerpc - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-powerpcspe - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-ppc64 - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-ppc64el - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-s390x - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-sh4 - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-all-sparc64 - All header files for Linux 4.9 (meta-package)
+ linux-headers-4.9.0-9-alpha-generic - Header files for Linux 4.9.0-9-alpha-generic
+ linux-headers-4.9.0-9-alpha-smp - Header files for Linux 4.9.0-9-alpha-smp
+ linux-headers-4.9.0-9-amd64 - Header files for Linux 4.9.0-9-amd64
+ linux-headers-4.9.0-9-arm64 - Header files for Linux 4.9.0-9-arm64
+ linux-headers-4.9.0-9-armmp - Header files for Linux 4.9.0-9-armmp
+ linux-headers-4.9.0-9-armmp-lpae - Header files for Linux 4.9.0-9-armmp-lpae
+ linux-headers-4.9.0-9-common - Common header files for Linux 4.9.0-9
+ linux-headers-4.9.0-9-common-rt - Common header files for Linux 4.9.0-9-rt
+ linux-headers-4.9.0-9-loongson-3 - Header files for Linux 4.9.0-9-loongson-3
+ linux-headers-4.9.0-9-m68k - Header files for Linux 4.9.0-9-m68k
+ linux-headers-4.9.0-9-marvell - Header files for Linux 4.9.0-9-marvell
+ linux-headers-4.9.0-9-octeon - Header files for Linux 4.9.0-9-octeon
+ linux-headers-4.9.0-9-parisc - Header files for Linux 4.9.0-9-parisc
+ linux-headers-4.9.0-9-parisc64-smp - Header files for Linux 4.9.0-9-parisc64-smp
+ linux-headers-4.9.0-9-powerpc - Header files for Linux 4.9.0-9-powerpc
+ linux-headers-4.9.0-9-powerpc-smp - Header files for Linux 4.9.0-9-powerpc-smp
+ linux-headers-4.9.0-9-powerpc64 - Header files for Linux 4.9.0-9-powerpc64
+ linux-headers-4.9.0-9-powerpc64le - Header files for Linux 4.9.0-9-powerpc64le
+ linux-headers-4.9.0-9-powerpcspe - Header files for Linux 4.9.0-9-powerpcspe
+ linux-headers-4.9.0-9-rt-686-pae - Header files for Linux 4.9.0-9-rt-686-pae
+ linux-headers-4.9.0-9-rt-amd64 - Header files for Linux 4.9.0-9-rt-amd64
+ linux-headers-4.9.0-9-s390x - Header files for Linux 4.9.0-9-s390x
+ linux-headers-4.9.0-9-sh7751r - Header files for Linux 4.9.0-9-sh7751r
+ linux-headers-4.9.0-9-sh7785lcr - Header files for Linux 4.9.0-9-sh7785lcr
+ linux-headers-4.9.0-9-sparc64 - Header files for Linux 4.9.0-9-sparc64
+ linux-headers-4.9.0-9-sparc64-smp - Header files for Linux 4.9.0-9-sparc64-smp
+ linux-image-4.9.0-9-4kc-malta - Linux 4.9 for MIPS Malta
+ linux-image-4.9.0-9-4kc-malta-dbg - Debug symbols for linux-image-4.9.0-9-4kc-malta
+ linux-image-4.9.0-9-5kc-malta - Linux 4.9 for MIPS Malta (64-bit)
+ linux-image-4.9.0-9-5kc-malta-dbg - Debug symbols for linux-image-4.9.0-9-5kc-malta
+ linux-image-4.9.0-9-686 - Linux 4.9 for older PCs
+ linux-image-4.9.0-9-686-dbg - Debug symbols for linux-image-4.9.0-9-686
+ linux-image-4.9.0-9-686-pae - Linux 4.9 for modern PCs
+ linux-image-4.9.0-9-686-pae-dbg - Debug symbols for linux-image-4.9.0-9-686-pae
+ linux-image-4.9.0-9-alpha-generic - Linux 4.9 for Alpha
+ linux-image-4.9.0-9-alpha-generic-dbg - Debug symbols for linux-image-4.9.0-9-alpha-generic
+ linux-image-4.9.0-9-alpha-smp - Linux 4.9 for Alpha SMP
+ linux-image-4.9.0-9-alpha-smp-dbg - Debug symbols for linux-image-4.9.0-9-alpha-smp
+ linux-image-4.9.0-9-amd64 - Linux 4.9 for 64-bit PCs
+ linux-image-4.9.0-9-amd64-dbg - Debug symbols for linux-image-4.9.0-9-amd64
+ linux-image-4.9.0-9-arm64 - Linux 4.9 for 64-bit ARMv8 machines
+ linux-image-4.9.0-9-arm64-dbg - Debug symbols for linux-image-4.9.0-9-arm64
+ linux-image-4.9.0-9-armmp - Linux 4.9 for ARMv7 multiplatform compatible SoCs
+ linux-image-4.9.0-9-armmp-dbg - Debug symbols for linux-image-4.9.0-9-armmp
+ linux-image-4.9.0-9-armmp-lpae - Linux 4.9 for ARMv7 multiplatform compatible SoCs supporting LPAE
+ linux-image-4.9.0-9-armmp-lpae-dbg - Debug symbols for linux-image-4.9.0-9-armmp-lpae
+ linux-image-4.9.0-9-loongson-3 - Linux 4.9 for Loongson 3A/3B
+ linux-image-4.9.0-9-loongson-3-dbg - Debug symbols for linux-image-4.9.0-9-loongson-3
+ linux-image-4.9.0-9-m68k - Linux 4.9 for Motorola MC68020+ family
+ linux-image-4.9.0-9-m68k-dbg - Debug symbols for linux-image-4.9.0-9-m68k
+ linux-image-4.9.0-9-marvell - Linux 4.9 for Marvell Kirkwood/Orion
+ linux-image-4.9.0-9-marvell-dbg - Debug symbols for linux-image-4.9.0-9-marvell
+ linux-image-4.9.0-9-octeon - Linux 4.9 for Octeon
+ linux-image-4.9.0-9-octeon-dbg - Debug symbols for linux-image-4.9.0-9-octeon
+ linux-image-4.9.0-9-parisc - Linux 4.9 for 32-bit PA-RISC
+ linux-image-4.9.0-9-parisc-dbg - Debug symbols for linux-image-4.9.0-9-parisc
+ linux-image-4.9.0-9-parisc64-smp - Linux 4.9 for multiprocessor 64-bit PA-RISC
+ linux-image-4.9.0-9-parisc64-smp-dbg - Debug symbols for linux-image-4.9.0-9-parisc64-smp
+ linux-image-4.9.0-9-powerpc - Linux 4.9 for uniprocessor 32-bit PowerPC
+ linux-image-4.9.0-9-powerpc-dbg - Debug symbols for linux-image-4.9.0-9-powerpc
+ linux-image-4.9.0-9-powerpc-smp - Linux 4.9 for multiprocessor 32-bit PowerPC
+ linux-image-4.9.0-9-powerpc-smp-dbg - Debug symbols for linux-image-4.9.0-9-powerpc-smp
+ linux-image-4.9.0-9-powerpc64 - Linux 4.9 for 64-bit PowerPC
+ linux-image-4.9.0-9-powerpc64-dbg - Debug symbols for linux-image-4.9.0-9-powerpc64
+ linux-image-4.9.0-9-powerpc64le - Linux 4.9 for Little-endian 64-bit PowerPC
+ linux-image-4.9.0-9-powerpc64le-dbg - Debug symbols for linux-image-4.9.0-9-powerpc64le
+ linux-image-4.9.0-9-powerpcspe - Linux 4.9 for 32-bit PowerPC with SPE (instead of AltiVec) with S
+ linux-image-4.9.0-9-powerpcspe-dbg - Debug symbols for linux-image-4.9.0-9-powerpcspe
+ linux-image-4.9.0-9-rt-686-pae - Linux 4.9 for modern PCs, PREEMPT_RT
+ linux-image-4.9.0-9-rt-686-pae-dbg - Debug symbols for linux-image-4.9.0-9-rt-686-pae
+ linux-image-4.9.0-9-rt-amd64 - Linux 4.9 for 64-bit PCs, PREEMPT_RT
+ linux-image-4.9.0-9-rt-amd64-dbg - Debug symbols for linux-image-4.9.0-9-rt-amd64
+ linux-image-4.9.0-9-s390x - Linux 4.9 for IBM zSeries
+ linux-image-4.9.0-9-s390x-dbg - Debug symbols for linux-image-4.9.0-9-s390x
+ linux-image-4.9.0-9-sh7751r - Linux 4.9 for sh7751r
+ linux-image-4.9.0-9-sh7751r-dbg - Debug symbols for linux-image-4.9.0-9-sh7751r
+ linux-image-4.9.0-9-sh7785lcr - Linux 4.9 for sh7785lcr
+ linux-image-4.9.0-9-sh7785lcr-dbg - Debug symbols for linux-image-4.9.0-9-sh7785lcr
+ linux-image-4.9.0-9-sparc64 - Linux 4.9 for uniprocessor 64-bit UltraSPARC
+ linux-image-4.9.0-9-sparc64-dbg - Debug symbols for linux-image-4.9.0-9-sparc64
+ linux-image-4.9.0-9-sparc64-smp - Linux 4.9 for multiprocessor 64-bit UltraSPARC
+ linux-image-4.9.0-9-sparc64-smp-dbg - Debug symbols for linux-image-4.9.0-9-sparc64-smp
+ linux-kbuild-4.9 - Kbuild infrastructure for Linux 4.9
+ linux-libc-dev - Linux support headers for userspace development
+ linux-manual-4.9 - Linux kernel API manual pages for version 4.9
+ linux-perf-4.9 - Performance analysis tools for Linux 4.9
+ linux-source-4.9 - Linux kernel source for version 4.9 with Debian patches
+ linux-support-4.9.0-9 - Support files for Linux 4.9
+ loop-modules-4.9.0-9-4kc-malta-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-5kc-malta-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-686-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-686-pae-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-alpha-generic-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-amd64-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-arm64-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-armmp-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-loongson-3-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-m68k-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-marvell-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-octeon-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-parisc-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-parisc64-smp-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-powerpc-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-powerpc64-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-powerpc64le-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-s390x-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-sh7751r-di - Loopback filesystem support (udeb)
+ loop-modules-4.9.0-9-sh7785lcr-di - Loopback filesystem support (udeb)
+ md-modules-4.9.0-9-4kc-malta-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-5kc-malta-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-686-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-686-pae-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-alpha-generic-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-amd64-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-arm64-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-armmp-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-loongson-3-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-m68k-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-marvell-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-octeon-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-parisc-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-parisc64-smp-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-powerpc-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-powerpc64-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-powerpc64le-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-s390x-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-sh7751r-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-sh7785lcr-di - RAID and LVM support (udeb)
+ md-modules-4.9.0-9-sparc64-di - RAID and LVM support (udeb)
+ minix-modules-4.9.0-9-4kc-malta-di - Minix filesystem support (udeb)
+ minix-modules-4.9.0-9-5kc-malta-di - Minix filesystem support (udeb)
+ minix-modules-4.9.0-9-loongson-3-di - Minix filesystem support (udeb)
+ minix-modules-4.9.0-9-marvell-di - Minix filesystem support (udeb)
+ minix-modules-4.9.0-9-octeon-di - Minix filesystem support (udeb)
+ minix-modules-4.9.0-9-sh7751r-di - Minix filesystem support (udeb)
+ minix-modules-4.9.0-9-sh7785lcr-di - Minix filesystem support (udeb)
+ mmc-core-modules-4.9.0-9-4kc-malta-di - MMC/SD/SDIO core modules (udeb)
+ mmc-core-modules-4.9.0-9-5kc-malta-di - MMC/SD/SDIO core modules (udeb)
+ mmc-core-modules-4.9.0-9-686-di - MMC/SD/SDIO core modules (udeb)
+ mmc-core-modules-4.9.0-9-686-pae-di - MMC/SD/SDIO core modules (udeb)
+ mmc-core-modules-4.9.0-9-amd64-di - MMC/SD/SDIO core modules (udeb)
+ mmc-modules-4.9.0-9-4kc-malta-di - MMC/SD card modules (udeb)
+ mmc-modules-4.9.0-9-5kc-malta-di - MMC/SD card modules (udeb)
+ mmc-modules-4.9.0-9-686-di - MMC/SD card modules (udeb)
+ mmc-modules-4.9.0-9-686-pae-di - MMC/SD card modules (udeb)
+ mmc-modules-4.9.0-9-amd64-di - MMC/SD card modules (udeb)
+ mmc-modules-4.9.0-9-arm64-di - MMC/SD card modules (udeb)
+ mmc-modules-4.9.0-9-armmp-di - MMC/SD card modules (udeb)
+ mmc-modules-4.9.0-9-marvell-di - MMC/SD card modules (udeb)
+ mouse-modules-4.9.0-9-4kc-malta-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-5kc-malta-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-686-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-686-pae-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-alpha-generic-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-amd64-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-marvell-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-parisc-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-parisc64-smp-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-powerpc-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-powerpc64-di - Mouse support (udeb)
+ mouse-modules-4.9.0-9-powerpc64le-di - Mouse support (udeb)
+ mtd-modules-4.9.0-9-armmp-di - MTD modules (udeb)
+ mtd-modules-4.9.0-9-marvell-di - MTD modules (udeb)
+ multipath-modules-4.9.0-9-4kc-malta-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-5kc-malta-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-686-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-686-pae-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-alpha-generic-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-amd64-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-arm64-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-armmp-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-loongson-3-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-marvell-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-octeon-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-parisc-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-parisc64-smp-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-powerpc-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-powerpc64-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-powerpc64le-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-s390x-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-sh7751r-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-sh7785lcr-di - Multipath support (udeb)
+ multipath-modules-4.9.0-9-sparc64-di - Multipath support (udeb)
+ nbd-modules-4.9.0-9-4kc-malta-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-5kc-malta-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-686-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-686-pae-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-alpha-generic-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-amd64-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-arm64-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-armmp-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-loongson-3-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-m68k-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-marvell-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-octeon-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-parisc-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-parisc64-smp-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-powerpc-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-powerpc64-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-powerpc64le-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-s390x-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-sh7751r-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-sh7785lcr-di - Network Block Device modules (udeb)
+ nbd-modules-4.9.0-9-sparc64-di - Network Block Device modules (udeb)
+ nfs-modules-4.9.0-9-loongson-3-di - NFS filesystem support (udeb)
+ nic-modules-4.9.0-9-4kc-malta-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-5kc-malta-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-686-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-686-pae-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-alpha-generic-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-amd64-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-arm64-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-armmp-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-loongson-3-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-marvell-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-octeon-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-parisc-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-parisc64-smp-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-powerpc-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-powerpc64-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-powerpc64le-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-s390x-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-sh7751r-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-sh7785lcr-di - NIC drivers (udeb)
+ nic-modules-4.9.0-9-sparc64-di - Network card modules for Sparc kernels (udeb)
+ nic-pcmcia-modules-4.9.0-9-686-di - Common PCMCIA NIC drivers (udeb)
+ nic-pcmcia-modules-4.9.0-9-686-pae-di - Common PCMCIA NIC drivers (udeb)
+ nic-pcmcia-modules-4.9.0-9-alpha-generic-di - Common PCMCIA NIC drivers (udeb)
+ nic-pcmcia-modules-4.9.0-9-amd64-di - Common PCMCIA NIC drivers (udeb)
+ nic-pcmcia-modules-4.9.0-9-powerpc-di - Common PCMCIA NIC drivers (udeb)
+ nic-pcmcia-modules-4.9.0-9-powerpc64-di - Common PCMCIA NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-4kc-malta-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-5kc-malta-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-686-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-686-pae-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-alpha-generic-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-amd64-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-arm64-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-armmp-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-loongson-3-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-m68k-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-marvell-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-octeon-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-parisc-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-parisc64-smp-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-powerpc-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-powerpc64-di - Shared NIC drivers (udeb)
+ nic-shared-modules-4.9.0-9-powerpc64le-di - Shared NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-4kc-malta-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-5kc-malta-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-686-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-686-pae-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-alpha-generic-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-amd64-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-arm64-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-armmp-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-loongson-3-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-marvell-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-octeon-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-parisc-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-parisc64-smp-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-sh7751r-di - USB NIC drivers (udeb)
+ nic-usb-modules-4.9.0-9-sh7785lcr-di - USB NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-4kc-malta-di - Wireless NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-5kc-malta-di - Wireless NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-686-di - Wireless NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-686-pae-di - Wireless NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-alpha-generic-di - Wireless NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-amd64-di - Wireless NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-arm64-di - Wireless NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-armmp-di - Wireless NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-loongson-3-di - Wireless NIC drivers (udeb)
+ nic-wireless-modules-4.9.0-9-octeon-di - Wireless NIC drivers (udeb)
+ ntfs-modules-4.9.0-9-4kc-malta-di - NTFS filesystem support (udeb)
+ ntfs-modules-4.9.0-9-5kc-malta-di - NTFS filesystem support (udeb)
+ ntfs-modules-4.9.0-9-686-di - NTFS filesystem support (udeb)
+ ntfs-modules-4.9.0-9-686-pae-di - NTFS filesystem support (udeb)
+ ntfs-modules-4.9.0-9-amd64-di - NTFS filesystem support (udeb)
+ ntfs-modules-4.9.0-9-loongson-3-di - NTFS filesystem support (udeb)
+ ntfs-modules-4.9.0-9-octeon-di - NTFS filesystem support (udeb)
+ pata-modules-4.9.0-9-4kc-malta-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-5kc-malta-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-686-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-686-pae-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-alpha-generic-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-amd64-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-armmp-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-loongson-3-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-octeon-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-parisc-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-parisc64-smp-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-powerpc-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-powerpc64-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-sh7751r-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-sh7785lcr-di - PATA drivers (udeb)
+ pata-modules-4.9.0-9-sparc64-di - PATA drivers (udeb)
+ pcmcia-modules-4.9.0-9-686-di - Common PCMCIA drivers (udeb)
+ pcmcia-modules-4.9.0-9-686-pae-di - Common PCMCIA drivers (udeb)
+ pcmcia-modules-4.9.0-9-alpha-generic-di - Common PCMCIA drivers (udeb)
+ pcmcia-modules-4.9.0-9-amd64-di - Common PCMCIA drivers (udeb)
+ pcmcia-modules-4.9.0-9-powerpc-di - Common PCMCIA drivers (udeb)
+ pcmcia-modules-4.9.0-9-powerpc64-di - Common PCMCIA drivers (udeb)
+ pcmcia-storage-modules-4.9.0-9-686-di - PCMCIA storage drivers (udeb)
+ pcmcia-storage-modules-4.9.0-9-686-pae-di - PCMCIA storage drivers (udeb)
+ pcmcia-storage-modules-4.9.0-9-amd64-di - PCMCIA storage drivers (udeb)
+ pcmcia-storage-modules-4.9.0-9-powerpc-di - PCMCIA storage drivers (udeb)
+ pcmcia-storage-modules-4.9.0-9-powerpc64-di - PCMCIA storage drivers (udeb)
+ ppp-modules-4.9.0-9-4kc-malta-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-5kc-malta-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-686-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-686-pae-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-alpha-generic-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-amd64-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-arm64-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-armmp-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-loongson-3-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-m68k-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-marvell-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-octeon-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-parisc-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-parisc64-smp-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-powerpc-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-powerpc64-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-powerpc64le-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-sh7751r-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-sh7785lcr-di - PPP drivers (udeb)
+ ppp-modules-4.9.0-9-sparc64-di - PPP drivers (udeb)
+ rtc-modules-4.9.0-9-octeon-di - RTC modules (udeb)
+ sata-modules-4.9.0-9-4kc-malta-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-5kc-malta-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-686-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-686-pae-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-alpha-generic-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-amd64-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-arm64-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-armmp-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-loongson-3-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-marvell-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-octeon-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-parisc-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-parisc64-smp-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-powerpc-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-powerpc64-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-powerpc64le-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-sh7751r-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-sh7785lcr-di - SATA drivers (udeb)
+ sata-modules-4.9.0-9-sparc64-di - SATA drivers (udeb)
+ scsi-core-modules-4.9.0-9-4kc-malta-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-5kc-malta-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-686-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-686-pae-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-alpha-generic-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-amd64-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-arm64-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-armmp-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-loongson-3-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-marvell-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-octeon-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-parisc-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-parisc64-smp-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-powerpc-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-powerpc64-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-powerpc64le-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-s390x-di - Core SCSI subsystem (udeb)
+ scsi-core-modules-4.9.0-9-sparc64-di - Core SCSI subsystem (udeb)
+ scsi-modules-4.9.0-9-4kc-malta-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-5kc-malta-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-686-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-686-pae-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-alpha-generic-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-amd64-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-arm64-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-armmp-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-loongson-3-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-m68k-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-octeon-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-parisc-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-parisc64-smp-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-powerpc-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-powerpc64-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-powerpc64le-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-s390x-di - SCSI drivers (udeb)
+ scsi-modules-4.9.0-9-sparc64-di - SCSI drivers (udeb)
+ serial-modules-4.9.0-9-686-di - Serial drivers (udeb)
+ serial-modules-4.9.0-9-686-pae-di - Serial drivers (udeb)
+ serial-modules-4.9.0-9-alpha-generic-di - Serial drivers (udeb)
+ serial-modules-4.9.0-9-amd64-di - Serial drivers (udeb)
+ serial-modules-4.9.0-9-parisc-di - Serial drivers (udeb)
+ serial-modules-4.9.0-9-parisc64-smp-di - Serial drivers (udeb)
+ serial-modules-4.9.0-9-powerpc-di - Serial drivers (udeb)
+ serial-modules-4.9.0-9-powerpc64-di - Serial drivers (udeb)
+ serial-modules-4.9.0-9-powerpc64le-di - Serial drivers (udeb)
+ sound-modules-4.9.0-9-4kc-malta-di - sound support (udeb)
+ sound-modules-4.9.0-9-5kc-malta-di - sound support (udeb)
+ sound-modules-4.9.0-9-686-di - sound support (udeb)
+ sound-modules-4.9.0-9-686-pae-di - sound support (udeb)
+ sound-modules-4.9.0-9-amd64-di - sound support (udeb)
+ sound-modules-4.9.0-9-loongson-3-di - sound support (udeb)
+ sound-modules-4.9.0-9-octeon-di - sound support (udeb)
+ sound-modules-4.9.0-9-sh7751r-di - sound support (udeb)
+ sound-modules-4.9.0-9-sh7785lcr-di - sound support (udeb)
+ speakup-modules-4.9.0-9-686-di - speakup modules (udeb)
+ speakup-modules-4.9.0-9-686-pae-di - speakup modules (udeb)
+ speakup-modules-4.9.0-9-amd64-di - speakup modules (udeb)
+ speakup-modules-4.9.0-9-loongson-3-di - speakup modules (udeb)
+ speakup-modules-4.9.0-9-sh7751r-di - speakup modules (udeb)
+ speakup-modules-4.9.0-9-sh7785lcr-di - speakup modules (udeb)
+ squashfs-modules-4.9.0-9-4kc-malta-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-5kc-malta-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-686-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-686-pae-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-alpha-generic-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-amd64-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-arm64-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-armmp-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-loongson-3-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-m68k-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-marvell-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-octeon-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-parisc-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-parisc64-smp-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-powerpc-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-powerpc64-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-powerpc64le-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-sh7751r-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-sh7785lcr-di - squashfs modules (udeb)
+ squashfs-modules-4.9.0-9-sparc64-di - squashfs modules (udeb)
+ srm-modules-4.9.0-9-alpha-generic-di - SRM modules (udeb)
+ udf-modules-4.9.0-9-4kc-malta-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-5kc-malta-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-686-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-686-pae-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-amd64-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-arm64-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-armmp-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-loongson-3-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-m68k-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-marvell-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-octeon-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-powerpc-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-powerpc64-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-powerpc64le-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-s390x-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-sh7751r-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-sh7785lcr-di - UDF modules (udeb)
+ udf-modules-4.9.0-9-sparc64-di - UDF modules (udeb)
+ ufs-modules-4.9.0-9-sparc64-di - UFS filesystem support (udeb)
+ uinput-modules-4.9.0-9-686-di - uinput support (udeb)
+ uinput-modules-4.9.0-9-686-pae-di - uinput support (udeb)
+ uinput-modules-4.9.0-9-amd64-di - uinput support (udeb)
+ uinput-modules-4.9.0-9-arm64-di - uinput support (udeb)
+ uinput-modules-4.9.0-9-armmp-di - uinput support (udeb)
+ uinput-modules-4.9.0-9-marvell-di - uinput support (udeb)
+ uinput-modules-4.9.0-9-powerpc-di - uinput support (udeb)
+ uinput-modules-4.9.0-9-powerpc64-di - uinput support (udeb)
+ uinput-modules-4.9.0-9-powerpc64le-di - uinput support (udeb)
+ usb-modules-4.9.0-9-4kc-malta-di - USB support (udeb)
+ usb-modules-4.9.0-9-5kc-malta-di - USB support (udeb)
+ usb-modules-4.9.0-9-686-di - USB support (udeb)
+ usb-modules-4.9.0-9-686-pae-di - USB support (udeb)
+ usb-modules-4.9.0-9-alpha-generic-di - USB support (udeb)
+ usb-modules-4.9.0-9-amd64-di - USB support (udeb)
+ usb-modules-4.9.0-9-arm64-di - USB support (udeb)
+ usb-modules-4.9.0-9-armmp-di - USB support (udeb)
+ usb-modules-4.9.0-9-loongson-3-di - USB support (udeb)
+ usb-modules-4.9.0-9-marvell-di - USB support (udeb)
+ usb-modules-4.9.0-9-octeon-di - USB support (udeb)
+ usb-modules-4.9.0-9-parisc-di - USB support (udeb)
+ usb-modules-4.9.0-9-parisc64-smp-di - USB support (udeb)
+ usb-modules-4.9.0-9-powerpc-di - USB support (udeb)
+ usb-modules-4.9.0-9-powerpc64-di - USB support (udeb)
+ usb-modules-4.9.0-9-powerpc64le-di - USB support (udeb)
+ usb-modules-4.9.0-9-sparc64-di - USB support (udeb)
+ usb-serial-modules-4.9.0-9-4kc-malta-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-5kc-malta-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-686-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-686-pae-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-alpha-generic-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-amd64-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-loongson-3-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-marvell-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-octeon-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-parisc-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-parisc64-smp-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-powerpc-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-powerpc64-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-powerpc64le-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-sh7751r-di - USB serial drivers (udeb)
+ usb-serial-modules-4.9.0-9-sh7785lcr-di - USB serial drivers (udeb)
+ usb-storage-modules-4.9.0-9-4kc-malta-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-5kc-malta-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-686-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-686-pae-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-alpha-generic-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-amd64-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-arm64-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-armmp-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-loongson-3-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-marvell-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-octeon-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-parisc-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-parisc64-smp-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-powerpc-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-powerpc64-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-powerpc64le-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-sh7751r-di - USB storage support (udeb)
+ usb-storage-modules-4.9.0-9-sparc64-di - USB storage support (udeb)
+ usbip - USB device sharing system over IP network
+ virtio-modules-4.9.0-9-4kc-malta-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-5kc-malta-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-686-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-686-pae-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-alpha-generic-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-amd64-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-arm64-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-armmp-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-loongson-3-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-octeon-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-parisc-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-parisc64-smp-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-powerpc-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-powerpc64-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-powerpc64le-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-s390x-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-sh7751r-di - virtio modules (udeb)
+ virtio-modules-4.9.0-9-sparc64-di - virtio modules (udeb)
+ xfs-modules-4.9.0-9-4kc-malta-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-5kc-malta-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-686-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-686-pae-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-alpha-generic-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-amd64-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-arm64-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-loongson-3-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-octeon-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-parisc-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-parisc64-smp-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-powerpc-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-powerpc64-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-powerpc64le-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-s390x-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-sh7751r-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-sh7785lcr-di - XFS filesystem support (udeb)
+ xfs-modules-4.9.0-9-sparc64-di - XFS filesystem support (udeb)
+ zlib-modules-4.9.0-9-4kc-malta-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-5kc-malta-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-alpha-generic-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-armmp-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-loongson-3-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-m68k-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-marvell-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-octeon-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-parisc-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-parisc64-smp-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-powerpc-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-s390x-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-sh7751r-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-sh7785lcr-di - zlib modules (udeb)
+ zlib-modules-4.9.0-9-sparc64-di - zlib modules (udeb)
+Closes: 904385 918103 922306
+Changes:
+ linux (4.9.161-1) stretch; urgency=medium
+ .
+ * New upstream stable update:
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.145
+ - [armhf] media: omap3isp: Unregister media device as first
+ - [amd64] iommu/vt-d: Fix NULL pointer dereference in prq_event_thread()
+ - brcmutil: really fix decoding channel info for 160 MHz bandwidth
+ - HID: input: Ignore battery reported by Symbol DS4308
+ - batman-adv: Expand merged fragment buffer for full packet
+ - bnx2x: Assign unique DMAE channel number for FW DMAE transactions.
+ - qed: Fix PTT leak in qed_drain()
+ - qed: Fix reading wrong value in loop condition
+ - net/mlx4_core: Zero out lkey field in SW2HW_MPT fw command
+ - net/mlx4_core: Fix uninitialized variable compilation warning
+ - net/mlx4: Fix UBSAN warning of signed integer overflow
+ - [amd64] iommu/vt-d: Use memunmap to free memremap
+ - team: no need to do team_notify_peers or team_mcast_rejoin when
+ disabling port
+ - mm: don't warn about allocations which stall for too long
+ - usb: quirk: add no-LPM quirk on SanDisk Ultra Flair device
+ - usb: appledisplay: Add 27" Apple Cinema Display
+ - USB: check usb_get_extra_descriptor for proper size (CVE-2018-20169)
+ - ALSA: usb-audio: Fix UAF decrement if card has no live interfaces in
+ card.c (CVE-2018-19824)
+ - [x86] ALSA: hda: Add support for AMD Stoney Ridge
+ - ALSA: pcm: Fix starvation on down_write_nonblock()
+ - ALSA: pcm: Call snd_pcm_unlink() conditionally at closing
+ - ALSA: pcm: Fix interval evaluation with openmin/max
+ - [x86] ALSA: hda/realtek - Fix speaker output regression on Thinkpad T570
+ - [s390x] virtio: avoid race on vcdev->config
+ - [s390x] virtio: fix race in ccw_io_helper()
+ - SUNRPC: Fix leak of krb5p encode pages
+ - [armhf] dmaengine: cppi41: delete channel from pending list when stop
+ channel
+ - xhci: Prevent U1/U2 link pm states if exit latency is too long
+ - swiotlb: clean up reporting
+ - vsock: lookup and setup guest_cid inside vhost_vsock_lock
+ - vhost/vsock: fix use-after-free in network stack callers
+ (CVE-2018-14625)
+ - cifs: Fix separator when building path from dentry
+ - staging: rtl8712: Fix possible buffer overrun
+ - tty: do not set TTY_IO_ERROR flag if console port
+ - mac80211_hwsim: Timer should be initialized before device registered
+ - mac80211: Clear beacon_int in ieee80211_do_stop
+ - mac80211: ignore tx status for PS stations in ieee80211_tx_status_ext
+ - mac80211: fix reordering of buffered broadcast packets
+ - mac80211: ignore NullFunc frames in the duplicate detection
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.146
+ - ipv6: Check available headroom in ip6_xmit() even without options
+ - net: 8139cp: fix a BUG triggered by changing mtu with network traffic
+ - net/mlx4_core: Correctly set PFC param if global pause is turned off.
+ - net: phy: don't allow __set_phy_supported to add unsupported modes
+ - net: Prevent invalid access to skb->prev in __qdisc_drop_all
+ - rtnetlink: ndo_dflt_fdb_dump() only work for ARPHRD_ETHER devices
+ - tcp: fix NULL ref in tail loss probe
+ - tun: forbid iface creation with rtnl ops
+ - neighbour: Avoid writing before skb->head in neigh_hh_output()
+ - [armhf] OMAP2+: prm44xx: Fix section annotation on
+ omap44xx_prm_enable_io_wakeup
+ - sysv: return 'err' instead of 0 in __sysv_write_inode
+ - [s390x] cpum_cf: Reject request for sampling in event initialization
+ - [armhf] ASoC: omap-abe-twl6040: Fix missing audio card caused by
+ deferred probing
+ - ASoC: dapm: Recalculate audio map forcely when card instantiated
+ - hwmon: (w83795) temp4_type has writable permission
+ - objtool: Fix double-free in .cold detection error path
+ - objtool: Fix segfault in .cold detection with -ffunction-sections
+ - Btrfs: send, fix infinite loop due to directory rename dependencies
+ - RDMA/mlx5: Fix fence type for IB_WR_LOCAL_INV WR
+ - [armhf] ASoC: omap-mcpdm: Add pm_qos handling to avoid under/overruns
+ with CPU_IDLE
+ - [armhf] ASoC: omap-dmic: Add pm_qos handling to avoid overruns with
+ CPU_IDLE
+ - exportfs: do not read dentry after free
+ - bpf: fix check of allowed specifiers in bpf_trace_printk
+ - ipvs: call ip_vs_dst_notifier earlier than ipv6_dev_notf
+ - [arm64] net: thunderx: fix NULL pointer dereference in nic_remove
+ - cachefiles: Fix page leak in cachefiles_read_backing_file while vmscan
+ is active
+ - igb: fix uninitialized variables
+ - ixgbe: recognize 1000BaseLX SFP modules as 1Gbps
+ - [arm64] net: hisilicon: remove unexpected free_netdev
+ - drm/ast: fixed reading monitor EDID not stable issue
+ - fscache: fix race between enablement and dropping of object
+ - ocfs2: fix deadlock caused by ocfs2_defrag_extent()
+ - hfs: do not free node before using
+ - hfsplus: do not free node before using
+ - ocfs2: fix potential use after free
+ - pstore: Convert console write to use ->write_buf
+ - staging: speakup: Replace strncpy with memcpy
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.147
+ - signal: Introduce COMPAT_SIGMINSTKSZ for use in compat_sys_sigaltstack
+ (Closes: #904385)
+ - timer/debug: Change /proc/timer_list from 0444 to 0400
+ - [armhf] pinctrl: sunxi: a83t: Fix IRQ offset typo for PH11
+ - aio: fix spectre gadget in lookup_ioctx
+ - [armhf] MMC: OMAP: fix broken MMC on OMAP15XX/OMAP5910/OMAP310
+ - [arm*] ARM: mmp/mmp2: fix cpu_is_mmp2() on mmp2-dt
+ - tracing: Fix memory leak in set_trigger_filter()
+ - tracing: Fix memory leak of instance function hash filters
+ - [powerpc*] msi: Fix NULL pointer access in teardown code
+ - Revert "drm/rockchip: Allow driver to be shutdown on reboot/kexec"
+ - [x86] drm/i915/execlists: Apply a full mb before execution for Braswell
+ - mac80211: don't WARN on bad WMM parameters from buggy APs
+ - mac80211: Fix condition validating WMM IE
+ - [amd64] IB/hfi1: Remove race conditions in user_sdma send path
+ - [x86] locking: Remove smp_read_barrier_depends() from
+ queued_spin_lock_slowpath()
+ - [x86] locking/qspinlock: Ensure node is initialised before updating
+ prev->next
+ - [x86] locking/qspinlock: Bound spinning on pending->locked transition in
+ slowpath
+ - [x86] locking/qspinlock: Merge 'struct __qspinlock' into 'struct
+ qspinlock'
+ - [x86] locking/qspinlock: Remove unbounded cmpxchg() loop from locking
+ slowpath
+ - [x86] locking/qspinlock: Remove duplicate clear_pending() function from
+ PV code
+ - [x86] locking/qspinlock: Kill cmpxchg() loop when claiming lock from
+ head of queue
+ - [x86] locking/qspinlock: Re-order code
+ - [x86] locking/qspinlock/x86: Increase _Q_PENDING_LOOPS upper bound
+ - [x86] locking/qspinlock, x86: Provide liveness guarantee
+ - [x86] locking/qspinlock: Fix build for anonymous union in older GCC
+ compilers
+ - mac80211_hwsim: fix module init error paths for netlink
+ - scsi: libiscsi: Fix NULL pointer dereference in iscsi_eh_session_reset
+ - [x86] scsi: vmw_pscsi: Rearrange code to avoid multiple calls to
+ free_irq during unload
+ - [x86] earlyprintk/efi: Fix infinite loop on some screen widths
+ - [arm64] drm/msm: Grab a vblank reference when waiting for commit_done
+ - bonding: fix 802.3ad state sent to partner when unbinding slave
+ - nfs: don't dirty kernel pages read by direct-io
+ - SUNRPC: Fix a potential race in xprt_connect()
+ - [arm64] clk: mvebu: Off by one bugs in cp110_of_clk_get()
+ - [armhf] Input: omap-keypad - fix keyboard debounce configuration
+ - libata: whitelist all SAMSUNG MZ7KM* solid-state disks
+ - [armhf] mv88e6060: disable hardware level MAC learning
+ - net/mlx4_en: Fix build break when CONFIG_INET is off
+ - bpf: check pending signals while verifying programs
+ - [arm*] 8814/1: mm: improve/fix ARM v7_dma_inv_range() unaligned address
+ handling
+ - [arm*] 8815/1: V7M: align v7m_dma_inv_range() with v7 counterpart
+ - drm/ast: Fix connector leak during driver unload
+ - cifs: In Kconfig CONFIG_CIFS_POSIX needs depends on legacy (insecure
+ cifs)
+ - vhost/vsock: fix reset orphans race with close timeout
+ - [x86] i2c: scmi: Fix probe error on devices with an empty SMB0001 ACPI
+ device node
+ - nvmet-rdma: fix response use after free
+ - [armhf] rtc: snvs: add a missing write sync
+ - [armhf] rtc: snvs: Add timeouts to avoid kernel lockups
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.148
+ - block: break discard submissions into the user defined size
+ - block: fix infinite loop if the device loses discard capability
+ - ib_srpt: Fix a use-after-free in __srpt_close_all_ch()
+ - USB: hso: Fix OOB memory access in hso_probe/hso_get_config_data
+ (CVE-2018-19985)
+ - xhci: Don't prevent USB2 bus suspend in state check intended for USB3
+ only
+ - USB: serial: option: add GosunCn ZTE WeLink ME3630
+ - USB: serial: option: add HP lt4132
+ - USB: serial: option: add Simcom SIM7500/SIM7600 (MBIM mode)
+ - USB: serial: option: add Fibocom NL668 series
+ - USB: serial: option: add Telit LN940 series
+ - mmc: core: Reset HPI enabled state during re-init and in case of errors
+ - mmc: core: Allow BKOPS and CACHE ctrl even if no HPI support
+ - mmc: core: Use a minimum 1600ms timeout when enabling CACHE ctrl
+ - [armhf] mmc: omap_hsmmc: fix DMA API warning
+ - [x86] Drivers: hv: vmbus: Return -EINVAL for the sys files for unopened
+ channels
+ - [x86] mtrr: Don't copy uninitialized gentry fields back to userspace
+ - [x86] fpu: Disable bottom halves while loading FPU registers
+ - ubifs: Handle re-linking of inodes correctly while recovery
+ - panic: avoid deadlocks in re-entrant console drivers
+ - proc/sysctl: don't return ENOMEM on lookup when a table is unregistering
+ - drm/ioctl: Fix Spectre v1 vulnerabilities
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.149
+ - ip6mr: Fix potential Spectre v1 vulnerability
+ - ipv4: Fix potential Spectre v1 vulnerability
+ - ax25: fix a use-after-free in ax25_fillin_cb()
+ - [ppc64el] ibmveth: fix DMA unmap error in ibmveth_xmit_start error path
+ - ieee802154: lowpan_header_create check must check daddr
+ - ipv6: explicitly initialize udp6_addr in udp_sock_create6()
+ - ipv6: tunnels: fix two use-after-free
+ - isdn: fix kernel-infoleak in capi_unlocked_ioctl
+ - net: ipv4: do not handle duplicate fragments as overlapping
+ - net: phy: Fix the issue that netif always links up after resuming
+ - netrom: fix locking in nr_find_socket()
+ - packet: validate address length
+ - packet: validate address length if non-zero
+ - sctp: initialize sin6_flowinfo for ipv6 addrs in sctp_inet6addr_event
+ - tipc: fix a double kfree_skb()
+ - vhost: make sure used idx is seen before log in vhost_add_used_n()
+ - [x86] VSOCK: Send reset control packet when socket is partially bound
+ - xen/netfront: tolerate frags with no data
+ - tipc: use lock_sock() in tipc_sk_reinit()
+ - tipc: compare remote and local protocols in tipc_udp_enable()
+ - gro_cell: add napi_disable in gro_cells_destroy
+ - net/mlx5e: Remove the false indication of software timestamping support
+ - net/mlx5: Typo fix in del_sw_hw_rule
+ - sock: Make sock->sk_stamp thread-safe
+ - ptr_ring: wrap back ->producer in __ptr_ring_swap_queue()
+ - ALSA: rme9652: Fix potential Spectre v1 vulnerability
+ - ALSA: emu10k1: Fix potential Spectre v1 vulnerabilities
+ - ALSA: pcm: Fix potential Spectre v1 vulnerability
+ - ALSA: emux: Fix potential Spectre v1 vulnerabilities
+ - ALSA: hda: add mute LED support for HP EliteBook 840 G4
+ - [arm64,armhf] ALSA: hda/tegra: clear pending irq handlers
+ - USB: serial: pl2303: add ids for Hewlett-Packard HP POS pole displays
+ - USB: serial: option: add Fibocom NL678 series
+ - qmi_wwan: apply SET_DTR quirk to the SIMCOM shared device ID
+ - Input: elan_i2c - add ACPI ID for touchpad in ASUS Aspire F5-573G
+ - [x86] KVM: Use jmp to invoke kvm_spurious_fault() from .fixup
+ - platform-msi: Free descriptors in platform_msi_domain_free()
+ - perf pmu: Suppress potential format-truncation warning
+ - ext4: fix possible use after free in ext4_quota_enable
+ - ext4: missing unlock/put_page() in ext4_try_to_write_inline_data()
+ - ext4: fix EXT4_IOC_GROUP_ADD ioctl
+ - ext4: include terminating u32 in size of xattr entries when expanding
+ inodes
+ - ext4: force inode writes when nfsd calls commit_metadata()
+ - [arm64,armhf] spi: bcm2835: Fix race on DMA termination
+ - [arm64,armhf] spi: bcm2835: Fix book-keeping of DMA termination
+ - [arm64,armhf] spi: bcm2835: Avoid finishing transfer prematurely in IRQ
+ mode
+ - [armhf] clk: rockchip: fix typo in rk3188 spdif_frac parent
+ - cdc-acm: fix abnormal DATA RX issue for Mediatek Preloader.
+ - f2fs: fix validation of the block count in sanity_check_raw_super
+ - media: vivid: free bitmap_cap when updating std/timings/etc.
+ - media: v4l2-tpg: array index could become negative
+ - [mips*] Ensure pmd_present() returns false after pmd_mknotpresent()
+ - [mips*] OCTEON: mark RGMII interface disabled on OCTEON III
+ - CIFS: Fix error mapping for SMB2_LOCK command which caused OFD lock problem
+ - [x86] kvm/vmx: do not use vm-exit instruction length for fast MMIO when
+ running nested
+ - [arm64] KVM: Avoid setting the upper 32 bits of VTCR_EL2 to 1
+ - [armhf] rtc: m41t80: Correct alarm month range with RTC reads
+ - [x86] tpm: tpm_i2c_nuvoton: use correct command duration for TPM 2.x
+ - [arm64,armhf] spi: bcm2835: Unbreak the build of esoteric configs
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.150
+ - [arm64] pinctrl: meson: fix pull enable register calculation
+ - Input: restore EV_ABS ABS_RESERVED
+ - xfrm: Fix bucket count reported to userspace
+ - netfilter: seqadj: re-load tcp header pointer after possible head
+ reallocation
+ - scsi: bnx2fc: Fix NULL dereference in error handling
+ - [armhf] Input: omap-keypad - fix idle configuration to not block SoC
+ idle states
+ - netfilter: ipset: do not call ipset_nest_end after nla_nest_cancel
+ - bnx2x: Clear fip MAC when fcoe offload support is disabled
+ - bnx2x: Remove configured vlans as part of unload sequence.
+ - bnx2x: Send update-svid ramrod with retry/poll flags enabled
+ - scsi: target: iscsi: cxgbit: fix csk leak
+ - scsi: target: iscsi: cxgbit: add missing spin_lock_init()
+ - [arm64] net: hns: Incorrect offset address used for some registers.
+ - [arm64] net: hns: All ports can not work when insmod hns ko after rmmod.
+ - [arm64] net: hns: Some registers use wrong address according to the
+ datasheet.
+ - [arm64] net: hns: Fixed bug that netdev was opened twice
+ - [arm64] net: hns: Clean rx fbd when ae stopped.
+ - [arm64] net: hns: Free irq when exit from abnormal branch
+ - [arm64] net: hns: Avoid net reset caused by pause frames storm
+ - [arm64] net: hns: Fix ntuple-filters status error.
+ - net: hns: Add mac pcs config when enable|disable mac
+ - SUNRPC: Fix a race with XPRT_CONNECTING
+ - lan78xx: Resolve issue with changing MAC address
+ - vxge: ensure data0 is initialized in when fetching firmware version
+ information
+ - net: netxen: fix a missing check and an uninitialized use
+ - [s390x] scsi: zfcp: fix posting too many status read buffers leading to
+ adapter shutdown
+ - libceph: fix CEPH_FEATURE_CEPHX_V2 check in calc_signature()
+ - fork: record start_time late
+ - hwpoison, memory_hotplug: allow hwpoisoned pages to be offlined
+ - mm, devm_memremap_pages: mark devm_memremap_pages() EXPORT_SYMBOL_GPL
+ - mm, devm_memremap_pages: kill mapping "System RAM" support
+ - sunrpc: fix cache_head leak due to queued request
+ - sunrpc: use SVC_NET() in svcauth_gss_* functions
+ - [mips*] math-emu: Write-protect delay slot emulation pages
+ - [amd64] crypto: x86/chacha20 - avoid sleeping with preemption disabled
+ - vhost/vsock: fix uninitialized vhost_vsock->guest_cid
+ - [amd64] IB/hfi1: Incorrect sizing of sge for PIO will OOPs
+ - ALSA: cs46xx: Potential NULL dereference in probe
+ - ALSA: usb-audio: Avoid access before bLength check in
+ build_audio_procunit()
+ - ALSA: usb-audio: Fix an out-of-bound read in create_composite_quirks
+ - dlm: fixed memory leaks after failed ls_remove_names allocation
+ - dlm: possible memory leak on error path in create_lkb()
+ - dlm: lost put_lkb on error path in receive_convert() and
+ receive_unlock()
+ - dlm: memory leaks on error path in dlm_user_request()
+ - gfs2: Get rid of potential double-freeing in gfs2_create_inode
+ - gfs2: Fix loop in gfs2_rbm_find
+ - b43: Fix error in cordic routine
+ - [powerpc*] tm: Set MSR[TS] just prior to recheckpoint
+ - 9p/net: put a lower bound on msize
+ - rxe: fix error completion wr_id and qp_num
+ - [amd64] iommu/vt-d: Handle domain agaw being less than iommu agaw
+ - ceph: don't update importing cap's mseq when handing cap export
+ - [ppc64el] genwqe: Fix size check
+ - [x86] intel_th: msu: Fix an off-by-one in attribute store
+ - [i386] power: supply: olpc_battery: correct the temperature units
+ - [arm64,armhf] drm/vc4: Set ->is_yuv to false when num_planes == 1
+ - bnx2x: Fix NULL pointer dereference in bnx2x_del_all_vlans() on some hw
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.151
+ - ALSA: hda/realtek - Disable headset Mic VREF for headset mode of ALC225
+ - CIFS: Do not hide EINTR after sending network packets
+ - cifs: Fix potential OOB access of lock element array
+ - usb: cdc-acm: send ZLP for Telit 3G Intel based modems
+ - USB: storage: don't insert sane sense for SPC3+ when bad sense specified
+ - USB: storage: add quirk for SMI SM3350
+ - USB: Add USB_QUIRK_DELAY_CTRL_MSG quirk for Corsair K70 RGB
+ - slab: alien caches must not be initialized if the allocation of the
+ alien cache failed
+ - mm: page_mapped: don't assume compound page is huge or THP
+ - ACPI: power: Skip duplicate power resource references in _PRx
+ - i2c: dev: prevent adapter retries and timeout being set as minus value
+ - rbd: don't return 0 on unmap if RBD_DEV_FLAG_REMOVING is set
+ - ext4: make sure enough credits are reserved for dioread_nolock writes
+ - ext4: fix a potential fiemap/page fault deadlock w/ inline_data
+ - ext4: avoid kernel warning when writing the superblock to a dead device
+ - sunrpc: use-after-free in svc_process_common() (CVE-2018-16884)
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.152
+ - tty/ldsem: Wake up readers after timed out down_write()
+ - tty: Hold tty_ldisc_lock() during tty_reopen()
+ - tty: Simplify tty->count math in tty_reopen()
+ - tty: Don't hold ldisc lock in tty_reopen() if ldisc present
+ - can: gw: ensure DLC boundaries after CAN frame modification
+ (CVE-2019-3701)
+ - Revert "f2fs: do not recover from previous remained wrong dnodes"
+ - media: em28xx: Fix misplaced reset of dev->v4l::field_count
+ - proc: Remove empty line in /proc/self/status
+ - [arm64] kvm: consistently handle host HCR_EL2 flags
+ - [arm64] Don't trap host pointer auth use to EL2
+ - ipv6: fix kernel-infoleak in ipv6_local_error()
+ - net: bridge: fix a bug on using a neighbour cache entry without checking
+ its state
+ - packet: Do not leak dev refcounts on error exit
+ - bonding: update nest level on unlink
+ - ip: on queued skb use skb_header_pointer instead of pskb_may_pull
+ - crypto: authencesn - Avoid twice completion call in decrypt path
+ - crypto: authenc - fix parsing key with misaligned rta_len
+ - btrfs: wait on ordered extents on abort cleanup
+ - Yama: Check for pid death before checking ancestry
+ - scsi: core: Synchronize request queue PM status only on successful
+ resume
+ - scsi: sd: Fix cache_type_store()
+ - [arm64] kaslr: ensure randomized quantities are clean to the PoC
+ - [mips*] Disable MSI also when pcie-octeon.pcie_disable on
+ - media: vivid: fix error handling of kthread_run
+ - media: vivid: set min width/height to a value > 0
+ - LSM: Check for NULL cred-security on free
+ - media: vb2: vb2_mmap: move lock up
+ - sunrpc: handle ENOMEM in rpcb_getport_async
+ - netfilter: ebtables: account ebt_table_info to kmemcg
+ - selinux: fix GPF on invalid policy
+ - blockdev: Fix livelocks on loop device
+ - sctp: allocate sctp_sockaddr_entry with kzalloc
+ - tipc: fix uninit-value in tipc_nl_compat_link_reset_stats
+ - tipc: fix uninit-value in tipc_nl_compat_bearer_enable
+ - tipc: fix uninit-value in tipc_nl_compat_link_set
+ - tipc: fix uninit-value in tipc_nl_compat_name_table_dump
+ - tipc: fix uninit-value in tipc_nl_compat_doit
+ - block/loop: Use global lock for ioctl() operation.
+ - loop: Fold __loop_release into loop_release
+ - loop: Get rid of loop_index_mutex
+ - loop: Fix double mutex_unlock(&loop_ctl_mutex) in loop_control_ioctl()
+ - drm/fb-helper: Ignore the value of fb_var_screeninfo.pixclock
+ - mm, memcg: fix reclaim deadlock with writeback
+ - media: vb2: be sure to unlock mutex on errors
+ - nbd: set the logical and physical blocksize properly
+ - nbd: Use set_blocksize() to set device blocksize
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.153
+ - r8169: Add support for new Realtek Ethernet
+ - ipv6: Consider sk_bound_dev_if when binding a socket to a v4 mapped
+ address
+ - ipv6: Take rcu_read_lock in __inet6_bind for mapped addresses
+ - [x86] platform: asus-wmi: Tell the EC the OS will handle the display off
+ hotkey
+ - e1000e: allow non-monotonic SYSTIM readings
+ - writeback: don't decrement wb->refcnt if !wb->bdi
+ - [arm64,armhf] serial: set suppress_bind_attrs flag only if builtin
+ - ALSA: oxfw: add support for APOGEE duet FireWire
+ - [arm64] perf: set suppress_bind_attrs flag to true
+ - selinux: always allow mounting submounts
+ - rxe: IB_WR_REG_MR does not capture MR's iova field
+ - jffs2: Fix use of uninitialized delayed_work, lockdep breakage
+ - pstore/ram: Do not treat empty buffers as valid
+ - [ppc64el] powerpc/xmon: Fix invocation inside lock region
+ - [powerpc*] powerpc/pseries/cpuidle: Fix preempt warning
+ - media: firewire: Fix app_info parameter type in avc_ca{,_app}_info
+ - net: call sk_dst_reset when set SO_DONTROUTE
+ - scsi: target: use consistent left-aligned ASCII INQUIRY data
+ - [armhf] clk: imx6q: reset exclusive gates on init
+ - tty/serial: do not free trasnmit buffer page under port lock
+ - [x86] perf intel-pt: Fix error with config term "pt=0"
+ - perf svghelper: Fix unchecked usage of strncpy()
+ - perf parse-events: Fix unchecked usage of strncpy()
+ - dm kcopyd: Fix bug causing workqueue stalls
+ - dm snapshot: Fix excessive memory usage and workqueue stalls
+ - ALSA: bebob: fix model-id of unit for Apogee Ensemble
+ - sysfs: Disable lockdep for driver bind/unbind files
+ - scsi: smartpqi: correct lun reset issues
+ - scsi: megaraid: fix out-of-bound array accesses
+ - ocfs2: fix panic due to unrecovered local alloc
+ - mm/page-writeback.c: don't break integrity writeback on ->writepage()
+ error
+ - mm, proc: be more verbose about unstable VMA flags in /proc/<pid>/smaps
+ - [arm64] ipmi:ssif: Fix handling of multi-part return messages
+ - locking/qspinlock: Pull in asm/byteorder.h to ensure correct endianness
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.154
+ - net: bridge: Fix ethernet header pointer before check skb forwardable
+ - net: Fix usage of pskb_trim_rcsum
+ - openvswitch: Avoid OOB read when parsing flow nlattrs
+ - vhost: log dirty page correctly
+ - net: ipv4: Fix memory leak in network namespace dismantle
+ - net_sched: refetch skb protocol for each filter
+ - ipfrag: really prevent allocation on netns exit
+ - USB: serial: simple: add Motorola Tetra TPG2200 device id
+ - USB: serial: pl2303: add new PID to support PL2303TB
+ - [x86] ASoC: atom: fix a missing check of snd_pcm_lib_malloc_pages
+ - [s390x] early: improve machine detection
+ - [s390x] smp: fix CPU hotplug deadlock with CPU rescan
+ - [x86] char/mwave: fix potential Spectre v1 vulnerability
+ - staging: rtl8188eu: Add device code for D-Link DWA-121 rev B1
+ - tty: Handle problem if line discipline does not have receive_buf
+ - uart: Fix crash in uart_write and uart_put_char
+ - [x86] tty/n_hdlc: fix __might_sleep warning
+ - CIFS: Fix possible hang during async MTU reads and writes
+ - Input: xpad - add support for SteelSeries Stratus Duo
+ - compiler.h: enable builtin overflow checkers and add fallback code
+ - Input: uinput - fix undefined behavior in uinput_validate_absinfo()
+ - [x86] acpi/nfit: Block function zero DSMs
+ - [x86] acpi/nfit: Fix command-supported detection
+ - dm thin: fix passdown_double_checking_shared_status()
+ - [x86] KVM: Fix single-step debugging
+ - [x86] kaslr: Fix incorrect i8254 outb() parameters
+ - can: dev: __can_get_echo_skb(): fix bogous check for non-existing skb by
+ removing it
+ - can: bcm: check timer values before ktime conversion
+ - vt: invoke notifier on screen size change
+ - perf unwind: Unwind with libdw doesn't take symfs into account
+ - perf unwind: Take pgoff into account when reporting elf to libdwfl
+ - [arm64] irqchip/gic-v3-its: Align PCI Multi-MSI allocation on their size
+ - [s390x] smp: Fix calling smp_call_ipl_cpu() from ipl CPU
+ - nvmet-rdma: Add unlikely for response allocated check
+ - nvmet-rdma: fix null dereference under heavy load
+ - f2fs: read page index before freeing
+ - btrfs: fix error handling in btrfs_dev_replace_start
+ - btrfs: dev-replace: go back to suspended state if target device is
+ missing
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.155
+ - Fix "net: ipv4: do not handle duplicate fragments as overlapping"
+ - fs: add the fsnotify call to vfs_iter_write
+ - ipv6: Consider sk_bound_dev_if when binding a socket to an address
+ (Closes: #918103)
+ - l2tp: copy 4 more bytes to linear part if necessary
+ - net/mlx4_core: Add masking for a few queries on HCA caps
+ - netrom: switch to sock timer API
+ - net/rose: fix NULL ax25_cb kernel panic
+ - net/mlx5e: Allow MAC invalidation while spoofchk is ON
+ - l2tp: remove l2specific_len dependency in l2tp_core
+ - l2tp: fix reading optional fields of L2TPv3
+ - ipvlan, l3mdev: fix broken l3s mode wrt local routes
+ - CIFS: Do not count -ENODATA as failure for query directory
+ - fs/dcache: Fix incorrect nr_dentry_unused accounting in
+ shrink_dcache_sb()
+ - [arm64] kaslr: ensure randomized quantities are clean also when kaslr is
+ off
+ - [arm64] hyp-stub: Forbid kprobing of the hyp-stub
+ - [arm64] hibernate: Clean the __hyp_text to PoC after resume
+ - gfs2: Revert "Fix loop in gfs2_rbm_find"
+ - [x86] platform/x86: asus-nb-wmi: Map 0x35 to KEY_SCREENLOCK
+ - [x86] platform/x86: asus-nb-wmi: Drop mapping of 0x33 and 0x34 scan
+ codes
+ - [arm64,armhf] mmc: sdhci-iproc: handle mmc_of_parse() errors during
+ probe
+ - kernel/exit.c: release ptraced tasks before zap_pid_ns_processes
+ - mm, oom: fix use-after-free in oom_kill_process
+ - mm: hwpoison: use do_send_sig_info() instead of force_sig()
+ - mm: migrate: don't rely on __PageMovable() of newpage after unlocking it
+ - cifs: Always resolve hostname before reconnecting
+ - drivers: core: Remove glue dirs from sysfs earlier
+ - fs: don't scan the inode cache before SB_BORN is set
+ - fanotify: fix handling of events on child sub-directory
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.156
+ - drm/bufs: Fix Spectre v1 vulnerability
+ - [x86] ASoC: Intel: mrfld: fix uninitialized variable access
+ - [armhf] gpu: ipu-v3: image-convert: Prevent race between run and
+ unprepare
+ - scsi: lpfc: Correct LCB RJT handling
+ - [armhf] 8808/1: kexec:offline panic_smp_self_stop CPU
+ - dlm: Don't swamp the CPU with callbacks queued during recovery
+ - [x86] PCI: Fix Broadcom CNB20LE unintended sign extension (redux)
+ - [ppc64el] powerpc/pseries: add of_node_put() in dlpar_detach_node()
+ - [arm64,armhf] drm/vc4: ->x_scaling[1] should never be set to
+ VC4_SCALING_NONE
+ - ptp: check gettime64 return code in PTP_SYS_OFFSET ioctl
+ - [arm64,armhf] soc/tegra: Don't leak device tree node reference
+ - [x86] iio: accel: kxcjk1013: Add KIOX010A ACPI Hardware-ID
+ - media: adv*/tc358743/ths8200: fill in min width/height/pixelclock
+ - f2fs: move dir data flush to write checkpoint process
+ - f2fs: fix wrong return value of f2fs_acl_create
+ - nfsd4: fix crash on writing v4_end_grace before nfsd startup
+ - Thermal: do not clear passive state during system sleep
+ - firmware/efi: Add NULL pointer checks in efivars API functions
+ - [arm64] ftrace: don't adjust the LR value
+ - [x86] fpu: Add might_fault() to user_insn()
+ - smack: fix access permissions for keyring
+ - usb: hub: delay hub autosuspend if USB3 port is still link training
+ - timekeeping: Use proper seqcount initializer
+ - [armhf] clk: sunxi-ng: a33: Set CLK_SET_RATE_PARENT for all audio module
+ clocks
+ - [amd64] iommu/amd: Fix amd_iommu=force_isolation
+ - [armhf] dts: Fix OMAP4430 SDP Ethernet startup
+ - [mips*] bpf: fix encoding bug for mm_srlv32_op
+ - [arm64,armhf] iommu/arm-smmu: Add support for qcom,smmu-v2 variant
+ - [arm64] iommu/arm-smmu-v3: Use explicit mb() when moving cons pointer
+ - udf: Fix BUG on corrupted inode
+ - memstick: Prevent memstick host from getting runtime suspended during
+ card detection
+ - [armhf] tty: serial: samsung: Properly set flags in autoCTS mode
+ - perf header: Fix unchecked usage of strncpy()
+ - perf probe: Fix unchecked usage of strncpy()
+ - [arm64] KVM: Skip MMIO insn after emulation
+ - mac80211: fix radiotap vendor presence bitmap handling
+ - xfrm6_tunnel: Fix spi check in __xfrm6_tunnel_alloc_spi
+ - Bluetooth: Fix unnecessary error message for HCI request completion
+ - scsi: smartpqi: correct host serial num for ssa
+ - scsi: smartpqi: correct volume status
+ - drbd: narrow rcu_read_lock in drbd_sync_handshake
+ - drbd: disconnect, if the wrong UUIDs are attached on a connected peer
+ - drbd: skip spurious timeout (ping-timeo) when failing promote
+ - fbdev: fbmem: behave better with small rotated displays and many CPUs
+ - i40e: define proper net_device::neigh_priv_len
+ - igb: Fix an issue that PME is not enabled during runtime suspend
+ - fbdev: fbcon: Fix unregister crash when more than one framebuffer
+ - [arm64] pinctrl: meson: meson8: fix the GPIO function for the GPIOAO
+ pins
+ - [arm64] pinctrl: meson: meson8b: fix the GPIO function for the GPIOAO
+ pins
+ - [x86] KVM: svm: report MSR_IA32_MCG_EXT_CTL as unsupported
+ - NFS: nfs_compare_mount_options always compare auth flavors.
+ - hwmon: (lm80) fix a missing check of the status of SMBus read
+ - hwmon: (lm80) fix a missing check of bus read in lm80 probe
+ - seq_buf: Make seq_buf_puts() null-terminate the buffer
+ - cifs: check ntwrk_buf_start for NULL before dereferencing it
+ - um: Avoid marking pages with "changed protection"
+ - niu: fix missing checks of niu_pci_eeprom_read
+ - f2fs: fix sbi->extent_list corruption issue
+ - ocfs2: don't clear bh uptodate for block read
+ - HID: lenovo: Add checks to fix of_led_classdev_register
+ - kernel/hung_task.c: break RCU locks based on jiffies
+ - proc/sysctl: fix return error for proc_doulongvec_minmax()
+ - fs/epoll: drop ovflist branch prediction
+ - exec: load_script: don't blindly truncate shebang string
+ - dccp: fool proof ccid_hc_[rt]x_parse_options()
+ - rxrpc: bad unlock balance in rxrpc_recvmsg
+ - skge: potential memory corruption in skge_get_regs()
+ - rds: fix refcount bug in rds_sock_addref
+ - net/mlx5e: Force CHECKSUM_UNNECESSARY for short ethernet frames
+ - [armhf] net: dsa: slave: Don't propagate flag changes on down slave
+ interfaces
+ - enic: fix checksum validation for IPv6
+ - ALSA: compress: Fix stop handling on compressed capture streams
+ - ALSA: hda - Serialize codec registrations
+ - fuse: call pipe_buf_release() under pipe lock
+ - fuse: decrement NR_WRITEBACK_TEMP on the right page
+ - fuse: handle zero sized retrieve correctly
+ - [arm64,armhf] dmaengine: bcm2835: Fix interrupt race on RT
+ - [arm64,armhf] dmaengine: bcm2835: Fix abort of transactions
+ - [armhf] dmaengine: imx-dma: fix wrong callback invoke
+ - [armhf] usb: phy: am335x: fix race condition in _probe
+ - [armhf] usb: gadget: musb: fix short isoc packets with inventra dma
+ - scsi: aic94xx: fix module loading
+ - [x86] KVM: work around leak of uninitialized stack contents
+ (CVE-2019-7222)
+ - kvm: fix kvm_ioctl_create_device() reference counting (CVE-2019-6974)
+ - [x86] KVM: nVMX: unconditionally cancel preemption timer in free_nested
+ (CVE-2019-7221)
+ - [x86] perf/x86/intel/uncore: Add Node ID mask
+ - [x86] MCE: Initialize mce.bank in the case of a fatal error in
+ mce_no_way_out()
+ - perf/core: Don't WARN() for impossible ring-buffer sizes
+ - perf tests evsel-tp-sched: Fix bitwise operator
+ - serial: fix race between flush_to_ldisc and tty_open
+ - oom, oom_reaper: do not enqueue same task twice
+ - [amd64] PCI: vmd: Free up IRQs on suspend path
+ - [amd64] IB/hfi1: Add limit test for RC/UC send via loopback
+ - [x86] perf/x86/intel: Delay memory deallocation until x86_pmu_dead_cpu()
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.157
+ - [armhf] mtd: rawnand: gpmi: fix MX28 bus master lockup problem
+ - signal: Always notice exiting tasks
+ - signal: Better detection of synchronous signals
+ - [arm64,armhf] misc: vexpress: Off by one in vexpress_syscfg_exec()
+ - debugfs: fix debugfs_rename parameter checking
+ - [mips*] cm: reprime error cause
+ - [mips*] OCTEON: don't set octeon_dma_bar_type if PCI is disabled
+ - mac80211: ensure that mgmt tx skbs have tailroom for encryption
+ - drm/modes: Prevent division by zero htotal
+ - [x86] drm/vmwgfx: Fix setting of dma masks
+ - [x86] drm/vmwgfx: Return error code from vmw_execbuf_copy_fence_user
+ - nfsd4: fix cached replies to solo SEQUENCE compounds
+ - nfsd4: catch some false session retries
+ - HID: debug: fix the ring buffer implementation (CVE-2019-3819)
+ - Revert "cifs: In Kconfig CONFIG_CIFS_POSIX needs depends on legacy
+ (insecure cifs)"
+ - libceph: avoid KEEPALIVE_PENDING races in ceph_con_keepalive()
+ - xfrm: refine validation of template and selector families
+ - batman-adv: Avoid WARN on net_device without parent in netns
+ - batman-adv: Force mac header to start of data on xmit
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.158
+ - Revert "exec: load_script: don't blindly truncate shebang string"
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.159
+ - dt-bindings: eeprom: at24: add "atmel,24c2048" compatible string
+ - eeprom: at24: add support for 24c2048
+ - uapi/if_ether.h: prevent redefinition of struct ethhdr
+ - [armel,armhf] 8789/1: signal: copy registers using __copy_to_user()
+ - [armel,armhf] 8791/1: vfp: use __copy_to_user() when saving VFP state
+ - [armel,armhf] 8793/1: signal: replace __put_user_error with __put_user
+ - [armel,armhf] 8794/1: uaccess: Prevent speculative use of the current
+ addr_limit
+ - [armel,armhf] 8795/1: spectre-v1.1: use put_user() for __put_user()
+ - [armel,armhf] 8796/1: spectre-v1,v1.1: provide helpers for address
+ sanitization
+ - [armel,armhf] 8797/1: spectre-v1.1: harden __copy_to_user
+ - [armel,armhf] 8810/1: vfp: Fix wrong assignement to ufp_exc
+ - [armel,armhf] make lookup_processor_type() non-__init
+ - [armel,armhf] split out processor lookup
+ - [armel,armhf] clean up per-processor check_bugs method call
+ - [armel,armhf] add PROC_VTABLE and PROC_TABLE macros
+ - [armel,armhf] spectre-v2: per-CPU vtables to work around big.Little
+ systems
+ - [armel,armhf] ensure that processor vtables is not lost after boot
+ - [armel,armhf] fix the cockup in the previous patch
+ - net: create skb_gso_validate_mac_len() (CVE-2018-1000026)
+ - bnx2x: disable GSO where gso_size is too big for hardware
+ (CVE-2018-1000026)
+ - [i386] ACPI: NUMA: Use correct type for printing addresses on i386-PAE
+ - cpufreq: check if policy is inactive early in __cpufreq_get()
+ - [armel] dts: kirkwood: Fix polarity of GPIO fan lines
+ - cifs: Limit memory used by lock request calls to a page
+ - perf report: Include partial stacks unwound with libdw
+ - Revert "Input: elan_i2c - add ACPI ID for touchpad in ASUS Aspire
+ F5-573G"
+ - Input: elan_i2c - add ACPI ID for touchpad in Lenovo V330-15ISK
+ - perf/core: Fix impossible ring-buffer sizes warning
+ - [x86] perf: Add check_period PMU callback
+ - ALSA: hda - Add quirk for HP EliteBook 840 G5
+ - ALSA: usb-audio: Fix implicit fb endpoint setup by quirk
+ - [x86] kvm: vmx: Fix entry number check for add_atomic_switch_msr()
+ - Input: elantech - enable 3rd button support on Fujitsu CELSIUS H780
+ - [alpha] fix page fault handling for r16-r18 targets
+ - [alpha] Fix Eiger NR_IRQS to 128
+ - tracing/uprobes: Fix output for multiple string arguments
+ - signal: Restore the stop PTRACE_EVENT_EXIT
+ - [amd64] x86/a.out: Clear the dump structure initially
+ - dm thin: fix bug where bio that overwrites thin block ignores FUA
+ - [x86] drm/i915: Prevent a race during I915_GEM_MMAP ioctl with WC set
+ - smsc95xx: Use skb_cow_head to deal with cloned skbs
+ - ch9200: use skb_cow_head() to deal with cloned skbs
+ - kaweth: use skb_cow_head() to deal with cloned skbs
+ - [arm64,armhf] usb: dwc2: Remove unnecessary kfree
+ - netfilter: nf_tables: fix mismatch in big-endian system
+ - [arm64] pinctrl: msm: fix gpio-hog related boot issues
+ - mm: stop leaking PageTables
+ - uapi/if_ether.h: move __UAPI_DEF_ETHHDR libc define
+ - Revert "scsi: aic94xx: fix module loading"
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.160
+ - net: fix IPv6 prefix route residue
+ - [x86] vsock: cope with memory allocation failure at socket creation time
+ - hwmon: (lm80) Fix missing unlock on error in set_fan_div()
+ - net: Fix for_each_netdev_feature on Big endian
+ - [arm64,armhf] net: stmmac: handle endianness in dwmac4_get_timestamp
+ - sky2: Increase D3 delay again
+ - vhost: correctly check the return value of translate_desc() in
+ log_used()
+ - net: Add header for usage of fls64()
+ - tcp: tcp_v4_err() should be more careful
+ - net: Do not allocate page fragments that are not skb aligned
+ - tcp: clear icsk_backoff in tcp_write_queue_purge()
+ - vxlan: test dev->flags & IFF_UP before calling netif_rx()
+ - [arm64,armhf] net: stmmac: Fix a race in EEE enable callback
+ - net: ipv4: use a dedicated counter for icmp_v4 redirect packets
+ - btrfs: Remove false alert when fiemap range is smaller than on-disk
+ extent
+ - mISDN: fix a race in dev_expire_timer()
+ - ax25: fix possible use-after-free
+ https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.9.161
+ - mac80211: Free mpath object when rhashtable insertion fails
+ - libceph: handle an empty authorize reply
+ - ceph: avoid repeatedly adding inode to mdsc->snap_flush_list
+ - numa: change get_mempolicy() to use nr_node_ids instead of MAX_NUMNODES
+ - proc, oom: do not report alien mms when setting oom_score_adj
+ - KEYS: allow reaching the keys quotas exactly
+ - [armhf] mfd: ti_am335x_tscadc: Use PLATFORM_DEVID_AUTO while registering
+ mfd cells
+ - [armhf] mfd: twl-core: Fix section annotations on {,un}protect_pm_master
+ - [arm64] mfd: qcom_rpm: write fw_version to CTRL_REG
+ - [armhf] mfd: mc13xxx: Fix a missing check of a register-read failure
+ - qed: Fix qed_ll2_post_rx_buffer_notify_fw() by adding a write memory
+ barrier
+ - [arm64] net: hns: Fix use after free identified by SLUB debug
+ - scsi: qla4xxx: check return code of qla4xxx_copy_from_fwddb_param
+ - [x86] scsi: isci: initialize shost fully before calling scsi_add_host()
+ - atm: he: fix sign-extension overflow on large shift
+ - [armhf] leds: lp5523: fix a missing check of return value of lp55xx_read
+ - net/mlx5e: Fix wrong (zero) TX drop counter indication for representor
+ - RDMA/srp: Rework SCSI device reset handling
+ - KEYS: user: Align the payload buffer
+ - KEYS: always initialize keyring_index_key::desc_len
+ - batman-adv: fix uninit-value in batadv_interface_tx()
+ - net/packet: fix 4gb buffer limit due to overflow check
+ - team: avoid complex list operations in team_nl_cmd_options_set()
+ - sit: check if IPv6 enabled before calling ip6_err_gen_icmpv6_unreach()
+ - sctp: call gso_reset_checksum when computing checksum in
+ sctp_gso_segment
+ - net/mlx4_en: Force CHECKSUM_NONE for short ethernet frames
+ - [hppa/parisc] Fix ptrace syscall number modification
+ - [x86] hpet: Make cmd parameter of hpet_ioctl_common() unsigned
+ - clocksource: Use GENMASK_ULL in definition of CLOCKSOURCE_MASK
+ - netpoll: Fix device name check in netpoll_setup()
+ - tracing: Use cpumask_available() to check if cpumask variable may be
+ used
+ - [x86] boot: Disable the address-of-packed-member compiler warning
+ - [x86] drm/i915: Consistently use enum pipe for PCH transcoders
+ - [x86] drm/i915: Fix enum pipe vs. enum transcoder for the PCH transcoder
+ - [arm64] irqchip/gic-v3: Convert arm64 GIC accessors to
+ {read,write}_sysreg_s
+ - mm/zsmalloc.c: change stat type parameter to int
+ - mm/zsmalloc.c: fix -Wunneeded-internal-declaration warning
+ - Revert "bridge: do not add port to router list when receives query with
+ source 0.0.0.0"
+ - netfilter: nf_tables: fix flush after rule deletion in the same batch
+ - [arm64] pinctrl: max77620: Use define directive for
+ max77620_pinconf_param values
+ - [arm64,armhf] phy: tegra: remove redundant self assignment of 'map'
+ - sched/sysctl: Fix attributes of some extern declarations
+ .
+ [ Salvatore Bonaccorso ]
+ * Refresh kbuild-use-nostdinc-in-compile-tests.patch for context changes in
+ 4.9.145
+ * [rt] Update to 4.9.146-rt125
+ - seqlock: provide the same ordering semantics as mainline
+ - squashfs: make use of local lock in multi_cpu decompressor
+ - locallock: provide {get,put}_locked_ptr() variants
+ - posix-timers: move the rcu head out of the union
+ - alarmtimer: Prevent live lock in alarm_cancel()
+ - block: blk-mq: move blk_queue_usage_counter_release() into process
+ context
+ - Revert "block: blk-mq: Use swait"
+ - Revert "rt,ntp: Move call to schedule_delayed_work() to helper thread"
+ - net: use task_struct instead of CPU number as the queue owner on -RT
+ - locking: add types.h
+ - mm/slub: close possible memory-leak in kmem_cache_alloc_bulk()
+ - crypto: limit more FPU-enabled sections
+ - sched, tracing: Fix trace_sched_pi_setprio() for deboosting
+ - rcu: Suppress lockdep false-positive ->boost_mtx complaints
+ - rcu: Do not include rtmutex_common.h unconditionally
+ - rtmutex: Make rt_mutex_futex_unlock() safe for irq-off callsites
+ - futex: Fix OWNER_DEAD fixup
+ - futex: Avoid violating the 10th rule of futex
+ - futex: Fix more put_pi_state() vs. exit_pi_state_list() races
+ - futex: Fix pi_state->owner serialization
+ * [rt] Refresh 0366-posix-timers-move-the-rcu-head-out-of-the-union.patch.
+ Refresh for context changes caused by a Debian specific patch to avoid
+ ABI change in 4.9.136: "posix-timers: Avoid ABI change in 4.9.136"
+ * [rt] Refresh 0280-random-Make-it-work-on-rt.patch
+ * [rt] Refresh 0198-fs-aio-simple-simple-work.patch for context changes in
+ 4.9.147
+ * Btrfs: fix corruption reading shared and compressed extents after hole
+ punching (Closes: #922306)
+ .
+ [ Ben Hutchings ]
+ * Bump ABI to 9 and apply deferred changes:
+ - netfilter: ipv6: nf_defrag: reduce struct net memory waste
+ - proc/sysctl: prune stale dentries during unregistering
+ - proc/sysctl: Don't grab i_lock under sysctl_lock.
+ - proc: Fix proc_sys_prune_dcache to hold a sb reference
+ - [mips*] Correct the 64-bit DSP accumulator register size
+ - inet: frags: fix ip6frag_low_thresh boundary
+ - inet: frags: reorganize struct netns_frags
+ - rhashtable: reorganize struct rhashtable layout
+ - inet: frags: break the 2GB limit for frags storage
+ - elevator: fix truncation of icq_cache_name
+Checksums-Sha1:
+ 2159f52e577288782c17b2eaab82fa9aff3b7b62 122317 linux_4.9.161-1.dsc
+ 6318b7cfd88679a2757fa97cec262e34129cb0c9 94764896 linux_4.9.161.orig.tar.xz
+ a7ecf3b8390750e99f194dc55f382bd234381a61 1222860 linux_4.9.161-1.debian.tar.xz
+ f038292aa30a37e74c42b4aecaa94791d87bbcda 10304 acpi-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 07eb1d037c8cdad0593a0a115a728bcdb40c6b38 99414 ata-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ a120c3c90b6a6ccafac4f4aa13bd85e5fd331247 434422 btrfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 2c8e49da1ee0c7b95c50577c3b8542bca6ee9a8f 30840 cdrom-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 43aecfbbc1037b5699d179132db2fe629c9e48aa 5260 crc-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ fa186af511960c9e0c8c63fd953c86f27c145583 12714 crypto-dm-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ e476f9a708e59e9c4e4c75bd647e7a4d4c614252 40052 crypto-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 68ce89a8145375950124aa0aabdc30cc4ec780e0 10422 efi-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 3b4b6af275448ebc2486d93fad1b486bccd150a6 9096 event-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ eeb95e155ae2596ff5f237c71fed586681451cf6 268722 ext4-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ b70a75603691e04c34dc32516df821c3d52ae2cf 39750 fat-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 304e9b4a9d1ad6f844f886fd3138215dd18b052d 12686 fb-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ e7fe15b030a8388e2cb2a21736ae9868422ab945 56084 firewire-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 2e8472b4f90cc7ca7b491beb6bfaf64982c9b12c 48266 fuse-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ e4a253ed71582126695b0aab808cbde142d2f4d6 41354 hyperv-daemons-dbgsym_4.9.161-1_amd64.deb
+ 13b82fa2c641aaade2955fee9f4d3646840dcf90 635828 hyperv-daemons_4.9.161-1_amd64.deb
+ 8e6ecf620441aec42122c75e0a81437989141c23 58258 hyperv-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 3d0cb543d431d7d0f1f06199ff7006fdcd151172 13344 i2c-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 1f021d8f2d28fd51d43254dcc2710b2ece317ae2 215604 input-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ e9d5a88afb90f4a9ea48f24feb61bed2285a93a9 17666 isofs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 228ce023319d40c9cb7b56543eefd039733896c1 88578 jfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 322ee29402a0520e7deaa6d13b4fe82b0d2c582d 4531352 kernel-image-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 5f5ec851a996588f37c3d1aa8f4fd3cde9808dce 620858 libcpupower-dev_4.9.161-1_amd64.deb
+ 046f87140ae2c9ae11c82405029b346d84a29960 20096 libcpupower1-dbgsym_4.9.161-1_amd64.deb
+ 2f7f209778f0b61f45323281c2282c8b72d89d3a 626150 libcpupower1_4.9.161-1_amd64.deb
+ f1a0f89ee892b13cc0c7a1e7d44c9a4ed26f3d60 640132 libusbip-dev_2.0+4.9.161-1_amd64.deb
+ e0b11342feb426c25875152bc2130b1fcd43954c 618992 linux-compiler-gcc-6-x86_4.9.161-1_amd64.deb
+ 50485b925a035ea5a510cce2d989321a89b4af3f 54550 linux-cpupower-dbgsym_4.9.161-1_amd64.deb
+ 1d70b1e1b8069bfb5a4ba804678b71724a605220 691616 linux-cpupower_4.9.161-1_amd64.deb
+ f0e4f5eee459c6eabe50fb4ec25bfe7fde0a4583 12474614 linux-doc-4.9_4.9.161-1_all.deb
+ 50cad1aa6d1a5299521d5f9e33a70c925ee6949f 619020 linux-headers-4.9.0-9-all-amd64_4.9.161-1_amd64.deb
+ 34c7ea2f41807e088fd19e291281b1931051a61c 619006 linux-headers-4.9.0-9-all_4.9.161-1_amd64.deb
+ c22808ed50235f9b5e77e8fffacb90ed23c5cd04 449444 linux-headers-4.9.0-9-amd64_4.9.161-1_amd64.deb
+ 2d722f37388ee490860d24743c28606f121d6f6f 5728596 linux-headers-4.9.0-9-common-rt_4.9.161-1_all.deb
+ 8ec96e08628528aac47eda9309bef7876ca7a9e7 7661992 linux-headers-4.9.0-9-common_4.9.161-1_all.deb
+ 9cb3f018900890d415ba659edb42ce17dcd99533 448198 linux-headers-4.9.0-9-rt-amd64_4.9.161-1_amd64.deb
+ fd11152baf713505e1f85c5a9e2ff9f02cc9b85f 573468732 linux-image-4.9.0-9-amd64-dbg_4.9.161-1_amd64.deb
+ bf51c27ec4dd53e8d63c205085896b9e404601a1 39143948 linux-image-4.9.0-9-amd64_4.9.161-1_amd64.deb
+ 9277c11024b8edfb83ba15716ea97b888d9df8d2 572285620 linux-image-4.9.0-9-rt-amd64-dbg_4.9.161-1_amd64.deb
+ 496b52eaa73e0a7ee5270f0c0f4b233242b18127 39132836 linux-image-4.9.0-9-rt-amd64_4.9.161-1_amd64.deb
+ 40a637dc1d447b0d54ed9efbe696fd778ce944b2 488164 linux-kbuild-4.9-dbgsym_4.9.161-1_amd64.deb
+ 1fd9b79e94ebb2deb2293055839a2f18d7ca3ae2 826264 linux-kbuild-4.9_4.9.161-1_amd64.deb
+ cef58714148ef74ee693955a472da55048d5997b 1410994 linux-libc-dev_4.9.161-1_amd64.deb
+ 7bdffb7623e69bf63a890a414e46aa8963376701 3188096 linux-manual-4.9_4.9.161-1_all.deb
+ c346733448291b2d30e4b84fd57957561528e80b 4484002 linux-perf-4.9-dbgsym_4.9.161-1_amd64.deb
+ cd36b701e297c17bbfdc33ec9ac8d87ae5dd2698 1558344 linux-perf-4.9_4.9.161-1_amd64.deb
+ ecc06b10c6005d121999ccf903527bcf8f5b9f52 96804320 linux-source-4.9_4.9.161-1_all.deb
+ 969ba075e28590a9fe95ffb7a21d69274e62678d 667220 linux-support-4.9.0-9_4.9.161-1_all.deb
+ 3dbda969e5f9c7d6442a729b92798b389d16b063 64773 linux_4.9.161-1_amd64.buildinfo
+ 58651cc256c3775433829da6723537f8ae5d6638 13622 loop-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ f86cceb0f6b7a402d3c896498b912d217b59eb2f 424586 md-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ f3a482f0a5af6b8b246bc3e26e79f0f450d8e262 56132 mmc-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 57b906405d9344fb859466e7ae7f76eddd13812b 132738 mmc-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 4635b11b2827f1be297adc45f70c3bcaad6d154b 52390 mouse-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 23805788d4ea763160717955d9cbbf89c435b4cd 15642 multipath-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 6519cceb02dc7cd45310d0b4464d93512ac81bd8 8882 nbd-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ cdea5168c5ad837038112c0d6416840355a24755 3117816 nic-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 3f3219761b9275df559ea9018241632b9c1e9768 183890 nic-pcmcia-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 754448fd108d4020bb71c4ff71ad402f5c40247f 38568 nic-shared-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ e66c679f39405c3abd67f1d4169d10022ff220ef 186466 nic-usb-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ f4bd9944e04ab488b395248ee500b0f7cbcfa164 3399472 nic-wireless-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ f444224e5a4e6032291e8d24b879517a94aee441 45824 ntfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ a327353dcca16505ebf0cba789e31382dde5983b 53368 pata-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 11f1b42b433872642a15a678166043cebacb507b 61954 pcmcia-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ f7941ae1557f48f6060555c90c7d5bb8cf17a039 7534 pcmcia-storage-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ b5637eb91fec665cbfbe27a8898236aa7c7b227d 36736 ppp-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 5bfdfd013f1080258c6567da3db01ccd7f6b940f 145926 sata-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ c09b0344e0f1d84bfc491ea6a17704ef9ccc940e 139828 scsi-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 0ebb42d528b781331d92209218997b79ddae5d00 2405060 scsi-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 494426ba251f42360beedc972a1326c9c96e8cd2 34758 serial-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ afd71674b8690360b99a7bda3dc4c13ad744b575 1822320 sound-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 4eea8a3dc6e8599699338f227dad0baf6d5f9e9c 47916 speakup-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 1092c655e2027ef6c2a62527de1198b9405410b2 20598 squashfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ e5a12c96390b198906dc7e1d29487eed903832b9 45774 udf-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ c6a0c91b8bd5c3c4237a31c765656b9de2f675e4 7276 uinput-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 57b0c9334cf40070d87c484f94100f5f0b0e169d 255282 usb-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 7870bd1ac4a628b72226eaa219e13f2d100ab971 191488 usb-serial-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 87ddc1e622836a2905550c3a8241a1eea950f2f8 75118 usb-storage-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 86f344c0f3acd89b66dee623d3eea650671ccf30 92978 usbip-dbgsym_2.0+4.9.161-1_amd64.deb
+ 5e4dcff68b9191364584b91816c77443f5ec7d9d 658410 usbip_2.0+4.9.161-1_amd64.deb
+ d999c625cf230bd16c3f49fc10802a0d4a5ac7ca 62430 virtio-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ a82b2c98c7e56485b495fa517ee8c9881e750e14 390812 xfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+Checksums-Sha256:
+ 774205fe7e64fc3edbde20a2471d264fad0d33a104dde3bf9634f7dee481252b 122317 linux_4.9.161-1.dsc
+ 4f39a9fcec9ac1cfb1fa9f5026c0064991e2df6b0cc239aefe1a6ffb4d7e438f 94764896 linux_4.9.161.orig.tar.xz
+ 180554d978d286515a215f5d99e1eba2c81ebe011682c892d7fcbabb153d470a 1222860 linux_4.9.161-1.debian.tar.xz
+ dde5d28bef6350f91a9e01b6b096d1cf379ee42ccc8b1603b201607abef2165a 10304 acpi-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 22d69d2b68b06bcde88c0f61bfc4918c983b1c08dcc79577cf53d46f751253c5 99414 ata-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 1bc56352909b5a8fb1c3f677d9fa27685e6d67b59448195203dde95b965389f9 434422 btrfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ edb5c0928991992d70a13b8328f463438ecfd40c7825d41f1597c97225e28067 30840 cdrom-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 12a3bec0f2d00cdb3e86571fe02d2e16699766d1f0fb437877fdf4c5ac47aa5f 5260 crc-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d14bfa0fbaf2302916a1d9a89806277acc26942b183da46a517c5e8a813d30be 12714 crypto-dm-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 890b9a74d17e3a2177398481c7c571088c5a2e506ddb92add3a0c276166ddbc6 40052 crypto-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 27050a8239e6575083098f4ced7110929bfd8371b1f7caf8592b59f1eab7f36e 10422 efi-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 169be9843f76cdc3bdcd401e50ea4130df03facbd8ba42343e284446bed35ff4 9096 event-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 0c5c3864d905b34a08a2d977935bbe7333227fcb64defc576e40a6176a59afa1 268722 ext4-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 79d1ff8cdcbf24e363c74f97ac7079486b5bd3b08857b2f294a7172c7182860a 39750 fat-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 32589d3327b6487acf646098e5463316af5c5f9cf7100bc21da5d563798a947e 12686 fb-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 89a2f5606e0c885df3d4d78ae46b524b8709f61e2de0817cad98457cf27d3585 56084 firewire-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d00c7ca252015991f9b8fb7179f2c1f6578c670b108ea0a9c0cdd821d8005f4b 48266 fuse-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 3b38e2c467becebf03e9312adb143f7511d73377ef2ffbb52841ccf1d97005f1 41354 hyperv-daemons-dbgsym_4.9.161-1_amd64.deb
+ cbf6ab3115940f39cefafbdf2a38dbeddd8e4b95c5f7620c5fe6d9650a95a323 635828 hyperv-daemons_4.9.161-1_amd64.deb
+ d23b4be9a49a34b32f5ce14718b39c274d397308c3387e17411dbadb53aa40bf 58258 hyperv-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ fa03db1ae091888586c23eceb6aac439a9d5834ba177338a71c5373f005bfa34 13344 i2c-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 74fa05f9914f34e99e2eb1540ba32174de9d358a029d16faf9167141bb7f5fe5 215604 input-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 70944f778d07ce7285835578d0404945d423ae2da837dce85bbf42da060f49eb 17666 isofs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 9485bfd3b728560edd527fed1490a7126979e0f2217c47e600c027bb11de87de 88578 jfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ ff1523b47ba9a085ec742b53dff5918b1a165cc19a41316fd7b23043fb86328e 4531352 kernel-image-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 62567248f859a37723f19a505c5275e98ac91005c927b264420e7d1c3ad3ecf8 620858 libcpupower-dev_4.9.161-1_amd64.deb
+ 5b5ab4c0912e4ad9764af585aacb292c4add2d3efef926823f456068d89decb3 20096 libcpupower1-dbgsym_4.9.161-1_amd64.deb
+ dcdd721a97613744822e6e96b9a5d976b65cd59d7b87798f8f473156af18231f 626150 libcpupower1_4.9.161-1_amd64.deb
+ e418680d66688f815cf1bc2330f970e2d6ec82a8b9c1fe80e0924f06de9ab1bb 640132 libusbip-dev_2.0+4.9.161-1_amd64.deb
+ 2a6c436c105dfccfa22b714fd198fab26a0b44b395e538d35b4ad290b5c6b56e 618992 linux-compiler-gcc-6-x86_4.9.161-1_amd64.deb
+ d448dc9c2dba36b8956f8be80e14ace04660c7e7dc4cc56625f3f81fd24ec4f8 54550 linux-cpupower-dbgsym_4.9.161-1_amd64.deb
+ 1dad32f6a2ea81e69861883f55589719d93fb608176fc43c48f0ec71d9e3c6fa 691616 linux-cpupower_4.9.161-1_amd64.deb
+ 61860f803c6ec08b114c9664cd034122a037d8ae11421e9baea743bfe2750f04 12474614 linux-doc-4.9_4.9.161-1_all.deb
+ 91e2387ca6aa55d1976778d77ac74f08a0490762436855e9bbccd0ecee5da033 619020 linux-headers-4.9.0-9-all-amd64_4.9.161-1_amd64.deb
+ 07f8eefb82fc5b14d21f0e9808ed126ce0f42829b56bd38f2d3ce4f8ab5d8769 619006 linux-headers-4.9.0-9-all_4.9.161-1_amd64.deb
+ 5380c9fd6110ed03c62ced348927ff07ec385fdeba6dc4d3dfdaf22e2a1127ce 449444 linux-headers-4.9.0-9-amd64_4.9.161-1_amd64.deb
+ 5b7bab304818e746d7cffd46dd73472206b8a5fcc90387ae03fb246cfae082f5 5728596 linux-headers-4.9.0-9-common-rt_4.9.161-1_all.deb
+ a072a28a1ed21ca3388f5da268468873e2a67c63ce507ffa46686997fcb8b13f 7661992 linux-headers-4.9.0-9-common_4.9.161-1_all.deb
+ 248c065dc94171e1a924410199f8c208bf04b9a6b6977d7919a387bb04c6cb2c 448198 linux-headers-4.9.0-9-rt-amd64_4.9.161-1_amd64.deb
+ 079efccb96a5186869c62663771111bd47f0ce0b12330a43cb0126c251b7ec06 573468732 linux-image-4.9.0-9-amd64-dbg_4.9.161-1_amd64.deb
+ 4b7ef40fc70bee4aa579a3e1d63a93a3d7e6b158843a4ed68d4dab346bbad09b 39143948 linux-image-4.9.0-9-amd64_4.9.161-1_amd64.deb
+ 65d25ceffbc17fade55342a4f517b77f1694300cbf2c6544d3f5ea4de00d4001 572285620 linux-image-4.9.0-9-rt-amd64-dbg_4.9.161-1_amd64.deb
+ 1ace3cd666b8ab3be3ecfe30d3a1ee9ad6685ca65210ab07a920cd8e94722589 39132836 linux-image-4.9.0-9-rt-amd64_4.9.161-1_amd64.deb
+ d57cd26640844e091d11311a2034686f8ff860d9dcfbeb8999b6f2e0b4374ea1 488164 linux-kbuild-4.9-dbgsym_4.9.161-1_amd64.deb
+ 9e0e8a1a1395bc39918e15134b7dd52c4985891ecbb489ebca7259c0b00c9837 826264 linux-kbuild-4.9_4.9.161-1_amd64.deb
+ 310cee15760bbfa31cf61471280e7ff9ad6bd568dc6b2f3fe9a0052dba2399d2 1410994 linux-libc-dev_4.9.161-1_amd64.deb
+ d38b399a02609877783a0be1437a321294feab0cd578da0ed5be0a2e615248d5 3188096 linux-manual-4.9_4.9.161-1_all.deb
+ ba4f44c814d710d1c9741d535b229f82b97147fa0359e46e1c7bd4d5543554a5 4484002 linux-perf-4.9-dbgsym_4.9.161-1_amd64.deb
+ efcb039fc809646032142f894361ab8459577aa64830e0aa5cf0fb709f7f2fad 1558344 linux-perf-4.9_4.9.161-1_amd64.deb
+ 3255f8ad6979969b3d0ca58398ecb703ccb934733210d60490e2c82276d595a6 96804320 linux-source-4.9_4.9.161-1_all.deb
+ 0b3e8ad112613ca7fb9553ea85e6cba50939a77506fa7f60cbbca01c22f74920 667220 linux-support-4.9.0-9_4.9.161-1_all.deb
+ fdd181976a5b4c4f2021cc899bcf250f8df9658cd8f4bcec5846bc034889d379 64773 linux_4.9.161-1_amd64.buildinfo
+ 24312a130c4540aaab1580d37679b3d8f8884cc8ce9a7d718b4f4bdbbaf8a32a 13622 loop-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ ad0ab94fd28c7c88800b27621aa87ecfe0b91ffec9d1b25e6e41b7b326ad551f 424586 md-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 3791590cc62baf306a6a688c742d9953cda0de6b192960f382fba5bca52f1fc7 56132 mmc-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ b72e9276e50a2bc7dc976c44ec8ce4cc82a07f0d5b14368413a65458575ac02e 132738 mmc-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 1de60d7242e4362873a2d4b37347dfaa5db45d67176a46cb8a16ff17099b16a9 52390 mouse-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 96aa7c5b831fbd3b18a4127ca761a3593d37457f4530c8ae0566d0f3842ce3b7 15642 multipath-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 2668c185d324050b018da3d2f82e37506c676d5c95eca11d6b67bbd7daa6be4c 8882 nbd-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d0d081ddaee986b12baba94f2b74351bfa966e41132780e03261876c1c3d70ae 3117816 nic-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ b290e45bb16aa621e8aa2449f667eb66774486b5fdf9fc8ec524ac02f0aacbf2 183890 nic-pcmcia-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ fc7a98ead389e10a86fc96741aba9d682d14e9c2d01920976975f23914c9b804 38568 nic-shared-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 9d00bdc5e0d05cb003daec59913285a5e14f4c96d9ed12be65dd0b9256bbf831 186466 nic-usb-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ ca8437271c706e8996cee964bb8daf52d2576e0a7cec246a781fe0795daa77fa 3399472 nic-wireless-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ b472a7a38a772911d5245d9dbd51febdee07795e8d1beb2479a42c52cbe54257 45824 ntfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 1a95d6626f48b4dd874ec8aeaac74d07fdd80393e70e59a17c242a41826a11a8 53368 pata-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 77737b80cb525877c86d679e74d8ff04271cb5ee7653f213b50a0d3c64b69c4b 61954 pcmcia-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d43bcd0626e07a7c6ce6fbb91ac06ff0a2124da894424c3b0958893869315e8a 7534 pcmcia-storage-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 773d48cdc32d8a86eb7c10b3eb4655a9a267db9f14372ef322820ca43b242477 36736 ppp-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 6398b7c8df8db54d43ccdea3a7bc0e3e654a5d8138d649863dab5c36ab8660b4 145926 sata-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 1bde2b0989cda3125c0d2c599bc177f5cf18da1a2a423f3ec07408252d53711b 139828 scsi-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 4c6395dda8a05e7daffd7d3f6622e3371febc54ef87009e68470111205419bcf 2405060 scsi-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 6fb6cc3481f9ed7419e7f58cd3c9bf612ae006517ab9114430019c0a239877af 34758 serial-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 6ede64ef7302a86636f5df618f95e4668dcb893c0775d6a0c9d1ff8d2b2286fe 1822320 sound-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ caa21037ef18559b20401d028c70bad5e71bec6b509e283e80fd2797f55e5aa0 47916 speakup-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ feb058e248b849bfe56287706aa03aed7d3a1e0c80437a07758490687a767948 20598 squashfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 71431dcbe2c3aa0b82d1bb4e971f155e3298a338c914b09ba194c32c13f8168c 45774 udf-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ b7578205a696f61d0896c6f8a8ef8871180966fa92c845e7d05ed5162c1aaffb 7276 uinput-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d399e6be182fc3974e30456b41788dbf72c0ee109ffa287ccad96538aa738795 255282 usb-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 7c8f6470020d61f1c30802982c39cf1f7acf5067c6a422ad71e549f8a84a6e94 191488 usb-serial-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ cfddfd91bef897e279c09bc837803102f2e1e49da7fe8f9974885296212d35fc 75118 usb-storage-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 7047845bfbd4fbd30d7acb88319296eb38a55fd380059d13cf159eca44a60430 92978 usbip-dbgsym_2.0+4.9.161-1_amd64.deb
+ 5972d1a7df1a954f19831f34832f59a742e4141a09ff97412fb42e72533cf981 658410 usbip_2.0+4.9.161-1_amd64.deb
+ 9bb537df45f30ba39408e39e9965b7298bcfe210bcb224793df5622de910bf3c 62430 virtio-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 8a8b22b3a250cc1b996969c0270024f682730cf2130f073dd36d188cba63b171 390812 xfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+Files:
+ 0c7a72fc5a714427fa68ccd2dd4482ee 122317 kernel optional linux_4.9.161-1.dsc
+ 93b594e8fdc0a8703e4d4b873759380d 94764896 kernel optional linux_4.9.161.orig.tar.xz
+ 940d74f7da2c0e798616d8b7b715a673 1222860 kernel optional linux_4.9.161-1.debian.tar.xz
+ b4ae0b22174cb1c7bf009bfcf0deaee8 10304 debian-installer extra acpi-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ ef0f4d551eafac3122880f2b611540b2 99414 debian-installer extra ata-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 965d8b291e2b7e38cba1cf15e3086a39 434422 debian-installer extra btrfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 152cd388652e8c4b3463528f2f45d5c3 30840 debian-installer standard cdrom-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 75fd55934fe0a12f80c780dffebb0e1b 5260 debian-installer extra crc-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 3819d41ce9f1a02cd8a36a71e6515df5 12714 debian-installer extra crypto-dm-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d970d5cbdf614c48adf4cd3f5b0b6740 40052 debian-installer extra crypto-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 63989558af590e331a98b0ebd3c70083 10422 debian-installer extra efi-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 0ae878a8ff24b451c8ee374b4f8a79fb 9096 debian-installer extra event-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ ac6a13fffcf553b84a3042ddf0f01b6f 268722 debian-installer standard ext4-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ eda55a3159a324022967b37145f14bea 39750 debian-installer standard fat-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 0c989f4c7842d03eee5000f62bb65c2b 12686 debian-installer extra fb-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ ea34452732c791a011306beea9f070ff 56084 debian-installer standard firewire-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 2d42e93fe753adb136ebc8bb0c6d0f62 48266 debian-installer extra fuse-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 599992a99bb89b091d9f88008b9b78bb 41354 debug extra hyperv-daemons-dbgsym_4.9.161-1_amd64.deb
+ ecd706e005c02afdbd2523dffebf2ee5 635828 admin optional hyperv-daemons_4.9.161-1_amd64.deb
+ 7eb762b48b0a3bc64230d37ec527a997 58258 debian-installer extra hyperv-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ ac402d2db3f7b78c38869d1f9d90651f 13344 debian-installer extra i2c-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 68934052cfce62583e5103996521e0c9 215604 debian-installer extra input-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 933d5ab6f8a5bbaebf9323d6edb10a5f 17666 debian-installer standard isofs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 3c8aa32a09b6281c4e0db058ab0c1af3 88578 debian-installer standard jfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ c2f388324142b97fd6038c1592e2888c 4531352 debian-installer standard kernel-image-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d605ea4e6a96c40b1071504b12870f40 620858 libdevel optional libcpupower-dev_4.9.161-1_amd64.deb
+ dcf307126f4a0eebe135f8f20aea9d94 20096 debug extra libcpupower1-dbgsym_4.9.161-1_amd64.deb
+ 1f6954e1b3b65eae3cc88cf953a74c8b 626150 libs optional libcpupower1_4.9.161-1_amd64.deb
+ aca034c5c658ae4acd4a7043c2404218 640132 libdevel optional libusbip-dev_2.0+4.9.161-1_amd64.deb
+ 45fb67c8b238eee7c4f9ea27e7024972 618992 kernel optional linux-compiler-gcc-6-x86_4.9.161-1_amd64.deb
+ 28344bc7bcfa99bb67112ad8eab7d7b5 54550 debug extra linux-cpupower-dbgsym_4.9.161-1_amd64.deb
+ 09edd5b4eefe46bb13b34acbf8dbb9df 691616 admin optional linux-cpupower_4.9.161-1_amd64.deb
+ eec8ba030b5964c9c74124cf9183d0a1 12474614 doc optional linux-doc-4.9_4.9.161-1_all.deb
+ df29579871536b54dc78f75e647eb343 619020 kernel optional linux-headers-4.9.0-9-all-amd64_4.9.161-1_amd64.deb
+ 45fd70d2aa4953b52fa4f14856964f69 619006 kernel optional linux-headers-4.9.0-9-all_4.9.161-1_amd64.deb
+ 60452ad1c0f17cf1b9f2c822e7ecb7e1 449444 kernel optional linux-headers-4.9.0-9-amd64_4.9.161-1_amd64.deb
+ 86a625a57db9b4f9a02f0da851b4b250 5728596 kernel optional linux-headers-4.9.0-9-common-rt_4.9.161-1_all.deb
+ d09ba4cbadac4bec916b0dfe0b55a94a 7661992 kernel optional linux-headers-4.9.0-9-common_4.9.161-1_all.deb
+ 02d8d51a9fd014665633a2a2d126a395 448198 kernel optional linux-headers-4.9.0-9-rt-amd64_4.9.161-1_amd64.deb
+ da90d2452aa270f5b972eced1fe7def0 573468732 debug extra linux-image-4.9.0-9-amd64-dbg_4.9.161-1_amd64.deb
+ 15105b2bd94303dfb102d5b25bcedcf8 39143948 kernel optional linux-image-4.9.0-9-amd64_4.9.161-1_amd64.deb
+ 9a7887530da8c56dfd659c757d28431d 572285620 debug extra linux-image-4.9.0-9-rt-amd64-dbg_4.9.161-1_amd64.deb
+ 93b81602952bda419e8a7190d1879852 39132836 kernel optional linux-image-4.9.0-9-rt-amd64_4.9.161-1_amd64.deb
+ ad6e009533db6131f7861b5eb881254e 488164 debug extra linux-kbuild-4.9-dbgsym_4.9.161-1_amd64.deb
+ 88999d7b79d2b7a31a836834a46a6a3a 826264 kernel optional linux-kbuild-4.9_4.9.161-1_amd64.deb
+ ebd3cfb17dff3c866eb583632af6ca15 1410994 devel optional linux-libc-dev_4.9.161-1_amd64.deb
+ f2b70d7600a63bbe303f8b507a6055c1 3188096 doc optional linux-manual-4.9_4.9.161-1_all.deb
+ 93c6711fb982bad7df8a62ab1292ea87 4484002 debug extra linux-perf-4.9-dbgsym_4.9.161-1_amd64.deb
+ 83e6f4cc61fcf2e0de2c2b8091206451 1558344 devel optional linux-perf-4.9_4.9.161-1_amd64.deb
+ 61796b532c32134e7a83f4de50f868b0 96804320 kernel optional linux-source-4.9_4.9.161-1_all.deb
+ 36e82b67e48d2217376bd6276448b327 667220 devel optional linux-support-4.9.0-9_4.9.161-1_all.deb
+ 74a8dfa8e6117a79e5239f70d6281def 64773 kernel optional linux_4.9.161-1_amd64.buildinfo
+ bda9fca8bb6458cf1392a6af1ca8c985 13622 debian-installer standard loop-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ db02d7664ce66d49048f764e78d4d06e 424586 debian-installer extra md-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 7d7d70f354e93ce298be591851e0c2e3 56132 debian-installer extra mmc-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ adbc791756319dfecc44d52324b25280 132738 debian-installer extra mmc-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 60b3522f260dbda410ca8dd8e6dcc551 52390 debian-installer extra mouse-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 325f3f7d918cad43dc30f3788313cfa2 15642 debian-installer extra multipath-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 22eb020068b1bbc4aef9015756de8a29 8882 debian-installer extra nbd-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 47e71ea102492adb49f129291e87aa65 3117816 debian-installer standard nic-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d262620965206685de3e049052800e3a 183890 debian-installer standard nic-pcmcia-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 3e8889457d177cd0ab93301fd3535933 38568 debian-installer standard nic-shared-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ f095cb07887024168ff5e652fa34a9bc 186466 debian-installer standard nic-usb-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 6a5952ef152d204a82bccde710c94553 3399472 debian-installer standard nic-wireless-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ c972fbe086c7e26a4006213550265979 45824 debian-installer extra ntfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 484da2a628fff2c2b7567ca55da0593c 53368 debian-installer standard pata-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 231cf8131e8aa64a8274b6635822eda1 61954 debian-installer standard pcmcia-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ a8349ffaba112ee6171c3700859b28ea 7534 debian-installer standard pcmcia-storage-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 8f094836b6da3d681186bd1424ac5da5 36736 debian-installer optional ppp-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 6e3fd0848862c048a46848070286afc2 145926 debian-installer standard sata-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 669371a33b2c98e328fa6799a67daa2d 139828 debian-installer standard scsi-core-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ f221844bf1b829ea371acd67b2675bfe 2405060 debian-installer standard scsi-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 47412bd0bef366c3cc6220c450d930b6 34758 debian-installer optional serial-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 04177cede8105b80eee81b8190941906 1822320 debian-installer extra sound-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ b780404cf86fdb8240550bc5538009cb 47916 debian-installer extra speakup-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 44d7f357ec879226abc96476aa3bc94e 20598 debian-installer extra squashfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 5c75a4818f842c33cd55f7777a525f70 45774 debian-installer extra udf-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 290ea49d6b27173a02c65d531c54ee35 7276 debian-installer extra uinput-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 44623a81a3aca0b334004c2b207de7d1 255282 debian-installer extra usb-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ be7d7fd55217ad9b7a01359bd198863f 191488 debian-installer optional usb-serial-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d306513fcdb64363646fd8dd2ca068a6 75118 debian-installer standard usb-storage-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ 1b59f042a4a6780b0e76319950737bfe 92978 debug extra usbip-dbgsym_2.0+4.9.161-1_amd64.deb
+ a2f89b627cc05916b21ae74b54571bdf 658410 admin optional usbip_2.0+4.9.161-1_amd64.deb
+ 4306e7905210ebff911e6e47a004c1ef 62430 debian-installer extra virtio-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
+ d186dcd31c9beeb86a804079ae9d6547 390812 debian-installer standard xfs-modules-4.9.0-9-amd64-di_4.9.161-1_amd64.udeb
diff --git a/test/mergechanges/unsupported-checksum.changes b/test/mergechanges/unsupported-checksum.changes
new file mode 100644
index 0000000..15a3284
--- /dev/null
+++ b/test/mergechanges/unsupported-checksum.changes
@@ -0,0 +1,44 @@
+Format: 1.8
+Date: Sat, 26 Jan 2019 18:31:50 +0000
+Source: xdg-desktop-portal
+Binary: xdg-desktop-portal-dev
+Architecture: all
+Version: 1.2.0-1
+Distribution: unstable
+Urgency: medium
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Changed-By: Simon McVittie <smcv@debian.org>
+Description:
+ xdg-desktop-portal-dev - desktop integration portal - development files
+Changes:
+ xdg-desktop-portal (1.2.0-1) unstable; urgency=medium
+ .
+ [ Simon McVittie ]
+ * New upstream stable release
+ * d/watch: Only watch for stable releases
+ * d/p/Revert-Stop-building-the-icon-validator.patch,
+ d/p/validate-icon-Add-a-define-for-bwrap.patch,
+ d/p/Replace-the-icon-validator-with-the-one-from-Flatpak-git-.patch:
+ Build a copy of the icon validator from Flatpak git master.
+ We don't want to rely on a version of Flatpak that isn't
+ stable yet.
+ - d/p/notification-Handle-non-existing-directories.patch,
+ d/p/notification-bind-mount-etc-ld.so.cache-to-the-sandbox.patch:
+ Remove, no longer necessary
+ * d/upstream/metadata: Add DEP-12 metadata
+ * Release to unstable
+ .
+ [ Jeremy Bicha ]
+ * Don't enable remote desktop support on Ubuntu. See LP bug 1802533
+Checksums-Sha1:
+ 3c23c6796524c189e84e0196eb044f52f8fe917d 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 62d26daeb56e96ff6639ff2ef0af18340ae7a605 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Checksums-Sha256:
+ f98a6c57e6b932d7c6bf8e38949f57206f4c6ded0156b0afaaebfc89d7d5b443 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 3552acdfb12d65e325bd161bad6446185851defe83ecfa1562294cbf48615e59 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Checksums-Ffff:
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Files:
+ 16c46d8c8dc3f185d9aaaf4c43bcb97d 38992 admin optional xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 5996887565ed2ec3a64280fbf1a29e13 9179 admin optional xdg-desktop-portal_1.2.0-1_all.buildinfo
diff --git a/test/mergechanges/unsupported-format.changes b/test/mergechanges/unsupported-format.changes
new file mode 100644
index 0000000..09828b0
--- /dev/null
+++ b/test/mergechanges/unsupported-format.changes
@@ -0,0 +1,41 @@
+Format: 1.6
+Date: Sat, 26 Jan 2019 18:31:50 +0000
+Source: xdg-desktop-portal
+Binary: xdg-desktop-portal-dev
+Architecture: all
+Version: 1.2.0-1
+Distribution: unstable
+Urgency: medium
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Changed-By: Simon McVittie <smcv@debian.org>
+Description:
+ xdg-desktop-portal-dev - desktop integration portal - development files
+Changes:
+ xdg-desktop-portal (1.2.0-1) unstable; urgency=medium
+ .
+ [ Simon McVittie ]
+ * New upstream stable release
+ * d/watch: Only watch for stable releases
+ * d/p/Revert-Stop-building-the-icon-validator.patch,
+ d/p/validate-icon-Add-a-define-for-bwrap.patch,
+ d/p/Replace-the-icon-validator-with-the-one-from-Flatpak-git-.patch:
+ Build a copy of the icon validator from Flatpak git master.
+ We don't want to rely on a version of Flatpak that isn't
+ stable yet.
+ - d/p/notification-Handle-non-existing-directories.patch,
+ d/p/notification-bind-mount-etc-ld.so.cache-to-the-sandbox.patch:
+ Remove, no longer necessary
+ * d/upstream/metadata: Add DEP-12 metadata
+ * Release to unstable
+ .
+ [ Jeremy Bicha ]
+ * Don't enable remote desktop support on Ubuntu. See LP bug 1802533
+Checksums-Sha1:
+ 3c23c6796524c189e84e0196eb044f52f8fe917d 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 62d26daeb56e96ff6639ff2ef0af18340ae7a605 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Checksums-Sha256:
+ f98a6c57e6b932d7c6bf8e38949f57206f4c6ded0156b0afaaebfc89d7d5b443 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 3552acdfb12d65e325bd161bad6446185851defe83ecfa1562294cbf48615e59 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Files:
+ 16c46d8c8dc3f185d9aaaf4c43bcb97d 38992 admin optional xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 5996887565ed2ec3a64280fbf1a29e13 9179 admin optional xdg-desktop-portal_1.2.0-1_all.buildinfo
diff --git a/test/mergechanges/xdg-desktop-portal_1.2.0-1_all.changes b/test/mergechanges/xdg-desktop-portal_1.2.0-1_all.changes
new file mode 100644
index 0000000..32b4e8d
--- /dev/null
+++ b/test/mergechanges/xdg-desktop-portal_1.2.0-1_all.changes
@@ -0,0 +1,41 @@
+Format: 1.8
+Date: Sat, 26 Jan 2019 18:31:50 +0000
+Source: xdg-desktop-portal
+Binary: xdg-desktop-portal-dev
+Architecture: all
+Version: 1.2.0-1
+Distribution: unstable
+Urgency: medium
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Changed-By: Simon McVittie <smcv@debian.org>
+Description:
+ xdg-desktop-portal-dev - desktop integration portal - development files
+Changes:
+ xdg-desktop-portal (1.2.0-1) unstable; urgency=medium
+ .
+ [ Simon McVittie ]
+ * New upstream stable release
+ * d/watch: Only watch for stable releases
+ * d/p/Revert-Stop-building-the-icon-validator.patch,
+ d/p/validate-icon-Add-a-define-for-bwrap.patch,
+ d/p/Replace-the-icon-validator-with-the-one-from-Flatpak-git-.patch:
+ Build a copy of the icon validator from Flatpak git master.
+ We don't want to rely on a version of Flatpak that isn't
+ stable yet.
+ - d/p/notification-Handle-non-existing-directories.patch,
+ d/p/notification-bind-mount-etc-ld.so.cache-to-the-sandbox.patch:
+ Remove, no longer necessary
+ * d/upstream/metadata: Add DEP-12 metadata
+ * Release to unstable
+ .
+ [ Jeremy Bicha ]
+ * Don't enable remote desktop support on Ubuntu. See LP bug 1802533
+Checksums-Sha1:
+ 3c23c6796524c189e84e0196eb044f52f8fe917d 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 62d26daeb56e96ff6639ff2ef0af18340ae7a605 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Checksums-Sha256:
+ f98a6c57e6b932d7c6bf8e38949f57206f4c6ded0156b0afaaebfc89d7d5b443 38992 xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 3552acdfb12d65e325bd161bad6446185851defe83ecfa1562294cbf48615e59 9179 xdg-desktop-portal_1.2.0-1_all.buildinfo
+Files:
+ 16c46d8c8dc3f185d9aaaf4c43bcb97d 38992 admin optional xdg-desktop-portal-dev_1.2.0-1_all.deb
+ 5996887565ed2ec3a64280fbf1a29e13 9179 admin optional xdg-desktop-portal_1.2.0-1_all.buildinfo
diff --git a/test/mergechanges/xdg-desktop-portal_1.2.0-1_amd64.changes b/test/mergechanges/xdg-desktop-portal_1.2.0-1_amd64.changes
new file mode 100644
index 0000000..ddb22c8
--- /dev/null
+++ b/test/mergechanges/xdg-desktop-portal_1.2.0-1_amd64.changes
@@ -0,0 +1,51 @@
+Format: 1.8
+Date: Sat, 26 Jan 2019 18:31:50 +0000
+Source: xdg-desktop-portal
+Binary: xdg-desktop-portal xdg-desktop-portal-dbgsym xdg-desktop-portal-tests xdg-desktop-portal-tests-dbgsym
+Architecture: amd64
+Version: 1.2.0-1
+Distribution: unstable
+Urgency: medium
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Changed-By: Simon McVittie <smcv@debian.org>
+Description:
+ xdg-desktop-portal - desktop integration portal for Flatpak and Snap
+ xdg-desktop-portal-tests - desktop integration portal - automated tests
+Changes:
+ xdg-desktop-portal (1.2.0-1) unstable; urgency=medium
+ .
+ [ Simon McVittie ]
+ * New upstream stable release
+ * d/watch: Only watch for stable releases
+ * d/p/Revert-Stop-building-the-icon-validator.patch,
+ d/p/validate-icon-Add-a-define-for-bwrap.patch,
+ d/p/Replace-the-icon-validator-with-the-one-from-Flatpak-git-.patch:
+ Build a copy of the icon validator from Flatpak git master.
+ We don't want to rely on a version of Flatpak that isn't
+ stable yet.
+ - d/p/notification-Handle-non-existing-directories.patch,
+ d/p/notification-bind-mount-etc-ld.so.cache-to-the-sandbox.patch:
+ Remove, no longer necessary
+ * d/upstream/metadata: Add DEP-12 metadata
+ * Release to unstable
+ .
+ [ Jeremy Bicha ]
+ * Don't enable remote desktop support on Ubuntu. See LP bug 1802533
+Checksums-Sha1:
+ da1f789d7921b4e44c0e843595d6c0766a22e52f 1153180 xdg-desktop-portal-dbgsym_1.2.0-1_amd64.deb
+ a1113c0c9de12b0b4dbf0a904d754be61bb54924 206988 xdg-desktop-portal-tests-dbgsym_1.2.0-1_amd64.deb
+ 0f9964de82fbf493d4d4a9d0bb8da8106e4f90f6 55556 xdg-desktop-portal-tests_1.2.0-1_amd64.deb
+ 07cf52da2e5cf3d76776a08e693362beccee6811 10078 xdg-desktop-portal_1.2.0-1_amd64.buildinfo
+ c1e43ea09f94d6fe3eb83d0410e3e80a9c63cf82 212204 xdg-desktop-portal_1.2.0-1_amd64.deb
+Checksums-Sha256:
+ e1997883023ce824c1e63320b6e2935986b70b4b363e826ee3f6018629a13086 1153180 xdg-desktop-portal-dbgsym_1.2.0-1_amd64.deb
+ bfadd137cf31bfa1b5b87af87bfdd861ad52c3a70dc135e50ceaa6986a2be844 206988 xdg-desktop-portal-tests-dbgsym_1.2.0-1_amd64.deb
+ 585e29127a00dc7feabdff72c2004b3c67c3fb528afd11e748e04ee7bf170ddb 55556 xdg-desktop-portal-tests_1.2.0-1_amd64.deb
+ 442ba784f7498395ec38e023194e2374e1607cefc5433f896c8cb5cf19f8a669 10078 xdg-desktop-portal_1.2.0-1_amd64.buildinfo
+ 6f2d1c73be324bfcdb3eea6bf1f3d2b78358989250c8334fca2fb2862c5986de 212204 xdg-desktop-portal_1.2.0-1_amd64.deb
+Files:
+ b4a88209842aa2ea031c2b41a9ba82c1 1153180 debug optional xdg-desktop-portal-dbgsym_1.2.0-1_amd64.deb
+ ca48de7155966c0b0cea5e30226506be 206988 debug optional xdg-desktop-portal-tests-dbgsym_1.2.0-1_amd64.deb
+ 9a497abe1208ed1504f057874b8c91da 55556 admin optional xdg-desktop-portal-tests_1.2.0-1_amd64.deb
+ cd99c019000a63b5cef9c2fc4213e89c 10078 admin optional xdg-desktop-portal_1.2.0-1_amd64.buildinfo
+ a4ed57a911718668b62a472db60729a9 212204 admin optional xdg-desktop-portal_1.2.0-1_amd64.deb
diff --git a/test/mergechanges/xdg-desktop-portal_1.2.0-1_source.changes b/test/mergechanges/xdg-desktop-portal_1.2.0-1_source.changes
new file mode 100644
index 0000000..f90507a
--- /dev/null
+++ b/test/mergechanges/xdg-desktop-portal_1.2.0-1_source.changes
@@ -0,0 +1,64 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+Format: 1.8
+Date: Sat, 26 Jan 2019 18:31:50 +0000
+Source: xdg-desktop-portal
+Architecture: source
+Version: 1.2.0-1
+Distribution: unstable
+Urgency: medium
+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
+Changed-By: Simon McVittie <smcv@debian.org>
+Changes:
+ xdg-desktop-portal (1.2.0-1) unstable; urgency=medium
+ .
+ [ Simon McVittie ]
+ * New upstream stable release
+ * d/watch: Only watch for stable releases
+ * d/p/Revert-Stop-building-the-icon-validator.patch,
+ d/p/validate-icon-Add-a-define-for-bwrap.patch,
+ d/p/Replace-the-icon-validator-with-the-one-from-Flatpak-git-.patch:
+ Build a copy of the icon validator from Flatpak git master.
+ We don't want to rely on a version of Flatpak that isn't
+ stable yet.
+ - d/p/notification-Handle-non-existing-directories.patch,
+ d/p/notification-bind-mount-etc-ld.so.cache-to-the-sandbox.patch:
+ Remove, no longer necessary
+ * d/upstream/metadata: Add DEP-12 metadata
+ * Release to unstable
+ .
+ [ Jeremy Bicha ]
+ * Don't enable remote desktop support on Ubuntu. See LP bug 1802533
+Checksums-Sha1:
+ 356dc96c9d57de0a4f36cd16c4015b1aee1931fd 2431 xdg-desktop-portal_1.2.0-1.dsc
+ 925661053e97c9aa849f8e8a5e7f2caf46e314f4 405856 xdg-desktop-portal_1.2.0.orig.tar.xz
+ 68f06ca08739e30ed8fc957e9fad318cdd73a3e4 8532 xdg-desktop-portal_1.2.0-1.debian.tar.xz
+ d724848c560528a0e1d7c5f575b3d1e490d189b7 10038 xdg-desktop-portal_1.2.0-1_source.buildinfo
+Checksums-Sha256:
+ b8c53f9d574d9eff13d331ca3f2975f52ac52eb78bd10ff8f15b756abd397b09 2431 xdg-desktop-portal_1.2.0-1.dsc
+ c9a4d6c415417aed3231ebc6c9a4091b90199bea4295aab311ce3dab4032e194 405856 xdg-desktop-portal_1.2.0.orig.tar.xz
+ c838e919bec5039a74ca7d247954394be8db9f9a8945a0efe4b95a5ae16117ba 8532 xdg-desktop-portal_1.2.0-1.debian.tar.xz
+ f221172b9b2eeaaf7c1b26cb3a434dc15c11acfd61c63bb4e2572982cd58d4bd 10038 xdg-desktop-portal_1.2.0-1_source.buildinfo
+Files:
+ 6f812573ffabcba64622290d8fac6705 2431 admin optional xdg-desktop-portal_1.2.0-1.dsc
+ 8e85078478065f9592b0606bc32c5675 405856 admin optional xdg-desktop-portal_1.2.0.orig.tar.xz
+ 74f3ddd00060d2b7992a41592728bf95 8532 admin optional xdg-desktop-portal_1.2.0-1.debian.tar.xz
+ 0a70ad5592ac53bb4648261766a47c4b 10038 admin optional xdg-desktop-portal_1.2.0-1_source.buildinfo
+
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAEBCAAdFiEENuxaZEik9e95vv6Y4FrhR4+BTE8FAlxMydIACgkQ4FrhR4+B
+TE8NWA/6AsokGe0NZqhoY91+MtFHmaN/M4iyL9shyHBZxMUJRyeDNmo2jJkIMDSX
+OSHdptyybVfk31O3L58Ev9jXNG5lw2J31IXMrt4UYiGjJXdyq7IQyqHIrzrjBBCk
+fcghcT8PFMHBtTaOHyj4sKo9jAK9tH53ZRK242PebZt3Fdn1FUneVpn7GSI3d78M
++kzx0I7Z334rAAvAe8IkSDyYHfi+bJ9gchJaWt2LD2sulh77W4HqaxtSE+4H+7UR
+2eAP8FuI3Q6gg90VTDR0y4mOvvNfzZ1jN6R8J9mR8qwTIbpbZCju1oO1jOOuGQSL
+05aeWGqNsdl2vjDr4TsraDv4dkdCQhF6EdWWIreKCQQL5Zh5p9t+z2LOITcRbd2Q
+1PcR1vJJLzkpT9M7DSWDRbJ+iWsDjuUIsr1d6dMs+AGVWaPnFytIUxExreEdn7Ul
+GJXLWsYg4AmePNoXWJch24G3S/pn5L9Am0Ikuwze9LFR+GJTtYyPytBjtXE/jysx
+F2tdJUl/h29xLzw0kIMm0+vj0/ln2RUP3KIBNcXS+ekP2Grte6LKgfq9kNRTfePx
+gfGmz+6stAcnTnoJBX/hkBAujQL6nkU+ZPakakn10GJabTwhEtMH0OQksKUKDMKB
+1plr19l5RNZTGwmJ5KTK2CBVs3Ctzgz66l1YgexZWhr3PWv/bhE=
+=hcT2
+-----END PGP SIGNATURE-----
diff --git a/test/sadt/README b/test/sadt/README
new file mode 100644
index 0000000..7110a55
--- /dev/null
+++ b/test/sadt/README
@@ -0,0 +1,5 @@
+Each directory here is a fake Debian package with autopkgtests
+
+To create the basic structure for a new test case, run the "new" script, e.g.
+
+$ ./new my-test-case
diff --git a/test/sadt/comma-separated-restrictions/debian/control b/test/sadt/comma-separated-restrictions/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/comma-separated-restrictions/debian/control
diff --git a/test/sadt/comma-separated-restrictions/debian/tests/control b/test/sadt/comma-separated-restrictions/debian/tests/control
new file mode 100644
index 0000000..90f300c
--- /dev/null
+++ b/test/sadt/comma-separated-restrictions/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: test
+Restrictions: needs-recommends, allow-stderr
diff --git a/test/sadt/comma-separated-restrictions/debian/tests/test b/test/sadt/comma-separated-restrictions/debian/tests/test
new file mode 100755
index 0000000..b23e556
--- /dev/null
+++ b/test/sadt/comma-separated-restrictions/debian/tests/test
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/sadt/comma-separated-tests/debian/control b/test/sadt/comma-separated-tests/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/comma-separated-tests/debian/control
diff --git a/test/sadt/comma-separated-tests/debian/tests/control b/test/sadt/comma-separated-tests/debian/tests/control
new file mode 100644
index 0000000..3566d3e
--- /dev/null
+++ b/test/sadt/comma-separated-tests/debian/tests/control
@@ -0,0 +1 @@
+Tests: test1, test2
diff --git a/test/sadt/comma-separated-tests/debian/tests/test1 b/test/sadt/comma-separated-tests/debian/tests/test1
new file mode 100755
index 0000000..b23e556
--- /dev/null
+++ b/test/sadt/comma-separated-tests/debian/tests/test1
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/sadt/comma-separated-tests/debian/tests/test2 b/test/sadt/comma-separated-tests/debian/tests/test2
new file mode 100755
index 0000000..003e8fc
--- /dev/null
+++ b/test/sadt/comma-separated-tests/debian/tests/test2
@@ -0,0 +1,2 @@
+#!/bin/true
+
diff --git a/test/sadt/fails/debian/control b/test/sadt/fails/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/fails/debian/control
diff --git a/test/sadt/fails/debian/tests/control b/test/sadt/fails/debian/tests/control
new file mode 100644
index 0000000..317cd51
--- /dev/null
+++ b/test/sadt/fails/debian/tests/control
@@ -0,0 +1 @@
+Tests: fails
diff --git a/test/sadt/fails/debian/tests/fails b/test/sadt/fails/debian/tests/fails
new file mode 100755
index 0000000..98975b2
--- /dev/null
+++ b/test/sadt/fails/debian/tests/fails
@@ -0,0 +1 @@
+#!/bin/false
diff --git a/test/sadt/flaky/debian/control b/test/sadt/flaky/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/flaky/debian/control
diff --git a/test/sadt/flaky/debian/tests/control b/test/sadt/flaky/debian/tests/control
new file mode 100644
index 0000000..22feebd
--- /dev/null
+++ b/test/sadt/flaky/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: flaky-succeeds flaky-fails
+Restrictions: flaky
diff --git a/test/sadt/flaky/debian/tests/flaky-fails b/test/sadt/flaky/debian/tests/flaky-fails
new file mode 100755
index 0000000..98975b2
--- /dev/null
+++ b/test/sadt/flaky/debian/tests/flaky-fails
@@ -0,0 +1 @@
+#!/bin/false
diff --git a/test/sadt/flaky/debian/tests/flaky-succeeds b/test/sadt/flaky/debian/tests/flaky-succeeds
new file mode 100755
index 0000000..b23e556
--- /dev/null
+++ b/test/sadt/flaky/debian/tests/flaky-succeeds
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/sadt/ignore-udebs/debian/control b/test/sadt/ignore-udebs/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/ignore-udebs/debian/control
diff --git a/test/sadt/ignore-udebs/debian/tests/control b/test/sadt/ignore-udebs/debian/tests/control
new file mode 100644
index 0000000..79c6de9
--- /dev/null
+++ b/test/sadt/ignore-udebs/debian/tests/control
@@ -0,0 +1 @@
+Tests: ignore-udebs
diff --git a/test/sadt/new b/test/sadt/new
new file mode 100755
index 0000000..20fc7c3
--- /dev/null
+++ b/test/sadt/new
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+set -e
+
+for sample in $@; do
+ mkdir -p "$sample"/debian/tests
+ touch "$sample/debian/control"
+ echo "Tests: $sample" > "$sample"/debian/tests/control
+done
diff --git a/test/sadt/passes/debian/control b/test/sadt/passes/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/passes/debian/control
diff --git a/test/sadt/passes/debian/tests/control b/test/sadt/passes/debian/tests/control
new file mode 100644
index 0000000..db2fda9
--- /dev/null
+++ b/test/sadt/passes/debian/tests/control
@@ -0,0 +1 @@
+Tests: test
diff --git a/test/sadt/passes/debian/tests/test b/test/sadt/passes/debian/tests/test
new file mode 100755
index 0000000..b23e556
--- /dev/null
+++ b/test/sadt/passes/debian/tests/test
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/sadt/skippable/debian/control b/test/sadt/skippable/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/skippable/debian/control
diff --git a/test/sadt/skippable/debian/tests/control b/test/sadt/skippable/debian/tests/control
new file mode 100644
index 0000000..491208f
--- /dev/null
+++ b/test/sadt/skippable/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: skipped
+Restrictions: skippable
diff --git a/test/sadt/skippable/debian/tests/skipped b/test/sadt/skippable/debian/tests/skipped
new file mode 100755
index 0000000..e1bcf85
--- /dev/null
+++ b/test/sadt/skippable/debian/tests/skipped
@@ -0,0 +1,2 @@
+#!/bin/sh
+exit 77
diff --git a/test/sadt/space-separated-restrictions/debian/control b/test/sadt/space-separated-restrictions/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/space-separated-restrictions/debian/control
diff --git a/test/sadt/space-separated-restrictions/debian/tests/control b/test/sadt/space-separated-restrictions/debian/tests/control
new file mode 100644
index 0000000..51483d4
--- /dev/null
+++ b/test/sadt/space-separated-restrictions/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: test
+Restrictions: needs-recommends allow-stderr
diff --git a/test/sadt/space-separated-restrictions/debian/tests/test b/test/sadt/space-separated-restrictions/debian/tests/test
new file mode 100755
index 0000000..b23e556
--- /dev/null
+++ b/test/sadt/space-separated-restrictions/debian/tests/test
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/sadt/space-separated-tests/debian/control b/test/sadt/space-separated-tests/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/space-separated-tests/debian/control
diff --git a/test/sadt/space-separated-tests/debian/tests/control b/test/sadt/space-separated-tests/debian/tests/control
new file mode 100644
index 0000000..c901e5a
--- /dev/null
+++ b/test/sadt/space-separated-tests/debian/tests/control
@@ -0,0 +1 @@
+Tests: test1 test2
diff --git a/test/sadt/space-separated-tests/debian/tests/test1 b/test/sadt/space-separated-tests/debian/tests/test1
new file mode 100755
index 0000000..b23e556
--- /dev/null
+++ b/test/sadt/space-separated-tests/debian/tests/test1
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/sadt/space-separated-tests/debian/tests/test2 b/test/sadt/space-separated-tests/debian/tests/test2
new file mode 100755
index 0000000..003e8fc
--- /dev/null
+++ b/test/sadt/space-separated-tests/debian/tests/test2
@@ -0,0 +1,2 @@
+#!/bin/true
+
diff --git a/test/sadt/superficial-fails/debian/control b/test/sadt/superficial-fails/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/superficial-fails/debian/control
diff --git a/test/sadt/superficial-fails/debian/tests/control b/test/sadt/superficial-fails/debian/tests/control
new file mode 100644
index 0000000..02ed109
--- /dev/null
+++ b/test/sadt/superficial-fails/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: test
+Restrictions: superficial
diff --git a/test/sadt/superficial-fails/debian/tests/test b/test/sadt/superficial-fails/debian/tests/test
new file mode 100755
index 0000000..98975b2
--- /dev/null
+++ b/test/sadt/superficial-fails/debian/tests/test
@@ -0,0 +1 @@
+#!/bin/false
diff --git a/test/sadt/superficial/debian/control b/test/sadt/superficial/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/superficial/debian/control
diff --git a/test/sadt/superficial/debian/tests/control b/test/sadt/superficial/debian/tests/control
new file mode 100644
index 0000000..02ed109
--- /dev/null
+++ b/test/sadt/superficial/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: test
+Restrictions: superficial
diff --git a/test/sadt/superficial/debian/tests/test b/test/sadt/superficial/debian/tests/test
new file mode 100755
index 0000000..b23e556
--- /dev/null
+++ b/test/sadt/superficial/debian/tests/test
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/sadt/test-command/debian/control b/test/sadt/test-command/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/test-command/debian/control
diff --git a/test/sadt/test-command/debian/tests/control b/test/sadt/test-command/debian/tests/control
new file mode 100644
index 0000000..d52194b
--- /dev/null
+++ b/test/sadt/test-command/debian/tests/control
@@ -0,0 +1 @@
+Test-Command: echo 'Test-Command is supported'
diff --git a/test/sadt/tests-directory/debian/control b/test/sadt/tests-directory/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/tests-directory/debian/control
diff --git a/test/sadt/tests-directory/debian/tests/control b/test/sadt/tests-directory/debian/tests/control
new file mode 100644
index 0000000..145b7b5
--- /dev/null
+++ b/test/sadt/tests-directory/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: test
+Tests-Directory: foo
diff --git a/test/sadt/tests-directory/foo/test b/test/sadt/tests-directory/foo/test
new file mode 100755
index 0000000..b23e556
--- /dev/null
+++ b/test/sadt/tests-directory/foo/test
@@ -0,0 +1 @@
+#!/bin/true
diff --git a/test/sadt/unskippable/debian/control b/test/sadt/unskippable/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/unskippable/debian/control
diff --git a/test/sadt/unskippable/debian/tests/control b/test/sadt/unskippable/debian/tests/control
new file mode 100644
index 0000000..c077ac5
--- /dev/null
+++ b/test/sadt/unskippable/debian/tests/control
@@ -0,0 +1 @@
+Tests: unskippable
diff --git a/test/sadt/unskippable/debian/tests/unskippable b/test/sadt/unskippable/debian/tests/unskippable
new file mode 100755
index 0000000..e1bcf85
--- /dev/null
+++ b/test/sadt/unskippable/debian/tests/unskippable
@@ -0,0 +1,2 @@
+#!/bin/sh
+exit 77
diff --git a/test/sadt/unskipped/debian/control b/test/sadt/unskipped/debian/control
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/sadt/unskipped/debian/control
diff --git a/test/sadt/unskipped/debian/tests/control b/test/sadt/unskipped/debian/tests/control
new file mode 100644
index 0000000..d3ce911
--- /dev/null
+++ b/test/sadt/unskipped/debian/tests/control
@@ -0,0 +1,2 @@
+Tests: fails
+Restrictions: skippable
diff --git a/test/sadt/unskipped/debian/tests/fails b/test/sadt/unskipped/debian/tests/fails
new file mode 100755
index 0000000..98975b2
--- /dev/null
+++ b/test/sadt/unskipped/debian/tests/fails
@@ -0,0 +1 @@
+#!/bin/false
diff --git a/test/shunit2-helper-functions.sh b/test/shunit2-helper-functions.sh
new file mode 100644
index 0000000..402a7ce
--- /dev/null
+++ b/test/shunit2-helper-functions.sh
@@ -0,0 +1,27 @@
+# Copyright (C) 2012, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+runCommand() {
+ local param="$1"
+ local exp_stdout="$2"
+ local exp_stderr="$3"
+ local exp_retval=$4
+ local stdoutF="${SHUNIT_TMPDIR}/stdout"
+ local stderrF="${SHUNIT_TMPDIR}/stderr"
+ eval "${COMMAND} $param" > ${stdoutF} 2> ${stderrF}
+ retval=$?
+ assertEquals "standard output of ${COMMAND} $param\n" "$exp_stdout" "$(cat ${stdoutF})"
+ assertEquals "error output of ${COMMAND} $param\n" "$exp_stderr" "$(cat ${stderrF})"
+ assertEquals "return value of ${COMMAND} $param\n" $exp_retval $retval
+}
diff --git a/test/t/common.t b/test/t/common.t
new file mode 100755
index 0000000..82e9b53
--- /dev/null
+++ b/test/t/common.t
@@ -0,0 +1,106 @@
+#!/usr/bin/perl
+
+package Config::Test;
+
+use Moo;
+
+extends 'Devscripts::Config';
+
+use constant keys => [
+ ['test!', 'TEST', 'bool', 1],
+ ['str=s', 'STR', qr/^a/, 'ab'],
+ ['str2=s', 'STR2', qr/^a/, 'bb'],
+ ['array=s', 'ARRAY', undef, sub { [] }],
+];
+
+package main;
+
+use Test::More tests => 39;
+
+BEGIN {
+ use_ok('Devscripts::Config');
+}
+
+my $conf;
+$Devscripts::Output::die_on_error = 0;
+
+@Devscripts::Config::config_files = ();
+
+ok($conf = Config::Test->new->parse, 'No conf files, no args');
+ok($conf->{test} == 1, ' test=1');
+ok($conf->{str} eq 'ab', ' str=ab');
+ok($conf->{str2} eq 'bb', ' str2=bb');
+
+@Devscripts::Config::config_files = ('t/config1');
+
+ok($conf = Config::Test->new->parse, 'Conf files, no args');
+ok($conf->{test} == 0, ' test=0');
+ok($conf->{str} eq 'az', ' str=az');
+ok($conf->{str2} eq 'a1', ' str2=a1');
+if (ok(ref $conf->{array}, ' array')) {
+ ok($conf->{array}->[0] eq "b c", ' "b c" found');
+ ok($conf->{array}->[1] eq "a", ' "a" found');
+ ok($conf->{array}->[2] eq "d", ' "d" found');
+ ok(scalar @{ $conf->{array} } == 3, ' 3 elements');
+}
+
+@ARGV = ('--noconf');
+
+ok($conf = Config::Test->new->parse, '--noconf');
+ok($conf->{test} == 1, ' test=1');
+ok($conf->{str} eq 'ab', ' str=ab');
+ok($conf->{str2} eq 'bb', ' str2=bb');
+
+@ARGV = ('--conffile', 't/config2');
+
+ok($conf = Config::Test->new->parse, '--conffile t/config2');
+ok($conf->{test} == 1, ' test=1');
+ok($conf->{str} eq 'ab', ' str=ab');
+ok($conf->{str2} eq 'axzx', ' str2=axzx');
+
+@ARGV = ('--conffile', '+t/config2');
+
+ok($conf = Config::Test->new->parse, '--conffile +t/config2');
+ok($conf->{test} == 0, ' test=0');
+ok($conf->{str} eq 'az', ' str=az');
+ok($conf->{str2} eq 'axzx', ' str2=axzx');
+
+@ARGV = ('--test', '--str2=ac');
+
+ok($conf = Config::Test->new->parse, '--test --str2=ac');
+ok($conf->{test} == 1, ' test=1');
+ok($conf->{str} eq 'az', ' str=az');
+ok($conf->{str2} eq 'ac', ' str2=ac');
+
+@ARGV = ('--noconf', '--str2', 'ac', '--notest');
+
+ok($conf = Config::Test->new->parse, '--noconf --no-test --str2=ac');
+ok($conf->{test} == 0, ' test=0');
+ok($conf->{str} eq 'ab', ' str=ab');
+ok($conf->{str2} eq 'ac', ' str2=ac');
+
+@ARGV = ('--noconf', '--array', 'a', '--array=b');
+ok($conf = Config::Test->new->parse, '--noconf --array a --array=b');
+ok(ref $conf->{array}, 'Multiple options are allowed');
+ok($conf->{array}->[0] eq 'a', ' first value is a');
+ok($conf->{array}->[1] eq 'b', ' second value is b');
+
+# Redirect STDERR to $out;
+my $out;
+{
+ no warnings;
+ open F, ">&STDERR";
+}
+close STDERR;
+open STDERR, '>', \$out;
+eval {
+ @ARGV = ('--noconf', '--str2', 'bc');
+ $conf = Config::Test->new->parse;
+};
+
+# Restore STDERR
+close STDERR;
+open STDERR, ">&F";
+fail($@) if ($@);
+ok($out =~ /Bad str2 value/, '--str2=bc is rejected');
+
diff --git a/test/t/config1 b/test/t/config1
new file mode 100644
index 0000000..829becc
--- /dev/null
+++ b/test/t/config1
@@ -0,0 +1,12 @@
+TEST=no
+STR=az
+STR2=a1
+ARRAY='a "b c" d'
+USCAN_SYMLINK=rename
+USCAN_VERBOSE=yes
+SALSA_TOKEN=xx
+SALSA_KGB=yes
+SALSA_ENABLE_ISSUES=no
+SALSA_EMAIL=ignore
+SALSA_ENABLE_MR=yes
+SALSA_IRKER=no
diff --git a/test/t/config2 b/test/t/config2
new file mode 100644
index 0000000..32d1629
--- /dev/null
+++ b/test/t/config2
@@ -0,0 +1 @@
+STR2=axzx
diff --git a/test/t/json-cache.t b/test/t/json-cache.t
new file mode 100644
index 0000000..a9d8918
--- /dev/null
+++ b/test/t/json-cache.t
@@ -0,0 +1,25 @@
+use Test::More;
+
+use strict;
+
+SKIP: {
+ eval "use JSON";
+ skip "JSON isn't available" if ($@);
+ use_ok('Devscripts::JSONCache');
+
+ my %c;
+
+ ok(tie(%c, 'Devscripts::JSONCache', 'test.json'), 'No file');
+ $c{a} = 1;
+ untie %c;
+ ok(-r 'test.json', 'Cache created');
+ ok(tie(%c, 'Devscripts::JSONCache', 'test.json'), 'Reuse file');
+ ok($c{a} == 1, 'Value saved');
+ untie %c;
+ unlink 'test.json';
+
+ my %c2;
+ eval { tie(%c2, 'Devscripts::JSONCache', 'zzz/test.json') };
+ ok($@, "Build refused if write isn't possible");
+}
+done_testing();
diff --git a/test/t/salsa-config.t b/test/t/salsa-config.t
new file mode 100644
index 0000000..1ee644a
--- /dev/null
+++ b/test/t/salsa-config.t
@@ -0,0 +1,18 @@
+use Test::More tests => 8;
+
+BEGIN {
+ use_ok('Devscripts::Salsa::Config');
+}
+
+@Devscripts::Config::config_files = ('t/config1');
+@ARGV = ('push_repo', '--disable-kgb', '--tagpending', '--irker');
+
+ok($conf = Devscripts::Salsa::Config->new->parse, 'Parse');
+
+ok(($conf->kgb == 0 and $conf->disable_kgb), 'KGB disabled');
+ok(($conf->tagpending and $conf->disable_tagpending == 0),
+ 'Tagpending enabled');
+ok(($conf->issues == 'disabled'), 'Enable-issues disabled');
+ok(($conf->email == 0 and $conf->disable_email == 0), 'Email ignored');
+ok(($conf->mr == 'enabled'), 'MR enabled');
+ok(($conf->irker == 1 and $conf->disable_irker == 0), 'Irker enabled');
diff --git a/test/t/salsa.conf b/test/t/salsa.conf
new file mode 100644
index 0000000..d14fa84
--- /dev/null
+++ b/test/t/salsa.conf
@@ -0,0 +1,4 @@
+SALSA_TOKEN=abc
+SALSA_API_URL=http://no-exist.xxx/api/v4
+SALSA_KGB_SERVER_URL=http://no-exist.xxx:9418/webhook/?channel=
+SALSA_TAGPENDING_SERVER_URL=http://no-exist.xxx:9418/tagpending/
diff --git a/test/t/salsa.pm b/test/t/salsa.pm
new file mode 100644
index 0000000..800d1e5
--- /dev/null
+++ b/test/t/salsa.pm
@@ -0,0 +1,226 @@
+{
+
+ package MockRESTClient;
+ use URI;
+ use Moo;
+ extends 'GitLab::API::v4::RESTClient';
+
+ has _mocks => (
+ is => 'ro',
+ default => sub { [] },
+ init_arg => undef,
+ );
+
+ sub mock_endpoints {
+ my $self = shift;
+
+ while (@_) {
+ my $method = shift;
+ my $path_re = shift;
+ my $sub = shift;
+
+ push @{ $self->_mocks() }, [$method, $path_re, $sub];
+ }
+
+ return;
+ }
+
+ sub _http_tiny_request {
+ my ($self, $req_method, $req) = @_;
+
+ die "req_method may only be 'request' at this time"
+ if $req_method ne 'request';
+
+ my ($method, $url, $options) = @$req;
+
+ my $path = URI->new($url)->path();
+ $path =~ s{^.*api/v4/}{};
+
+ foreach my $mock (@{ $self->_mocks() }) {
+ my ($handler_method, $path_re, $sub) = @$mock;
+
+ next if $method ne $handler_method;
+
+ my @captures = ($path =~ $path_re);
+ next if !@captures; # No captures still returns a 1.
+
+ my ($status, $content)
+ = $sub->([$method, $url, $options], @captures);
+ $content = JSON::to_json($content) if ref $content;
+
+ return {
+ status => $status,
+ success => ($status =~ m{^2\d\d$}) ? 1 : 0,
+ defined($content) ? (content => $content) : (),
+ };
+ }
+
+ die "No mock endpoint matched the $method '$path' endpoint";
+ }
+}
+
+sub api {
+ my ($gitdir) = @_;
+ my @users = ({
+ id => 11,
+ username => 'me',
+ name => 'Me',
+ email => 'me@debian.org',
+ state => 'active'
+ });
+ my @teams = ({
+ id => 2099,
+ name => 'Debian JavaScript Maintainers',
+ full_name => 'Debian JavaScript Maintainers',
+ full_path => 'js-team',
+ });
+ my @projects;
+ my $next_id = 1;
+
+ my $api = GitLab::API::v4->new(
+ url => 'https://example.com/api/v4',
+ rest_client_class => 'MockRESTClient',
+ );
+
+ $api->rest_client->mock_endpoints(
+ GET => qr{^user$} => sub { 200, $users[0] },
+ GET => qr{^users$} => sub { 200, \@users },
+ POST => qr{^users$} => sub {
+ my ($req) = @_;
+ my $user = decode_json($req->[2]->{content});
+ $user->{id} = $next_id;
+ $next_id++;
+ push @users, $user;
+ return 204;
+ },
+ GET => qr{^users?/(\d+)$} => sub {
+ my ($req, $id) = @_;
+ foreach my $user (@users) {
+ next if $user->{id} != $id;
+ return 200, $user;
+ }
+ return 404;
+ },
+ GET => qr{^users/(\D+)$} => sub {
+ my ($req, $id) = @_;
+ foreach my $user (@users) {
+ next if $user->{username} != $id;
+ return 200, $user;
+ }
+ return 404;
+ },
+ GET => qr{^groups$} => sub {
+ 200, \@teams;
+ },
+ GET => qr{^groups/([^/]+)$} => sub {
+ my ($req, $name) = @_;
+ foreach my $team (@teams) {
+ next if $team->{full_path} ne $name;
+ return 200, $team;
+ }
+ return 404;
+ },
+ PUT => qr{^users/(\d+)$} => sub {
+ my ($req, $id) = @_;
+ my $data = decode_json($req->[2]->{content});
+ foreach my $user (@users) {
+ next if $user->{id} != $id;
+ %$user = (%$user, %$data,);
+ return 204;
+ }
+ return 404;
+ },
+ DELETE => qr{^users/(\d+)$} => sub {
+ my ($req, $id) = @_;
+ my @new;
+ foreach my $user (@users) {
+ next if $user->{id} == $id;
+ push @new, $user;
+ }
+ return 404 if @new == @users;
+ @users = @new;
+ return 204;
+ },
+ # Projects
+ POST => qr{^projects$} => sub {
+ my $content = JSON::from_json($_[0]->[2]->{content});
+ mkdir "$gitdir/me/$content->{path}";
+ $ENV{"GIT_CONFIG_NOGLOBAL"} = 1;
+ print
+`cd $gitdir/me/$content->{path};git init;git config receive.denyCurrentBranch ignore;cd -`;
+ $content->{id} = scalar @projects + 1;
+ $content->{hooks} = [];
+ $content->{namespace} = {
+ kind => 'user',
+ id => 11,
+ name => 'me',
+ };
+ $content->{path_with_namespace} = 'me/' . $content->{path};
+ $content->{web_url} = 'http://no.org/me/' . $content->{path};
+ push @projects, $content;
+ return 200, $content;
+ },
+ GET => qr{^projects/(\d+)/hooks} => sub {
+ my ($req, $id) = @_;
+ my $res = eval { $projects[$id - 1]->{hooks} };
+ return ($res ? (200, $res) : (404));
+ },
+ GET => qr{^projects/(\d+)/services/(\w+)} => sub {
+ my ($req, $id, $service) = @_;
+ return 404;
+ },
+ GET => qr{^projects$} => sub {
+ my ($req) = @_;
+ return (200, \@projects) unless ($req->[1] =~ /search=([^&]+)/);
+ my $str = $1;
+ my @res;
+ foreach (@projects) {
+ if ($_->{name} =~ /\Q$str\E/) {
+ push @res, $_;
+ }
+ }
+ return 200, \@res;
+ },
+ GET => qr{^projects/([a-z]+)(?:%2F(\w+))*$} => sub {
+ my ($req, @path) = @_;
+ my $repo = pop @path;
+ my $path = join '/', @path;
+ foreach (@projects) {
+ if ($_->{namespace}->{name} eq $path and $_->{path} eq $repo) {
+ return 200, $_;
+ }
+ }
+ return 404;
+ },
+ GET => qr{^projects/(\d+)$} => sub {
+ my ($req, $id) = @_;
+ return 404 unless ($_ = $projects[$id - 1]);
+ return 200, $_;
+ },
+ PUT => qr{^projects/(\d+)} => sub {
+ my ($req, $id) = @_;
+ return 404 unless ($_ = $projects[$id - 1]);
+ my $content = JSON::from_json($req->[2]->{content});
+ foreach my $k (keys %$content) {
+ $_->{$k} = $content->{$k};
+ }
+ return 200, {};
+ },
+ POST => qr{^projects/(\d+)/hooks} => sub {
+ my ($req, $id) = @_;
+ return 404 unless ($_ = $projects[$id - 1]);
+ my $content = JSON::from_json($req->[2]->{content});
+ push @{ $_->{hooks} }, $content;
+ return 200, {};
+ },
+ POST => qr{^projects/(\d+)/repository/branches} => sub {
+ return 200, {};
+ },
+ DELETE => qr{^projects/(\d+)/repository/branches/([\w\-\.]+)$} => sub {
+ return 200, {};
+ },
+ );
+ return $api;
+}
+
+1;
diff --git a/test/t/salsa.t b/test/t/salsa.t
new file mode 100644
index 0000000..d80978a
--- /dev/null
+++ b/test/t/salsa.t
@@ -0,0 +1,108 @@
+#!/usr/bin/env perl
+
+my $skip;
+use File::Temp 'tempdir';
+use Test::More;
+use strict;
+
+BEGIN {
+ eval "use Test::Output;use GitLab::API::v4;";
+ $skip = $@ ? 1 : 0;
+}
+
+my $pwd = `pwd`;
+chomp $pwd;
+my ($api, $gitdir);
+
+sub mkDebianDir {
+ my $tmpdir = tempdir(CLEANUP => 1);
+ chdir $tmpdir;
+ $ENV{"GIT_CONFIG_NOGLOBAL"} = 1;
+ $ENV{"HOME"} = "";
+ system "git init";
+ system "git config user.name 'Joe Developer'";
+ system 'git config user.email "jd@debian.org"';
+ mkdir 'debian';
+ open F, ">debian/changelog";
+ print F <<EOF;
+foobar (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd\@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+EOF
+ close F;
+ open F, ">README.md";
+ print F <<EOF;
+# Salsa test
+EOF
+ system "git add *";
+ system "git commit -a -m 'Salsa test'";
+ system "git checkout -q -b dev";
+ chdir $pwd;
+ return $tmpdir;
+}
+
+sub run {
+ my ($result, $out, @list) = @_;
+ @ARGV = ('--no-cache', @list);
+ my ($res, $salsa);
+ combined_like(
+ sub {
+ $salsa = Devscripts::Salsa->new({ api => $api });
+ $salsa->config->git_server_url($gitdir . '/');
+ $res = $salsa->run;
+ },
+ $out,
+ "command: " . join(' ', @list));
+ ok($res =~ /^$result$/i, " result is $result");
+}
+
+sub run_debug {
+ my ($result, $out, @list) = @_;
+ @ARGV = ('--no-cache', @list);
+ my ($res, $salsa);
+ $salsa = Devscripts::Salsa->new({ api => $api });
+ $salsa->config->git_server_url($gitdir . '/');
+ $res = $salsa->run;
+}
+
+SKIP: {
+ skip "Missing dependencies" if ($skip);
+ require './t/salsa.pm';
+ $gitdir = tempdir(CLEANUP => 1);
+ sleep 1;
+ mkdir "$gitdir/me" or die "$gitdir/me: $!";
+
+ $api = api($gitdir);
+
+ use_ok 'Devscripts::Salsa';
+ $Devscripts::Output::die_on_error = 0;
+ @Devscripts::Config::config_files = ('t/salsa.conf');
+
+ # Search methods
+ run(0, qr/Id\s*:\s*11\nUsername\s*:\s*me/s, 'whoami');
+ run(0, qr/Id\s*:\s*2099\nName/s, 'search_group', 'js-team');
+ run(0, qr/Id\s*:\s*2099\nName/s, 'search_group', 2099);
+ run(0, qr/Id.*\nUsername\s*: me/s, 'search_user', 'me');
+ run(0, qr/Id.*\nUsername\s*: me/s, 'search_user', 'm');
+ run(0, qr/Id.*\nUsername\s*: me/s, 'search_user', 11);
+
+ # Project methods
+ my $repo = mkDebianDir;
+ run(0, qr/Project .*created/s, '-C', $repo, '--verbose', 'push_repo', '.');
+ chdir $pwd;
+ $repo = tempdir(CLEANUP => 1);
+ run(0, qr/KGB hook added.*Tagpending hook added/s,
+ 'update_repo', '--kgb', '--irc=debian', '--tagpending', 'foobar');
+ run(0, qr/foobar\s*:\s*OK/s,
+ 'update_safe', '--kgb', '--irc=debian', '--tagpending', 'foobar');
+ run(0, qr{Full path\s*:\s*me/foobar}, 'search', 'foobar');
+ run(0, qr{Configuring foobar},
+ 'rename_branch', 'foobar', '--source-branch=dev',
+ '--dest-branch=dev2');
+}
+
+done_testing;
+
+1;
diff --git a/test/t/uscan-config.t b/test/t/uscan-config.t
new file mode 100644
index 0000000..5209924
--- /dev/null
+++ b/test/t/uscan-config.t
@@ -0,0 +1,20 @@
+use Test::More tests => 8;
+
+BEGIN {
+ use_ok('Devscripts::Uscan::Config');
+ use_ok('Devscripts::Uscan::Output');
+}
+
+@Devscripts::Config::config_files = ('t/config1');
+@ARGV = ( '--download-version', '1.0', '-dd', '--no-verbose' );
+
+ok(
+ $conf = Devscripts::Uscan::Config->new->parse,
+ 'USCAN_SYMLINK=rename + --download-version'
+);
+
+ok($conf->symlink eq 'rename', ' symlink=rename');
+ok($conf->download_version eq '1.0',' download_version=1.0');
+ok($conf->user_agent =~ /^Debian uscan/, qq' user agent starts with "Debian uscan" ($conf->{user_agent})');
+ok($conf->download == 2, 'Force download');
+ok($verbose == 0, 'Verbose is disabled');
diff --git a/test/test_annotate-output b/test/test_annotate-output
new file mode 100755
index 0000000..ca367be
--- /dev/null
+++ b/test/test_annotate-output
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Copyright (C) 2012, James McCoy <jamessan@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -u
+
+if test "${1:-}" = --installed; then
+ COMMAND=annotate-output
+ shift
+else
+ COMMAND="../scripts/annotate-output.sh"
+fi
+
+WORKDIR="$(readlink -f "${0%/*}")"
+
+testSwallowedNewline() {
+ expected="% O: foo% I: Finished with exitcode 0"
+ actual="$($COMMAND +%% echo -n foo | grep O:)"
+ assertEquals 'incomplete line found' "${expected}" "${actual}"
+}
+
+testBackslashes() {
+ expected='% O: \f\o\o'
+ actual="$($COMMAND +%% printf '%s\n' '\f\o\o' | grep O:)"
+ assertEquals 'backslashes echoed' "${expected}" "${actual}"
+}
+
+testLeadingWhitespace() {
+ expected='% O: foo'
+ actual="$($COMMAND +%% printf '%s\n' ' foo' | grep O:)"
+ assertEquals 'leading whitespace preserved' "${expected}" "${actual}"
+}
+
+. shunit2
diff --git a/test/test_checkbashisms b/test/test_checkbashisms
new file mode 100755
index 0000000..38d4c4a
--- /dev/null
+++ b/test/test_checkbashisms
@@ -0,0 +1,221 @@
+#!/bin/sh
+
+# Copyright (C) 2012, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+set -u
+
+if test "${1:-}" = --installed; then
+ COMMAND=checkbashisms
+ shift
+else
+ # shellcheck disable=SC2034
+ COMMAND="../scripts/checkbashisms.pl"
+fi
+
+WORKDIR="$(readlink -f "${0%/*}")"
+
+. "${0%/*}/shunit2-helper-functions.sh"
+
+clean() {
+ cd "$WORKDIR"
+ runCommand "$1" "" "" 0
+}
+
+found() {
+ cd "$WORKDIR"
+ runCommand "$1" "" "$2" 1
+}
+
+test_531327() {
+ clean "bashisms/531327.sh"
+}
+
+test_535368() {
+ clean "-f bashisms/535368.mk"
+}
+
+test_808271() {
+ found "bashisms/808271.sh" "$(cat bashisms/808271.sh.out)"
+}
+
+test_arith() {
+ found "bashisms/arith.sh" "$(cat bashisms/arith.sh.out)"
+}
+
+test_array_expansion() {
+ found "bashisms/array-expansion.sh" "$(cat bashisms/array-expansion.sh.out)"
+}
+
+test_ash_setvar() {
+ found "bashisms/ash-setvar.sh" "$(cat bashisms/ash-setvar.sh.out)"
+}
+
+test_basic() {
+ found "-f bashisms/basic.mk" "$(cat bashisms/basic.mk.out)"
+}
+
+test_basic_bash() {
+ clean "-f bashisms/basic-bash.mk"
+}
+
+test_brace_expansion() {
+ found "-f bashisms/brace-expansion.sh" "$(cat bashisms/brace-expansion.sh.out)"
+}
+
+test_basic_bash_override() {
+ clean "-f bashisms/basic-bash-override.mk"
+}
+
+test_case_modification() {
+ found "-f bashisms/case-modification.sh" "$(cat bashisms/case-modification.sh.out)"
+}
+
+test_comments_in_quoted_strings1() {
+ clean "bashisms/comments-in-quoted-strings1.sh"
+}
+
+test_comments_in_quoted_strings2() {
+ clean "bashisms/comments-in-quoted-strings2.sh"
+}
+
+test_command() {
+ found "bashisms/command.sh" "$(cat bashisms/command.sh.out)"
+}
+
+test_comments_parsing_fns() {
+ found "bashisms/comments-parsing-fns.sh" "$(cat bashisms/comments-parsing-fns.sh.out)"
+}
+
+test_coproc() {
+ found "bashisms/coproc.sh" "$(cat bashisms/coproc.sh.out)"
+}
+
+test_dynamic_length() {
+ found "bashisms/dynamic-length.sh" "$(cat bashisms/dynamic-length.sh.out)"
+}
+
+test_exit_code() {
+ found "bashisms/exit-code.sh" "$(cat bashisms/exit-code.sh.out)"
+}
+
+test_fail2ban() {
+ clean "bashisms/fail2ban.sh"
+}
+
+test_fps() {
+ found "bashisms/fps.sh" "$(cat bashisms/fps.sh.out)"
+}
+
+test_functions() {
+ found "bashisms/functions.sh" "$(cat bashisms/functions.sh.out)"
+}
+
+test_gettext() {
+ found "bashisms/gettext.sh" "$(cat bashisms/gettext.sh.out)"
+}
+
+test_glob_ignore() {
+ found "bashisms/glob-ignore.sh" "$(cat bashisms/glob-ignore.sh.out)"
+}
+
+test_hash() {
+ found "bashisms/hash.sh" "$(cat bashisms/hash.sh.out)"
+}
+
+test_heredocs() {
+ found "bashisms/heredocs.sh" "$(cat bashisms/heredocs.sh.out)"
+}
+
+test_heredoc_with_dash() {
+ clean "bashisms/heredoc-with-dash.sh"
+}
+
+test_heredoc_with_others() {
+ clean "bashisms/heredoc-with-others.sh"
+}
+
+test_jobs() {
+ found "bashisms/jobs.sh" "$(cat bashisms/jobs.sh.out)"
+}
+
+test_line_continuation() {
+ found "bashisms/line-continuation.sh" "$(cat bashisms/line-continuation.sh.out)"
+}
+
+test_negations() {
+ found "bashisms/negations.sh" "$(cat bashisms/negations.sh.out)"
+}
+
+test_other_vars() {
+ found "bashisms/other-vars.sh" "$(cat bashisms/other-vars.sh.out)"
+}
+
+test_printf() {
+ found "bashisms/printf.sh" "$(cat bashisms/printf.sh.out)"
+}
+
+test_quoted_strings() {
+ found "bashisms/quoted-strings.sh" "$(cat bashisms/quoted-strings.sh.out)"
+}
+
+test_return() {
+ found "bashisms/return.sh" "$(cat bashisms/return.sh.out)"
+}
+
+test_shell_vars() {
+ clean "-f bashisms/shell-vars.mk"
+}
+
+test_source() {
+ found "bashisms/source" "$(cat bashisms/source.out)"
+}
+
+test_special_case() {
+ found "bashisms/special-case.sh" "$(cat bashisms/special-case.sh.out)"
+}
+
+test_special_expansions() {
+ found "bashisms/special-expansions.sh" "$(cat bashisms/special-expansions.sh.out)"
+}
+
+test_subshell_no_arith() {
+ clean "bashisms/subshell-no-arith.sh"
+}
+
+test_tilde_expansion() {
+ found "bashisms/tilde-expansion.sh" "$(cat bashisms/tilde-expansion.sh.out)"
+}
+
+test_traps() {
+ found "bashisms/traps.sh" "$(cat bashisms/traps.sh.out)"
+}
+
+test_underscore_var() {
+ found "bashisms/underscore-var.sh" "$(cat bashisms/underscore-var.sh.out)"
+}
+
+test_unknown_fns() {
+ found "bashisms/unknown-fns.sh" "$(cat bashisms/unknown-fns.sh.out)"
+}
+
+test_unterminated_string() {
+ clean "bashisms/unterminated-string.sh"
+}
+
+test_unterminated_string2() {
+ clean "bashisms/unterminated-string2.sh"
+}
+
+. shunit2
diff --git a/test/test_dd-list b/test/test_dd-list
new file mode 100755
index 0000000..5d741d2
--- /dev/null
+++ b/test/test_dd-list
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Copyright (C) 2012, James McCoy <jamessan@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -u
+
+WORKDIR="$(readlink -f "${0%/*}")"
+
+if test "${1:-}" = --installed; then
+ COMMAND=dd-list
+ shift
+else
+ COMMAND="$WORKDIR/../scripts/dd-list.pl"
+fi
+
+testBinariesFromSameSource() {
+ $COMMAND -s ${WORKDIR}/dd-list/sources vim-gtk vim-nox 2>&1 >/dev/null
+ rc=$?
+ assertEquals 'packages found' 0 $rc
+}
+
+testExtraSourceOnlyIgnored() {
+ $COMMAND -s ${WORKDIR}/dd-list/sources bzip2 >$SHUNIT_TMPDIR/extra-source.out
+
+ assertFalse 'Jorge listed as uploader' "grep -q Jorge $SHUNIT_TMPDIR/extra-source.out"
+}
+
+testUseOnlyLatestVersion() {
+ $COMMAND -s ${WORKDIR}/dd-list/sources subversion >$SHUNIT_TMPDIR/latest-version.out
+
+ assertFalse 'Troy Heber listed as uploader' "grep -q Troy $SHUNIT_TMPDIR/latest-version.out"
+}
+
+. shunit2
diff --git a/test/test_debchange b/test/test_debchange
new file mode 100755
index 0000000..f4bca26
--- /dev/null
+++ b/test/test_debchange
@@ -0,0 +1,251 @@
+#!/bin/bash
+
+# Copyright (C) 2012, Benjamin Drung <bdrung@debian.org>
+# © 2017 Mattia Rizzolo <mattia@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+set -u
+
+if test "${1:-}" = --installed; then
+ COMMAND="dch --no-conf"
+ shift
+else
+ COMMAND="perl -I ${0%/*}/../lib ${0%/*}/../scripts/debchange.pl --no-conf"
+fi
+
+. "${0%/*}/shunit2-helper-functions.sh"
+
+setUp() {
+ CHANGELOG="${SHUNIT_TMPDIR}/changelog"
+ DEBFULLNAME="Raphaël Hertzog"
+ DEBEMAIL="hertzog@debian.org"
+ export DEBFULLNAME DEBEMAIL
+}
+
+tearDown() {
+ unset CHANGELOG DEBFULLNAME DEBEMAIL
+}
+
+runCommand2() {
+ local param="$1"
+ local exp_stdout="$2"
+ local exp_stderr="$3"
+ local exp_retval=$4
+ local stdoutF="${SHUNIT_TMPDIR}/stdout"
+ local stderrF="${SHUNIT_TMPDIR}/stderr"
+ eval "${COMMAND} $param" > ${stdoutF} 2> ${stderrF}
+ # Strip distribution data outdated warnings (caused by outdate distro-info-data).
+ cat $stderrF | \
+ grep -v "^Distribution data outdated. Please check for an update for distro-info-data. See /usr/share/doc/distro-info-data/README.Debian for details." | \
+ grep -v '^debchange[^ ]* warning: Unable to determine the current Ubuntu development release. Using UNRELEASED instead.$' > ${stderrF}.tmp
+ mv ${stderrF}.tmp ${stderrF}
+ retval=$?
+ assertEquals "standard output of ${COMMAND} $param\n" "$exp_stdout" "$(cat ${stdoutF})"
+ assertEquals "error output of ${COMMAND} $param\n" "$exp_stderr" "$(cat ${stderrF})"
+ assertEquals "return value of ${COMMAND} $param\n" $exp_retval $retval
+}
+
+success() {
+ runCommand2 "-c \"$CHANGELOG\" $1" "" "" 0
+}
+
+checkUbuntuDevelAvailable() {
+ if ubuntu-distro-info --devel 2>/dev/null >&2; then
+ # distro-info-data knows of the current devel release
+ true
+ else
+ # distro-info-data doesn't know of the current devel release
+ false
+ fi
+}
+
+checkVersion() {
+ local start_param="$1"
+ local param="$2"
+ local start_version="$3"
+ local expected_version="$4"
+ rm -f "$CHANGELOG"
+ success "--create $start_param --package test-package -v $start_version \"Devscripts Test Suite.\""
+ success "$param \"Version test.\""
+ local version=$(dpkg-parsechangelog -l"$CHANGELOG" -SVersion)
+ assertEquals "\"dch $param\" from version $start_version" "$expected_version" "$version"
+}
+
+checkDebianDistribution() {
+ checkVersion "--vendor Debian -D unstable" "--vendor Debian -i -D $1" "1.0-1" "1.0-2"
+}
+
+checkDebianVersion() {
+ checkVersion "--vendor Debian -D unstable" "--vendor Debian $1" "$2" "$3"
+}
+
+checkUbuntuVersion() {
+ checkVersion "--vendor Debian -D unstable" "--vendor Ubuntu $1" "$2" "$3"
+}
+
+testDebianDistributions() {
+ checkDebianDistribution "trixie"
+ checkDebianDistribution "trixie-security"
+ checkDebianDistribution "bookworm"
+ checkDebianDistribution "bookworm-proposed-updates"
+ checkDebianDistribution "bookworm-security"
+ checkDebianDistribution "bullseye"
+ checkDebianDistribution "bullseye-security"
+ checkDebianDistribution "buster"
+ checkDebianDistribution "buster-security"
+ checkDebianDistribution "experimental"
+ checkDebianDistribution "oldstable"
+ checkDebianDistribution "oldstable-proposed-updates"
+ checkDebianDistribution "oldoldstable"
+ checkDebianDistribution "oldoldstable-proposed-updates"
+ checkDebianDistribution "proposed-updates"
+ checkDebianDistribution "stable"
+ checkDebianDistribution "stable-proposed-updates"
+ checkDebianDistribution "testing"
+ checkDebianDistribution "testing-proposed-updates"
+ checkDebianDistribution "UNRELEASED"
+}
+
+testDebianIncrement() {
+ checkDebianVersion "-i" "1.0-1" "1.0-2"
+ checkDebianVersion "-i" "12" "13"
+}
+
+testUbuntuIncrement() {
+ if ! checkUbuntuDevelAvailable; then
+ echo "No known Ubuntu devel release known, skipping related tests"
+ startSkipping
+ fi
+ checkUbuntuVersion "-i" "12" "12ubuntu1"
+ checkUbuntuVersion "-i" "3.4" "3.4ubuntu1"
+ checkUbuntuVersion "-i" "3.4.5" "3.4.5ubuntu1"
+ checkUbuntuVersion "-i" "5.6-7" "5.6-7ubuntu1"
+ checkUbuntuVersion "-i" "5.6-7.1" "5.6-7.1ubuntu1"
+ checkUbuntuVersion "-i" "5.6-7.1.8" "5.6-7.1.8ubuntu1"
+ checkUbuntuVersion "-i" "2.13-14build5" "2.13-14ubuntu1"
+ checkUbuntuVersion "-i" "0.45-2ubuntu3" "0.45-2ubuntu4"
+ checkUbuntuVersion "-i" "0.45-2ubuntu3.1" "0.45-2ubuntu3.2"
+ checkUbuntuVersion "-i" "0.45-2ubuntu3.1.0" "0.45-2ubuntu3.1.1"
+}
+
+testUbuntuRebuild() {
+ if ! checkUbuntuDevelAvailable; then
+ echo "No known Ubuntu devel release known, skipping related tests"
+ startSkipping
+ fi
+ checkUbuntuVersion "-R" "3.4" "3.4build1"
+ checkUbuntuVersion "-R" "2.0-4" "2.0-4build1"
+ checkUbuntuVersion "-R" "1.42-4ubuntu5" "1.42-4ubuntu6"
+ checkUbuntuVersion "-R" "0.1-2build3" "0.1-2build4"
+}
+
+verifyMaintainer() {
+ local maintainer="$(dpkg-parsechangelog -l"$CHANGELOG" -SMaintainer)"
+ assertEquals "\"$1\"" "$DEBFULLNAME <$DEBEMAIL>" "$maintainer"
+}
+
+testEncoding() {
+ rm -f "$CHANGELOG"
+ success "--create -D unstable --package test-package -v 1.0-1 \"First upload\""
+ verifyMaintainer "dch --create"
+
+ success "-a \"Some change\""
+ verifyMaintainer "dch -a"
+
+ success "-i \"Second upload\""
+ verifyMaintainer "dch -i"
+
+ success "-e \"Another change\""
+ verifyMaintainer "dch -e"
+
+ success "-n NMU"
+ verifyMaintainer "dch -n"
+
+ success "-v 1.1-1 \"New upstream\""
+ verifyMaintainer "dch -v"
+
+ success "--bin-nmu \"Rebuild against libfoo\""
+ verifyMaintainer "dch --bin-nmu"
+
+ success "-q \"QA upload\""
+ verifyMaintainer "dch -q"
+
+ success "-s \"Security upload\""
+ verifyMaintainer "dch -s"
+
+ success "-s \"LTS Security upload\""
+ verifyMaintainer "dch --lts"
+
+ success "--bpo \"Backports upload\""
+ verifyMaintainer "dch --bpo"
+
+ success "--stable \"Stable upload\""
+ verifyMaintainer "dch --stable"
+}
+
+verifyEntryLines() {
+ success "--vendor Debian $1"
+ local changes="$(dpkg-parsechangelog -l"$CHANGELOG" -SChanges | grep -F '*')"
+ assertEquals "\"$changes\"" 1 "$(echo "$changes" | wc -l)"
+}
+
+# Any options which automatically add their own entry to the changelog should
+# elide an empty entry if the user passes an empty string as the entry.
+testEmptyMessage() {
+ rm -f "$CHANGELOG"
+ success "--create -D unstable --package test-package -v 1.0-1 'First upload'"
+
+ verifyEntryLines "--nmu ''"
+
+ verifyEntryLines "--bin-nmu ''"
+
+ verifyEntryLines "--qa ''"
+
+ verifyEntryLines "--security ''"
+
+ verifyEntryLines "--bpo ''"
+
+ verifyEntryLines "--team ''"
+}
+
+verifyGuessedDistribution() {
+ # $1 → initial suite
+ # $2 → action
+ # $3 → expected suite after the action
+ rm -f "$CHANGELOG"
+ vdeb="--vendor Debian"
+ success "$vdeb --create -D $1 --package test-package -v 1.0-1 'First upload'"
+ success "$vdeb $2 'Second Upload'"
+ success "$vdeb -r ''"
+ local dist="$(dpkg-parsechangelog -l"$CHANGELOG" -SDistribution)"
+ assertEquals "$3" "$dist"
+}
+
+testGuessedDistribution() {
+ verifyGuessedDistribution unstable -i unstable
+ verifyGuessedDistribution experimental -i experimental
+ verifyGuessedDistribution bookworm-backports -i bookworm-backports
+ verifyGuessedDistribution trixie -i trixie
+ verifyGuessedDistribution unstable --bpo bookworm-backports
+ verifyGuessedDistribution unstable --stable bookworm
+}
+
+testSpecialCharacterMaintainer() {
+ rm -f "$CHANGELOG"
+ export DEBFULLNAME='\k'
+ success "--create -D unstable --package test-package -v 1.0-1 \"First upload\""
+ success "-a \"Some change\""
+}
+
+. shunit2
diff --git a/test/test_debdiff b/test/test_debdiff
new file mode 100755
index 0000000..8043574
--- /dev/null
+++ b/test/test_debdiff
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# Copyright (C) 2013, James McCoy <jamessan@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -u
+
+if test "${1:-}" = --installed; then
+ COMMAND="debdiff --no-conf"
+ shift
+else
+ COMMAND="perl -I ${0%/*}/../lib ${0%/*}/../scripts/debdiff.pl --no-conf"
+fi
+
+WORKDIR="$(readlink -f "${0%/*}")"
+
+test() {
+ $COMMAND ${WORKDIR}/debdiff/devscripts_2.13.0_any.deb ${WORKDIR}/debdiff/devscripts_2.13.1_any.deb >/dev/null 2>/dev/null
+ rc=$?
+ assertEquals 'difference found, no errors' 1 $rc
+}
+
+. shunit2
diff --git a/test/test_debi b/test/test_debi
new file mode 100755
index 0000000..f3206f5
--- /dev/null
+++ b/test/test_debi
@@ -0,0 +1,285 @@
+#!/usr/bin/perl
+
+# Copyright 2019 Simon McVittie
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+=head1 NAME
+
+test_debi - unit test for debi
+
+=head1 WARNING
+
+This test requires root privileges, and installs and removes packages.
+Please run it in an expendable environment, such as via
+one of the B<autopkgtest-virt-*> autopkgtest backends.
+
+=head1 DESCRIPTION
+
+This test verifies that debi's B<--with-depends> and B<--upgrade> interact
+as expected.
+
+=cut
+
+use autodie;
+use strict;
+use warnings;
+
+use Cwd qw(getcwd);
+use Digest::MD5;
+use Digest::SHA;
+use File::Temp qw(tempdir);
+use IPC::Run qw(run);
+use Test::More;
+
+use Dpkg::Control;
+
+my $srcdir = getcwd;
+my $top_srcdir = getcwd . '/..';
+my @debi = ("$top_srcdir/scripts/debi.pl", '--no-conf');
+my $tmp;
+
+if (defined $ARGV[0] && $ARGV[0] eq '--installed') {
+ $debi[0] = 'debi';
+}
+else {
+ $ENV{PATH} = "$top_srcdir/scripts:$ENV{PATH}";
+}
+
+sub verbose_run {
+ my $argv = shift;
+ diag("Running: @{$argv}");
+ my $ret = run($argv, @_);
+ if ($ret) {
+ diag("=> success");
+ } else {
+ diag("=> exit status $?");
+ }
+ return $ret;
+}
+
+sub capture {
+ my $output;
+ my $argv = shift;
+ ok(verbose_run($argv, '>', \$output), "@{$argv}");
+ chomp $output;
+ return $output;
+}
+
+sub make_deb {
+ my ($name, $version, $depends) = @_;
+ mkdir "$tmp/deb" unless -d "$tmp/deb";
+ mkdir "$tmp/deb/DEBIAN" unless -d "$tmp/deb/DEBIAN";
+ open my $fh, '>', "$tmp/deb/DEBIAN/control";
+ print {$fh} "Package: devscripts-test-$name\n";
+ print {$fh} "Section: misc\n";
+ print {$fh} "Priority: optional\n";
+ print {$fh} "Maintainer: nobody\n";
+ print {$fh} "Version: $version\n";
+ print {$fh} "Architecture: all\n";
+ print {$fh} "Depends: $depends\n";
+ print {$fh} "Description: a package\n";
+ close $fh;
+
+ my $deb = "$tmp/devscripts-test-${name}_${version}_all.deb";
+ if (!run(['dpkg-deb', '-b', "$tmp/deb", $deb])) {
+ BAIL_OUT("Failed to build $name package from $tmp/deb");
+ }
+}
+
+sub make_changes {
+ my @packages = @_;
+ my $changes = "$tmp/foo.changes";
+ my $ctrl = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+ $ctrl->{Format} = '1.8';
+ $ctrl->{Source} = 'devscripts-test';
+ $ctrl->{Files} = "\n";
+ $ctrl->{'Checksums-Sha256'} = "\n";
+
+ foreach my $name (@packages) {
+ my $md5 = Digest::MD5->new;
+ my $sha256 = Digest::SHA->new(256);
+ open my $fh, '<', "$tmp/devscripts-test-${name}_1_all.deb";
+ binmode $fh;
+ $md5->addfile($fh);
+ seek $fh, 0, 0;
+ $sha256->addfile(*$fh);
+ close $fh;
+ my $hash = $md5->hexdigest;
+ my @stat = stat "$tmp/devscripts-test-${name}_1_all.deb";
+ my $size = $stat[7];
+
+ $ctrl->{Files}
+ .= "$hash $size misc optional devscripts-test-${name}_1_all.deb\n";
+ $hash = $sha256->hexdigest;
+ $ctrl->{'Checksums-Sha256'}
+ .= "$hash $size devscripts-test-${name}_1_all.deb\n";
+ }
+ diag $ctrl;
+ $ctrl->save($changes);
+}
+
+sub purge_packages {
+ ok(
+ verbose_run([
+ 'dpkg',
+ '--purge',
+ 'devscripts-test-already-installed',
+ 'devscripts-test-dependency',
+ 'devscripts-test-gains-dependency',
+ 'devscripts-test-gains-local-dependency',
+ 'devscripts-test-not-installed',
+ 'hello',
+ ]));
+}
+
+sub version_of {
+ my $output;
+ my $ignored;
+ run(['dpkg-query', '-W', '-f', '${Version}', shift],
+ '>', \$output, '2>', \$ignored);
+ chomp $output;
+ return $output;
+}
+
+sub status_of {
+ my $output;
+ my $ignored;
+ run(['dpkg-query', '-W', '-f', '${Status}', shift],
+ '>', \$output, '2>', \$ignored);
+ chomp $output;
+ return $output;
+}
+
+plan skip_all => 'not root' unless $< == 0 && $> == 0;
+
+$tmp = tempdir(CLEANUP => 1);
+open my $fh, '>', "$tmp/yes.conf";
+print {$fh} qq{Apt::Get::Assume-Yes "true";\n};
+print {$fh} qq{Apt::Get::allow-downgrades "true";\n};
+close $fh;
+$ENV{APT_CONFIG} = "$tmp/yes.conf";
+
+make_deb('already-installed', '0', 'base-files');
+make_deb('already-installed', '1', 'base-files');
+make_deb('already-installed', '2', 'base-files');
+make_deb('not-installed', '1', 'base-files');
+make_deb('gains-local-dependency', '0', 'base-files');
+make_deb('gains-local-dependency', '1', 'devscripts-test-dependency');
+make_deb('dependency', '1', 'base-files');
+make_deb('gains-dependency', '0', 'base-files');
+make_deb('gains-dependency', '1', 'hello');
+
+diag('debi foo.changes will upgrade existing packages and install new ones');
+purge_packages();
+ok(
+ verbose_run(
+ ['dpkg', '-i', "$tmp/devscripts-test-already-installed_0_all.deb",]));
+make_changes(qw(already-installed not-installed));
+ok(verbose_run([@debi, "$tmp/foo.changes",]), 'plain debi succeeds');
+is(version_of('devscripts-test-already-installed'),
+ '1', 'already installed package was upgraded');
+is(version_of('devscripts-test-not-installed'),
+ '1', 'not-installed package was installed (regressed in #932640)');
+
+diag('debi foo.changes will also downgrade existing packages');
+purge_packages();
+ok(
+ verbose_run(
+ ['dpkg', '-i', "$tmp/devscripts-test-already-installed_2_all.deb",]));
+make_changes(qw(already-installed));
+ok(verbose_run([@debi, "$tmp/foo.changes",]), 'plain debi succeeds');
+is(version_of('devscripts-test-already-installed'),
+ '1', 'already installed package was downgraded');
+
+diag('debi --upgrade will upgrade/downgrade existing packages, only');
+purge_packages();
+ok(
+ verbose_run(
+ ['dpkg', '-i', "$tmp/devscripts-test-already-installed_2_all.deb",]));
+make_changes(qw(already-installed not-installed));
+ok(verbose_run([@debi, '--upgrade', "$tmp/foo.changes",]),
+ 'debi --upgrade succeeds');
+is(version_of('devscripts-test-already-installed'),
+ '1', 'already installed package was downgraded');
+is(version_of('devscripts-test-not-installed'),
+ '', 'not-installed package was not installed');
+
+diag('it is OK if debi --upgrade does nothing');
+purge_packages();
+make_changes(qw(not-installed));
+ok(verbose_run([@debi, '--upgrade', "$tmp/foo.changes",]),
+ 'debi --upgrade succeeds');
+is(version_of('devscripts-test-not-installed'),
+ '', 'not-installed package was not installed');
+
+diag('debi without --with-depends does not try to satisfy dependencies');
+purge_packages();
+ok(
+ verbose_run(
+ ['dpkg', '-i', "$tmp/devscripts-test-gains-dependency_0_all.deb",]));
+make_changes(qw(gains-dependency));
+ok(!verbose_run([@debi, "$tmp/foo.changes",]),
+ 'debi without --with-depends does not install dependency');
+# It's OK for it to either be unpacked but fail to configure, or be
+# left at version 0.
+isnt(
+ version_of('devscripts-test-gains-dependency') . "::"
+ . status_of('devscripts-test-gains-dependency'),
+ '1::install ok installed',
+ 'package with a dependency was not installed'
+);
+is(version_of('hello'), '', 'third party dependency was not installed');
+
+diag('debi --with-depends does satisfy dependencies');
+purge_packages();
+make_changes(qw(gains-dependency));
+ok(verbose_run([@debi, '--with-depends', "$tmp/foo.changes",]),
+ 'debi --with-depends succeeds');
+is(version_of('devscripts-test-gains-dependency'),
+ '1', 'package with a dependency was installed');
+isnt(version_of('hello'), '', 'third party dependency was installed');
+
+diag('debi --upgrade --with-depends does satisfy new dependencies');
+purge_packages();
+ok(
+ verbose_run(
+ ['dpkg', '-i', "$tmp/devscripts-test-gains-dependency_0_all.deb",]));
+make_changes(qw(gains-dependency not-installed));
+ok(verbose_run([@debi, '--with-depends', '--upgrade', "$tmp/foo.changes",]),
+ 'debi --with-depends --upgrade succeeds');
+is(version_of('devscripts-test-gains-dependency'),
+ '1', 'package with a dependency was installed');
+isnt(version_of('hello'), '', 'third party dependency was installed');
+is(version_of('devscripts-test-not-installed'),
+ '', 'not-installed package was not installed (#932963)');
+
+purge_packages();
+verbose_run(
+ ['dpkg', '-i', "$tmp/devscripts-test-gains-local-dependency_0_all.deb",]);
+make_changes(qw(dependency gains-local-dependency));
+ok(
+ verbose_run([@debi, '--upgrade', '--with-depends', "$tmp/foo.changes",]),
+ 'corner case from #932963: debi --upgrade --with-depends can cope with '
+ . 'a new dependency on a binary from the same source'
+);
+is(version_of('devscripts-test-gains-local-dependency'),
+ '1', 'the package we wanted to upgrade is upgraded');
+is(version_of('devscripts-test-dependency'),
+ '1',
+ 'the new dependency of the package we wanted to upgrade is installed');
+
+purge_packages();
+done_testing;
diff --git a/test/test_debrepro b/test/test_debrepro
new file mode 100755
index 0000000..077be1e
--- /dev/null
+++ b/test/test_debrepro
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+# Copyright (C) 2018, Antonio Terceiro <terceiro@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -u
+
+DEB_HOST_OS="$(dpkg-architecture -qDEB_HOST_ARCH_OS)"
+if [ "$DEB_HOST_OS" = "kfreebsd" ]; then
+ # kbsd has a non-working semaphore, that is needed here.
+ echo "This test is not supported on $(dpkg-architecture -qDEB_HOST_ARCH), skipping"
+ exit 0
+fi
+
+if test "${1:-}" = --installed; then
+ debrepro="debrepro --skip filesystem-ordering"
+ shift
+else
+ debrepro="${0%/*}/../scripts/debrepro.sh --skip filesystem-ordering"
+fi
+
+samples="${0%/*}/debrepro"
+
+. "${0%/*}/test_helper.sh"
+
+test_reproducible() {
+ assertPasses $debrepro $samples/reproducible
+}
+
+test_unreproducible() {
+ assertFails $debrepro $samples/unreproducible
+}
+
+. shunit2
diff --git a/test/test_debsign b/test/test_debsign
new file mode 100755
index 0000000..9c7ccf5
--- /dev/null
+++ b/test/test_debsign
@@ -0,0 +1,114 @@
+#!/bin/sh
+
+# Copyright (C) 2018, Chris Lamb <lamby@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -u
+
+WORKDIR="$(readlink -f "${0%/*}")"
+
+if test "${1:-}" = --installed; then
+ COMMAND="debsign --no-conf"
+ shift
+else
+ COMMAND="$WORKDIR/../scripts/debsign.sh --no-conf"
+fi
+
+GPG=gpg
+GPGHOME=$(mktemp -d -p /tmp gpg.XXXXX)
+if ! command -v $GPG >/dev/null 2>&1; then
+ echo "$GPG missing"
+ GPG=gpg2
+ if ! command -v $GPG >/dev/null 2>&1; then
+ echo "$GPG missing"
+ exit 1
+ fi
+fi
+
+oneTimeSetUp () {
+ $GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --output $GPGHOME/secring.gpg --dearmor $WORKDIR/debsign/private_key.asc
+
+ $GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --output $GPGHOME/pubring.gpg --dearmor $WORKDIR/debsign/public_key.asc
+
+ export GNUPGHOME=$GPGHOME
+}
+
+oneTimeTearDown () {
+ gpgconf --homedir "$GPGHOME" --verbose --kill gpg-agent
+ rm -rf "$GPGHOME"
+}
+
+setUp() {
+ TEMPDIR=$(mktemp -d -p /tmp debsign.XXXXX)
+ cp $WORKDIR/debsign/* $TEMPDIR
+ CHANGES=$(echo $TEMPDIR/*changes)
+}
+
+tearDown() {
+ rm -rf $TEMPDIR
+}
+
+assertSigned() {
+ expected=$1
+ shift
+ $COMMAND "$@" $CHANGES >$TEMPDIR/stdout 2>$TEMPDIR/stderr
+ rc=$?
+ assertEquals 'error code' $expected $rc
+}
+
+testEmailKeyID () {
+ assertSigned 0 -k none@debian.org
+}
+
+testShortKeyID () {
+ assertSigned 1 -k 72543FAF
+ assertTrue 'error not seen' "grep -q 'short key ID' $TEMPDIR/stderr"
+}
+
+testPrefixedShortKeyID () {
+ assertSigned 1 -k 0x72543FAF
+ assertTrue 'error not seen' "grep -q 'short key ID' $TEMPDIR/stderr"
+}
+
+testLongKeyID() {
+ assertSigned 0 -k C77E2D6872543FAF
+ assertTrue 'not signed' "grep -q 'BEGIN PGP SIGNATURE' $CHANGES"
+}
+
+testPrefixedLongKeyID() {
+ assertSigned 0 -k 0xC77E2D6872543FAF
+ assertTrue 'not signed' "grep -q 'BEGIN PGP SIGNATURE' $CHANGES"
+}
+
+testFingerprintKeyID () {
+ assertSigned 0 -k CF218F0E7EABF584B7E20402C77E2D6872543FAF
+}
+
+testUnknownKeyID () {
+ assertSigned 2 -k AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ assertTrue 'warning not seen' "grep -q 'No secret key' $TEMPDIR/stderr"
+}
+
+testNameKeyID () {
+ assertSigned 0 -k 'uscan test key (no secret)'
+}
+
+testFullNameAsKeyID () {
+ assertSigned 0 -k 'uscan test key (no secret) <none@debian.org>'
+}
+
+. shunit2
diff --git a/test/test_helper.sh b/test/test_helper.sh
new file mode 100644
index 0000000..579780c
--- /dev/null
+++ b/test/test_helper.sh
@@ -0,0 +1,26 @@
+setUp() {
+ tmpdir=$(mktemp -d)
+ log="$tmpdir/log"
+}
+
+tearDown() {
+ rm -rf "$tmpdir"
+}
+
+assertPasses() {
+ local rc=0
+ "$@" > "$log" 2>&1 || rc=$?
+ if [ "$rc" -ne 0 ]; then
+ cat "$log"
+ fail "command failed: «$*» (expected pass)"
+ fi
+}
+
+assertFails() {
+ local rc=0
+ "$@" > "$log" 2>&1 || rc=$?
+ if [ "$rc" -eq 0 ]; then
+ cat "$log"
+ fail "command passed: «$*» (expected fail)"
+ fi
+}
diff --git a/test/test_mass_bug b/test/test_mass_bug
new file mode 100755
index 0000000..b75386c
--- /dev/null
+++ b/test/test_mass_bug
@@ -0,0 +1,161 @@
+#!/usr/bin/perl
+
+# Copyright 2020 Simon McVittie
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Cwd qw(getcwd);
+use File::Temp qw(tempdir);
+use IPC::Run qw(run);
+use Test::More;
+
+# Disable l10n: we look for specific messages
+$ENV{LC_ALL} = 'C.UTF-8';
+
+my $srcdir = getcwd;
+my $top_srcdir = getcwd . '/..';
+my $mass_bug = "$top_srcdir/scripts/mass-bug.pl";
+
+if (defined $ARGV[0] && $ARGV[0] eq '--installed') {
+ $mass_bug = 'mass-bug';
+}
+
+my $tmp = tempdir(CLEANUP => 1);
+
+sub verbose_run {
+ my $argv = shift;
+ diag("Running: @{$argv}");
+ return run($argv, @_);
+}
+
+sub capture {
+ my $output;
+ my $argv = shift;
+ ok(verbose_run($argv, '>', \$output), "@{$argv}");
+ chomp $output;
+ return $output;
+}
+
+my $stdout;
+my $stderr;
+
+diag('Help');
+$stdout = capture([
+ $mass_bug,
+ '--help',
+]);
+like($stdout, qr{Usage:});
+
+diag('Version');
+$stdout = capture([
+ $mass_bug,
+ '--version',
+]);
+like($stdout, qr{devscripts package});
+
+diag('Basic use');
+$stdout = capture([
+ $mass_bug,
+ '--no-conf',
+ '--subject=Is broken',
+ "$srcdir/mass-bug/template",
+ "$srcdir/mass-bug/one-package",
+]);
+like($stdout, qr{^Subject: test-package: Is broken$}m);
+like($stdout, qr{^Package: test-package$}m);
+like($stdout, qr{^Version: 1\.2-3$}m);
+like($stdout, qr{^test-package has a bug\. Please fix\.$}m);
+like($stdout, qr{^This long line gets word-wrapped because}m);
+unlike($stdout, qr{text/plain; format=flowed never really took off\.$}m);
+like($stdout, qr{^These short lines also get wrapped\.$}m);
+like($stdout, qr{^test-package version=1\.2-3$}m);
+like($stdout, qr{^test-package epoch=$}m);
+like($stdout, qr{^test-package upstream=1\.2$}m);
+like($stdout, qr{^test-package revision=-3$}m);
+like($stdout, qr{^test-package reassembled=1\.2-3$}m);
+like($stdout, qr{^-- $}m);
+like($stdout, qr{^This signature does not get word-wrapped because it is a signature, even though it is longer than a line ought to be\.$}m);
+
+diag('Subject is mandatory');
+ok(! verbose_run([
+ $mass_bug,
+ '--no-conf',
+ "$srcdir/mass-bug/template",
+ "$srcdir/mass-bug/one-package",
+], '>', \$stdout, '2>', \$stderr));
+isnt($?, 0);
+like($stderr, qr{You must specify a subject}m);
+is($stdout, '');
+
+diag('Various options');
+$stdout = capture([
+ $mass_bug,
+ '--no-conf',
+ '--subject=Is broken',
+ '--source',
+ '--tags=ftbfs sid',
+ '--user=me@example.com',
+ '--usertags=bad wrong',
+ '--control=block 123456 by -1',
+ '--control=block -1 by 789012',
+ '--no-wrap',
+ "$srcdir/mass-bug/template",
+ "$srcdir/mass-bug/one-package",
+]);
+like($stdout, qr{^Subject: test-package: Is broken$}m);
+like($stdout, qr{^Source: test-package$}m);
+unlike($stdout, qr{^Package: test-package$}m);
+like($stdout, qr{^test-package has a bug\. Please fix\.$}m);
+like($stdout, qr{^Tags: ftbfs sid$}m);
+like($stdout, qr{^User: me\@example\.com$}m);
+like($stdout, qr{^Usertags: bad wrong$}m);
+like($stdout, qr{^Control: block 123456 by -1$}m);
+like($stdout, qr{^Control: block -1 by 789012$}m);
+like($stdout, qr{^This long line gets word-wrapped because text/plain; format=flowed never really took off\.$}m);
+unlike($stdout, qr{^These short lines also get wrapped\.$}m);
+
+diag('Version numbers');
+$stdout = capture([
+ $mass_bug,
+ '--no-conf',
+ '--subject=Is broken',
+ "$srcdir/mass-bug/template",
+ "$srcdir/mass-bug/packages",
+]);
+like($stdout, qr{^native-package version=1\.0$}m);
+like($stdout, qr{^native-package epoch=$}m);
+like($stdout, qr{^native-package upstream=1\.0$}m);
+like($stdout, qr{^native-package revision=$}m);
+like($stdout, qr{^native-package reassembled=1\.0$}m);
+like($stdout, qr{^upstream-package version=1\.2-3$}m);
+like($stdout, qr{^upstream-package epoch=$}m);
+like($stdout, qr{^upstream-package upstream=1\.2$}m);
+like($stdout, qr{^upstream-package revision=-3$}m);
+like($stdout, qr{^upstream-package reassembled=1\.2-3$}m);
+like($stdout, qr{^epoch-native-package version=1:2\.3$}m);
+like($stdout, qr{^epoch-native-package epoch=1:$}m);
+like($stdout, qr{^epoch-native-package upstream=2\.3$}m);
+like($stdout, qr{^epoch-native-package revision=$}m);
+like($stdout, qr{^epoch-native-package reassembled=1:2\.3$}m);
+like($stdout, qr{^epoch-package version=1:2\.3-4\.5$}m);
+like($stdout, qr{^epoch-package epoch=1:$}m);
+like($stdout, qr{^epoch-package upstream=2\.3$}m);
+like($stdout, qr{^epoch-package revision=-4\.5$}m);
+like($stdout, qr{^epoch-package reassembled=1:2\.3-4\.5$}m);
+
+done_testing;
diff --git a/test/test_mergechanges b/test/test_mergechanges
new file mode 100755
index 0000000..e689cd7
--- /dev/null
+++ b/test/test_mergechanges
@@ -0,0 +1,551 @@
+#!/usr/bin/perl
+
+# Copyright 2019 Simon McVittie
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Cwd qw(getcwd);
+use Data::Dumper;
+use File::Temp qw(tempdir);
+use IPC::Run qw(run);
+use Test::More;
+
+use Dpkg::Control;
+
+my $srcdir = getcwd;
+my $top_srcdir = getcwd . '/..';
+my $mergechanges = "$top_srcdir/scripts/mergechanges.sh";
+
+if (defined $ARGV[0] && $ARGV[0] eq '--installed') {
+ $mergechanges = 'mergechanges';
+}
+
+my $tmp = tempdir(CLEANUP => 1);
+my $stdout;
+my $stderr;
+my $fh;
+my $merged;
+my $all = 'xdg-desktop-portal_1.2.0-1_all.changes';
+my $amd64 = 'xdg-desktop-portal_1.2.0-1_amd64.changes';
+my $source = 'xdg-desktop-portal_1.2.0-1_source.changes';
+my %controls;
+my @words;
+my @lines;
+my $orig;
+
+sub verbose_run {
+ my $argv = shift;
+ diag("Running: @{$argv}");
+ return run($argv, @_);
+}
+
+sub capture {
+ my $output;
+ my $argv = shift;
+ ok(verbose_run($argv, '>', \$output), "@{$argv}");
+ chomp $output;
+ return $output;
+}
+
+sub uniq {
+ my %seen;
+ my @ret;
+ foreach my $member (@_) {
+ push @ret, $member unless defined $seen{$member};
+ $seen{$member} = 1;
+ }
+ return @ret;
+}
+
+sub verbose_is_deeply {
+ diag Dumper($_[0], $_[1]);
+ is_deeply(@_);
+}
+
+foreach my $name ($all, $amd64, $source) {
+ $controls{$name} = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+ $controls{$name}->load("mergechanges/$name");
+}
+
+diag('Help');
+$stdout = capture([
+ $mergechanges,
+ '--help',
+]);
+like($stdout, qr{Usage:});
+
+diag('Version');
+$stdout = capture([
+ $mergechanges,
+ '--version',
+]);
+like($stdout, qr{devscripts package});
+
+diag('Simple merge');
+$stdout = capture([
+ $mergechanges,
+ "mergechanges/$all",
+ "mergechanges/$amd64",
+ "mergechanges/$source",
+]);
+#diag $stdout;
+unlike($stdout, qr/BEGIN PGP/);
+unlike($stdout, qr/END PGP/);
+$merged = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+open($fh, '<', \$stdout);
+$merged->parse($fh, 'stdout of mergechanges');
+close($fh);
+is($merged->{Format}, $controls{$source}->{Format});
+is($merged->{Date}, $controls{$source}->{Date});
+is($merged->{Source}, $controls{$source}->{Source});
+@words = sort split / /, $merged->{Binary};
+is_deeply(\@words, [sort qw(
+ xdg-desktop-portal
+ xdg-desktop-portal-dbgsym
+ xdg-desktop-portal-dev
+ xdg-desktop-portal-tests
+ xdg-desktop-portal-tests-dbgsym
+)]);
+@words = sort split / /, $merged->{Architecture};
+is_deeply(\@words, [sort qw(amd64 all source)]);
+is($merged->{Version}, $controls{$source}->{Version});
+is($merged->{Distribution}, $controls{$source}->{Distribution});
+is($merged->{Urgency}, $controls{$source}->{Urgency});
+is($merged->{Maintainer}, $controls{$source}->{Maintainer});
+is($merged->{'Changed-By'}, $controls{$source}->{'Changed-By'});
+isnt($merged->{Description}, undef);
+@lines = sort split /\n/, $merged->{Description};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{Description}),
+ (split /\n/, $controls{$amd64}->{Description}),
+))]);
+is($merged->{Changes}, $controls{$source}->{Changes});
+@lines = sort split /\n/, $merged->{Files};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{Files}),
+ (split /\n/, $controls{$amd64}->{Files}),
+ (split /\n/, $controls{$source}->{Files}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha1'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{'Checksums-Sha1'}),
+ (split /\n/, $controls{$amd64}->{'Checksums-Sha1'}),
+ (split /\n/, $controls{$source}->{'Checksums-Sha1'}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha256'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{'Checksums-Sha256'}),
+ (split /\n/, $controls{$amd64}->{'Checksums-Sha256'}),
+ (split /\n/, $controls{$source}->{'Checksums-Sha256'}),
+))]);
+
+diag('Source only');
+$stdout = capture([
+ $mergechanges,
+ '-S',
+ "mergechanges/$all",
+ "mergechanges/$amd64",
+ "mergechanges/$source",
+]);
+#diag $stdout;
+unlike($stdout, qr/BEGIN PGP/);
+unlike($stdout, qr/END PGP/);
+$merged = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+open($fh, '<', \$stdout);
+$merged->parse($fh, 'stdout of mergechanges');
+close($fh);
+is($merged->{Format}, $controls{$source}->{Format});
+is($merged->{Date}, $controls{$source}->{Date});
+is($merged->{Source}, $controls{$source}->{Source});
+is($merged->{Binary}, undef);
+@words = sort split / /, $merged->{Architecture};
+is_deeply(\@words, [sort qw(source)]);
+is($merged->{Version}, $controls{$source}->{Version});
+is($merged->{Distribution}, $controls{$source}->{Distribution});
+is($merged->{Urgency}, $controls{$source}->{Urgency});
+is($merged->{Maintainer}, $controls{$source}->{Maintainer});
+is($merged->{'Changed-By'}, $controls{$source}->{'Changed-By'});
+is($merged->{Description}, undef);
+is($merged->{Changes}, $controls{$source}->{Changes});
+@lines = sort split /\n/, $merged->{Files};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{Files}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha1'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{'Checksums-Sha1'}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha256'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{'Checksums-Sha256'}),
+))]);
+
+diag('Indep only');
+$stdout = capture([
+ $mergechanges,
+ '-i',
+ "mergechanges/$all",
+ "mergechanges/$amd64",
+ "mergechanges/$source",
+]);
+#diag $stdout;
+unlike($stdout, qr/BEGIN PGP/);
+unlike($stdout, qr/END PGP/);
+$merged = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+open($fh, '<', \$stdout);
+$merged->parse($fh, 'stdout of mergechanges');
+close($fh);
+is($merged->{Format}, $controls{$source}->{Format});
+is($merged->{Date}, $controls{$source}->{Date});
+is($merged->{Source}, $controls{$source}->{Source});
+is($merged->{Binary}, 'xdg-desktop-portal-dev');
+@words = sort split / /, $merged->{Architecture};
+is_deeply(\@words, [sort qw(all source)]);
+is($merged->{Version}, $controls{$source}->{Version});
+is($merged->{Distribution}, $controls{$source}->{Distribution});
+is($merged->{Urgency}, $controls{$source}->{Urgency});
+is($merged->{Maintainer}, $controls{$source}->{Maintainer});
+is($merged->{'Changed-By'}, $controls{$source}->{'Changed-By'});
+isnt($merged->{Description}, undef);
+@lines = sort split /\n/, $merged->{Description};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{Description}),
+))]);
+is($merged->{Changes}, $controls{$source}->{Changes});
+@lines = sort split /\n/, $merged->{Files};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{Files}),
+ (split /\n/, $controls{$all}->{Files}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha1'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{'Checksums-Sha1'}),
+ (split /\n/, $controls{$all}->{'Checksums-Sha1'}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha256'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{'Checksums-Sha256'}),
+ (split /\n/, $controls{$all}->{'Checksums-Sha256'}),
+))]);
+
+diag('To file');
+ok(run(['cp', "mergechanges/$source", "$tmp/source.changes"]));
+$stdout = capture([
+ $mergechanges,
+ '-f',
+ "$tmp/source.changes",
+ "mergechanges/$all",
+]);
+ok(-e "$tmp/source.changes");
+is($stdout, '');
+#system("cat", "$tmp/xdg-desktop-portal_1.2.0-1_multi.changes");
+$merged = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+$merged->load("$tmp/xdg-desktop-portal_1.2.0-1_multi.changes");
+is($merged->{Format}, $controls{$source}->{Format});
+is($merged->{Date}, $controls{$source}->{Date});
+is($merged->{Source}, $controls{$source}->{Source});
+is($merged->{Binary}, 'xdg-desktop-portal-dev');
+@words = sort split / /, $merged->{Architecture};
+is_deeply(\@words, [sort qw(all source)]);
+is($merged->{Version}, $controls{$source}->{Version});
+is($merged->{Distribution}, $controls{$source}->{Distribution});
+is($merged->{Urgency}, $controls{$source}->{Urgency});
+is($merged->{Maintainer}, $controls{$source}->{Maintainer});
+is($merged->{'Changed-By'}, $controls{$source}->{'Changed-By'});
+isnt($merged->{Description}, undef);
+@lines = sort split /\n/, $merged->{Description};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{Description}),
+))]);
+is($merged->{Changes}, $controls{$source}->{Changes});
+@lines = sort split /\n/, $merged->{Files};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{Files}),
+ (split /\n/, $controls{$all}->{Files}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha1'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{'Checksums-Sha1'}),
+ (split /\n/, $controls{$all}->{'Checksums-Sha1'}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha256'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{'Checksums-Sha256'}),
+ (split /\n/, $controls{$all}->{'Checksums-Sha256'}),
+))]);
+
+diag('Deleting');
+ok(run(['cp', "mergechanges/$source", "$tmp/source.changes"]));
+ok(run(['cp', "mergechanges/$all", "$tmp/all.changes"]));
+$stdout = capture([
+ $mergechanges,
+ '-d',
+ '-f',
+ "$tmp/source.changes",
+ "$tmp/all.changes",
+]);
+ok(! -e "$tmp/source.changes");
+ok(! -e "$tmp/all.changes");
+is($stdout, '');
+#system("cat", "$tmp/xdg-desktop-portal_1.2.0-1_multi.changes");
+$merged = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+$merged->load("$tmp/xdg-desktop-portal_1.2.0-1_multi.changes");
+is($merged->{Format}, $controls{$source}->{Format});
+is($merged->{Date}, $controls{$source}->{Date});
+is($merged->{Source}, $controls{$source}->{Source});
+is($merged->{Binary}, 'xdg-desktop-portal-dev');
+@words = sort split / /, $merged->{Architecture};
+is_deeply(\@words, [sort qw(all source)]);
+is($merged->{Version}, $controls{$source}->{Version});
+is($merged->{Distribution}, $controls{$source}->{Distribution});
+is($merged->{Urgency}, $controls{$source}->{Urgency});
+is($merged->{Maintainer}, $controls{$source}->{Maintainer});
+is($merged->{'Changed-By'}, $controls{$source}->{'Changed-By'});
+isnt($merged->{Description}, undef);
+@lines = sort split /\n/, $merged->{Description};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{Description}),
+))]);
+is($merged->{Changes}, $controls{$source}->{Changes});
+@lines = sort split /\n/, $merged->{Files};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{Files}),
+ (split /\n/, $controls{$all}->{Files}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha1'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{'Checksums-Sha1'}),
+ (split /\n/, $controls{$all}->{'Checksums-Sha1'}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha256'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$source}->{'Checksums-Sha256'}),
+ (split /\n/, $controls{$all}->{'Checksums-Sha256'}),
+))]);
+
+diag('Merge with itself');
+$stdout = capture([
+ $mergechanges,
+ '--indep',
+ "mergechanges/$all",
+ "mergechanges/$all",
+]);
+#diag $stdout;
+unlike($stdout, qr/BEGIN PGP/);
+unlike($stdout, qr/END PGP/);
+$merged = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+open($fh, '<', \$stdout);
+$merged->parse($fh, 'stdout of mergechanges');
+close($fh);
+is($merged->{Format}, $controls{$source}->{Format});
+is($merged->{Date}, $controls{$source}->{Date});
+is($merged->{Source}, $controls{$source}->{Source});
+is($merged->{Binary}, 'xdg-desktop-portal-dev');
+@words = sort split / /, $merged->{Architecture};
+is_deeply(\@words, [sort qw(all)]);
+is($merged->{Version}, $controls{$source}->{Version});
+is($merged->{Distribution}, $controls{$source}->{Distribution});
+is($merged->{Urgency}, $controls{$source}->{Urgency});
+is($merged->{Maintainer}, $controls{$source}->{Maintainer});
+is($merged->{'Changed-By'}, $controls{$source}->{'Changed-By'});
+isnt($merged->{Description}, undef);
+@lines = sort split /\n/, $merged->{Description};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{Description}),
+))]);
+is($merged->{Changes}, $controls{$source}->{Changes});
+@lines = sort split /\n/, $merged->{Files};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{Files}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha1'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{'Checksums-Sha1'}),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha256'};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{'Checksums-Sha256'}),
+))]);
+
+diag('Format 1.7 and 1.8 are compatible');
+$stdout = capture([
+ $mergechanges,
+ '--indep',
+ "mergechanges/$all",
+ "mergechanges/format-1.7.changes",
+]);
+diag $stdout;
+unlike($stdout, qr/BEGIN PGP/);
+unlike($stdout, qr/END PGP/);
+$merged = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+open($fh, '<', \$stdout);
+$merged->parse($fh, 'stdout of mergechanges');
+close($fh);
+# Formats 1.8 and 1.7 merge to 1.7
+is($merged->{Format}, '1.7');
+is($merged->{Date}, $controls{$source}->{Date});
+is($merged->{Source}, $controls{$source}->{Source});
+is($merged->{Binary}, 'xdg-desktop-portal-dev');
+@words = sort split / /, $merged->{Architecture};
+is_deeply(\@words, [sort qw(all)]);
+is($merged->{Version}, $controls{$source}->{Version});
+is($merged->{Distribution}, $controls{$source}->{Distribution});
+is($merged->{Urgency}, $controls{$source}->{Urgency});
+is($merged->{Maintainer}, $controls{$source}->{Maintainer});
+is($merged->{'Changed-By'}, $controls{$source}->{'Changed-By'});
+isnt($merged->{Description}, undef);
+@lines = sort split /\n/, $merged->{Description};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{Description}),
+))]);
+is($merged->{Changes}, $controls{$source}->{Changes});
+@lines = sort split /\n/, $merged->{Files};
+is_deeply(\@lines, [sort(uniq(
+ (split /\n/, $controls{$all}->{Files}),
+))]);
+# Format 1.7 didn't have Checksums-*
+is($merged->{'Checksums-Sha1'}, undef);
+is($merged->{'Checksums-Sha256'}, undef);
+
+diag('Only one');
+ok(! verbose_run([
+ $mergechanges,
+ "mergechanges/$source",
+], '>', \$stdout, '2>', \$stderr));
+is($stdout, '');
+like($stderr, qr{Not enough parameters});
+
+diag('ENOENT');
+ok(! verbose_run([
+ $mergechanges,
+ "mergechanges/$source",
+ "mergechanges/does-not-exist.changes",
+], '>', \$stdout, '2>', \$stderr));
+is($stdout, '');
+like($stderr, qr{ERROR: Cannot read mergechanges/does-not-exist\.changes});
+
+diag('Different description');
+ok(! verbose_run([
+ $mergechanges,
+ "mergechanges/$all",
+ "mergechanges/different-description.changes",
+], '>', \$stdout, '2>', \$stderr));
+is($stdout, '');
+like($stderr, qr{Error: Descriptions do not match});
+
+diag('Different format');
+ok(! verbose_run([
+ $mergechanges,
+ "mergechanges/$all",
+ "mergechanges/unsupported-format.changes",
+], '>', \$stdout, '2>', \$stderr));
+is($stdout, '');
+like($stderr, qr{Error: Changes files have different Format fields});
+
+diag('Different source package');
+ok(! verbose_run([
+ $mergechanges,
+ "mergechanges/$all",
+ "mergechanges/different-source.changes",
+], '>', \$stdout, '2>', \$stderr));
+is($stdout, '');
+like($stderr, qr{Error: Source packages do not match});
+
+diag('Different version');
+ok(! verbose_run([
+ $mergechanges,
+ "mergechanges/$all",
+ "mergechanges/different-version.changes",
+], '>', \$stdout, '2>', \$stderr));
+is($stdout, '');
+like($stderr, qr{ERROR: Version numbers do not match});
+
+diag('Unsupported checksums');
+ok(! verbose_run([
+ $mergechanges,
+ "mergechanges/$all",
+ "mergechanges/unsupported-checksum.changes",
+], '>', \$stdout, '2>', \$stderr));
+is($stdout, '');
+like($stderr, qr{Error: Unsupported checksum fields});
+
+diag('Unsupported format');
+ok(! verbose_run([
+ $mergechanges,
+ "mergechanges/unsupported-format.changes",
+ "mergechanges/unsupported-format.changes",
+], '>', \$stdout, '2>', \$stderr));
+is($stdout, '');
+like($stderr, qr{Error: Changes files use unknown Format});
+
+diag('Multi-line Binary');
+$stdout = capture([
+ $mergechanges,
+ '--indep',
+ 'mergechanges/linux_4.9.161-1_amd64.changes',
+ 'mergechanges/linux_4.9.161-1_amd64.changes',
+]);
+unlike($stdout, qr/BEGIN PGP/);
+unlike($stdout, qr/END PGP/);
+$merged = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+open($fh, '<', \$stdout);
+$merged->parse($fh, 'stdout of mergechanges');
+close($fh);
+$orig = Dpkg::Control->new(type => CTRL_FILE_CHANGES);
+$orig->load('mergechanges/linux_4.9.161-1_amd64.changes');
+is($merged->{Format}, $orig->{Format});
+is($merged->{Date}, $orig->{Date});
+is($merged->{Source}, $orig->{Source});
+@words = sort split / /, $merged->{Binary};
+is_deeply(\@words, [sort qw(
+ linux-doc-4.9
+ linux-headers-4.9.0-9-common
+ linux-headers-4.9.0-9-common-rt
+ linux-manual-4.9
+ linux-source-4.9
+ linux-support-4.9.0-9
+)]);
+@words = sort split / /, $merged->{Architecture};
+is_deeply(\@words, [sort qw(all source)]);
+is($merged->{Version}, $orig->{Version});
+is($merged->{Distribution}, $orig->{Distribution});
+is($merged->{Urgency}, $orig->{Urgency});
+is($merged->{Maintainer}, $orig->{Maintainer});
+is($merged->{'Changed-By'}, $orig->{'Changed-By'});
+isnt($merged->{Description}, undef);
+@lines = sort split /\n/, $merged->{Description};
+is_deeply(\@lines, [sort(uniq(
+ grep({m/^$/ || m/^(linux-doc-4.9|linux-headers-4.9.0-9-common|linux-headers-4.9.0-9-common-rt|linux-manual-4.9|linux-source-4.9|linux-support-4.9.0-9) - /} (split /\n/, $orig->{Description})),
+))]);
+is($merged->{Changes}, $orig->{Changes});
+@lines = sort split /\n/, $merged->{Files};
+is_deeply(\@lines, [sort(uniq(
+ grep({! /_amd64\./} (split /\n/, $orig->{Files})),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha1'};
+is_deeply(\@lines, [sort(uniq(
+ grep({! /_amd64\./} (split /\n/, $orig->{'Checksums-Sha1'})),
+))]);
+@lines = sort split /\n/, $merged->{'Checksums-Sha256'};
+is_deeply(\@lines, [sort(uniq(
+ grep({! /_amd64\./} (split /\n/, $orig->{'Checksums-Sha256'})),
+))]);
+
+done_testing;
+
+# vim:set sts=4 sw=4 et:
diff --git a/test/test_mk-origtargz b/test/test_mk-origtargz
new file mode 100755
index 0000000..1aa8f1e
--- /dev/null
+++ b/test/test_mk-origtargz
@@ -0,0 +1,750 @@
+#!/bin/bash
+
+# Copyright 2014, Rafael Laboissiere <rafael@laboissiere.net>
+# Copyright 2015, James McCoy <jamessan@debian.org>
+
+# 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.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+set -u
+
+# Load GPG
+TESTTYPE=MkOrigTarGz
+. ./lib_test_uscan
+
+if test "${1:-}" = --installed; then
+ MK_ORIGTARGZ="mk-origtargz"
+ shift
+else
+ top_srcdir=$(readlink -f "${0%/*}/..")
+ make -C "$top_srcdir/scripts" mk-origtargz
+ MK_ORIGTARGZ="perl -I $top_srcdir/lib $top_srcdir/scripts/mk-origtargz"
+ PATH="$top_srcdir/scripts:$PATH"
+ export PATH
+ PERL5LIB="$top_srcdir/lib"
+ export PERL5LIB
+fi
+PROGNAME="mk-origtargz"
+
+LC_ALL=C
+export LC_ALL
+
+setUp () {
+ TMPDIR=$(mktemp -d -p "$SHUNIT_TMPDIR" test_mk-origtargz.XXXX)
+}
+
+
+makeSubDir () {
+ dir=$1
+ shift
+
+ mkdir -p "$TMPDIR/foo-0.1/$dir"
+ touch "$TMPDIR/foo-0.1/$dir/a-file"
+ mkdir "$TMPDIR/foo-0.1/$dir/a-subdir"
+ touch "$TMPDIR/foo-0.1/$dir/a-subdir/a-file"
+}
+
+
+makeUpstreamFiles () {
+ mkdir -p "$TMPDIR/foo-0.1"
+ touch "$TMPDIR/foo-0.1/include-this-file"
+ touch "$TMPDIR/foo-0.1/exclude-this-file"
+ touch "$TMPDIR/foo-0.1/.include-this-hidden-file"
+ touch "$TMPDIR/foo-0.1/.exclude-this-hidden-file"
+
+ makeSubDir "include-this-dir"
+ makeSubDir "exclude-this-dir"
+ makeSubDir "exclude-dir1"
+ makeSubDir "exclude-dir2"
+ makeSubDir ".include-this-hidden-dir"
+ makeSubDir ".exclude-this-hidden-dir"
+ makeSubDir "a-dir/include-this-subdir"
+ # Expected not to be removed since exclusion is anchored to top-level
+ makeSubDir "a-dir/exclude-this-subdir"
+
+ touch "$TMPDIR/foo-0.1/; echo strange-file; #"
+
+}
+
+makeGolangLikeVendorFiles() {
+ makeSubDir "vendor"
+
+ mkdir -p "$TMPDIR/foo-0.1/vendor/includeme"
+ touch "$TMPDIR/foo-0.1/vendor/includeme/important.go"
+}
+
+makeTarBall () {
+ comp="$1"
+ mkgpg="${2:-none}"
+ makeUpstreamFiles
+ COMP="--auto-compress"
+ if [ "$comp" = "zst" ]; then
+ COMP=--zstd
+ fi
+ tar --create $COMP --file "$TMPDIR/foo-0.1.tar.$comp" --directory "$TMPDIR" foo-0.1
+ local gpgopts=(
+ chronic_sh $GPG
+ --homedir "$GPGHOME"
+ --no-options -q --batch --no-default-keyring
+ --secret-keyring "$PRIVATE_KEYRING"
+ --default-key 72544FAF
+ --detach-sign
+ )
+ case "$mkgpg" in
+ sig)
+ "${gpgopts[@]}" "$TMPDIR/foo-0.1.tar.$comp"
+ ;;
+ asc)
+ "${gpgopts[@]}" --armor "$TMPDIR/foo-0.1.tar.$comp"
+ ;;
+ none)
+ ;;
+ *)
+ fail "unknown parameter in makeTarBall()"
+ ;;
+ esac
+ rm -rf "$TMPDIR/foo-0.1"
+}
+makeSimpleTar () {
+ makeUpstreamFiles
+ tar --create --file "$TMPDIR/foo-0.1.tar" --directory "$TMPDIR" foo-0.1
+ rm -rf "$TMPDIR/foo-0.1"
+}
+makeBrokenTarBall () {
+ echo foo > foo.txt
+ tar cf - foo.txt | sed -e 's/^/foo/' | gzip > "$TMPDIR/foo-0.1.tar.gz"
+ rm -f foo.txt
+}
+
+makeZipFile () {
+ makeUpstreamFiles
+ (cd $TMPDIR >/dev/null; zip -q -r "foo-0.1.zip" foo-0.1 )
+ rm -rf "$TMPDIR/foo-0.1"
+}
+
+makeJarFile () {
+ makeUpstreamFiles
+ cat > "$TMPDIR/MANIFEST.MF" <<END
+Manifest-Version: 1.0
+Main-Class: foo.bar
+END
+ (cd $TMPDIR >/dev/null; jar cf "foo-0.1.jar" MANIFEST.MF foo-0.1 )
+ rm -rf "$TMPDIR/foo-0.1" "$TMPDIR/MANIFEST.MF"
+}
+
+makeDebianChangelog() {
+ mkdir -p $TMPDIR/foo/debian
+ cat <<END > $TMPDIR/foo/debian/changelog
+foo (0.1-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+}
+
+makeDebianOldDir() {
+ makeDebianChangelog
+}
+
+makeDebianDir() {
+ makeDebianChangelog
+ mkdir -p $TMPDIR/foo/debian/source
+ echo -n "3.0 (quilt)" > $TMPDIR/foo/debian/source/format
+}
+
+makeDebianCopyright() {
+ cat <<'END' > $TMPDIR/foo/debian/copyright
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Files-Excluded: exclude-this*
+ .exclude-this*
+ exclude-dir1
+ exclude-dir2/
+ ;?echo?strange-file;?#
+END
+
+}
+
+makeWrongDebianCopyright() {
+ cat <<'END' > $TMPDIR/foo/debian/copyright
+Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=174
+Files-Excluded: exclude-this*
+ .exclude-this*
+ exclude-dir1
+ exclude-dir2/
+ ;?echo?strange-file;?#
+END
+
+}
+
+makeUnmatchedExcludeCopyright() {
+ cat <<'END' > $TMPDIR/foo/debian/copyright
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Files-Excluded: exclude-this*
+ .exclude-this*
+ exclude-dir1
+ exclude-dir2
+ ;?echo?strange-file;?#
+ nomatch
+END
+}
+
+
+makeDuplicatePatternCopyright() {
+ cat <<'END' > $TMPDIR/foo/debian/copyright
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Files-Excluded: exclude-this*
+ .exclude-this*
+ exclude-dir1
+ exclude-dir*
+ ;?echo?strange-file;?#
+END
+}
+
+expected_stderr_after_removal="mk-origtargz warn: Files-Excluded pattern (exclude-dir2/) should not have a trailing /"
+
+expected_files_after_removal=$(LC_ALL=C sort <<END
+foo-0.1/
+foo-0.1/a-dir/
+foo-0.1/a-dir/exclude-this-subdir/
+foo-0.1/a-dir/exclude-this-subdir/a-file
+foo-0.1/a-dir/exclude-this-subdir/a-subdir/
+foo-0.1/a-dir/exclude-this-subdir/a-subdir/a-file
+foo-0.1/a-dir/include-this-subdir/
+foo-0.1/a-dir/include-this-subdir/a-file
+foo-0.1/a-dir/include-this-subdir/a-subdir/
+foo-0.1/a-dir/include-this-subdir/a-subdir/a-file
+foo-0.1/include-this-dir/
+foo-0.1/include-this-dir/a-file
+foo-0.1/include-this-dir/a-subdir/
+foo-0.1/include-this-dir/a-subdir/a-file
+foo-0.1/include-this-file
+foo-0.1/.include-this-hidden-dir/
+foo-0.1/.include-this-hidden-dir/a-file
+foo-0.1/.include-this-hidden-dir/a-subdir/
+foo-0.1/.include-this-hidden-dir/a-subdir/a-file
+foo-0.1/.include-this-hidden-file
+END
+)
+
+run_mk_origtargz() {
+ local dir="$1"
+ local exp_stderr="$2"
+ local exp_stdout="$3"
+ local stderrF="${SHUNIT_TMPDIR}/stderr"
+ shift
+ shift
+ shift
+ output="$( cd $TMPDIR/$dir >/dev/null; LC_ALL=C $MK_ORIGTARGZ "$@" 2> $stderrF )"
+ stderr="$(cat $stderrF)"
+ retval=$?
+ assertEquals "standard output of mk-origtargz $*\n" "$exp_stdout" "$output"
+ assertEquals "error output of mk-origtargz $*\n" "$exp_stderr" "$stderr"
+ assertEquals "return valueof mk-origtargz $*\n" "0" "$retval"
+}
+
+assertType () {
+ mime="$1"
+ file="$2"
+ actual="$(file --brief --mime-type "$file" | sed -e 's,/x-,/,')"
+ assertEquals "filetype for $(basename "$file")" "$mime" "$actual"
+}
+
+
+testSymlink() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ ../foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)"
+}
+
+testSymlinkWithConvertedSig() {
+ makeTarBall gz sig
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ --signature 1 --signature-file=../foo-0.1.tar.gz.sig \
+ ../foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)"
+ assertTrue "signature isn't valid" "$GPG --homedir '$GPGHOME' --verify $TMPDIR/foo_0.1.orig.tar.gz.asc"
+}
+
+testSymlinkWithArmoredSig() {
+ # MR for https://lists.debian.org/debian-devel/2019/04/msg00459.html
+ makeTarBall gz asc
+ # an armored signature, but with the wrong extension.
+ mv $TMPDIR/foo-0.1.tar.gz.asc $TMPDIR/foo-0.1.tar.gz.sig
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ --signature 1 --signature-file=../foo-0.1.tar.gz.sig \
+ ../foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)"
+ assertTrue "signature isn't valid" "$GPG --homedir '$GPGHOME' --verify $TMPDIR/foo_0.1.orig.tar.gz.asc"
+}
+
+testCopy() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully copied ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ --copy ../foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testRename() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully renamed ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ --rename ../foo-0.1.tar.gz
+ assertFalse "original tarball does exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSymlinkExplicit() {
+ makeTarBall gz
+ run_mk_origtargz "" "" \
+ "Successfully symlinked foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" foo-0.1.tar.gz "$(readlink $TMPDIR/foo_0.1.orig.tar.gz)"
+}
+
+testCopyExplicit() {
+ makeTarBall gz
+ run_mk_origtargz "" "" \
+ "Successfully copied foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testRenameExplicit() {
+ makeTarBall gz
+ run_mk_origtargz "" "" \
+ "Successfully renamed foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --rename foo-0.1.tar.gz
+ assertFalse "original tarball does exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSymlinkExplicitSubdir() {
+ makeTarBall gz
+ mkdir -p $TMPDIR/destdir
+ run_mk_origtargz "" "" \
+ "Successfully symlinked foo-0.1.tar.gz to destdir/foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 -C destdir foo-0.1.tar.gz
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/destdir/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/destdir/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/destdir/foo_0.1.orig.tar.gz ]"
+ assertEquals "final symlink" ../foo-0.1.tar.gz "$(readlink $TMPDIR/destdir/foo_0.1.orig.tar.gz)"
+}
+
+testRepackGZ2GZ() {
+ makeTarBall gz
+ run_mk_origtargz "" "" \
+ "Successfully copied foo-0.1.tar.gz to foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.gz --repack --compression gzip
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testForceRepackGZ2XZ() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.gz." \
+ --force-repack ../foo-0.1.tar.gz --compression gzip
+ assertTrue "original tarball does not exist" "[ -e $TMPDIR/foo-0.1.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not a file" "[ -f $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result is not readable" "[ -r $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testRepackGZ2XZ() {
+ makeTarBall gz
+ run_mk_origtargz "" ""\
+ "Successfully repacked foo-0.1.tar.gz as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.gz --repack
+ assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+
+testRepackXZ2GZ() {
+ makeTarBall xz
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.tar.xz as foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.xz --repack --compression gzip
+ assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testRepackZST2XZRepackOpt() {
+ makeTarBall zst
+ run_mk_origtargz "" ""\
+ "Successfully repacked foo-0.1.tar.zst as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.zst --repack
+ assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.zst ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+
+testRepackZST2XZNoRepackOpt() {
+ makeTarBall zst
+ run_mk_origtargz "" ""\
+ "Successfully repacked foo-0.1.tar.zst as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 --copy foo-0.1.tar.zst
+ assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.zst ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+
+testRepackZST2ZSTFail() {
+ makeTarBall zst
+ run_mk_origtargz "" "mk-origtargz error: Bad value for compression: Unknown compression scheme zst"\
+ "" \
+ --package foo --version 0.1 --copy foo-0.1.tar.zst --compression zst
+ assertFalse "wrong result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.zst ]"
+ assertFalse "result does exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+}
+
+testRepackZip2GZ() {
+ makeZipFile
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.zip as foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.zip --compression gzip
+ assertTrue "original zip file does not exist" "[ -e $TMPDIR/foo-0.1.zip ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testRepackJar2GZ() {
+ if ! command -v jar >/dev/null
+ then
+ # skip to avoid dependency on java-jdk
+ return
+ fi
+ makeJarFile
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.jar as foo_0.1.orig.tar.gz." \
+ --package foo --version 0.1 --copy foo-0.1.jar --compression gzip
+ assertTrue "original zip file does not exist" "[ -e $TMPDIR/foo-0.1.jar ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testRepackZip2GZRename() {
+ makeZipFile
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.zip as foo_0.1.orig.tar.gz, and removed the original file." \
+ --package foo --version 0.1 --rename foo-0.1.zip --compression gzip
+ assertFalse "original zip file does exist" "[ -e $TMPDIR/foo-0.1.zip ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+}
+
+testRepackZip2XZ() {
+ makeZipFile
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.zip as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 foo-0.1.zip
+ assertTrue "original zip file does not exist" "[ -e $TMPDIR/foo-0.1.zip ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+
+testRepackXpi2XZ() {
+ makeZipFile
+ mv $TMPDIR/foo-0.1.zip $TMPDIR/foo-0.1.xpi
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.xpi as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 foo-0.1.xpi
+ assertTrue "original xpi file does not exist" "[ -e $TMPDIR/foo-0.1.xpi ]"
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+
+testRepackTAR2XZ() {
+ makeSimpleTar
+ run_mk_origtargz "" "" \
+ "Successfully repacked foo-0.1.tar as foo_0.1.orig.tar.xz." \
+ --package foo --version 0.1 --copy foo-0.1.tar --repack
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+}
+testOldFormat() {
+ makeTarBall xz
+ makeDebianOldDir
+ makeDebianCopyright
+ run_mk_origtargz foo "mk-origtargz warn: Missing debian/source/format, switch compression to gzip
+$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.xz as ../foo_0.1.orig.tar.gz, deleting 19 files from it." \
+ ../foo-0.1.tar.xz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertType application/gzip $TMPDIR/foo_0.1.orig.tar.gz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.gz | sort)"
+}
+
+testExclude() {
+ makeTarBall gz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testGoVendorIncludeIgnore () {
+ makeGolangLikeVendorFiles
+ makeTarBall gz
+ makeDebianDir
+ makeDebianCopyright
+
+ # adjust existing test cases slightly
+ cat <<'END' >> $TMPDIR/foo/debian/copyright
+ vendor
+Files-Included:
+ vendor/includeme
+END
+
+ expected_files=$(LC_ALL=C sort <<END
+$expected_files_after_removal
+foo-0.1/vendor/
+foo-0.1/vendor/a-subdir/
+foo-0.1/vendor/includeme/
+foo-0.1/vendor/includeme/important.go
+END
+)
+
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 21 files from it." \
+ ../foo-0.1.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testExcludeXZ() {
+ makeTarBall xz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.xz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.xz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testExcludeZip() {
+ makeZipFile
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.zip as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.zip
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testSuffix() {
+ makeTarBall gz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1+dfsg1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.gz --repack-suffix +dfsg1
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1+dfsg1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1+dfsg1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1+dfsg1.orig.tar.xz | sort)"
+}
+
+testSuffixXZ() {
+ makeTarBall xz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.tar.xz as ../foo_0.1+dfsg1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.xz --repack-suffix +dfsg1
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1+dfsg1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1+dfsg1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1+dfsg1.orig.tar.xz | sort)"
+}
+
+testSuffixZip() {
+ makeZipFile
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Successfully repacked ../foo-0.1.zip as ../foo_0.1+dfsg1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.zip --repack-suffix +dfsg1
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1+dfsg1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1+dfsg1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1+dfsg1.orig.tar.xz | sort)"
+}
+
+testSuffixNoExclusions() {
+ makeTarBall gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Successfully renamed ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ ../foo-0.1.tar.gz --rename --repack-suffix +dfsg1
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSameNameSymlink() {
+ makeTarBall gz
+ mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Leaving ../foo_0.1.orig.tar.gz where it is." \
+ --symlink ../foo_0.1.orig.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSameNameCopy() {
+ makeTarBall gz
+ mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Leaving ../foo_0.1.orig.tar.gz where it is." \
+ --copy ../foo_0.1.orig.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSameNameRename() {
+ makeTarBall gz
+ mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz
+ makeDebianDir
+ run_mk_origtargz foo "" \
+ "Leaving ../foo_0.1.orig.tar.gz where it is." \
+ --rename ../foo_0.1.orig.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+}
+
+testSameNameExclude() {
+ makeTarBall gz
+ mv $TMPDIR/foo-0.1.tar.gz $TMPDIR/foo_0.1.orig.tar.gz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Leaving ../foo_0.1.orig.tar.gz where it is, deleting 19 files from it." \
+ ../foo_0.1.orig.tar.gz --compression=gzip
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertFalse "result is a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.gz ]"
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.gz | sort)"
+}
+
+testSameNameExcludeSymlink() {
+ makeTarBall xz
+ ln -s foo-0.1.tar.xz $TMPDIR/foo_0.1.orig.tar.xz
+ makeDebianDir
+ makeDebianCopyright
+ run_mk_origtargz foo "$expected_stderr_after_removal" \
+ "Leaving ../foo_0.1.orig.tar.xz where it is, deleting 19 files from it." \
+ ../foo_0.1.orig.tar.xz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertTrue "result is not a symlink" "[ -L $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testCopyrightFormatWarning() {
+ makeTarBall gz
+ makeDebianDir
+ makeWrongDebianCopyright
+ run_mk_origtargz foo \
+ "mk-origtargz warn: The file debian/copyright mentions Files-Excluded, but its format is not recognized. Specify Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ in order to remove files from the tarball with mk-origtargz." \
+ "Successfully symlinked ../foo-0.1.tar.gz to ../foo_0.1.orig.tar.gz." \
+ ../foo-0.1.tar.gz
+
+}
+
+testBrokenTarWarning() {
+ makeBrokenTarBall
+ makeDebianDir
+ if dpkg --compare-versions $(dpkg-query -W -f='${Version}' libdpkg-perl) lt 1.19.0~; then
+ local SUBPROCESS_ERROR="gave error exit status 2"
+ else
+ local SUBPROCESS_ERROR="subprocess returned exit status 2"
+ fi
+ run_mk_origtargz foo \
+ "tar: This does not look like a tar archive
+tar: Skipping to next header
+tar: Exiting with failure status due to previous errors
+$PROGNAME: error: tar --list --auto-compress --file ../foo_0.1.orig.tar.xz $SUBPROCESS_ERROR" \
+ "" \
+ ../foo-0.1.tar.gz --repack
+}
+
+testUnmatchedExclusion() {
+ makeTarBall gz
+ makeDebianDir
+ makeUnmatchedExcludeCopyright
+ run_mk_origtargz foo "mk-origtargz warn: No files matched excluded pattern as the last matching glob: nomatch" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+testDuplicatePattern() {
+ makeTarBall gz
+ makeDebianDir
+ makeDuplicatePatternCopyright
+ run_mk_origtargz foo "mk-origtargz warn: No files matched excluded pattern as the last matching glob: exclude-dir1" \
+ "Successfully repacked ../foo-0.1.tar.gz as ../foo_0.1.orig.tar.xz, deleting 19 files from it." \
+ ../foo-0.1.tar.gz
+ assertTrue "result does not exist" "[ -e $TMPDIR/foo_0.1.orig.tar.xz ]"
+ assertType application/xz $TMPDIR/foo_0.1.orig.tar.xz
+ assertEquals "file contents" "$expected_files_after_removal" "$(tar taf $TMPDIR/foo_0.1.orig.tar.xz | sort)"
+}
+
+. shunit2
diff --git a/test/test_package_lifecycle b/test/test_package_lifecycle
new file mode 100755
index 0000000..9ed7485
--- /dev/null
+++ b/test/test_package_lifecycle
@@ -0,0 +1,386 @@
+#!/bin/bash
+
+# Copyright (C) 2015, Nicholas Bamber <nicholas@periapt.co.uk>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -u
+
+WORKDIR=$(readlink -f "${0%/*}")
+_ARCH=$(dpkg-architecture -qDEB_BUILD_ARCH)
+declare -r _ARCH
+if dpkg --compare-versions "$(dpkg-query -W -f='${Version}' dpkg-dev )" lt "1.19.1~"; then
+ echo "This test requires dpkg-dev >= 1.19.1." >&2
+ exit 1
+fi
+if dpkg --compare-versions "$(dpkg-query -W -f='${Version}' dpkg-dev )" lt "1.21.0~"; then
+ _dpkg_genchanges="dpkg-genchanges >"
+elif dpkg --compare-versions "$(dpkg-query -W -f='${Version}' dpkg-dev )" eq "1.21.0"; then
+ echo "This version of dpkg produces incorrect output, not supported" >&2
+ exit 1
+else
+ _dpkg_genchanges="dpkg-genchanges -O"
+fi
+declare -r _dpkg_genchanges
+
+if test "${1:-}" = --installed; then
+ shift
+else
+ PATH=${WORKDIR}/../scripts:${PATH}
+ PERL5LIB=${WORKDIR}/../lib:${PERL5LIB:-}
+ export PATH PERL5LIB
+fi
+
+. "${0%/*}/shunit2-helper-functions.sh"
+
+GPGHOME=$(mktemp -d -p /tmp gpg.XXXXX)
+
+oneTimeSetUp () {
+ GPG=gpg
+ if ! command -v $GPG >/dev/null 2>&1;then
+ echo "$GPG missing"
+ GPG=gpg2
+ if ! command -v $GPG >/dev/null 2>&1;then
+ echo "$GPG missing"
+ exit 1
+ fi
+ fi
+
+ PRIVATE_KEY=${WORKDIR}/uscan/PRIVATE_KEY.asc
+ PUBLIC_KEY=${WORKDIR}/uscan/PUBLIC_KEY.asc
+
+ PRIVATE_KEYRING=$GPGHOME/secring.gpg
+ PUBLIC_KEYRING=$GPGHOME/pubring.gpg
+
+ $GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --output $PRIVATE_KEYRING --dearmor $PRIVATE_KEY
+
+ $GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --output $PUBLIC_KEYRING --dearmor $PUBLIC_KEY
+
+ $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --secret-keyring $PRIVATE_KEYRING --default-key 72543FAF \
+ --list-keys --verbose
+
+ mkdir -p ${WORKDIR}/package_lifecycle/test/debian/source
+ cat > ${WORKDIR}/package_lifecycle/test/debian/control <<-EOS
+ Source: test
+ Section: devel
+ Priority: optional
+ Maintainer: Devscripts Devel Team <devscripts-devel@lists.alioth.debian.org>
+ Uploaders: Testophilus Testownik <tester@testity.org>
+ Standards-Version: 4.5.0
+ Rules-Requires-Root: no
+
+ Package: test
+ Architecture: all
+ Description: Short description
+ Longer description
+EOS
+ printf '#!/usr/bin/make -f\n%%:\n\tdh $@' > ${WORKDIR}/package_lifecycle/test/debian/rules
+ chmod +x ${WORKDIR}/package_lifecycle/test/debian/rules
+ _DATE=$(LC_ALL=C date '+%a, %d %b %Y %T +0000')
+ cat > ${WORKDIR}/package_lifecycle/test/debian/changelog <<-EOS
+ test (1.0-1) unstable; urgency=low
+
+ * Initial packaging
+
+ -- Testophilus Testownik <tester@testity.org> ${_DATE}
+EOS
+ echo 12 > ${WORKDIR}/package_lifecycle/test/debian/compat
+ echo '3.0 (quilt)' > ${WORKDIR}/package_lifecycle/test/debian/source/format
+ touch ${WORKDIR}/package_lifecycle/test/CONTENTS
+ cd ${WORKDIR}/package_lifecycle/ && tar cvf test_1.0.orig.tar --exclude debian -- test/CONTENTS 2>&1 > /dev/null && xz -f test_1.0.orig.tar
+ cd ${WORKDIR}
+}
+
+runCommandOutCmpFile() {
+ local param="$1"
+ local exp_stdoutfile="$2"
+ local exp_stderr="$3"
+ local exp_retval=$4
+ local stdoutF="${SHUNIT_TMPDIR}/stdout"
+ local stderrF="${SHUNIT_TMPDIR}/stderr"
+ eval "${COMMAND} $param" 2> ${stderrF} | \
+ grep -v File::FcntlLock | \
+ grep -v '^ *dh_' | \
+ grep -v '^dh_gencontrol debug symbol wrapper:' | \
+ grep -v '^ *create-stamp debian/debhelper' | \
+ sed -e "s/\`/'/g" | \
+ sed -e "s/^dpkg-buildpackage: info: /dpkg-buildpackage: /g" | \
+ sed -e "s/^dpkg-genchanges: info: /dpkg-genchanges: /g" | \
+ sed -e "/^ dpkg-genbuildinfo/d" | \
+ sed -e "/^gpg: /d" | \
+ sed -e's!^ -- Testophilus Testownik <tester@testity.org>.*! -- Testophilus Testownik <tester@testity.org>!' > ${stdoutF}
+ retval=$?
+ eval "cmp ${stdoutF} ${exp_stdoutfile}" 3>&1 >/dev/null
+ local diffretval=$?
+ assertEquals "standard output of ${COMMAND} $param matches ${exp_stdoutfile}\n" "0" "$diffretval" || diff ${stdoutF} ${exp_stdoutfile}
+ assertEquals "error output of ${COMMAND} $param\n" "$exp_stderr" "$(cat ${stderrF})"
+ assertEquals "return value of ${COMMAND} $param\n" $exp_retval $retval
+}
+
+
+test_debuild() {
+ export GNUPGHOME=$GPGHOME
+ cd ${WORKDIR}/package_lifecycle/test
+ COMMAND='LC_ALL=C debuild --no-conf --no-lintian --preserve-envvar=PATH --preserve-envvar=PERL5LIB --preserve-envvar=DEBFULLNAME --preserve-envvar=DEBEMAIL --preserve-envvar=GNUPGHOME --set-envvar=NO_PKG_MANGLE=1'
+ cat > ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
+ dpkg-buildpackage -us -uc -ui
+ dpkg-buildpackage: source package test
+ dpkg-buildpackage: source version 1.0-1
+ dpkg-buildpackage: source distribution unstable
+ dpkg-buildpackage: source changed by Testophilus Testownik <tester@testity.org>
+ dpkg-source --before-build .
+ dpkg-buildpackage: host architecture ${_ARCH}
+ debian/rules clean
+ dh clean
+ dpkg-source -b .
+ dpkg-source: info: using source format '3.0 (quilt)'
+ dpkg-source: info: building test using existing ./test_1.0.orig.tar.xz
+ dpkg-source: info: building test in test_1.0-1.debian.tar.xz
+ dpkg-source: info: building test in test_1.0-1.dsc
+ debian/rules binary
+ dh binary
+ dpkg-deb: building package 'test' in '../test_1.0-1_all.deb'.
+ ${_dpkg_genchanges}../test_1.0-1_${_ARCH}.changes
+ dpkg-genchanges: including full source code in upload
+ dpkg-source --after-build .
+ dpkg-buildpackage: full upload (original source is included)
+ Now signing changes and any dsc files...
+EOS
+ if command -v dpkg-genbuildinfo >/dev/null; then
+ cat >> ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
+ signfile dsc test_1.0-1.dsc uscan test key (no secret) <none@debian.org>
+
+ fixup_buildinfo test_1.0-1.dsc test_1.0-1_${_ARCH}.buildinfo
+ signfile buildinfo test_1.0-1_${_ARCH}.buildinfo uscan test key (no secret) <none@debian.org>
+
+ fixup_changes dsc test_1.0-1.dsc test_1.0-1_${_ARCH}.changes
+ fixup_changes buildinfo test_1.0-1_${_ARCH}.buildinfo test_1.0-1_${_ARCH}.changes
+ signfile changes test_1.0-1_${_ARCH}.changes uscan test key (no secret) <none@debian.org>
+
+ Successfully signed dsc, buildinfo, changes files
+EOS
+ else
+ cat >> ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
+ signfile dsc test_1.0-1.dsc uscan test key (no secret) <none@debian.org>
+
+ fixup_changes dsc test_1.0-1.dsc test_1.0-1_${_ARCH}.changes
+ signfile changes test_1.0-1_${_ARCH}.changes uscan test key (no secret) <none@debian.org>
+
+ Successfully signed dsc, changes files
+EOS
+ fi
+ runCommandOutCmpFile "-k'uscan test key (no secret) <none@debian.org>'" "${WORKDIR}/package_lifecycle/debuild.txt" "" 0
+ cd ${WORKDIR}
+}
+
+test_dscverify () {
+ cd ${WORKDIR}/package_lifecycle
+ COMMAND='dscverify --no-conf --keyring $GPGHOME/pubring.gpg'
+ cat > ${WORKDIR}/package_lifecycle/dscverify.txt <<-EOS
+ ${WORKDIR}/package_lifecycle/test_1.0-1.dsc:
+ Good signature found
+ validating test_1.0.orig.tar.xz
+ validating test_1.0-1.debian.tar.xz
+ All files validated successfully.
+EOS
+ runCommandOutCmpFile "${WORKDIR}/package_lifecycle/test_1.0-1.dsc" "${WORKDIR}/package_lifecycle/dscverify.txt" "" 0
+ cd ${WORKDIR}
+}
+
+test_dscextractControl () {
+ cd ${WORKDIR}/package_lifecycle
+ COMMAND='dscextract'
+ cat > ${WORKDIR}/package_lifecycle/dscextractControl.txt <<-EOS
+ Source: test
+ Section: devel
+ Priority: optional
+ Maintainer: Devscripts Devel Team <devscripts-devel@lists.alioth.debian.org>
+ Uploaders: Testophilus Testownik <tester@testity.org>
+ Standards-Version: 4.5.0
+ Rules-Requires-Root: no
+
+ Package: test
+ Architecture: all
+ Description: Short description
+ Longer description
+EOS
+ runCommandOutCmpFile "test_1.0-1.dsc debian/control" "dscextractControl.txt" "" 0
+ cd ${WORKDIR}
+}
+
+test_dscextractChangelog () {
+ cd ${WORKDIR}/package_lifecycle
+ COMMAND='dscextract'
+ cat > ${WORKDIR}/package_lifecycle/dscextractChangelog.txt <<-EOS
+ test (1.0-1) unstable; urgency=low
+
+ * Initial packaging
+
+ -- Testophilus Testownik <tester@testity.org>
+EOS
+ runCommandOutCmpFile "test_1.0-1.dsc debian/changelog" "dscextractChangelog.txt" "" 0
+ cd ${WORKDIR}
+}
+
+test_debchange () {
+ cd ${WORKDIR}/package_lifecycle/test
+ COMMAND='debchange'
+ export DEBFULLNAME='Testophilus Testownik'
+ export DEBEMAIL='tester@testity.org'
+ cat > ${WORKDIR}/package_lifecycle/debchange.txt <<-EOS
+ test (1.0-2) UNRELEASED; urgency=medium
+
+ * new killer app functionality
+
+ -- Testophilus Testownik <tester@testity.org>
+
+ test (1.0-1) unstable; urgency=low
+
+ * Initial packaging
+
+ -- Testophilus Testownik <tester@testity.org>
+EOS
+ runCommand "-iU 'new killer app functionality'" "" "" 0
+ COMMAND=cat
+ runCommandOutCmpFile "debian/changelog" "../debchange.txt" "" 0
+ cd ${WORKDIR}
+}
+
+test_list_unreleased () {
+ cd ${WORKDIR}/package_lifecycle/test
+ COMMAND='list-unreleased'
+ cat > ${WORKDIR}/package_lifecycle/list-unreleased.txt <<-EOS
+ test (1.0-2) UNRELEASED; urgency=medium
+
+ * new killer app functionality
+
+ -- Testophilus Testownik <tester@testity.org>
+EOS
+ runCommandOutCmpFile "-c -R" "../list-unreleased.txt" "" 0
+ cd ${WORKDIR}
+}
+
+
+test_debuild2() {
+ export GNUPGHOME=$GPGHOME
+ cd ${WORKDIR}/package_lifecycle/test
+ COMMAND='LC_ALL=C debuild --no-conf --no-lintian --preserve-envvar=PATH --preserve-envvar=PERL5LIB --preserve-envvar=DEBFULLNAME --preserve-envvar=DEBEMAIL --preserve-envvar=GNUPGHOME --set-envvar=NO_PKG_MANGLE=1'
+ cat > ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
+ dpkg-buildpackage -us -uc -ui
+ dpkg-buildpackage: source package test
+ dpkg-buildpackage: source version 1.0-2
+ dpkg-buildpackage: source distribution UNRELEASED
+ dpkg-buildpackage: source changed by Testophilus Testownik <tester@testity.org>
+ dpkg-source --before-build .
+ dpkg-buildpackage: host architecture ${_ARCH}
+ debian/rules clean
+ dh clean
+ dpkg-source -b .
+ dpkg-source: info: using source format '3.0 (quilt)'
+ dpkg-source: info: building test using existing ./test_1.0.orig.tar.xz
+ dpkg-source: info: building test in test_1.0-2.debian.tar.xz
+ dpkg-source: info: building test in test_1.0-2.dsc
+ debian/rules binary
+ dh binary
+ dpkg-deb: building package 'test' in '../test_1.0-2_all.deb'.
+ ${_dpkg_genchanges}../test_1.0-2_${_ARCH}.changes
+ dpkg-genchanges: not including original source code in upload
+ dpkg-source --after-build .
+ dpkg-buildpackage: binary and diff upload (original source NOT included)
+EOS
+ runCommandOutCmpFile "-k'uscan test key (no secret) <none@debian.org>'" "${WORKDIR}/package_lifecycle/debuild.txt" "" 0
+ cd ${WORKDIR}
+}
+
+test_debuild_forcesign() {
+ export GNUPGHOME=$GPGHOME
+ cd ${WORKDIR}/package_lifecycle/test
+ COMMAND='LC_ALL=C debuild --no-conf --no-lintian --preserve-envvar=PATH --preserve-envvar=PERL5LIB --preserve-envvar=DEBFULLNAME --preserve-envvar=DEBEMAIL --preserve-envvar=GNUPGHOME --set-envvar=NO_PKG_MANGLE=1 --force-sign'
+ cat > ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
+ dpkg-buildpackage -us -uc -ui
+ dpkg-buildpackage: source package test
+ dpkg-buildpackage: source version 1.0-2
+ dpkg-buildpackage: source distribution UNRELEASED
+ dpkg-buildpackage: source changed by Testophilus Testownik <tester@testity.org>
+ dpkg-source --before-build .
+ dpkg-buildpackage: host architecture ${_ARCH}
+ debian/rules clean
+ dh clean
+ dpkg-source -b .
+ dpkg-source: info: using source format '3.0 (quilt)'
+ dpkg-source: info: building test using existing ./test_1.0.orig.tar.xz
+ dpkg-source: info: building test in test_1.0-2.debian.tar.xz
+ dpkg-source: info: building test in test_1.0-2.dsc
+ debian/rules binary
+ dh binary
+ dpkg-deb: building package 'test' in '../test_1.0-2_all.deb'.
+ ${_dpkg_genchanges}../test_1.0-2_${_ARCH}.changes
+ dpkg-genchanges: not including original source code in upload
+ dpkg-source --after-build .
+ dpkg-buildpackage: binary and diff upload (original source NOT included)
+ Now signing changes and any dsc files...
+EOS
+ if command -v dpkg-genbuildinfo >/dev/null; then
+ cat >> ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
+ signfile dsc test_1.0-2.dsc uscan test key (no secret) <none@debian.org>
+
+ fixup_buildinfo test_1.0-2.dsc test_1.0-2_${_ARCH}.buildinfo
+ signfile buildinfo test_1.0-2_${_ARCH}.buildinfo uscan test key (no secret) <none@debian.org>
+
+ fixup_changes dsc test_1.0-2.dsc test_1.0-2_${_ARCH}.changes
+ fixup_changes buildinfo test_1.0-2_${_ARCH}.buildinfo test_1.0-2_${_ARCH}.changes
+ signfile changes test_1.0-2_${_ARCH}.changes uscan test key (no secret) <none@debian.org>
+
+ Successfully signed dsc, buildinfo, changes files
+EOS
+ else
+ cat >> ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
+ signfile dsc test_1.0-2.dsc uscan test key (no secret) <none@debian.org>
+
+ fixup_changes dsc test_1.0-2.dsc test_1.0-2_${_ARCH}.changes
+ signfile changes test_1.0-2_${_ARCH}.changes uscan test key (no secret) <none@debian.org>
+
+ Successfully signed dsc, changes files
+EOS
+ fi
+ runCommandOutCmpFile "-k'uscan test key (no secret) <none@debian.org>'" "${WORKDIR}/package_lifecycle/debuild.txt" "" 0
+ cd ${WORKDIR}
+}
+
+test_debdiff () {
+ cd ${WORKDIR}/package_lifecycle
+ COMMAND='debdiff --no-conf'
+ cat > ${WORKDIR}/package_lifecycle/debdiff.txt <<-EOS
+ File lists identical (after any substitutions)
+
+ Control files: lines which differ (wdiff format)
+ ------------------------------------------------
+ Version: [-1.0-1-] {+1.0-2+}
+EOS
+ runCommandOutCmpFile "test_1.0-1_${_ARCH}.changes test_1.0-2_${_ARCH}.changes" "debdiff.txt" "" 0
+ cd ${WORKDIR}
+}
+
+oneTimeTearDown () {
+ rm -rf ${WORKDIR}/package_lifecycle
+ gpgconf --homedir "$GPGHOME" --kill gpg-agent
+ rm -rf "$GPGHOME"
+}
+
+cd ${WORKDIR}
+. shunit2
+
diff --git a/test/test_perl b/test/test_perl
new file mode 100755
index 0000000..aed1906
--- /dev/null
+++ b/test/test_perl
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e
+
+LIB=-I../lib
+if test "${1:-}" = --installed; then
+ LIB=""
+ shift
+fi
+
+prove --norc $LIB t/*.t
+
diff --git a/test/test_perltidy b/test/test_perltidy
new file mode 100755
index 0000000..af9827c
--- /dev/null
+++ b/test/test_perltidy
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+set -u
+
+base="$(readlink -f "${0%/*}"/..)"
+
+
+# perltidy test is ran only during dev
+if test "$(cd "$base" && dpkg-parsechangelog -c0 -SDistribution)" != UNRELEASED; then
+ echo "SKIP: Not checking a released version with perltidy."
+ exit 0
+fi
+
+# perltidy test isn't ran in autopkgtest environment
+if test "${1:-}" = --installed; then
+ echo "SKIP: Not running perltidy in autopkgtest."
+ exit 0
+fi
+
+# Don't run this test with old Perltidy versions
+if test "$(perl -MPerl::Tidy -le 'print $Perl::Tidy::VERSION')" -lt 20220613; then
+ echo "SKIP: perltidy version too old, skipping this test."
+ exit 0
+fi
+
+
+testPerltidy() {
+ LIST=$(find "$base/lib/" "$base/scripts/" -iname '*.pl' -or -iname '*.pm')
+
+ for file in $LIST; do
+ perltidy --output-path="$SHUNIT_TMPDIR/" --profile="$base/.perltidyrc" "$file"
+ cmp -s "$file" "$SHUNIT_TMPDIR/$(basename "$file").tdy"
+ retval=$?
+ assertEquals "## $file isn't following perltidy" 0 "$retval"
+ done
+
+}
+
+. shunit2
diff --git a/test/test_sadt b/test/test_sadt
new file mode 100755
index 0000000..0292d20
--- /dev/null
+++ b/test/test_sadt
@@ -0,0 +1,100 @@
+#!/bin/sh
+
+# Copyright (C) 2018, Antonio Terceiro <terceiro@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -u
+
+. ${0%/*}/test_helper.sh
+
+if test "${1:-}" = --installed; then
+ sadt="sadt"
+ shift
+else
+ sadt="$(readlink -f "${0%/*}/../scripts/sadt")"
+fi
+
+samples="${0%/*}/sadt"
+
+run_sadt() {
+ dir="$1"
+ shift
+ (cd "$samples/$dir" && $sadt "$@")
+}
+
+test_passes() {
+ assertPasses run_sadt passes
+}
+
+test_superficial() {
+ assertPasses run_sadt superficial
+ assertFails run_sadt superficial-fails
+}
+
+test_flaky() {
+ assertPasses run_sadt flaky
+}
+
+test_skippable() {
+ assertPasses run_sadt skippable
+}
+
+test_skippable_fails() {
+ assertFails run_sadt unskippable
+ assertFails run_sadt unskipped
+}
+
+test_fails() {
+ assertFails run_sadt fails
+}
+
+test_space_separated_tests() {
+ assertPasses run_sadt space-separated-tests
+ assertFalse "skipped=1 found in output" "grep -q skipped=1 $log"
+}
+
+test_comma_separated_tests() {
+ assertPasses run_sadt comma-separated-tests
+ assertFalse "skipped=1 found in output" "grep -q skipped=1 $log"
+}
+
+test_space_separated_restrictions() {
+ assertPasses run_sadt space-separated-restrictions
+ assertFalse "skipped=1 found in output" "grep -q skipped=1 $log"
+}
+
+test_comma_separated_restrictions() {
+ assertPasses run_sadt comma-separated-restrictions
+ assertFalse "skipped=1 found in output" "grep -q skipped=1 $log"
+}
+
+test_tests_directory() {
+ assertPasses run_sadt tests-directory
+ assertFalse "skipped=1 found in output" "grep -q skipped=1 $log"
+}
+
+test_test_command() {
+ assertPasses run_sadt test-command --verbose
+ assertTrue "recognizes Test-Command" "grep 'O: Test-Command is supported' $log"
+ assertTrue "recognizes Test-Command" "grep tests=1 $log"
+}
+
+test_run_specific_tests() {
+ assertPasses run_sadt comma-separated-tests --verbose test1
+ assertTrue "runs test1" "grep '^test1:' $log"
+ assertFalse "does not run test2" "grep '^test2:' $log"
+}
+
+. shunit2
diff --git a/test/test_salsa b/test/test_salsa
new file mode 100755
index 0000000..8c21342
--- /dev/null
+++ b/test/test_salsa
@@ -0,0 +1,106 @@
+#!/usr/bin/perl
+
+use strict;
+use lib '../lib';
+use Test::More;
+
+my $skip;
+
+BEGIN {
+ my $cwd = `pwd`;
+ chomp $cwd;
+ eval "use File::Temp 'tempdir';"
+ . "use Test::Output;use GitLab::API::v4;"
+ . "use lib '$cwd/../lib'";
+ $skip = $@ ? 1 : 0;
+}
+
+sub run {
+ my ($result, $out, @list) = @_;
+ @ARGV = @list;
+ my $res;
+ combined_like(
+ sub {
+ $res = Devscripts::Salsa->new->run;
+ },
+ $out,
+ "command: " . join(' ', @list));
+ ok($res =~ /^$result$/i, " result is $result");
+}
+
+sub mkDebianDir {
+ my $tmpdir = tempdir(CLEANUP => 1);
+ chdir $tmpdir;
+ $ENV{"GIT_CONFIG_NOGLOBAL"} = 1;
+ system "git init";
+ mkdir 'debian';
+ open F, ">debian/changelog";
+ print F <<EOF;
+foobar (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd\@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+EOF
+ close F;
+ open F, ">README.md";
+ print F <<EOF;
+# Salsa test
+EOF
+ system "git add *";
+ system "git commit -a -m 'Salsa test'";
+}
+
+SKIP: {
+ skip "Missing dependencies" if ($skip);
+ use_ok 'Devscripts::Salsa';
+ $Devscripts::Output::die_on_error = 0;
+
+ # Search methods
+ run(0, qr/Id.*\nUsername.*/s, 'whoami');
+ run(0, qr/Id.*\nName/s, 'search_group', 'js-team');
+ run(0, qr/Id.*\nName/s, 'search_group', '2666');
+ run(0, qr/Id.*\nName/s, 'search_group', 'perl-team/modules');
+ run(0, qr/Id.*\nUsername\s*: yadd/s, 'search_user', 'yadd');
+ run(0, qr/Id.*\nUsername\s*: yadd/s, 'search_user', 'yad');
+ run(0, qr/Id.*\nUsername\s*: yadd/s, 'search_user', '3818');
+ run(0, qr/Id.*\nName\s*: qa/s, 'search_project', 'qa');
+ run(0, qr/Id.*\nName\s*: qa/s, 'search_project', '1417');
+ run(0, qr/Id.*\nName\s*: qa/s, 'search_project', 'qa/qa');
+ run(0, qr/Id.*\nUsername.*/s, '--group', 'perl-team', 'group');
+ run(0, qr/Id.*\nName/s, '--group', 'perl-team', 'list_repos');
+ run(0, qr/Id.*\nName/s, 'list_groups');
+ run(0, qr/Id.*\n\tName/s, 'forks', 'qa/qa');
+ run(0, qr/^debian\/devscripts/m, 'mrs', 'debian/devscripts');
+ run(0, qr/^devscripts/m, 'mrs', 'devscripts', '--group-id', 2);
+ run(0, qr/master.*Maintainer.*Developers/m,
+ 'protected_branches', 'debian/devscripts');
+
+ # checkout
+ {
+ my $tmpdir = tempdir(CLEANUP => 1);
+ run(0, qr/gbp:info/, 'co', '-C', $tmpdir,
+ 'debian/libapache2-mod-fcgid');
+ ok(
+ -d "$tmpdir/libapache2-mod-fcgid/.git",
+ ' libapache2-mod-fcgid cloned'
+ );
+ run(0, qr/gbp:info/, 'checkout', '-C', $tmpdir, '--group=qa', 'qa');
+ ok(-d "$tmpdir/qa/.git", ' qa cloned');
+ }
+
+ # push_repo, update_repo and del_repo
+ if ($ARGV[0] eq '--full') {
+ mkDebianDir;
+ run(0, qr/Project .*created/s,
+ 'push_repo', '.', '--verbose', '--kgb', '--irc=devscripts');
+ diag "Verify that foobar appears in #devscripts channel";
+ run(0, qr/Project .*updated/s,
+ 'update_repo', 'foobar', '--rename-head');
+ run(1, qr/update_repo has failed for foobar/s,
+ 'update_repo', 'foobar', '--rename-head', '--no-fail');
+ run(0, qr/Project .*foobar deleted/s,
+ '--verbose', 'del_repo', 'foobar');
+ }
+}
+done_testing;
diff --git a/test/test_uscan b/test/test_uscan
new file mode 100755
index 0000000..1b66f30
--- /dev/null
+++ b/test/test_uscan
@@ -0,0 +1,548 @@
+#!/bin/bash
+
+# Copyright (C) 2013, Rafael Laboissiere <rafael@laboissiere.net>
+#
+# 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.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+set -u
+
+TESTTYPE=base
+test_dir=$(readlink -f "${0%/*}")
+. "$test_dir/lib_test_uscan"
+
+SUFFIX="1"
+if command -v dpkg-vendor >/dev/null; then
+ VENDER="$(dpkg-vendor --query Vendor 2>/dev/null|tr 'A-Z' 'a-z')"
+ case "$VENDER" in
+ debian) SUFFIX="1" ;;
+ *) SUFFIX="0${VENDER}1" ;;
+ esac
+fi
+
+if test "${1:-}" = --installed; then
+ COMMAND="uscan --no-conf --compression=xz"
+ shift
+else
+ top_srcdir=$(readlink -f "${0%/*}/..")
+ make -C "$top_srcdir/scripts" uscan mk-origtargz uupdate debchange
+ PATH="$top_srcdir/scripts:$PATH"
+ export PATH
+ PERL5LIB="$top_srcdir/lib"
+ export PERL5LIB
+ COMMAND="uscan --no-conf --compression=xz"
+fi
+
+COMMANDDEHS="$COMMAND --dehs"
+
+# comment out for debug
+#COMMAND="$COMMAND --debug"
+
+tearDown(){
+ killHttpServer
+ echo
+}
+
+trap tearDown EXIT
+
+containsName(){
+ echo "$1" | grep -qF "$2"
+ echo $?
+}
+
+validXML(){
+ echo "$1" | perl -ne 's/<[^\/].*?>.*?<\/.*>//g;$open++ if/<[^\/].*?>/;$open-- if/<\/.*>/;if(!$open and /^\s+\w/){$false++}}{exit ($false || $open) ? 1 : 0'
+ echo $?
+}
+
+. "$test_dir/shunit2-helper-functions.sh"
+
+# The following tests do the following: (1) create a minimal Debian package
+# directory, containing minimal files debian/{changelog,watch,copyright},
+# (2) create a minimal repository, containing a tarball (built on the fly),
+# (3) start an HTTP server that works offline, using the SimpleHTTPServer
+# module of Python, and (4) run uscan inside that minimal universe.
+
+
+# The following function tests the --repack feature
+helperTestRepack() {
+ from_ext="$1"
+ to_comp="$2"
+ file_output="$3"
+
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+
+ mkdir -p "$TEMP_PKG_DIR"/$PKG/debian/source
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/watch
+version=3
+http://localhost:$PORT/$PKG-(\d).$from_ext
+END
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/changelog
+$PKG (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+
+ echo -n '3.0 (quilt)' > "$TEMP_PKG_DIR"/$PKG/debian/source/format
+ mkdir -p "$TEMP_PKG_DIR"/repo/foo
+ touch "$TEMP_PKG_DIR"/repo/foo/content
+
+ if [ "$from_ext" = "tar.zstd" ]
+ then
+ ( cd "$TEMP_PKG_DIR"/repo ;
+ tar --zstd -cf $PKG-1.$from_ext $PKG/* )
+ else
+ ( cd "$TEMP_PKG_DIR"/repo ;
+ tar -caf $PKG-1.$from_ext $PKG/* )
+ fi
+
+ OUTPUT=$( cd "$TEMP_PKG_DIR"/$PKG ; $COMMANDDEHS --repack --compression=$to_comp )
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+
+ TARBALL=${PKG}_1.orig.tar.$to_comp
+ if [ "$from_ext" != "tar.$to_comp" ]
+ then
+ assertFalse 'unrepacked tarball still present' "[ -f "$TEMP_PKG_DIR"/${PKG}_1.orig.$from_ext ]"
+ fi
+ assertTrue 'pristine tarball is not created' "[ -f "$TEMP_PKG_DIR"/$TARBALL ]"
+ assertNotNull "pristine tarball is not $to_comp-compressed" \
+ "$( file -L "$TEMP_PKG_DIR"/$TARBALL | grep "$file_output" )"
+ CONTENTS="$(tar atf "$TEMP_PKG_DIR"/$TARBALL)"
+ assertTrue 'file contents missing' \
+ $(containsName "$CONTENTS" content)
+ assertTrue "malfored target in dehs output: $OUTPUT" $(validXML "$OUTPUT")
+ assertTrue "malfored target in dehs output: $OUTPUT" \
+ $(containsName "$OUTPUT" "<target>$TARBALL</target>")
+
+}
+
+testRepackGZ_XZ() { helperTestRepack "tar.gz" "xz" "XZ compressed data" ; }
+testRepackGZ_BZ2() { helperTestRepack "tar.gz" "bz2" "bzip2 compressed data" ; }
+testRepackBZ2_GZ() { helperTestRepack "tar.bz2" "gz" "gzip compressed data" ; }
+testRepackGZ_GZ() { helperTestRepack "tar.gz" "gz" "gzip compressed data" ; }
+testRepackXZ_XZ() { helperTestRepack "tar.xz" "xz" "XZ compressed data" ; }
+testRepackTGZ_XZ() { helperTestRepack "tgz" "xz" "XZ compressed data" ; }
+testRepackTGZ_XZ() { helperTestRepack "tgz" "xz" "XZ compressed data" ; }
+testRepackLZ_XZ() { helperTestRepack "tar.lzma" "xz" "XZ compressed data" ; }
+testRepackZST_XZ() { helperTestRepack "tar.zst" "xz" "XZ compressed data" ; }
+testRepackZSTD_XZ() { helperTestRepack "tar.zstd" "xz" "XZ compressed data" ; }
+
+# The following function tests the --repack feature, with a zip file
+testRepackZip_XZ() {
+ to_comp=xz
+ file_output="XZ compressed data"
+
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+
+ mkdir -p "$TEMP_PKG_DIR"/$PKG/debian/source
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/watch
+version=3
+http://localhost:$PORT/$PKG-(\d).zip
+END
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/changelog
+$PKG (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+ echo -n '3.0 (quilt)' > "$TEMP_PKG_DIR"/$PKG/debian/source/format
+
+ mkdir -p "$TEMP_PKG_DIR"/repo/foo
+ touch "$TEMP_PKG_DIR"/repo/foo/content
+
+ ( cd "$TEMP_PKG_DIR"/repo ;
+ zip -q -r $PKG-1.zip * )
+
+ OUTPUT=$( (cd "$TEMP_PKG_DIR"/$PKG ; $COMMANDDEHS --repack --compression=$to_comp) )
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+
+ TARBALL=${PKG}_1.orig.tar.$to_comp
+ assertTrue 'unrepacked zipfile present' "[ -f "$TEMP_PKG_DIR"/${PKG}-1.zip ]"
+ assertTrue 'pristine tarball is not created' "[ -f "$TEMP_PKG_DIR"/$TARBALL ]"
+ assertNotNull "pristine tarball is not $to_comp-compressed" \
+ "$( file -L "$TEMP_PKG_DIR"/$TARBALL | grep "$file_output" )"
+ CONTENTS="$(tar atf "$TEMP_PKG_DIR"/$TARBALL)"
+ assertTrue 'file contents missing' \
+ $(containsName "$CONTENTS" content)
+ assertTrue "malfored target in dehs output: $OUTPUT" $(validXML "$OUTPUT")
+ assertTrue "malfored target in dehs output: $OUTPUT" \
+ $(containsName "$OUTPUT" "<target>$TARBALL</target>")
+
+}
+
+
+
+# The following function tests the Files-Excluded feature of uscan, which
+# allows the selective exclusion of files from the upstream tarball before
+# repacking it.
+
+helperCreateRepo () {
+ mkdir -p $PKG/debian
+
+ cat <<END > $PKG/debian/watch
+version=3
+${OPTS:-}http://localhost:$PORT/$PKG-(\d).tar.gz debian ${SCRIPT:-}
+END
+
+ cat <<END > $PKG/debian/changelog
+$PKG (0+dfsg1-$SUFFIX) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+
+ cat <<'END' > $PKG/debian/copyright
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Files-Excluded: exclude-this
+ exclude-dir
+ .*
+ */js/jquery.js
+ ;?echo?baz;?#
+END
+ if [ -n "${SRCFORMAT:-}" ]; then
+ mkdir -p $PKG/debian/source
+ echo "$SRCFORMAT" > $PKG/debian/source/format
+ fi
+
+ mkdir -p repo
+ touch repo/include-this
+ touch repo/exclude-this
+ touch repo/.hidden
+ mkdir -p "repo/; echo baz; #/"
+ mkdir -p repo/exclude-dir
+ touch repo/exclude-dir/file
+ mkdir -p repo/exclude-dir/subdir
+ touch repo/exclude-dir/subdir/file2
+ mkdir -p repo/docs/html/js/
+ touch repo/docs/html/js/jquery.js
+
+}
+
+helperTestContent() {
+ assertTrue 'file that must be present is excluded in the tarball' \
+ $(containsName "$CONTENTS" include-this)
+ assertFalse 'file that must be excluded is present in the tarball' \
+ $(containsName "$CONTENTS" exclude-this)
+ assertFalse "dir that must be excluded is present in the tarball" \
+ $(containsName "$CONTENTS" exclude-dir)
+ assertFalse "subdir that must be excluded is present in the tarball" \
+ $(containsName "$CONTENTS" subdir)
+ assertFalse "non-root-file that must be excluded is present in the tarball" \
+ $(containsName "$CONTENTS" jquery.js)
+ assertFalse "hidden file that must be excluded is present in the zip file" \
+ $(containsName "$CONTENTS" .hidden)
+ assertFalse "path with whitespace that must be excluded is present" \
+ $(containsName "$CONTENTS" "; echo baz; #/")
+}
+
+testFileExclusion() {
+
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+
+ (
+ cd "$TEMP_PKG_DIR"
+ OPTS="opts=repacksuffix=+dfsg1,dversionmangle=s/@DEB_EXT@// "
+ SCRIPT="uupdate"
+ SRCFORMAT="3.0 (quilt)"
+ helperCreateRepo
+ cd repo
+ tar cfz $PKG-1.tar.gz * .hidden )
+
+ (cd "$TEMP_PKG_DIR"/$PKG ; $COMMAND)
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+
+ TARBALL=${PKG}_1+dfsg1.orig.tar.xz
+ assertTrue 'downloaded tarfile not present' "[ -f "$TEMP_PKG_DIR"/${PKG}-1.tar.gz ]"
+ assertTrue 'pristine tarball is not created' "[ -f "$TEMP_PKG_DIR"/$TARBALL ]"
+ assertFalse 'pristine tarball is a symlink (nothing repacked?)' "[ -L "$TEMP_PKG_DIR"/$TARBALL ]"
+ assertNotNull 'pristine tarball is not XZ-compressed' \
+ "$( file "$TEMP_PKG_DIR"/$TARBALL | grep -i 'XZ compressed data' )"
+ CONTENTS="$(tar atf "$TEMP_PKG_DIR"/$TARBALL)"
+
+ helperTestContent
+
+ # check uupdate
+ assertTrue 'pristine tarball is not extracted' "[ -f "$TEMP_PKG_DIR"/${PKG}-1+dfsg1/debian/changelog ]"
+ DVERSION=`dpkg-parsechangelog -l"$TEMP_PKG_DIR"/${PKG}-1+dfsg1/debian/changelog -SVersion`
+ assertEquals "uscan: Version should be 1+dfsg1-$SUFFIX but $DVERSION" "$DVERSION" "1+dfsg1-$SUFFIX"
+
+}
+
+# the same, but run from a separate directory (no way for uupdate, just download)
+testFileExclusionSeparateDir() {
+
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+
+ (
+ cd "$TEMP_PKG_DIR"
+ SCRIPT=""
+ OPTS="opts=repacksuffix=+dfsg1,dversionmangle=auto "
+ helperCreateRepo
+ cd repo
+ tar cfz $PKG-1.tar.gz * .hidden )
+
+ mkdir "$TEMP_PKG_DIR"/otherdir
+ (
+ cd "$TEMP_PKG_DIR"/otherdir;
+ $COMMAND --package $PKG --force-download --upstream-version 1 \
+ --watchfile ../$PKG/debian/watch --copyright-file ../$PKG/debian/copyright
+ )
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+
+ TARBALL=${PKG}_1+dfsg1.orig.tar.xz
+ assertTrue 'downloaded tarfile not present' "[ -f "$TEMP_PKG_DIR"/${PKG}-1.tar.gz ]"
+ assertTrue 'pristine tarball is not created' "[ -f "$TEMP_PKG_DIR"/$TARBALL ]"
+ assertFalse 'pristine tarball is a symlink (nothing repacked?)' "[ -L "$TEMP_PKG_DIR"/$TARBALL ]"
+ assertNotNull 'pristine tarball is not XZ-compressed' \
+ "$( file "$TEMP_PKG_DIR"/$TARBALL | grep -i 'XZ compressed data' )"
+ CONTENTS="$(tar atf "$TEMP_PKG_DIR"/$TARBALL)"
+
+ helperTestContent
+
+}
+
+# The same, for a zip file that is being repacked
+
+testFileExclusionZipToTar() {
+
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+
+ (
+ cd "$TEMP_PKG_DIR"
+ SRCFORMAT="3.0 (quilt)"
+ helperCreateRepo
+ cat <<END > $PKG/debian/watch
+version=3
+opts=repacksuffix=+dfsg1,dversionmangle=s/@DEB_EXT@// http://localhost:$PORT/$PKG-(\d).zip debian uupdate
+END
+
+ cd repo
+ zip -q -r $PKG-1.zip * .hidden )
+
+ (cd "$TEMP_PKG_DIR"/$PKG ; $COMMAND --repack)
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+
+ TARBALL=${PKG}_1+dfsg1.orig.tar.xz
+ assertTrue 'unrepacked zipfile not present' "[ -f "$TEMP_PKG_DIR"/${PKG}-1.zip ]"
+ assertTrue 'pristine tarball is not created' "[ -f "$TEMP_PKG_DIR"/$TARBALL ]"
+ assertNotNull 'pristine tarball is not xz-compressed' \
+ "$( file "$TEMP_PKG_DIR"/$TARBALL | grep 'XZ compressed data' )"
+ CONTENTS="$(tar atf "$TEMP_PKG_DIR"/$TARBALL)"
+ helperTestContent
+
+ # check uupdate
+ assertTrue 'pristine tarball is not extracted' "[ -f "$TEMP_PKG_DIR"/${PKG}-1+dfsg1/debian/changelog ]"
+ DVERSION=`dpkg-parsechangelog -l"$TEMP_PKG_DIR"/${PKG}-1+dfsg1/debian/changelog -SVersion`
+ assertEquals "uscan: Version should be 1+dfsg1-$SUFFIX but $DVERSION" "$DVERSION" "1+dfsg1-$SUFFIX"
+
+}
+
+testPlainMode() {
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+
+ mkdir -p "$TEMP_PKG_DIR"/$PKG/debian
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/watch
+version=4
+opts="searchmode=plain" \
+http://localhost:$PORT/src.json http://localhost:$PORT/foo-(\d).zip
+END
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/changelog
+$PKG (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+
+ mkdir -p "$TEMP_PKG_DIR"/repo/foo
+ touch "$TEMP_PKG_DIR"/repo/foo/content
+
+ ( cd "$TEMP_PKG_DIR"/repo ;
+ zip -q -r $PKG-1.zip *;
+ cat > src.json <<END
+{"1.0":{"tarball":"http://localhost:$PORT/foo-1.zip"}}
+END
+ )
+
+ OUTPUT=$( (cd "$TEMP_PKG_DIR"/$PKG ; $COMMANDDEHS) )
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+
+ TARBALL=${PKG}_1.orig.tar.$to_comp
+ assertTrue 'unrepacked zipfile present' "[ -f "$TEMP_PKG_DIR"/${PKG}-1.zip ]"
+
+}
+
+testLinksWithRelativeBase() {
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+ to_comp=xz
+
+ mkdir -p "$TEMP_PKG_DIR"/$PKG/debian
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/watch
+version=4
+http://localhost:$PORT/foo/index.html foo-([\d\.]+).zip
+END
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/changelog
+$PKG (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+
+ mkdir -p "$TEMP_PKG_DIR"/repo/foo
+ touch "$TEMP_PKG_DIR"/repo/foo/content
+
+ for href in foo-1.zip /foo/foo-1.zip //localhost:$PORT/foo/foo-1.zip ../foo/foo-1.zip x/../../foo/foo-1.zip; do
+ ( cd "$TEMP_PKG_DIR"/repo/foo ;
+ zip -q -r $PKG-1.zip *;
+ zip -q -r $PKG-0.9.zip *;
+ cat > index.html <<END
+<html><body>
+<base href="/foo/" />
+<a href="$href">foo-1.zip</a>
+</body></html>
+END
+ )
+
+ (cd "$TEMP_PKG_DIR"/$PKG ; $COMMAND)
+ assertEquals "uscan: exit_code!=0 but exit_code=0 with $href" "$?" "0"
+ done
+
+ assertTrue 'unrepacked zipfile present' "[ -f "$TEMP_PKG_DIR"/${PKG}-1.zip ]"
+
+}
+
+testComponentDehsOutput() {
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+
+ mkdir -p "$TEMP_PKG_DIR"/$PKG/debian
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/watch
+version=4
+http://localhost:$PORT/$PKG-(\d).zip debian
+
+opts="searchmode=plain,component=baz" \
+http://localhost:$PORT/src.json http://localhost:$PORT/foo-(\d).zip
+END
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/changelog
+$PKG (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+
+ mkdir -p "$TEMP_PKG_DIR"/repo/foo
+ touch "$TEMP_PKG_DIR"/repo/foo/content
+
+ ( cd "$TEMP_PKG_DIR"/repo ;
+ zip -q -r $PKG-1.zip *;
+ cat > src.json <<END
+{"1.0":{"tarball":"http://localhost:$PORT/foo-1.zip"}}
+END
+ )
+
+ OUTPUT=$( (cd "$TEMP_PKG_DIR"/$PKG ; $COMMANDDEHS --report --dehs) )
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+ assertTrue "malfored target in dehs output: $OUTPUT" $(validXML "$OUTPUT")
+ assertTrue "malfored target in dehs output: $OUTPUT" \
+ $(containsName "$OUTPUT" '<component id="baz">')
+ assertTrue "malfored target in dehs output: $OUTPUT" \
+ $(containsName "$OUTPUT" "<component-upstream-version>1</component-upstream-version>")
+}
+
+testSimpleHeader() {
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+
+ mkdir -p "$TEMP_PKG_DIR"/$PKG/debian/source
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/watch
+version=4
+http://localhost:$PORT/$PKG-(\d).zip debian
+
+opts="searchmode=plain,component=baz,filenamemangle=s/.*-(@ANY_VERSION@@ARCHIVE_EXT@)/baz-\$1/" \
+http://localhost:$PORT/src.json http://localhost:$PORT/foo-(\d).zip
+END
+
+ echo -n '3.0 (quilt)' > "$TEMP_PKG_DIR"/$PKG/debian/source/format
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/changelog
+$PKG (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+
+ mkdir -p "$TEMP_PKG_DIR"/repo/foo
+ touch "$TEMP_PKG_DIR"/repo/foo/content
+
+ ( cd "$TEMP_PKG_DIR"/repo ;
+ zip -q -r $PKG-1.zip *;
+ cat > src.json <<END
+{"1.0":{"tarball":"http://localhost:$PORT/foo-1.zip"}}
+END
+ )
+
+ OUTPUT=$( (cd "$TEMP_PKG_DIR"/$PKG ; $COMMAND -v \
+ --http-header http://localhost:$PORT@Simple-Token=localtoken \
+ --http-header http://another.com@Ext-Token=exttoken \
+ ) )
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+ assertTrue "per-host header not exported: $OUTPUT" \
+ $(containsName "$OUTPUT" "Set per-host custom header Simple-Token for http://localhost:$PORT/foo")
+ assertFalse "ext per-host header is exported: $OUTPUT" \
+ $(containsName "$OUTPUT" "Set per-host custom header Ext-Token")
+}
+
+. shunit2
diff --git a/test/test_uscan_ftp b/test/test_uscan_ftp
new file mode 100755
index 0000000..d35db8c
--- /dev/null
+++ b/test/test_uscan_ftp
@@ -0,0 +1,489 @@
+#!/bin/bash
+# vim: set shiftwidth=4 tabstop=8 noexpandtab:
+
+# Copyright (C) 2018, Osamu Aoki <osamu@debian.org>
+#
+# 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.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+set -u
+
+TESTTYPE=FTP
+. ./lib_test_uscan
+
+DEB_HOST_OS="$(dpkg-architecture -qDEB_HOST_ARCH_OS)"
+if [ "$DEB_HOST_OS" = "kfreebsd" ]; then
+ # kbsd has a non-working semaphore, that is needed here.
+ echo "This test is not supported on $(dpkg-architecture -qDEB_HOST_ARCH), skipping"
+ exit 0
+fi
+
+COMMAND="uscan --no-conf"
+
+# set safe defaults
+WEBSCRIPT=":"
+DEBUGECHO=":"
+DEBUGLSLR=":"
+DEBUGBASH=":"
+# comment out for debug
+#COMMAND="$COMMAND --debug"
+#COMMAND="$COMMAND --verbose"
+#DEBUGECHO=echo
+#DEBUGLSLR="ls -laR"
+#DEBUGLSLR="ls -la"
+#DEBUGBASH="bash -i"
+
+# Initial Debian revision value is distribution dependent
+SUFFIX="1"
+if command -v dpkg-vendor >/dev/null; then
+ VENDER="$(dpkg-vendor --query Vendor 2>/dev/null|tr 'A-Z' 'a-z')"
+ case "$VENDER" in
+ debian) SUFFIX="1" ;;
+ *) SUFFIX="0${VENDER}1" ;;
+ esac
+fi
+
+cleanup(){
+ kill -9 $(cat $TMPDIR/$REPOPATH/pid)
+ rm -rf $TMPDIR
+ echo ""
+}
+
+spawnFtpServer(){
+ (
+ local USCAN_FTP_SERVER=${USCAN_FTP_SERVER:-ftpserver.py}
+ mkdir -p "$TMPDIR/$REPOPATH"
+ cd "$TMPDIR/$REPOPATH" || exit 1
+ echo "FTP starting ... $TMPDIR/$REPOPATH"
+ local pid
+ python3 "$test_dir/uscan/$USCAN_FTP_SERVER" 2>log &
+ pid=$!
+ echo $pid > pid
+ while ! [ -s port ]; do
+ sleep 2s
+ if ! kill -0 $pid 2> /dev/null ; then
+ echo "The FTP server returned an error:"
+ cat log
+ exit 1
+ fi
+ done
+ )
+}
+
+trap cleanup 1 2 3 13 15
+
+containsName(){
+ echo "$1" | grep -qF "$2"
+ echo $?
+}
+
+. "${0%/*}/shunit2-helper-functions.sh"
+
+# The following tests do the following: (1) create a minimal Debian package
+# directory, containing minimal files debian/{changelog,watch,copyright},
+# (2) create a minimal repository, containing a tarball (built on the fly),
+# (3) start an FTP server that works offline, using the pyftpdlib
+# module of Python, and (4) run uscan inside that minimal universe.
+
+# make debian/ in `pwd`
+# debian/watch contains $WATCHVER and $WATCHLINE with template URL updated
+makeDebianDir() {
+ DEBNAME=${1:-foo} # Debian source package name
+ DEBVER=${2:-1.0} # Debian source package version
+ mkdir -p debian/source
+
+ cat <<END > debian/rules
+%:
+ dh $@
+END
+chmod 755 debian/rules
+
+ cat <<END > debian/changelog
+$DEBNAME ($DEBVER) unstable; urgency=low
+
+ * Release of the $DEBNAME package $DEBVER.
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+ # debian/source/format
+ case $DEBVER in
+ *-*) # non-native package
+ echo "3.0 (quilt)" > debian/source/format
+ ;;
+ *) # native package
+ echo "3.0 (native)" > debian/source/format
+ ;;
+ esac
+ # debian/copyright
+ echo "Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/" \
+ > debian/copyright
+ # debian/watch
+ echo "version=$WATCHVER" > debian/watch
+ echo "$WATCHLINE" | sed -e "s,@@@url@@@,ftp://127.0.0.1:${PORT}/,g" - \
+ >> debian/watch
+ # debian/upstream/signing-key.asc
+ mkdir -p debian/upstream
+ cp -f $test_dir/uscan/PUBLIC_KEY.asc debian/upstream/signing-key.asc
+}
+
+
+# make tarball in $REPOPATH/$POOLPATH
+makeUpstreamTar() {
+ UPNAME=${1:-foo} # Upstream package name
+ UPVER=${2:-1.0} # upstream package version
+ COMPRESSION=${3:-gz} # archve compression type
+ TYPE=${4:-non-native} # set this if native-type upstream
+ OLDDIR=`pwd`
+ mkdir -p $TMPDIR/$REPOPATH/$POOLPATH/$UPNAME-$UPVER
+ cd $TMPDIR/$REPOPATH/$POOLPATH
+ touch $UPNAME-$UPVER/FILE.$UPNAME.$UPVER
+ if [ "$TYPE" = "native" ]; then
+ cd $TMPDIR/$REPOPATH/$POOLPATH/$UPNAME-$UPVER
+ makeDebianDir $UPNAME $UPVER
+ cd $TMPDIR/$REPOPATH/$POOLPATH
+ fi
+ case $COMPRESSION in
+ gz|gzip)
+ NEWTAR=$UPNAME-$UPVER.tar
+ tar -cf $NEWTAR $UPNAME-$UPVER
+ NEWTAR=$UPNAME-$UPVER.tar.gz
+ tar -czf $NEWTAR $UPNAME-$UPVER
+ ;;
+ bz2|bzip2)
+ NEWTAR=$UPNAME-$UPVER.tar
+ tar -cf $NEWTAR $UPNAME-$UPVER
+ NEWTAR=$UPNAME-$UPVER.tar.bz2
+ tar --bzip2 -cf $NEWTAR $UPNAME-$UPVER
+ ;;
+ xz)
+ NEWTAR=$UPNAME-$UPVER.tar
+ tar -cf $NEWTAR $UPNAME-$UPVER
+ NEWTAR= $UPNAME-$UPVER.tar.xz
+ tar --xz -cf $NEWTAR $UPNAME-$UPVER
+ ;;
+ zip)
+ NEWTAR=$UPNAME-$UPVER.zip
+ zip -r $NEWTAR $UPNAME-$UPVER
+ ;;
+ *) echo "Wrong compression mode: $COMPRESSION"
+ exit 1
+ ;;
+ esac
+ # make $NEWTAR.asc
+ $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --secret-keyring $PRIVATE_KEYRING --default-key 72543FAF \
+ --armor --detach-sign $NEWTAR
+ if [ "$COMPRESSION" != "zip" ]; then
+ NEWTAR=$UPNAME-$UPVER.tar
+ $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --secret-keyring $PRIVATE_KEYRING --default-key 72543FAF \
+ --armor --detach-sign $NEWTAR
+
+ fi
+ cd $OLDDIR
+}
+
+# setup a common watch file test environment
+helperWatch() {
+ local SITESCRIPT=${1:-siteWebNonNative}
+ local VEROLD=${2:-1.0}
+ local VERNEW=${3:-2.0}
+ local PREFIX="${4:-}"
+ local TMPDIR=$(mktemp -d)
+ ORIGDIR=`pwd`
+ PKG=${PKG:-foo}
+ REPOPATH=${REPOPATH:-repo}
+ POOLPATH=${POOLPATH:-pool}
+ GZREPACK=${GZREPACK:-gz}
+ XCOMMAND=${XCOMMAND:-$COMMAND}
+ WATCHVER="${WATCHVER:-3}"
+ WATCHLINE0="@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate"
+ WATCHLINE="${WATCHLINE:-$WATCHLINE0}"
+ cd $TMPDIR
+ # start FTP server with its root at $TMPDIR/$REPOPATH
+ spawnFtpServer || exit 1
+ PORT=$(cat $TMPDIR/$REPOPATH/port)
+ $DEBUGECHO " ***** ftp://localhost:$PORT started showing $TMPDIR/$REPOPATH *****"
+ # make web site
+ $SITESCRIPT
+ # make local $VEROLD source tree
+ tar -xzf $TMPDIR/$REPOPATH/$POOLPATH/${PKG}-${VEROLD}.tar.gz
+ if [ -n "${PREFIX}" ]; then
+ mv $TMPDIR/${PKG}-${VEROLD} $TMPDIR/${PKG}-${PREFIX}${VEROLD}
+ fi
+ mv $TMPDIR/${PKG}-${PREFIX}${VEROLD} $TMPDIR/${PKG}
+ cd $TMPDIR/${PKG}
+ if [ ! -d debian ]; then
+ makeDebianDir $PKG ${PREFIX}${VEROLD}-$SUFFIX
+ fi
+ local UUPDATE=""
+ if grep -q "uupdate" $TMPDIR/${PKG}/debian/watch ; then
+ UUPDATE=uupdate
+ fi
+ local PGP=""
+ if grep -q "pgpurlmangle" $TMPDIR/${PKG}/debian/watch ; then
+ PGP=pgp
+ fi
+ if grep -q "pgpmode *= *auto" $TMPDIR/${PKG}/debian/watch ; then
+ PGP=pgp
+ fi
+ if grep -q "pgpmode *= *previous" $TMPDIR/${PKG}/debian/watch ; then
+ PGP=pgp
+ fi
+ $XCOMMAND
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+ cd $TMPDIR
+ $DEBUGLSLR
+ UTARBALL=${PKG}-${VERNEW}.tar.gz
+ STARBALL=${PKG}_${PREFIX}${VERNEW}.orig.tar.$GZREPACK
+ assertTrue "$UTARBALL missing: $WATCHLINE" "[ -f $UTARBALL ]"
+ assertTrue "$STARBALL missing: $WATCHLINE" "[ -f $STARBALL ]"
+ if [ "$PGP" = "pgp" ]; then
+ UTARSIG=${PKG}-${VERNEW}.tar.gz.asc
+ if [ ! -f $UTARSIG ]; then
+ UTARSIG=${PKG}-${VERNEW}.tar.asc
+ fi
+ STARSUG=${PKG}_${PREFIX}${VERNEW}.orig.tar.$GZREPACK.asc
+ assertTrue "$UTARSIG and *.sig missing: $WATCHLINE" "[ -f $UTARSIG ]"
+ assertTrue "$STARSIG missing: $WATCHLINE" "[ -f $STARSIG ]"
+ fi
+ # check uupdate
+ if [ "$UUPDATE" = "uupdate" ]; then
+ cd $TMPDIR/${PKG}-${PREFIX}${VERNEW}
+ assertTrue 'pristine tarball is not extracted' "[ -f debian/changelog ]"
+ DVERSION=`dpkg-parsechangelog -ldebian/changelog -SVersion`
+ assertEquals "uscan: Version should be ${PREFIX}${VERNEW}-$SUFFIX but $DVERSION" "$DVERSION" "${PREFIX}${VERNEW}-$SUFFIX"
+ cd $TMPDIR
+ fi
+ $DEBUGBASH
+ cd $ORIGDIR
+ cleanup
+ unset REPOPATH
+ unset POOLPATH
+ unset GZREPACK
+ unset XCOMMAND
+ unset WATCHVER
+ unset WATCHLINE
+}
+
+# setup a common watch file test environment with Zip upstream
+helperWatchZip() {
+ local SITESCRIPT=${1:-siteWebNonNative}
+ local VEROLD=${2:-1.0}
+ local VERNEW=${3:-2.0}
+ local PREFIX="${4:-}"
+ local TMPDIR=$(mktemp -d)
+ ORIGDIR=`pwd`
+ PKG=${PKG:-foo}
+ REPOPATH=${REPOPATH:-repo}
+ POOLPATH=${POOLPATH:-pool}
+ GZREPACK=${GZREPACK:-xz}
+ XCOMMAND=${XCOMMAND:-$COMMAND}
+ WATCHVER="${WATCHVER:-3}"
+ WATCHLINE0="@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate"
+ WATCHLINE="${WATCHLINE:-$WATCHLINE0}"
+ cd $TMPDIR
+ # start FTP server with its root at $TMPDIR/$REPOPATH
+ spawnFtpServer || exit 1
+ PORT=$(cat $TMPDIR/$REPOPATH/port)
+ $DEBUGECHO " ***** ftp://localhost:$PORT started showing $TMPDIR/$REPOPATH *****"
+ # make web site
+ $SITESCRIPT
+ # make local $VEROLD source tree
+ unzip $TMPDIR/$REPOPATH/$POOLPATH/${PKG}-${VEROLD}.zip
+ if [ -n "$PREFIX" ]; then
+ mv $TMPDIR/${PKG}-${VEROLD} $TMPDIR/${PKG}-${PREFIX}${VEROLD}
+ fi
+ mv $TMPDIR/${PKG}-${PREFIX}${VEROLD} $TMPDIR/${PKG}
+ cd $TMPDIR/${PKG}
+ if [ ! -d debian ]; then
+ makeDebianDir $PKG ${PREFIX}${VEROLD}-$SUFFIX
+ fi
+ local UUPDATE=""
+ if grep -q "uupdate" $TMPDIR/${PKG}/debian/watch ; then
+ UUPDATE=uupdate
+ fi
+ local PGP=""
+ if grep -q "pgpurlmangle" $TMPDIR/${PKG}/debian/watch ; then
+ PGP=pgp
+ fi
+ if grep -q "pgpmode *= *auto" $TMPDIR/${PKG}/debian/watch ; then
+ PGP=pgp
+ fi
+ if grep -q "pgpmode *= *previous" $TMPDIR/${PKG}/debian/watch ; then
+ PGP=pgp
+ fi
+ $XCOMMAND
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+ cd $TMPDIR
+ $DEBUGLSLR
+ UTARBALL=${PKG}-${VERNEW}.zip
+ STARBALL=${PKG}_${PREFIX}${VERNEW}.orig.tar.$GZREPACK
+ assertTrue "$UTARBALL missing: $WATCHLINE" "[ -f $UTARBALL ]"
+ assertTrue "$STARBALL missing: $WATCHLINE" "[ -f $STARBALL ]"
+ if [ "$PGP" = "pgp" ]; then
+ UTARSIG=${PKG}-${VERNEW}.zip.asc
+ STARSUG=${PKG}_${PREFIX}${VERNEW}.orig.tar.$GZREPACK.asc
+ assertTrue "$UTARSIG and *.sig missing: $WATCHLINE" "[ -f $UTARSIG ]"
+ assertTrue "$STARSIG missing: $WATCHLINE" "[ -f $STARSIG ]"
+ fi
+ # check uupdate
+ if [ "$UUPDATE" = "uupdate" ]; then
+ cd $TMPDIR/${PKG}-${PREFIX}${VERNEW}
+ assertTrue 'pristine tarball is not extracted' "[ -f debian/changelog ]"
+ DVERSION=`dpkg-parsechangelog -ldebian/changelog -SVersion`
+ assertEquals "uscan: Version should be ${PREFIX}${VERNEW}-$SUFFIX but $DVERSION" "$DVERSION" "${PREFIX}${VERNEW}-$SUFFIX"
+ cd $TMPDIR
+ fi
+ $DEBUGBASH
+ cd $ORIGDIR
+ cleanup
+ unset REPOPATH
+ unset POOLPATH
+ unset GZREPACK
+ unset XCOMMAND
+ unset WATCHVER
+ unset WATCHLINE
+}
+
+siteNonNative() {
+ local PKG=${1:-foo}
+ local EXTRA=${2:-}
+ makeUpstreamTar $PKG 0.0 gz non-native
+ makeUpstreamTar $PKG 1.0 gz non-native
+ makeUpstreamTar $PKG 2.0 gz non-native
+ mkdir -p $TMPDIR/$REPOPATH/0.0/$PKG/ooo/
+ mkdir -p $TMPDIR/$REPOPATH/1.0/$PKG/ooo/
+ mkdir -p $TMPDIR/$REPOPATH/2.0/$PKG/ooo/
+ if [ -n "$EXTRA" ]; then
+ makeUpstreamTar $PKG 3.0 gz non-native
+ mkdir -p $TMPDIR/$REPOPATH/3.0/$PKG/ooo/
+ fi
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz $TMPDIR/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.asc $TMPDIR/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.asc $TMPDIR/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.asc
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz $TMPDIR/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.asc $TMPDIR/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.asc $TMPDIR/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.asc
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz $TMPDIR/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.asc $TMPDIR/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.asc $TMPDIR/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.asc
+ if [ -n "$EXTRA" ]; then
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz $TMPDIR/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.asc $TMPDIR/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.asc $TMPDIR/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.asc
+ fi
+}
+
+siteNonNativeZip() {
+ local PKG=${1:-foo}
+ local EXTRA=${2:-}
+ makeUpstreamTar $PKG 0.0 zip non-native
+ makeUpstreamTar $PKG 1.0 zip non-native
+ makeUpstreamTar $PKG 2.0 zip non-native
+ mkdir -p $TMPDIR/$REPOPATH/0.0/$PKG/ooo/
+ mkdir -p $TMPDIR/$REPOPATH/1.0/$PKG/ooo/
+ mkdir -p $TMPDIR/$REPOPATH/2.0/$PKG/ooo/
+ if [ -n "$EXTRA" ]; then
+ makeUpstreamTar $PKG 3.0 gz non-native
+ mkdir -p $TMPDIR/$REPOPATH/3.0/$PKG/ooo/
+ fi
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.zip $TMPDIR/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.zip
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.zip.asc $TMPDIR/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.zip.asc
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.zip $TMPDIR/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.zip
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.zip.asc $TMPDIR/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.zip.asc
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.zip $TMPDIR/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.zip
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.zip.asc $TMPDIR/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.zip.asc
+ if [ -n "$EXTRA" ]; then
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.zip $TMPDIR/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.zip
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.zip.asc $TMPDIR/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.zip.asc
+ fi
+}
+
+siteNonNativeR() {
+ local PKG=${1:-foo}
+ local EXTRA=${2:-}
+ makeUpstreamTar $PKG 0.0 gz non-native
+ makeUpstreamTar $PKG 1.0 gz non-native
+ makeUpstreamTar $PKG 2.0 gz non-native
+ mkdir -p $TMPDIR/$REPOPATH/0.0/$PKG/ooo/
+ mkdir -p $TMPDIR/$REPOPATH/1.0/$PKG/ooo/
+ mkdir -p $TMPDIR/$REPOPATH/2.0/$PKG/ooo/
+ if [ -n "$EXTRA" ]; then
+ makeUpstreamTar $PKG 3.0 gz non-native
+ mkdir -p $TMPDIR/$REPOPATH/3.0/$PKG/ooo/
+ fi
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz $TMPDIR/$REPOPATH/3.0/$PKG/ooo/${PKG}-0.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.asc $TMPDIR/$REPOPATH/3.0/$PKG/ooo/${PKG}-0.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz $TMPDIR/$REPOPATH/2.0/$PKG/ooo/${PKG}-1.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.asc $TMPDIR/$REPOPATH/2.0/$PKG/ooo/${PKG}-1.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz $TMPDIR/$REPOPATH/1.0/$PKG/ooo/${PKG}-2.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.asc $TMPDIR/$REPOPATH/1.0/$PKG/ooo/${PKG}-2.0.tar.gz.asc
+ if [ -n "$EXTRA" ]; then
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz $TMPDIR/$REPOPATH/0.0/$PKG/ooo/${PKG}-3.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.asc $TMPDIR/$REPOPATH/0.0/$PKG/ooo/${PKG}-3.0.tar.gz.asc
+ fi
+}
+
+# test a watch files
+
+### VERSION 4 ###
+# standard tests
+
+# test non-native package with uupdate, bare FTP server in normal order
+testWatch4NonNative() {
+ WATCHVER=4
+ WATCHLINE='opts=pgpsigurlmangle=s/$/.asc/ @@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteNonNative
+}
+
+# test --download-current-version, bare FTP server in normal order
+testWatch4NonNativeDlCurrent() {
+ WATCHVER=4
+ XCOMMAND="$COMMAND --download-current-version"
+ WATCHLINE='opts=pgpsigurlmangle=s/$/.asc/ @@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteNonNative 1.0 1.0
+}
+
+# test --download-version, bare FTP server in normal order
+testWatch4NonNativeDlUversion() {
+ WATCHVER=4
+ XCOMMAND="$COMMAND --download-version 0.0"
+ WATCHLINE='opts=pgpsigurlmangle=s/$/.asc/ @@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteNonNative 1.0 0.0
+}
+
+# test non-native package with uupdate, bare FTP server in normal order with upstream ZIP
+testWatch4NonNativeZip() {
+ WATCHVER=4
+ COMPRESSION='zip'
+ WATCHLINE='opts=pgpsigurlmangle=s/$/.asc/ @@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatchZip siteNonNativeZip
+}
+
+# test non-native package with uupdate, bare FTP server in normal order with repack to xz
+testWatch4NonNativeXz() {
+ WATCHVER=4
+ GZREPACK='xz'
+ WATCHLINE='opts=pgpsigurlmangle=s/$/.asc/,compression=xz,repack @@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteNonNative
+}
+
+# test non-native package with uupdate, bare FTP server in normal order with ungzsig
+testWatch4NonNativeUngzsig() {
+ WATCHVER=4
+ WATCHLINE='opts=pgpsigurlmangle=s/.gz$/.asc/,decompress @@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteNonNative
+}
+
+. shunit2
diff --git a/test/test_uscan_git b/test/test_uscan_git
new file mode 100755
index 0000000..61b5c81
--- /dev/null
+++ b/test/test_uscan_git
@@ -0,0 +1,207 @@
+#!/bin/bash
+
+# Copyright (C) 2018, Xavier <yadd@debian.org>
+#
+# 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.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+set -u
+#set -x
+
+TESTTYPE=Git
+. ./lib_test_uscan
+
+COMMAND="chronic_sh uscan --no-conf --compression=xz --dehs"
+
+# prevent the local from messing with this test
+export GIT_CONFIG_NOGLOBAL=1
+export HOME=""
+export XDG_CONFIG_HOME=""
+
+# comment out for debug
+#COMMAND="$COMMAND --verbose"
+#COMMAND="$COMMAND --debug"
+
+cleanup(){
+ rm -rf "$TEMP_PKG_DIR"
+}
+
+spawnGitRepo(){
+ mkdir -p "$TEMP_PKG_DIR/repo"
+ (cd "$TEMP_PKG_DIR/repo" || exit 1
+ chronic_sh git init
+ git config user.name "Joe Developer"
+ git config user.email "none@debian.org"
+ touch changelog file.c extra.c
+ echo 'extra.c export-ignore' >.gitattributes
+ chronic_sh git add changelog file.c extra.c .gitattributes
+ chronic_sh git commit -a -m 'Init'
+ for version in 1.0 2.0; do
+ echo "# Version $version" >> file.c
+ cat >> changelog <<END
+Version $version
+
+END
+ chronic_sh git commit -a -m "Releasing $version"
+ chronic_sh git tag -s -u 72543FAF -m "Version $version" "v$version"
+ done)
+}
+
+trap cleanup EXIT
+
+containsName(){
+ echo "$1" | grep -F -q "$2"
+ echo $?
+}
+
+# shellcheck source=shunit2-helper-functions.sh
+. "${0%/*}/shunit2-helper-functions.sh"
+
+PKG=foo
+
+makeDebianDir() {
+ WATCHARGS=$1
+ TEMP_PKG_DIR=$(mktemp -d --tmpdir="$SHUNIT_TMPDIR" uscan_git.XXXXXX)
+ if [ -z "$TEMP_PKG_DIR" ]; then
+ echo "Failed to create temporary directory" >&2
+ exit 1
+ fi
+ mkdir -p "$TEMP_PKG_DIR"/$PKG/debian/upstream
+ mkdir -p "$TEMP_PKG_DIR"/$PKG/debian/source
+ spawnGitRepo
+
+ cat <<END > "$TEMP_PKG_DIR/$PKG/debian/watch"
+version=4
+opts="mode=git,gitmode=shallow,$WATCHARGS" \
+file:///$TEMP_PKG_DIR/repo refs/tags/v([\\d\\.]+) debian
+END
+
+ cat <<END > "$TEMP_PKG_DIR/$PKG/debian/changelog"
+$PKG (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+ echo '3.0 (quilt)' > "$TEMP_PKG_DIR/$PKG/debian/source/format"
+ cp -f "$test_dir/uscan/PUBLIC_KEY.asc" "$TEMP_PKG_DIR/$PKG/debian/upstream/signing-key.asc"
+}
+
+makeDebianDirWithUpstream() {
+ WATCHARGS=$1
+ makeDebianDir "$WATCHARGS"
+ cd "$TEMP_PKG_DIR/$PKG" || exit 1
+ chronic_sh git init
+ chronic_sh git remote add upstream "file:///$TEMP_PKG_DIR/repo"
+ chronic_sh git fetch upstream
+ cd - > /dev/null || exit 1
+}
+
+makeDebianDirHead() {
+ WATCHARGS=$1
+ makeDebianDir "$WATCHARGS"
+ cat <<END > "$TEMP_PKG_DIR/$PKG/debian/watch"
+version=4
+opts="mode=git,pretty=0.0+git%cd.%h" \
+file:///$TEMP_PKG_DIR/repo HEAD
+END
+}
+
+helperLaunch() {
+ WATCHARGS=$1
+ ARG="${2:-}"
+ CMD_ARG="${3:-}"
+ if test "$ARG" = "upstream"; then
+ makeDebianDirWithUpstream "$WATCHARGS"
+ elif test "$ARG" = "HEAD"; then
+ makeDebianDirHead "$WATCHARGS"
+ else
+ makeDebianDir "$WATCHARGS"
+ fi
+ ( cd "$TEMP_PKG_DIR/$PKG" || exit 1 ; $COMMAND $CMD_ARG --watchfile=debian/watch )
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+}
+
+testGit() {
+ helperLaunch "pgpmode=none"
+ TARBALL=${PKG}_2.0.orig.tar.xz
+ assertTrue 'downloaded tarfile not present' "[ -f '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$TEMP_PKG_DIR/$TARBALL' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$TEMP_PKG_DIR/$TARBALL' ]"
+ cleanup
+}
+
+testGitHead() {
+ helperLaunch "pgpmode=none" HEAD
+ ORIG=$(find "$TEMP_PKG_DIR" | perl -ne 'print if/\/foo.*\.orig\.tar\.xz$/')
+ UPSTREAM=$(find "$TEMP_PKG_DIR" | perl -ne 'print if/\/foo.*(?<!orig)\.tar\.xz$/')
+ assertTrue 'downloaded tarfile not present' "[ -f '$UPSTREAM' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$ORIG' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$ORIG' ]"
+ cleanup
+}
+
+testGitSignedTag() {
+ helperLaunch "pgpmode=gittag"
+ TARBALL=${PKG}_2.0.orig.tar.xz
+ assertTrue 'downloaded tarfile not present' "[ -f '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$TEMP_PKG_DIR/$TARBALL' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$TEMP_PKG_DIR/$TARBALL' ]"
+ cleanup
+}
+
+testGitUpstream() {
+ helperLaunch "pgpmode=none" upstream
+ TARBALL=${PKG}_2.0.orig.tar.xz
+ assertTrue 'downloaded tarfile not present' "[ -f '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$TEMP_PKG_DIR/$TARBALL' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$TEMP_PKG_DIR/$TARBALL' ]"
+ cleanup
+}
+
+testGitUpstreamSignedTag() {
+ helperLaunch "pgpmode=gittag" upstream
+ TARBALL=${PKG}_2.0.orig.tar.xz
+ assertTrue 'downloaded tarfile not present' "[ -f '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$TEMP_PKG_DIR/$TARBALL' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$TEMP_PKG_DIR/$TARBALL' ]"
+ cleanup
+}
+
+testGitIgnoreExclusions() {
+ helperLaunch "gitexport=all"
+ assertTrue 'downloaded tarfile is incomplete' \
+ "tar tf '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' '${PKG}-2.0/extra.c'"
+ cleanup
+}
+
+testGitUpstreamIgnoreExclusions() {
+ helperLaunch "gitexport=all" upstream
+ assertTrue 'downloaded tarfile is incomplete' \
+ "tar tf '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' '${PKG}-2.0/extra.c'"
+ cleanup
+}
+
+testGitSignedTagWithDestDir() {
+ DESTDIR=$TEMP_PKG_DIR/destdir
+ mkdir -p $DESTDIR
+ helperLaunch "pgpmode=gittag" "" "--destdir $TEMP_PKG_DIR/destdir"
+ TARBALL=${PKG}_2.0.orig.tar.xz
+ assertTrue 'downloaded tarfile not present' "[ -f '$DESTDIR/${PKG}-2.0.tar.xz' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$DESTDIR/$TARBALL' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$DESTDIR/$TARBALL' ]"
+ cleanup
+}
+
+# shellcheck disable=SC1091
+. shunit2
diff --git a/test/test_uscan_group b/test/test_uscan_group
new file mode 100755
index 0000000..c5e7ef9
--- /dev/null
+++ b/test/test_uscan_group
@@ -0,0 +1,210 @@
+#!/bin/bash
+
+# Copyright (C) 2020, Xavier Guimard <yadd@debian.org>
+#
+# 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.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+set -u
+
+TESTTYPE=base
+test_dir=$(readlink -f "${0%/*}")
+. "$test_dir/lib_test_uscan"
+
+SUFFIX="1"
+if command -v dpkg-vendor >/dev/null; then
+ VENDER="$(dpkg-vendor --query Vendor 2>/dev/null|tr 'A-Z' 'a-z')"
+ case "$VENDER" in
+ debian) SUFFIX="1" ;;
+ *) SUFFIX="0${VENDER}1" ;;
+ esac
+fi
+
+if test "${1:-}" = --installed; then
+ COMMAND="uscan --no-conf --compression=gz"
+ shift
+else
+ top_srcdir=$(readlink -f "${0%/*}/..")
+ make -C "$top_srcdir/scripts" uscan mk-origtargz uupdate debchange
+ PATH="$top_srcdir/scripts:$PATH"
+ export PATH
+ PERL5LIB="$top_srcdir/lib"
+ export PERL5LIB
+ COMMAND="uscan --no-conf --compression=xz"
+fi
+
+COMMANDDEHS="$COMMAND --dehs"
+
+# comment out for debug
+#COMMAND="$COMMAND --debug"
+
+tearDown(){
+ killHttpServer
+ echo
+}
+
+trap tearDown EXIT
+
+containsName(){
+ echo "$1" | grep -qF "$2"
+ echo $?
+}
+
+makeRepo() {
+ lv="$1"
+ cmpopt1="$2"
+ lv1="$3"
+ cmpopt2="$4"
+ lv2="$5"
+ cmpopt3="$6"
+ lv3="$7"
+ cmpopt4="$8"
+ lv4="$9"
+ prev="${10}"
+ PKG=foo
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR")
+
+ mkdir -p "$TEMP_PKG_DIR"/$PKG/debian/source
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/repo/port)
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/watch
+version=4
+http://localhost:$PORT/ .*$PKG-([\d\.]+).tar.gz $lv
+
+opts="dversionmangle=auto,component=bar1$cmpopt1" http://localhost:$PORT/ .*bar1-([\d\.]+).tar.gz $lv1
+opts="dversionmangle=auto,component=bar2$cmpopt2" http://localhost:$PORT/ .*bar2-([\d\.]+).tar.gz $lv2
+opts="dversionmangle=auto,component=bar3$cmpopt3" http://localhost:$PORT/ .*bar3-([\d\.]+).tar.gz $lv3
+opts="dversionmangle=auto,component=bar4$cmpopt4" http://localhost:$PORT/ .*bar4-([\d\.]+).tar.gz $lv4
+END
+
+ cat <<END > "$TEMP_PKG_DIR"/$PKG/debian/changelog
+$PKG ($prev) unstable; urgency=medium
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+
+ echo -n '3.0 (quilt)' > "$TEMP_PKG_DIR"/$PKG/debian/source/format
+ mkdir -p "$TEMP_PKG_DIR"/repo/foo
+ touch "$TEMP_PKG_DIR"/repo/foo/content
+
+ # Upstream repo
+ ( cd "$TEMP_PKG_DIR"/repo ;
+ tar -czf $PKG-1.0.0.tar.gz $PKG/* )
+
+ for i in 1 2 3 4; do
+ # Upstream repo
+ mkdir -p "$TEMP_PKG_DIR"/repo/bar$i
+ touch "$TEMP_PKG_DIR"/repo/bar$i/content
+ ( cd "$TEMP_PKG_DIR"/repo ;
+ tar -czf bar$i-2.0.$i.tar.gz bar$i/* )
+ # Debian dir
+ mkdir $TEMP_PKG_DIR/$PKG/bar$i
+ echo '{"name":"bar'$i'","version":"'1.0.$i'"}' > $TEMP_PKG_DIR/$PKG/bar$i/package.json
+ done
+}
+
+helperDownload() {
+ next="${11}"
+ makeRepo "$@"
+
+ OUTPUT=$( cd "$TEMP_PKG_DIR"/$PKG ; $COMMANDDEHS --dehs )
+ BASETARBALL=${PKG}_$next.orig
+ assertTrue 'pristine tarball foo is not created' "[ -f "$TEMP_PKG_DIR"/$BASETARBALL.tar.gz ]"
+ assertTrue "malformed target in dehs output: $OUTPUT" \
+ $(containsName "$OUTPUT" "<target>$BASETARBALL.tar.gz</target>")
+ for i in 1 2 3 4; do
+ assertTrue "pristine tarball bar$i is not created" "[ -f "$TEMP_PKG_DIR"/$BASETARBALL-bar$i.tar.gz ]"
+ assertTrue "malformed target in dehs output: $OUTPUT" \
+ $(containsName "$OUTPUT" "<component-target>$BASETARBALL-bar$i.tar.gz</component-target>")
+ done
+ #cat "$TEMP_PKG_DIR"/$PKG/debian/watch
+}
+
+testCmpIgnore() {
+ helperDownload "debian" "" "ignore" "" "ignore" "" "ignore" "" "ignore" "0.0.1" "1.0.0"
+}
+
+testCmpGroup() {
+ helperDownload "group" "" "group" "" "group" "" "group" "" "group" "0.0.1+~1" "1.0.0+~2.0.1+~2.0.2+~2.0.3+~2.0.4"
+}
+
+testCmpGroupOneCmpChanged() {
+ helperDownload "group" "" "group" "" "group" "" "group" "" "group" "1.0.0+~2.0.1+~2.0.2+~2.0.2+~2.0.4" "1.0.0+~2.0.1+~2.0.2+~2.0.3+~2.0.4"
+}
+
+testCmpPartialGroup() {
+ helperDownload "group" "" "group" "" "group" "" "ignore" "" "ignore" "0.0.1+~1" "1.0.0+~2.0.1+~2.0.2"
+}
+
+testCmpPartialGroup2() {
+ helperDownload "group" "" "group" "" "ignore" "" "group" "" "ignore" "0.0.1+~1" "1.0.0+~2.0.1+~2.0.3"
+}
+
+testCmpChecksum() {
+ helperDownload "group" "" "checksum" "" "checksum" "" "checksum" "" "checksum" "0.0.1+~1" "1.0.0+~cs8.0.10"
+}
+
+testCmpChecksumOneCmpChanged() {
+ helperDownload "group" "" "checksum" "" "checksum" "" "checksum" "" "checksum" "1.0.0+~cs8.0.9" "1.0.0+~cs8.0.10"
+}
+
+testCmpGroupAndChecksum() {
+ helperDownload "group" "" "group" "" "checksum" "" "checksum" "" "checksum" "0.0.1+~1" "1.0.0+~2.0.1+~cs6.0.9"
+}
+
+testCmpGroupIgnoreAndChecksum() {
+ helperDownload "group" "" "group" "" "ignore" "" "checksum" "" "checksum" "0.0.1+~1" "1.0.0+~2.0.1+~cs4.0.7"
+}
+
+helperNoDownload() {
+ next="${10}"
+ makeRepo "$@"
+
+ OUTPUT=$( cd "$TEMP_PKG_DIR"/$PKG ; $COMMANDDEHS --dehs 2>&1 )
+ assertTrue "bad change detected: $OUTPUT" \
+ $(containsName "$OUTPUT" "<status>up to date</status>")
+ BASETARBALL=${PKG}_$next.orig
+ assertTrue 'pristine tarball foo is created' "[ ! -f "$TEMP_PKG_DIR"/$BASETARBALL.tar.gz ]"
+}
+
+testCmpIgnoreND() {
+ helperNoDownload "debian" "" "ignore" "" "ignore" "" "ignore" "" "ignore" "1.0.0"
+}
+
+testCmpGroupND() {
+ helperNoDownload "group" "" "group" "" "group" "" "group" "" "group" "1.0.0+~2.0.1+~2.0.2+~2.0.3+~2.0.4"
+}
+
+testCmpGroupRepackND() {
+ helperNoDownload "group" "" "group" "" "group" "" "group" "" "group" "1.0.0+~2.0.1~ds+~2.0.2+~2.0.3+~2.0.4"
+}
+
+testCmpChecksumND() {
+ helperNoDownload "group" "" "checksum" "" "checksum" "" "checksum" "" "checksum" "1.0.0+~cs8.0.10"
+}
+
+# Same test but here Ctype detects change even if previous checksum is wrong
+testCmpChecksumCtype() {
+ helperDownload "group" ",ctype=nodejs" "checksum" ",ctype=nodejs" "checksum" ",ctype=nodejs" "checksum" ",ctype=nodejs" "checksum" "1.0.0+~cs8.0.10" "1.0.0+~cs8.0.10"
+}
+
+testCmpIgnoreCtype() {
+ helperNoDownload "debian" ",ctype=nodejs" "ignore" "" "ignore" "" "ignore" "" "ignore" "1.0.0"
+ assertTrue "Component change is not detected: $OUTPUT" \
+ $(containsName "$OUTPUT" "Newest version of bar1 on remote site is 2.0.1, local version is 1.0.1")
+}
+
+. shunit2
diff --git a/test/test_uscan_mangle b/test/test_uscan_mangle
new file mode 100755
index 0000000..409e16e
--- /dev/null
+++ b/test/test_uscan_mangle
@@ -0,0 +1,1543 @@
+#!/bin/bash
+
+# Copyright (C) 2013, Rafael Laboissiere <rafael@laboissiere.net>
+#
+# 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.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+set -u
+
+TESTTYPE=Mangle
+. ./lib_test_uscan
+
+COMMAND="uscan --no-conf"
+
+# set safe defaults
+WEBSCRIPT=":"
+DEBUGECHO=":"
+DEBUGLSLR=":"
+DEBUGBASH=":"
+# comment out for debug
+#COMMAND="$COMMAND --debug"
+#COMMAND="$COMMAND --verbose"
+#DEBUGECHO=echo
+#DEBUGLSLR="ls -laR"
+#DEBUGLSLR="ls -la"
+#DEBUGBASH="bash -i"
+
+# Initial Debian revision value is distribution dependent
+SUFFIX="1"
+if command -v dpkg-vendor >/dev/null; then
+ VENDER="$(dpkg-vendor --query Vendor 2>/dev/null|tr 'A-Z' 'a-z')"
+ case "$VENDER" in
+ debian) SUFFIX="1" ;;
+ *) SUFFIX="0${VENDER}1" ;;
+ esac
+fi
+
+tearDown(){
+ killHttpServer
+ echo
+}
+
+trap tearDown EXIT
+
+containsName(){
+ echo "$1" | grep -qF "$2"
+ echo $?
+}
+
+. "${0%/*}/shunit2-helper-functions.sh"
+
+# The following tests do the following: (1) create a minimal Debian package
+# directory, containing minimal files debian/{changelog,watch,copyright},
+# (2) create a minimal repository, containing a tarball (built on the fly),
+# (3) start an HTTP server that works offline, using the SimpleHTTPServer
+# module of Python, and (4) run uscan inside that minimal universe.
+
+# make debian/ in `pwd`
+# debian/watch contains $WATCHVER and $WATCHLINE with template URL updated
+makeDebianDir() {
+ DEBNAME=${1:-foo} # Debian source package name
+ DEBVER=${2:-1.0} # Debian source package version
+ mkdir -p debian/source
+
+ cat <<END > debian/rules
+%:
+ dh $@
+END
+chmod 755 debian/rules
+
+ cat <<END > debian/changelog
+$DEBNAME ($DEBVER) unstable; urgency=low
+
+ * Release of the $DEBNAME package $DEBVER.
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+ # debian/source/format
+ case $DEBVER in
+ *-*) # non-native package
+ echo "3.0 (quilt)" > debian/source/format
+ ;;
+ *) # native package
+ echo "3.0 (native)" > debian/source/format
+ ;;
+ esac
+ # debian/copyright
+ echo "Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/" \
+ > debian/copyright
+ if [ "${FILEEXCLUDE:-0}" = "1" ]; then
+ # exclude just for main
+ cat <<'END' >> debian/copyright
+Files-Excluded: exclude-this
+ */exclude-dir
+ .*
+ */js/jquery.js
+ ;?echo?baz;?#
+END
+ elif [ "${FILEEXCLUDE:-0}" = "2" ]; then
+ # exclude for main(=foo) bar baz
+ cat <<'END' >> debian/copyright
+Files-Excluded: exclude-this
+ */exclude-dir
+ .*
+ */js/jquery.js
+ ;?echo?baz;?#
+Files-Excluded-bar: exclude-this
+ */exclude-dir
+ .*
+ */js/jquery.js
+ ;?echo?baz;?#
+Files-Excluded-baz: exclude-this
+ */exclude-dir
+ .*
+ */js/jquery.js
+ ;?echo?baz;?#
+END
+ elif [ "${FILEEXCLUDE:-0}" = "3" ]; then
+ # exclude for foo bar baz
+ cat <<'END' >> debian/copyright
+Files-Excluded-foo: exclude-this
+ */exclude-dir
+ .*
+ */js/jquery.js
+ ;?echo?baz;?#
+Files-Excluded-bar: exclude-this
+ */exclude-dir
+ .*
+ */js/jquery.js
+ ;?echo?baz;?#
+Files-Excluded-baz: exclude-this
+ */exclude-dir
+ .*
+ */js/jquery.js
+ ;?echo?baz;?#
+END
+ fi
+ # debian/watch
+ echo "version=$WATCHVER" > debian/watch
+ echo "$WATCHLINE" | sed -e "s,@@@url@@@,http://localhost:${PORT}/,g" - \
+ >> debian/watch
+ # debian/upstream/signing-key.asc
+ mkdir -p debian/upstream
+ if [ "$KEYMODE" = "ASC" ]; then
+ cp -f $test_dir/uscan/PUBLIC_KEY.asc debian/upstream/signing-key.asc
+ else
+ cp -f "$GPGHOME/pubring.gpg" debian/upstream/signing-key.pgp
+ fi
+}
+
+
+# make tarball in $REPOPATH/$POOLPATH
+makeUpstreamTar() {
+ UPNAME=${1:-foo} # Upstream package name
+ UPVER=${2:-1.0} # upstream package version
+ COMPRESSION=${3:-gz} # archve compression type
+ TYPE=${4:-non-native} # set this if native-type upstream
+ OLDDIR=`pwd`
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH/$UPNAME-$UPVER
+ cd "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH
+ touch $UPNAME-$UPVER/FILE.$UPNAME.$UPVER
+ touch $UPNAME-$UPVER/include-this
+ touch $UPNAME-$UPVER/exclude-this
+ touch $UPNAME-$UPVER/.hidden
+ mkdir -p "$UPNAME-$UPVER/; echo baz; #/"
+ mkdir -p $UPNAME-$UPVER/exclude-dir
+ touch $UPNAME-$UPVER/exclude-dir/file
+ mkdir -p $UPNAME-$UPVER/subdir/exclude-dir
+ touch $UPNAME-$UPVER/subdir/exclude-dir/file2
+ mkdir -p $UPNAME-$UPVER/docs/html/js/
+ touch $UPNAME-$UPVER/docs/html/js/jquery.js
+ if [ "$TYPE" = "native" ]; then
+ cd "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH/$UPNAME-$UPVER
+ makeDebianDir $UPNAME $UPVER
+ cd "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH
+ fi
+ case $COMPRESSION in
+ gz|gzip)
+ NEWTAR=$UPNAME-$UPVER.tar.gz
+ tar -czf $NEWTAR $UPNAME-$UPVER
+ ;;
+ bz2|bzip2)
+ NEWTAR=$UPNAME-$UPVER.tar.bz2
+ tar --bzip2 -cf $NEWTAR $UPNAME-$UPVER
+ ;;
+ xz)
+ NEWTAR= $UPNAME-$UPVER.tar.xz
+ tar --xz -cf $NEWTAR $UPNAME-$UPVER
+ ;;
+ zip)
+ NEWTAR=$UPNAME-$UPVER.zip
+ zip -r $NEWTAR $UPNAME-$UPVER
+ ;;
+ *) echo "Wrong compression mode: $COMPRESSION"
+ exit 1
+ ;;
+ esac
+ case "${SIGMODE:-}" in # undefined SIGMODE → no sig
+ ASC) # make $NEWTAR.asc
+ $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --secret-keyring $PRIVATE_KEYRING --default-key 72543FAF \
+ --armor --detach-sign $NEWTAR
+ ;;
+ BIN) #make $NEWTAR.sig
+ $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --secret-keyring $PRIVATE_KEYRING --default-key 72543FAF \
+ --detach-sign $NEWTAR
+ ;;
+ SELF) #make $NEWTAR.gpg
+ $GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
+ --secret-keyring $PRIVATE_KEYRING --default-key 72543FAF \
+ --sign $NEWTAR
+ esac
+
+ cd $OLDDIR
+}
+
+# setup a common watch file test environment
+helperWatch() {
+ local SITESCRIPT=${1:-siteWebNonNative}
+ local VEROLD=${2:-1.0}
+ local VERNEW=${3:-2.0}
+ local PREFIX="${4:-}"
+ TEMP_PKG_DIR=${TEMP_PKG_DIR:-$(mktemp -d -p "$SHUNIT_TMPDIR" uscan_mangle.XXXXXX)}
+ ORIGDIR=`pwd`
+ PKG=${PKG:-foo}
+ REPOPATH=${REPOPATH:-repo}
+ POOLPATH=${POOLPATH:-pool}
+ MGZREPACK=${MGZREPACK:-gz}
+ XCOMMAND=${XCOMMAND:-$COMMAND}
+ WATCHVER="${WATCHVER:-3}"
+ WATCHLINE0="@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate"
+ WATCHLINE="${WATCHLINE:-$WATCHLINE0}"
+ COMPONENTS=${COMPONENTS:-}
+ FILEEXCLUDE=${FILEEXCLUDE:-0} # no exclude
+ FILENAMEMANGLE=${FILENAMEMANGLE:-}
+ SIGMODE=${SIGMODE:-ASC} # ASC=ASCII or BIN=BINARY or SELF
+ KEYMODE=${KEYMODE:-ASC} # ASC=ASCII AEMORED or BIN=DEARMORED BINARY
+ cd "$TEMP_PKG_DIR"
+ # start HTTP server with its root at "$TEMP_PKG_DIR"/$REPOPATH
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/$REPOPATH/port)
+ $DEBUGECHO " ***** http://localhost:$PORT started showing "$TEMP_PKG_DIR"/$REPOPATH *****"
+ # make web site
+ $SITESCRIPT
+ # make local $VEROLD source tree
+ tar -xzf "$TEMP_PKG_DIR"/$REPOPATH/$POOLPATH/${PKG}-${VEROLD}.tar.gz
+ if [ -n "$PREFIX" ]; then
+ mv "$TEMP_PKG_DIR"/${PKG}-${VEROLD} "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VEROLD}
+ fi
+ mv "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VEROLD} "$TEMP_PKG_DIR"/${PKG}
+ cd "$TEMP_PKG_DIR"/${PKG}
+ if [ ! -d debian ]; then
+ makeDebianDir $PKG ${PREFIX}${VEROLD}-$SUFFIX
+ fi
+ local UUPDATE=""
+ if grep -q "uupdate" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then
+ UUPDATE=uupdate
+ fi
+ local PGP=""
+ if grep -q "pgpurlmangle" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then
+ PGP=pgp
+ fi
+ if grep -q "pgpmode *= *auto" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then
+ PGP=pgp
+ fi
+ if grep -q "pgpmode *= *previous" "$TEMP_PKG_DIR"/${PKG}/debian/watch ; then
+ PGP=pgp
+ fi
+ $XCOMMAND
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "$?" "0"
+ cd "$TEMP_PKG_DIR"
+ $DEBUGLSLR
+ UTARBALL=${PKG}-${UVERSION:-${VERNEW}}.tar.gz
+ if [[ "$FILENAMEMANGLE" != *"$PKG"* ]]; then
+ UTARBALL=${PKG}-${UVERSION:-${VERNEW}}.tar.gz
+ else
+ UTARBALL=${PKG}-${UVERSION:-${VERNEW}}-filenamemangle.tar.gz
+ fi
+ STARBALL=${PKG}_${PREFIX}${VERNEW}.orig.tar.$MGZREPACK
+ if [ ! -f $STARBALL ]; then
+ # testWatch4WebNonNativeMUT0() only repacks its component tarballs. It does
+ # not repack the main upstream tarball, which is the usual behaviour when
+ # excluding files from the upstream source. This means we need to find the
+ # upstream tarball.
+ STARBALL=${PKG}_${PREFIX}${VERNEW}.orig.tar.gz
+ fi
+ assertTrue "$UTARBALL missing: $WATCHLINE" "[ -f $UTARBALL ]"
+ assertTrue "$STARBALL missing: $WATCHLINE" "[ -f $STARBALL ]"
+ if [ "$PGP" = "pgp" ]; then
+ UTARSIG=${PKG}-${UVERSION:-${VERNEW}}.tar.gz.sig
+ if [ ! -f $UTARSIG ]; then
+ UTARSIG=${PKG}-${UVERSION:-${VERNEW}}.tar.gz.asc
+ fi
+ STARSIG=${PKG}_${PREFIX}${VERNEW}.orig.tar.$MGZREPACK.asc
+ assertTrue "$UTARSIG and *.sig missing: $WATCHLINE" "[ -f $UTARSIG ]"
+ assertTrue "$STARSIG missing: $WATCHLINE" "[ -f $STARSIG ]"
+ fi
+ for cpnt in $COMPONENTS; do
+ if [[ "$FILENAMEMANGLE" != *"$cpnt"* ]]; then
+ UTARBALL=${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz
+ else
+ UTARBALL=${PKG}-${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz
+ fi
+ STARBALL=${PKG}_${PREFIX}${VERNEW}.orig-${cpnt}.tar.$MGZREPACK
+ assertTrue "$UTARBALL missing: $WATCHLINE" "[ -f $UTARBALL ]"
+ assertTrue "$STARBALL missing: $WATCHLINE" "[ -f $STARBALL ]"
+ if [ "$PGP" = "pgp" ]; then
+ UTARSIG=${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz.sig
+ if [ ! -f $UTARSIG ]; then
+ UTARSIG=${cpnt}-${CMPVERSION:-${VERNEW}}.tar.gz.asc
+ fi
+ STARSIG=${PKG}_${PREFIX}${VERNEW}.orig-${cpnt}.tar.$MGZREPACK.asc
+ assertTrue "$UTARSIG and *.sig missing: $WATCHLINE" "[ -f $UTARSIG ]"
+ # Skipping this: signature link skipped when upstream file is repacked
+ #assertTrue "$STARSIG missing: $WATCHLINE" "[ -f $STARSIG ]"
+ fi
+ done
+ # check uupdate
+ if [ "$UUPDATE" = "uupdate" ]; then
+ cd "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VERNEW}
+ assertTrue 'pristine tarball is not extracted' "[ -f debian/changelog ]"
+ DVERSION=`dpkg-parsechangelog -ldebian/changelog -SVersion`
+ assertEquals "uscan: Version should be ${PREFIX}${VERNEW}-$SUFFIX but $DVERSION" "$DVERSION" "${PREFIX}${VERNEW}-$SUFFIX"
+ if [ "$FILEEXCLUDE" != "3" ]; then
+ # main is dummy
+ assertTrue 'file that must be present is excluded in the tarball' '[ -f include-this ]'
+ fi
+ if [ "$FILEEXCLUDE" = "1" ] || [ "$FILEEXCLUDE" = "2" ]; then
+ assertFalse "file that must be excluded is present in the tarball" '[ -f exclude-this ]'
+ assertFalse "hidden file that must be excluded is present in the tarball" '[ -f .hidden ]'
+ assertFalse "dir that must be excluded is present in the tarball" '[ -d exclude-dir ]'
+ assertFalse "subdir that must be excluded is present in the tarball" '[ -d subdir/exclude-dir ]'
+ CONTENTS=$(ls -R)
+ assertFalse "non-root-file that must be excluded is present in the tarball" \
+ $(containsName "$CONTENTS" jquery.js)
+ assertFalse "path with whitespace that must be excluded is present in the tarball" \
+ $(containsName "$CONTENTS" "; echo baz; #/")
+ fi
+ for c in $COMPONENTS ; do
+ cd "$TEMP_PKG_DIR"/${PKG}-${PREFIX}${VERNEW}/$c
+ assertTrue 'file that must be present is excluded in the tarball' '[ -f include-this ]'
+ if [ "$FILEEXCLUDE" = "1" ] || [ "$FILEEXCLUDE" = "2" ]; then
+ assertFalse "file that must be excluded is present in the orig-$c.tar" '[ -f exclude-this ]'
+ assertFalse "hidden file that must be excluded is present in the orig-$c.tar" '[ -f .hidden ]'
+ assertFalse "dir that must be excluded is present in the orig-$c.tar" '[ -d exclude-dir ]'
+ assertFalse "subdir that must be excluded is present in the orig-$c.tar" '[ -d subdir/exclude-dir ]'
+ CONTENTS=$(ls -R)
+ assertFalse "non-root-file that must be excluded is present in the orig-$c.tar" \
+ $(containsName "$CONTENTS" jquery.js)
+ assertFalse "path with whitespace that must be excluded is present in the orig-$c.tar" \
+ $(containsName "$CONTENTS" "; echo baz; #/")
+ fi
+ done
+ cd "$TEMP_PKG_DIR"
+ fi
+ $DEBUGBASH
+ cd $ORIGDIR
+ unset REPOPATH
+ unset POOLPATH
+ unset MGZREPACK
+ unset XCOMMAND
+ unset WATCHVER
+ unset WATCHLINE
+ unset COMPONENTS
+ unset FILEEXCLUDE
+ unset FILENAMEMANGLE
+ unset SIGMODE
+ unset KEYMODE
+}
+
+# setup a common watch file test environment to see user-agent
+helperWatchUA() {
+ local SITESCRIPT=${1:-siteWebNonNative}
+ TEMP_PKG_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR" uscan_mangle.XXXXXX)
+ ORIGDIR=`pwd`
+ PKG=${PKG:-foo}
+ REPOPATH=${REPOPATH:-repo}
+ POOLPATH=${POOLPATH:-pool}
+ XCOMMAND=${XCOMMAND:-$COMMAND}
+ WATCHVER="${WATCHVER:-3}"
+ WATCHLINE0="@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate"
+ WATCHLINE="${WATCHLINE:-$WATCHLINE0}"
+ KEYMODE=${KEYMODE:-ASC} # ASC=ASCII AEMORED or BIN=DEARMORED BINARY
+ cd "$TEMP_PKG_DIR"
+ # start HTTP server with its root at "$TEMP_PKG_DIR"/$REPOPATH
+ spawnHttpServer
+ PORT=$(cat "$TEMP_PKG_DIR"/$REPOPATH/port)
+ $DEBUGECHO " ***** http://localhost:$PORT started showing "$TEMP_PKG_DIR"/$REPOPATH *****"
+ # make web site
+ $SITESCRIPT
+ # make local $VEROLD source tree
+ mkdir -p "$TEMP_PKG_DIR"/${PKG}
+ cd "$TEMP_PKG_DIR"/${PKG}
+ if [ ! -d debian ]; then
+ makeDebianDir $PKG 1.0-$SUFFIX
+ fi
+ $XCOMMAND
+ USERAGENTX="$(grep -ie '^User-Agent:' ../repo/log |head -1 | perl -p -e "s/\r//g" )"
+ assertTrue "Bad $USERAGENTX" "[ \"$USERAGENTX\" = \"User-Agent: $USERAGENT\" ]"
+ echo "SENT: \"User-Agent: $USERAGENT\""
+ echo "GOT : \"$USERAGENTX\""
+ $DEBUGBASH
+ cd $ORIGDIR
+ unset REPOPATH
+ unset POOLPATH
+ unset XCOMMAND
+ unset WATCHVER
+ unset WATCHLINE
+ unset KEYMODE
+}
+
+# populate pool directory
+siteNative() {
+ local PKG=${1:-foo}
+ makeUpstreamTar $PKG 0.0 gz native
+ makeUpstreamTar $PKG 1.0 gz native
+ makeUpstreamTar $PKG 2.0 gz native
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz
+}
+
+siteNonNative() {
+ local PKG=${1:-foo}
+ local EXTRA=${2:-}
+ makeUpstreamTar $PKG 0.0 gz non-native
+ makeUpstreamTar $PKG 1.0 gz non-native
+ makeUpstreamTar $PKG 2.0 gz non-native
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/
+ if [ -n "$EXTRA" ]; then
+ makeUpstreamTar $PKG 3.0 gz non-native
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/
+ fi
+ if [ "${SIGMODE:-}" = "ASC" ]; then
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.asc
+ if [ -n "$EXTRA" ]; then
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.asc
+ fi
+ elif [ "${SIGMODE:-}" = "BIN" ]; then
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.sig
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.sig
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.sig
+ if [ -n "$EXTRA" ]; then
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.sig
+ fi
+ elif [ "${SIGMODE:-}" = "SELF" ]; then
+ ln -sf ../../../$POOLPATH/${PKG}-0.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/0.0/$PKG/ooo/${PKG}-0.0.tar.gz.gpg
+ ln -sf ../../../$POOLPATH/${PKG}-1.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/1.0/$PKG/ooo/${PKG}-1.0.tar.gz.gpg
+ ln -sf ../../../$POOLPATH/${PKG}-2.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/2.0/$PKG/ooo/${PKG}-2.0.tar.gz.gpg
+ if [ -n "$EXTRA" ]; then
+ ln -sf ../../../$POOLPATH/${PKG}-3.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/3.0/$PKG/ooo/${PKG}-3.0.tar.gz.gpg
+ fi
+ fi
+}
+
+# hide siteNative behind a web page
+siteWebNative() {
+ siteNative
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/2.0/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
+</body>
+<html>
+END
+}
+
+siteWebNonNative() {
+ siteNonNative
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/2.0/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
+</body>
+<html>
+END
+}
+
+siteWebNonNativeRecWithBase() {
+ siteNonNative "$@"
+ for DIR in "$TEMP_PKG_DIR"/$REPOPATH/[0-9].*; do
+ [ -d "$DIR" ] && cat <<END > "$DIR"/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+<base href="/${DIR##*/}/foo/ooo/x.html"/>
+</head>
+<body>
+<a href="foo-${DIR##*/}.tar.gz">Blah</a> <br/ >
+</body>
+<html>
+END
+ done
+}
+
+siteWebNonNativeR() {
+ makeUpstreamTar foo 0.0 gz non-native
+ makeUpstreamTar foo 1.0 gz non-native
+ makeUpstreamTar foo 2.0 gz non-native
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/123/foo/ooo/
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/124/foo/ooo/
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/125/foo/ooo/
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/
+ mkdir -p "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/
+ if [ "$SIGMODE" = "ASC" ]; then
+ ln -sf ../../../$POOLPATH/foo-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/125/foo/ooo/foo-0.0.tar.gz
+ ln -sf ../../../$POOLPATH/foo-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/124/foo/ooo/foo-1.0.tar.gz
+ ln -sf ../../../$POOLPATH/foo-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/123/foo/ooo/foo-2.0.tar.gz
+ ln -sf ../../../$POOLPATH/foo-0.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/foo-0.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/foo-1.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/foo-1.0.tar.gz.asc
+ ln -sf ../../../$POOLPATH/foo-2.0.tar.gz.asc "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/foo-2.0.tar.gz.asc
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/125/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/124/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/123/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
+<a href="/325/foo/ooo/foo-0.0.tar.gz.asc">Very old sig</a> <br/ >
+<a href="/424/foo/ooo/foo-1.0.tar.gz.asc">A bit OLD sig</a> <br />
+<a href="/523/foo/ooo/foo-2.0.tar.gz.asc">Latest sig</a> <br />
+</body>
+<html>
+END
+ elif [ "$SIGMODE" = "BIN" ]; then
+ ln -sf ../../../$POOLPATH/foo-0.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/125/foo/ooo/foo-0.0.tar.gz
+ ln -sf ../../../$POOLPATH/foo-1.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/124/foo/ooo/foo-1.0.tar.gz
+ ln -sf ../../../$POOLPATH/foo-2.0.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/123/foo/ooo/foo-2.0.tar.gz
+ ln -sf ../../../$POOLPATH/foo-0.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/foo-0.0.tar.gz.sig
+ ln -sf ../../../$POOLPATH/foo-1.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/foo-1.0.tar.gz.sig
+ ln -sf ../../../$POOLPATH/foo-2.0.tar.gz.sig "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/foo-2.0.tar.gz.sig
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/125/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/124/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/123/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
+<a href="/325/foo/ooo/foo-0.0.tar.gz.sig">Very old sig</a> <br/ >
+<a href="/424/foo/ooo/foo-1.0.tar.gz.sig">A bit OLD sig</a> <br />
+<a href="/523/foo/ooo/foo-2.0.tar.gz.sig">Latest sig</a> <br />
+</body>
+<html>
+END
+ elif [ "$SIGMODE" = "SELF" ]; then
+ ln -sf ../../../$POOLPATH/foo-0.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/325/foo/ooo/foo-0.0.tar.gz.gpg
+ ln -sf ../../../$POOLPATH/foo-1.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/424/foo/ooo/foo-1.0.tar.gz.gpg
+ ln -sf ../../../$POOLPATH/foo-2.0.tar.gz.gpg "$TEMP_PKG_DIR"/$REPOPATH/523/foo/ooo/foo-2.0.tar.gz.gpg
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/125/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/124/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/123/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
+<a href="/325/foo/ooo/foo-0.0.tar.gz.gpg">Very old sig</a> <br/ >
+<a href="/424/foo/ooo/foo-1.0.tar.gz.gpg">A bit OLD sig</a> <br />
+<a href="/523/foo/ooo/foo-2.0.tar.gz.gpg">Latest sig</a> <br />
+</body>
+<html>
+END
+ fi
+}
+
+sitePrWebNonNative() {
+ siteNonNative
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/0.0/boo/xxx/boo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/boo/xxx/boo-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/2.0/boo/xxx/boo-2.0.tar.gz">Latest</a> <br />
+</body>
+<html>
+END
+}
+
+siteWebNonNativeLarge() {
+ makeUpstreamTar foo 19990101 gz non-native
+ makeUpstreamTar foo 20000101 gz non-native
+ makeUpstreamTar foo 20010101 gz non-native
+ mkdir -p $REPOPATH/0.0/foo/ooo/
+ mkdir -p $REPOPATH/1.0/foo/ooo/
+ mkdir -p $REPOPATH/2.0/foo/ooo/
+ ln -sf ../../../$POOLPATH/foo-19990101.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/0.0/foo/ooo/foo-19990101.tar.gz
+ ln -sf ../../../$POOLPATH/foo-20000101.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/1.0/foo/ooo/foo-20000101.tar.gz
+ ln -sf ../../../$POOLPATH/foo-20010101.tar.gz "$TEMP_PKG_DIR"/$REPOPATH/2.0/foo/ooo/foo-20010101.tar.gz
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/0.0/foo/ooo/foo-19990101.tar.gz">Very old</a> <br/ >
+<a href="/1.0/foo/ooo/foo-20000101.tar.gz">A bit OLD</a> <br />
+<a href="/2.0/foo/ooo/foo-20010101.tar.gz">Latest</a> <br />
+</body>
+<html>
+END
+}
+
+siteXmlNonNative() {
+ siteNonNative
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<Key>/0.0/foo/ooo/foo-0.0.tar.gz</Key> <br/ >
+<Key>/1.0/foo/ooo/foo-1.0.tar.gz</Key> <br />
+<Key>/2.0/foo/ooo/foo-2.0.tar.gz</Key> <br />
+</body>
+<html>
+END
+}
+
+siteWebNonNativeMUT() {
+ siteNonNative foo
+ siteNonNative bar EXTRA
+ siteNonNative baz EXTRA
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/foo/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/2.0/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
+<a href="/2.0/foo/ooo/foo-2.0.tar.gz.asc">Latest sig</a> <br />
+<a href="/0.0/bar/ooo/bar-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/bar/ooo/bar-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/2.0/bar/ooo/bar-2.0.tar.gz">Latest</a> <br />
+<a href="/3.0/bar/ooo/bar-3.0.tar.gz">OOPS Latest</a> <br />
+<a href="/3.0/bar/ooo/bar-3.0.tar.gz.asc">Latest sig</a> <br />
+<a href="/0.0/baz/ooo/baz-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/baz/ooo/baz-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/2.0/baz/ooo/baz-2.0.tar.gz">Latest</a> <br />
+<a href="/3.0/baz/ooo/baz-3.0.tar.gz">OOPS Latest</a> <br />
+<a href="/3.0/baz/ooo/baz-3.0.tar.gz.asc">Latest sig</a> <br />
+</body>
+<html>
+END
+}
+
+siteWebNonNativeMUT_filenamemangle() {
+ siteNonNative foo
+ siteNonNative bar EXTRA
+ siteNonNative baz EXTRA
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/foo/ooo/foo-1.0.tar.gz">A bit old</a> <br />
+<a href="/2.0/foo/ooo/foo-2.0.tar.gz">Latest</a> <br />
+<a href="/2.0/foo/ooo/foo-2.0.tar.gz.asc">Latest sig</a> <br />
+<a href="/0.0/bar/ooo/bar-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/bar/ooo/bar-1.0.tar.gz">A bit old</a> <br />
+<a href="/2.0/bar/ooo/bar-2.0.tar.gz">Latest</a> <br />
+<a href="/3.0/bar/ooo/bar-2.0.tar.gz.asc">Latest sig</a> <br />
+<a href="/0.0/baz/ooo/baz-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/baz/ooo/baz-1.0.tar.gz">A bit old</a> <br />
+<a href="/2.0/baz/ooo/baz-2.0.tar.gz">Latest</a> <br />
+<a href="/3.0/baz/ooo/baz-2.0.tar.gz.asc">Latest sig</a> <br />
+</body>
+<html>
+END
+}
+
+siteWebNonNativeGetOnlyHref() {
+ siteNonNative foo
+ cat <<END > "$TEMP_PKG_DIR"/$REPOPATH/index.html
+<html>
+<head>
+ <meta charset="utf-8">
+</head>
+<body>
+<a href="/0.0/foo/ooo/foo-0.0.tar.gz">Very old</a> <br/ >
+<a href="/1.0/bar/ooo/foo-1.0.tar.gz">A bit OLD</a> <br />
+<a href="/2.0/foo/ooo/foo-2.0.tar.gz" data-foobar-href="">Latest</a> <br />
+<aueu href="/2.0/foo/ooo/foo-3.0.tar.gz" data-foobar-href="">Nothing here</a> <br />
+</body>
+<html>
+END
+}
+
+# test a watch files
+
+### VERSION3 ###
+# version locking calls suffer changes due to uupdate calling differences
+
+# test --download-current-version
+testWatch3WebNonNativeDlCurrent() {
+ WATCHVER=3
+ XCOMMAND="$COMMAND --download-current-version"
+ WATCHLINE='@@@url@@@/ (?:.*)/foo-([\.\d]+).tar.gz debian uupdate'
+ helperWatch siteWebNonNative 1.0 1.0
+}
+
+# test --download-version
+testWatch3WebNonNativeDlUversion() {
+ WATCHVER=3
+ XCOMMAND="$COMMAND --download-version 0.0"
+ WATCHLINE='@@@url@@@/ (?:.*)/foo-([\.\d]+).tar.gz debian uupdate'
+ helperWatch siteWebNonNative 1.0 0.0
+}
+
+# test --download-debversion uupdate
+testWatch3WebNonNativeDlDversion() {
+ WATCHVER=3
+ XCOMMAND="$COMMAND --download-debversion 0.0-1"
+ WATCHLINE='@@@url@@@/ (?:.*)/foo-([\.\d]+).tar.gz debian uupdate'
+ helperWatch siteWebNonNative 1.0 0.0
+}
+
+### VERSION 4 ###
+# standard tests
+
+# test native package w/o uupdate, bare HTTP server in normal order
+testWatch4Native() {
+ WATCHVER=4
+ WATCHLINE='@@@url@@@/([\.\d]+)/(.+)/(.+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
+ helperWatch siteNative
+}
+
+# test non-native package with uupdate, bare HTTP server in normal order
+testWatch4NonNative() {
+ WATCHVER=4
+ WATCHLINE='@@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteNonNative
+}
+
+# test non-native package with uupdate, bare HTTP server with dirversionmangle
+testWatch4NonNativeDMangle() {
+ WATCHVER=4
+ WATCHLINE='opts="dirversionmangle=s/^\d*[13579]\./0~$&/, uversionmangle=s/^\d*[13579]\./0~$&/" @@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch "siteNonNative foo EXTRA"
+}
+
+# ... and without dirversionmangle, should return version 3
+testWatch4NonNativeDMangleWithoutD() {
+ WATCHVER=4
+ WATCHLINE='@@@url@@@([\.\d]+)/(.+)/(.+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch "siteNonNative foo EXTRA" 1.0 3.0
+}
+
+# test non-native package with uupdate, bare HTTP server with dirversionmangle and base
+testWatch4NonNativeDMangleB() {
+ WATCHVER=4
+ WATCHLINE='opts="dirversionmangle=s/^\d*[13579]\./0~$&/, uversionmangle=s/^\d*[13579]\./0~$&/" @@@url@@@([\.\d]+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch "siteWebNonNativeRecWithBase foo EXTRA"
+}
+
+# ... and without dirversionmangle, should return version 3
+testWatch4NonNativeDMangleBWithoutD() {
+ WATCHVER=4
+ WATCHLINE='@@@url@@@([\.\d]+)/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch "siteWebNonNativeRecWithBase foo EXTRA" 1.0 3.0
+}
+
+# test 3 parameter watch line
+testWatch4WebNative() {
+ WATCHVER=4
+ WATCHLINE='@@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
+ helperWatch siteWebNative
+}
+
+# test normal web page
+testWatch4WebNonNative() {
+ WATCHVER=4
+ helperWatch
+}
+
+# test normal web page (Files-exclude)
+testWatch4WebNonNativeFE() {
+ MGZREPACK=xz
+ FILEEXCLUDE=1
+ WATCHVER=4
+ helperWatch
+}
+
+# test normal web page (file path reverse order)
+testWatch4WebNonNativeR() {
+ WATCHVER=4
+ helperWatch siteWebNonNativeR
+}
+
+# test for downloadurlmangle and filenamemangle for tricky web page
+testWatch4PrWebNonNative() {
+ WATCHVER=4
+ WATCHLINE='opts="downloadurlmangle = s%boo/xxx%@PACKAGE@/ooo% ; s%boo-%@PACKAGE@-%, \
+ filenamemangle = s%.*boo-(.*)%@PACKAGE@-$1% " \
+ @@@url@@@/ (?:.*)/boo@ANY_VERSION@@ARCHIVE_EXT@ \
+ debian uupdate'
+ helperWatch sitePrWebNonNative
+}
+
+# test --download-current-version
+testWatch4NonNativeDlCurrent() {
+ WATCHVER=4
+ XCOMMAND="$COMMAND --download-current-version"
+ WATCHLINE='@@@url@@@/([\d\.]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteNonNative 1.0 1.0
+}
+
+# test --download-version
+testWatch4NonNativeDlUversion() {
+ WATCHVER=4
+ XCOMMAND="$COMMAND --download-version 0.0"
+ WATCHLINE='@@@url@@@/([\d\.]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteNonNative 1.0 0.0
+}
+
+# test --download-debversion uupdate
+testWatch4NonNativeDlDversion() {
+ WATCHVER=4
+ XCOMMAND="$COMMAND --download-debversion 0.0-1"
+ WATCHLINE='@@@url@@@/([\d\.]+)/@PACKAGE@/ooo/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteNonNative 1.0 0.0
+}
+
+# test --download-current-version
+testWatch4WebNonNativeDlCurrent() {
+ WATCHVER=4
+ XCOMMAND="$COMMAND --download-current-version"
+ WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteWebNonNative 1.0 1.0
+}
+
+# test --download-version
+testWatch4WebNonNativeDlUversion() {
+ WATCHVER=4
+ XCOMMAND="$COMMAND --download-version 0.0"
+ WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteWebNonNative 1.0 0.0
+}
+
+# test --download-debversion uupdate
+testWatch4WebNonNativeDlDversion() {
+ WATCHVER=4
+ XCOMMAND="$COMMAND --download-debversion 0.0-1"
+ WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteWebNonNative 1.0 0.0
+}
+
+# Debian version is 0.19990101 for future proof while upstream is 19990101
+testWatch4WebNonNativeLarge() {
+ WATCHVER=4
+ WATCHLINE='opts=" dversionmangle = s/0\.(.*)/$1/ , \
+ oversionmangle = s/(.*)/0.$1/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteWebNonNativeLarge 20000101 20010101 0.
+}
+
+# test for pagemangle
+testWatch4XmlNonNative() {
+ WATCHVER=4
+ WATCHLINE='opts="pagemangle = \
+ s%<Key>([^<]*)</Key>%<Key><a href=\"$1\">$1</a></Key>%g" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteXmlNonNative
+}
+
+# test user-agent string setting via opts=
+testWatch4WebNonNativeUA() {
+ WATCHVER=4
+ KEYMODE=BIN
+ USERAGENT="foo/bar; baz:12,3.45"
+ WATCHLINE='opts="useragent= '$USERAGENT' "'" \
+"'@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatchUA
+ unset USERAGENT
+}
+
+# test repack and compression
+testWatch4WebNonNativeBZ2() {
+ WATCHVER=4
+ WATCHLINE='opts=repack,compression=bz2 @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ MGZREPACK=bz2
+ helperWatch
+}
+
+# test repack and compression
+testWatch4WebNonNativeXZ() {
+ MGZREPACK=xz
+ WATCHVER=4
+ WATCHLINE='opts=repack,compression=xz @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch
+}
+
+# test spaces everywhere
+testWatch4PrWebNonNativeXZ() {
+ MGZREPACK=xz
+ WATCHVER=4
+ WATCHLINE='opts = "downloadurlmangle = s%boo/xxx%@PACKAGE@/ooo% ; s%boo-%@PACKAGE@-%, \
+ filenamemangle = s%.*boo-(.*)%@PACKAGE@-$1% , \
+ repack , compression=xz" \
+ @@@url@@@/ (?:.*)/boo@ANY_VERSION@@ARCHIVE_EXT@ \
+ debian uupdate'
+ helperWatch sitePrWebNonNative
+}
+
+# test get strictly href from links and not something like foo-href. See #904578 and MR !25
+testWatchGetOnlyHref() {
+ WATCHVER=4
+ WATCHLINE='@@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch siteWebNonNativeGetOnlyHref 1.0 2.0
+}
+
+### VERSION 4 with sig check ###
+
+# test normal web page with sig(asc)
+testWatch4WebNonNativeSig() {
+ WATCHVER=4
+ WATCHLINE='opts = "pgpsigurlmangle = s%(.*)%$1.asc%" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch
+}
+
+# test normal web page with sig(asc) with < and >
+testWatch4WebNonNativeSigAngleBraket() {
+ WATCHVER=4
+ WATCHLINE='opts = "pgpsigurlmangle = s<(.*)><$1.asc>" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch
+}
+
+# test normal web page with sig(asc) with < and > with space
+testWatch4WebNonNativeSigAngleBraketSpace() {
+ WATCHVER=4
+ WATCHLINE='opts = "pgpsigurlmangle = s<(.*)> <$1.asc>" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch
+}
+
+# test normal web page with sig(asc) with < and > with tab
+testWatch4WebNonNativeSigAngleBraketTab() {
+ WATCHVER=4
+ WATCHLINE='opts = "pgpsigurlmangle = s<(.*)> <$1.asc>" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch
+}
+
+# test normal web page with sig(asc) with [ and ]
+testWatch4WebNonNativeSigSquareBraket() {
+ WATCHVER=4
+ WATCHLINE='opts = "pgpsigurlmangle = s[(.*)][$1.asc]" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch
+}
+
+# test normal web page with sig(asc) with { and }
+testWatch4WebNonNativeSigCurlyBraket() {
+ WATCHVER=4
+ WATCHLINE='opts = "pgpsigurlmangle = s{(.*)}{$1.asc}" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch
+}
+
+# test normal web page with sig(asc) - auto
+testWatch4WebNonNativeSigAuto() {
+ WATCHVER=4
+ WATCHLINE='opts = "pgpmode = auto" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate'
+ helperWatch
+}
+
+# test normal web page with sig(bin) (Files-exclude)
+testWatch4WebNonNativeFESig() {
+ MGZREPACK=xz
+ FILEEXCLUDE=1
+ WATCHVER=4
+ SIGMODE=BIN
+ KEYMODE=BIN
+ WATCHLINE='opts = "pgpsigurlmangle = s%(.*)%$1.sig%" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ \
+ debian uupdate'
+ helperWatch
+}
+
+# test normal web page with sig (different file path for sig and tar; reverse order)
+testWatch4WebNonNativeRSig() {
+ WATCHVER=4
+ WATCHLINE='opts = "pgpmode=next" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts = "pgpmode=previous" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.asc previous uupdate'
+ helperWatch siteWebNonNativeR
+}
+
+# test normal web page with sig (different file path for sig and tar; reverse order, BIN)
+testWatch4WebNonNativeRSigBIN() {
+ WATCHVER=4
+ SIGMODE=BIN
+ WATCHLINE='opts = "pgpmode=next" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts = "pgpmode=previous" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.sig previous uupdate'
+ helperWatch siteWebNonNativeR
+}
+
+# test normal web page with sig (different file path for sig and tar; reverse order, BIN BIN)
+testWatch4WebNonNativeRSigBINiBIN() {
+ WATCHVER=4
+ SIGMODE=BIN
+ KEYMODE=BIN
+ WATCHLINE='opts = "pgpmode=next" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts = "pgpmode=previous" @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.sig previous uupdate'
+ helperWatch siteWebNonNativeR
+}
+
+# test normal web page with sig (self)
+testWatch4WebNonNativeSelfSig() {
+ WATCHVER=4
+ SIGMODE=SELF
+ WATCHLINE='opts = "pgpmode = self" \
+ @@@url@@@/ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@.gpg debian uupdate'
+ helperWatch siteWebNonNativeR
+}
+
+### VERSION 4 only ###
+
+# filenamemangle supports two patterns, each causing different behaviour.
+# * The first pattern replaces the existing URL with the new filename.
+# * The second pattern modifies the filename component, creating a new (and invalid) URL.
+
+# test normal web page (filenamemangle on main upstream tarball [pattern 1])
+testWatch4WebNonNative_filenamemangle1a() {
+ WATCHVER=4
+ FILENAMEMANGLE=foo
+ WATCHLINE='
+opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
+ helperWatch siteWebNonNative
+}
+
+# test normal web page (signature and filenamemangle on main upstream tarball [pattern 1])
+testWatch4WebNonNative_filenamemangle1b() {
+ WATCHVER=4
+ FILENAMEMANGLE=foo
+ WATCHLINE='
+opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#, \
+ pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
+ helperWatch siteWebNonNative
+}
+
+# test normal web page (filenamemangle on main upstream tarball [pattern 2])
+testWatch4WebNonNative_filenamemangle1c() {
+ WATCHVER=4
+ FILENAMEMANGLE=foo
+ WATCHLINE='
+opts="filenamemangle=s/(\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
+ helperWatch siteWebNonNative
+}
+
+# test normal web page (signature and filenamemangle on main upstream tarball [pattern 2])
+testWatch4WebNonNative_filenamemangle1d() {
+ WATCHVER=4
+ FILENAMEMANGLE=foo
+ WATCHLINE='
+opts="filenamemangle=s/(\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/, \
+ pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian'
+ helperWatch siteWebNonNative
+}
+
+# test normal web page (MUT)
+testWatch4WebNonNativeMUT() {
+ MGZREPACK=xz
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ SIGMODE=BIN
+ FILEEXCLUDE=2
+ WATCHLINE='
+opts=" pgpsigurlmangle=s/$/.sig/" @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar,pgpsigurlmangle=s/$/.sig/" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz,pgpsigurlmangle=s/$/.sig/" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same uupdate'
+ helperWatch siteWebNonNativeMUT
+}
+
+# test normal web page (MUT, filenamemangle on main upstream tarball [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle1a() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=foo
+ WATCHLINE='
+opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signature and filenamemangle on main upstream tarball [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle1b() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=foo
+ WATCHLINE='
+opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#, \
+ pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, filenamemangle on main upstream tarball [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle1c() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=foo
+ WATCHLINE='
+opts="filenamemangle=s/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signature and filenamemangle on main upstream tarball [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle1d() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=foo
+ WATCHLINE='
+opts="filenamemangle=s/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/, \
+ pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, filenamemangle on first component tarball [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle2a() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=bar
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signature and filenamemangle on first component tarball [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle2b() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=bar
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, filenamemangle on first component tarball [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle2c() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=bar
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signature and filenamemangle on first component tarball [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle2d() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=bar
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, filenamemangle on second component tarball [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle3a() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=baz
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signature and filenamemangle on second component tarball [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle3b() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=baz
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, filenamemangle on second component tarball [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle3c() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=baz
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signature and filenamemangle on second component tarball [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle3d() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE=baz
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, filenamemangle on both component tarballs [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle4a() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE="$COMPONENTS"
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signatures and filenamemangle on both component tarballs [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle4b() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE="$COMPONENTS"
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, filenamemangle on both component tarballs [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle4c() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE="$COMPONENTS"
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signatures and filenamemangle on both component tarballs [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle4d() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE="$COMPONENTS"
+ WATCHLINE='
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, filenamemangle on all upstream tarballs [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle5a() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE="foo $COMPONENTS"
+ WATCHLINE='
+opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signatures and filenamemangle on all upstream tarballs [pattern 1])
+testWatch4WebNonNativeMUT_filenamemangle5b() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE="foo $COMPONENTS"
+ WATCHLINE='
+opts="filenamemangle=s#.+/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)#$1-filenamemangle$2#, \
+ pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s#.+/(bar-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s#.+/(baz-)#@PACKAGE@-$1#, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, filenamemangle on all upstream tarballs [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle5c() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE="foo $COMPONENTS"
+ WATCHLINE='
+opts="filenamemangle=s/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT, signatures and filenamemangle on all upstream tarballs [pattern 2])
+testWatch4WebNonNativeMUT_filenamemangle5d() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILENAMEMANGLE="foo $COMPONENTS"
+ WATCHLINE='
+opts="filenamemangle=s/(@PACKAGE@-\d\S+)(@ARCHIVE_EXT@)/$1-filenamemangle$2/, \
+ pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar, filenamemangle=s/(bar-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz, filenamemangle=s/(baz-)/@PACKAGE@-$1/, pgpsigurlmangle=s/$/.asc/" \
+ @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same'
+ helperWatch siteWebNonNativeMUT_filenamemangle
+}
+
+# test normal web page (MUT with O main)
+testWatch4WebNonNativeMUT0() {
+ WATCHVER=4
+ COMPONENTS="foo bar baz"
+ FILEEXCLUDE=3
+ MGZREPACK=xz
+ WATCHLINE='
+opts="component=foo,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ debian
+opts="component=bar,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ same
+opts="component=baz,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ same uupdate'
+ helperWatch siteWebNonNativeMUT
+}
+
+# Group test without signatures
+testWatch4WebNonNativeGroup() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILEEXCLUDE=3
+ UVERSION=2.0
+ CMPVERSION=3.0
+ WATCHLINE='
+opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=bar,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=baz,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
+ helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0
+}
+
+# Group test with repack suffix
+testWatch4WebNonNativeGroupRepackSuffix() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILEEXCLUDE=3
+ UVERSION=2.0
+ CMPVERSION=3.0
+ WATCHLINE='
+opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=bar,repacksuffix=+ds,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=baz,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
+ helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+ds+~3.0
+}
+
+testWatch4WebNonNativeGroupRepackSuffix2() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILEEXCLUDE=3
+ UVERSION=2.0
+ CMPVERSION=3.0
+ WATCHLINE='
+opts="dversionmangle=auto,pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="dversionmangle=auto,component=bar,repacksuffix=~ds,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="dversionmangle=auto,component=baz,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
+ helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0~ds+~3.0
+}
+
+# Group test with pgpsigurlmangle
+testWatch4WebNonNativeGroupSigned() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILEEXCLUDE=3
+ UVERSION=2.0
+ CMPVERSION=3.0
+ WATCHLINE='
+opts="pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=bar,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=baz,pgpsigurlmangle=s/$/.asc/" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
+ helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0
+}
+
+# Group test with pgpmode next/previous
+testWatch4WebNonNativeGroupSignedNext() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILEEXCLUDE=3
+ UVERSION=2.0
+ CMPVERSION=3.0
+ SIGMODE=ASC
+ WATCHLINE='
+opts="pgpmode=next" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="pgpmode=previous" @@@url@@@/ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@.asc previous
+opts="component=bar,pgpmode=next" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=bar,pgpmode=previous" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@.asc previous
+opts="component=baz,pgpmode=next" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=baz,pgpmode=previous" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@.asc previous'
+ helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0
+}
+
+testWatch4WebNonNativeGroupWithCompression() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILEEXCLUDE=3
+ UVERSION=2.0
+ CMPVERSION=3.0
+ WATCHLINE='
+opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=bar,compression=xz,repack,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=baz,repack,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ group'
+ helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~3.0
+}
+
+testWatch4WebNonNativeGroupWithChecksum1() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILEEXCLUDE=3
+ UVERSION=2.0
+ CMPVERSION=3.0
+ WATCHLINE='
+opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=bar,compression=xz,repack,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=baz,repack,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ checksum'
+ helperWatch siteWebNonNativeMUT 1.0 2.0+~3.0+~cs3.0
+}
+
+testWatch4WebNonNativeGroupWithChecksum2() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILEEXCLUDE=3
+ UVERSION=2.0
+ CMPVERSION=3.0
+ WATCHLINE='
+opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=bar,compression=xz,repack,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ checksum
+opts="component=baz,repack,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ checksum'
+ helperWatch siteWebNonNativeMUT 1.0 2.0+~cs6.0
+}
+
+testWatch4WebNonNativeGroupWithChecksumAndIgnore() {
+ WATCHVER=4
+ COMPONENTS="bar baz"
+ FILEEXCLUDE=3
+ UVERSION=2.0
+ CMPVERSION=3.0
+ WATCHLINE='
+opts="pgpmode=none" @@@url@@@ (?:.*)/foo@ANY_VERSION@@ARCHIVE_EXT@ group
+opts="component=bar,compression=xz,repack,pgpmode=none" @@@url@@@ (?:.*)/bar@ANY_VERSION@@ARCHIVE_EXT@ checksum
+opts="component=baz,repack,pgpmode=none" @@@url@@@ (?:.*)/baz@ANY_VERSION@@ARCHIVE_EXT@ ignore'
+ helperWatch siteWebNonNativeMUT 1.0 2.0+~cs3.0
+}
+
+. shunit2
diff --git a/test/test_uscan_online b/test/test_uscan_online
new file mode 100755
index 0000000..47ecda2
--- /dev/null
+++ b/test/test_uscan_online
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# Copyright (C) 2012, Benjamin Drung <bdrung@debian.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+set -u
+
+# Operation mode
+if test "${1:-}" = --installed; then
+ COMMAND="uscan --no-conf"
+ shift
+else
+ top_srcdir=$(readlink -f "${0%/*}/..")
+ make -C "$top_srcdir/scripts" uscan mk-origtargz uupdate debchange
+ PATH="$top_srcdir/scripts:$PATH"
+ export PATH
+ PERL5LIB="$top_srcdir/lib"
+ export PERL5LIB
+ COMMAND="uscan --no-conf"
+fi
+
+. "${0%/*}/shunit2-helper-functions.sh"
+
+found() {
+ runCommand "--report --watchfile ${0%/*}/uscan/$1 --package $2 --upstream-version $3" "$4" "" 0
+}
+
+testS3Bucket() {
+ local latest=$(curl -s http://s3.amazonaws.com/rds-downloads | \
+ sed 's@\(</[A-Za-z]*>\)@\1\n@g' | grep '<Key>RDSCli-' | \
+ sed 's@.*<Key>RDSCli-\([-0-9.]*\)\.zip</Key>.*@\1@g' | \
+ sort -n | tail -n 1)
+ local result="uscan: Newest version of rdscli on remote site is ${latest}, local version is 1.4.007
+uscan: => Newer package available from:
+ => http://s3.amazonaws.com/rds-downloads/RDSCli-${latest}.zip"
+ found "s3bucket" "rdscli" "1.4.007" "$result"
+}
+
+. shunit2
diff --git a/test/test_uscan_svn b/test/test_uscan_svn
new file mode 100755
index 0000000..fdc3c2d
--- /dev/null
+++ b/test/test_uscan_svn
@@ -0,0 +1,201 @@
+#!/bin/bash
+
+# Copyright (C) 2018, Xavier <yadd@debian.org>
+# 2019-2020, Andrius Merkys <merkys@debian.org>
+#
+# 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.
+#
+# On Debian systems, the complete text of the GNU General Public License
+# version 3 can be found in the /usr/share/common-licenses/GPL-3 file.
+
+set -u
+#set -x
+
+DEB_HOST_OS="$(dpkg-architecture -qDEB_HOST_ARCH_OS)"
+if [ "$DEB_HOST_OS" = "kfreebsd" ]; then
+ # kbsd has a non-working semaphore, that is needed here.
+ echo "This test is not supported on $(dpkg-architecture -qDEB_HOST_ARCH), skipping"
+ exit 0
+fi
+DEB_HOST_ARCH="$(dpkg-architecture -qDEB_HOST_ARCH)"
+if [ "$DEB_HOST_ARCH" = "i386" ]; then
+ echo "To \"help\" Ubuntu that has a fondamentally broken i386 (so that we can't depend on svn), this test is simply skipped on i386."
+ exit 0
+fi
+
+TESTTYPE=Svn
+. ./lib_test_uscan
+
+COMMAND="chronic_sh uscan --no-conf --compression=xz --dehs"
+
+# prevent the local from messing with this test
+export HOME=""
+export XDG_CONFIG_HOME=""
+
+# comment out for debug
+#COMMAND="$COMMAND --verbose"
+#COMMAND="$COMMAND --debug"
+
+cleanup(){
+ rm -rf "$TEMP_PKG_DIR"
+}
+
+spawnSvnRepo(){
+ mkdir -p "$TEMP_PKG_DIR/repo"
+ (cd "$TEMP_PKG_DIR/repo" || exit 1
+ chronic_sh svnadmin create .)
+ mkdir -p "$TEMP_PKG_DIR/working-copy"
+ (cd "$TEMP_PKG_DIR/working-copy" || exit 1
+ chronic_sh svn checkout "file:///$TEMP_PKG_DIR/repo" .
+ chronic_sh mkdir trunk tags
+ touch trunk/changelog trunk/file.c
+ chronic_sh svn add trunk tags
+ chronic_sh svn commit -m 'Init'
+ export TZ=UTC
+ for version in 1.0 2.0; do
+ echo "# Version $version" >> trunk/file.c
+ cat >> trunk/changelog <<END
+Version $version
+
+END
+ chronic_sh faketime -f '2000-01-01 12:34:56' svn commit -m "Releasing $version"
+ chronic_sh faketime -f '2000-01-01 12:34:56' svn copy ^/trunk "^/tags/v$version" -m "Version $version"
+ done)
+}
+
+trap cleanup EXIT
+
+containsName(){
+ echo "$1" | grep -F -q "$2"
+ echo $?
+}
+
+# shellcheck source=shunit2-helper-functions.sh
+. "${0%/*}/shunit2-helper-functions.sh"
+
+PKG=foo
+
+makeDebianDir() {
+ WATCHARGS=$1
+ TEMP_PKG_DIR=$(mktemp -d --tmpdir="$SHUNIT_TMPDIR" uscan_svn.XXXXXX)
+ if [ -z "$TEMP_PKG_DIR" ]; then
+ echo "Failed to create temporary directory" >&2
+ exit 1
+ fi
+ mkdir -p "$TEMP_PKG_DIR/$PKG/debian/source"
+ spawnSvnRepo
+
+ cat <<END > "$TEMP_PKG_DIR/$PKG/debian/watch"
+version=4
+opts="mode=svn,$WATCHARGS" \
+file:///$TEMP_PKG_DIR/repo/tags v([\\d\\.]+)\/ debian
+END
+
+ cat <<END > "$TEMP_PKG_DIR/$PKG/debian/changelog"
+$PKG (0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Joe Developer <jd@debian.org> Mon, 02 Nov 2013 22:21:31 -0100
+END
+ echo '3.0 (quilt)' > "$TEMP_PKG_DIR/$PKG/debian/source/format"
+}
+
+makeDebianDirHead() {
+ WATCHARGS=$1
+ makeDebianDir "$WATCHARGS"
+ cat <<END > "$TEMP_PKG_DIR/$PKG/debian/watch"
+version=4
+opts="mode=svn,$WATCHARGS" \
+file:///$TEMP_PKG_DIR/repo/trunk HEAD
+END
+}
+
+helperLaunch() {
+ WATCHARGS=$1
+ ARG="${2:-}"
+ if test "$ARG" = "HEAD"; then
+ makeDebianDirHead "$WATCHARGS"
+ else
+ makeDebianDir "$WATCHARGS"
+ fi
+ ( cd "$TEMP_PKG_DIR/$PKG" || exit 1 ; $COMMAND --watchfile=debian/watch )
+ assertEquals "uscan: exit_code!=0 but exit_code=0" "0" "$?"
+}
+
+helperLaunchFail() {
+ WATCHARGS=$1
+ ARG="${2:-}"
+ if test "$ARG" = "HEAD"; then
+ makeDebianDirHead "$WATCHARGS"
+ else
+ makeDebianDir "$WATCHARGS"
+ fi
+ # discard output as it's expected to fail
+ ( cd "$TEMP_PKG_DIR/$PKG" || exit 1 ; $COMMAND --watchfile=debian/watch > /dev/null)
+ assertEquals "uscan: exit_code!=2 but exit_code=2" "2" "$?"
+}
+
+testSvn() {
+ helperLaunch "pgpmode=none"
+ TARBALL="${PKG}_2.0.orig.tar.xz"
+ CHECKSUM=$(sha1sum "$TEMP_PKG_DIR/${PKG}-2.0.tar.xz" | awk '{print $1}')
+ assertTrue 'downloaded tarfile not present' "[ -f '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$TEMP_PKG_DIR/$TARBALL' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$TEMP_PKG_DIR/$TARBALL' ]"
+ if [ "$CHECKSUM" != 'bd4a60786013848e402bcf20db211fd465afeda5' ]; then
+ set -x
+ echo "Copying the faulty tarball to the artefact directory, if available..."
+ if [ -n "${AUTOPKGTEST_ARTIFACTS:-}" ] && [ -d "$AUTOPKGTEST_ARTIFACTS" ]; then
+ cp -v "$TEMP_PKG_DIR/${PKG}-2.0.tar.xz" "$AUTOPKGTEST_ARTIFACTS"/
+ fi
+ set +x
+ fi
+ assertTrue 'checksums do not match' "[ '${CHECKSUM}' = 'bd4a60786013848e402bcf20db211fd465afeda5' ]"
+ cleanup
+}
+
+testSvnPgpmodeDefault() {
+ helperLaunch "pgpmode=default"
+ TARBALL="${PKG}_2.0.orig.tar.xz"
+ assertTrue 'downloaded tarfile not present' "[ -f '$TEMP_PKG_DIR/${PKG}-2.0.tar.xz' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$TEMP_PKG_DIR/$TARBALL' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$TEMP_PKG_DIR/$TARBALL' ]"
+ cleanup
+}
+
+testSvnPgpmodeNext() {
+ helperLaunchFail "pgpmode=next"
+ cleanup
+}
+
+testSvnHead() {
+ helperLaunch "pgpmode=none" HEAD
+ ORIG="$TEMP_PKG_DIR/foo_0.0~svn4.orig.tar.xz"
+ UPSTREAM="$TEMP_PKG_DIR/foo-0.0~svn4.tar.xz"
+ assertTrue 'downloaded tarfile not present' "[ -f '$UPSTREAM' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$ORIG' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$ORIG' ]"
+ cleanup
+}
+
+testSvnHeadMangle() {
+ helperLaunch "pgpmode=none,uversionmangle=s/^[^~]+/1.23.45/" HEAD
+ ORIG="$TEMP_PKG_DIR/foo_1.23.45~svn4.orig.tar.xz"
+ UPSTREAM="$TEMP_PKG_DIR/foo-1.23.45~svn4.tar.xz"
+ assertTrue 'downloaded tarfile not present' "[ -f '$UPSTREAM' ]"
+ assertTrue 'pristine tarball is not created' "[ -f '$ORIG' ]"
+ assertTrue 'pristine tarball is a symlink' "[ -L '$ORIG' ]"
+ cleanup
+}
+
+# shellcheck disable=SC1091
+. shunit2
diff --git a/test/test_wrap-and-sort b/test/test_wrap-and-sort
new file mode 100755
index 0000000..ac6bdab
--- /dev/null
+++ b/test/test_wrap-and-sort
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# Copyright (C) 2022, Niels Thykier <niels@thykier.net>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -u
+
+
+WORK_DIR="$(readlink -f "${0%/*}")"
+if test "${1:-}" = --installed; then
+ wrap_and_sort="wrap-and-sort "
+ shift
+else
+ wrap_and_sort="${WORK_DIR}/../scripts/wrap-and-sort"
+fi
+
+. "${WORK_DIR}/test_helper.sh"
+
+oneTimeSetUp() {
+ TEMP_DIR=$(mktemp -d -p "$SHUNIT_TMPDIR" wrap-and-sort.XXXXX)
+}
+
+# Run as `prepare_and_run_wrap_and_sort <test-name> [args-for-wrap-and-sort]`
+prepare_and_run_wrap_and_sort() {
+ TEST_NAME="${1}"
+ TEST_DIR="${TEMP_DIR}/${TEST_NAME}"
+
+ mkdir "${TEST_DIR}"
+ cp -a "${WORK_DIR}/wrap-and-sort/${TEST_NAME}/in/"* "$TEST_DIR/" || exit 1
+ assertPasses $wrap_and_sort -d "$TEST_DIR"
+ assertPasses diff -Nuarp "${WORK_DIR}/wrap-and-sort/${TEST_NAME}/out" "${TEST_DIR}"
+}
+
+test_install_comments() {
+ prepare_and_run_wrap_and_sort 'install-comments'
+}
+
+. shunit2
diff --git a/test/uscan/PRIVATE_KEY.asc b/test/uscan/PRIVATE_KEY.asc
new file mode 100644
index 0000000..01ca198
--- /dev/null
+++ b/test/uscan/PRIVATE_KEY.asc
@@ -0,0 +1,106 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1
+
+lQcYBFXnCocBEACkNFn2IKAMyk3zR8QMVmZuZOESBivnbVUHfXiVCVKBTzLGrIUQ
+WlMjw02CXJyekjHyB3Eqik4X7TEv5EqKME2oXj0WrMZLQQvu+8Mmx67kaYUoYIoH
+U0I/a0yyEkshfki5tsr9qPkgC6R5OSAuGVaL9SC1q+p3uMbHQGnLsBzY8I8S7Ac2
+gsPPQTtX1EK2ZQ1xPUD6NgmTQHlsyJLFhe5XUYxEJm/vn+dh+YAfloElQjdh/V03
+G/d5jte33TxbyNwjCzhlX4Fa+yh2RqsR5s4tHRsfIDte0MIE2vva8ctxeHMSSjRV
+mSufkwSe/3ScY2fHcGI9UzgR1bcdJon0yLfbdZrnBruFVKj8xEEmkrL/kXCRu/2c
+5d1vHwRtHSF7+sY+XubuOGDxkZYr8Kghv50YG8E8fPAhrPhult6fylKDDvFrc5Ai
+RBmfJTXWjcGNgMkFjkXtWzqdgg91Rgr1MRqL9Jxn/30K+EWFPAHjggLrtGjTjtML
+4K0hc0OcqMEzK5ERCuQaYaBcQnDseoBeKCMQMYSZQZij97r+GCPGOLsuPSYKHk2x
+KnUm12WYkkbi4R6Ab+La3PjWqhAtcS9AVzoF7h2n6pSM3V2ldrHcke9qKLdhDrsp
+BXTwZ9RsEBILoEpnjJ/zO75sdH2LLh3XlFfTzUU6yeUiPO2aKXHSbv2/MwARAQAB
+AA/9Gsu1koX9wu3l4o683gvgvfXAX3dFBYhrQ8RPP82RpSsOF4BiW9TMPx3JMZN4
+tiJtUW2yze+xPBOnidqF6h8PzStJFMDaaxVmTngkfy4+yroIJ2/5llBukyLTaou0
+WaGIr1BhDRvclkTQG5LIPuhA81NBJI8KvWwYeWjNhZZrtAstjeJDxbrOcVfXyJwJ
+dvJD9fgPo8UwXX3mqBXjEvtUIEkHzBHpr6o3JrSBxVCDgAJaP1IKkB+u4YCp5ds4
+f6c7eoyDhidxAy5739vltrokvb/uLm94Fh+YSb/ihvbGQvIWSnnJfd53ppwQjlG+
+7yEETSDN0ewZTkUYk1fiqLYd1R4Eenp1h6Yf5mbLJ3+7aqV3ni5Daz8+oVfhv4Pb
+mrYDCYHsY3xoKXxw7OgwHhLS9enojpYmJ22gbNzkweNC0xa6aHcKgiUWu/o84mNe
+5Jle12LFkf+rk7byA7eLgg6ROFk064zpnR+2qj1FiYxtuvzNch4MKUnVw1hdeFoU
+4BLp+9sO/MhPsMmGCfP/eAde1//EwC7qqJIp7AlZxw18fLm9k7zDTpvGhFWWvwXV
+ueHN9Kqmi7CcXajFINnKSOoSZMNEHzoCOmZyp+LvG0ljjZuVShlj5zfV4S1X10TP
+hNYIWHqtpGALC+Eq+s2PrCH+13AJHOgiL9UKnHjHc0imZCEIAMWaQJOxiNdtq1EF
+5wgTe1xdijpSTnnIXHS+jEQvl0DshAzd49C+JR3O6lUtY0yeilXv7IYLiLUWqmv3
+1X8tygUlRiEDA9+cxmPLhoWRIK1Cn1Mh+V1QV6+c9AYkvp6PPueiqOArnhBrYqJ3
+yPsuZbxiVA1IcJ+tZsZI4dXdA3j1icnIM6kwVUveRT0bQUDkgHR7doPLRWykSoH9
+NTSdGNXoVlnJaEpsBydNoAO/XoffysHP3b9+/SvdSo0G7B7V5lwP4bryX1AvglIK
+w0bZs5KrtB/qkcp7egWQ2wLW4850/A+GH4o+e/FnLeAmGbyW5ptifmk7xZF9F+LC
+yF9epnUIANS7WSRNLuzSVUeIZg8iH9+cwZjNUyVXy6/pdp+tJfS52uJIfP826I5W
+uCZCMrahyaByy+0TszVrfS+unWs77vivuk362aeWIXglnSrZ9vw7SElyrAXjbOxC
+DmCyHpXpo61S/4RuxYFXnWo2ixR92lOdU/wDZLF2ZbpE2p+CP2fPfEg42mK7Mg2M
+eVwAIRyy+ZsXPmu1osrch4cTHq2KMdnkjod737OEejMhuP9mK9suBa3u9o+C5DCL
+MQxMAqpxv14CWjHE3G+qE28rVp/Zo5WwYwO8X4r2T3b0BEkaXr4Eb6lBCu6RwCdj
+MACjqmXWVwYltJeURCUDgrzOuwi4KgcH/2Sa2LHjBG8ub9nBBYw3+AEzrP0sjrDJ
+acZZmCn9IaJCbmHPXtOZMCndGxp0NqavE6TpWi616/y9mXqHMYsYFSJeBzKDJBVy
+5uDP/Z9xCPZlzvlEr3SQq0MiLoyDvGWSdSB/qcCNPzOdIgRoXn/o4XvtVfzv2qw6
+HF+25hPrDhjWYNyNFB0cagCoD7Iwv/zBk7JLYJoKd2xNCEbGQ4u/fXfSLXublzFc
+Fgud8lLdq3KirT/NElvyLnbm3UEjeNfcMGGSaJiR7p7mgLXNr+SzAD/zX/NNgbS4
+Jx+zceIK0p/ndPvjdvju24x4Hi1UH+4qOcTUNUAdutDkWBqmKp3ipgOD77QsdXNj
+YW4gdGVzdCBrZXkgKG5vIHNlY3JldCkgPG5vbmVAZGViaWFuLm9yZz6JAjgEEwEC
+ACIFAlXnCocCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEMd+LWhyVD+v
+zLkP/ikDCjvi8/Fh2ePj22+t9H4P+ShMPkOzcbC++zhqNrxiwwmyr0s7vd1nAKJN
+IoGxS+WhDOxUGyfhd5Pr2fkJjyuDZ/Mwi5xwKNc2XRQmlRT6pKvtV3XZTvRbYKGs
+p/nmkjE9ip+R6k0KFy8XbS8iFb4OM8hUcNvQPZBMkg2XurDIILfNABqbCIuK1HJR
+ST53FLdwswuXGUVBUkwG2PjGLxzM7V/GIF7ON2GXtC6sty5Kk+q804YFCLjPsUR7
+9Goq8/scAhgBvnytfPeoOGrHOCVIPfBD7CJODbTBhyENQGyrBXuiHGRBIxHkrfG/
+DDsSH4GCimdDMVtpyGRWsWe94oMe0VOJJq5uganTDPqioll/PbyrTrKZwbtRgtZr
+eUG6mEOv+tQ26xL7++V3G0C5HIF6MUrisvMsJutEtWGQ93iAUR2RDasSn3LfFmqT
+uvPPM8Ogz3rUNp1dd5YpKzyZEBqNM5FlEO15gCK1LjM3F9KQhhQrMTeS85Ytn7F+
+/FXhEXg77JDbKaByRvQ4nfesWV72ZAO2ukfBWZ01yWma8vaw+XJlwYFoWtk2JV2e
+ZpZR5q1e7NUc1rdHo4/6cTc072bpOAatZ1STvfPnolvBPuUyhE8XC6qBBBK3ETbV
+XoXHNJ6KFHrBMGT7oS9aMVzHyWhZA5fGFgqbocI8Gx7lkJr/nQcYBFXnCocBEADI
+hu6xdCWopsyv9wrmpAareEC50o+cztqQh1oJn/ldJ+ECVb9YRcD2x/H1L3DQwGEl
+zKZ6D6up5bzOjyZpaMJn6aT/ONFPfQL6myA3Q/yZST3eirhQ4xfDAMJJKAxtqVW3
+1KYbxl877I0mR9WOxKenWeS4JI+zwWuuDZnDIAxU9vgYs1WHoekg1R1ydLk7r7DA
+qIGNfwY/V8HtZx4M7Frvtk6MNfBsGB54q7mxTCkUAD3LWxI7nDsx47GhwiRf5d5r
+P/lWOZEbgwQaM3n5JqUSNuGU/3arTRbzGhOjgvIq95tR4CQsL0cv9ajJ8o9o5kts
+zuR7URyHBB3SloCOVqAHdmH9Y28jzM2NRgcVgsCVgWB3AqTGbmiZ0gIkIWzeDrBZ
+tqb04GWo8sp6IhjsVtcPB/MwENsi5WoJ6rEDyS0sSH5HDsIbeElKbS3ZAB7vunVZ
+kYxCsD4N90Jey0qCamWtrhCdxoswKPf4sV5X5IEdVPSlV0T/JKzp39pqOdMA+BIx
+W8lKaDyOWBGB7m54wfiiJpeItB7ligM47ylk/L5YYDd4w8PiYYt+VPG7id/jkTVi
+p1V5U33KIIgL/Vc7LfEXoZ6HLUNQFq6VxPP7iNeiBuJMd2izElLuWDXkIlnoOEE+
+on8crCJlRtH3gWfcZSR6qaCgwHwk8w9ockpMsnJeRQARAQABAA/5Ab4WbelV+HC2
+n6LUb+ul+TB604KOZ+zuPkpG0IWY26Pgky4ekwxMIHjdU+WdI9tAHN155t6i/b92
+1A6vZUQZSGDh46vhOcEa2QWnEoPfOo/F31yyPFW026dyiMM11HAfxBCvftdK9ZDZ
+Kyd9phd0Y4Jm9+itbQD1yBXrK6RoJwbcYg6Q5DRWe8gOUPPNtkSREyODuLCNY9iF
+4WO/gZo+Mg4SAaroU3AkN6U6YF2Kj9dusgkxD96MLyNM5Fx1B3ZOZ/0u0/59EdGi
+I/4lhbI9xfo/HJXZuKRbWjJ0UDvvkcsECQKbHd0tT6/hTxvx/hXeOuxTVPT/+/Zf
+sfhH1rTPAC2pGPM0ZybxopGh3kAElcsQvS33NPHrSOIwZEmwARt65+YdFQrZgeYO
+s4kidFNawM+xjOXXQjSMsx2BznfepbSKUyK+HU8Bq/cpgAAALQcgwDUqp0Gm4qng
+DeuRc1fnQUXBadL69cwcLFUDUkxuPZxm06zpDLjeKi92dBWAU2WUb/pvde35aWPj
+HOvsN2B/FysTurgdIMRnLKGFKmxPFH3p5K4S5YoabKm9H8syq2u3yXZFc1z2UV76
+7BHMYX5moC82wq5WcaOnDzzhx54k+/qDFrwrLMjB+V8I/M8YwjYd+SYvvvXrJgbY
+YZif5YhsIc/0LnrsyFylrsWIN1MpTNMIANt5fBsGc/xYY/A5n+4BDFajPn74foLP
+UV4E5zNgGm10YtEJ07o3pBvw1Nqoj3jwdHFlXwjVVo90Uzuw6SvekANKQEEtdpGm
+c959mNk0mHzJjZ1FvC2/tttX7QvXKuF8jLWgkfC0Kby6Aa0DxAzwQQ1abo60UJi2
+OxPM1FI0IsjtRoKu4ryUvCgbMNY9bKhJokYz5BZqqs2lPu9B2EGXrqbC/rq6dgbh
+Y8Xwbu2wypi6G7JHSa8kpwcEacdherJYh17J2xkRHLf857icDNYJPB0GMfg+3evk
+qm3KAu6amB4q+QHf18Z0k6yWmagecdSxTY6LAjog+2Q8YO8N6eqpp08IAOnmNS26
+kDEzE6NfYWdrySfNhJ2SP8W8bx+UvFUVLCZJDgnO9K12R5A7JiO07pijxqorjlOy
+KtIRu/wgtH6wHzhg5i7J443dgz8jtCCLB8O6B8bvzZ75XbwSGAOcSapbAJm7FGyG
+b82TZjBWZE3++TWmUPk8kARCoJR5rGamVKyiTnkooB0638NnAb0aNkJhKLUOjRY+
+SOG0Czf19bRoKEQuwmwe8vwOrQcfLXLYSZGsax4AMM4SacO/2LpddYL1k0FIPs1X
+S9NBIAbw/j2pQfQrG4E6CVMKo6ihcTwIchiny7yKE2BZHAAWwd0cZM1JCnRQ/DOG
+3H9Lwt1enQxHfCsIANYc3aLnUeNls3ZpfmZBlW8fMkRvWz1Tf8vWc2rcHDBx4OeI
+Rn/trD8dN6eON3feKcYx3th+MIGTXzi8rPzOUVPai2iX4yuf2zGh3I3ItyxtgEXn
+gms0KqeQwwQ/jeEUkhuFkq9sT4UwTqBwgMYsWSLMg76/es/zLBpI4LxBaK+BV9ek
+KgD8RQl2IHI8F2XmJQSQex/nbdYVGHXDv1qJ+sMcdHvQ5VAZ1lPSqroM30YFSmzc
+zQq0qaK6mGKCm0RDE24DNa+T5KhdSCeDyIpewiB6ORScNO+WdNxqlfQTBTf5kzEQ
+eGI/TufRQ35CCvvHsFjZilJQa+qSdzzg5vQ+rlF26YkCHwQYAQIACQUCVecKhwIb
+DAAKCRDHfi1oclQ/r536EACBepjhwPL3qYfZNkJlSz34VYDngbzf4KLsYQIypEyU
+6GcBMX5kjKKFrh30+e6atQ40LxRW5QgzEQsuDSBrp/x/qRv6i87oqHC5dG7pEYuv
+E/Fpb3fSQPpbTY5SpKvqWTVYOpXy++QrtpWqOGsGbKUep1/QZzBQnh4HHNHSbKdv
+o73RSCg82A2YxuKiN226pqhI2MaC2+4MZgF6VkF2gmSr/Q84RdlyCcNN2l9uwQ0b
+hiYkB04m/uB1agIiz6OO4VXklUVrbXrvEJmr8At+he4bDL4+W3khKKhR8JzIcR15
+fj7ja+gBRx/hIanusYbjmA20JWdKNEL5IHJwIBsvfuA0kq+eqXDcgL/MndOFkpoG
+LslyJAhdhGMS57UZKq70SkyhMhFNtPv+JQ7qXwrXK7GzfFmymaQVvZ3Csf3YkTsb
+zGcO44Lin/0b4kRA4kVA6m2sVdW2unKVeQqXRAT9k4CRQe57YmwynTboD3/gClRJ
+8QWLCPTqUI9wqKrfb/RXDgzQ5UBKBY97FD+xL2jSSzJpq4ycVvrYVU9aJmFawlLV
+gfdfTLGy50iWTYVjjrYUfryPhW/BSc8/DlbiihPHUpZOPBeJ418upVVhLuyQPfev
+9N/hp5UpLqojA4Ti2ygzdnZQTFnYV5hS/m/OsYs5I3ZVBo1+NnEk2JVdV3hgeLAl
+2g==
+=nZ3G
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/test/uscan/PUBLIC_KEY.asc b/test/uscan/PUBLIC_KEY.asc
new file mode 100644
index 0000000..214a603
--- /dev/null
+++ b/test/uscan/PUBLIC_KEY.asc
@@ -0,0 +1,52 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+mQINBFXnCocBEACkNFn2IKAMyk3zR8QMVmZuZOESBivnbVUHfXiVCVKBTzLGrIUQ
+WlMjw02CXJyekjHyB3Eqik4X7TEv5EqKME2oXj0WrMZLQQvu+8Mmx67kaYUoYIoH
+U0I/a0yyEkshfki5tsr9qPkgC6R5OSAuGVaL9SC1q+p3uMbHQGnLsBzY8I8S7Ac2
+gsPPQTtX1EK2ZQ1xPUD6NgmTQHlsyJLFhe5XUYxEJm/vn+dh+YAfloElQjdh/V03
+G/d5jte33TxbyNwjCzhlX4Fa+yh2RqsR5s4tHRsfIDte0MIE2vva8ctxeHMSSjRV
+mSufkwSe/3ScY2fHcGI9UzgR1bcdJon0yLfbdZrnBruFVKj8xEEmkrL/kXCRu/2c
+5d1vHwRtHSF7+sY+XubuOGDxkZYr8Kghv50YG8E8fPAhrPhult6fylKDDvFrc5Ai
+RBmfJTXWjcGNgMkFjkXtWzqdgg91Rgr1MRqL9Jxn/30K+EWFPAHjggLrtGjTjtML
+4K0hc0OcqMEzK5ERCuQaYaBcQnDseoBeKCMQMYSZQZij97r+GCPGOLsuPSYKHk2x
+KnUm12WYkkbi4R6Ab+La3PjWqhAtcS9AVzoF7h2n6pSM3V2ldrHcke9qKLdhDrsp
+BXTwZ9RsEBILoEpnjJ/zO75sdH2LLh3XlFfTzUU6yeUiPO2aKXHSbv2/MwARAQAB
+tCx1c2NhbiB0ZXN0IGtleSAobm8gc2VjcmV0KSA8bm9uZUBkZWJpYW4ub3JnPokC
+OAQTAQIAIgUCVecKhwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQx34t
+aHJUP6/MuQ/+KQMKO+Lz8WHZ4+Pbb630fg/5KEw+Q7NxsL77OGo2vGLDCbKvSzu9
+3WcAok0igbFL5aEM7FQbJ+F3k+vZ+QmPK4Nn8zCLnHAo1zZdFCaVFPqkq+1XddlO
+9Ftgoayn+eaSMT2Kn5HqTQoXLxdtLyIVvg4zyFRw29A9kEySDZe6sMggt80AGpsI
+i4rUclFJPncUt3CzC5cZRUFSTAbY+MYvHMztX8YgXs43YZe0Lqy3LkqT6rzThgUI
+uM+xRHv0airz+xwCGAG+fK1896g4asc4JUg98EPsIk4NtMGHIQ1AbKsFe6IcZEEj
+EeSt8b8MOxIfgYKKZ0MxW2nIZFaxZ73igx7RU4kmrm6BqdMM+qKiWX89vKtOspnB
+u1GC1mt5QbqYQ6/61DbrEvv75XcbQLkcgXoxSuKy8ywm60S1YZD3eIBRHZENqxKf
+ct8WapO6888zw6DPetQ2nV13likrPJkQGo0zkWUQ7XmAIrUuMzcX0pCGFCsxN5Lz
+li2fsX78VeEReDvskNspoHJG9Did96xZXvZkA7a6R8FZnTXJaZry9rD5cmXBgWha
+2TYlXZ5mllHmrV7s1RzWt0ejj/pxNzTvZuk4Bq1nVJO98+eiW8E+5TKETxcLqoEE
+ErcRNtVehcc0nooUesEwZPuhL1oxXMfJaFkDl8YWCpuhwjwbHuWQmv+5Ag0EVecK
+hwEQAMiG7rF0JaimzK/3CuakBqt4QLnSj5zO2pCHWgmf+V0n4QJVv1hFwPbH8fUv
+cNDAYSXMpnoPq6nlvM6PJmlowmfppP840U99AvqbIDdD/JlJPd6KuFDjF8MAwkko
+DG2pVbfUphvGXzvsjSZH1Y7Ep6dZ5Lgkj7PBa64NmcMgDFT2+BizVYeh6SDVHXJ0
+uTuvsMCogY1/Bj9Xwe1nHgzsWu+2Tow18GwYHnirubFMKRQAPctbEjucOzHjsaHC
+JF/l3ms/+VY5kRuDBBozefkmpRI24ZT/dqtNFvMaE6OC8ir3m1HgJCwvRy/1qMny
+j2jmS2zO5HtRHIcEHdKWgI5WoAd2Yf1jbyPMzY1GBxWCwJWBYHcCpMZuaJnSAiQh
+bN4OsFm2pvTgZajyynoiGOxW1w8H8zAQ2yLlagnqsQPJLSxIfkcOwht4SUptLdkA
+Hu+6dVmRjEKwPg33Ql7LSoJqZa2uEJ3GizAo9/ixXlfkgR1U9KVXRP8krOnf2mo5
+0wD4EjFbyUpoPI5YEYHubnjB+KIml4i0HuWKAzjvKWT8vlhgN3jDw+Jhi35U8buJ
+3+ORNWKnVXlTfcogiAv9Vzst8RehnoctQ1AWrpXE8/uI16IG4kx3aLMSUu5YNeQi
+Weg4QT6ifxysImVG0feBZ9xlJHqpoKDAfCTzD2hySkyycl5FABEBAAGJAh8EGAEC
+AAkFAlXnCocCGwwACgkQx34taHJUP6+d+hAAgXqY4cDy96mH2TZCZUs9+FWA54G8
+3+Ci7GECMqRMlOhnATF+ZIyiha4d9PnumrUONC8UVuUIMxELLg0ga6f8f6kb+ovO
+6KhwuXRu6RGLrxPxaW930kD6W02OUqSr6lk1WDqV8vvkK7aVqjhrBmylHqdf0Gcw
+UJ4eBxzR0mynb6O90UgoPNgNmMbiojdtuqaoSNjGgtvuDGYBelZBdoJkq/0POEXZ
+cgnDTdpfbsENG4YmJAdOJv7gdWoCIs+jjuFV5JVFa2167xCZq/ALfoXuGwy+Plt5
+ISioUfCcyHEdeX4+42voAUcf4SGp7rGG45gNtCVnSjRC+SBycCAbL37gNJKvnqlw
+3IC/zJ3ThZKaBi7JciQIXYRjEue1GSqu9EpMoTIRTbT7/iUO6l8K1yuxs3xZspmk
+Fb2dwrH92JE7G8xnDuOC4p/9G+JEQOJFQOptrFXVtrpylXkKl0QE/ZOAkUHue2Js
+Mp026A9/4ApUSfEFiwj06lCPcKiq32/0Vw4M0OVASgWPexQ/sS9o0ksyaauMnFb6
+2FVPWiZhWsJS1YH3X0yxsudIlk2FY462FH68j4VvwUnPPw5W4ooTx1KWTjwXieNf
+LqVVYS7skD33r/Tf4aeVKS6qIwOE4tsoM3Z2UExZ2FeYUv5vzrGLOSN2VQaNfjZx
+JNiVXVd4YHiwJdo=
+=GzOB
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/test/uscan/ftpserver.py b/test/uscan/ftpserver.py
new file mode 100644
index 0000000..e14348a
--- /dev/null
+++ b/test/uscan/ftpserver.py
@@ -0,0 +1,29 @@
+#!/usr/bin/python3
+
+import logging
+import os
+
+from pyftpdlib.authorizers import DummyAuthorizer
+from pyftpdlib.handlers import FTPHandler
+from pyftpdlib.servers import FTPServer
+
+
+def test():
+ authorizer = DummyAuthorizer()
+ authorizer.add_anonymous(os.getcwd())
+
+ handler = FTPHandler
+ handler.authorizer = authorizer
+
+ logging.basicConfig(filename="info.log", level=logging.INFO)
+ # logging.basicConfig(filename='debug.log', level=logging.DEBUG)
+
+ ftpserver = FTPServer(("127.0.0.1", 0), handler)
+ sa = ftpserver.socket.getsockname()
+ with open("port", "w") as f:
+ f.write(str(sa[1]))
+ ftpserver.serve_forever()
+
+
+if __name__ == "__main__":
+ test()
diff --git a/test/uscan/httpserver.py b/test/uscan/httpserver.py
new file mode 100644
index 0000000..1dcd4ce
--- /dev/null
+++ b/test/uscan/httpserver.py
@@ -0,0 +1,25 @@
+#!/usr/bin/python3
+import http.server
+import logging
+from http.server import SimpleHTTPRequestHandler
+
+
+class GetHandler(SimpleHTTPRequestHandler):
+ def do_GET(self):
+ logging.error(self.headers)
+ SimpleHTTPRequestHandler.do_GET(self)
+
+
+def test():
+ Handler = GetHandler
+ httpd = http.server.HTTPServer(("", 0), Handler)
+
+ sa = httpd.socket.getsockname()
+ with open("port", "w") as f:
+ f.write(str(sa[1]))
+
+ httpd.serve_forever()
+
+
+if __name__ == "__main__":
+ test()
diff --git a/test/uscan/manual-test/Makefile b/test/uscan/manual-test/Makefile
new file mode 100644
index 0000000..382e479
--- /dev/null
+++ b/test/uscan/manual-test/Makefile
@@ -0,0 +1,35 @@
+TOPSRCDIR := $(abspath $(CURDIR)/../../..)
+PATH := $(TOPSRCDIR)/scripts:$(PATH)
+PERL5LIB := $(TOPSRCDIR)/lib
+export PATH
+export PERL5LIB
+COMMAND := uscan --no-conf --debug
+KEEP_THESE := $(wildcard _*)
+TOSS_THESE := $(filter-out $(KEEP_THESE) Makefile, $(wildcard *))
+
+all:
+ $(MAKE) prep # always run first
+ $(MAKE) test
+
+# Single archive run
+test-%:
+ cd $*; $(COMMAND)
+ touch $*/stamp
+
+# Many single archive runs
+test: $(patsubst %,test-%,$(KEEP_THESE))
+
+# Multiple archive run at once
+multi:
+ $(COMMAND)
+
+prep:
+ $(MAKE) -C $(TOPSRCDIR)/scripts uscan mk-origtargz uupdate debchange
+ $(MAKE) -C $(TOPSRCDIR)/scripts uscan.pl_check
+ touch stamp
+
+clean-%:
+ -rm $*/stamp
+
+clean: $(patsubst %,clean-%,$(KEEP_THESE))
+ -rm -rf $(TOSS_THESE)
diff --git a/test/uscan/manual-test/_dh-make-golang/debian/changelog b/test/uscan/manual-test/_dh-make-golang/debian/changelog
new file mode 100644
index 0000000..836ca5e
--- /dev/null
+++ b/test/uscan/manual-test/_dh-make-golang/debian/changelog
@@ -0,0 +1,5 @@
+dh-make-golang (0~0.0-1) unstable; urgency=medium
+
+ * dummy changelog.
+
+ -- Osamu Aoki <osamu@debian.org> Sat, 13 Jan 2018 22:48:47 +0900
diff --git a/test/uscan/manual-test/_dh-make-golang/debian/rules b/test/uscan/manual-test/_dh-make-golang/debian/rules
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/test/uscan/manual-test/_dh-make-golang/debian/rules
diff --git a/test/uscan/manual-test/_dh-make-golang/debian/source/format b/test/uscan/manual-test/_dh-make-golang/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/test/uscan/manual-test/_dh-make-golang/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/test/uscan/manual-test/_dh-make-golang/debian/watch b/test/uscan/manual-test/_dh-make-golang/debian/watch
new file mode 100644
index 0000000..08c6c95
--- /dev/null
+++ b/test/uscan/manual-test/_dh-make-golang/debian/watch
@@ -0,0 +1,5 @@
+version=4
+opts="mode=git, pgpmode=none" \
+https://github.com/Debian/dh-make-golang \
+HEAD debian uupdate
+
diff --git a/test/uscan/manual-test/_dl-poly-classic/debian/changelog b/test/uscan/manual-test/_dl-poly-classic/debian/changelog
new file mode 100644
index 0000000..90e29b1
--- /dev/null
+++ b/test/uscan/manual-test/_dl-poly-classic/debian/changelog
@@ -0,0 +1,5 @@
+dl-poly-classic (0~0.0-1) unstable; urgency=medium
+
+ * dummy changelog.
+
+ -- Osamu Aoki <osamu@debian.org> Sat, 13 Jan 2018 22:48:47 +0900
diff --git a/test/uscan/manual-test/_dl-poly-classic/debian/rules b/test/uscan/manual-test/_dl-poly-classic/debian/rules
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/test/uscan/manual-test/_dl-poly-classic/debian/rules
diff --git a/test/uscan/manual-test/_dl-poly-classic/debian/source/format b/test/uscan/manual-test/_dl-poly-classic/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/test/uscan/manual-test/_dl-poly-classic/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/test/uscan/manual-test/_dl-poly-classic/debian/watch b/test/uscan/manual-test/_dl-poly-classic/debian/watch
new file mode 100644
index 0000000..791b6d3
--- /dev/null
+++ b/test/uscan/manual-test/_dl-poly-classic/debian/watch
@@ -0,0 +1,7 @@
+version=4
+opts="hrefdecode=percent-encoding, pgpmode=no, \
+ filenamemangle=s/.*dl_class_([\d.]+)\.tar\.gz/dl-poly-classic-$1\.tar\.gz/" \
+https://ccpforge.cse.rl.ac.uk/gf/project/dl_poly_classic/frs/ \
+ /gf/download/frsrelease/\d+/\d+/dl_class_([\d.]+)\.tar\.gz debian uupdate
+
+
diff --git a/test/uscan/manual-test/_osamu-utils/debian/changelog b/test/uscan/manual-test/_osamu-utils/debian/changelog
new file mode 100644
index 0000000..c521065
--- /dev/null
+++ b/test/uscan/manual-test/_osamu-utils/debian/changelog
@@ -0,0 +1,5 @@
+osamu-utils (0~0.0-1) unstable; urgency=medium
+
+ * dummy changelog.
+
+ -- Osamu Aoki <osamu@debian.org> Sat, 13 Jan 2018 22:48:47 +0900
diff --git a/test/uscan/manual-test/_osamu-utils/debian/rules b/test/uscan/manual-test/_osamu-utils/debian/rules
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/test/uscan/manual-test/_osamu-utils/debian/rules
diff --git a/test/uscan/manual-test/_osamu-utils/debian/source/format b/test/uscan/manual-test/_osamu-utils/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/test/uscan/manual-test/_osamu-utils/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/test/uscan/manual-test/_osamu-utils/debian/watch b/test/uscan/manual-test/_osamu-utils/debian/watch
new file mode 100644
index 0000000..30f5597
--- /dev/null
+++ b/test/uscan/manual-test/_osamu-utils/debian/watch
@@ -0,0 +1,5 @@
+version=4
+opts="mode=git,pretty=describe,pgpmode=no, \
+ uversionmangle=s/^/0.0~/" \
+ https://github.com/osamuaoki/osamu-utils.git \
+ HEAD debian uupdate
diff --git a/test/uscan/manual-test/_tweeper/debian/changelog b/test/uscan/manual-test/_tweeper/debian/changelog
new file mode 100644
index 0000000..285d2e8
--- /dev/null
+++ b/test/uscan/manual-test/_tweeper/debian/changelog
@@ -0,0 +1,5 @@
+tweeper (0~0.0-1) unstable; urgency=medium
+
+ * dummy changelog.
+
+ -- Osamu Aoki <osamu@debian.org> Sat, 13 Jan 2018 22:48:47 +0900
diff --git a/test/uscan/manual-test/_tweeper/debian/rules b/test/uscan/manual-test/_tweeper/debian/rules
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/test/uscan/manual-test/_tweeper/debian/rules
diff --git a/test/uscan/manual-test/_tweeper/debian/source/format b/test/uscan/manual-test/_tweeper/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/test/uscan/manual-test/_tweeper/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/test/uscan/manual-test/_tweeper/debian/watch b/test/uscan/manual-test/_tweeper/debian/watch
new file mode 100644
index 0000000..83948f3
--- /dev/null
+++ b/test/uscan/manual-test/_tweeper/debian/watch
@@ -0,0 +1,5 @@
+version=4
+opts="mode=git, gitmode=full, pgpmode=none" \
+http://git.ao2.it/tweeper.git \
+refs/tags/v([\d\.]+) debian uupdate
+
diff --git a/test/uscan/manual-test/_upspin/debian/changelog b/test/uscan/manual-test/_upspin/debian/changelog
new file mode 100644
index 0000000..c39d194
--- /dev/null
+++ b/test/uscan/manual-test/_upspin/debian/changelog
@@ -0,0 +1,5 @@
+upspin (0~0.0-1) unstable; urgency=medium
+
+ * dummy changelog.
+
+ -- Osamu Aoki <osamu@debian.org> Sat, 13 Jan 2018 22:48:47 +0900
diff --git a/test/uscan/manual-test/_upspin/debian/rules b/test/uscan/manual-test/_upspin/debian/rules
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/test/uscan/manual-test/_upspin/debian/rules
diff --git a/test/uscan/manual-test/_upspin/debian/source/format b/test/uscan/manual-test/_upspin/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/test/uscan/manual-test/_upspin/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/test/uscan/manual-test/_upspin/debian/watch b/test/uscan/manual-test/_upspin/debian/watch
new file mode 100644
index 0000000..42c3945
--- /dev/null
+++ b/test/uscan/manual-test/_upspin/debian/watch
@@ -0,0 +1,5 @@
+version=4
+opts="mode=git, pgpmode=none" \
+https://upspin.googlesource.com/upspin \
+HEAD debian uupdate
+
diff --git a/test/uscan/s3bucket b/test/uscan/s3bucket
new file mode 100644
index 0000000..1391f38
--- /dev/null
+++ b/test/uscan/s3bucket
@@ -0,0 +1,3 @@
+version=4
+opts="pagemangle=s%<Key>([^<]*)</Key>%<Key><a href="$1">$1</a></Key>%g" \
+http://s3.amazonaws.com/rds-downloads/RDSCli-([0-9].*).zip
diff --git a/test/wrap-and-sort/install-comments/in/install b/test/wrap-and-sort/install-comments/in/install
new file mode 100644
index 0000000..e1716b5
--- /dev/null
+++ b/test/wrap-and-sort/install-comments/in/install
@@ -0,0 +1,12 @@
+# Comment that stays in the top
+# A multiline comment should not be re-ordered
+
+# Some comment related to C
+C
+# B can have a
+# multiline comment
+B
+A
+
+
+# Not sure why anyone would finish with a comment, but it should work
diff --git a/test/wrap-and-sort/install-comments/out/install b/test/wrap-and-sort/install-comments/out/install
new file mode 100644
index 0000000..96bd150
--- /dev/null
+++ b/test/wrap-and-sort/install-comments/out/install
@@ -0,0 +1,11 @@
+# Comment that stays in the top
+# A multiline comment should not be re-ordered
+
+A
+# B can have a
+# multiline comment
+B
+# Some comment related to C
+C
+
+# Not sure why anyone would finish with a comment, but it should work